from datetime import datetime from pydantic import BaseModel, Field class CreateEvaluationRequest(BaseModel): """评价生成入参:指定输出分数类型。""" score_type: str = Field(default="percentage", pattern="^(percentage|five_point)$") class DimensionScore(BaseModel): """维度评分:保存单个评分维度的分数、满分和评价。""" dimension: str score: float max_score: float comment: str evidence: list[str] = Field(default_factory=list) deductions: list[str] = Field(default_factory=list) improvement: str = "" class ScoreDetailItem(BaseModel): """评分明细:对应 training_score_detail 的单条评分细则。""" id: int | None = None record_id: int | None = None rule_id: int | None = None dimension: str score: float | None = None deducted_reason: str | None = None evidence_message_ids: list = Field(default_factory=list) ai_confidence: float | None = None comment: str | None = None class EvaluationResponse(BaseModel): """评价报告响应:返回结构化 AI 评价报告。""" evaluation_id: int score_type: str total_score: float dimension_scores: list[DimensionScore] score_details: list[ScoreDetailItem] = Field(default_factory=list) errors: list[dict] improvement_plan: list[str] evidence_summary: list[str] guideline_refs: list[dict] overall_comment: str class EvaluationListItem(BaseModel): """历史评价列表项:按 user_id 查询完整训练后的评价记录。""" evaluation_id: int case_title: str score_type: str total_score: float created_at: datetime pdf_exported: bool class EvaluationListResponse(BaseModel): """历史评价列表响应。""" items: list[EvaluationListItem] class ExportPdfResponse(BaseModel): """PDF 导出响应:返回导出记录和本地文件路径。""" export_id: int file_path: str class EvaluationDetailResponse(EvaluationResponse): """评价详情响应:在报告详情页使用。""" session_id: int case_id: int case_title: str created_at: datetime pdf_file_path: str | None = None