83 lines
3.0 KiB
Python
83 lines
3.0 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_manager_user
|
|
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_manager_user),
|
|
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_manager_user),
|
|
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_manager_user),
|
|
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)
|
|
|