File size: 4,451 Bytes
0231daa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ee35e05
0231daa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ee35e05
0231daa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
"""
Response schemas for API endpoints.

This module defines all Pydantic models for API responses,
ensuring consistent output format across all endpoints.
"""

from typing import List
from pydantic import BaseModel, Field
from .common import SparseEmbedding, ModelInfo


class BaseEmbedResponse(BaseModel):
    """
    Base class for embedding responses.

    Attributes:
        model_id: Identifier of the model used
        processing_time: Time taken to process the request (seconds)
    """

    model_id: str = Field(..., description="Model identifier used")
    processing_time: float = Field(..., description="Processing time in seconds", ge=0)


class DenseEmbedResponse(BaseEmbedResponse):
    """
    Response model for single/batch dense embeddings.

    Used for /embed & /query endpoint with dense models.

    Attributes:
        embeddings: List of generated dense embedding vectors
        dimension: Dimensionality of the embeddings
        count: Number of embeddings returned
        model_id: Identifier of the model used
        processing_time: Time taken to process the request
    """

    embeddings: List[List[float]] = Field(
        ..., description="List of dense embedding vectors"
    )
    dimension: int = Field(..., description="Embedding dimensionality", ge=1)
    count: int = Field(..., description="Number of embeddings", ge=1)

    class Config:
        json_schema_extra = {
            "example": {
                "embeddings": [
                    [0.123, -0.456, 0.789],
                    [0.234, 0.567, -0.890],
                    [0.345, -0.678, 0.901],
                ],
                "dimension": 768,
                "count": 3,
                "model_id": "qwen3-0.6b",
                "processing_time": 0.1245,
            }
        }


class SparseEmbedResponse(BaseEmbedResponse):
    """
    Response model for single/batch sparse embeddings.

    Used for /embed and /query endpoint with sparse models.

    Attributes:
        embeddings: List of generated sparse embeddings
        count: Number of embeddings returned
        model_id: Identifier of the model used
        processing_time: Time taken to process the request
    """

    embeddings: List[SparseEmbedding] = Field(
        ..., description="List of sparse embeddings"
    )
    count: int = Field(..., description="Number of embeddings", ge=1)

    class Config:
        json_schema_extra = {
            "example": {
                "embeddings": [
                    {
                        "indices": [10, 25, 42],
                        "values": [0.85, 0.62, 0.91],
                        "text": "first text",
                    },
                    {
                        "indices": [15, 30, 50],
                        "values": [0.73, 0.88, 0.65],
                        "text": "second text",
                    },
                ],
                "count": 2,
                "model_id": "splade-pp-v2",
                "processing_time": 0.0892,
            }
        }


class ModelsListResponse(BaseModel):
    """
    Response model for listing available models.

    Attributes:
        models: List of available models with their info
        total: Total number of models
    """

    models: List[ModelInfo] = Field(..., description="List of available models")
    total: int = Field(..., description="Total number of models", ge=0)

    class Config:
        json_schema_extra = {
            "example": {
                "models": [
                    {
                        "id": "qwen3-0.6b",
                        "name": "Qwen/Qwen3-Embedding-0.6B",
                        "type": "embeddings",
                        "loaded": True,
                    }
                ],
                "total": 1,
            }
        }


class RootResponse(BaseModel):
    """
    Response model for root endpoint.

    Attributes:
        message: Welcome message
        version: API version
        docs_url: URL to API documentation
    """

    message: str = Field(..., description="Welcome message")
    version: str = Field(..., description="API version")
    docs_url: str = Field(..., description="Documentation URL")

    class Config:
        json_schema_extra = {
            "example": {
                "message": "Unified Embedding API - Dense & Sparse Embeddings",
                "version": "3.0.0",
                "docs_url": "/docs",
            }
        }