PMFlow/backend/app/api/rag_api/routes_route_governance.py

82 lines
3.1 KiB
Python

from __future__ import annotations
from fastapi import Depends, HTTPException, Query
from sqlalchemy.ext.asyncio import AsyncSession
from .helpers import _resolve_tenant_id
from .shared import *
from ...dependencies.permissions import require_platform_route_governance
from ...services.adaptive_rag_service import AdaptiveRAGService
@router.get("/query-route-governance/summary")
async def get_query_route_governance_summary(
project_id: int | None = Query(default=None),
window_days: int | None = Query(default=None),
current_user: User = Depends(require_platform_route_governance),
db: AsyncSession = Depends(get_db),
tenant_id: int = Depends(get_tenant_id),
):
service = AdaptiveRAGService(db, tenant_id=_resolve_tenant_id(current_user, tenant_id))
try:
data = await service.query_route_governance_summary(
project_id=project_id,
window_days=window_days,
)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return success_response(data)
@router.get("/query-route-governance/items")
async def list_query_route_governance_records(
project_id: int | None = Query(default=None),
window_days: int | None = Query(default=None),
route_mode: str | None = Query(default=None),
decision_origin: str | None = Query(default=None),
rating: str | None = Query(default=None),
mismatch_only: bool = Query(default=False),
clarify_only: bool = Query(default=False),
search: str | None = Query(default=None),
limit: int = Query(default=20, ge=1, le=100),
offset: int = Query(default=0, ge=0),
current_user: User = Depends(require_platform_route_governance),
db: AsyncSession = Depends(get_db),
tenant_id: int = Depends(get_tenant_id),
):
service = AdaptiveRAGService(db, tenant_id=_resolve_tenant_id(current_user, tenant_id))
try:
data = await service.list_query_route_governance_records(
project_id=project_id,
window_days=window_days,
route_mode=route_mode,
decision_origin=decision_origin,
rating=rating,
mismatch_only=mismatch_only,
clarify_only=clarify_only,
search=search,
limit=limit,
offset=offset,
)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return success_response(data)
@router.get("/query-route-governance/items/{record_id}")
async def get_query_route_governance_detail(
record_id: int,
project_id: int | None = Query(default=None),
current_user: User = Depends(require_platform_route_governance),
db: AsyncSession = Depends(get_db),
tenant_id: int = Depends(get_tenant_id),
):
service = AdaptiveRAGService(db, tenant_id=_resolve_tenant_id(current_user, tenant_id))
data = await service.get_query_route_governance_detail(
record_id=record_id,
project_id=project_id,
)
if data is None:
raise HTTPException(status_code=404, detail="query route record not found")
return success_response(data)