""" 知识加工任务模型 """ from datetime import datetime from typing import Optional, List from pydantic import BaseModel, Field from enum import Enum class TaskType(str, Enum): """任务类型枚举""" MERGE = "merge" COMPARE = "compare" SUMMARY = "summary" CUSTOM = "custom" class TaskStatus(str, Enum): """任务状态枚举""" PENDING = "pending" PROCESSING = "processing" COMPLETED = "completed" FAILED = "failed" class KnowledgeProcessingTask(BaseModel): """知识加工任务模型""" id: Optional[int] = None user_id: int knowledge_base_id: int task_name: str = Field(..., max_length=255) instruction: str file_ids: List[int] task_type: TaskType status: TaskStatus = TaskStatus.PENDING result: Optional[str] = None result_file_url: Optional[str] = None error_message: Optional[str] = None created_at: Optional[datetime] = None updated_at: Optional[datetime] = None started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class Config: from_attributes = True class TaskCreateRequest(BaseModel): """创建任务请求模型""" task_name: str = Field(..., max_length=255, description="任务名称") instruction: str = Field(..., min_length=1, description="加工指令") file_ids: List[int] = Field(..., min_items=1, description="文件ID列表(至少1个)") task_type: Optional[TaskType] = Field(TaskType.CUSTOM, description="任务类型(可选,默认为custom)") class TaskResponse(BaseModel): """任务响应模型""" id: int task_name: str instruction: str file_ids: List[int] task_type: str status: str result: Optional[str] = None result_file_url: Optional[str] = None error_message: Optional[str] = None created_at: datetime updated_at: datetime started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class Config: from_attributes = True class TaskListResponse(BaseModel): """任务列表响应模型""" total: int = Field(..., description="总数量") items: List[TaskResponse] = Field(..., description="任务列表") class Config: from_attributes = True class TaskStatusResponse(BaseModel): """任务状态响应模型(用于轮询)""" id: int status: str result: Optional[str] = None result_file_url: Optional[str] = None error_message: Optional[str] = None updated_at: datetime started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class Config: from_attributes = True