Files
doc-forge/backend/schemas/schemas.py
T
2026-07-05 23:35:00 +08:00

133 lines
3.3 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional, Any
from datetime import datetime
class Response(BaseModel):
code: int = 0
data: Any = None
message: str = "ok"
class PageData(BaseModel):
items: list = []
total: int = 0
page: int = 1
page_size: int = 20
# 模板
class TemplateCreate(BaseModel):
name: str
description: str = ""
class TemplateOut(BaseModel):
id: int
name: str
description: str = ""
file_path: str = ""
paragraph_count: int = 0
status: str = "draft"
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class ParagraphConfig(BaseModel):
id: int = 0
sort_index: int = 0
anchor_title: str = ""
title: str = ""
content: str = ""
edit_mode: str = "manual"
write_mode: str = "replace_section"
model_id: Optional[int] = None
need_prompt: bool = True
prompt_text: str = ""
need_file: bool = False
file_note: str = ""
output_format: str = "text"
class TemplateBlockConfig(BaseModel):
id: int = 0
source_paragraph_id: Optional[int] = None
parent_block_id: Optional[int] = None
sort_index: int = 0
block_type: str = "text"
anchor_ref: str = ""
title: str = ""
content_json: dict[str, Any] = Field(default_factory=dict)
style_json: str = "{}"
edit_mode: str = "manual"
placeholder_key: str = ""
variable_key: str = ""
default_value: str = ""
model_id: Optional[int] = None
need_prompt: bool = True
prompt_text: str = ""
need_file: bool = False
file_note: str = ""
output_format: str = "text"
class TemplateSave(BaseModel):
save_mode: str = "paragraph"
paragraphs: list[ParagraphConfig] = []
blocks: list[TemplateBlockConfig] = []
# 模型
class AiModelCreate(BaseModel):
name: str
provider: str = ""
api_format: str = "openai"
api_endpoint: str = ""
api_key: str = ""
supports_streaming: bool = False
enable_reasoning: bool = False
status: str = "enabled"
class AiModelUpdate(BaseModel):
name: Optional[str] = None
provider: Optional[str] = None
api_format: Optional[str] = None
api_endpoint: Optional[str] = None
api_key: str = ""
supports_streaming: Optional[bool] = None
enable_reasoning: Optional[bool] = None
status: Optional[str] = None
class AiModelOut(BaseModel):
id: int
name: str
provider: str = ""
api_format: str = "openai"
api_endpoint: str = ""
api_key_preview: str = ""
supports_streaming: bool = False
enable_reasoning: bool = False
status: str = "enabled"
created_at: Optional[datetime] = None
# 生成
class GenerateTestRequest(BaseModel):
paragraph_id: int
template_id: int
prompt_text: str = ""
model_id: int = 0
file_paths: list[str] = []
class GenerateFullRequest(BaseModel):
template_id: int
file_map: dict[str, list[str]] = {} # paragraph_id -> file_paths
class ReferenceFileUpdate(BaseModel):
file_name: str = Field(min_length=1, max_length=255)
class DocumentOut(BaseModel):
id: int
template_id: int
name: str
para_count_done: int = 0
para_count_total: int = 0
status: str = "pending"
file_path: str = ""
error: str = ""
created_at: Optional[datetime] = None