from pydantic import BaseModel, Field from typing import Any class AIRequest(BaseModel): prompt: str = Field(..., min_length=1, description="AI请求内容") context: dict[str, Any] = Field(default_factory=dict, description="上下文信息") stream: bool = Field(default=False, description="是否流式返回") class EssayGradeRequest(BaseModel): essay_text: str = Field(..., min_length=10, description="作文文本") grade_level: str = Field(default="初中", description="年级段") essay_type: str = Field(default="记叙文", description="作文类型") total_score: int = Field(default=50, description="满分") class ExamGenerateRequest(BaseModel): subject: str = Field(..., min_length=1) grade: str = "" knowledge_points: list[str] = [] difficulty: str = Field(default="medium", pattern=r"^(easy|medium|hard)$") question_types: list[str] = Field(default=["choice"]) count: int = Field(default=10, ge=1, le=50) total_score: int = Field(default=100) class HtmlExportRequest(BaseModel): title: str = Field(default="教学内容", max_length=200) html: str = Field(..., min_length=1) class ExamExportRequest(BaseModel): title: str = Field(default="试卷", max_length=200) subject: str = "" grade: str = "" questions: list[dict[str, Any]] = [] answers: list[Any] = []