2026-06-01 09:25:26 +08:00
|
|
|
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 = ""
|
|
|
|
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
2026-06-01 09:25:26 +08:00
|
|
|
class EvaluationResponse(BaseModel):
|
|
|
|
|
"""评价报告响应:返回结构化 AI 评价报告。"""
|
|
|
|
|
|
|
|
|
|
evaluation_id: int
|
|
|
|
|
score_type: str
|
|
|
|
|
total_score: float
|
|
|
|
|
dimension_scores: list[DimensionScore]
|
2026-06-03 15:51:46 +08:00
|
|
|
score_details: list[ScoreDetailItem] = Field(default_factory=list)
|
2026-06-01 09:25:26 +08:00
|
|
|
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
|