from pydantic import BaseModel, Field class LearningAssistantSessionCreateRequest(BaseModel): """学习助手会话创建请求:进入 AI 学习助手页面时初始化短期问答会话。""" title: str | None = Field(default=None, max_length=100, description="会话标题,前端可不传") class LearningAssistantSessionResponse(BaseModel): """学习助手会话响应:返回前端后续流式问答需要使用的会话 ID。""" assistant_session_id: str user_id: str institution_id: int | None = None institution_name: str | None = None title: str status: str created_at: str updated_at: str expires_in_seconds: int class LearningAssistantChatRequest(BaseModel): """学习助手问答请求:普通用户面向机构知识库提出医学学习问题。""" question: str = Field(..., min_length=1, max_length=1000, description="用户问题") top_k: int | None = Field(default=None, ge=1, le=10, description="最终返回给 LLM 的来源片段数") score_threshold: float | None = Field(default=None, ge=0, le=1, description="向量相似度过滤阈值") class LearningAssistantSource(BaseModel): """学习助手来源:记录 PDF 文档、页码和引用片段。""" document_id: int document_title: str | None = None file_name: str page_start: int page_end: int chunk_uid: str score: float quote: str