Repository navigation
feat(desktop): configurable model/reasoning picker with explicit catalog refresh - #112351
Open
jkorzeniak wants to merge 14 commits into
Open
jkorzeniak wants to merge 14 commits into
jkorzeniak wants to merge 14 commits into
Conversation
jkorzeniak
marked this pull request as ready for review
September 16, 2026 08:04
This branch has not been deployed
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.
What changes
Adds a persistent Model and Reasoning Picker preference in Desktop Appearance settings:
Unknown saved values fall back to Split; compact layouts keep their existing precedence. Copy is included for all six supported locales.
The shared model-options and model-selection paths reuse the existing disk catalog until explicit refresh or credential identity change. Opening the picker remains nonblocking: missing catalogs warm in the background. Outside the request-scoped manual-refresh policy, the existing TTL/SWR behavior remains.
The PR also preserves a manual model choice during initial gateway discovery/reconnect, and keeps managed local-provider identity through startup and conversation resume. Local model validation still uses the runtime endpoint.
Compatibility with current main
Updated through upstream
7c4d2a812ed63a93e59bfb5ef93701fdc283147c, preserving branch history.non_blocking_catalogs=not refresh; a degraded provider cannot stall opening the picker.Unified uses upstream's existing
selectfollowed byapplyPreset: a rejected selection does not apply options. This PR does not introduce an atomic model/options transaction or include the separate local Antigravity integration.Validation
Native Windows, Python 3.11, Node 22.23.2; isolated checkouts with their own dependencies.
fe32647090: 245 Python tests across 10 files viascripts/run_tests.sh; 76 Desktop tests across 7 files; full Desktop TypeScript checks passed.7c4d2a812e: 11 Python tests across 3 files passed for manual cache reuse, nonblocking reads and setup catalogs. Desktop source is unchanged by this final upstream update.The cache tests use real temporary disk caches and production validator/prefetch code, with external discovery replaced by fixtures. They cover aged entries, explicit refresh, credential rotation, custom endpoints and plugin-owned catalogs. UI coverage includes persisted style, startup selection, keyboard rows, and applying Unified options only after successful selection.
scripts/run_tests.sh tests/hermes_cli/test_manual_model_catalog.py tests/hermes_cli/test_model_options_read_path_catalogs.py tests/hermes_cli/test_local_runtime.py tests/hermes_cli/test_model_validation.py npm run typecheck --workspace apps/desktop npm run test --workspace apps/desktop -- src/store/picker-style.test.ts src/app/shell/model-catalog-menu.test.tsx src/app/session/hooks/use-model-controls.test.tsxManual checks and limits
Check all four styles, restart persistence, narrow composers, Unified rejected selections, explicit catalog refresh and a local-model conversation resumed after restart. Earlier installed-build checks confirmed startup and local-provider persistence; a complete four-style GUI pass has not been repeated for this revision.
The full repository suite and non-Windows execution were not run. Forced-refresh failure behavior is unchanged. Another client or explicit refresh can update the shared cache; this is not a snapshot pinned across requests.
AI assistance: OpenAI Codex assisted with code, tests and the PR description; Claude Opus through Hermes contributed the initial plan and an earlier audit. The human contributor specified the workflow, reported regressions and requested this contribution.