| from collections.abc import Awaitable, Callable |
| from typing import Any |
|
|
| from app.models.domain import ToolResult |
|
|
| ToolHandler = Callable[[dict[str, Any]], Awaitable[ToolResult]] |
|
|
|
|
| class ToolRegistry: |
| def __init__(self) -> None: |
| self._handlers: dict[str, ToolHandler] = {} |
|
|
| def register(self, name: str, handler: ToolHandler) -> None: |
| self._handlers[name] = handler |
|
|
| async def execute(self, name: str, arguments: dict[str, Any]) -> ToolResult: |
| handler = self._handlers.get(name) |
| if handler is None: |
| return ToolResult(ok=False, data={}, error=f"Unknown tool: {name}") |
| try: |
| return await handler(arguments) |
| except Exception as exc: |
| return ToolResult(ok=False, data={}, error=f"Tool {name} failed: {exc}") |
|
|