66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
"""AI 任务队列的数据契约和状态机常量。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
AI_TASK_STATUSES = (
|
|
"draft",
|
|
"precheck",
|
|
"queued",
|
|
"running",
|
|
"succeeded",
|
|
"failed",
|
|
"cancelled",
|
|
"device_offline",
|
|
)
|
|
|
|
TERMINAL_TASK_STATUSES = {"succeeded", "failed", "cancelled", "device_offline"}
|
|
|
|
TASK_TRANSITIONS = {
|
|
"draft": {"precheck", "cancelled"},
|
|
"precheck": {"queued", "cancelled"},
|
|
"queued": {"running", "cancelled"},
|
|
"running": {"succeeded", "failed", "cancelled", "device_offline"},
|
|
"succeeded": set(),
|
|
"failed": set(),
|
|
"cancelled": set(),
|
|
"device_offline": set(),
|
|
}
|
|
|
|
HIGH_RISK_ACTIONS = {
|
|
"send_message",
|
|
"send_group_message",
|
|
"add_friend",
|
|
"accept_friend",
|
|
"delete_friend",
|
|
"set_friend_remark",
|
|
"create_group",
|
|
"invite_to_group",
|
|
"remove_from_group",
|
|
"set_group_notice",
|
|
"set_group_name",
|
|
"delete_device",
|
|
"publish_release",
|
|
}
|
|
|
|
|
|
class AITaskCreateRequest(BaseModel):
|
|
"""创建任务的统一动作信封;设备目标必须显式提供。"""
|
|
|
|
action: str = Field(min_length=1, max_length=120)
|
|
device_id: Optional[str] = Field(default=None, min_length=1, max_length=160)
|
|
device_ids: List[str] = Field(default_factory=list, max_length=100)
|
|
platform: str = Field(default="wechat", min_length=1, max_length=40)
|
|
parameters: Dict[str, Any] = Field(default_factory=dict)
|
|
risk_level: str = Field(default="low", pattern="^(low|medium|high)$")
|
|
confirm: bool = False
|
|
timeout_ms: int = Field(default=30000, ge=1000, le=120000)
|
|
|
|
|
|
class AITaskCancelRequest(BaseModel):
|
|
reason: str = Field(default="用户取消", min_length=1, max_length=240)
|