from fastapi import APIRouter, Depends, HTTPException, status from src.server.auth.dependencies import get_current_user from src.server.schemas.rag import RagChunkResponse, RagSearchRequest, RagSearchResponse from src.server.services.rag_service import RagService router = APIRouter(prefix="/rag", tags=["rag"]) @router.post("/hybrid-search", response_model=RagSearchResponse) async def hybrid_search( request: RagSearchRequest, current_user: dict = Depends(get_current_user), ): try: results = await RagService.hybrid_search( query=request.query, match_count=request.match_count, similarity_threshold=request.similarity_threshold, filter_dict=request.filter_dict, source_filter=request.source_filter, ) parsed_results = [RagChunkResponse(**r) for r in results] return RagSearchResponse(status="success", results=parsed_results) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"RAG search failed: {str(e)}", ) from e