mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-08 03:01:47 +00:00
feat(subagent): add configurable subagent model via config.yaml
Allow users to configure a dedicated model for subagents spawned by
delegate_task, so narrowly-scoped subtasks can use a cheaper/faster
model while the parent agent runs on a more powerful one.
Config:
subagent:
model: google/gemini-3-flash-preview
Precedence: explicit model arg > config.subagent.model > parent model.
Cherry-picked from PR #751 by Bartok9, rebased onto current main
with conflict resolution and simplified to model-only override
(provider/base_url/api_key stay inherited from parent — covers the
common case of same-provider model swap via OpenRouter).
Closes #609
Co-authored-by: Bartok Moltbot <bartokmoltbot@users.noreply.github.com>
This commit is contained in:
parent
58dbd81f03
commit
6bd1726422
2 changed files with 22 additions and 1 deletions
|
|
@ -119,6 +119,13 @@ DEFAULT_CONFIG = {
|
|||
},
|
||||
},
|
||||
|
||||
# Subagent configuration — model/provider for tasks spawned via delegate_task.
|
||||
# By default subagents inherit the parent agent's model and provider.
|
||||
# Set "model" to use a cheaper/faster model for delegated subtasks.
|
||||
"subagent": {
|
||||
# "model": "google/gemini-3-flash-preview",
|
||||
},
|
||||
|
||||
"display": {
|
||||
"compact": False,
|
||||
"personality": "kawaii",
|
||||
|
|
|
|||
|
|
@ -78,6 +78,15 @@ def _strip_blocked_tools(toolsets: List[str]) -> List[str]:
|
|||
return [t for t in toolsets if t not in blocked_toolset_names]
|
||||
|
||||
|
||||
def _get_subagent_config() -> Dict[str, Any]:
|
||||
"""Load subagent config from CLI_CONFIG if available."""
|
||||
try:
|
||||
from cli import CLI_CONFIG
|
||||
return CLI_CONFIG.get("subagent", {})
|
||||
except Exception:
|
||||
return {}
|
||||
|
||||
|
||||
def _build_child_progress_callback(task_index: int, parent_agent, task_count: int = 1) -> Optional[callable]:
|
||||
"""Build a callback that relays child agent tool calls to the parent display.
|
||||
|
||||
|
|
@ -199,10 +208,15 @@ def _run_single_child(
|
|||
# count toward the session-wide limit.
|
||||
shared_budget = getattr(parent_agent, "iteration_budget", None)
|
||||
|
||||
# Subagent model override from config.
|
||||
# Precedence: explicit model arg > config.subagent.model > parent model
|
||||
subagent_cfg = _get_subagent_config()
|
||||
effective_model = model or subagent_cfg.get("model") or parent_agent.model
|
||||
|
||||
child = AIAgent(
|
||||
base_url=parent_agent.base_url,
|
||||
api_key=parent_api_key,
|
||||
model=model or parent_agent.model,
|
||||
model=effective_model,
|
||||
provider=getattr(parent_agent, "provider", None),
|
||||
api_mode=getattr(parent_agent, "api_mode", None),
|
||||
max_iterations=max_iterations,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue