PMFlow/backend/app/schemas/query_route_governance.py

69 lines
2.2 KiB
Python

"""Query route governance read schemas."""
from __future__ import annotations
from typing import Any, Optional
from pydantic import BaseModel, Field
class QueryRouteGovernanceBucketRead(BaseModel):
key: str = Field(..., min_length=1, max_length=64)
label: str = Field(..., min_length=1, max_length=120)
count: int = Field(default=0, ge=0)
class QueryRouteGovernanceKPIRead(BaseModel):
total_records: int = Field(default=0, ge=0)
mismatch_count: int = Field(default=0, ge=0)
clarify_count: int = Field(default=0, ge=0)
negative_feedback_count: int = Field(default=0, ge=0)
internal_count: int = Field(default=0, ge=0)
external_count: int = Field(default=0, ge=0)
uncertain_count: int = Field(default=0, ge=0)
class QueryRouteGovernanceSummaryRead(BaseModel):
window_days: int = Field(..., ge=1, le=90)
project_id: Optional[int] = None
kpis: QueryRouteGovernanceKPIRead
route_modes: list[QueryRouteGovernanceBucketRead] = Field(default_factory=list)
decision_origins: list[QueryRouteGovernanceBucketRead] = Field(default_factory=list)
class QueryRouteGovernanceRecordRead(BaseModel):
id: int
qa_record_id: int
project_id: Optional[int] = None
session_id: Optional[int] = None
session_title: Optional[str] = None
question_text: str
route_mode_predicted: str
route_mode_effective: str
decision_origin: Optional[str] = None
reply_mode: Optional[str] = None
feedback_rating: Optional[str] = None
feedback_helpfulness: Optional[str] = None
is_route_mismatch: bool = False
is_clarify: bool = False
anchor_summary: Optional[str] = None
answer_mode: Optional[str] = None
grounding_status: Optional[str] = None
asked_via: Optional[str] = None
created_at: Optional[str] = None
updated_at: Optional[str] = None
class QueryRouteGovernanceListRead(BaseModel):
items: list[QueryRouteGovernanceRecordRead] = Field(default_factory=list)
total: int = Field(default=0, ge=0)
limit: int = Field(default=20, ge=1, le=100)
offset: int = Field(default=0, ge=0)
class QueryRouteGovernanceDetailRead(BaseModel):
record: QueryRouteGovernanceRecordRead
qa_record: dict[str, Any]
route_memory: dict[str, Any]