xxy aa98ea2623 @
Initial commit

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
2026-06-05 18:45:29 +08:00

180 lines
4.0 KiB
Python

"""
schemas/write.py
后评价报告项目相关的 Pydantic 数据模型。
"""
from __future__ import annotations
from typing import Any, List, Optional
from pydantic import BaseModel
# ---------- 版本 ----------
class DocVersion(BaseModel):
id: str
version: str
content: str
savedAt: str
author: str
note: Optional[str] = ""
citationPayload: Optional[dict[str, Any]] = None
# ---------- 文档 ----------
class WriteDocument(BaseModel):
id: str
title: str
content: str
wordCount: int
createdAt: str
updatedAt: str
projectId: str
status: str # draft | review | published
versions: List[DocVersion] = []
class WriteDocumentSummary(BaseModel):
"""列表页只返回摘要,不含 content 正文"""
id: str
title: str
wordCount: int
createdAt: str
updatedAt: str
projectId: str
status: str
# ---------- 项目 ----------
class WriteProject(BaseModel):
id: str
uuid: str # 项目唯一标识,与 kb 共用
name: str
description: Optional[str] = ""
createdAt: str
updatedAt: str
docCount: int
status: str # active | archived
kbProjectId: Optional[str] = None
color: str
documents: List[WriteDocument] = []
class WriteProjectSummary(BaseModel):
"""列表页摘要,不含 documents"""
id: str
uuid: Optional[str] = None # 项目唯一标识,用于 URL 参数;兼容旧数据
name: str
description: Optional[str] = ""
createdAt: str
updatedAt: str
docCount: int
status: str
kbProjectId: Optional[str] = None
color: str
# ---------- 创建 / 更新请求体 ----------
class WriteProjectCreate(BaseModel):
name: str
description: Optional[str] = ""
kbProjectId: Optional[str] = None
color: Optional[str] = "#3b82f6"
class WriteProjectUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
status: Optional[str] = None
kbProjectId: Optional[str] = None
color: Optional[str] = None
class WriteDocumentCreate(BaseModel):
title: str
content: Optional[str] = ""
class WriteDocumentUpdate(BaseModel):
title: Optional[str] = None
content: Optional[str] = None
status: Optional[str] = None
class DocVersionCreate(BaseModel):
version: Optional[str] = None
content: str
author: str
note: Optional[str] = ""
citationPayload: Optional[dict[str, Any]] = None
# ---------- 章节审查(智能体) ----------
class ChapterReviewRequest(BaseModel):
"""章节智能审查请求体:选择章节 + 输入待审查文本。"""
chapter: str # "1"~"6"
content: str
class ChapterReviewResponse(BaseModel):
"""章节智能审查响应体:返回 Markdown 审查报告。"""
success: bool = True
chapter: str
review: str
model: Optional[str] = None
message: Optional[str] = ""
class GenerateReportJobCreate(BaseModel):
templateId: Optional[str] = None
topK: int = 10
class GenerateReportChapterItem(BaseModel):
sectionKey: str
sectionTitle: str
sectionOrder: int
status: str
updatedAt: Optional[str] = None
errorMessage: Optional[str] = None
class GenerateReportJobItem(BaseModel):
jobId: str
projectId: str
templateId: Optional[str] = None
status: str
progress: int
currentSectionKey: Optional[str] = None
errorMessage: Optional[str] = None
createdAt: Optional[str] = None
updatedAt: Optional[str] = None
completedAt: Optional[str] = None
chapters: List[GenerateReportChapterItem] = []
class GenerateReportResultChapter(BaseModel):
sectionKey: str
sectionTitle: str
sectionOrder: int
status: str
content: Optional[str] = None
errorMessage: Optional[str] = None
promptText: Optional[str] = None
evidencePayload: Optional[dict] = None
validationPayload: Optional[dict] = None
class GenerateReportResult(BaseModel):
jobId: str
status: str
report: Optional[str] = None
consistency: List[str] = []
chapters: List[GenerateReportResultChapter] = []