from .tool import Tool from typing import Dict, Callable, Any, List ToolBuilder = Callable[[Any], Tool] FuncToolBuilder = Callable[[], ToolBuilder] class ToolsRegistry: def __init__(self) -> None: self.tools : Dict[str, FuncToolBuilder] = {} def register(self, tool_name : str, tool : FuncToolBuilder): print(f"will register {tool_name}") self.tools[tool_name] = tool def build(self, tool_name, config) -> Tool: ret = self.tools[tool_name]()(config) if isinstance(ret, Tool): return ret raise ValueError("Tool builder {} did not return a Tool instance".format(tool_name)) def list_tools(self) -> List[str]: return list(self.tools.keys()) tools_registry = ToolsRegistry() def register(tool_name): def decorator(tool : FuncToolBuilder): tools_registry.register(tool_name, tool) return tool return decorator def build_tool(tool_name : str, config : Any) -> Tool: print(f"will build {tool_name}") return tools_registry.build(tool_name, config) def list_tools() -> List[str]: return tools_registry.list_tools()