refactor: single-owner model switch parsing + effective-model resolution (kills the api_server/run.py divergence class)

This commit is contained in:
teknium1 2026-07-29 09:42:24 -07:00 committed by Teknium
parent bd93ccb890
commit ba7da1332c
7 changed files with 461 additions and 40 deletions

25
cli.py
View file

@ -9057,7 +9057,7 @@ class HermesCLI(CLIAgentSetupMixin, CLICommandsMixin, CLIBillingMixin):
"""
from hermes_cli.model_switch import (
switch_model,
parse_model_flags_detailed,
parse_model_switch_args,
resolve_persist_behavior,
)
from hermes_cli.providers import get_label
@ -9067,18 +9067,17 @@ class HermesCLI(CLIAgentSetupMixin, CLICommandsMixin, CLIBillingMixin):
raw_args = parts[1].strip() if len(parts) > 1 else ""
# Parse --provider, --global, --session, --once, and --refresh flags
parsed_flags = parse_model_flags_detailed(raw_args)
model_input = parsed_flags.model_input
explicit_provider = parsed_flags.explicit_provider
is_global_flag = parsed_flags.is_global
force_refresh = parsed_flags.force_refresh
is_session = parsed_flags.is_session
one_turn = parsed_flags.is_once
if is_global_flag and one_turn:
_cprint(" ✗ /model --once cannot be combined with --global")
return
if one_turn and not model_input and not explicit_provider:
_cprint(" ✗ /model --once requires a model or provider.")
# via the shared single-owner parser (hermes_cli.model_switch).
request = parse_model_switch_args(raw_args)
model_input = request.target
explicit_provider = request.explicit_provider
is_global_flag = request.is_global
force_refresh = request.force_refresh
is_session = request.is_session
one_turn = request.is_once
if request.errors:
# CLI decoration: " ✗ " prefix over the canonical error copy.
_cprint(f"{request.error_messages()[0]}")
return
# Resolve the effective persistence once: --global forces persist,
# --session/--once force session-scope, otherwise defer to