| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- """公共数据模型"""
- from __future__ import annotations
- from datetime import datetime
- from enum import Enum
- from typing import Any
- from pydantic import BaseModel, Field
- # ---- 枚举 ----
- class ToolStatus(str, Enum):
- ACTIVE = "active"
- INACTIVE = "inactive"
- STAGING = "staging"
- BUILDING = "building"
- class BackendRuntime(str, Enum):
- """工具后端执行环境(调用层统一为本地 Python/FastAPI)"""
- LOCAL = "local" # 本地 Python 运行时(纯 uv 子进程)
- DOCKER = "docker" # Docker 容器运行时
- REMOTE = "remote" # 云端 API / 远程服务后端
- class MessageType(str, Enum):
- TOOL_REQUEST = "tool_request"
- TOOL_READY = "tool_ready"
- TOOL_ERROR = "tool_error"
- HEALTH_ALERT = "health_alert"
- class ContainerStatus(str, Enum):
- RUNNING = "running"
- DESTROYED = "destroyed"
- # ---- 工具元信息(纯元数据,不含运行时) ----
- class ToolMeta(BaseModel):
- """工具元信息 — 只描述工具是什么,不管在哪跑"""
- model_config = {"extra": "ignore"} # 兼容旧 registry.json 中的多余字段
- tool_id: str
- name: str
- category: str = "" # 功能领域分类(保留向后兼容)
- description: str = ""
- input_schema: dict[str, Any] = Field(default_factory=dict)
- output_schema: dict[str, Any] = Field(default_factory=dict)
- stream_support: bool = False
- status: ToolStatus = ToolStatus.ACTIVE
- # 新增字段(向后兼容)
- backend_runtime: BackendRuntime | None = None # 后端执行环境
- provider_ids: list[str] = Field(default_factory=list) # 工具提供方
- capability_ids: list[str] = Field(default_factory=list) # 工具解决的原子能力
- knowledge_ids: list[str] = Field(default_factory=list) # 工具挂载的知识资产
- # ---- 容器信息(Docker 运行时,独立于工具元数据) ----
- class ContainerInfo(BaseModel):
- container_id: str
- tool_id: str = ""
- image: str = ""
- port_mapping: dict[int, int] = Field(default_factory=dict)
- volumes: dict[str, str] = Field(default_factory=dict)
- mem_limit: str = "1g"
- nano_cpus: int = 1_000_000_000
- use_gpu: bool = False
- gpu_count: int = -1
- status: ContainerStatus = ContainerStatus.RUNNING
- created_at: datetime | None = None
- last_accessed: datetime | None = None
- destroyed_at: datetime | None = None
- # ---- 请求/响应 ----
- class InvokeRequest(BaseModel):
- params: dict[str, Any] = Field(default_factory=dict)
- stream: bool = False
- class InvokeResponse(BaseModel):
- status: str = "success"
- result: Any = None
- error: str | None = None
- class ToolRequest(BaseModel):
- """外部提交新工具需求"""
- description: str
- callback_url: str | None = None
- class TaskStatus(BaseModel):
- task_id: str
- status: str = "pending"
- result: Any = None
- # ---- 内部消息 ----
- class AgentMessage(BaseModel):
- type: MessageType
- payload: dict[str, Any] = Field(default_factory=dict)
|