""" Gateway 通用工具函数 这些函数不依赖任何特定的 Agent 框架,可以被任何 Agent 直接使用。 各框架可以将这些函数包装成自己的工具格式。 """ import uuid from typing import Any, Dict, List, Optional from .client import GatewayClient, AgentCard async def send_message( gateway_url: str, from_agent_id: str, to_agent_id: str, message: str, conversation_id: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None ) -> Dict[str, Any]: """ 发送消息到其他 Agent(通用函数) Args: gateway_url: Gateway 地址 from_agent_id: 发送方 Agent ID to_agent_id: 接收方 Agent ID message: 消息内容(文本) conversation_id: 对话 ID(可选,不提供则新建) metadata: 元数据 Returns: 发送结果,包含 conversation_id, message_id 等 """ # 生成对话 ID conv_id = conversation_id or f"conv-{uuid.uuid4()}" # 创建临时客户端 agent_card = AgentCard( agent_id=from_agent_id, agent_name=from_agent_id ) async with GatewayClient(gateway_url=gateway_url, agent_card=agent_card) as client: result = await client.send_message( to_agent_id=to_agent_id, content=[{"type": "text", "text": message}], conversation_id=conv_id, metadata=metadata ) return { "conversation_id": conv_id, "message_id": result.get("message_id"), "status": result.get("status", "sent"), "to_agent": to_agent_id } async def send_multimodal_message( gateway_url: str, from_agent_id: str, to_agent_id: str, content: List[Dict[str, Any]], conversation_id: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None ) -> Dict[str, Any]: """ 发送多模态消息到其他 Agent(通用函数) Args: gateway_url: Gateway 地址 from_agent_id: 发送方 Agent ID to_agent_id: 接收方 Agent ID content: MAMP 格式的多模态内容 conversation_id: 对话 ID(可选) metadata: 元数据 Returns: 发送结果 """ conv_id = conversation_id or f"conv-{uuid.uuid4()}" agent_card = AgentCard( agent_id=from_agent_id, agent_name=from_agent_id ) async with GatewayClient(gateway_url=gateway_url, agent_card=agent_card) as client: result = await client.send_message( to_agent_id=to_agent_id, content=content, conversation_id=conv_id, metadata=metadata ) return { "conversation_id": conv_id, "message_id": result.get("message_id"), "status": result.get("status", "sent"), "to_agent": to_agent_id } async def list_online_agents( gateway_url: str, agent_type: Optional[str] = None ) -> List[Dict[str, Any]]: """ 查询在线 Agent 列表(通用函数) Args: gateway_url: Gateway 地址 agent_type: 过滤 Agent 类型(可选) Returns: 在线 Agent 列表 """ # 创建临时客户端(用于查询) agent_card = AgentCard( agent_id="query-client", agent_name="Query Client" ) async with GatewayClient(gateway_url=gateway_url, agent_card=agent_card) as client: agents = await client.list_agents(online_only=True, agent_type=agent_type) return agents async def get_agent_status( gateway_url: str, agent_id: str ) -> Dict[str, Any]: """ 查询指定 Agent 的在线状态(通用函数) Args: gateway_url: Gateway 地址 agent_id: Agent ID Returns: Agent 状态信息 """ agent_card = AgentCard( agent_id="query-client", agent_name="Query Client" ) async with GatewayClient(gateway_url=gateway_url, agent_card=agent_card) as client: status = await client.get_agent_status(agent_id) return status async def register_agent( gateway_url: str, agent_id: str, agent_name: str, agent_type: Optional[str] = None, capabilities: Optional[List[str]] = None, description: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None ) -> GatewayClient: """ 注册 Agent 到 Gateway(通用函数) Args: gateway_url: Gateway 地址 agent_id: Agent ID agent_name: Agent 名称 agent_type: Agent 类型 capabilities: Agent 能力列表 description: Agent 描述 metadata: 元数据 Returns: 已连接的 GatewayClient 实例(需要调用方管理生命周期) """ agent_card = AgentCard( agent_id=agent_id, agent_name=agent_name, agent_type=agent_type, capabilities=capabilities or [], description=description, metadata=metadata or {} ) client = GatewayClient(gateway_url=gateway_url, agent_card=agent_card) await client.connect() return client