@qvac/sdk 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/NOTICE +111 -82
  2. package/dist/examples/abot-world.js +3 -3
  3. package/dist/examples/advisory-model-fit.d.ts +59 -0
  4. package/dist/examples/advisory-model-fit.js +156 -0
  5. package/dist/examples/asr/parakeet-nemotron-filesystem.d.ts +2 -0
  6. package/dist/examples/asr/parakeet-nemotron-filesystem.js +170 -0
  7. package/dist/examples/assess-model-fit.js +6 -1
  8. package/dist/examples/audiogen/edit-music.d.ts +2 -0
  9. package/dist/examples/audiogen/edit-music.js +121 -0
  10. package/dist/examples/audiogen/understand-music.d.ts +2 -0
  11. package/dist/examples/audiogen/understand-music.js +73 -0
  12. package/dist/examples/diffusion-ic-lora-ltx.js +3 -3
  13. package/dist/examples/diffusion-img2vid.js +1 -1
  14. package/dist/examples/diffusion-txt2vid-minimax-h3.d.ts +2 -0
  15. package/dist/examples/diffusion-txt2vid-minimax-h3.js +64 -0
  16. package/dist/examples/diffusion-txt2vid.js +1 -1
  17. package/dist/examples/kv-cache-cleanup.js +5 -2
  18. package/dist/examples/model-fit-ui/server.js +33 -7
  19. package/dist/examples/rag/rag-turbovec.d.ts +2 -0
  20. package/dist/examples/rag/rag-turbovec.js +58 -0
  21. package/dist/examples/tts/audio8.js +5 -5
  22. package/dist/examples/tts/chatterbox-enhanced.js +4 -5
  23. package/dist/examples/tts/chatterbox-multilingual.js +5 -5
  24. package/dist/examples/tts/chatterbox.js +5 -5
  25. package/dist/examples/tts/cosyvoice3.js +5 -5
  26. package/dist/examples/tts/llm-to-tts-streaming.js +12 -2
  27. package/dist/examples/tts/parler.js +5 -5
  28. package/dist/examples/tts/supertonic-enhanced.js +4 -5
  29. package/dist/examples/tts/supertonic-multilingual.js +5 -5
  30. package/dist/examples/tts/supertonic.js +5 -5
  31. package/dist/scripts/contract/build-contract.d.ts +1 -1
  32. package/dist/scripts/contract/constants-registry.d.ts +31 -0
  33. package/dist/scripts/contract/constants-registry.js +13 -2
  34. package/dist/scripts/contract/method-shapes.d.ts +3 -0
  35. package/dist/scripts/contract/method-shapes.js +3 -0
  36. package/dist/src/client/api/assess-model-fit.js +2 -0
  37. package/dist/src/client/api/audio-edit.d.ts +36 -0
  38. package/dist/src/client/api/audio-edit.js +38 -0
  39. package/dist/src/client/api/audio-gen-result.d.ts +5 -1
  40. package/dist/src/client/api/audio-gen-result.js +105 -52
  41. package/dist/src/client/api/audio-gen.d.ts +38 -1
  42. package/dist/src/client/api/audio-gen.js +38 -1
  43. package/dist/src/client/api/audio-understand.d.ts +25 -0
  44. package/dist/src/client/api/audio-understand.js +27 -0
  45. package/dist/src/client/api/delete-cache.d.ts +7 -1
  46. package/dist/src/client/api/delete-cache.js +11 -1
  47. package/dist/src/client/api/index.d.ts +3 -0
  48. package/dist/src/client/api/index.js +3 -0
  49. package/dist/src/client/api/text-to-speech.d.ts +31 -4
  50. package/dist/src/client/api/text-to-speech.js +118 -21
  51. package/dist/src/client/api/vector-index.d.ts +143 -0
  52. package/dist/src/client/api/vector-index.js +168 -0
  53. package/dist/src/client/api/world.d.ts +2 -2
  54. package/dist/src/commands/bundle/manifest.d.ts +2 -0
  55. package/dist/src/commands/verify/addon-source.d.ts +6 -0
  56. package/dist/src/commands/verify/bundle-source.d.ts +2 -0
  57. package/dist/src/commands/verify/bundle-source.js +155 -1
  58. package/dist/src/commands/verify/index.js +1 -0
  59. package/dist/src/commands/verify/prebuilds.d.ts +23 -0
  60. package/dist/src/commands/verify/prebuilds.js +129 -13
  61. package/dist/src/commands/verify/resource-collectors.js +2 -1
  62. package/dist/src/expo/plugins/patches/qvac-platform-addons.d.ts +23 -0
  63. package/dist/src/expo/plugins/patches/qvac-platform-addons.js +94 -0
  64. package/dist/src/expo/plugins/withMobileBundle.d.ts +12 -2
  65. package/dist/src/expo/plugins/withMobileBundle.js +62 -31
  66. package/dist/src/index.d.ts +3 -3
  67. package/dist/src/index.js +7 -3
  68. package/dist/src/schemas/sdk-errors-server.d.ts +4 -0
  69. package/dist/src/schemas/sdk-errors-server.js +22 -0
  70. package/dist/src/utils/aggregate-events.d.ts +3 -1
  71. package/dist/src/utils/aggregate-events.js +7 -1
  72. package/dist/src/utils/errors-server.d.ts +12 -0
  73. package/dist/src/utils/errors-server.js +21 -0
  74. package/docs/system-resources-support-matrix.md +19 -19
  75. package/package.json +22 -15
  76. package/src/electron-forge/index.cjs +86 -14
  77. package/src/expo/plugins/patches/android-link.mjs +18 -9
  78. package/src/expo/plugins/patches/ios-link.mjs +18 -9
  79. package/src/expo/plugins/patches/qvac-platform-addons.ts +124 -0
@@ -12,7 +12,20 @@ import { BundleVerificationFailedError } from '../../utils/errors-client.js';
12
12
  const { withDangerousMod } = configPlugins;
13
13
  /** Modules to defer from mobile bundles (not available at bundle time) */
14
14
  const DEFERRED_MODULES = ['expo-file-system', 'react-native-bare-kit'];
15
- const MOBILE_HOSTS = ['android-arm64', 'ios-arm64', 'ios-arm64-simulator', 'ios-x64-simulator'];
15
+ /**
16
+ * Desktop-only spawn path, deferred so bare-pack does not walk `bare-process`
17
+ * -> `bare-posix` (no `android-arm64` prebuild). Mobile advisory uses
18
+ * in-process `@qvac/model-fit` (`fitParams`), not this subprocess.
19
+ */
20
+ const MOBILE_UNSUPPORTED_MODULES = ['bare-runtime/spawn', '@qvac/model-fit/process'];
21
+ const MOBILE_HOSTS_BY_PLATFORM = {
22
+ android: ['android-arm64'],
23
+ ios: ['ios-arm64', 'ios-arm64-simulator', 'ios-x64-simulator']
24
+ };
25
+ /** Compiled resolver copied beside each patched linker as this filename. */
26
+ const PLATFORM_ADDON_RESOLVER = 'qvac-platform-addons.mjs';
27
+ /** Every mobile host, in platform order. The bundle covers all of them. */
28
+ const MOBILE_HOSTS = [...MOBILE_HOSTS_BY_PLATFORM.android, ...MOBILE_HOSTS_BY_PLATFORM.ios];
16
29
  /**
17
30
  * Expo plugin: bundle, verify, then copy the mobile worker bundle.
18
31
  *
@@ -31,10 +44,18 @@ function withMobileBundle(config) {
31
44
  else {
32
45
  console.log('🕚 QVAC: No config found, generating default bundle (all plugins)...');
33
46
  }
34
- const deferredModules = [...DEFERRED_MODULES, `${sdkPackage.name}/worker.mobile.bundle`];
35
- const linkerPaths = await runBundler(projectRoot, sdkPackage.dir, configPath, deferredModules);
47
+ const deferredModules = [
48
+ ...DEFERRED_MODULES,
49
+ ...MOBILE_UNSUPPORTED_MODULES,
50
+ `${sdkPackage.name}/worker.mobile.bundle`
51
+ ];
52
+ // The bundle is one shared artifact both platforms import, so it is built
53
+ // for every mobile host: a dual-platform `expo prebuild` runs this mod twice
54
+ // and the second run would otherwise overwrite the first platform's bundle
55
+ // with one that resolved the other platform's conditions.
56
+ const linkerPaths = await runBundler(projectRoot, sdkPackage.dir, configPath, deferredModules, MOBILE_HOSTS);
36
57
  const generatedBundle = path.join(projectRoot, 'qvac', 'worker.bundle.js');
37
- await runVerifier(projectRoot, generatedBundle, configPath);
58
+ await runVerifier(projectRoot, generatedBundle, configPath, mobileHostsForPlatform(config.modRequest.platform));
38
59
  fs.copyFileSync(generatedBundle, outputPath);
39
60
  if (config.modRequest.platform === 'ios' && linkerPaths.ios !== null) {
40
61
  await runIOSAddonLinker(linkerPaths.ios);
@@ -46,6 +67,12 @@ function withMobileBundle(config) {
46
67
  config = withDangerousMod(config, ['ios', buildMobileBundle]);
47
68
  return config;
48
69
  }
70
+ function mobileHostsForPlatform(platform) {
71
+ if (platform !== 'android' && platform !== 'ios') {
72
+ throw new Error(`QVAC: withMobileBundle only supports android and ios builds, got "${platform}"`);
73
+ }
74
+ return MOBILE_HOSTS_BY_PLATFORM[platform];
75
+ }
49
76
  /** Finds qvac.config.* file in project root */
50
77
  function findConfigFile(projectRoot) {
51
78
  for (const candidate of CONFIG_CANDIDATES) {
@@ -56,7 +83,7 @@ function findConfigFile(projectRoot) {
56
83
  }
57
84
  return null;
58
85
  }
59
- async function runVerifier(projectRoot, generatedBundle, configPath) {
86
+ async function runVerifier(projectRoot, generatedBundle, configPath, hosts) {
60
87
  if (!configPath) {
61
88
  console.log('⚠️ QVAC: no qvac.config.* found — Bare runtime will be auto-detected ' +
62
89
  'from node_modules (bare-runtime, then bare). Add qvac.config.json ' +
@@ -65,20 +92,20 @@ async function runVerifier(projectRoot, generatedBundle, configPath) {
65
92
  const result = await verifyBundle({
66
93
  projectRoot,
67
94
  addonsSource: generatedBundle,
68
- hosts: MOBILE_HOSTS,
95
+ hosts,
69
96
  ...(configPath ? { configPath } : {})
70
97
  });
71
98
  if (hasErrors(result)) {
72
99
  throw new BundleVerificationFailedError(generatedBundle, new Error(formatVerifyBundleResult(result)));
73
100
  }
74
101
  }
75
- async function runBundler(projectRoot, qvacSdkPath, configPath, deferredModules) {
102
+ async function runBundler(projectRoot, qvacSdkPath, configPath, deferredModules, hosts) {
76
103
  const linkerPaths = patchBareKitLinkers(projectRoot, qvacSdkPath);
77
104
  await bundleSdk({
78
105
  projectRoot,
79
106
  sdkPath: qvacSdkPath,
80
107
  ...(configPath ? { configPath } : {}),
81
- hosts: MOBILE_HOSTS,
108
+ hosts,
82
109
  defer: deferredModules,
83
110
  quiet: true
84
111
  });
@@ -120,33 +147,37 @@ function patchBareKitLinkers(projectRoot, qvacSdkPath) {
120
147
  return { android: null, ios: null };
121
148
  }
122
149
  const patchesDir = path.join(qvacSdkPath, 'src', 'expo', 'plugins', 'patches');
150
+ const resolver = compiledPlatformAddonResolver(qvacSdkPath);
123
151
  if (!fs.existsSync(patchesDir)) {
124
152
  console.log(`⚠️ QVAC: patches directory not found (${patchesDir}), skipping linker patch`);
125
153
  return { android: null, ios: null };
126
154
  }
127
- const androidPatch = path.join(patchesDir, 'android-link.mjs');
128
- const androidTarget = path.join(bareKitPath, 'android', 'link.mjs');
129
- let androidLinkerPath = null;
130
- if (fs.existsSync(androidPatch)) {
131
- fs.copyFileSync(androidPatch, androidTarget);
132
- console.log('✅ QVAC: Patched android/link.mjs for manifest-aware linking');
133
- androidLinkerPath = androidTarget;
134
- }
135
- else {
136
- console.log(`⚠️ QVAC: Android linker patch not found (${androidPatch})`);
137
- }
138
- const iosPatch = path.join(patchesDir, 'ios-link.mjs');
139
- const iosTarget = path.join(bareKitPath, 'ios', 'link.mjs');
140
- let iosLinkerPath = null;
141
- if (fs.existsSync(iosPatch)) {
142
- fs.copyFileSync(iosPatch, iosTarget);
143
- console.log('✅ QVAC: Patched ios/link.mjs for manifest-aware linking');
144
- iosLinkerPath = iosTarget;
145
- }
146
- else {
147
- console.log(`⚠️ QVAC: iOS linker patch not found (${iosPatch})`);
155
+ return {
156
+ android: copyLinkerPatch(patchesDir, resolver, path.join(bareKitPath, 'android'), 'android-link.mjs'),
157
+ ios: copyLinkerPatch(patchesDir, resolver, path.join(bareKitPath, 'ios'), 'ios-link.mjs')
158
+ };
159
+ }
160
+ /**
161
+ * Copies one linker patch and the split-addon resolver it imports, returning the
162
+ * installed linker path. The resolver has to sit beside the linker: the patch is
163
+ * installed into react-native-bare-kit and imports it relatively.
164
+ */
165
+ function copyLinkerPatch(patchesDir, resolver, targetDir, patchName) {
166
+ const patch = path.join(patchesDir, patchName);
167
+ if (!fs.existsSync(patch) || !fs.existsSync(resolver)) {
168
+ // Installing the patch without the resolver it imports would break linking
169
+ // outright, so leave the stock linker in place instead.
170
+ console.log(`⚠️ QVAC: linker patch incomplete (${patch}), leaving the stock linker`);
171
+ return null;
148
172
  }
149
- return { android: androidLinkerPath, ios: iosLinkerPath };
173
+ const target = path.join(targetDir, 'link.mjs');
174
+ fs.copyFileSync(patch, target);
175
+ fs.copyFileSync(resolver, path.join(targetDir, PLATFORM_ADDON_RESOLVER));
176
+ console.log(`✅ QVAC: Patched ${path.basename(targetDir)}/link.mjs for manifest-aware linking`);
177
+ return target;
178
+ }
179
+ function compiledPlatformAddonResolver(qvacSdkPath) {
180
+ return path.join(qvacSdkPath, 'dist', 'src', 'expo', 'plugins', 'patches', 'qvac-platform-addons.js');
150
181
  }
151
- export { MOBILE_HOSTS, patchBareKitLinkers, runIOSAddonLinker };
182
+ export { MOBILE_HOSTS, MOBILE_HOSTS_BY_PLATFORM, MOBILE_UNSUPPORTED_MODULES, mobileHostsForPlatform, patchBareKitLinkers, runIOSAddonLinker };
152
183
  export default withMobileBundle;
@@ -1,7 +1,7 @@
1
- export { batchCompletion, completion, deleteCache, loadModel, downloadAsset, heartbeat, unloadModel, transcribe, transcribeStream, bciTranscribe, bciTranscribeStream, embed, finetune, translate, cancel, ragChunk, ragIngest, ragSaveEmbeddings, ragSearch, ragDeleteEmbeddings, ragReindex, ragListWorkspaces, ragCloseWorkspace, ragDeleteWorkspace, textToSpeech, textToSpeechStream, getModelInfo, getLoadedModelInfo, getSystemResources, assessModelFit, loggingStream, subscribeServerLogs, type ServerLogHandler, ocr, invokePlugin, invokePluginStream, diffusion, type DiffusionProgressTick, classify, video, type VideoProgressTick, upscale, worldCreateScene, worldStep, type WorldStepResult, type WorldStepProgressTick, type WorldSceneResult, type WorldSceneResultWithPack, modelRegistryList, modelRegistrySearch, modelRegistryGetModel, type ModelRegistrySearchParams, suspend, resume, state, vla, vlaHparams, vlaSetEmbodiment, vlaPreprocessImage, vlaPadState, VLA_DEFAULT_IMAGE_SIZE, audioGen, type FinetuneHandle } from './client/api/index.js';
1
+ export { batchCompletion, completion, deleteCache, loadModel, downloadAsset, heartbeat, unloadModel, transcribe, transcribeStream, bciTranscribe, bciTranscribeStream, embed, finetune, translate, cancel, ragChunk, ragIngest, ragSaveEmbeddings, ragSearch, ragDeleteEmbeddings, ragReindex, ragListWorkspaces, ragCloseWorkspace, ragDeleteWorkspace, createVectorIndex, loadVectorIndex, type VectorIndex, textToSpeech, textToSpeechStream, getModelInfo, getLoadedModelInfo, getSystemResources, assessModelFit, loggingStream, subscribeServerLogs, type ServerLogHandler, ocr, invokePlugin, invokePluginStream, diffusion, type DiffusionProgressTick, classify, video, type VideoProgressTick, upscale, worldCreateScene, worldStep, type WorldStepResult, type WorldStepProgressTick, type WorldSceneResult, type WorldSceneResultWithPack, modelRegistryList, modelRegistrySearch, modelRegistryGetModel, type ModelRegistrySearchParams, suspend, resume, state, vla, vlaHparams, vlaSetEmbodiment, vlaPreprocessImage, vlaPadState, VLA_DEFAULT_IMAGE_SIZE, audioGen, audioEdit, audioUnderstand, type FinetuneHandle } from './client/api/index.js';
2
2
  export { close } from './client/index.js';
3
3
  export { plugins } from './client/plugins-factory.js';
4
- export { type LifecycleState, type ModelProgressUpdate, type LoadModelOptions, type LoadCustomPluginModelOptions, type DownloadAssetOptions, type Tool, type ToolCall, type ToolCallWithCall, type ToolCallError, type ToolCallEvent, type CompletionEvent, type CompletionFinal, type CompletionRun, type CompletionStats, type BatchCompletionEvent, type BatchCompletionResult, type BatchCompletionRun, type BatchPrompt, type EmbedStats, type TranscribeStats, VERBOSITY, type Attachment, type TranscribeStreamSession, type TranscribeStreamMetadataSession, type TranscribeStreamConversationSession, type TranscribeStreamEvent, type VadStateEvent, type EndOfTurnEvent, type TranscribeSegment, type BciConfig, type BciTranscribeClientParams, type BciTranscribeStreamClientParams, type BciTranscribeStreamSession, type BciTranscribeStreamMetadataSession, type BciStreamOpts, type NeuralInput, type TextToSpeechStreamSession, type TextToSpeechStreamResponse, type TextToSpeechStreamClientParams, type TtsClientParamsInput, type TtsParlerEmotion, type TtsParlerLoadConfig, type TtsParlerRuntimeConfig, TTS_PACES, TTS_COSYVOICE3_EMOTIONS, TTS_COSYVOICE3_INSTRUCT_DIALECTS, TTS_COSYVOICE3_INSTRUCT_VOLUMES, TTS_COSYVOICE3_INSTRUCT_STYLES, type TtsPace, type TtsCosyvoice3Emotion, type TtsCosyvoice3Instruct, type TtsCosyvoice3LoadConfig, type TtsCosyvoice3RuntimeConfig, type TtsAudio8LoadConfig, type TtsAudio8RuntimeConfig, type CompletionParams, type ToolDialect, type RagSearchResult, type RagSaveEmbeddingsResult, type RagReindexResult, type RagEmbeddedDoc, type RagDoc, type RagWorkspaceInfo, type RagCloseWorkspaceParams, type RagDeleteWorkspaceParams, type RagIngestStage, type RagReindexStage, type RagSaveStage, RAG_ERROR_CODES, type QvacConfig, type ModelInfo, type GetModelInfoParams, type GetLoadedModelInfoParams, type LoadedModelInfo, type GetSystemResourcesInput, type ResourceScope, type ResourceProvenance, type ResourceMetric, type GraphicsDriver, type GraphicsDriverCapabilities, type BackendProbeResult, type BackendDevice, type BackendDriver, type BackendFallback, type InferenceBackendDiagnostics, type CPUResourceCapabilities, type GPUResourceCapabilities, type SystemResourceCapabilities, type GPUResourceSample, type SystemResourceSample, type SystemResources, type AssessModelFitInput, type AssessModelFitResult, type LoadedInstance, type CacheFileInfo, toolSchema, type McpClient, type McpClientInput, type OCRClientParams, type OCRTextBlock, type OCROptions, type ClassifyClientParams, type ClassificationResult, type DiffusionClientParams, type DiffusionStreamResponse, type DiffusionStats, AUDIOGEN_ENGINES, AUDIOGEN_TASK_TYPES, AUDIOGEN_INPUT_SAMPLE_RATE, AUDIOGEN_INPUT_CHANNELS, AUDIOGEN_INPUT_MAX_SECONDS, type AudioGenEngine, type AudioGenTaskType, type AudioGenAudioInput, type AudioGenClientParams, type AudioGenConfig, type AudioGenRuntimeConfig, type AudioGenProgress, type AudioGenAudio, type AudioGenStats, type AudioGenResult, type AudioGenStreamResponse, type VideoClientParams, type VideoStreamResponse, type VideoStats, type UpscaleClientParams, type UpscaleStreamResponse, type UpscaleStats, type WalkKey, type WalkKeysInput, type WorldStepClientParams, type WorldStepStreamResponse, type WorldStepStats, type WorldSceneClientParams, type WorldSceneStreamResponse, type WorldSceneStats, type VlaConfig, type VlaClientRunParams, type VlaClientRunResult, type VlaEmbodimentSelection, type VlaEmbodimentSelector, type VlaHparams, type VlaStats, definePlugin, defineHandler, defineDuplexHandler, PluginDefinitionInvalidError, type QvacPlugin, type CreateModelParams, type PluginModelResult, type ModelRegistryEntry, type ModelRegistryEntryAddon, type ProfilerMode, type FinetuneValidation, type FinetuneRunParams, type FinetuneGetStateParams, type FinetuneStopParams, type FinetuneParams, type FinetuneStatus, type FinetuneProgress, type FinetuneStats, type FinetuneResult } from '@qvac/inference/surface';
4
+ export { type LifecycleState, type ModelProgressUpdate, type LoadModelOptions, type LoadCustomPluginModelOptions, type DownloadAssetOptions, type Tool, type ToolCall, type ToolCallWithCall, type ToolCallError, type ToolCallEvent, type CompletionEvent, type CompletionFinal, type CompletionRun, type CompletionStats, type BatchCompletionEvent, type BatchCompletionResult, type BatchCompletionRun, type BatchPrompt, type EmbedStats, type TranscribeStats, VERBOSITY, type Attachment, type TranscribeStreamSession, type TranscribeStreamMetadataSession, type TranscribeStreamConversationSession, type TranscribeStreamEvent, type VadStateEvent, type EndOfTurnEvent, type TranscribeSegment, type BciConfig, type BciTranscribeClientParams, type BciTranscribeStreamClientParams, type BciTranscribeStreamSession, type BciTranscribeStreamMetadataSession, type BciStreamOpts, type NeuralInput, type TextToSpeechStreamSession, type TextToSpeechStreamResponse, type TextToSpeechStreamClientParams, type TtsClientParamsInput, type TextToSpeechStreamResult, type TtsSentenceChunkUpdate, type TtsResponse, type TtsStats, TTS_ENGINES, type TtsEngine, TTS_PARLER_EMOTIONS, type TtsParlerEmotion, type TtsParlerLoadConfig, type TtsParlerRuntimeConfig, TTS_PACES, TTS_SENTENCE_DELIMITER_PRESETS, type TtsSentenceDelimiterPreset, TTS_CHATTERBOX_LANGUAGES, type TtsChatterboxLanguage, type TtsChatterboxLoadConfig, type TtsChatterboxRuntimeConfig, TTS_SUPERTONIC_LANGUAGES, type TtsSupertonicLanguage, type TtsSupertonicLoadConfig, type TtsSupertonicRuntimeConfig, TTS_COSYVOICE3_EMOTIONS, TTS_COSYVOICE3_INSTRUCT_DIALECTS, TTS_COSYVOICE3_INSTRUCT_VOLUMES, TTS_COSYVOICE3_INSTRUCT_STYLES, type TtsPace, type TtsCosyvoice3Emotion, type TtsCosyvoice3Instruct, type TtsCosyvoice3LoadConfig, type TtsCosyvoice3RuntimeConfig, type TtsAudio8LoadConfig, type TtsAudio8RuntimeConfig, type CompletionParams, type ToolDialect, type RagSearchResult, type RagSaveEmbeddingsResult, type RagReindexResult, type RagEmbeddedDoc, type RagDoc, type RagWorkspaceInfo, type RagCloseWorkspaceParams, type RagDeleteWorkspaceParams, type RagIngestStage, type RagReindexStage, type RagSaveStage, RAG_ERROR_CODES, VectorIndexStorage, DEFAULT_VECTOR_INDEX_STORAGE, type VectorId, type VectorIndexHit, type CreateVectorIndexParams, type LoadVectorIndexParams, type VectorIndexAddParams, type VectorIndexIdsParams, type VectorIndexSearchParams, type VectorIndexWriteParams, type QvacConfig, type ModelInfo, type GetModelInfoParams, type GetLoadedModelInfoParams, type LoadedModelInfo, type GetSystemResourcesInput, type ResourceScope, type ResourceProvenance, type ResourceMetric, type GraphicsDriver, type GraphicsDriverCapabilities, type BackendProbeResult, type BackendDevice, type BackendDriver, type BackendFallback, type InferenceBackendDiagnostics, type CPUResourceCapabilities, type GPUResourceCapabilities, type SystemResourceCapabilities, type GPUResourceSample, type SystemResourceSample, type SystemResources, type AssessModelFitInput, type AssessModelFitResult, type LoadedInstance, type CacheFileInfo, toolSchema, type McpClient, type McpClientInput, type OCRClientParams, type OCRTextBlock, type OCROptions, type ClassifyClientParams, type ClassificationResult, type DiffusionClientParams, type DiffusionStreamResponse, type DiffusionStats, AUDIOGEN_ENGINES, AUDIOGEN_TASK_TYPES, AUDIOGEN_TRACKS, AUDIOGEN_INPUT_SAMPLE_RATE, AUDIOGEN_INPUT_CHANNELS, AUDIOGEN_INPUT_MAX_SECONDS, AUDIOGEN_MAX_AUDIO_CODES, AUDIOGEN_EDIT_OPERATIONS, AUDIOGEN_REPAINT_MODES, type AudioGenEngine, type AudioGenTaskType, type AudioGenTrack, type AudioGenAudioInput, type AudioGenClientParams, type AudioGenConfig, type AudioGenRuntimeConfig, type AudioGenProgress, type AudioGenAudio, type AudioGenStats, type AudioGenResult, type AudioGenStreamResponse, type AudioGenEditOperationType, type AudioGenRepaintMode, type AudioEditPrompt, type AudioEditFlowEditOperation, type AudioEditRepaintOperation, type AudioEditOperation, type AudioEditClientParams, type AudioEditStreamResponse, type AudioUnderstandClientParams, type AudioUnderstandResponse, type AudioGenUnderstandResult, type AudioUnderstandResult, type VideoClientParams, type VideoStreamResponse, type VideoStats, type UpscaleClientParams, type UpscaleStreamResponse, type UpscaleStats, type WalkKey, type WalkKeysInput, type WorldStepClientParams, type WorldStepStreamResponse, type WorldStepStats, type WorldSceneClientParams, type WorldSceneStreamResponse, type WorldSceneStats, type VlaConfig, type VlaClientRunParams, type VlaClientRunResult, type VlaEmbodimentSelection, type VlaEmbodimentSelector, type VlaHparams, type VlaStats, definePlugin, defineHandler, defineDuplexHandler, PluginDefinitionInvalidError, type QvacPlugin, type CreateModelParams, type PluginModelResult, type ModelRegistryEntry, type ModelRegistryEntryAddon, type ProfilerMode, type FinetuneValidation, type FinetuneRunParams, type FinetuneGetStateParams, type FinetuneStopParams, type FinetuneParams, type FinetuneStatus, type FinetuneProgress, type FinetuneStats, type FinetuneResult } from '@qvac/inference/surface';
5
5
  export { SDK_CLIENT_ERROR_CODES } from './schemas/sdk-errors-client.js';
6
6
  export { SDK_SERVER_ERROR_CODES } from './schemas/sdk-errors-server.js';
7
7
  export { PLUGIN_LLM, PLUGIN_EMBEDDING, PLUGIN_WHISPER, PLUGIN_BCI, PLUGIN_NMT, PLUGIN_TTS, PLUGIN_OCR, PLUGIN_DIFFUSION, PLUGIN_AUDIOGEN, PLUGIN_VLA, PLUGIN_CLASSIFICATION, SDK_DEFAULT_PLUGINS, type BuiltinPlugin } from './plugin-ids.js';
@@ -12,7 +12,7 @@ export { SUPPORTED_AUDIO_FORMATS } from '@qvac/inference/surface';
12
12
  export { InferenceCancelledError } from './utils/errors-server.js';
13
13
  export type { InferenceCancelledPartial } from './utils/errors-server.js';
14
14
  export { ContextOverflowError, type ContextOverflowErrorSizes, RequestIdConflictError, RequestNotFoundError, RequestRejectedByPolicyError, TranslationFailedError } from './utils/errors-server.js';
15
- export { BareRuntimeBinaryNotFoundError, WorkerCrashedError, WorkerShutdownError, WorkerStartupError, RequestValidationFailedError, StreamEndedError } from './utils/errors-client.js';
15
+ export { BareRuntimeBinaryNotFoundError, WorkerCrashedError, WorkerShutdownError, WorkerStartupError, RequestValidationFailedError, StreamEndedError, TextToSpeechStreamFailedError } from './utils/errors-client.js';
16
16
  export { getLogger, SDK_LOG_ID, SDK_ALL_LOG_ID } from './logging/index.js';
17
17
  export type { Logger, LogTransport, LoggerOptions } from './logging/index.js';
18
18
  export { profiler, attachBackendDiagnostics } from '@qvac/inference/surface';
package/dist/src/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // Public API exports only
2
- export { batchCompletion, completion, deleteCache, loadModel, downloadAsset, heartbeat, unloadModel, transcribe, transcribeStream, bciTranscribe, bciTranscribeStream, embed, finetune, translate, cancel, ragChunk, ragIngest, ragSaveEmbeddings, ragSearch, ragDeleteEmbeddings, ragReindex, ragListWorkspaces, ragCloseWorkspace, ragDeleteWorkspace, textToSpeech, textToSpeechStream, getModelInfo, getLoadedModelInfo, getSystemResources, assessModelFit, loggingStream, subscribeServerLogs, ocr, invokePlugin, invokePluginStream, diffusion, classify, video, upscale, worldCreateScene, worldStep, modelRegistryList, modelRegistrySearch, modelRegistryGetModel, suspend, resume, state, vla, vlaHparams, vlaSetEmbodiment, vlaPreprocessImage, vlaPadState, VLA_DEFAULT_IMAGE_SIZE, audioGen } from './client/api/index.js';
2
+ export { batchCompletion, completion, deleteCache, loadModel, downloadAsset, heartbeat, unloadModel, transcribe, transcribeStream, bciTranscribe, bciTranscribeStream, embed, finetune, translate, cancel, ragChunk, ragIngest, ragSaveEmbeddings, ragSearch, ragDeleteEmbeddings, ragReindex, ragListWorkspaces, ragCloseWorkspace, ragDeleteWorkspace, createVectorIndex, loadVectorIndex, textToSpeech, textToSpeechStream, getModelInfo, getLoadedModelInfo, getSystemResources, assessModelFit, loggingStream, subscribeServerLogs, ocr, invokePlugin, invokePluginStream, diffusion, classify, video, upscale, worldCreateScene, worldStep, modelRegistryList, modelRegistrySearch, modelRegistryGetModel, suspend, resume, state, vla, vlaHparams, vlaSetEmbodiment, vlaPreprocessImage, vlaPadState, VLA_DEFAULT_IMAGE_SIZE, audioGen, audioEdit, audioUnderstand } from './client/api/index.js';
3
3
  export { close } from './client/index.js';
4
4
  export { plugins } from './client/plugins-factory.js';
5
- export { VERBOSITY, TTS_PACES, TTS_COSYVOICE3_EMOTIONS, TTS_COSYVOICE3_INSTRUCT_DIALECTS, TTS_COSYVOICE3_INSTRUCT_VOLUMES, TTS_COSYVOICE3_INSTRUCT_STYLES, RAG_ERROR_CODES, toolSchema, AUDIOGEN_ENGINES, AUDIOGEN_TASK_TYPES, AUDIOGEN_INPUT_SAMPLE_RATE, AUDIOGEN_INPUT_CHANNELS, AUDIOGEN_INPUT_MAX_SECONDS, definePlugin, defineHandler, defineDuplexHandler, PluginDefinitionInvalidError } from '@qvac/inference/surface';
5
+ export { VERBOSITY, TTS_ENGINES, TTS_PARLER_EMOTIONS, TTS_PACES, TTS_SENTENCE_DELIMITER_PRESETS, TTS_CHATTERBOX_LANGUAGES, TTS_SUPERTONIC_LANGUAGES, TTS_COSYVOICE3_EMOTIONS, TTS_COSYVOICE3_INSTRUCT_DIALECTS, TTS_COSYVOICE3_INSTRUCT_VOLUMES, TTS_COSYVOICE3_INSTRUCT_STYLES, RAG_ERROR_CODES, VectorIndexStorage, DEFAULT_VECTOR_INDEX_STORAGE, toolSchema, AUDIOGEN_ENGINES, AUDIOGEN_TASK_TYPES, AUDIOGEN_TRACKS, AUDIOGEN_INPUT_SAMPLE_RATE, AUDIOGEN_INPUT_CHANNELS, AUDIOGEN_INPUT_MAX_SECONDS, AUDIOGEN_MAX_AUDIO_CODES, AUDIOGEN_EDIT_OPERATIONS, AUDIOGEN_REPAINT_MODES, definePlugin, defineHandler, defineDuplexHandler, PluginDefinitionInvalidError } from '@qvac/inference/surface';
6
6
  // SDK-owned error-code objects: `SDK_CLIENT_ERROR_CODES` holds transport/client
7
7
  // codes absent from @qvac/inference, and `SDK_SERVER_ERROR_CODES` carries the
8
8
  // client-side error definitions (`addCodes` message registry) that
@@ -52,7 +52,11 @@ export { ContextOverflowError, RequestIdConflictError, RequestNotFoundError, Req
52
52
  // `StreamEndedError` is raised by the streaming result helpers (upscale, world)
53
53
  // when the RPC stream closes without a terminal `done` frame. Exported for the
54
54
  // same reason as the rest of this block: matching on it requires the class.
55
- export { BareRuntimeBinaryNotFoundError, WorkerCrashedError, WorkerShutdownError, WorkerStartupError, RequestValidationFailedError, StreamEndedError } from './utils/errors-client.js';
55
+ // `TextToSpeechStreamFailedError` is what `textToSpeech()` throws for an
56
+ // invalid stream/sentenceStream combination, and what the duplex TTS session
57
+ // throws on a write after end — its own JSDoc named it long before it was
58
+ // exported.
59
+ export { BareRuntimeBinaryNotFoundError, WorkerCrashedError, WorkerShutdownError, WorkerStartupError, RequestValidationFailedError, StreamEndedError, TextToSpeechStreamFailedError } from './utils/errors-client.js';
56
60
  // Logging exports
57
61
  export { getLogger, SDK_LOG_ID, SDK_ALL_LOG_ID } from './logging/index.js';
58
62
  // Profiler exports
@@ -50,6 +50,10 @@ export declare const SDK_SERVER_ERROR_CODES: {
50
50
  readonly RAG_LIST_WORKSPACES_FAILED: 52809;
51
51
  readonly RAG_CHUNK_FAILED: 52810;
52
52
  readonly RAG_WORKSPACE_NOT_OPEN: 52811;
53
+ readonly VECTOR_INDEX_PROVIDER_UNAVAILABLE: 52850;
54
+ readonly VECTOR_INDEX_NOT_FOUND: 52851;
55
+ readonly VECTOR_INDEX_INVALID_VECTORS: 52852;
56
+ readonly VECTOR_INDEX_FAILED: 52853;
53
57
  readonly FILE_NOT_FOUND: 53000;
54
58
  readonly DOWNLOAD_CANCELLED: 53001;
55
59
  readonly CHECKSUM_VALIDATION_FAILED: 53002;
@@ -57,6 +57,11 @@ export const SDK_SERVER_ERROR_CODES = {
57
57
  RAG_LIST_WORKSPACES_FAILED: 52809,
58
58
  RAG_CHUNK_FAILED: 52810,
59
59
  RAG_WORKSPACE_NOT_OPEN: 52811,
60
+ // Vector index (52,850-52,899)
61
+ VECTOR_INDEX_PROVIDER_UNAVAILABLE: 52850,
62
+ VECTOR_INDEX_NOT_FOUND: 52851,
63
+ VECTOR_INDEX_INVALID_VECTORS: 52852,
64
+ VECTOR_INDEX_FAILED: 52853,
60
65
  // Download/Resource Errors (53,000-53,199)
61
66
  FILE_NOT_FOUND: 53000,
62
67
  DOWNLOAD_CANCELLED: 53001,
@@ -340,6 +345,23 @@ const serverErrorDefinitions = {
340
345
  name: 'RAG_WORKSPACE_NOT_OPEN',
341
346
  message: (workspace) => `RAG workspace '${workspace}' is not open`
342
347
  },
348
+ // Vector index (52,850-52,899)
349
+ [SDK_SERVER_ERROR_CODES.VECTOR_INDEX_PROVIDER_UNAVAILABLE]: {
350
+ name: 'VECTOR_INDEX_PROVIDER_UNAVAILABLE',
351
+ message: () => 'No vector index provider is registered. Register a plugin that exposes the turbovecIndexProvider capability, such as the built-in llamacpp-embedding plugin'
352
+ },
353
+ [SDK_SERVER_ERROR_CODES.VECTOR_INDEX_NOT_FOUND]: {
354
+ name: 'VECTOR_INDEX_NOT_FOUND',
355
+ message: (indexId) => `Vector index '${indexId}' is not open. It was disposed or the worker restarted; create a new index or load a snapshot`
356
+ },
357
+ [SDK_SERVER_ERROR_CODES.VECTOR_INDEX_INVALID_VECTORS]: {
358
+ name: 'VECTOR_INDEX_INVALID_VECTORS',
359
+ message: (details) => `Invalid vector input: ${details}`
360
+ },
361
+ [SDK_SERVER_ERROR_CODES.VECTOR_INDEX_FAILED]: {
362
+ name: 'VECTOR_INDEX_FAILED',
363
+ message: (details) => `Vector index operation failed: ${details}`
364
+ },
343
365
  // Download/Resource Errors (53,000-53,199)
344
366
  [SDK_SERVER_ERROR_CODES.FILE_NOT_FOUND]: {
345
367
  name: 'FILE_NOT_FOUND',
@@ -1,10 +1,12 @@
1
- import type { CompletionError, CompletionEvent, CompletionFinal, CompletionStats, StopReason, ToolCall } from '@qvac/inference/surface';
1
+ import type { CompletionError, CompletionEvent, CompletionFinal, CompletionStats, StopReason, ToolCall, ToolCallError } from '@qvac/inference/surface';
2
2
  import { type ToolHandlerMap } from './tool-helpers.js';
3
3
  export type AggregatedEvents = {
4
4
  contentText: string;
5
5
  thinkingText: string;
6
6
  stats: CompletionStats | undefined;
7
7
  toolCalls: ToolCall[];
8
+ /** Tool-call regions that failed to parse or validate; see `CompletionFinal.toolErrors`. */
9
+ toolErrors: ToolCallError[];
8
10
  rawFullText: string | undefined;
9
11
  error: CompletionError | undefined;
10
12
  stopReason: StopReason | undefined;
@@ -9,6 +9,7 @@ export function aggregateEvents(events) {
9
9
  let stopReason;
10
10
  let cancelled = false;
11
11
  const toolCalls = [];
12
+ const toolErrors = [];
12
13
  for (const event of events) {
13
14
  if (event.type === 'contentDelta') {
14
15
  contentText += event.text;
@@ -22,6 +23,9 @@ export function aggregateEvents(events) {
22
23
  else if (event.type === 'toolCall') {
23
24
  toolCalls.push(event.call);
24
25
  }
26
+ else if (event.type === 'toolError') {
27
+ toolErrors.push(event.error);
28
+ }
25
29
  else if (event.type === 'completionDone') {
26
30
  if ('raw' in event && event.raw) {
27
31
  rawFullText = event.raw.fullText;
@@ -47,6 +51,7 @@ export function aggregateEvents(events) {
47
51
  thinkingText,
48
52
  stats,
49
53
  toolCalls,
54
+ toolErrors,
50
55
  rawFullText,
51
56
  error,
52
57
  stopReason,
@@ -54,7 +59,7 @@ export function aggregateEvents(events) {
54
59
  };
55
60
  }
56
61
  export function buildFinalFromEvents(events, handlers) {
57
- const { contentText, thinkingText, stats, toolCalls, rawFullText, error, stopReason, cancelled } = aggregateEvents(events);
62
+ const { contentText, thinkingText, stats, toolCalls, toolErrors, rawFullText, error, stopReason, cancelled } = aggregateEvents(events);
58
63
  const attachedToolCalls = attachHandlersToToolCalls(toolCalls, handlers);
59
64
  const fullText = rawFullText ?? contentText;
60
65
  const cacheableAssistantContent = attachedToolCalls.length === 0 ? normalizeAssistantCacheContent(fullText) : undefined;
@@ -62,6 +67,7 @@ export function buildFinalFromEvents(events, handlers) {
62
67
  contentText,
63
68
  ...(thinkingText && { thinkingText }),
64
69
  toolCalls: attachedToolCalls,
70
+ ...(toolErrors.length > 0 && { toolErrors }),
65
71
  ...(stats && { stats }),
66
72
  raw: { fullText },
67
73
  ...(cacheableAssistantContent !== undefined && {
@@ -240,6 +240,18 @@ export declare class RAGUnknownOperationError extends QvacErrorBase {
240
240
  export declare class RAGHyperDBFailedError extends QvacErrorBase {
241
241
  constructor(details: string, cause?: unknown);
242
242
  }
243
+ export declare class VectorIndexProviderUnavailableError extends QvacErrorBase {
244
+ constructor(cause?: unknown);
245
+ }
246
+ export declare class VectorIndexNotFoundError extends QvacErrorBase {
247
+ constructor(indexId: string, cause?: unknown);
248
+ }
249
+ export declare class VectorIndexInvalidVectorsError extends QvacErrorBase {
250
+ constructor(details: string, cause?: unknown);
251
+ }
252
+ export declare class VectorIndexFailedError extends QvacErrorBase {
253
+ constructor(details: string, cause?: unknown);
254
+ }
243
255
  export declare class FileNotFoundError extends QvacErrorBase {
244
256
  constructor(path: string, cause?: unknown);
245
257
  }
@@ -375,6 +375,27 @@ export class RAGHyperDBFailedError extends QvacErrorBase {
375
375
  super(createErrorOptions(SDK_SERVER_ERROR_CODES.RAG_HYPERDB_FAILED, [details], cause));
376
376
  }
377
377
  }
378
+ // ============== Vector Index Errors ==============
379
+ export class VectorIndexProviderUnavailableError extends QvacErrorBase {
380
+ constructor(cause) {
381
+ super(createErrorOptions(SDK_SERVER_ERROR_CODES.VECTOR_INDEX_PROVIDER_UNAVAILABLE, undefined, cause));
382
+ }
383
+ }
384
+ export class VectorIndexNotFoundError extends QvacErrorBase {
385
+ constructor(indexId, cause) {
386
+ super(createErrorOptions(SDK_SERVER_ERROR_CODES.VECTOR_INDEX_NOT_FOUND, [indexId], cause));
387
+ }
388
+ }
389
+ export class VectorIndexInvalidVectorsError extends QvacErrorBase {
390
+ constructor(details, cause) {
391
+ super(createErrorOptions(SDK_SERVER_ERROR_CODES.VECTOR_INDEX_INVALID_VECTORS, [details], cause));
392
+ }
393
+ }
394
+ export class VectorIndexFailedError extends QvacErrorBase {
395
+ constructor(details, cause) {
396
+ super(createErrorOptions(SDK_SERVER_ERROR_CODES.VECTOR_INDEX_FAILED, [details], cause));
397
+ }
398
+ }
378
399
  // ============== Download/Resource Errors ==============
379
400
  export class FileNotFoundError extends QvacErrorBase {
380
401
  constructor(path, cause) {
@@ -59,25 +59,25 @@ native value does not establish one, rather than inventing a scope.
59
59
 
60
60
  ## Metric behavior
61
61
 
62
- | Public metric | Accepted value | Source and scope when `supported` | Current runtime evidence |
63
- | -------------------------------------------- | ------------------------------------------- | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
64
- | `capabilities.cpu.value.logicalCores` | Positive integer | `bare-cpu-info`; scope omitted | `supported` on `darwin-arm64` |
65
- | `sample.cpu` | Number from 0 through 1 | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
66
- | `capabilities.memory.totalBytes` | Positive integer | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
67
- | `sample.memory.usedBytes` | Non-negative integer | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
68
- | `sample.memory.totalBytes` | Positive integer | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
69
- | `sample.memory.processUsedBytes` | Non-negative integer | `bare-os`; `process` | `supported` where `bare-os` reports RSS |
70
- | `sample.memory.processAvailableBytes` | Non-negative integer | `bare-os`; `process` | `unavailable` everywhere — iOS needs a native `os_proc_available_memory` source before this reports a value |
71
- | `capabilities.gpus` | Array, including an empty array | `bare-gpu-info`; scope omitted | `supported` with one GPU on `darwin-arm64` |
72
- | `capabilities.gpus.value[].memoryTotalBytes` | Non-negative number | `bare-gpu-info`; `device`, when not unified memory | `unverified` on `darwin-arm64` (unified) |
73
- | `sample.gpus` | Array aligned with the cached GPU inventory | `bare-gpu-info`; scope omitted | `supported` with one GPU sample on `darwin-arm64` |
74
- | `sample.gpus.value[].compute` | Number from 0 through 1 | `bare-gpu-info`; `device` | `supported` on `darwin-arm64` |
75
- | `sample.gpus.value[].encode` | Number from 0 through 1 | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
76
- | `sample.gpus.value[].decode` | Number from 0 through 1 | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
77
- | `sample.gpus.value[].memoryUsedBytes` | Non-negative number | `bare-gpu-info`; `device`, when the sample agrees with the declared memory | `unverified` on `darwin-arm64` (unified) |
78
- | `sample.gpus.value[].memoryTotalBytes` | Non-negative number | `bare-gpu-info`; `device`, when the sample agrees with the declared memory | `unverified` on `darwin-arm64` (unified) |
79
- | `sample.gpus.value[].powerWatts` | Non-negative number | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
80
- | `sample.gpus.value[].temperatureCelsius` | Non-negative number | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
62
+ | Public metric | Accepted value | Source and scope when `supported` | Current runtime evidence |
63
+ | -------------------------------------------- | ------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------- |
64
+ | `capabilities.cpu.value.logicalCores` | Positive integer | `bare-cpu-info`; scope omitted | `supported` on `darwin-arm64` |
65
+ | `sample.cpu` | Number from 0 through 1 | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
66
+ | `capabilities.memory.totalBytes` | Positive integer | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
67
+ | `sample.memory.usedBytes` | Non-negative integer | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
68
+ | `sample.memory.totalBytes` | Positive integer | `bare-cpu-info`; `system` | `supported` on `darwin-arm64` |
69
+ | `sample.memory.processUsedBytes` | Non-negative integer | `bare-os`; `process` | `supported` where `bare-os` reports RSS |
70
+ | `sample.memory.processAvailableBytes` | Non-negative integer | `bare-os`; `process` | `supported` on `ios-arm64`; `unavailable` elsewhere |
71
+ | `capabilities.gpus` | Array, including an empty array | `bare-gpu-info`; scope omitted | `supported` with one GPU on `darwin-arm64` |
72
+ | `capabilities.gpus.value[].memoryTotalBytes` | Non-negative number | `bare-gpu-info`; `device`, when not unified memory | `unverified` on `darwin-arm64` (unified) |
73
+ | `sample.gpus` | Array aligned with the cached GPU inventory | `bare-gpu-info`; scope omitted | `supported` with one GPU sample on `darwin-arm64` |
74
+ | `sample.gpus.value[].compute` | Number from 0 through 1 | `bare-gpu-info`; `device` | `supported` on `darwin-arm64` |
75
+ | `sample.gpus.value[].encode` | Number from 0 through 1 | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
76
+ | `sample.gpus.value[].decode` | Number from 0 through 1 | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
77
+ | `sample.gpus.value[].memoryUsedBytes` | Non-negative number | `bare-gpu-info`; `device`, when the sample agrees with the declared memory | `unverified` on `darwin-arm64` (unified) |
78
+ | `sample.gpus.value[].memoryTotalBytes` | Non-negative number | `bare-gpu-info`; `device`, when the sample agrees with the declared memory | `unverified` on `darwin-arm64` (unified) |
79
+ | `sample.gpus.value[].powerWatts` | Non-negative number | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
80
+ | `sample.gpus.value[].temperatureCelsius` | Non-negative number | `bare-gpu-info`; `device` | `unavailable` on `darwin-arm64` |
81
81
 
82
82
  For GPU memory, a missing native value becomes `unavailable`. The native API
83
83
  does not identify the scope of a present value, so the SDK establishes it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qvac/sdk",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -212,23 +212,23 @@
212
212
  "changelog:generate": "node ../../scripts/sdk/generate-changelog-sdk-pod.cjs --package=sdk && prettier --write changelog"
213
213
  },
214
214
  "dependencies": {
215
- "@qvac/audiogen-ggml": "^0.3.2",
216
- "@qvac/asr-ggml": "^0.3.1",
217
- "@qvac/bci-whispercpp": "^0.8.0",
218
- "@qvac/classification-ggml": "^0.23.0",
219
- "@qvac/decoder-audio": "^0.5.0",
220
- "@qvac/diffusion-cpp": "^0.21.0",
221
- "@qvac/embed-llamacpp": "^0.37.0",
215
+ "@qvac/asr-ggml": "^0.5.3",
216
+ "@qvac/audiogen-ggml": "^0.4.0",
217
+ "@qvac/bci-whispercpp": "^0.9.1",
218
+ "@qvac/classification-ggml": "^0.26.1",
219
+ "@qvac/decoder-audio": "^0.6.0",
220
+ "@qvac/diffusion-cpp": "^0.24.0",
221
+ "@qvac/embed-llamacpp": "^0.41.1",
222
222
  "@qvac/error": "^0.1.1",
223
- "@qvac/inference": "^0.19.0",
223
+ "@qvac/inference": "^0.20.0",
224
224
  "@qvac/langdetect-text": "^0.1.2",
225
- "@qvac/llm-llamacpp": "^0.49.1",
225
+ "@qvac/llm-llamacpp": "^0.53.0",
226
226
  "@qvac/logging": "^0.1.0",
227
- "@qvac/ocr-ggml": "^0.21.0",
227
+ "@qvac/ocr-ggml": "^0.24.1",
228
228
  "@qvac/registry-client": "^0.6.1",
229
- "@qvac/translation-nmtcpp": "^0.13.0",
230
- "@qvac/tts-ggml": "^0.8.0",
231
- "@qvac/vla-ggml": "^0.24.0",
229
+ "@qvac/translation-nmtcpp": "^0.16.1",
230
+ "@qvac/tts-ggml": "^0.9.1",
231
+ "@qvac/vla-ggml": "^0.27.1",
232
232
  "bare-abort-controller": "^1.0.0",
233
233
  "bare-cpu-info": "0.1.1",
234
234
  "bare-crypto": "^1.15.0",
@@ -252,13 +252,16 @@
252
252
  "semver": "^7.8.0",
253
253
  "tar-stream": "^3.1.8",
254
254
  "which-runtime": "^1.3.2",
255
- "zod": "^4.3.0"
255
+ "zod": "^4.3.0",
256
+ "bare-buffer": "^3.4.2"
256
257
  },
257
258
  "devDependencies": {
258
259
  "@electron-forge/plugin-base": "^7.11.1",
259
260
  "@expo/config-plugins": "^54.0.4",
261
+ "bare-module": "^6.2.0",
260
262
  "@lancedb/lancedb": "^0.21.3",
261
263
  "@modelcontextprotocol/sdk": "^1.12.1",
264
+ "apache-arrow": "^18.1.0",
262
265
  "@sqliteai/sqlite-wasm": "3.50.4-sync.0.8.30-vector.0.9.23",
263
266
  "@types/brittle": "^3.5.0",
264
267
  "@types/node": "^24.2.1",
@@ -293,6 +296,7 @@
293
296
  "expo-build-properties": ">=0.12.0",
294
297
  "expo-device": ">=8.0.0",
295
298
  "expo-file-system": ">=19.0.0",
299
+ "expo-modules-core": ">=3.0.0",
296
300
  "pear-pipe": ">=1.0.0",
297
301
  "react-native-bare-kit": "*",
298
302
  "tsx": "*"
@@ -313,6 +317,9 @@
313
317
  "expo-file-system": {
314
318
  "optional": true
315
319
  },
320
+ "expo-modules-core": {
321
+ "optional": true
322
+ },
316
323
  "pear-pipe": {
317
324
  "optional": true
318
325
  },