from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel, ConfigDict, Field from sqlmodel import Session from ..core.security import operator_auth from ..db.session import get_session from ..services import knowledge_service router = APIRouter(prefix="/api/ai/rag", dependencies=[Depends(operator_auth)]) class RagQueryRequest(BaseModel): model_config = ConfigDict(extra="forbid") question: str = Field(min_length=2, max_length=500) limit: int = Field(default=6, ge=1, le=10) @router.get("/status") def status(session: Session = Depends(get_session)): return knowledge_service.index_status(session) @router.post("/reindex") def reindex(session: Session = Depends(get_session)): return knowledge_service.rebuild_index(session) @router.post("/query") def query(payload: RagQueryRequest, session: Session = Depends(get_session)): try: return knowledge_service.query(session, payload.question, limit=payload.limit) except ValueError as exc: raise HTTPException(status_code=422, detail=str(exc)) from exc @router.get("/evaluate") def evaluate(session: Session = Depends(get_session)): return knowledge_service.evaluate_retrieval(session)