From 7f92e3311ba210bc3e398efd4a8abbce3c285ef8 Mon Sep 17 00:00:00 2001 From: Raven Scott Date: Fri, 11 Sep 2026 18:27:56 -0400 Subject: [PATCH] Complete local Bare smoke path --- daemon/dbus-service.js | 4 ++-- daemon/qvac-master.js | 10 +++++++++- skills/computer-act.js | 2 +- vendor/agent-harness/lib/qvac.js | 4 ++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/daemon/dbus-service.js b/daemon/dbus-service.js index 7992c80..f4bd0ed 100644 --- a/daemon/dbus-service.js +++ b/daemon/dbus-service.js @@ -22,8 +22,8 @@ export async function serveOnSessionBus(daemon) { Sleep() { daemon.sleep(); } Shutdown() { daemon.close(); } PushToTalk(pressed) { daemon.setPushToTalk?.(Boolean(pressed)); } - Say(text) { return daemon.say?.(text); } - Ask(text) { return daemon.ask(text); } + async Say(text) { await daemon.say?.(text); } + async Ask(text) { await daemon.ask(text); } Cancel() { daemon.cancel(); } SetMode(mode) { daemon.mode = mode; daemon.emit('ModeChanged', mode); } GetState() { return daemon.state; } diff --git a/daemon/qvac-master.js b/daemon/qvac-master.js index 28dc732..9e6a2a3 100644 --- a/daemon/qvac-master.js +++ b/daemon/qvac-master.js @@ -105,9 +105,17 @@ export async function loadAuxiliaryModel(name, modelConfig = {}, modelType = und if (existing) return existing; const sdk = await qvacSdk(); if (typeof sdk.loadModel !== 'function') throw new Error('QVAC SDK does not expose loadModel()'); + const auxiliaryConfig = resolveModelConfigAssets(sdk, modelConfig); + // GPU placement belongs to the LLM model configuration. ASR and TTS have + // their own validated schemas and reject llama.cpp-only keys. + if (!modelType || modelType === 'llm') { + auxiliaryConfig.device = 'gpu'; + auxiliaryConfig.gpu_layers = QVAC_MASTER.gpuLayers; + auxiliaryConfig['mmproj-use-gpu'] = true; + } const loadOptions = { modelSrc: resolveSdkAsset(sdk, name), - modelConfig: { ...resolveModelConfigAssets(sdk, modelConfig), device: 'gpu', gpu_layers: QVAC_MASTER.gpuLayers, 'mmproj-use-gpu': true }, + modelConfig: auxiliaryConfig, }; if (modelType) loadOptions.modelType = modelType; const modelId = await withQvacMaster(() => sdk.loadModel(loadOptions)); diff --git a/skills/computer-act.js b/skills/computer-act.js index 5c8c6e8..298e53e 100644 --- a/skills/computer-act.js +++ b/skills/computer-act.js @@ -7,7 +7,7 @@ export function createComputerActTools({ actuator } = {}) { ['cu_right_click', 'Right-click a coordinate.', { x: { type: 'number' }, y: { type: 'number' } }, 'rightClick'], ['cu_hover', 'Move the visible agent cursor.', { x: { type: 'number' }, y: { type: 'number' } }, 'hover'], ['cu_scroll', 'Scroll at a target.', { ref: { type: 'string' }, x: { type: 'number' }, y: { type: 'number' }, dy: { type: 'number' }, dx: { type: 'number' } }, 'scroll'], - ['cu_drag', 'Drag between semantic refs or coordinates.', { from: {}, to: {} }, 'drag'], + ['cu_drag', 'Drag between semantic refs or coordinates.', { from: { type: 'object', properties: { ref: { type: 'string' }, x: { type: 'number' }, y: { type: 'number' } } }, to: { type: 'object', properties: { ref: { type: 'string' }, x: { type: 'number' }, y: { type: 'number' } } } }, 'drag'], ['cu_type', 'Type Unicode through the granted input backend.', { text: { type: 'string' }, ref: { type: 'string' }, submit: { type: 'boolean' } }, 'type'], ['cu_key', 'Send a keyboard combination through the granted input backend.', { combo: { type: 'string' } }, 'key'], ].map(([name, description, properties, method]) => ({ name, permission: 'computer-use', description, parameters: { type: 'object', properties }, execute: call(method) })); diff --git a/vendor/agent-harness/lib/qvac.js b/vendor/agent-harness/lib/qvac.js index 376073d..6410fb3 100644 --- a/vendor/agent-harness/lib/qvac.js +++ b/vendor/agent-harness/lib/qvac.js @@ -79,7 +79,11 @@ async function ensureInit() { // the in-process inference surface and register the engines they own. mod = await import('@qvac/inference'); const { llmPlugin } = await import('@qvac/inference/llamacpp-completion/plugin'); + const { whisperPlugin } = await import('@qvac/inference/whispercpp-transcription/plugin'); + const { ttsPlugin } = await import('@qvac/inference/tts-ggml/plugin'); mod.registerPlugin(llmPlugin); + mod.registerPlugin(whisperPlugin); + mod.registerPlugin(ttsPlugin); } else { mod = await import('@qvac/sdk'); }