Skip to content

Clarify model scope in composer and settings#1241

Closed
franksong2702 wants to merge 1 commit intonesquena:masterfrom
franksong2702:franksong2702/model-scope-clarity
Closed

Clarify model scope in composer and settings#1241
franksong2702 wants to merge 1 commit intonesquena:masterfrom
franksong2702:franksong2702/model-scope-clarity

Conversation

@franksong2702
Copy link
Copy Markdown
Contributor

@franksong2702 franksong2702 commented Apr 29, 2026

Thinking Path

  • Hermes WebUI now has two model controls with different scopes: the Composer model selector changes the current conversation, while Preferences -> Default Model updates the default for new conversations.
  • That distinction was easy to miss because the old Composer toast implied a future/new-conversation effect, and Preferences did not explain what the default model controls.
  • This PR keeps the behavior unchanged and clarifies the mental model directly where users make the choice.
  • It is a narrow UI-copy slice under the broader provider/model source-of-truth work tracked in Clarify and harden Provider/Model source-of-truth across WebUI, CLI, and Gateway #1240.

What Changed

  • Added a sticky note at the top of the Composer model dropdown:
    • Applies to this conversation from your next message.
  • Updated the Composer model-selection toast to use the same wording.
  • Added helper copy below Preferences -> Default Model:
    • Used for new conversations. Existing conversations keep their selected model.
  • Added i18n keys for the new model-scope copy.
  • Added regression coverage for the dropdown note, toast wording, and Preferences copy.
  • Added a changelog entry.

Why It Matters

This removes the most immediate user-facing ambiguity between:

  • changing the model for the current conversation, and
  • changing the Hermes default model used for new conversations.

It does not try to solve the larger provider/model source-of-truth problem in one PR. That broader work remains tracked in #1240 and related follow-ups.

Refs #1240.

Screenshots

Screenshot 1 — Preferences now clarifies that Default Model is used for new conversations, while existing conversations keep their selected model.
截屏2026-04-29 11 23 09

Screenshot 2 — The Composer dropdown screenshot shows the matching sticky note at the top of the model list, using the same scope language as the toast.
截屏2026-04-29 11 22 54

Verification

  • pytest tests/test_model_scope_copy.py tests/test_provider_mismatch.py tests/test_issues_907_908_909_model_dropdown.py tests/test_issue895_894_nous_prefix.py
  • node --check static/ui.js
  • node --check static/boot.js
  • node --check static/i18n.js
  • git diff --check

Risks / Follow-ups

  • This does not change provider/model persistence, validation, fallback, or catalog source-of-truth behavior.
  • Preferences -> Default Model still writes to the Hermes Agent config through the existing /api/default-model path.
  • Follow-up discussion: Composer-scoped actions currently use the global top-right toast system. We may want a separate issue to ask Aron whether model-picker feedback should be localized near the Composer/model chip instead.

Model Used

  • Provider: OpenAI
  • Model: GPT-5 via Codex
  • Notable tool use: local code inspection, targeted pytest regression tests, Node syntax checks

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Thanks for this focused UX-copy PR, @franksong2702! The mental model clarification for composer vs. preferences model scope is exactly the kind of low-risk, high-value change that helps users before they hit the confusion.

The two-sentence additions are precise:

  • Composer: "Applies to this conversation from your next message." — sets the right expectation (not retroactive, not global)
  • Preferences: "Used for new conversations. Existing conversations keep their selected model." — distinguishes default from current-session scope

Quick confirms before merge:

i18n coverage
The PR adds i18n keys for the new copy. Can you confirm both new keys (model_scope_note or equivalent) are present in all active locales (en, ko, zh, de, es, and any others in the current i18n.js)? A missing key in one locale would show undefined or a raw key to users of that locale.

Toast wording alignment
The Composer model-selection toast is updated to match the sticky note wording. Confirming the toast is rendered via the i18n system (not a hardcoded string) so all locales get the updated copy.

Test file
The test_model_scope_copy.py tests cover the dropdown note, toast wording, and Preferences copy — that's the right coverage surface for a copy-only change.

The screenshots show the changes in context and look good. This is a clean PR1 slice under #1240 — the right way to chip away at the broader provider/model UX problem without taking on too much scope at once.

🤖 Automated triage via nesquena-hermes

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Merged in v0.50.237 via #1243. Thank you @franksong2702! 🎉

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