File size: 3,246 Bytes
0231daa
 
 
 
 
 
 
155ad69
0231daa
dd7d594
0231daa
 
 
 
 
 
 
 
 
 
155ad69
 
 
 
 
376886a
155ad69
 
 
 
 
 
 
376886a
155ad69
 
0231daa
 
 
 
 
 
155ad69
0231daa
 
155ad69
 
 
376886a
0231daa
376886a
155ad69
 
58daf34
155ad69
0231daa
376886a
0231daa
 
155ad69
 
 
 
0231daa
155ad69
 
0231daa
 
31b67ca
90528a8
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
"""
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, Literal
from pydantic import BaseModel, Field
from .common import ModelInfo


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

    Attributes:
        model_id: Identifier of the model used
    """

    model: str = Field(..., description="Model identifier used")


class EmbeddingObject(BaseModel):
    """Single embedding object."""

    object: Literal["embedding"] = "embedding"
    embedding: List[float] = Field(..., description="Embedding vector")
    index: int = Field(..., description="Index of the embedding")


class TokenUsage(BaseModel):
    """Usage statistics."""

    prompt_tokens: int
    total_tokens: int


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

    Used for /embeddings endpoint dense models.

    Attributes:
        data: List of generated dense embeddings
        model: Identifier of the model used
        usage: Usage statistics

    """

    object: Literal["list"] = "list"
    data: List[EmbeddingObject]
    model: str = Field(..., description="Model identifier used")
    usage: TokenUsage = Field(..., description="Usage statistics")

    class Config:
        json_schema_extra = {
            "example": {
                "object": "list",
                "data": [
                    {"object": "embedding", "embedding": [0.1, 0.2, 0.3], "index": 0},
                    {"object": "embedding", "embedding": [0.4, 0.5, 0.6], "index": 1},
                ],
                "model": "qwen3-0.6b",
                "usage": {"prompt_tokens": 10, "total_tokens": 10},
            }
        }
        

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",
            }
        }