Files
RekomenciBackend/src/template_project/ml/routes/embed.py
T
2025-11-22 19:06:02 +03:00

45 lines
1.3 KiB
Python

from dishka import FromDishka
from dishka.integrations.fastapi import DishkaRoute
from fastapi import APIRouter
from pydantic import BaseModel, Field
from template_project.application.common.embedding import Embedder
router = APIRouter(route_class=DishkaRoute, tags=["Embedding"])
class GetEmbeddingRequest(BaseModel):
text: str = Field(
..., min_length=1, description="Text to encode", examples=["python backend developer with django"]
)
model_config = {"json_schema_extra": {"example": {"text": "python backend developer with django"}}}
class GetEmbeddingResponse(BaseModel):
embedding: list[float] = Field(..., description="Embedding vector")
model_config = {
"json_schema_extra": {
"example": {
"embedding": [0.1, 0.2, 0.3, 0.4, 0.5],
}
}
}
@router.post(
"/get_embedding",
summary="Get embedding",
description="Encode text into embedding vector",
responses={
200: {"description": "Embedding generated successfully", "model": GetEmbeddingResponse},
},
)
async def get_embedding(
request: GetEmbeddingRequest,
embedder: FromDishka[Embedder],
) -> GetEmbeddingResponse:
embedding = await embedder.encode(request.text)
return GetEmbeddingResponse(embedding=embedding)