File size: 1,779 Bytes
3a3bdee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from agent import AgentContext
from helpers import projects, subagents
from helpers.api import ApiHandler, Request, Response
from helpers.persist_chat import save_tmp_chat
from helpers.state_monitor_integration import mark_dirty_for_context
from initialize import initialize_agent


class SetAgentProfile(ApiHandler):
    async def process(self, input: dict, request: Request) -> dict | Response:
        context_id = str(input.get("context_id", "") or "").strip()
        profile = str(input.get("agent_profile", "") or "").strip()

        if not context_id:
            return Response(status=400, response="Missing context_id")
        if not profile:
            return Response(status=400, response="Missing agent_profile")

        context = AgentContext.get(context_id)
        if not context:
            return Response(status=404, response="Context not found")
        if context.is_running():
            return Response(
                status=409,
                response="Agent profile can be changed after the current run finishes.",
            )

        profiles = subagents.get_available_agents_dict(
            projects.get_context_project_name(context)
        )
        selected_profile = profiles.get(profile)
        if selected_profile is None:
            return Response(status=404, response=f"Agent profile '{profile}' not found")

        config = initialize_agent(override_settings={"agent_profile": profile})
        context.config = config
        context.agent0.config = config

        save_tmp_chat(context)
        mark_dirty_for_context(context.id, reason="agent_profile_change")
        return {
            "ok": True,
            "agent_profile": profile,
            "agent_profile_label": selected_profile.title or profile,
        }