python
1from dataclasses import dataclass
2from typing import Callable
3
4@dataclass
5class Tool:
6 name: str
7 description: str
8 run: Callable[[str], str]
9
10def route(task: str, tools: list[Tool]) -> str:
11 lowered = task.lower()
12 if "sql" in lowered or "database" in lowered:
13 return "query_db"
14 if "summarize" in lowered or "brief" in lowered:
15 return "summarize"
16 return "answer"
17
18def execute(task: str, tools: list[Tool]) -> str:
19 registry = {tool.name: tool for tool in tools}
20 selected = route(task, tools)
21 return registry[selected].run(task)
22
23tools = [
24 Tool("answer", "General response", lambda task: f"answer: {task}"),
25 Tool("summarize", "Condense text", lambda task: task[:120]),
26 Tool("query_db", "Run approved read-only SQL", lambda _: "SELECT count(*) FROM tickets;"),
27]
28
29print(execute("summarize the incident report", tools))