44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
import json
|
|
from typing import Any
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.tools import documents, fitness, homelab, memory, pomodoro, projects, reminders, shopping
|
|
from app.tools._dispatch import NOT_HANDLED, ToolContext
|
|
|
|
_HANDLERS = (
|
|
pomodoro,
|
|
projects,
|
|
memory,
|
|
documents,
|
|
fitness,
|
|
homelab,
|
|
shopping,
|
|
reminders,
|
|
)
|
|
|
|
TOOL_DEFINITIONS: list[dict[str, Any]] = []
|
|
for _handler in _HANDLERS:
|
|
TOOL_DEFINITIONS.extend(_handler.TOOL_DEFINITIONS)
|
|
|
|
|
|
async def execute_tool(
|
|
db: Session,
|
|
name: str,
|
|
arguments: dict[str, Any],
|
|
*,
|
|
session_id: int | None = None,
|
|
user_id: int,
|
|
) -> str:
|
|
ctx = ToolContext(db=db, user_id=user_id, session_id=session_id)
|
|
try:
|
|
for handler in _HANDLERS:
|
|
result = await handler.execute(name, arguments, ctx)
|
|
if result is not NOT_HANDLED:
|
|
return json.dumps(result, ensure_ascii=False)
|
|
return json.dumps({"error": f"Unknown tool: {name}"}, ensure_ascii=False)
|
|
except ValueError as exc:
|
|
return json.dumps({"error": str(exc)}, ensure_ascii=False)
|
|
except Exception as exc:
|
|
return json.dumps({"error": str(exc)}, ensure_ascii=False)
|