agent-zero/api/agent_profile_set.py
Alessandro b9153f718e
Some checks are pending
Build And Publish Docker Images / plan (push) Waiting to run
Build And Publish Docker Images / build (push) Blocked by required conditions
Preserve subordinate agent profiles
Validate call_subordinate profile arguments against available agent profiles so missing profiles fail as repairable errors. Persist each agent's profile in saved chats and avoid flattening existing subordinate profiles during profile switches, settings refresh, or restart reload.
2026-06-17 13:07:22 +02:00

50 lines
1.8 KiB
Python

from agent import AgentContext
from helpers import 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
def _agent_profile_labels() -> dict[str, str]:
return {
str(item.get("key") or ""): str(item.get("label") or item.get("key") or "")
for item in subagents.get_all_agents_list()
if item.get("key")
}
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.",
)
labels = _agent_profile_labels()
if profile not in labels:
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": labels.get(profile, profile),
}