@qvac/sdk 0.10.2 → 0.12.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 (326) hide show
  1. package/NOTICE +1455 -29
  2. package/README.md +2 -0
  3. package/dist/client/api/cancel.d.ts +24 -32
  4. package/dist/client/api/cancel.js +58 -31
  5. package/dist/client/api/classify.d.ts +23 -0
  6. package/dist/client/api/classify.js +43 -0
  7. package/dist/client/api/client-request-id.d.ts +17 -0
  8. package/dist/client/api/client-request-id.js +27 -0
  9. package/dist/client/api/completion-stream.d.ts +1 -1
  10. package/dist/client/api/completion-stream.js +34 -3
  11. package/dist/client/api/diffusion.d.ts +46 -0
  12. package/dist/client/api/diffusion.js +50 -1
  13. package/dist/client/api/download-asset.d.ts +12 -2
  14. package/dist/client/api/download-asset.js +21 -3
  15. package/dist/client/api/embed.d.ts +8 -4
  16. package/dist/client/api/embed.js +14 -1
  17. package/dist/client/api/get-model-info.d.ts +1 -1
  18. package/dist/client/api/index.d.ts +5 -0
  19. package/dist/client/api/index.js +5 -0
  20. package/dist/client/api/load-model.d.ts +12 -4
  21. package/dist/client/api/load-model.js +49 -2
  22. package/dist/client/api/rag.d.ts +9 -3
  23. package/dist/client/api/rag.js +23 -3
  24. package/dist/client/api/transcribe.d.ts +23 -8
  25. package/dist/client/api/transcribe.js +69 -4
  26. package/dist/client/api/unload-model.d.ts +5 -2
  27. package/dist/client/api/unload-model.js +9 -4
  28. package/dist/client/api/upscale.d.ts +45 -0
  29. package/dist/client/api/upscale.js +99 -0
  30. package/dist/client/api/video.d.ts +64 -0
  31. package/dist/client/api/video.js +147 -0
  32. package/dist/client/api/vla-helpers.d.ts +45 -0
  33. package/dist/client/api/vla-helpers.js +130 -0
  34. package/dist/client/api/vla.d.ts +65 -0
  35. package/dist/client/api/vla.js +109 -0
  36. package/dist/client/config-loader/resolve-config.node.d.ts +16 -0
  37. package/dist/client/config-loader/resolve-config.node.js +77 -23
  38. package/dist/client/plugins-factory.d.ts +8 -0
  39. package/dist/client/plugins-factory.js +10 -0
  40. package/dist/client/rpc/bare-client.js +62 -66
  41. package/dist/client/rpc/ensure-worker-ready.d.ts +9 -0
  42. package/dist/client/rpc/ensure-worker-ready.js +17 -0
  43. package/dist/client/rpc/expo-rpc-client.js +2 -1
  44. package/dist/client/rpc/node-rpc-client.js +22 -8
  45. package/dist/client/rpc/rpc-client.d.ts +2 -2
  46. package/dist/client/rpc/rpc-client.js +10 -4
  47. package/dist/client/rpc/rpc-error.d.ts +9 -0
  48. package/dist/client/rpc/rpc-error.js +105 -0
  49. package/dist/commands/bundle/bare-pack.d.ts +13 -0
  50. package/dist/commands/bundle/bare-pack.js +54 -0
  51. package/dist/commands/bundle/constants.d.ts +7 -0
  52. package/dist/commands/bundle/constants.js +23 -0
  53. package/dist/commands/bundle/entry-gen.d.ts +2 -0
  54. package/dist/commands/bundle/entry-gen.js +48 -0
  55. package/dist/commands/bundle/index.d.ts +20 -0
  56. package/dist/commands/bundle/index.js +141 -0
  57. package/dist/commands/bundle/manifest.d.ts +21 -0
  58. package/dist/commands/bundle/manifest.js +193 -0
  59. package/dist/commands/bundle/plugins.d.ts +9 -0
  60. package/dist/commands/bundle/plugins.js +51 -0
  61. package/dist/commands/index.d.ts +5 -0
  62. package/dist/commands/index.js +2 -0
  63. package/dist/commands/verify/abi.d.ts +52 -0
  64. package/dist/commands/verify/abi.js +125 -0
  65. package/dist/commands/verify/addon-source.d.ts +43 -0
  66. package/dist/commands/verify/addon-source.js +75 -0
  67. package/dist/commands/verify/bundle-source.d.ts +12 -0
  68. package/dist/commands/verify/bundle-source.js +53 -0
  69. package/dist/commands/verify/index.d.ts +59 -0
  70. package/dist/commands/verify/index.js +371 -0
  71. package/dist/commands/verify/node-modules-source.d.ts +11 -0
  72. package/dist/commands/verify/node-modules-source.js +76 -0
  73. package/dist/commands/verify/prebuilds.d.ts +15 -0
  74. package/dist/commands/verify/prebuilds.js +39 -0
  75. package/dist/examples/cancel-by-request-id.d.ts +38 -0
  76. package/dist/examples/cancel-by-request-id.js +103 -0
  77. package/dist/examples/classification/classify-image.d.ts +2 -0
  78. package/dist/examples/classification/classify-image.js +23 -0
  79. package/dist/examples/diffusion-esrgan-upscale.d.ts +2 -0
  80. package/dist/examples/diffusion-esrgan-upscale.js +78 -0
  81. package/dist/examples/diffusion-txt2vid.d.ts +2 -0
  82. package/dist/examples/diffusion-txt2vid.js +81 -0
  83. package/dist/examples/download-with-cancel.js +10 -10
  84. package/dist/examples/embed-multi-gpu.d.ts +2 -0
  85. package/dist/examples/embed-multi-gpu.js +46 -0
  86. package/dist/examples/llamacpp-multi-gpu.d.ts +2 -0
  87. package/dist/examples/llamacpp-multi-gpu.js +57 -0
  88. package/dist/examples/plugins.js +3 -7
  89. package/dist/examples/rag/rag-hyperdb/cancellation.js +20 -17
  90. package/dist/examples/tools/llamacpp-tools-gemma4.d.ts +2 -0
  91. package/dist/examples/tools/llamacpp-tools-gemma4.js +73 -0
  92. package/dist/examples/tools/llamacpp-tools-qwen35.d.ts +2 -0
  93. package/dist/examples/tools/llamacpp-tools-qwen35.js +69 -0
  94. package/dist/examples/transcription/parakeet-ctc-filesystem.js +18 -12
  95. package/dist/examples/transcription/parakeet-microphone-record.js +7 -12
  96. package/dist/examples/transcription/parakeet-microphone-stream.d.ts +2 -0
  97. package/dist/examples/transcription/parakeet-microphone-stream.js +79 -0
  98. package/dist/examples/transcription/parakeet-sortformer-streaming.d.ts +2 -0
  99. package/dist/examples/transcription/parakeet-sortformer-streaming.js +121 -0
  100. package/dist/examples/transcription/parakeet-sortformer.js +58 -55
  101. package/dist/examples/transcription/parakeet-tdt-filesystem.js +18 -15
  102. package/dist/examples/transcription/whispercpp-microphone-conversation.d.ts +2 -0
  103. package/dist/examples/transcription/whispercpp-microphone-conversation.js +107 -0
  104. package/dist/examples/tts/chatterbox.js +7 -16
  105. package/dist/examples/tts/llm-to-tts-streaming.js +3 -10
  106. package/dist/examples/tts/supertonic-multilingual.js +4 -12
  107. package/dist/examples/tts/supertonic.js +5 -12
  108. package/dist/examples/vla-smolvla.d.ts +2 -0
  109. package/dist/examples/vla-smolvla.js +75 -0
  110. package/dist/examples/voice-assistant/voice-assistant.js +3 -10
  111. package/dist/expo/plugins/find-in-ancestor-node-modules.d.ts +14 -0
  112. package/dist/expo/plugins/find-in-ancestor-node-modules.js +24 -0
  113. package/dist/expo/plugins/get-project-root.d.ts +22 -0
  114. package/dist/expo/plugins/get-project-root.js +23 -0
  115. package/dist/expo/plugins/index.d.ts +4 -0
  116. package/dist/expo/plugins/index.js +4 -0
  117. package/dist/expo/plugins/resolve-sdk-package-dir.d.ts +9 -2
  118. package/dist/expo/plugins/resolve-sdk-package-dir.js +38 -11
  119. package/dist/expo/plugins/withDeviceInfo.js +2 -1
  120. package/dist/expo/plugins/withMobileBundle.d.ts +5 -4
  121. package/dist/expo/plugins/withMobileBundle.js +42 -58
  122. package/dist/index.d.ts +6 -2
  123. package/dist/index.js +23 -2
  124. package/dist/models/registry/models.d.ts +3725 -514
  125. package/dist/models/registry/models.js +7269 -3910
  126. package/dist/models/update-models/naming.js +22 -8
  127. package/dist/pear/pre.d.ts +3 -0
  128. package/dist/pear/pre.js +9 -2
  129. package/dist/schemas/cancel.d.ts +172 -28
  130. package/dist/schemas/cancel.js +120 -19
  131. package/dist/schemas/classification.d.ts +53 -0
  132. package/dist/schemas/classification.js +33 -0
  133. package/dist/schemas/common.d.ts +860 -1379
  134. package/dist/schemas/common.js +8 -1
  135. package/dist/schemas/completion-event.d.ts +17 -0
  136. package/dist/schemas/completion-event.js +12 -1
  137. package/dist/schemas/completion-stream.d.ts +16 -1
  138. package/dist/schemas/completion-stream.js +25 -7
  139. package/dist/schemas/download-asset.d.ts +25 -9
  140. package/dist/schemas/download-asset.js +17 -6
  141. package/dist/schemas/embed.d.ts +1 -0
  142. package/dist/schemas/embed.js +5 -0
  143. package/dist/schemas/engine-addon-map.d.ts +3 -0
  144. package/dist/schemas/engine-addon-map.js +18 -5
  145. package/dist/schemas/error.d.ts +31 -0
  146. package/dist/schemas/error.js +29 -1
  147. package/dist/schemas/finetune.d.ts +2 -0
  148. package/dist/schemas/finetune.js +5 -0
  149. package/dist/schemas/get-model-info.d.ts +10 -6
  150. package/dist/schemas/get-model-info.js +2 -0
  151. package/dist/schemas/index.d.ts +3 -0
  152. package/dist/schemas/index.js +3 -0
  153. package/dist/schemas/llamacpp-config.d.ts +64 -8
  154. package/dist/schemas/llamacpp-config.js +12 -0
  155. package/dist/schemas/load-model.d.ts +4644 -8605
  156. package/dist/schemas/load-model.js +90 -7
  157. package/dist/schemas/model-src-utils.d.ts +34 -14
  158. package/dist/schemas/model-types.d.ts +54 -14
  159. package/dist/schemas/model-types.js +28 -5
  160. package/dist/schemas/ocr.d.ts +8 -3
  161. package/dist/schemas/plugin.d.ts +60 -6
  162. package/dist/schemas/plugin.js +31 -5
  163. package/dist/schemas/rag.d.ts +9 -0
  164. package/dist/schemas/rag.js +17 -9
  165. package/dist/schemas/registry.d.ts +74 -30
  166. package/dist/schemas/registry.js +5 -0
  167. package/dist/schemas/reload-config.d.ts +34 -14
  168. package/dist/schemas/sdcpp-config.d.ts +445 -16
  169. package/dist/schemas/sdcpp-config.js +387 -26
  170. package/dist/schemas/sdk-config.d.ts +2431 -2723
  171. package/dist/schemas/sdk-config.js +16 -1
  172. package/dist/schemas/sdk-errors-client.d.ts +6 -0
  173. package/dist/schemas/sdk-errors-client.js +31 -1
  174. package/dist/schemas/sdk-errors-server.d.ts +8 -1
  175. package/dist/schemas/sdk-errors-server.js +45 -5
  176. package/dist/schemas/text-to-speech.d.ts +81 -698
  177. package/dist/schemas/text-to-speech.js +46 -19
  178. package/dist/schemas/transcription-config.d.ts +40 -229
  179. package/dist/schemas/transcription-config.js +76 -15
  180. package/dist/schemas/transcription.d.ts +108 -2
  181. package/dist/schemas/transcription.js +81 -0
  182. package/dist/schemas/translate.d.ts +2 -0
  183. package/dist/schemas/translate.js +13 -2
  184. package/dist/schemas/translation-config.d.ts +90 -40
  185. package/dist/schemas/unload-model.d.ts +2 -1
  186. package/dist/schemas/unload-model.js +4 -1
  187. package/dist/schemas/vla.d.ts +87 -0
  188. package/dist/schemas/vla.js +108 -0
  189. package/dist/scripts/run-unit-tests.js +22 -3
  190. package/dist/server/bare/ops/cancel.d.ts +27 -1
  191. package/dist/server/bare/ops/cancel.js +36 -10
  192. package/dist/server/bare/ops/embed.d.ts +3 -3
  193. package/dist/server/bare/ops/embed.js +144 -28
  194. package/dist/server/bare/ops/kv-cache-utils.d.ts +0 -7
  195. package/dist/server/bare/ops/kv-cache-utils.js +8 -47
  196. package/dist/server/bare/ops/transcribe.d.ts +11 -5
  197. package/dist/server/bare/ops/transcribe.js +230 -50
  198. package/dist/server/bare/ops/translate.d.ts +1 -1
  199. package/dist/server/bare/ops/translate.js +197 -88
  200. package/dist/server/bare/plugins/ggml-classification/ops/classify.d.ts +6 -0
  201. package/dist/server/bare/plugins/ggml-classification/ops/classify.js +30 -0
  202. package/dist/server/bare/plugins/ggml-classification/plugin.d.ts +32 -0
  203. package/dist/server/bare/plugins/ggml-classification/plugin.js +55 -0
  204. package/dist/server/bare/plugins/ggml-vla/ops/vla-hparams.d.ts +3 -0
  205. package/dist/server/bare/plugins/ggml-vla/ops/vla-hparams.js +12 -0
  206. package/dist/server/bare/plugins/ggml-vla/ops/vla-run.d.ts +3 -0
  207. package/dist/server/bare/plugins/ggml-vla/ops/vla-run.js +75 -0
  208. package/dist/server/bare/plugins/ggml-vla/plugin.d.ts +54 -0
  209. package/dist/server/bare/plugins/ggml-vla/plugin.js +57 -0
  210. package/dist/server/bare/plugins/index.d.ts +3 -1
  211. package/dist/server/bare/plugins/index.js +3 -1
  212. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +12 -3
  213. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +173 -172
  214. package/dist/server/bare/plugins/llamacpp-completion/ops/context-overflow.d.ts +29 -0
  215. package/dist/server/bare/plugins/llamacpp-completion/ops/context-overflow.js +65 -0
  216. package/dist/server/bare/plugins/llamacpp-completion/ops/finetune.js +125 -21
  217. package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-session.d.ts +154 -0
  218. package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-session.js +448 -0
  219. package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.d.ts +21 -73
  220. package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.js +18 -101
  221. package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +36 -3
  222. package/dist/server/bare/plugins/llamacpp-completion/plugin.js +183 -85
  223. package/dist/server/bare/plugins/llamacpp-completion/transform.d.ts +10 -0
  224. package/dist/server/bare/plugins/llamacpp-completion/transform.js +34 -0
  225. package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +7 -0
  226. package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +10 -1
  227. package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +42 -15
  228. package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +5 -1
  229. package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +8 -3
  230. package/dist/server/bare/plugins/onnx-ocr/plugin.js +3 -0
  231. package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +73 -244
  232. package/dist/server/bare/plugins/parakeet-transcription/plugin.js +68 -96
  233. package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.js +8 -0
  234. package/dist/server/bare/plugins/sdcpp-generation/ops/upscale.d.ts +3 -0
  235. package/dist/server/bare/plugins/sdcpp-generation/ops/upscale.js +40 -0
  236. package/dist/server/bare/plugins/sdcpp-generation/ops/video.d.ts +3 -0
  237. package/dist/server/bare/plugins/sdcpp-generation/ops/video.js +199 -0
  238. package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +288 -15
  239. package/dist/server/bare/plugins/sdcpp-generation/plugin.js +150 -7
  240. package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech-stream.js +2 -15
  241. package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech.js +2 -1
  242. package/dist/server/bare/plugins/tts-ggml/plugin.d.ts +75 -0
  243. package/dist/server/bare/plugins/tts-ggml/plugin.js +189 -0
  244. package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +47 -3
  245. package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +61 -14
  246. package/dist/server/bare/rag-hyperdb/index.d.ts +1 -1
  247. package/dist/server/bare/rag-hyperdb/index.js +1 -1
  248. package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +26 -4
  249. package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +65 -28
  250. package/dist/server/bare/registry/model-config-utils.js +7 -0
  251. package/dist/server/bare/runtime/disposable-scope.d.ts +36 -0
  252. package/dist/server/bare/runtime/disposable-scope.js +69 -0
  253. package/dist/server/bare/runtime/index.d.ts +8 -0
  254. package/dist/server/bare/runtime/index.js +3 -0
  255. package/dist/server/bare/runtime/request-context.d.ts +49 -0
  256. package/dist/server/bare/runtime/request-context.js +1 -0
  257. package/dist/server/bare/runtime/request-id.d.ts +12 -0
  258. package/dist/server/bare/runtime/request-id.js +14 -0
  259. package/dist/server/bare/runtime/request-registry-singleton.d.ts +4 -0
  260. package/dist/server/bare/runtime/request-registry-singleton.js +27 -0
  261. package/dist/server/bare/runtime/request-registry.d.ts +136 -0
  262. package/dist/server/bare/runtime/request-registry.js +297 -0
  263. package/dist/server/bare/runtime/with-request-context.d.ts +22 -0
  264. package/dist/server/bare/runtime/with-request-context.js +53 -0
  265. package/dist/server/bare/runtime-lifecycle.js +9 -9
  266. package/dist/server/bare/types/addon-responses.d.ts +12 -1
  267. package/dist/server/env.js +4 -1
  268. package/dist/server/plugins/index.d.ts +1 -1
  269. package/dist/server/plugins/index.js +1 -1
  270. package/dist/server/plugins/registry.d.ts +1 -0
  271. package/dist/server/plugins/registry.js +5 -0
  272. package/dist/server/rpc/handler-registry.js +30 -7
  273. package/dist/server/rpc/handler-selection.d.ts +9 -0
  274. package/dist/server/rpc/handler-selection.js +14 -0
  275. package/dist/server/rpc/handler-utils.js +5 -13
  276. package/dist/server/rpc/handlers/cancel-delegated.js +28 -31
  277. package/dist/server/rpc/handlers/cancelHandler.d.ts +30 -1
  278. package/dist/server/rpc/handlers/cancelHandler.js +54 -22
  279. package/dist/server/rpc/handlers/classify.d.ts +3 -0
  280. package/dist/server/rpc/handlers/classify.js +4 -0
  281. package/dist/server/rpc/handlers/delete-cache.d.ts +9 -0
  282. package/dist/server/rpc/handlers/delete-cache.js +13 -15
  283. package/dist/server/rpc/handlers/download-asset.js +133 -40
  284. package/dist/server/rpc/handlers/index.d.ts +4 -0
  285. package/dist/server/rpc/handlers/index.js +4 -0
  286. package/dist/server/rpc/handlers/load-model/download-manager.d.ts +60 -2
  287. package/dist/server/rpc/handlers/load-model/download-manager.js +141 -8
  288. package/dist/server/rpc/handlers/load-model/handler.js +216 -98
  289. package/dist/server/rpc/handlers/load-model/http.js +3 -3
  290. package/dist/server/rpc/handlers/load-model/hyperdrive.js +1 -1
  291. package/dist/server/rpc/handlers/load-model/registry.js +1 -1
  292. package/dist/server/rpc/handlers/load-model/resolve-session.d.ts +20 -1
  293. package/dist/server/rpc/handlers/load-model/resolve-session.js +6 -5
  294. package/dist/server/rpc/handlers/load-model/resolve.d.ts +3 -2
  295. package/dist/server/rpc/handlers/load-model/resolve.js +18 -6
  296. package/dist/server/rpc/handlers/load-model/types.d.ts +24 -0
  297. package/dist/server/rpc/handlers/rag.js +133 -15
  298. package/dist/server/rpc/handlers/upscale-stream.d.ts +3 -0
  299. package/dist/server/rpc/handlers/upscale-stream.js +4 -0
  300. package/dist/server/rpc/handlers/video-stream.d.ts +3 -0
  301. package/dist/server/rpc/handlers/video-stream.js +4 -0
  302. package/dist/server/rpc/profiling/operation-metrics.js +23 -0
  303. package/dist/server/utils/completion-normalizer.js +8 -0
  304. package/dist/server/utils/config-transform.js +1 -1
  305. package/dist/server/utils/tools/dialect.js +4 -0
  306. package/dist/server/utils/tools/parser.js +16 -1
  307. package/dist/server/utils/tools/parsers/gemma4native.d.ts +4 -0
  308. package/dist/server/utils/tools/parsers/gemma4native.js +60 -0
  309. package/dist/server/utils/tools/parsers/qwen35.d.ts +4 -0
  310. package/dist/server/utils/tools/parsers/qwen35.js +120 -0
  311. package/dist/server/worker.js +14 -11
  312. package/dist/utils/aggregate-events.d.ts +9 -0
  313. package/dist/utils/aggregate-events.js +18 -3
  314. package/dist/utils/decorate-promise.d.ts +34 -0
  315. package/dist/utils/decorate-promise.js +35 -0
  316. package/dist/utils/errors-client.d.ts +18 -0
  317. package/dist/utils/errors-client.js +31 -0
  318. package/dist/utils/errors-server.d.ts +115 -2
  319. package/dist/utils/errors-server.js +148 -3
  320. package/package.json +68 -77
  321. package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +0 -490
  322. package/dist/server/bare/plugins/onnx-tts/plugin.js +0 -266
  323. package/dist/server/bare/plugins/onnx-tts/wav-helper.d.ts +0 -14
  324. package/dist/server/bare/plugins/onnx-tts/wav-helper.js +0 -107
  325. /package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech-stream.d.ts +0 -0
  326. /package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech.d.ts +0 -0
@@ -0,0 +1,78 @@
1
+ import { loadModel, unloadModel, diffusion, SD_V2_1_1B_Q8_0, REALESRGAN_X4PLUS_ANIME_6B, } from "@qvac/sdk";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ // ESRGAN upscale example.
5
+ //
6
+ // Usage:
7
+ // bun run examples/diffusion-esrgan-upscale.ts [esrganSrc] [prompt] [outputDir]
8
+ const esrganArg = process.argv[2];
9
+ const promptArg = process.argv[3];
10
+ const outputDirArg = process.argv[4];
11
+ const esrganModelSrc = esrganArg ??
12
+ REALESRGAN_X4PLUS_ANIME_6B;
13
+ const prompt = promptArg ??
14
+ "an illustrated red fox portrait, clean line art, soft watercolor background, detailed fur, crisp eyes";
15
+ const negative_prompt = "blurry, low quality, watermark, text";
16
+ const outputDir = outputDirArg ?? ".";
17
+ const seed = 42;
18
+ try {
19
+ console.log("Loading SD 2.1 + ESRGAN upscaler...");
20
+ const modelId = await loadModel({
21
+ modelSrc: SD_V2_1_1B_Q8_0,
22
+ modelType: "diffusion",
23
+ modelConfig: {
24
+ prediction: "v",
25
+ upscaler: {
26
+ type: "esrgan",
27
+ model_src: esrganModelSrc,
28
+ tile_size: 128,
29
+ },
30
+ },
31
+ onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`),
32
+ });
33
+ console.log(`Model loaded: ${modelId}`);
34
+ // Source size is intentionally small — each ESRGAN repeat multiplies dimensions.
35
+ const baseParams = {
36
+ modelId,
37
+ prompt,
38
+ negative_prompt,
39
+ width: 128,
40
+ height: 128,
41
+ steps: 5,
42
+ cfg_scale: 7.5,
43
+ seed,
44
+ };
45
+ console.log(`\nGenerating ESRGAN x4 upscale: "${prompt}"`);
46
+ const single = diffusion({ ...baseParams, upscale: true });
47
+ for await (const { step, totalSteps } of single.progressStream) {
48
+ process.stdout.write(`\rStep ${step}/${totalSteps}\x1b[K`);
49
+ }
50
+ console.log();
51
+ const singleBuffers = await single.outputs;
52
+ for (let i = 0; i < singleBuffers.length; i++) {
53
+ const out = path.join(outputDir, `sd2_esrgan_x4_seed${seed}_${i}.png`);
54
+ fs.writeFileSync(out, singleBuffers[i]);
55
+ console.log(`Saved: ${out}`);
56
+ }
57
+ console.log("Stats:", await single.stats);
58
+ console.log("\nGenerating ESRGAN two-pass x16 upscale...");
59
+ const twoPass = diffusion({ ...baseParams, upscale: { repeats: 2 } });
60
+ for await (const { step, totalSteps } of twoPass.progressStream) {
61
+ process.stdout.write(`\rStep ${step}/${totalSteps}\x1b[K`);
62
+ }
63
+ console.log();
64
+ const twoPassBuffers = await twoPass.outputs;
65
+ for (let i = 0; i < twoPassBuffers.length; i++) {
66
+ const out = path.join(outputDir, `sd2_esrgan_x16_seed${seed}_${i}.png`);
67
+ fs.writeFileSync(out, twoPassBuffers[i]);
68
+ console.log(`Saved: ${out}`);
69
+ }
70
+ console.log("Stats:", await twoPass.stats);
71
+ await unloadModel({ modelId, clearStorage: false });
72
+ console.log("Done.");
73
+ process.exit(0);
74
+ }
75
+ catch (error) {
76
+ console.error("❌ Error:", error);
77
+ process.exit(1);
78
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diffusion-txt2vid.d.ts.map
@@ -0,0 +1,81 @@
1
+ import { loadModel, unloadModel, video, WAN2_1_T2V_1_3B_FP16, UMT5_XXL_FP16, WAN_2_1_COMFYUI_REPACKAGED_VAE, } from "@qvac/sdk";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ // Text-to-video with Wan 2.1 T2V 1.3B. Wan uses a split layout:
5
+ // a diffusion model + a UMT5-XXL text encoder + a VAE.
6
+ // This example needs powerful hardware: at least 16 GB of video memory or
7
+ // 20 GB of unified memory.
8
+ const diffusionModelSrc = process.argv[2] || WAN2_1_T2V_1_3B_FP16;
9
+ const t5XxlModelSrc = process.argv[3] || UMT5_XXL_FP16;
10
+ const vaeModelSrc = process.argv[4] || WAN_2_1_COMFYUI_REPACKAGED_VAE;
11
+ // Prompt tip: Wan 1.3B is small and has weak temporal priors. Use motion-
12
+ // explicit verbs and avoid static framing words like "standing", "still",
13
+ // or "portrait" in the positive prompt.
14
+ const prompt = process.argv[5] ||
15
+ "a colorful bird flapping its wings";
16
+ const outputDir = process.argv[6] || ".";
17
+ try {
18
+ console.log("Loading Wan 2.1 T2V model (diffusion + UMT5-XXL + VAE)...");
19
+ const modelId = await loadModel({
20
+ modelSrc: diffusionModelSrc,
21
+ modelType: "diffusion",
22
+ modelConfig: {
23
+ mode: "video",
24
+ device: "gpu",
25
+ threads: 4,
26
+ t5XxlModelSrc,
27
+ vaeModelSrc,
28
+ diffusion_fa: true,
29
+ offload_to_cpu: true,
30
+ vae_on_cpu: true,
31
+ vae_tiling: true,
32
+ },
33
+ onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`),
34
+ });
35
+ console.log(`Model loaded: ${modelId}`);
36
+ console.log(`\nGenerating video for: "${prompt}"`);
37
+ const { progressStream, outputs, stats } = video({
38
+ modelId,
39
+ mode: "txt2vid",
40
+ prompt,
41
+ negative_prompt: "blurry, low quality, static, jittery, watermark",
42
+ width: 480,
43
+ height: 832,
44
+ // Frame count must satisfy (4*k + 1), k >= 1. Common values at 16 fps:
45
+ // 17 frames ~= 1.06s (very fast, ~6 min on M3 Ultra Metal)
46
+ // 33 frames ~= 2.06s (default in this example, ~11 min)
47
+ // 49 frames ~= 3.06s (~17 min)
48
+ // 65 frames ~= 4.06s (~22 min)
49
+ // 81 frames ~= 5.06s (Wan 1.3B native training length, best motion
50
+ // quality, ~28 min)
51
+ // Going beyond 81 can degrade quality because it exceeds the model's
52
+ // positional embeddings.
53
+ video_frames: 33,
54
+ fps: 16,
55
+ steps: 30,
56
+ cfg_scale: 6.0,
57
+ // Wan 2.1 T2V needs flow_shift=3.0 for visible motion. Higher values can
58
+ // make consecutive frames near-identical, which looks like a frozen video.
59
+ flow_shift: 3.0,
60
+ seed: 42,
61
+ vae_tiling: true,
62
+ });
63
+ for await (const { step, totalSteps } of progressStream) {
64
+ process.stdout.write(`\rStep ${step}/${totalSteps}`);
65
+ }
66
+ console.log();
67
+ const buffers = await outputs;
68
+ for (let i = 0; i < buffers.length; i++) {
69
+ const outputPath = path.join(outputDir, `wan_t2v_${i}.avi`);
70
+ fs.writeFileSync(outputPath, buffers[i]);
71
+ console.log(`Saved: ${outputPath}`);
72
+ }
73
+ console.log("\nStats:", await stats);
74
+ await unloadModel({ modelId, clearStorage: false });
75
+ console.log("Done.");
76
+ process.exit(0);
77
+ }
78
+ catch (error) {
79
+ console.error("❌ Error:", error);
80
+ process.exit(1);
81
+ }
@@ -4,8 +4,11 @@ console.log(`\n💡 Press Ctrl+C to pause the download (it will resume on restar
4
4
  let modelId;
5
5
  let cancelled = false;
6
6
  try {
7
- // Download model with progress tracking and cancellation
8
- await downloadAsset({
7
+ // Download model with progress tracking and cancellation. The
8
+ // `downloadAsset(...)` call returns a *decorated* promise: the
9
+ // promise resolves to the modelId, and the same value carries a
10
+ // synchronous `requestId` field so we can cancel before it settles.
11
+ const download = downloadAsset({
9
12
  assetSrc: LLAMA_3_2_1B_INST_Q4_0,
10
13
  onProgress: (progress) => {
11
14
  const downloadedMB = (progress.downloaded / 1024 / 1024).toFixed(2);
@@ -18,17 +21,14 @@ try {
18
21
  console.log(`📊 Progress: ${percentage}% (${downloadedMB}MB / ${totalMB}MB)`);
19
22
  console.log(progress);
20
23
  cancelled = true;
21
- // Use the downloadKey to cancel
22
- if (progress.downloadKey) {
23
- void cancel({
24
- operation: "downloadAsset",
25
- downloadKey: progress.downloadKey,
26
- // clearCache: true, // Uncomment to delete partial file instead of resuming
27
- });
28
- }
24
+ void cancel({
25
+ requestId: download.requestId,
26
+ // clearCache: true, // Uncomment to delete partial file instead of resuming
27
+ });
29
28
  }
30
29
  },
31
30
  });
31
+ await download;
32
32
  console.log(`\n✅ Model downloaded successfully! Model ID: ${modelId}`);
33
33
  console.log("🎯 Download completed without interruption");
34
34
  void close();
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=embed-multi-gpu.d.ts.map
@@ -0,0 +1,46 @@
1
+ import { loadModel, embed, unloadModel, EMBEDDINGGEMMA_300M_Q8_0 } from "@qvac/sdk";
2
+ // Multi-GPU embedding distributes model layers across multiple GPUs using
3
+ // llama.cpp's built-in split modes. Two strategies are available:
4
+ //
5
+ // - "layer": splits layers and KV cache across GPUs.
6
+ // - "row": splits layers and KV cache across GPUs, and uses tensor parallelism
7
+ // where supported.
8
+ //
9
+ // tensorSplit controls the proportion of work assigned to each GPU.
10
+ // "1,1" distributes evenly across two GPUs; "3,1" assigns 75% to GPU 0.
11
+ //
12
+ // mainGpu selects which GPU is used for the entire model when splitMode is
13
+ // "none", and pins the primary device in multi-GPU mode.
14
+ // Accepts an integer device index (0, 1, ...) or "integrated" / "dedicated".
15
+ try {
16
+ const modelId = await loadModel({
17
+ modelSrc: EMBEDDINGGEMMA_300M_Q8_0,
18
+ modelType: "llamacpp-embedding",
19
+ modelConfig: {
20
+ splitMode: "layer",
21
+ tensorSplit: "1,1",
22
+ mainGpu: 0,
23
+ gpuLayers: 99,
24
+ verbosity: 0,
25
+ },
26
+ });
27
+ const texts = [
28
+ "Multi-GPU embedding distributes layer computation across GPUs.",
29
+ "Each GPU handles a subset of layers, improving throughput for large models.",
30
+ "The tensor-split ratio controls how much work each GPU receives.",
31
+ ];
32
+ for (const text of texts) {
33
+ const { embedding, stats } = await embed({ modelId, text });
34
+ console.log(`Embedded ${text.slice(0, 50)}...`);
35
+ console.log(` Dimensions: ${embedding.length}`);
36
+ if (stats) {
37
+ console.log(` Backend: ${stats.backendDevice}, TPS: ${stats.tokensPerSecond?.toFixed(1)}`);
38
+ }
39
+ }
40
+ await unloadModel({ modelId, clearStorage: false });
41
+ process.exit(0);
42
+ }
43
+ catch (error) {
44
+ console.error("Error:", error);
45
+ process.exit(1);
46
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llamacpp-multi-gpu.d.ts.map
@@ -0,0 +1,57 @@
1
+ import { completion, loadModel, unloadModel, VERBOSITY, LLAMA_3_2_1B_INST_Q4_0 } from "@qvac/sdk";
2
+ // Multi-GPU inference distributes a model across multiple GPUs using llama.cpp's
3
+ // built-in split modes. Two strategies are available:
4
+ //
5
+ // - "layer": splits layers and KV cache across GPUs.
6
+ // - "row": splits layers and KV cache across GPUs, and uses tensor parallelism
7
+ // where supported.
8
+ //
9
+ // tensor-split controls the proportion of work assigned to each GPU.
10
+ // "1,1" distributes evenly across two GPUs; "3,1" assigns 75% to GPU 0.
11
+ //
12
+ // Usage:
13
+ // bun run bare:example dist/examples/llamacpp-multi-gpu.js
14
+ // bun run bare:example dist/examples/llamacpp-multi-gpu.js '<model-url>'
15
+ const modelSrc = process.argv[2] ?? LLAMA_3_2_1B_INST_Q4_0;
16
+ try {
17
+ const modelId = await loadModel({
18
+ modelSrc,
19
+ modelType: "llm",
20
+ modelConfig: {
21
+ "split-mode": "layer",
22
+ "tensor-split": "1,1",
23
+ "main-gpu": 0,
24
+ ctx_size: 4096,
25
+ gpu_layers: 99,
26
+ verbosity: VERBOSITY.ERROR,
27
+ },
28
+ onProgress: (progress) => {
29
+ if (progress.shardInfo) {
30
+ const { shardInfo } = progress;
31
+ console.log(`Downloading ${shardInfo.shardName} (${shardInfo.currentShard}/${shardInfo.totalShards}) ` +
32
+ `— overall: ${shardInfo.overallPercentage.toFixed(1)}%`);
33
+ }
34
+ else {
35
+ console.log(`Downloading: ${progress.percentage.toFixed(1)}%`);
36
+ }
37
+ },
38
+ });
39
+ const history = [
40
+ {
41
+ role: "user",
42
+ content: "Explain the difference between pipeline and tensor parallelism in one paragraph.",
43
+ },
44
+ ];
45
+ const result = completion({ modelId, history, stream: true });
46
+ for await (const token of result.tokenStream) {
47
+ process.stdout.write(token);
48
+ }
49
+ const stats = await result.stats;
50
+ console.log("\n\nStats:", stats);
51
+ await unloadModel({ modelId, clearStorage: false });
52
+ process.exit(0);
53
+ }
54
+ catch (error) {
55
+ console.error("Error:", error);
56
+ process.exit(1);
57
+ }
@@ -10,7 +10,7 @@
10
10
  * 3. Embeddings -> fails (plugin not selected)
11
11
  *
12
12
  */
13
- import { execSync } from "child_process";
13
+ import { bundleSdk } from "../commands/index.js";
14
14
  import { existsSync, rmSync } from "fs";
15
15
  import path from "path";
16
16
  const configDir = import.meta.dirname ?? process.cwd();
@@ -23,14 +23,10 @@ console.log(`⚠️ This example will generate a worker bundle in ${qvacOutputD
23
23
  console.log(" If you have an existing qvac/ folder with bundled files, they will be overwritten and removed.\n");
24
24
  console.log("🔨 Generating worker bundle from plugins config...\n");
25
25
  try {
26
- execSync(`npx @qvac/cli bundle sdk --config "${configPath}" --quiet`, {
27
- cwd: projectRoot,
28
- stdio: "inherit",
29
- });
26
+ await bundleSdk({ projectRoot, configPath, quiet: true });
30
27
  }
31
28
  catch (error) {
32
- console.error("❌ Failed to generate worker bundle. Ensure @qvac/cli is installed:");
33
- console.error(" npm install -D @qvac/cli");
29
+ console.error("❌ Failed to generate worker bundle.");
34
30
  console.error("❌ Error:", error);
35
31
  process.exit(1);
36
32
  }
@@ -31,24 +31,27 @@ try {
31
31
  console.log(`📄 Processing ${documents.length} documents...\n`);
32
32
  let progressCount = 0;
33
33
  let cancelled = false;
34
+ // Capture the decorated promise so we can cancel by `requestId` (the
35
+ // primary cancel path). For a "cancel everything RAG on this model"
36
+ // sweep, use `cancel({ modelId, kind: "rag" })` instead.
37
+ const ingest = ragIngest({
38
+ modelId,
39
+ workspace: WORKSPACE,
40
+ documents,
41
+ progressInterval: 50,
42
+ onProgress: (stage, current, total) => {
43
+ progressCount++;
44
+ const pct = total > 0 ? Math.round((current / total) * 100) : 0;
45
+ console.log(` [${stage}] ${current}/${total} (${pct}%)`);
46
+ if (!cancelled && stage === "embedding" && current > 10) {
47
+ console.log("\n🛑 Triggering cancellation...\n");
48
+ cancelled = true;
49
+ void cancel({ requestId: ingest.requestId });
50
+ }
51
+ },
52
+ });
34
53
  try {
35
- await ragIngest({
36
- modelId,
37
- workspace: WORKSPACE,
38
- documents,
39
- progressInterval: 50,
40
- onProgress: (stage, current, total) => {
41
- progressCount++;
42
- const pct = total > 0 ? Math.round((current / total) * 100) : 0;
43
- console.log(` [${stage}] ${current}/${total} (${pct}%)`);
44
- // Cancel during embedding stage after a few updates
45
- if (!cancelled && stage === "embedding" && current > 10) {
46
- console.log("\n🛑 Triggering cancellation...\n");
47
- cancelled = true;
48
- void cancel({ operation: "rag", workspace: WORKSPACE });
49
- }
50
- },
51
- });
54
+ await ingest;
52
55
  console.log("\n⚠️ Ingest completed (cancellation didn't interrupt in time)");
53
56
  }
54
57
  catch (error) {
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llamacpp-tools-gemma4.d.ts.map
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Tool-calling example using the Gemma4 native dialect.
3
+ *
4
+ * Gemma4 emits tool calls in a JS-literal format with custom quote tokens:
5
+ * <|tool_call>call:NAME{key:<|"|>val<|"|>,...}<tool_call|>
6
+ *
7
+ * Reasoning output (thinking) is emitted inside <|channel>thought...<channel|>
8
+ * frames, which are stripped from contentDelta and forwarded as thinkingDelta
9
+ * when captureThinking is true.
10
+ *
11
+ * The dialect is auto-detected from the model name/path when the file name
12
+ * contains "gemma4" or "gemma-4". Pass toolDialect: "gemma4" explicitly to
13
+ * completion() if auto-detection does not pick it up for a given file name.
14
+ *
15
+ * Usage:
16
+ * bun run bare:example dist/examples/tools/llamacpp-tools-gemma4.js <model-url>
17
+ */
18
+ import { completion, loadModel, unloadModel, GEMMA4_2B_MULTIMODAL_Q4_K_M, } from "@qvac/sdk";
19
+ import { tools, mockExecute } from "./shared.js";
20
+ const modelSrc = process.argv[2] ?? GEMMA4_2B_MULTIMODAL_Q4_K_M;
21
+ let modelId;
22
+ try {
23
+ modelId = await loadModel({
24
+ modelSrc,
25
+ modelType: "llm",
26
+ modelConfig: { ctx_size: 4096, tools: true },
27
+ onProgress: (progress) => console.log(`Loading: ${progress.percentage.toFixed(1)}%`),
28
+ });
29
+ console.log(`Model loaded: ${modelId}`);
30
+ const history = [
31
+ {
32
+ role: "system",
33
+ content: "You are a helpful assistant that can call tools to look up weather and horoscopes.",
34
+ },
35
+ {
36
+ role: "user",
37
+ content: "What's the weather in Tokyo and my horoscope for Aquarius?",
38
+ },
39
+ ];
40
+ const result = completion({ modelId, history, stream: true, tools });
41
+ const tokensTask = (async () => {
42
+ for await (const token of result.tokenStream) {
43
+ process.stdout.write(token);
44
+ }
45
+ })();
46
+ const toolsTask = (async () => {
47
+ for await (const evt of result.toolCallStream) {
48
+ if (evt.type === "toolCall") {
49
+ console.log(`\n-> ${evt.call.name}(${JSON.stringify(evt.call.arguments)})`);
50
+ }
51
+ }
52
+ })();
53
+ await Promise.all([tokensTask, toolsTask]);
54
+ const toolCalls = await result.toolCalls;
55
+ console.log("\n\nFinal tool calls:");
56
+ if (toolCalls.length > 0) {
57
+ for (const call of toolCalls) {
58
+ console.log(` - ${call.name}(${JSON.stringify(call.arguments)})`);
59
+ const toolResult = mockExecute(call.name, call.arguments);
60
+ console.log(` result: ${toolResult}`);
61
+ }
62
+ }
63
+ else {
64
+ console.log(" (none)");
65
+ }
66
+ await unloadModel({ modelId, clearStorage: false });
67
+ }
68
+ catch (error) {
69
+ console.error("Error:", error);
70
+ if (modelId)
71
+ await unloadModel({ modelId, clearStorage: false }).catch(() => { });
72
+ process.exit(1);
73
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llamacpp-tools-qwen35.d.ts.map
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Tool-calling example using the Qwen3.5 dialect.
3
+ *
4
+ * Qwen3.5 emits tool calls in a Pythonic-XML format:
5
+ * <tool_call><function=NAME><parameter=KEY>VALUE</parameter></function></tool_call>
6
+ *
7
+ * The dialect is auto-detected from the model name/path when the model file
8
+ * contains "qwen3.5", "qwen3-5", "qwen3.6", or "qwen3-6". Pass
9
+ * toolDialect: "qwen35" explicitly if auto-detection does not pick it up.
10
+ *
11
+ * Usage:
12
+ * bun run bare:example dist/examples/tools/llamacpp-tools-qwen35.js <model-url>
13
+ */
14
+ import { completion, loadModel, unloadModel, QWEN3_5_0_8B_MULTIMODAL_Q8_0, } from "@qvac/sdk";
15
+ import { tools, mockExecute } from "./shared.js";
16
+ const modelSrc = process.argv[2] ?? QWEN3_5_0_8B_MULTIMODAL_Q8_0;
17
+ let modelId;
18
+ try {
19
+ modelId = await loadModel({
20
+ modelSrc,
21
+ modelType: "llm",
22
+ modelConfig: { ctx_size: 4096, tools: true },
23
+ onProgress: (progress) => console.log(`Loading: ${progress.percentage.toFixed(1)}%`),
24
+ });
25
+ console.log(`Model loaded: ${modelId}`);
26
+ const history = [
27
+ {
28
+ role: "system",
29
+ content: "You are a helpful assistant that can call tools to look up weather and horoscopes.",
30
+ },
31
+ {
32
+ role: "user",
33
+ content: "What's the weather in Tokyo and my horoscope for Aquarius?",
34
+ },
35
+ ];
36
+ const result = completion({ modelId, history, stream: true, tools });
37
+ const tokensTask = (async () => {
38
+ for await (const token of result.tokenStream) {
39
+ process.stdout.write(token);
40
+ }
41
+ })();
42
+ const toolsTask = (async () => {
43
+ for await (const evt of result.toolCallStream) {
44
+ if (evt.type === "toolCall") {
45
+ console.log(`\n-> ${evt.call.name}(${JSON.stringify(evt.call.arguments)})`);
46
+ }
47
+ }
48
+ })();
49
+ await Promise.all([tokensTask, toolsTask]);
50
+ const toolCalls = await result.toolCalls;
51
+ console.log("\n\nFinal tool calls:");
52
+ if (toolCalls.length > 0) {
53
+ for (const call of toolCalls) {
54
+ console.log(` - ${call.name}(${JSON.stringify(call.arguments)})`);
55
+ const toolResult = mockExecute(call.name, call.arguments);
56
+ console.log(` result: ${toolResult}`);
57
+ }
58
+ }
59
+ else {
60
+ console.log(" (none)");
61
+ }
62
+ await unloadModel({ modelId, clearStorage: false });
63
+ }
64
+ catch (error) {
65
+ console.error("Error:", error);
66
+ if (modelId)
67
+ await unloadModel({ modelId, clearStorage: false }).catch(() => { });
68
+ process.exit(1);
69
+ }
@@ -1,24 +1,30 @@
1
- import { loadModel, unloadModel, transcribe, PARAKEET_CTC_FP32, PARAKEET_CTC_TOKENIZER, } from "@qvac/sdk";
1
+ /**
2
+ * Parakeet CTC transcription from a WAV file.
3
+ *
4
+ * Usage:
5
+ * bun run examples/transcription/parakeet-ctc-filesystem.ts <wav-file> [parakeet-ctc-gguf]
6
+ *
7
+ * Loads a single GGUF checkpoint (`PARAKEET_CTC_0_6B_Q8_0` by default) and
8
+ * transcribes the file with the batch `transcribe` API. Omit the model
9
+ * argument to use the registry constant.
10
+ *
11
+ * Audio should be 16 kHz mono PCM in a WAV container.
12
+ */
13
+ import { loadModel, unloadModel, transcribe, PARAKEET_CTC_0_6B_Q8_0, } from "@qvac/sdk";
2
14
  const args = process.argv.slice(2);
3
15
  if (!args[0]) {
4
16
  console.error("Usage: bun run examples/transcription/parakeet-ctc-filesystem.ts <wav-file> " +
5
- "[model.onnx] [tokenizer.json]");
6
- console.error("\nIf model paths are omitted, defaults to registry models.");
17
+ "[parakeet-ctc-gguf]");
18
+ console.error("\nIf the model path is omitted, defaults to the registry model.");
7
19
  process.exit(1);
8
20
  }
9
21
  const audioFilePath = args[0];
10
- const parakeetCtcModelSrc = args[1] ?? PARAKEET_CTC_FP32;
11
- const parakeetTokenizerSrc = args[2] ?? PARAKEET_CTC_TOKENIZER;
22
+ const parakeetModelSrc = args[1] ?? PARAKEET_CTC_0_6B_Q8_0;
12
23
  try {
13
24
  console.log("Loading Parakeet CTC model...");
14
25
  const modelId = await loadModel({
15
- modelSrc: parakeetCtcModelSrc,
26
+ modelSrc: parakeetModelSrc,
16
27
  modelType: "parakeet",
17
- modelConfig: {
18
- modelType: "ctc",
19
- parakeetCtcModelSrc,
20
- parakeetTokenizerSrc,
21
- },
22
28
  onProgress: (progress) => {
23
29
  console.log(`Download progress: ${progress.percentage.toFixed(1)}%`);
24
30
  },
@@ -33,6 +39,6 @@ try {
33
39
  console.log("Done");
34
40
  }
35
41
  catch (error) {
36
- console.error("Error:", error);
42
+ console.error("❌ Error:", error);
37
43
  process.exit(1);
38
44
  }
@@ -1,14 +1,15 @@
1
1
  /**
2
- * Microphone → Parakeet transcription using chunked `transcribe` calls.
2
+ * Microphone → Parakeet batch transcription (chunked `transcribe`).
3
3
  *
4
- * Usage: bun run examples/transcription/parakeet-microphone-record.ts
4
+ * Usage:
5
+ * bun run examples/transcription/parakeet-microphone-record.ts
5
6
  *
6
- * Captures 3-second audio chunks from the microphone and sends each to the
7
- * batch `transcribe` API. Press Ctrl+C to quit.
7
+ * Captures 3 s s16le chunks from the microphone and sends each to `transcribe`
8
+ * with the TDT model. Press Ctrl+C to stop.
8
9
  *
9
10
  * Requirements: FFmpeg installed, microphone access.
10
11
  */
11
- import { loadModel, unloadModel, transcribe, PARAKEET_TDT_ENCODER_FP32, PARAKEET_TDT_DECODER_FP32, PARAKEET_TDT_VOCAB, PARAKEET_TDT_PREPROCESSOR_FP32, } from "@qvac/sdk";
12
+ import { loadModel, unloadModel, transcribe, PARAKEET_TDT_0_6B_V3_Q8_0, } from "@qvac/sdk";
12
13
  import { spawnSync } from "child_process";
13
14
  import { startMicrophone } from "../audio/mic-input";
14
15
  const SAMPLE_RATE = 16000;
@@ -27,14 +28,8 @@ catch {
27
28
  }
28
29
  console.log("Loading Parakeet model...");
29
30
  const modelId = await loadModel({
30
- modelSrc: PARAKEET_TDT_ENCODER_FP32,
31
+ modelSrc: PARAKEET_TDT_0_6B_V3_Q8_0,
31
32
  modelType: "parakeet",
32
- modelConfig: {
33
- parakeetEncoderSrc: PARAKEET_TDT_ENCODER_FP32,
34
- parakeetDecoderSrc: PARAKEET_TDT_DECODER_FP32,
35
- parakeetVocabSrc: PARAKEET_TDT_VOCAB,
36
- parakeetPreprocessorSrc: PARAKEET_TDT_PREPROCESSOR_FP32,
37
- },
38
33
  onProgress: (p) => console.log(`Download: ${p.percentage.toFixed(1)}%`),
39
34
  });
40
35
  console.log("Model loaded.\n");
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parakeet-microphone-stream.d.ts.map