mirror of
https://github.com/agent0ai/agent-zero.git
synced 2026-05-17 04:01:13 +00:00
Add LLM preset selection to project create/edit flows, backed by _model_config scoped project config. Support global, project, and combined preset APIs with explicit metadata while preserving plain YAML preset files. Copy selected preset chat/utility settings into project-scoped config, keep embedding settings from the effective config, and document/test the new project model config paths.
67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
from helpers.api import ApiHandler, Request, Response
|
|
from plugins._model_config.helpers import model_config
|
|
|
|
|
|
class ModelPresets(ApiHandler):
|
|
async def process(self, input: dict, request: Request) -> dict | Response:
|
|
action = input.get("action", "get")
|
|
project_name = str(input.get("project_name") or "").strip()
|
|
scope = str(input.get("scope") or "").strip()
|
|
|
|
if action == "get":
|
|
if scope == "project":
|
|
presets = model_config.get_project_presets(project_name) if project_name else []
|
|
return {"ok": True, "presets": presets}
|
|
|
|
if scope == "combined" or project_name:
|
|
return {
|
|
"ok": True,
|
|
"presets": model_config.get_combined_presets(project_name or None),
|
|
"global_presets": model_config.get_presets(),
|
|
"project_presets": (
|
|
model_config.get_project_presets(project_name)
|
|
if project_name
|
|
else []
|
|
),
|
|
}
|
|
|
|
presets = model_config.get_presets()
|
|
return {"ok": True, "presets": presets}
|
|
|
|
elif action == "save":
|
|
presets = input.get("presets")
|
|
if not isinstance(presets, list):
|
|
return Response(status=400, response="presets must be an array")
|
|
model_config.save_presets(
|
|
presets,
|
|
project_name=project_name if scope == "project" or project_name else None,
|
|
)
|
|
return {"ok": True, "presets": model_config.clean_presets_for_file(presets)}
|
|
|
|
elif action == "reset":
|
|
presets = model_config.reset_presets(
|
|
project_name=project_name if scope == "project" or project_name else None
|
|
)
|
|
return {"ok": True, "presets": presets}
|
|
|
|
elif action == "resolve":
|
|
name = str(input.get("name") or "").strip()
|
|
if not name:
|
|
return Response(status=400, response="Missing preset name")
|
|
resolved = model_config.resolve_preset(
|
|
name,
|
|
scope=scope or "global",
|
|
project_name=project_name or None,
|
|
)
|
|
if not resolved:
|
|
return Response(status=404, response=f"Preset '{name}' not found")
|
|
return {
|
|
"ok": True,
|
|
"preset": {
|
|
**resolved,
|
|
"scope": scope or "global",
|
|
"project_name": project_name if scope == "project" else "",
|
|
},
|
|
}
|
|
|
|
return Response(status=400, response=f"Unknown action: {action}")
|