from __future__ import annotations from typing import List, Optional from pydantic import BaseModel class TemplateSectionItem(BaseModel): id: str sectionKey: str sectionTitle: str # 复刻 eval_report:章节提示词 / 输出合同 / 示例 sectionPrompt: Optional[str] = None sectionOutputContract: Optional[str] = None sectionOrder: int = 0 examples: Optional[str] = None class TemplateItem(BaseModel): id: str name: str description: Optional[str] = None sourceFile: Optional[str] = None createdAt: Optional[str] = None updatedAt: Optional[str] = None isDefault: bool = False isActive: bool = True sections: List[TemplateSectionItem] = [] class SectionReferenceItem(BaseModel): id: str templateId: Optional[str] = None sourceFile: str sectionKey: str sectionTitle: str sectionOrder: int = 0 contentLength: int = 0 content: str = "" class UploadTemplateResult(BaseModel): """上传解析结果:模板(目录 + 声明)+ 入库的章节内容。""" template: TemplateItem sourceFile: str markdownLength: int totalSections: int totalReferences: int references: List[SectionReferenceItem] = [] parseWarnings: List[str] = []