preserve model selection across Ollama server disconnects

This commit is contained in:
Tyler
2026-05-25 14:55:22 -04:00
parent 6bb936141e
commit a9db471efa
+15 -10
View File
@@ -888,13 +888,13 @@ function fetchModels() {
var e = chrome.runtime.lastError ? chrome.runtime.lastError.message : 'No response'; var e = chrome.runtime.lastError ? chrome.runtime.lastError.message : 'No response';
setStatus('error', humanizeError(e)); setStatus('error', humanizeError(e));
dbg('ERROR', 'fetchModels failed', { error: e }); dbg('ERROR', 'fetchModels failed', { error: e });
resolve(); return; resolve(false); return;
} }
if (!response.ok) { if (!response.ok) {
var msg = humanizeError(response.error || ('HTTP ' + response.status)); var msg = humanizeError(response.error || ('HTTP ' + response.status));
setStatus('error', msg); setStatus('error', msg);
dbg('ERROR', 'fetchModels failed', { error: msg }); dbg('ERROR', 'fetchModels failed', { error: msg });
resolve(); return; resolve(false); return;
} }
var raw = response.data.models || []; var raw = response.data.models || [];
S.models = raw.map(function (m) { S.models = raw.map(function (m) {
@@ -906,7 +906,7 @@ function fetchModels() {
}); });
setStatus('connected', 'Connected'); setStatus('connected', 'Connected');
dbg('MODEL', 'models fetched', { count: S.models.length, models: S.models.map(function(m){ return m.name; }) }); dbg('MODEL', 'models fetched', { count: S.models.length, models: S.models.map(function(m){ return m.name; }) });
resolve(); resolve(true);
} }
); );
}); });
@@ -1311,12 +1311,17 @@ function updateSessionBar() {
function populateModelSelect() { function populateModelSelect() {
var current = (S.activeSession && S.activeSession.model) || ''; var current = (S.activeSession && S.activeSession.model) || '';
modelSelect.innerHTML = '';
if (!S.models.length) { if (!S.models.length) {
var opt = document.createElement('option'); if (!modelSelect.options.length) {
opt.value = ''; opt.textContent = '(no model)'; var opt = document.createElement('option');
modelSelect.appendChild(opt); opt.value = ''; opt.textContent = '(no model)';
modelSelect.appendChild(opt);
}
return;
} }
modelSelect.innerHTML = '';
S.models.forEach(function(m) { S.models.forEach(function(m) {
var opt = document.createElement('option'); var opt = document.createElement('option');
opt.value = m.name; opt.value = m.name;
@@ -2443,8 +2448,8 @@ loadAllData(async function () {
}); });
renderSession(); renderSession();
initEventHandlers(); initEventHandlers();
await fetchModels(); var ok = await fetchModels();
populateModels(); if (ok) populateModels();
}); });
chrome.storage.onChanged.addListener(function (changes, area) { chrome.storage.onChanged.addListener(function (changes, area) {
@@ -2467,7 +2472,7 @@ chrome.storage.onChanged.addListener(function (changes, area) {
var btnCompact = document.getElementById('btn-compact'); var btnCompact = document.getElementById('btn-compact');
if (btnCompact) btnCompact.classList.toggle('active', S.compact); if (btnCompact) btnCompact.classList.toggle('active', S.compact);
} }
if (reconnect) fetchModels().then(populateModels); if (reconnect) fetchModels().then(function (ok) { if (ok) populateModels(); });
}); });
})(); })();