| import logging | |
| from typing import Any | |
| from fastapi import APIRouter | |
| from pydantic import BaseModel | |
| # Physical import from the shared volume | |
| from src.server.services.search.reranking_strategy import reranking_strategy | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter() | |
| class RerankRequest(BaseModel): | |
| query: str | |
| results: list[dict[str, Any]] | |
| content_key: str = "content" | |
| top_k: int = 5 | |
| async def rerank_documents(request: RerankRequest): | |
| """ | |
| Physically grounded reranking endpoint. | |
| Offloads heavy ML computation from main server. | |
| """ | |
| try: | |
| if not reranking_strategy.is_available(): | |
| logger.error("Reranking model not available in Agents container.") | |
| return {"success": False, "error": "ML Model not loaded"} | |
| results = await reranking_strategy.rerank_results( | |
| query=request.query, | |
| results=request.results, | |
| content_key=request.content_key, | |
| top_k=request.top_k, | |
| ) | |
| return {"success": True, "results": results} | |
| except Exception as e: | |
| logger.error(f"Remote Reranking failed: {e}") | |
| return {"success": False, "error": str(e)} | |