From 3915865029e6b32293e5f7caf6ddaffc778eefc3 Mon Sep 17 00:00:00 2001 From: Twest2 Date: Fri, 26 Jun 2026 08:48:38 -0500 Subject: [PATCH] Keep ai model saved when app closes. --- app/renderer/dialogs.js | 7 +++++++ tests/unit/placeholders.test.js | 2 ++ 2 files changed, 9 insertions(+) diff --git a/app/renderer/dialogs.js b/app/renderer/dialogs.js index 37a4972..ababa68 100644 --- a/app/renderer/dialogs.js +++ b/app/renderer/dialogs.js @@ -320,6 +320,11 @@ function showSettingsDialog({ const ollamaModel = makeInput(settings.ai?.ollama?.model || 'llama3.2:1b'); const aiStatus = el('div', { className: 'muted ai-status' }, 'AI stays local through Ollama. Vision-capable models can also inspect the screenshot attached to each step.'); const testAiBtn = el('button', { type: 'button' }, 'Test connection'); + const persistOllamaModel = debounce(() => { + const model = ollamaModel.value.trim(); + // Keep the last model choice even if the dialog is dismissed without a full save. + void api.settings.set({ keyPath: 'ai.ollama.model', value: model }).catch(() => {}); + }, 250); const updateAiStatus = (message, { error = false } = {}) => { aiStatus.textContent = message; @@ -353,6 +358,8 @@ function showSettingsDialog({ setButtonLoading(testAiBtn, false); } }; + ollamaModel.addEventListener('input', () => persistOllamaModel()); + ollamaModel.addEventListener('blur', () => persistOllamaModel.flush()); const placeholderRows = el('div', { className: 'placeholder-rows' }); const rows = []; diff --git a/tests/unit/placeholders.test.js b/tests/unit/placeholders.test.js index 2b15ac3..62c93d6 100644 --- a/tests/unit/placeholders.test.js +++ b/tests/unit/placeholders.test.js @@ -56,12 +56,14 @@ test('settings persist, deep-merge with defaults, and store global placeholders' assert.equal(s1.get('appearance'), DEFAULT_SETTINGS.appearance); s1.set('appearance', 'dark'); s1.set('capture.delayMs', 1500); + s1.set('ai.ollama.model', 'qwen3:0.6b'); s1.setGlobalPlaceholders({ Company: 'Acme', Author: 'Tyler' }); // A fresh instance reads back the changed values merged over defaults. const s2 = new Settings(dir); assert.equal(s2.get('appearance'), 'dark'); assert.equal(s2.get('capture.delayMs'), 1500); + assert.equal(s2.get('ai.ollama.model'), 'qwen3:0.6b'); assert.equal(s2.get('capture.clickMarker'), DEFAULT_SETTINGS.capture.clickMarker); assert.deepEqual(s2.getGlobalPlaceholders(), { Company: 'Acme', Author: 'Tyler' }); });