import logging from fastapi import APIRouter, HTTPException from config import settings from models.requests import QueryRequest from models.responses import QueryResponse, SourceInfo from services.llm_client import LLMClient from services.rag_pipeline import rag_query logger = logging.getLogger(__name__) router = APIRouter(tags=["query"]) @router.post("/query", response_model=QueryResponse) async def query_rag(request: QueryRequest): from main import vectorstore_service if vectorstore_service is None: raise HTTPException(status_code=503, detail="Service not ready") if not settings.deepseek_api_key: raise HTTPException(status_code=500, detail="DEEPSEEK_API_KEY not configured") llm_client = LLMClient() try: result = await rag_query( vectorstore=vectorstore_service, llm_client=llm_client, question=request.text, top_k=request.top_k, document_ids=request.document_ids, temperature=request.temperature, max_tokens=request.max_tokens, ) except Exception as e: logger.exception("RAG query failed") raise HTTPException(status_code=500, detail=f"RAG query error: {e}") return QueryResponse( answer=result["answer"], sources=[SourceInfo(**s) for s in result["sources"]], model_used=result["model_used"], assembled_prompt=result.get("assembled_prompt", ""), )