File size: 2,126 Bytes
18ba912 c75ced2 18ba912 c75ced2 18ba912 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | """
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}"
# Tool registry - the agent uses this dict
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)
|