ADK-gateway/backend/app/models/schemas.py
2026-08-05 16:33:27 +08:00

96 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Pydantic 数据模型。"""
import time
import uuid
from typing import Any
from pydantic import BaseModel, Field
from app.constants import AgentStatus, TaskStatus
def new_request_id() -> str:
return uuid.uuid4().hex
# ---------- 任务 ----------
class TaskSubmit(BaseModel):
"""CLI 任务上报请求体。"""
auth: str = Field(..., description="网关认证密码,需与 GATEWAY_AUTH 一致")
request_id: str | None = Field(default=None, description="幂等键,不传则自动生成")
task_type: str = Field(..., description="任务类型,如 compile/build/test")
task_tags: list[str] = Field(default_factory=list, description="任务能力标签")
description: str | None = Field(default=None, description="任务描述")
payload: dict[str, Any] = Field(default_factory=dict, description="任务载荷")
cli_session_id: str | None = Field(default=None, description="CLI 会话标识")
timeout: int = Field(default=0, description="超时秒数0 使用默认值")
local_workdir: str | None = Field(default=None, description="本地工作目录信息")
class TaskInfo(BaseModel):
request_id: str
task_type: str
task_tags: list[str] = Field(default_factory=list)
description: str | None = None
payload: dict[str, Any] = Field(default_factory=dict)
status: TaskStatus = TaskStatus.PENDING
agent_id: str | None = None
cli_session_id: str | None = None
create_time: float = Field(default_factory=time.time)
timeout: int = 0
progress: int = 0
result: dict[str, Any] | None = None
error_info: str | None = None
# ---------- Agent ----------
class AgentRegister(BaseModel):
"""Agent 启动注册请求体。"""
auth: str = Field(..., description="网关认证密码,需与 GATEWAY_AUTH 一致")
agent_id: str
endpoint: str
agent_tags: list[str] = Field(default_factory=list)
max_concurrent: int = Field(default=1, ge=1)
current_load: int = Field(default=0, ge=0)
priority: int = Field(default=3, ge=1, le=5, description="调度优先级,越小越先分配")
class AgentHeartbeat(BaseModel):
auth: str = Field(..., description="网关认证密码,需与 GATEWAY_AUTH 一致")
agent_id: str
current_load: int = Field(default=0, ge=0)
class AgentInfo(BaseModel):
agent_id: str
endpoint: str
agent_tags: list[str] = Field(default_factory=list)
max_concurrent: int = 1
current_load: int = 0
priority: int = Field(default=3, ge=1, le=5, description="调度优先级,越小越先分配")
last_heartbeat: float = Field(default_factory=time.time)
status: AgentStatus = AgentStatus.READY
create_time: float = Field(default_factory=time.time)
# ---------- 结果回传 ----------
class TaskResult(BaseModel):
auth: str = Field(..., description="网关认证密码,需与 GATEWAY_AUTH 一致")
request_id: str
agent_id: str
status: TaskStatus = TaskStatus.SUCCESS
progress: int = Field(default=100, ge=0, le=100)
result: dict[str, Any] | None = None
error_info: str | None = None
# ---------- 日志 ----------
class LogEntry(BaseModel):
ts: float = Field(default_factory=time.time)
level: str = "info"
source: str = "gateway" # gateway / agent / cli / admin
scope: str = "task" # task / agent / system
request_id: str | None = None
agent_id: str | None = None
message: str