Skip to content

fix: use documented aux model for update summaries - #2234

Merged
1 commit merged into
nesquena:masterfrom
Jordan-SkyLF:fix/update-summary-category-dedup
May 14, 2026
Merged

1 commit merged into
nesquena:masterfrom
Jordan-SkyLF:fix/update-summary-category-dedup

Conversation

@Jordan-SkyLF

@Jordan-SkyLF Jordan-SkyLF commented May 14, 2026

Copy link
Copy Markdown
Contributor

Thinking Path

  • The category-refinement portion of this PR shipped in v0.51.62 via stage-355.
  • This branch is now rebased onto current origin/master so the PR carries only the remaining aux-model routing follow-up.
  • The reviewer concern was that auxiliary.update_summary would be a WebUI-only magic key, not a documented Hermes Agent auxiliary task.

What Changed

  • Update-summary generation now asks for the documented auxiliary.compression text-model slot first.
  • The existing main-model fallback is preserved if auxiliary resolution or generation fails.
  • Added a route comment explaining why summary generation maps to compression/summarization instead of inventing a new task name.
  • Updated focused regression coverage to assert the route uses "compression" and does not reintroduce "update_summary" in api/routes.py.
  • Updated the changelog with the standalone aux-routing follow-up.

Why It Matters

  • Users can override summary generation through an existing documented auxiliary slot instead of guessing an undiscoverable WebUI-specific config key.
  • The PR stays self-contained to hermes-webui and does not require a coordinated Hermes Agent registry/setup change.
  • Existing installs without an auxiliary compression model still fall back to the configured main model.

Before / After

  • No visual before/after evidence is needed for this follow-up: the diff only changes model-routing selection and regression coverage.
  • The update-summary UI/category behavior and screenshots from the earlier scope have already shipped in v0.51.62.

Verification

  • Rebased onto current origin/master at 18297f3aff71d11ac5951e064245ebd86e1c87aa; latest release checked: v0.51.62.
  • python -m pytest tests/test_update_banner_fixes.py::TestUpdateSummaryRouteModelSelection -q1 passed in 2.39s
  • python -m pytest tests/test_update_banner_fixes.py::TestUpdateSummaryRouteModelSelection tests/test_update_banner_fixes.py::TestWhatsNewSummaryToggle -q15 passed in 2.49s
  • python -m pytest tests/test_update_banner_fixes.py -q60 passed in 3.74s
  • python -m py_compile api/routes.py api/updates.py
  • node --check static/ui.js && node --check static/boot.js && node --check static/panels.js
  • git diff --check origin/master...HEAD

Risks / Follow-ups

  • Generated summary quality still depends on the configured auxiliary.compression model, or the main model when fallback is used.
  • If maintainers later want a dedicated update_summary aux task, that should be registered/documented in Hermes Agent rather than introduced only in WebUI.

Model Used

  • OpenAI GPT-5.5 via Codex CLI, with local terminal/file tooling for GitHub PR refresh, rebase, tests, and verification.

@Jordan-SkyLF
Jordan-SkyLF force-pushed the fix/update-summary-category-dedup branch 2 times, most recently from afbcc9a to c73d63e Compare May 14, 2026 07:20
nesquena-hermes added a commit that referenced this pull request May 14, 2026
stage-354: 3-PR contributor batch — #2228 profile model picker + #2234 update-banner cleanup + #2236 silent-failure detection scope fix
@nesquena-hermes

Copy link
Copy Markdown
Collaborator

Heads-up: the earlier 3-PR portion of this PR (commit afbcc9a6 — "fix: wrap update banner on mobile" + 62eb703d — "fix: avoid duplicate update summary bullets") shipped in v0.51.61 as part of stage-354 (PR #2239, merged 2026-05-14 07:39Z).

You pushed a new commit c73d63e8 shortly after the merge — that one is not in master yet. It adds substantive new functionality (_split_summary_category + _unique_summary_bullets helpers + scrollable summary panel for longer summaries) that's separate from what shipped. Since the GitHub auto-close compares head SHA to merge SHA and they don't match, this PR stayed OPEN.

A few options:

  1. Rebase against master and let this PR carry only the new c73d63e8 changes (the scrollable-summary + category-split helpers). The two earlier commits will fold into the rebase as already-applied.
  2. Open a fresh PR for just the new functionality from c73d63e8 and close this one. Cleaner if the new work has its own thinking-path / before-after evidence.
  3. Close this PR as-is if you intended c73d63e8 to be a separate concern that's still cooking.

Whichever you prefer — the shipped portion is good, no rework needed on what's already in master. Just need to figure out the right handle for the additional summary-category work.

Thanks again for the cleanup work — three improvements in one PR is a lot to land smoothly!

— maintainer

@Jordan-SkyLF
Jordan-SkyLF force-pushed the fix/update-summary-category-dedup branch 4 times, most recently from cc27660 to a291ffd Compare May 14, 2026 08:07
@Jordan-SkyLF Jordan-SkyLF changed the title fix: clean up update summaries and banner wrapping fix: refine update summary category handling May 14, 2026
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 14, 2026
… 0.51.61) (#463)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/nesquena/hermes-webui](https://github.com/nesquena/hermes-webui) | patch | `0.51.57` → `0.51.61` |

---

### Release Notes

<details>
<summary>nesquena/hermes-webui (ghcr.io/nesquena/hermes-webui)</summary>

### [`v0.51.61`](https://github.com/nesquena/hermes-webui/releases/tag/v0.51.61)

[Compare Source](nesquena/hermes-webui@v0.51.60...v0.51.61)

##### What's Changed

- stage-354: 3-PR contributor batch — [#&#8203;2228](nesquena/hermes-webui#2228) profile model picker + [#&#8203;2234](nesquena/hermes-webui#2234) update-banner cleanup + [#&#8203;2236](nesquena/hermes-webui#2236) silent-failure detection scope fix by [@&#8203;nesquena-hermes](https://github.com/nesquena-hermes) in [#&#8203;2239](nesquena/hermes-webui#2239)
- Add model picker to profile creation by [@&#8203;franksong2702](https://github.com/franksong2702) in [#&#8203;2228](nesquena/hermes-webui#2228)
- fix: silent failure detection scans only new messages, not full history by [@&#8203;jasonjcwu](https://github.com/jasonjcwu) in [#&#8203;2236](nesquena/hermes-webui#2236)

**Full Changelog**: <nesquena/hermes-webui@v0.51.60...v0.51.61>

### [`v0.51.60`](https://github.com/nesquena/hermes-webui/blob/HEAD/CHANGELOG.md#v05160--2026-05-14--Release-AJ-stage-353--3-PR-overlapping-Appearance--critical-2223-compression-rotation-data-loss-fix--Opus-SHOULD-FIX-on-parentsessionid)

[Compare Source](nesquena/hermes-webui@v0.51.59...v0.51.60)

##### Fixed

- **PR [#&#8203;2227](nesquena/hermes-webui#2227 by [@&#8203;theh4v0c](https://github.com/theh4v0c) (closes [#&#8203;2223](nesquena/hermes-webui#2223) — critical) — Context compression no longer destroys session history. The previous implementation renamed `old_sid.json` → `new_sid.json` before the new compressed session had been saved, destroying the only persistent copy of the full conversation. When the summarisation LLM call also failed, the user was left with zero recoverable messages and the bug report `Summary generation was unavailable. N message(s) were removed to free context space but could not be summarized.` text with no way to scroll back. The fix removes the destructive `old_path.rename(new_path)` call: `old_sid.json` is preserved intact as an immutable pre-compression archive, `new_sid.json` is created fresh via `s.save()`, and `parent_session_id` is set on the continuation session so the frontend can traverse the lineage chain back to the original. Even when summarisation or `s.save()` fails, the original conversation file survives on disk. New 106-line regression test file covers the no-rename invariant, parent\_session\_id stamping, and marker-only-result preservation. Stage-353 Opus SHOULD-FIX applied inline: the preservation block previously cleared `s.parent_session_id` before saving the snapshot (writing `parent=None` to `old_sid.json` on disk) and used a `if not s.parent_session_id` guard when stamping the continuation. Both bugs broke fork-of-fork compression lineage — a `/branch` fork that subsequently compressed would lose its "Forked from X" badge on the snapshot AND the continuation would skip past the snapshot back to the original fork parent. Maintainer fix removes the parent clearing during preservation (preserves the fork lineage on disk) and drops the `if not` guard (always stamps continuation to `old_sid`). Two new regression tests pin both invariants. Traversal now consistently walks new → old → old.parent → ... root.

- **PR [#&#8203;2222](nesquena/hermes-webui#2222 by [@&#8203;franksong2702](https://github.com/franksong2702) — Settings → Appearance now wraps the "Load older messages while scrolling up" checkbox in its own `<label>` AND moves it into its own `settings-field` div instead of leaving it orphaned after the session-jump description with a stray closing `</label>`. Stage-353 maintainer resolution adopted PR [#&#8203;2227](nesquena/hermes-webui#2227 stronger structural variant (each preference in its own `settings-field`) over PR [#&#8203;2222](nesquena/hermes-webui#2222 smaller in-place wrap. Regression test `test_session_endless_scroll.py` pins the new per-label per-settings-field contract.

##### Added

- **PR [#&#8203;2225](nesquena/hermes-webui#2225 by [@&#8203;franksong2702](https://github.com/franksong2702) (refs [#&#8203;2224](nesquena/hermes-webui#2224)) — Adds an Extra Large option to Settings → Appearance → Font size for tablet and large-desktop readability. The new `xlarge` value is accepted by the persisted settings contract, appears alongside the existing Small / Default / Large picker options, and scales the same key UI text surfaces already covered by the font-size preference: sidebar session rows, chat message bodies/headings/code/tables, the composer textarea, workspace file rows, and app-level em/rem text. The picker grid now uses `repeat(auto-fit, minmax(96px,1fr))` instead of a fixed 3-column grid so the fourth option doesn't crowd narrow viewports.

### [`v0.51.59`](https://github.com/nesquena/hermes-webui/blob/HEAD/CHANGELOG.md#v05159--2026-05-14--Release-AI-stage-352--4-PR-clean-batch--summarycache-LRU-cap--reMULTILINE-strip-fix--Compact-sidebar-lineage-hide--CONTRIBUTORSREADME-refresh)

[Compare Source](nesquena/hermes-webui@v0.51.58...v0.51.59)

##### Fixed

- **PR [#&#8203;2217](nesquena/hermes-webui#2217 by [@&#8203;franksong2702](https://github.com/franksong2702) (refs [#&#8203;2215](nesquena/hermes-webui#2215) Fix B) — Drops the leftover `re.MULTILINE` flag from the "the user is asking" pre-amble strip pattern in `api/streaming.py:695`. PR [#&#8203;2213](nesquena/hermes-webui#2213) removed `re.MULTILINE` from the three sibling wrapper-strip patterns (`<think>`, MiniMax, Gemma) but missed this one instance. With `re.MULTILINE`, `^` matched the start of any line in the response, so a mid-response line that legitimately started with "The user is asking us to wait" could be stripped silently. Now the pattern only matches when the entire response leads with that wrapper, consistent with the other strips. One-flag, two-character change + regression test pinning the new behavior.

- **PR [#&#8203;2216](nesquena/hermes-webui#2216 by [@&#8203;franksong2702](https://github.com/franksong2702) (closes [#&#8203;2215](nesquena/hermes-webui#2215) Fix A) — Caps the `_summary_cache` for per-target update summaries with an `OrderedDict`-backed LRU bounded at 16 entries. Pre-fix the cache was an unbounded plain dict introduced in PR [#&#8203;2207](nesquena/hermes-webui#2207); cardinality is small in practice (0-2 active update ranges per server lifetime) so this is defensive future-proofing rather than a leak being hit today. Cache hits call `move_to_end()` to refresh recency; cache writes call `popitem(last=False)` to evict the oldest entry when at capacity. Overwrites of existing keys bypass eviction. Both operations run under the existing `_cache_lock` for thread safety. With Fix A and Fix B both shipped, issue [#&#8203;2215](nesquena/hermes-webui#2215) is closed.

- **PR [#&#8203;2219](nesquena/hermes-webui#2219 by [@&#8203;franksong2702](https://github.com/franksong2702) (refs [#&#8203;2218](nesquena/hermes-webui#2218)) — Compact sidebar density no longer shows compressed-session prior-turn lineage badges or expandable lineage segment rows. Pre-fix, Compact density (the default) exposed `N prior turns` badges that users read as an affordance for opening earlier conversation history — but lineage segments aren't guaranteed to have complete WebUI-loadable transcripts, so clicking them could lead to `Session not available in web UI` errors. Now the sidebar still collapses compressed continuations to the latest tip, but the lineage metadata only renders in Detailed density. Avoids the lineage report fetch/merge work entirely in Compact density since the affordance is hidden. Updates the sidebar regression test to pin the Detailed-only contract. Visual before/after evidence shipped under `docs/pr-media/2218/`.

##### Docs

- **PR [#&#8203;2220](nesquena/hermes-webui#2220 by [@&#8203;nesquena-hermes](https://github.com/nesquena-hermes) — Refreshes `CONTRIBUTORS.md` and the README contributor section to reflect the 14 releases shipped between v0.51.44 (last refresh) and v0.51.58. Total contributors: 130 → 137. Total PR credits: 568 → 646. Seven first-time contributors added across v0.51.45–v0.51.58: [@&#8203;lucasrc](https://github.com/lucasrc) (auth trilogy), [@&#8203;LumenYoung](https://github.com/LumenYoung) (streaming hot path), [@&#8203;MrFant](https://github.com/MrFant) (reasoning\_content whitelist), [@&#8203;xz-dev](https://github.com/xz-dev) (thinking-card state + session-scoped metering), [@&#8203;legeantbleu](https://github.com/legeantbleu) (French locale), [@&#8203;ayushere](https://github.com/ayushere) (ctl.sh macOS compat), [@&#8203;plerohellec](https://github.com/plerohellec). Bucket promotions: [@&#8203;dobby-d-elf](https://github.com/dobby-d-elf) (2 → 6 PRs), [@&#8203;samuelgudi](https://github.com/samuelgudi) / [@&#8203;vcavichini](https://github.com/vcavichini) / [@&#8203;hualong1009](https://github.com/hualong1009) / [@&#8203;michael-dg](https://github.com/michael-dg) promoted from single-PR to two-PR. [@&#8203;Jordan-SkyLF](https://github.com/Jordan-SkyLF) added to top-contributors with a recent burst of UX polish PRs. [@&#8203;lucasrc](https://github.com/lucasrc) and [@&#8203;LumenYoung](https://github.com/LumenYoung) promoted into the special-thanks roll.

### [`v0.51.58`](https://github.com/nesquena/hermes-webui/blob/HEAD/CHANGELOG.md#v05158--2026-05-13--Release-AH-stage-351--6-PR-net-positive-ready-batch--perf-CLI-scan-cache--thinking-tag-leading-only--MCP-tools-pagination--per-target-update-summaries--sweep-animation-tune--cron-badge)

[Compare Source](nesquena/hermes-webui@v0.51.57...v0.51.58)

##### Fixed

- **PR [#&#8203;2210](nesquena/hermes-webui#2210 by [@&#8203;Jordan-SkyLF](https://github.com/Jordan-SkyLF) — MCP Tools list in Settings → System no longer renders an unbounded inventory that makes the settings panel scroll-trapping. Added a toolbar (result-count summary, page-size 5/10/20/50/all, search input), bounded scroll area with consistent height, paginated rendering, and focused regression coverage for the large-inventory case. Existing WebUI-only/runtime-only contract preserved (no MCP server probing, no agent-side changes). Visual before/after evidence shipped under `docs/pr-media/2210/`.

- **PR [#&#8203;2213](nesquena/hermes-webui#2213 by [@&#8203;franksong2702](https://github.com/franksong2702) (fixes [#&#8203;2152](nesquena/hermes-webui#2152)) — Literal `<think>`/`</think>` discussions in normal assistant prose are no longer stripped from saved messages and re-renders. The old server cleanup and stored-message render regexes stripped the first closed thinking-looking block anywhere in the content. PR aligns saved/static paths with the existing streaming rule: provider reasoning wrappers (`<think>...</think>`, MiniMax `<|channel>thought...<channel|>`, Gemma 4 `<|turn|>thinking...<turn|>`) are stripped only when they lead the response (i.e. the wrapper is the first non-whitespace content).

- **PR [#&#8203;2149](nesquena/hermes-webui#2149 by [@&#8203;starship-s](https://github.com/starship-s) — `/api/session` loads no longer pay the cost of full external CLI session discovery when opening an ordinary WebUI-native chat. Caches CLI/external session scans briefly, skips CLI metadata lookup for ordinary WebUI-native session loads, and reuses a single in-memory ID snapshot during session-index pruning. Messaging, read-only, external-agent, and CLI-marked sidecars still take the CLI metadata path; CLI-only sessions still use the existing fallback. Stage-351 maintainer fix renamed the existing `_needs_cli_session_metadata()` gate to the broader `_session_requires_cli_metadata_lookup()` from this PR — strictly more inclusive (now also covers `read_only=True` sidecars, `session_source` markers, and source\_tag/raw\_source/platform metadata so legacy-imported sidecars still get the slow path when they need it).

##### Added

- **PR [#&#8203;2207](nesquena/hermes-webui#2207 by [@&#8203;Jordan-SkyLF](https://github.com/Jordan-SkyLF) (fixes [#&#8203;1579](nesquena/hermes-webui#1579)) — Update banner now shows target-aware "What's new?" links: WebUI updates link to the WebUI comparison, Agent updates link to the Agent comparison. Agent-only and WebUI-only update states no longer show a misleading cross-target comparison action. Opt-in settings toggle enables human-readable LLM-generated update summaries for each target's diff; users can still open the original diff from the summary. Cached/generated-summary button states persist across refreshes. Extended update-banner regression coverage for the diff-link and summary flows. Visual evidence: `docs/images/update-banner-whats-new-{before,after}.png` + summary on/off variants.

- **PR [#&#8203;2206](nesquena/hermes-webui#2206 by [@&#8203;vcavichini](https://github.com/vcavichini) — Cron list now shows a 🤖 emoji badge for jobs running in agent mode (`no_agent=false`). Cron detail view shows the configured provider/model next to the Mode badge, falling back to "default" when neither is explicitly set for agent-mode crons. UI-only change.

- **PR [#&#8203;2212](nesquena/hermes-webui#2212 by [@&#8203;dobby-d-elf](https://github.com/dobby-d-elf) — Tunes the Activity sweep animation introduced in PR [#&#8203;2203](nesquena/hermes-webui#2203) (stage-350) — softer color stops, less aggressive contrast, smoother fade. CSS-only follow-up.

</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/463
@nesquena-hermes

Copy link
Copy Markdown
Collaborator

Re-read the PR after the force-push — the two earlier commits (afbcc9a6 wrap-banner + 62eb703d dedup) are correctly out of the diff (they shipped via stage-354 / PR #2239), and what remains is the focused third improvement: categorized Notice: / Worth knowing: summary bullets + an auxiliary update_summary model routing layer + a scrollable summary panel. Net diff is now 158 +, 51 - across 5 substantive files. Notes from reading the actual code.

Categorized bullet parsing

api/updates.py:_split_summary_category() is the parser doing the work:

match = re.match(r'^\s*(?:[-*•]+|\d+[.)])?\s*(notice|what you(?:ll|\'ll| will) notice|user(?:s)? will notice|worth knowing|worth|note)\s*:\s*(.+)$', raw, re.I)

This is permissive — accepts Notice:, What you'll notice:, Worth:, Note:, Users will notice: — which is right for what LLMs realistically emit. The pairing with _categorized_summary_bullets_from_text() then partitions into notice/worth and dedups. The "fall back to the legacy single-bucket parser if zero notice bullets are recovered" path at _format_update_summary_sections() is the right safety net for when the model ignores the prefix instruction:

notice_items, worth_items = _categorized_summary_bullets_from_text(summary_text)
if not notice_items:
    notice_items = _summary_bullets_from_text(summary_text, fallback_items=_fallback_update_bullets(details))

The behavior change from the old code — which sliced the first 3 as notice and remainder as worth (bullets[:3] / bullets[3:]) — is meaningful: the LLM now controls the split via its prefix, and there's no longer a hard worth_items[:2] cap. The test test_update_summary_keeps_all_categorized_notice_and_worth_bullets pins exactly this (5 notice + 2 worth all preserved), so the cap removal is intentional and not a regression. Good.

Auxiliary update_summary routing — but this task isn't a known aux task

api/routes.py:5358-5370 adds:

from agent.auxiliary_client import get_text_auxiliary_client

aux_client, aux_model = get_text_auxiliary_client(
    "update_summary",
    main_runtime=main_runtime,
)
if aux_client is not None and aux_model:
    response = aux_client.chat.completions.create(
        model=aux_model,
        messages=messages,
    )
    return str(response.choices[0].message.content or "").strip()

This calls get_text_auxiliary_client("update_summary", ...) at ~/.hermes/hermes-agent/agent/auxiliary_client.py:3199-3221. That function resolves via _resolve_task_provider_model(task) at line 3800, which reads config["auxiliary"]["update_summary"] from hermes_cli.config.load_config().

Two things to verify:

  1. update_summary is not in the documented list of known aux tasks. call_llm()'s docstring at auxiliary_client.py:4108-4111 enumerates "compression", "vision", "web_extract", "session_search", "skills_hub", "mcp", "title_generation". And hermes_cli/main.py:2046 lists the title_generation slug for the setup wizard. WebUI is effectively defining a new auxiliary task here without coordinating with the agent's known-task registry. That works at runtime — _resolve_task_provider_model() falls through to "auto" if no auxiliary.update_summary config block exists — but it means a user has to know to add an unlisted task name to their config.yaml to override the model. Worth either (a) documenting the new task name in the changelog/CONTRIBUTING and adding it to hermes_cli/main.py:2046 and hermes_cli/config.py:868-region defaults, or (b) re-using auxiliary.web_extract or another text-aux task with a route comment explaining why.

  2. The fallback path includes building a full AIAgent instance just for one chat turn. The pre-fix code also built AIAgent; the only behavior change is the try-aux-first added on top. The try/except Exception around the aux call at api/routes.py:5358-5371 is broad but appropriate — anything unexpected (provider down, model 404, network error, missing config) falls through to the main-model AIAgent path. Good defensive shape.

Scrollable summary panel CSS contract

static/style.css adds one line that the test pins literally:

#updateSummaryPanel{max-height:min(34vh,260px);overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:var(--accent) transparent;}

The scrollbar-gutter:stable + overscroll-behavior:contain choice is correct for a panel inside an update banner — avoids layout-shift jitter when the scrollbar appears, and prevents the body from scrolling when the user reaches the bottom of the summary list. Worth keeping overscroll-behavior since some users will read summaries on small touchscreens where momentum bleed-through is jarring.

Verdict

The force-push correctly removed the already-merged hunks, and what remains is genuinely a follow-up (refines what stage-354 shipped). Strong recommend on item (1) above: either register update_summary as a known aux task in the agent's wizard/config defaults, or rename to reuse auxiliary.web_extract / auxiliary.compression. Otherwise users who want to override the model won't know the magic key exists. Everything else looks ready to land.

— maintainer

@Jordan-SkyLF

Copy link
Copy Markdown
Contributor Author

Addressed the aux-routing note in 97b68f0: update summaries now reuse the documented auxiliary.compression text task instead of introducing a WebUI-only auxiliary.update_summary key.

Also refreshed the changelog, focused regression test, and PR body verification. CI is green on 3.11 / 3.12 / 3.13.

@nesquena-hermes

Copy link
Copy Markdown
Collaborator

Heads-up: the rebase + category-refinement portion of this PR (commit a291ffd) shipped in v0.51.62 as part of stage-355 (PR #2263, merged 2026-05-14 15:43Z).

You also pushed a new commit 97b68f0 ("fix: use documented aux model for update summaries") shortly after — that one is not in master and is a substantively new concern (which aux model the update summaries use, vs the category dedup work that just shipped).

Since the merge SHA didn't match the head SHA, GitHub kept this PR open. Stage-355 also includes 10 other PRs that landed since this branch's base, so the diff vs master is now ~30 files behind.

A few options:

  1. Rebase this branch against current master and let the PR carry only the new 97b68f0 commit. The earlier two commits will be already-applied on rebase.
  2. Close this PR and open a fresh one for the aux-model concern alone — likely cleaner since the new work has a different theme than the category dedup it was riding on.
  3. Close this PR as-is if 97b68f0 was just a quick follow-up you'd rather table.

Whichever you pick — a291ffd's changes are good in master, no rework needed there. The aux-model question can land separately on a fresh branch off current master if that's easier.

Thanks for the iteration speed — 3 distinct improvements rolled across two release windows is a lot to land cleanly!

— maintainer

@Jordan-SkyLF
Jordan-SkyLF force-pushed the fix/update-summary-category-dedup branch from 97b68f0 to 339e625 Compare May 14, 2026 15:51
@Jordan-SkyLF Jordan-SkyLF changed the title fix: refine update summary category handling fix: use documented aux model for update summaries May 14, 2026
@Jordan-SkyLF

Copy link
Copy Markdown
Contributor Author

Rebased this PR onto current master and narrowed it to the standalone aux-model follow-up in 339e625: update summaries now reuse documented auxiliary.compression with main-model fallback, and the already-shipped category/UI work is out of the diff.

Refreshed the title/body/changelog and reran verification. CI is green on 3.11 / 3.12 / 3.13.

@nesquena-hermes nesquena-hermes closed this pull request by merging all changes into nesquena:master in e5ca59b May 14, 2026
iosub pushed a commit to iosub/HERMES-hermes-webui2 that referenced this pull request May 14, 2026
fix: use documented aux model for update summaries (Jordan-SkyLF, post-rebase)
iosub pushed a commit to iosub/HERMES-hermes-webui2 that referenced this pull request May 14, 2026
…ed for 2-PR stage-356 (nesquena#2234 post-rebase aux-model + nesquena#2265 mixed-case provider key fix)
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 — [#&#8203;2234](nesquena/hermes-webui#2234) aux-model routing + [#&#8203;2265](nesquena/hermes-webui#2265) mixed-case provider canonicalization (closes [#&#8203;2245](nesquena/hermes-webui#2245)) by [@&#8203;nesquena-hermes](https://github.com/nesquena-hermes) in [#&#8203;2267](nesquena/hermes-webui#2267)
- fix: use documented aux model for update summaries by [@&#8203;Jordan-SkyLF](https://github.com/Jordan-SkyLF) in [#&#8203;2234](nesquena/hermes-webui#2234)
- Fix configured provider models after key canonicalization by [@&#8203;Michaelyklam](https://github.com/Michaelyklam) in [#&#8203;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
@Jordan-SkyLF
Jordan-SkyLF deleted the fix/update-summary-category-dedup branch May 16, 2026 10:03
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
fix: clean up update summaries and banner wrapping (Jordan-SkyLF)
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
stage-354: 3-PR contributor batch — nesquena#2228 profile model picker + nesquena#2234 update-banner cleanup + nesquena#2236 silent-failure detection scope fix
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
fix: refine update summary category handling (Jordan-SkyLF, post-v0.51.61 rebase)

# Conflicts:
#	CHANGELOG.md
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
fix: use documented aux model for update summaries (Jordan-SkyLF, post-rebase)
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
…ed for 2-PR stage-356 (nesquena#2234 post-rebase aux-model + nesquena#2265 mixed-case provider key fix)
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
stage-356: small 2-PR follow-up batch — nesquena#2234 aux-model routing + nesquena#2265 mixed-case provider canonicalization (closes nesquena#2245)
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
fix: clean up update summaries and banner wrapping (Jordan-SkyLF)
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
stage-354: 3-PR contributor batch — nesquena#2228 profile model picker + nesquena#2234 update-banner cleanup + nesquena#2236 silent-failure detection scope fix
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
fix: refine update summary category handling (Jordan-SkyLF, post-v0.51.61 rebase)

# Conflicts:
#	CHANGELOG.md
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
fix: use documented aux model for update summaries (Jordan-SkyLF, post-rebase)
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
…ed for 2-PR stage-356 (nesquena#2234 post-rebase aux-model + nesquena#2265 mixed-case provider key fix)
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
stage-356: small 2-PR follow-up batch — nesquena#2234 aux-model routing + nesquena#2265 mixed-case provider canonicalization (closes nesquena#2245)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants