@@ -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"
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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/);
|
||||
});
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
Reference in New Issue
Block a user