180 lines
4.0 KiB
Python
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] = []
|