llm-ready-data / app /api /v1 /semantic_router.py
light-infer-chat's picture
ok
52e2d2c
Raw
History Blame Contribute Delete
1.42 kB
from __future__ import annotations
import time
from fastapi import APIRouter, Depends
from app.api.deps import get_embeddings_service, require_auth
from app.models.schemas import SemanticRouterRequest, SemanticRouterResponse
from app.services.embeddings_service import EmbeddingService
from app.services.semantic_router_service import SemanticRouterService
router = APIRouter()
@router.post(
"/semantic-router/route",
response_model=SemanticRouterResponse,
summary="Route a query to the best matching route using semantic similarity",
)
async def route_query(
body: SemanticRouterRequest,
token: str = Depends(require_auth),
embedding_service: EmbeddingService = Depends(get_embeddings_service),
) -> SemanticRouterResponse:
start = time.perf_counter()
svc = SemanticRouterService(embedding_service)
routes_dict = [r.model_dump() for r in body.routes]
result = svc.route(body.query, routes_dict, body.threshold)
elapsed_ms = round((time.perf_counter() - start) * 1000, 3)
return SemanticRouterResponse(
success=result["success"],
time_ms=elapsed_ms,
name=result.get("name"),
models=result.get("models", []),
error=result.get("error"),
confidence=result.get("confidence"),
margin=result.get("margin"),
threshold=result.get("threshold"),
matched_utterance=result.get("matched_utterance"),
)