Files
2026-06-16 09:19:32 +03:00

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)