103 lines
3.8 KiB
Python
103 lines
3.8 KiB
Python
import json
|
|
from typing import Any
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.pomodoro.service import PomodoroService
|
|
|
|
TOOL_DEFINITIONS: list[dict[str, Any]] = [
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "get_pomodoro_status",
|
|
"description": "ОБЯЗАТЕЛЬНО вызывай перед любым ответом о таймере. Возвращает актуальный статус помидоро.",
|
|
"parameters": {"type": "object", "properties": {}, "required": []},
|
|
},
|
|
},
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "start_pomodoro",
|
|
"description": "Запустить помидоро-таймер. Вызывай при каждой просьбе поставить таймер — не полагайся на память.",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"duration_min": {
|
|
"type": "integer",
|
|
"description": "Длительность в минутах, по умолчанию 25",
|
|
},
|
|
"task_note": {
|
|
"type": "string",
|
|
"description": "Над чем работаем в этой сессии",
|
|
},
|
|
},
|
|
"required": [],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "stop_pomodoro",
|
|
"description": "Остановить текущий помидоро-таймер",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"result": {
|
|
"type": "string",
|
|
"description": "Краткий отчёт о том, что сделано",
|
|
},
|
|
"completed": {
|
|
"type": "boolean",
|
|
"description": "True если задача полностью завершена",
|
|
},
|
|
},
|
|
"required": [],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "get_pomodoro_history",
|
|
"description": "ОБЯЗАТЕЛЬНО вызывай при вопросах о задачах, истории работы или что пользователь делал.",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "integer",
|
|
"description": "Сколько последних сессий вернуть, по умолчанию 10",
|
|
}
|
|
},
|
|
"required": [],
|
|
},
|
|
},
|
|
},
|
|
]
|
|
|
|
|
|
def execute_tool(db: Session, name: str, arguments: dict[str, Any]) -> str:
|
|
service = PomodoroService(db)
|
|
|
|
try:
|
|
if name == "get_pomodoro_status":
|
|
result = service.get_status()
|
|
elif name == "start_pomodoro":
|
|
result = service.start(
|
|
duration_min=arguments.get("duration_min", 25),
|
|
task_note=arguments.get("task_note", ""),
|
|
)
|
|
elif name == "stop_pomodoro":
|
|
result = service.stop(
|
|
result=arguments.get("result", ""),
|
|
completed=arguments.get("completed", False),
|
|
)
|
|
elif name == "get_pomodoro_history":
|
|
result = service.history(limit=arguments.get("limit", 10))
|
|
else:
|
|
return json.dumps({"error": f"Unknown tool: {name}"}, ensure_ascii=False)
|
|
|
|
return json.dumps(result, ensure_ascii=False)
|
|
except ValueError as exc:
|
|
return json.dumps({"error": str(exc)}, ensure_ascii=False)
|