summaryrefslogtreecommitdiff
path: root/personal_agent/tools/base.py
diff options
context:
space:
mode:
authorbatsumaru <>2026-09-15 15:13:34 +0900
committerbatsumaru <>2026-09-15 15:13:34 +0900
commit1a67c5edb6fa6165e99cc25ed380303ed817af09 (patch)
treed2eab77e7275a559bfd639fd80b15321b5e514f3 /personal_agent/tools/base.py
parent5629cabbb38c7d91e66a419ba7cb3a93a9a988a1 (diff)
Cleaned up project tree
Diffstat (limited to 'personal_agent/tools/base.py')
-rw-r--r--personal_agent/tools/base.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/personal_agent/tools/base.py b/personal_agent/tools/base.py
new file mode 100644
index 0000000..8aad82a
--- /dev/null
+++ b/personal_agent/tools/base.py
@@ -0,0 +1,55 @@
+from abc import ABC, abstractmethod
+from dataclasses import dataclass
+
+
+class ToolError(Exception):
+ pass
+
+
+@dataclass
+class ToolResult:
+ content: str
+
+
+class Tool(ABC):
+ @property
+ @abstractmethod
+ def name(self) -> str: ...
+
+ @property
+ @abstractmethod
+ def description(self) -> str: ...
+
+ @property
+ @abstractmethod
+ def schema(self) -> dict[str, object]: ...
+
+ @abstractmethod
+ def execute(self, arguments: dict[str, object]) -> ToolResult: ...
+
+
+class ToolRegistry:
+ def __init__(self) -> None:
+ self.tools: dict[str, Tool] = {}
+
+ def register(self, tool: Tool) -> None:
+ self.tools[tool.name] = tool
+
+ def get(self, name: str) -> Tool | None:
+ return self.tools.get(name)
+
+ def all(self) -> list[Tool]:
+ return list(self.tools.values())
+
+ def schemas(self) -> list[dict[str, object]]:
+ return [
+ {
+ "type": "function",
+ "function": {
+ "name": tool.name,
+ "description": tool.description,
+ "parameters": tool.schema,
+ },
+ }
+ for tool in self.tools.values()
+ ]