You've already forked RekomenciBackend
45 lines
1.3 KiB
Python
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)
|