2026-02-03 01:12:39 +08:00

84 lines
2.3 KiB
Python

"""
异步任务模型
用于管理 AI 生成等耗时任务的进度和状态
"""
from pydantic import BaseModel, Field
from typing import Optional, Dict, Any, List
from datetime import datetime
from enum import Enum
class TaskStatus(str, Enum):
"""任务状态枚举"""
PENDING = "pending" # 等待执行
RUNNING = "running" # 执行中
COMPLETED = "completed" # 完成
FAILED = "failed" # 失败
CANCELLED = "cancelled" # 已取消
class TaskType(str, Enum):
"""任务类型枚举"""
GENERATE_CHARACTERS = "generate_characters"
GENERATE_OUTLINE = "generate_outline"
GENERATE_WORLD = "generate_world"
ANALYZE_SCRIPT = "analyze_script"
WORLD_FROM_SCRIPT = "world_from_script"
GENERATE_ALL = "generate_all"
EPISODE_CREATE = "episode_create"
GENERATE_SKILL = "generate_skill"
class TaskProgress(BaseModel):
"""任务进度"""
current: int = Field(0, description="当前进度")
total: int = Field(100, description="总进度")
message: str = Field("", description="进度消息")
stage: Optional[str] = Field(None, description="当前阶段")
class AsyncTask(BaseModel):
"""异步任务"""
id: str
type: TaskType
status: TaskStatus = TaskStatus.PENDING
progress: TaskProgress = Field(default_factory=TaskProgress)
# 任务参数
params: Dict[str, Any] = Field(default_factory=dict)
# 任务结果
result: Optional[Dict[str, Any]] = None
error: Optional[str] = None
# 关联信息
project_id: Optional[str] = None
# 时间戳
created_at: datetime = Field(default_factory=datetime.now)
started_at: Optional[datetime] = None
completed_at: Optional[datetime] = None
updated_at: datetime = Field(default_factory=datetime.now)
class TaskCreateRequest(BaseModel):
"""创建任务请求"""
type: TaskType
params: Dict[str, Any] = Field(default_factory=dict)
project_id: Optional[str] = None
class TaskResponse(BaseModel):
"""任务响应"""
id: str = Field(serialization_alias="taskId")
type: TaskType
status: TaskStatus
progress: TaskProgress
params: Dict[str, Any] = Field(default_factory=dict)
result: Optional[Dict[str, Any]] = None
error: Optional[str] = None
project_id: Optional[str] = None
created_at: datetime
updated_at: datetime