| """ |
| Tool definitions for the agent. |
| Add new tools by creating a function and registering it in the TOOLS dict. |
| """ |
|
|
| import httpx |
|
|
|
|
| def search_web(query: str) -> str: |
| """Search for information on the web (placeholder).""" |
| return f"Search results for: {query}" |
|
|
|
|
| def calculate(expression: str) -> str: |
| """Evaluate a math expression.""" |
| try: |
| result = eval(expression, {"__builtins__": {}}) |
| return str(result) |
| except Exception as e: |
| return f"Error: {e}" |
|
|
|
|
| def fetch_url(url: str) -> str: |
| """Fetch content from a URL.""" |
| try: |
| resp = httpx.get(url, timeout=10, follow_redirects=True) |
| return resp.text[:2000] |
| except Exception as e: |
| return f"Error: {e}" |
|
|
|
|
| |
| TOOLS = { |
| "search_web": { |
| "fn": search_web, |
| "description": "Search for information on the web", |
| "parameters": {"query": "string"}, |
| }, |
| "calculate": { |
| "fn": calculate, |
| "description": "Evaluate a math expression", |
| "parameters": {"expression": "string"}, |
| }, |
| "fetch_url": { |
| "fn": fetch_url, |
| "description": "Fetch content from a URL", |
| "parameters": {"url": "string"}, |
| }, |
| } |
|
|
|
|
| def get_tool_schemas() -> list[dict]: |
| """Return tool schemas in OpenAI API format.""" |
| schemas = [] |
| for name, tool in TOOLS.items(): |
| schemas.append({ |
| "type": "function", |
| "function": { |
| "name": name, |
| "description": tool["description"], |
| "parameters": { |
| "type": "object", |
| "properties": { |
| k: {"type": v, "description": k} |
| for k, v in tool["parameters"].items() |
| }, |
| "required": list(tool["parameters"].keys()), |
| } |
| } |
| }) |
| return schemas |
|
|
|
|
| def execute_tool(name: str, args: dict) -> str: |
| """Execute a tool by name.""" |
| tool = TOOLS.get(name) |
| if not tool: |
| return f"Tool '{name}' does not exist" |
| return tool["fn"](**args) |
|
|