From 874154f39a45a5157713f444bd8a386aa4e1c176 Mon Sep 17 00:00:00 2001 From: Raven Scott Date: Sat, 12 Sep 2026 15:11:49 -0400 Subject: [PATCH] Add Qwen3.5 2B --- apps/gnome-extension/jarvis@qvac.local/settings-catalog.json | 4 ++++ daemon/model-profiles.js | 1 + docs/settings.md | 2 +- test/runtime-tools.test.js | 2 ++ test/settings.test.js | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/gnome-extension/jarvis@qvac.local/settings-catalog.json b/apps/gnome-extension/jarvis@qvac.local/settings-catalog.json index 17a55b1..255fd5e 100644 --- a/apps/gnome-extension/jarvis@qvac.local/settings-catalog.json +++ b/apps/gnome-extension/jarvis@qvac.local/settings-catalog.json @@ -690,6 +690,10 @@ "value": "laptop-8gb", "label": "Small \u00b7 Qwen3 1.7B" }, + { + "value": "laptop-8gb-mm", + "label": "Compact \u00b7 Qwen3.5 2B" + }, { "value": "laptop-16gb", "label": "Balanced \u00b7 Qwen3.5 4B" diff --git a/daemon/model-profiles.js b/daemon/model-profiles.js index b57b003..d4da30d 100644 --- a/daemon/model-profiles.js +++ b/daemon/model-profiles.js @@ -1,5 +1,6 @@ export const MODEL_PROFILES = Object.freeze({ 'laptop-8gb': { model: 'qwen3-1.7b', minRamGb: 8, vision: false }, + 'laptop-8gb-mm': { model: 'qwen3.5-2b', minRamGb: 6, vision: true }, 'laptop-16gb': { model: 'qwen3.5-4b', minRamGb: 10, vision: true }, 'desktop-gpu': { model: 'qwen3.5-9b', minRamGb: 16, vision: true }, }); diff --git a/docs/settings.md b/docs/settings.md index f12b88f..e9780be 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -146,7 +146,7 @@ and WebP quality tune observation detail and processing cost. ### Chat model -- **Chat model profile** — `modelProfile`, default `"laptop-16gb"`. Requires a daemon restart. GPU inference remains required. Choices: `laptop-8gb`, `laptop-16gb`, `desktop-gpu`. +- **Chat model profile** — `modelProfile`, default `"laptop-16gb"`. Requires a daemon restart. GPU inference remains required. Choices: `laptop-8gb`, `laptop-8gb-mm` (Qwen3.5 2B, vision), `laptop-16gb`, `desktop-gpu`. - **Custom chat model** — `chatModel`, default `""`. Advanced: overrides the profile. Empty uses the profile model. Requires restart. ### Agent limits diff --git a/test/runtime-tools.test.js b/test/runtime-tools.test.js index b7c6536..08a032c 100644 --- a/test/runtime-tools.test.js +++ b/test/runtime-tools.test.js @@ -197,6 +197,8 @@ test('QVAC utility tools are exposed only through the master adapter', () => { }); test('model profiles select one master model without creating another runtime', () => { + assert.equal(profile('laptop-8gb-mm').model, 'qwen3.5-2b'); + assert.equal(profile('laptop-8gb-mm').vision, true); assert.equal(profile('desktop-gpu').model, 'qwen3.5-9b'); assert.throws(() => profile('missing'), /unknown Jarvis model profile/); }); diff --git a/test/settings.test.js b/test/settings.test.js index 03ca435..a3b98cf 100644 --- a/test/settings.test.js +++ b/test/settings.test.js @@ -32,6 +32,7 @@ test('saving one window preserves unrelated changes from another and removes con const merged = mergeSettings({ tts_enabled: false, ttsSpeed: 1.5, unrelated: 'kept' }, { ttsEnabled: true }, SETTINGS_FIELDS); assert.deepEqual(merged, { ttsSpeed: 1.5, unrelated: 'kept', ttsEnabled: true }); assert.equal(normalizeSettings(merged, SETTINGS_FIELDS).ttsSpeed, 1.5); + assert.equal(voiceSettings({ modelProfile: 'laptop-8gb-mm' }).modelProfile, 'laptop-8gb-mm'); }); test('every speech preset uses a real registry asset and passes the installed SDK schema', () => {