feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理

This commit is contained in:
2026-08-12 13:30:55 +08:00
parent 7958850bb2
commit 598b46bc2e
+77
View File
@@ -0,0 +1,77 @@
"""Task schemas."""
from pydantic import BaseModel, Field
from typing import Optional, Any
from datetime import datetime
class TaskCreate(BaseModel):
title: str = Field(..., min_length=1, max_length=500)
description: str = ""
priority: str = "medium"
task_type: str = "single_call"
input_data: str = "" # JSON string: {prompt, context, parameters}
requires_review: bool = True
assignee_id: Optional[int] = None
worker_id: Optional[int] = None
due_date: Optional[datetime] = None
depends_on: str = "[]"
class TaskUpdate(BaseModel):
title: Optional[str] = None
description: Optional[str] = None
status: Optional[str] = None
priority: Optional[str] = None
assignee_id: Optional[int] = None
worker_id: Optional[int] = None
input_data: Optional[str] = None
requires_review: Optional[bool] = None
due_date: Optional[datetime] = None
depends_on: Optional[str] = None
class TaskAssign(BaseModel):
assignee_id: Optional[int] = None
worker_id: Optional[int] = None
class TaskExecute(BaseModel):
"""Trigger task execution."""
override_input: Optional[str] = None # override task input_data
max_retries: int = 3
class TaskResponse(BaseModel):
id: int
project_id: int
title: str
description: str
status: str
priority: str
assignee_id: Optional[int] = None
worker_id: Optional[int] = None
task_type: str
input_data: str
output_data: Optional[str] = None
requires_review: bool
review_status: Optional[str] = None
due_date: Optional[datetime] = None
started_at: Optional[datetime] = None
completed_at: Optional[datetime] = None
tenant_id: int
created_at: datetime
updated_at: datetime
model_config = {"from_attributes": True}
class TaskExecutionResult(BaseModel):
"""Result of executing a task via AI Worker."""
task_id: int
status: str # success, error, needs_review
output: str = ""
token_usage: int = 0
cost_cents: int = 0
duration_ms: int = 0
error: Optional[str] = None
artifact_id: Optional[int] = None