stage-356: small 2-PR follow-up batch — #2234 aux-model routing + #2265 mixed-case provider canonicalization (closes #2245)#2267
Merged
Conversation
fix: use documented aux model for update summaries (Jordan-SkyLF, post-rebase)
Fix configured provider models after key canonicalization (Michaelyklam, closes #2245)
eleboucher
pushed a commit
to eleboucher/homelab
that referenced
this pull request
May 14, 2026
… 0.51.63) (#471) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/nesquena/hermes-webui](https://github.com/nesquena/hermes-webui) | patch | `0.51.62` → `0.51.63` | --- ### Release Notes <details> <summary>nesquena/hermes-webui (ghcr.io/nesquena/hermes-webui)</summary> ### [`v0.51.63`](https://github.com/nesquena/hermes-webui/releases/tag/v0.51.63) [Compare Source](nesquena/hermes-webui@v0.51.62...v0.51.63) ##### What's Changed - stage-356: small 2-PR follow-up batch — [#​2234](nesquena/hermes-webui#2234) aux-model routing + [#​2265](nesquena/hermes-webui#2265) mixed-case provider canonicalization (closes [#​2245](nesquena/hermes-webui#2245)) by [@​nesquena-hermes](https://github.com/nesquena-hermes) in [#​2267](nesquena/hermes-webui#2267) - fix: use documented aux model for update summaries by [@​Jordan-SkyLF](https://github.com/Jordan-SkyLF) in [#​2234](nesquena/hermes-webui#2234) - Fix configured provider models after key canonicalization by [@​Michaelyklam](https://github.com/Michaelyklam) in [#​2265](nesquena/hermes-webui#2265) **Full Changelog**: <nesquena/hermes-webui@v0.51.62...v0.51.63> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/471
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.
stage-356 — small 2-PR follow-up batch (v0.51.63)
Fourth full PR sweep of the day. Two non-hold non-draft PRs cleared fit-screen, both → MERGE QUEUE.
+268 / -7 across 5 files. Two PRs from two contributors.
Composition
PR Detail
#2234 — Use documented aux model for update summaries
The THIRD and final follow-up commit (
97b68f0) from PR #2234, now rebased onto current master. The category-refinement portion shipped in v0.51.61 (stage-354) and the rebase + scrollable-summary portion shipped in v0.51.62 (stage-355).Concern: the original implementation looked up an
auxiliary.update_summaryconfig key — but that's a WebUI-only magic key, not a documented Hermes Agent auxiliary task. Users would have to guess the config key existed.Fix: route update summary generation through the documented
auxiliary.compressiontext-model slot. Main-model fallback is preserved if auxiliary resolution or generation fails. Adds a route comment explaining the mapping rationale (summary generation conceptually IS summarization, which is what compression provides).#2265 — Fix configured provider models after key canonicalization (closes #2245)
Real bug: when users define a custom provider with mixed-case (
CLIPpoxy) or snake_case (snake_case_provider) key inconfig.yaml, canonicalization lower-cases the key. Subsequent model-allowlist lookup uses the canonicalized key butconfig.yamlstill stores the raw key, so the lookup returns empty and the model picker dropdown shows no models for that provider.Fix:
api/config.pymaps canonical provider IDs back to their raw config.yaml provider keys before loadingprovider_cfg. Original config keys are preserved for provider settings rendering. Built-in providers (openai,anthropic, etc.) and fallback behavior unchanged.242-line regression test covering mixed-case + snake_case + built-in unchanged +
_PROVIDER_MODELS-only fallback.Held PRs re-evaluated this sweep
Per the rapid-re-sweep rule: pulled latest comments on each held PR.
ab663cd. Defer — 1823 LOC, too large for sweep, deserves dedicated review session.Verification
run-browser-tests.sh: 20/20 QA + 11/11 API checks PASSED in 104sOpus Advisor Review
SHIP both. No SHOULD-FIX.
Opus directly verified:
get_text_auxiliary_client("compression", ...)AND theaux_client.chat.completions.create(...)call. A 401 or timeout from configured aux falls through cleanly to main-modelAIAgentblock at L5487 ✓api/updates.py:347keys on(name, behind, current_sha, latest_sha, compare_url)— model-agnostic, no cross-model staleness ✓cfg.get("providers", {}), canonicalizes via_canonicalise_provider_id, andsetdefaultscanonical → raw_key.CLIPpoxy→clippoxymaps back to"CLIPpoxy"correctly ✓pid in _PROVIDER_MODELS or pid in _canonical_to_raw_provider_keycondition; foropenai/anthropicnot in cfg, first clause matches and behavior is identical to pre-fix ✓Minor observations (not blockers, Opus noted)
CLIPpoxyandclippoxyinproviders(canonical collision),setdefaultmakes only the first win. Pre-fix that case silently lost ALL models for the second. Worth alogger.debugon collision in a future cleanup.tests/test_issue2245_mixed_case_provider_models.pyends with no trailing newline. Cosmetic.Closes / refs
Closes #2245(via Fix configured provider models after key canonicalization #2265 mixed-case canonical key fix)Stats