@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
@@ -1,266 +0,0 @@
1
- import path from "bare-path";
2
- import ttsAddonLogging from "@qvac/tts-onnx/addonLogging.js";
3
- import ONNXTTS from "@qvac/tts-onnx";
4
- import { definePlugin, defineHandler, defineDuplexHandler, ttsRequestSchema, ttsResponseSchema, textToSpeechStreamRequestSchema, textToSpeechStreamResponseSchema, ModelType, ttsConfigSchema, ADDON_TTS, } from "../../../../schemas/index.js";
5
- import { createStreamLogger, registerAddonLogger } from "../../../../logging/index.js";
6
- import { TtsArtifactsRequiredError, TtsReferenceAudioRequiredError, } from "../../../../utils/errors-server.js";
7
- import { textToSpeech } from "./ops/text-to-speech.js";
8
- import { textToSpeechStream } from "./ops/text-to-speech-stream.js";
9
- import { attachModelExecutionMs } from "../../../../profiling/model-execution.js";
10
- import { loadReferenceAudioAt24k } from "./wav-helper.js";
11
- async function resolveChatterboxConfig(config, ctx) {
12
- const { ttsTokenizerSrc, ttsSpeechEncoderSrc, ttsEmbedTokensSrc, ttsConditionalDecoderSrc, ttsLanguageModelSrc, referenceAudioSrc, language, } = config;
13
- if (!ttsTokenizerSrc ||
14
- !ttsSpeechEncoderSrc ||
15
- !ttsEmbedTokensSrc ||
16
- !ttsConditionalDecoderSrc ||
17
- !ttsLanguageModelSrc) {
18
- throw new TtsArtifactsRequiredError();
19
- }
20
- if (!referenceAudioSrc) {
21
- throw new TtsReferenceAudioRequiredError();
22
- }
23
- const resolve = ctx.resolveModelPath;
24
- const [tokenizerPath, speechEncoderPath, embedTokensPath, conditionalDecoderPath, languageModelPath, referenceAudioPath,] = await Promise.all([
25
- resolve(ttsTokenizerSrc),
26
- resolve(ttsSpeechEncoderSrc),
27
- resolve(ttsEmbedTokensSrc),
28
- resolve(ttsConditionalDecoderSrc),
29
- resolve(ttsLanguageModelSrc),
30
- resolve(referenceAudioSrc),
31
- ]);
32
- return {
33
- config: {
34
- ttsEngine: "chatterbox",
35
- language,
36
- },
37
- artifacts: {
38
- tokenizerPath,
39
- speechEncoderPath,
40
- embedTokensPath,
41
- conditionalDecoderPath,
42
- languageModelPath,
43
- referenceAudioPath,
44
- },
45
- };
46
- }
47
- async function resolveSupertonicConfig(config, ctx) {
48
- const { ttsTextEncoderSrc, ttsDurationPredictorSrc, ttsVectorEstimatorSrc, ttsVocoderSrc, ttsUnicodeIndexerSrc, ttsTtsConfigSrc, ttsVoiceStyleSrc, ttsSpeed, ttsNumInferenceSteps, ttsSupertonicMultilingual, language, } = config;
49
- if (!ttsTextEncoderSrc ||
50
- !ttsDurationPredictorSrc ||
51
- !ttsVectorEstimatorSrc ||
52
- !ttsVocoderSrc ||
53
- !ttsUnicodeIndexerSrc ||
54
- !ttsTtsConfigSrc ||
55
- !ttsVoiceStyleSrc) {
56
- throw new TtsArtifactsRequiredError();
57
- }
58
- const resolve = ctx.resolveModelPath;
59
- const [textEncoderPath, durationPredictorPath, vectorEstimatorPath, vocoderPath, unicodeIndexerPath, ttsConfigPath, voiceStylePath,] = await Promise.all([
60
- resolve(ttsTextEncoderSrc),
61
- resolve(ttsDurationPredictorSrc),
62
- resolve(ttsVectorEstimatorSrc),
63
- resolve(ttsVocoderSrc),
64
- resolve(ttsUnicodeIndexerSrc),
65
- resolve(ttsTtsConfigSrc),
66
- resolve(ttsVoiceStyleSrc),
67
- ]);
68
- return {
69
- config: {
70
- ttsEngine: "supertonic",
71
- language,
72
- ttsSpeed,
73
- ttsNumInferenceSteps,
74
- ttsSupertonicMultilingual,
75
- },
76
- artifacts: {
77
- textEncoderPath,
78
- durationPredictorPath,
79
- vectorEstimatorPath,
80
- vocoderPath,
81
- unicodeIndexerPath,
82
- ttsConfigPath,
83
- voiceStylePath,
84
- },
85
- };
86
- }
87
- function createChatterboxModel(modelId, config, artifacts) {
88
- const tokenizerPath = artifacts["tokenizerPath"];
89
- const speechEncoderPath = artifacts["speechEncoderPath"];
90
- const embedTokensPath = artifacts["embedTokensPath"];
91
- const conditionalDecoderPath = artifacts["conditionalDecoderPath"];
92
- const languageModelPath = artifacts["languageModelPath"];
93
- const referenceAudioPath = artifacts["referenceAudioPath"];
94
- if (!tokenizerPath ||
95
- !speechEncoderPath ||
96
- !embedTokensPath ||
97
- !conditionalDecoderPath ||
98
- !languageModelPath) {
99
- throw new TtsArtifactsRequiredError();
100
- }
101
- if (!referenceAudioPath) {
102
- throw new TtsReferenceAudioRequiredError();
103
- }
104
- const logger = createStreamLogger(modelId, ModelType.onnxTts);
105
- registerAddonLogger(modelId, ModelType.onnxTts, logger);
106
- const referenceAudio = loadReferenceAudioAt24k(referenceAudioPath);
107
- const model = new ONNXTTS({
108
- files: {
109
- tokenizerPath,
110
- speechEncoderPath,
111
- embedTokensPath,
112
- conditionalDecoderPath,
113
- languageModelPath,
114
- },
115
- engine: "chatterbox",
116
- config: { language: config.language ?? "en", useGPU: false },
117
- referenceAudio,
118
- logger,
119
- opts: { stats: true },
120
- exclusiveRun: true,
121
- });
122
- return { model };
123
- }
124
- function createSupertonicModel(modelId, config, artifacts) {
125
- const textEncoderPath = artifacts["textEncoderPath"];
126
- const durationPredictorPath = artifacts["durationPredictorPath"];
127
- const vectorEstimatorPath = artifacts["vectorEstimatorPath"];
128
- const vocoderPath = artifacts["vocoderPath"];
129
- const unicodeIndexerPath = artifacts["unicodeIndexerPath"];
130
- const ttsConfigPath = artifacts["ttsConfigPath"];
131
- const voiceStylePath = artifacts["voiceStylePath"];
132
- if (!textEncoderPath ||
133
- !durationPredictorPath ||
134
- !vectorEstimatorPath ||
135
- !vocoderPath ||
136
- !unicodeIndexerPath ||
137
- !ttsConfigPath ||
138
- !voiceStylePath) {
139
- throw new TtsArtifactsRequiredError();
140
- }
141
- const logger = createStreamLogger(modelId, ModelType.onnxTts);
142
- registerAddonLogger(modelId, ModelType.onnxTts, logger);
143
- const voiceName = path.basename(voiceStylePath).replace(/\.json$/i, "") || "F1";
144
- const model = new ONNXTTS({
145
- files: {
146
- textEncoderPath,
147
- durationPredictorPath,
148
- vectorEstimatorPath,
149
- vocoderPath,
150
- unicodeIndexerPath,
151
- ttsConfigPath,
152
- voiceStyleJsonPath: voiceStylePath,
153
- },
154
- engine: "supertonic",
155
- voiceName,
156
- speed: config.ttsSpeed ?? 1,
157
- numInferenceSteps: config.ttsNumInferenceSteps ?? 5,
158
- supertonicMultilingual: config.ttsSupertonicMultilingual !== false,
159
- config: { language: config.language ?? "en" },
160
- logger,
161
- opts: { stats: true },
162
- exclusiveRun: true,
163
- });
164
- return { model };
165
- }
166
- export const ttsPlugin = definePlugin({
167
- modelType: ModelType.onnxTts,
168
- displayName: "TTS (ONNX)",
169
- addonPackage: ADDON_TTS,
170
- loadConfigSchema: ttsConfigSchema,
171
- skipPrimaryModelPathValidation: true,
172
- async resolveConfig(cfg, ctx) {
173
- const { ttsEngine } = cfg;
174
- if (ttsEngine === "supertonic") {
175
- return resolveSupertonicConfig(cfg, ctx);
176
- }
177
- return resolveChatterboxConfig(cfg, ctx);
178
- },
179
- createModel(params) {
180
- const config = (params.modelConfig ?? {});
181
- const artifacts = params.artifacts ?? {};
182
- if (config.ttsEngine === "supertonic") {
183
- return createSupertonicModel(params.modelId, config, artifacts);
184
- }
185
- return createChatterboxModel(params.modelId, config, artifacts);
186
- },
187
- handlers: {
188
- textToSpeech: defineHandler({
189
- requestSchema: ttsRequestSchema,
190
- responseSchema: ttsResponseSchema,
191
- streaming: true,
192
- handler: async function* (request) {
193
- const stream = textToSpeech(request);
194
- try {
195
- let result = await stream.next();
196
- while (!result.done) {
197
- yield {
198
- type: "textToSpeech",
199
- buffer: result.value.buffer,
200
- done: false,
201
- ...(result.value.chunkIndex !== undefined
202
- ? { chunkIndex: result.value.chunkIndex }
203
- : {}),
204
- ...(typeof result.value.sentenceChunk === "string" &&
205
- result.value.sentenceChunk.length > 0
206
- ? { sentenceChunk: result.value.sentenceChunk }
207
- : {}),
208
- };
209
- result = await stream.next();
210
- }
211
- const { modelExecutionMs, stats } = result.value;
212
- yield attachModelExecutionMs({
213
- type: "textToSpeech",
214
- buffer: [],
215
- done: true,
216
- ...(stats && { stats }),
217
- }, modelExecutionMs);
218
- }
219
- finally {
220
- await stream.return?.(undefined);
221
- }
222
- },
223
- }),
224
- textToSpeechStream: defineDuplexHandler({
225
- requestSchema: textToSpeechStreamRequestSchema,
226
- responseSchema: textToSpeechStreamResponseSchema,
227
- streaming: true,
228
- duplex: true,
229
- handler: async function* (request, inputStream) {
230
- const stream = textToSpeechStream(request, inputStream);
231
- try {
232
- let result = await stream.next();
233
- while (!result.done) {
234
- yield {
235
- type: "textToSpeechStream",
236
- buffer: result.value.buffer,
237
- done: false,
238
- ...(result.value.chunkIndex !== undefined
239
- ? { chunkIndex: result.value.chunkIndex }
240
- : {}),
241
- ...(typeof result.value.sentenceChunk === "string" &&
242
- result.value.sentenceChunk.length > 0
243
- ? { sentenceChunk: result.value.sentenceChunk }
244
- : {}),
245
- };
246
- result = await stream.next();
247
- }
248
- const { modelExecutionMs, stats } = result.value;
249
- yield attachModelExecutionMs({
250
- type: "textToSpeechStream",
251
- buffer: [],
252
- done: true,
253
- ...(stats && { stats }),
254
- }, modelExecutionMs);
255
- }
256
- finally {
257
- await stream.return?.(undefined);
258
- }
259
- },
260
- }),
261
- },
262
- logging: {
263
- module: ttsAddonLogging,
264
- namespace: ModelType.onnxTts,
265
- },
266
- });
@@ -1,14 +0,0 @@
1
- export type ReadWavResult = {
2
- samples: Float32Array;
3
- sampleRate: number;
4
- };
5
- /**
6
- * Read a WAV file and return Float32Array of mono samples in [-1, 1].
7
- * Supports 16-bit PCM and 32-bit float; stereo is converted to mono (left channel).
8
- */
9
- export declare function readWavAsFloat32(wavPath: string): ReadWavResult;
10
- /**
11
- * Load reference audio from a WAV path and return Float32Array at 24kHz for Chatterbox.
12
- */
13
- export declare function loadReferenceAudioAt24k(wavPath: string): Float32Array;
14
- //# sourceMappingURL=wav-helper.d.ts.map
@@ -1,107 +0,0 @@
1
- import fs from "bare-fs";
2
- const CHATTERBOX_SAMPLE_RATE = 24000;
3
- /**
4
- * Read a WAV file and return Float32Array of mono samples in [-1, 1].
5
- * Supports 16-bit PCM and 32-bit float; stereo is converted to mono (left channel).
6
- */
7
- export function readWavAsFloat32(wavPath) {
8
- const buf = fs.readFileSync(wavPath);
9
- if (buf.length < 44)
10
- throw new Error("WAV file too small");
11
- const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
12
- const riff = String.fromCharCode(buf[0], buf[1], buf[2], buf[3]);
13
- const wave = String.fromCharCode(buf[8], buf[9], buf[10], buf[11]);
14
- if (riff !== "RIFF")
15
- throw new Error("Not a RIFF file");
16
- if (wave !== "WAVE")
17
- throw new Error("Not WAVE format");
18
- let fmtChunk = null;
19
- let dataChunk = null;
20
- let offset = 12;
21
- while (offset + 8 <= buf.length) {
22
- const chunkId = String.fromCharCode(buf[offset], buf[offset + 1], buf[offset + 2], buf[offset + 3]);
23
- const chunkSize = view.getUint32(offset + 4, true);
24
- if (chunkId === "fmt ")
25
- fmtChunk = { offset: offset + 8, size: chunkSize };
26
- else if (chunkId === "data")
27
- dataChunk = { offset: offset + 8, size: chunkSize };
28
- offset += 8 + chunkSize;
29
- if (chunkSize % 2 === 1 && offset < buf.length)
30
- offset += 1;
31
- }
32
- if (!fmtChunk)
33
- throw new Error("WAV missing fmt chunk");
34
- if (!dataChunk)
35
- throw new Error("WAV missing data chunk");
36
- const fmtOff = fmtChunk.offset;
37
- if (fmtOff + 16 > buf.length)
38
- throw new Error("fmt chunk truncated");
39
- const audioFormat = view.getUint16(fmtOff, true);
40
- const numChannels = view.getUint16(fmtOff + 2, true);
41
- const sampleRate = view.getUint32(fmtOff + 4, true);
42
- const bitsPerSample = view.getUint16(fmtOff + 14, true);
43
- if (audioFormat !== 1 && audioFormat !== 3) {
44
- throw new Error("Unsupported WAV audio format: " +
45
- audioFormat +
46
- " (only PCM=1 and IEEE_FLOAT=3 supported)");
47
- }
48
- const dataOff = dataChunk.offset;
49
- const dataLen = Math.min(dataChunk.size, buf.length - dataOff);
50
- let samples;
51
- if (audioFormat === 1 && bitsPerSample === 16) {
52
- const bytesPerSample = 2;
53
- const numSamples = Math.floor(dataLen / bytesPerSample);
54
- const numFrames = numChannels === 1 ? numSamples : Math.floor(numSamples / numChannels);
55
- samples = new Float32Array(numFrames);
56
- for (let i = 0; i < numFrames; i++) {
57
- const idx = dataOff + (numChannels === 1 ? i * 2 : i * numChannels * 2);
58
- if (idx + 2 > buf.length)
59
- break;
60
- const s = view.getInt16(idx, true);
61
- samples[i] = s / 32768;
62
- }
63
- }
64
- else if (audioFormat === 3 && bitsPerSample === 32) {
65
- const bytesPerSample = 4;
66
- const numSamples = Math.floor(dataLen / bytesPerSample);
67
- const numFrames = numChannels === 1 ? numSamples : Math.floor(numSamples / numChannels);
68
- samples = new Float32Array(numFrames);
69
- for (let i = 0; i < numFrames; i++) {
70
- const idx = dataOff + (numChannels === 1 ? i * 4 : i * numChannels * 4);
71
- if (idx + 4 > buf.length)
72
- break;
73
- samples[i] = view.getFloat32(idx, true);
74
- }
75
- }
76
- else {
77
- throw new Error("Unsupported WAV format: audioFormat=" +
78
- audioFormat +
79
- ", bitsPerSample=" +
80
- bitsPerSample);
81
- }
82
- return { samples, sampleRate };
83
- }
84
- function resampleLinear(samples, fromRate, toRate) {
85
- if (fromRate === toRate)
86
- return samples;
87
- const ratio = fromRate / toRate;
88
- const outputLen = Math.round(samples.length / ratio);
89
- const output = new Float32Array(outputLen);
90
- for (let i = 0; i < outputLen; i++) {
91
- const srcIdx = i * ratio;
92
- const lo = Math.floor(srcIdx);
93
- const hi = Math.min(lo + 1, samples.length - 1);
94
- const frac = srcIdx - lo;
95
- output[i] = samples[lo] * (1 - frac) + samples[hi] * frac;
96
- }
97
- return output;
98
- }
99
- /**
100
- * Load reference audio from a WAV path and return Float32Array at 24kHz for Chatterbox.
101
- */
102
- export function loadReferenceAudioAt24k(wavPath) {
103
- const { samples, sampleRate } = readWavAsFloat32(wavPath);
104
- if (sampleRate === CHATTERBOX_SAMPLE_RATE)
105
- return samples;
106
- return resampleLinear(samples, sampleRate, CHATTERBOX_SAMPLE_RATE);
107
- }