98 lines
2.6 KiB
Python
98 lines
2.6 KiB
Python
"""
|
||
知识加工任务模型
|
||
"""
|
||
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
|