48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
"""作答记录与 AI 功能的 schema。"""
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class AttemptCreate(BaseModel):
|
|
user_answer: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class AttemptOut(BaseModel):
|
|
"""一次作答记录。is_correct 为 null 表示"已记录,尚未判分"。"""
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: str
|
|
question_id: str
|
|
user_answer: list[str] | None
|
|
is_correct: bool | None
|
|
judged_by: str
|
|
ai_feedback_markdown: str | None
|
|
created_at: datetime
|
|
|
|
|
|
class SelfJudge(BaseModel):
|
|
"""自评:用户自己判定对错,不花 AI 额度。"""
|
|
|
|
is_correct: bool
|
|
|
|
|
|
class JudgeResult(BaseModel):
|
|
"""按需判分的结果。"""
|
|
|
|
attempt_id: str
|
|
is_correct: bool | None
|
|
judged_by: str
|
|
feedback_markdown: str | None = None
|
|
key_points_missed: list[str] = Field(default_factory=list)
|
|
correct_answer: list[str] | None = None
|
|
|
|
|
|
class ExplainOut(BaseModel):
|
|
explanation_markdown: str
|
|
|
|
|
|
class TagsOut(BaseModel):
|
|
tags: list[str]
|