Files
workphone-sdk/sdk/app/models/ai_tasks.py

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)