update:1.小说项目创建支持双模式生成,大纲-章节(一对一&一对多) 2.新增章节管理-编辑章节规划功能 3.修复灵感模式可重复点击选项问题,刷新对话内容丢失问题
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"""章节相关的Pydantic模型"""
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
from typing import Optional, List, Dict, Any
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
@@ -118,4 +118,48 @@ class BatchGenerateStatusResponse(BaseModel):
|
||||
created_at: Optional[str] = None
|
||||
started_at: Optional[str] = None
|
||||
completed_at: Optional[str] = None
|
||||
error_message: Optional[str] = None
|
||||
error_message: Optional[str] = None
|
||||
|
||||
|
||||
class SceneData(BaseModel):
|
||||
"""场景数据模型"""
|
||||
location: str = Field(..., description="场景地点")
|
||||
characters: List[str] = Field(..., description="参与角色列表")
|
||||
purpose: str = Field(..., description="场景目的")
|
||||
|
||||
|
||||
class ExpansionPlanUpdate(BaseModel):
|
||||
"""章节规划更新模型"""
|
||||
key_events: Optional[List[str]] = Field(None, description="关键事件列表")
|
||||
character_focus: Optional[List[str]] = Field(None, description="涉及角色列表")
|
||||
emotional_tone: Optional[str] = Field(None, description="情感基调")
|
||||
narrative_goal: Optional[str] = Field(None, description="叙事目标")
|
||||
conflict_type: Optional[str] = Field(None, description="冲突类型")
|
||||
estimated_words: Optional[int] = Field(None, description="预估字数", ge=500, le=10000)
|
||||
scenes: Optional[List[SceneData]] = Field(None, description="场景列表")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"key_events": ["主角遇到挑战", "关键决策时刻"],
|
||||
"character_focus": ["张三", "李四"],
|
||||
"emotional_tone": "紧张激烈",
|
||||
"narrative_goal": "推进主线剧情",
|
||||
"conflict_type": "内心冲突",
|
||||
"estimated_words": 3000,
|
||||
"scenes": [
|
||||
{
|
||||
"location": "城市广场",
|
||||
"characters": ["张三", "李四"],
|
||||
"purpose": "初次相遇"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ExpansionPlanResponse(BaseModel):
|
||||
"""章节规划响应模型"""
|
||||
id: str = Field(..., description="章节ID")
|
||||
expansion_plan: Optional[Dict[str, Any]] = Field(None, description="规划数据")
|
||||
message: str = Field(..., description="响应消息")
|
||||
@@ -1,6 +1,6 @@
|
||||
"""项目相关的Pydantic模型"""
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
from typing import Optional, Literal
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
@@ -11,6 +11,10 @@ class ProjectBase(BaseModel):
|
||||
theme: Optional[str] = Field(None, description="主题")
|
||||
genre: Optional[str] = Field(None, description="小说类型")
|
||||
target_words: Optional[int] = Field(None, description="目标字数")
|
||||
outline_mode: Literal["one-to-one", "one-to-many"] = Field(
|
||||
default="one-to-many",
|
||||
description="大纲章节模式: one-to-one(传统模式,1大纲→1章节) 或 one-to-many(细化模式,1大纲→N章节)"
|
||||
)
|
||||
|
||||
|
||||
class ProjectCreate(ProjectBase):
|
||||
@@ -51,6 +55,7 @@ class ProjectResponse(ProjectBase):
|
||||
chapter_count: Optional[int] = None
|
||||
narrative_perspective: Optional[str] = None
|
||||
character_count: Optional[int] = None
|
||||
outline_mode: str # 显式声明以确保响应中包含
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@@ -73,6 +78,10 @@ class ProjectWizardRequest(BaseModel):
|
||||
narrative_perspective: str = Field(..., description="叙事视角")
|
||||
character_count: int = Field(5, ge=5, description="角色数量(至少5个)")
|
||||
target_words: Optional[int] = Field(None, description="目标字数")
|
||||
outline_mode: Literal["one-to-one", "one-to-many"] = Field(
|
||||
default="one-to-many",
|
||||
description="大纲章节模式"
|
||||
)
|
||||
|
||||
|
||||
class WorldBuildingResponse(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user