fix(settings): show live models in default model picker and apply to new chats (#872) (#900)

* fix(settings): show live models in default model picker and apply to new chats (#872)

Two related bugs:
1. Settings > Preferences > Default Model dropdown only showed static models
   from /api/models — live-fetched models (e.g. @nous:anthropic/claude-opus-4.7)
   were missing. Now calls _fetchLiveModels() on the settings picker too.
2. New chats ignored the saved default model preference — they always used the
   chat-header dropdown value (which reflects the previous session's model).
   Now newSession() uses the saved default_model and syncs the dropdown.

Extracted _addLiveModelsToSelect() from _fetchLiveModels() so cached live models
can be applied to any <select> element (chat-header or settings picker).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(tests): update live-model prefix tests for _addLiveModelsToSelect extraction

The tests searched for og.dataset.provider, _isPortalFetch, and openrouter
exclusion patterns inside _fetchLiveModels(). These were extracted into
_addLiveModelsToSelect() as part of the #872 fix. Updated regex targets to
check _addLiveModelsToSelect first, falling back to _fetchLiveModels.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore: add multi-tab note on window._defaultModel

Clarifies that window._defaultModel is per-page-load and not synced
across browser tabs, following maintainer feedback on #889.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore: CHANGELOG for v0.50.170

* chore: trigger PR refresh after rebase

---------

Co-authored-by: fr33m1nd <bergeouss@gmail.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>
This commit is contained in:
nesquena-hermes
2026-04-23 09:58:15 -07:00
committed by GitHub
parent cd01e4d5ba
commit 498156a3e8
6 changed files with 92 additions and 66 deletions

View File

@@ -309,11 +309,14 @@ class TestProviderIdInGroupResponse:
def test_fetch_live_models_prefers_data_provider_match(self):
src = read("static/ui.js")
m = re.search(r'function _fetchLiveModels\b.*?\n\}', src, re.DOTALL)
assert m, "_fetchLiveModels not found"
# Live model optgroup matching was extracted to _addLiveModelsToSelect (#872)
m = re.search(r'function _addLiveModelsToSelect\b.*?\n\}', src, re.DOTALL)
if not m:
m = re.search(r'function _fetchLiveModels\b.*?\n\}', src, re.DOTALL)
assert m, "_addLiveModelsToSelect or _fetchLiveModels not found"
fn = m.group(0)
assert 'og.dataset.provider' in fn, (
"_fetchLiveModels must check og.dataset.provider===provider before "
"_addLiveModelsToSelect must check og.dataset.provider===provider before "
"falling back to label substring match"
)
# The data-provider check must come before the label.includes check