Spaces:
Running
Running
| from ..tool.local_tool import LocalTool | |
| from ..types import BackendType, ToolResult, ToolStatus | |
| from ..grounding_client import GroundingClient | |
| class _BaseSystemTool(LocalTool): | |
| backend_type = BackendType.SYSTEM | |
| def __init__(self, client: GroundingClient): | |
| super().__init__(verbose=False, handle_errors=True) | |
| self._client = client | |
| def client(self) -> GroundingClient: | |
| return self._client | |
| class ListProvidersTool(_BaseSystemTool): | |
| _name = "list_providers" | |
| _description = "List all registered backend providers" | |
| async def _arun(self) -> ToolResult: | |
| prov = list(self.client.list_providers().keys()) | |
| return ToolResult( | |
| status=ToolStatus.SUCCESS, | |
| content=", ".join(prov), | |
| ) | |
| class ListBackendToolsTool(_BaseSystemTool): | |
| _name = "list_backend_tools" | |
| _description = "List static tools for a backend" | |
| async def _arun(self, backend: str) -> ToolResult: | |
| try: | |
| be = BackendType(backend.lower()) | |
| except ValueError: | |
| return ToolResult(ToolStatus.ERROR, error=f"Unknown backend '{backend}'") | |
| tools = await self.client.list_backend_tools(be) | |
| names = [t.schema.name for t in tools] | |
| return ToolResult( | |
| status=ToolStatus.SUCCESS, | |
| content=", ".join(names), | |
| ) | |
| class ListSessionToolsTool(_BaseSystemTool): | |
| _name = "list_session_tools" | |
| _description = "List tools (incl. dynamic) for a session" | |
| async def _arun(self, session_id: str) -> ToolResult: | |
| tools = await self.client.list_session_tools(session_id) | |
| names = [t.schema.name for t in tools] | |
| return ToolResult( | |
| status=ToolStatus.SUCCESS, | |
| content=", ".join(names), | |
| ) | |
| class ListAllBackendToolsTool(_BaseSystemTool): | |
| _name = "list_all_backend_tools" | |
| _description = "List static tools for every registered backend" | |
| async def _arun(self, use_cache: bool = False) -> ToolResult: | |
| all_tools = await self.client.list_all_backend_tools(use_cache=use_cache) | |
| lines = [ | |
| f"{backend.value}: {', '.join(t.schema.name for t in tools)}" | |
| for backend, tools in all_tools.items() | |
| ] | |
| return ToolResult( | |
| status=ToolStatus.SUCCESS, | |
| content="\n".join(lines), | |
| ) | |
| SYSTEM_TOOLS: list[type[_BaseSystemTool]] = [ | |
| ListProvidersTool, | |
| ListBackendToolsTool, | |
| ListSessionToolsTool, | |
| ListAllBackendToolsTool, | |
| ] |