embedding-server / app /controllers /embed_controller.py
Faysal4200's picture
Upload 21 files
04c779b verified
Raw
History Blame Contribute Delete
1.88 kB
"""
API router for embedding endpoints.
"""
from fastapi import APIRouter, Depends, HTTPException, status
from typing import Any, Dict
from ..models.request_models import SingleRequest, BatchRequest
from ..services.async_embeddings_service import AsyncEmbeddingsService
from ..auth import api_key_guard
from ..logger import logger
router = APIRouter(prefix="/embed", tags=["embed"])
# service is a module-level singleton
service = AsyncEmbeddingsService()
@router.post("/single")
async def embed_single(req: SingleRequest, _: Any = Depends(api_key_guard)):
"""Generate embedding for one text."""
try:
emb = await service.generate_single_embedding(req.text)
return {"embedding": emb}
except ValueError as ve:
# Warning since it's a client usage error (400)
logger.warning(f"Validation Error: {ve}")
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(ve))
except Exception as e:
# Error level since it's a server failure (500)
logger.error(f"Failed /embed/single request")
# Traceback will be handled by global exception handler
raise
@router.post("/batch")
async def embed_batch(req: BatchRequest, _: Any = Depends(api_key_guard)):
"""Efficient batch embedding endpoint."""
try:
embeddings = await service.generate_batch_embeddings(req.texts)
return {"embeddings": embeddings}
except Exception as e:
logger.error(f"Failed /embed/batch request for {len(req.texts)} items")
raise
@router.get("/health")
async def health_check() -> Dict[str, Any]:
"""Verify server status and model readiness."""
return {
"status": "healthy",
"model_loaded": service.is_ready,
"device": str(service.device) if service.is_ready else "not_loaded"
}