Skip to content

fix: aux-slot endpoint persistence, empty-response failure_reason, #72285 docs (sibling wave) - #73769

Merged
teknium1 merged 3 commits into
mainfrom
hermes/hermes-c643316b
Jul 29, 2026
Merged

teknium1 merged 3 commits into
mainfrom
hermes/hermes-c643316b

Conversation

@teknium1

Copy link
Copy Markdown
Collaborator

Summary

Three sibling follow-ups from this week's merges: auxiliary model assignments now persist their endpoint (sibling of #65254), the gateway's empty-response return path now forwards failure_reason (sibling of #64686), and the #72285 profile-bound HTTP auth breaking change is documented for the next release notes.

Changes

  • hermes_cli/web_server.py: the auxiliary scope of POST /api/model/set persists base_url/api_key into auxiliary.<task>.* (previously dropped — the aux resolver at _resolve_task_provider_model already reads them). Stale-endpoint scrub on provider switch preserved. ModelAssignment docstrings updated.
  • apps/desktop/.../model-settings.tsx: setAuxiliaryToMain / applyAuxiliaryDraft carry the user-defined provider's api_url as base_url, mirroring applyMainModel (fix(desktop): preserve local model provider endpoint #65254).
  • gateway/run.py: the empty-final_response early return in _run_agent forwards failure_reason (fix(gateway): preserve rate-limit failure metadata #64686 fixed only the non-empty path). Also hardened both BasePlatformAdapter identity checks (edit_message, delete_message) with getattr so duck-typed adapters without the attribute mean "capability absent," not AttributeError.
  • website/docs/user-guide/features/api-server.md: new "Multi-profile routing" section with an explicit breaking-change callout — default API_SERVER_KEY is now rejected on /p/<profile>/ prefixes (fix(gateway): bind HTTP auth to routed profiles #72285).

Validation

Suite Result
tests/gateway/test_compression_failure_session_sync.py + test_42039_duplicate_user_message.py 12 passed
tests/hermes_cli/test_web_server.py -k set_model 17 passed
apps/desktop vitest model-settings.test.tsx 20 passed
npx tsc --noEmit (touched files) clean
docusaurus build pass

Infographic

sibling-fix-wave

@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists comp/desktop Electron desktop app (apps/desktop/*) comp/gateway Gateway runner, session dispatch, delivery comp/cli CLI entry point, hermes_cli/, setup wizard sweeper:risk-message-delivery Sweeper risk: may drop, duplicate, misroute, or suppress messages sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades labels Jul 29, 2026
@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on de189ec

all good!

teknium1 added 3 commits July 28, 2026 21:29
Sibling of #65254 (main-slot endpoint preservation): the auxiliary scope of
POST /api/model/set dropped the request's base_url/api_key on the floor, so
an aux slot pinned to a custom/local endpoint silently depended on
model.base_url — and broke the moment the main slot switched away and
cleared it. The aux resolver already reads auxiliary.<task>.base_url/api_key
(_resolve_task_provider_model); this persists them.

Desktop side: setAuxiliaryToMain / applyAuxiliaryDraft now carry the
user-defined provider's api_url as base_url, mirroring applyMainModel.
…n path

Sibling of #64686: _run_agent's empty-final_response early return dropped
failure_reason (and #64686 only fixed the non-empty path), so downstream
consumers (TUI billing surface, transient-failure persistence) lost the
structured reason exactly when a failed run produced no text.

Also hardens the two BasePlatformAdapter identity checks (edit_message /
delete_message) with getattr so duck-typed adapters without the attribute
mean 'capability absent', not AttributeError — this was crashing the
send_progress_messages path for minimal adapters and test fakes.
The multiplexed listener now rejects the default API_SERVER_KEY on
/p/<profile>/ prefixes (fail-closed per-profile keys). Add the
multi-profile routing section with an explicit breaking-change callout
for the next release notes.
@teknium1
teknium1 force-pushed the hermes/hermes-c643316b branch from 668d56c to de189ec Compare July 29, 2026 04:29
@teknium1
teknium1 merged commit 88ff722 into main Jul 29, 2026
48 checks passed
@teknium1
teknium1 deleted the hermes/hermes-c643316b branch July 29, 2026 04:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/desktop Electron desktop app (apps/desktop/*) comp/gateway Gateway runner, session dispatch, delivery P2 Medium — degraded but workaround exists sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:risk-message-delivery Sweeper risk: may drop, duplicate, misroute, or suppress messages type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants