fix(cli): honor user-defined providers via chat --provider and -m <alias> (#16767)#16924
Merged
Conversation
…ias> Three related issues prevented user-defined providers in `providers:` and `model_aliases:` from being reachable through standard CLI flags. Requests silently routed to the configured `model.base_url` instead of the user- intended endpoint. * hermes_cli/model_switch.py — root cause of the silent misrouting: `_ensure_direct_aliases()` rebound `DIRECT_ALIASES` to a freshly-loaded dict, leaving every `from hermes_cli.model_switch import DIRECT_ALIASES` caller stuck on the stale empty original. Switched to `.update()` so module attribute references stay valid. * hermes_cli/main.py — chat subcommand `--provider` had `choices=[...]` hardcoded to built-in providers, rejecting valid keys from user `providers:` config. Dropped the choices list; runtime resolution validates correctly downstream. * hermes_cli/oneshot.py — `-m <alias>` only resolved the model name; the alias's base_url was never propagated. Now consults `DIRECT_ALIASES` before falling through to `detect_provider_for_model`, and threads the alias's base_url to `resolve_runtime_provider(explicit_base_url=...)`. * hermes_cli/runtime_provider.py — `_resolve_named_custom_runtime` now honors `(provider="custom", explicit_base_url=...)` so a base_url propagated from a direct-alias resolution actually builds a runtime instead of falling through to provider-registry handlers that don't know about ad-hoc local endpoints. Verified: `hermes chat --provider <user-key> -m <model> -q "..."` and `hermes -m <user-alias> -z "..."` both route to the user-intended endpoint, observable via the target server's request log. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Salvages #16811 by @westers onto current main.
Closes #16767.
User-defined providers configured in
~/.hermes/config.yaml(providers:dict +model_aliases:) were silently dropped by two CLI paths, so requests routed to the wrong endpoint.Changes (cherry-picked from #16811, +66/-39)
hermes_cli/main.py: drop hardcodedchoices=on chat subparser--provider— top-level--provideralready had none.hermes_cli/oneshot.py: consultDIRECT_ALIASESbeforedetect_provider_for_model; thread aliasbase_urltoresolve_runtime_provider(explicit_base_url=...).hermes_cli/runtime_provider.py:_resolve_named_custom_runtimehonorsprovider="custom" + explicit_base_urlso alias-propagated base_urls build a runtime directly.hermes_cli/model_switch.py:_ensure_direct_aliasesuses.update()instead of rebinding (defensive).scripts/release.py: AUTHOR_MAP entry for westers.Validation
tests/hermes_cli/test_regression_16767.py(3/3) — includes regressions that catch each of the three target bugs.-m my-31bnow resolves tobase_url=http://localhost:11435/v1viasource=direct-alias(washttp://localhost:8080/v1from stalemodel.base_urlfallback).chat --provider host-baccepted by argparse.Credit: @westers — commits preserved via rebase-merge.