from typing import Dict, Any, Callable, List from pydantic import BaseModel class Tool(BaseModel): name: str description: str parameters: Dict[str, Any] func: Callable class ToolRegistry: def __init__(self): self._tools: Dict[str, Tool] = {} def register(self, name: str, description: str, parameters: Dict[str, Any], func: Callable): self._tools[name] = Tool( name=name, description=description, parameters=parameters, func=func ) def get_tool(self, name: str) -> Tool: return self._tools.get(name) def list_tools(self) -> List[Tool]: return list(self._tools.values()) def to_gemini_tools(self) -> List[Dict[str, Any]]: # Convert to Gemini tool format # This is a simplified conversion, actual schema mapping needed tools = [] for tool in self._tools.values(): tools.append({ "function_declarations": [{ "name": tool.name, "description": tool.description, "parameters": tool.parameters }] }) return tools tool_registry = ToolRegistry()