R2
Rolling release / release (push) Failing after 3m54s
CI / verify (push) Successful in 4m34s

This commit is contained in:
2026-09-11 15:00:17 -04:00
parent 775c33dc09
commit d1f339170e
2 changed files with 17 additions and 9 deletions
+15 -1
View File
@@ -1,4 +1,5 @@
import { createRequire } from 'node:module'; import { createRequire } from 'node:module';
import fs from 'node:fs';
import path from 'node:path'; import path from 'node:path';
const harnessPath = process.env.JARVIS_HARNESS_PATH || path.resolve(new URL('../vendor/agent-harness', import.meta.url).pathname); const harnessPath = process.env.JARVIS_HARNESS_PATH || path.resolve(new URL('../vendor/agent-harness', import.meta.url).pathname);
@@ -18,8 +19,21 @@ export const QVAC_MASTER = Object.freeze({
gpuLayers: 99, gpuLayers: 99,
}); });
export function sdkPackagePath() {
// Package exports intentionally block @qvac/sdk/package.json in current
// releases, so resolve the version file from the two supported install
// layouts instead of requiring an exported subpath.
const candidates = [
path.join(harnessPath, 'node_modules/@qvac/sdk/package.json'),
path.resolve(harnessPath, '../../node_modules/@qvac/sdk/package.json'),
path.resolve(new URL('../node_modules/@qvac/sdk/package.json', import.meta.url).pathname),
];
for (const candidate of candidates) if (fs.existsSync(candidate)) return candidate;
throw new Error(`Jarvis could not resolve @qvac/sdk from the harness or repository; checked ${candidates.join(', ')}`);
}
export function assertSdkVersion() { export function assertSdkVersion() {
const sdkPackage = require(path.join(harnessPath, 'node_modules/@qvac/sdk/package.json')); const sdkPackage = require(sdkPackagePath());
if (!/^0\.19\./.test(sdkPackage.version)) { if (!/^0\.19\./.test(sdkPackage.version)) {
throw new Error(`Jarvis requires vendored @qvac/sdk in the 0.19.x series; found ${sdkPackage.version}`); throw new Error(`Jarvis requires vendored @qvac/sdk in the 0.19.x series; found ${sdkPackage.version}`);
} }
+2 -8
View File
@@ -1,11 +1,5 @@
import { createRequire } from 'node:module';
import { EventEmitter } from 'node:events'; import { EventEmitter } from 'node:events';
import path from 'node:path'; import { acquireQvac, releaseQvac, loadAuxiliaryModel, unloadAuxiliaryModel, qvacSdk, withQvacMaster, assertSdkVersion } from './qvac-master.js';
import { acquireQvac, releaseQvac, loadAuxiliaryModel, unloadAuxiliaryModel, qvacSdk, withQvacMaster } from './qvac-master.js';
const require = createRequire(import.meta.url);
const harnessPath = process.env.JARVIS_HARNESS_PATH || path.resolve(new URL('../vendor/agent-harness', import.meta.url).pathname);
const sdkPackage = require(path.join(harnessPath, 'node_modules/@qvac/sdk/package.json'));
export class QvacVoiceAdapter extends EventEmitter { export class QvacVoiceAdapter extends EventEmitter {
constructor({ asrModel = process.env.JARVIS_ASR_MODEL || 'WHISPER_TINY', ttsModel = process.env.JARVIS_TTS_MODEL || 'TTS_EN_SUPERTONIC_Q8_0' } = {}) { constructor({ asrModel = process.env.JARVIS_ASR_MODEL || 'WHISPER_TINY', ttsModel = process.env.JARVIS_TTS_MODEL || 'TTS_EN_SUPERTONIC_Q8_0' } = {}) {
@@ -14,7 +8,7 @@ export class QvacVoiceAdapter extends EventEmitter {
async start() { async start() {
if (this.acquired) return; if (this.acquired) return;
if (!/^0\.19\./.test(sdkPackage.version)) throw new Error(`Jarvis voice adapter requires QVAC 0.19.x; found ${sdkPackage.version}`); assertSdkVersion();
await acquireQvac(); this.acquired = true; await acquireQvac(); this.acquired = true;
try { try {
this.asrId = await loadAuxiliaryModel(this.asrModel, { vadModelSrc: 'VAD_SILERO_5_1_2', audio_format: 's16le', language: 'en', no_timestamps: true, vad_params: { threshold: 0.6, min_speech_duration_ms: 300, min_silence_duration_ms: 700, max_speech_duration_s: 15, speech_pad_ms: 200 } }); this.asrId = await loadAuxiliaryModel(this.asrModel, { vadModelSrc: 'VAD_SILERO_5_1_2', audio_format: 's16le', language: 'en', no_timestamps: true, vad_params: { threshold: 0.6, min_speech_duration_ms: 300, min_silence_duration_ms: 700, max_speech_duration_s: 15, speech_pad_ms: 200 } });