"""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]