Spaces:
Sleeping
Sleeping
| from typing import Dict, List, Optional | |
| import httpx | |
| import os | |
| # 假设 agent_manager 的 models.py 可以在这里被导入,或者我们重新定义需要的模型 | |
| # 为了避免循环依赖,这里直接定义需要的模型,或者从一个共享的包中导入 | |
| from pydantic import BaseModel | |
| class AgentInfo(BaseModel): | |
| id: str | |
| agent_type: str | |
| mcp_endpoint: str | |
| status: str | |
| created_at: str | |
| last_heartbeat: str | |
| metadata: Dict = {} | |
| class CreateAgentRequest(BaseModel): | |
| agent_type: str | |
| image_name: str | |
| env_vars: Dict[str, str] = {} | |
| resource_limits: Dict = {} | |
| config: Dict = {} | |
| class AgentManagerClient: | |
| def __init__(self, base_url: str): | |
| self.base_url = base_url | |
| self.client = httpx.AsyncClient() | |
| async def create_agent(self, request: CreateAgentRequest) -> AgentInfo: | |
| """ | |
| 向 Agent Manager 请求创建一个新的 Agent 实例。 | |
| """ | |
| response = await self.client.post(f"{self.base_url}/agents", json=request.dict()) | |
| response.raise_for_status() | |
| return AgentInfo(**response.json()) | |
| async def get_agent_info(self, agent_id: str) -> AgentInfo: | |
| """ | |
| 从 Agent Manager 获取指定 Agent 实例的详细信息。 | |
| """ | |
| response = await self.client.get(f"{self.base_url}/agents/{agent_id}") | |
| response.raise_for_status() | |
| return AgentInfo(**response.json()) | |
| async def list_agents(self, agent_type: Optional[str] = None) -> List[AgentInfo]: | |
| """ | |
| 从 Agent Manager 列出所有活跃的 Agent 实例。 | |
| """ | |
| params = {"agent_type": agent_type} if agent_type else {} | |
| response = await self.client.get(f"{self.base_url}/agents", params=params) | |
| response.raise_for_status() | |
| return [AgentInfo(**agent_data) for agent_data in response.json()] | |
| async def destroy_agent(self, agent_id: str) -> bool: | |
| """ | |
| 向 Agent Manager 请求销毁一个 Agent 实例。 | |
| """ | |
| response = await self.client.delete(f"{self.base_url}/agents/{agent_id}") | |
| response.raise_for_status() | |
| return response.status_code == 204 # No Content | |
| async def stop_agent(self, agent_id: str) -> bool: | |
| """ | |
| 向 Agent Manager 请求停止一个 Agent 实例。 | |
| """ | |
| response = await self.client.post(f"{self.base_url}/agents/{agent_id}/stop") | |
| response.raise_for_status() | |
| return response.status_code == 200 # OK | |
| # 示例用法 (在实际 RootAgent 中使用) | |
| # AGENT_MANAGER_BASE_URL = os.getenv("AGENT_MANAGER_BASE_URL", "http://localhost:7860") | |
| # agent_manager_client = AgentManagerClient(base_url=AGENT_MANAGER_BASE_URL) | |