main
py 68 lines 2.84 KB
Raw
1 from __future__ import annotations
2
3 from agent import AgentContext
4 from helpers.api import ApiHandler, Input, Output, Request, Response
5 from helpers.persist_chat import save_tmp_chat
6 from helpers.state_monitor_integration import mark_dirty_all
7 from helpers.task_scheduler import TaskScheduler
8 from plugins._chat_naming.helpers import naming
9
10
11 class ChatName(ApiHandler):
12 async def process(self, input: Input, request: Request) -> Output:
13 del request
14 action = str(input.get("action", "get") or "get").strip().lower()
15 kind = str(input.get("kind", "chat") or "chat").strip().lower()
16 item_id = str(input.get("item_id", "") or "").strip()
17 if kind not in {"chat", "task"}:
18 return Response("Invalid row kind.", 400)
19 if not item_id:
20 return Response("Missing chat or task ID.", 400)
21
22 context = AgentContext.get(item_id)
23 if not context:
24 return Response("Chat context not found.", 404)
25
26 try:
27 if action == "get":
28 current_name = await self._current_name(kind, item_id, context.name or "")
29 return {"ok": True, "name": current_name}
30 if action == "generate":
31 current_name = await self._current_name(kind, item_id, context.name or "")
32 name = await naming.generate_name(
33 context.agent0,
34 current_name=current_name,
35 )
36 return {"ok": True, "name": name}
37 if action == "save":
38 name = naming.normalize_manual_name(input.get("name", ""))
39 if kind == "task":
40 await self._save_task_name(item_id, name)
41 context.name = name
42 save_tmp_chat(context)
43 mark_dirty_all(reason="plugins._chat_naming.save_task_name")
44 else:
45 naming.save_context_name(context.agent0, name)
46 return {"ok": True, "name": name}
47 return Response(f"Unknown action: {action}", 400)
48 except ValueError as error:
49 return Response(str(error), 400)
50 except Exception as error:
51 return Response(str(error), 500)
52
53 async def _current_name(self, kind: str, item_id: str, fallback: str) -> str:
54 if kind != "task":
55 return fallback
56 scheduler = TaskScheduler.get()
57 await scheduler.reload()
58 task = scheduler.get_task_by_uuid(item_id)
59 if not task:
60 raise ValueError("Scheduled task not found.")
61 return str(task.name or fallback)
62
63 async def _save_task_name(self, item_id: str, name: str) -> None:
64 scheduler = TaskScheduler.get()
65 await scheduler.reload()
66 task = await scheduler.update_task(item_id, name=name)
67 if not task:
68 raise ValueError("Scheduled task not found.")