This commit is contained in:
@@ -22,8 +22,8 @@ export async function serveOnSessionBus(daemon) {
|
|||||||
Sleep() { daemon.sleep(); }
|
Sleep() { daemon.sleep(); }
|
||||||
Shutdown() { daemon.close(); }
|
Shutdown() { daemon.close(); }
|
||||||
PushToTalk(pressed) { daemon.setPushToTalk?.(Boolean(pressed)); }
|
PushToTalk(pressed) { daemon.setPushToTalk?.(Boolean(pressed)); }
|
||||||
Say(text) { return daemon.say?.(text); }
|
async Say(text) { await daemon.say?.(text); }
|
||||||
Ask(text) { return daemon.ask(text); }
|
async Ask(text) { await daemon.ask(text); }
|
||||||
Cancel() { daemon.cancel(); }
|
Cancel() { daemon.cancel(); }
|
||||||
SetMode(mode) { daemon.mode = mode; daemon.emit('ModeChanged', mode); }
|
SetMode(mode) { daemon.mode = mode; daemon.emit('ModeChanged', mode); }
|
||||||
GetState() { return daemon.state; }
|
GetState() { return daemon.state; }
|
||||||
|
|||||||
@@ -105,9 +105,17 @@ export async function loadAuxiliaryModel(name, modelConfig = {}, modelType = und
|
|||||||
if (existing) return existing;
|
if (existing) return existing;
|
||||||
const sdk = await qvacSdk();
|
const sdk = await qvacSdk();
|
||||||
if (typeof sdk.loadModel !== 'function') throw new Error('QVAC SDK does not expose loadModel()');
|
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 = {
|
const loadOptions = {
|
||||||
modelSrc: resolveSdkAsset(sdk, name),
|
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;
|
if (modelType) loadOptions.modelType = modelType;
|
||||||
const modelId = await withQvacMaster(() => sdk.loadModel(loadOptions));
|
const modelId = await withQvacMaster(() => sdk.loadModel(loadOptions));
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export function createComputerActTools({ actuator } = {}) {
|
|||||||
['cu_right_click', 'Right-click a coordinate.', { x: { type: 'number' }, y: { type: 'number' } }, 'rightClick'],
|
['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_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_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_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'],
|
['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) }));
|
].map(([name, description, properties, method]) => ({ name, permission: 'computer-use', description, parameters: { type: 'object', properties }, execute: call(method) }));
|
||||||
|
|||||||
Vendored
+4
@@ -79,7 +79,11 @@ async function ensureInit() {
|
|||||||
// the in-process inference surface and register the engines they own.
|
// the in-process inference surface and register the engines they own.
|
||||||
mod = await import('@qvac/inference');
|
mod = await import('@qvac/inference');
|
||||||
const { llmPlugin } = await import('@qvac/inference/llamacpp-completion/plugin');
|
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(llmPlugin);
|
||||||
|
mod.registerPlugin(whisperPlugin);
|
||||||
|
mod.registerPlugin(ttsPlugin);
|
||||||
} else {
|
} else {
|
||||||
mod = await import('@qvac/sdk');
|
mod = await import('@qvac/sdk');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user