mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 11:10:18 +00:00
df0d904d87
Spliced from #1531 by @Asunfly: take Change-1 only (the actual bug fix + cache signature inclusion) and skip Change-2 (auxiliary title-route extra_body change) which is a separate scope concern. ## What Two surgical fixes in api/streaming.py: 1. Line 1820 — `_cfg.cfg.get(...)` → `_cfg.get(...)`. `get_config()` returns a plain dict (not a wrapper exposing `.cfg`). The buggy line raised AttributeError that the surrounding try/except swallowed, so `_reasoning_config` was always None regardless of what `/reasoning <level>` had been set to. Verified locally — `api/streaming.py:1959` already correctly used `_cfg.get(...)` in the same function, so the same `_cfg` was being read two different ways in one file. 2. Line 1888 — added `_reasoning_config or {}` to `_sig_blob`. Without this, switching effort mid-session would fail to take effect because the per-session agent cache key would still match the old entry. Mirrors how `resolved_provider` / `resolved_base_url` already participate in the signature. ## Why splice instead of merge #1531 directly @Asunfly force-pushed a Change-2 onto #1531 after the original review that removes `extra_body={"reasoning": {"enabled": False}}` from `generate_title_raw_via_aux` (the auxiliary title-generation route). That intent is reasonable (let operator-configured `extra_body.reasoning` flow through to the title route) but it touches a different surface and deserves its own PR. The narrow concern is operators who selected a reasoning-capable auxiliary title model without explicitly setting `reasoning.enabled=False` in the task config — pre-Change-2 the WebUI defended against accidental reasoning on the title hot path; post-Change-2 those configs would reason on every new conversation`s title, with cost and latency implications. ## What is NOT in this PR - The `generate_title_raw_via_aux` extra_body refactor (Change-2 from #1531). - The `test_does_not_override_configured_reasoning_extra_body` test (guards Change-2). Asunfly can re-open that as its own focused PR. ## Tests Two new R17b/R17c regression assertions in tests/test_regressions.py: - `test_streaming_reads_reasoning_effort_from_config_dict` — static-source guard: `_cfg.cfg` must not return to streaming.py - `test_streaming_agent_cache_signature_includes_reasoning_config` — catches removal of `_reasoning_config` from `_sig_blob` ## Closes - Closes #1531 (the Change-1 portion ships here; Asunfly can re-open Change-2 as a separate PR if desired) Co-authored-by: Asunfly <[email protected]>