@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.
- package/NOTICE +1455 -29
- package/README.md +2 -0
- package/dist/client/api/cancel.d.ts +24 -32
- package/dist/client/api/cancel.js +58 -31
- package/dist/client/api/classify.d.ts +23 -0
- package/dist/client/api/classify.js +43 -0
- package/dist/client/api/client-request-id.d.ts +17 -0
- package/dist/client/api/client-request-id.js +27 -0
- package/dist/client/api/completion-stream.d.ts +1 -1
- package/dist/client/api/completion-stream.js +34 -3
- package/dist/client/api/diffusion.d.ts +46 -0
- package/dist/client/api/diffusion.js +50 -1
- package/dist/client/api/download-asset.d.ts +12 -2
- package/dist/client/api/download-asset.js +21 -3
- package/dist/client/api/embed.d.ts +8 -4
- package/dist/client/api/embed.js +14 -1
- package/dist/client/api/get-model-info.d.ts +1 -1
- package/dist/client/api/index.d.ts +5 -0
- package/dist/client/api/index.js +5 -0
- package/dist/client/api/load-model.d.ts +12 -4
- package/dist/client/api/load-model.js +49 -2
- package/dist/client/api/rag.d.ts +9 -3
- package/dist/client/api/rag.js +23 -3
- package/dist/client/api/transcribe.d.ts +23 -8
- package/dist/client/api/transcribe.js +69 -4
- package/dist/client/api/unload-model.d.ts +5 -2
- package/dist/client/api/unload-model.js +9 -4
- package/dist/client/api/upscale.d.ts +45 -0
- package/dist/client/api/upscale.js +99 -0
- package/dist/client/api/video.d.ts +64 -0
- package/dist/client/api/video.js +147 -0
- package/dist/client/api/vla-helpers.d.ts +45 -0
- package/dist/client/api/vla-helpers.js +130 -0
- package/dist/client/api/vla.d.ts +65 -0
- package/dist/client/api/vla.js +109 -0
- package/dist/client/config-loader/resolve-config.node.d.ts +16 -0
- package/dist/client/config-loader/resolve-config.node.js +77 -23
- package/dist/client/plugins-factory.d.ts +8 -0
- package/dist/client/plugins-factory.js +10 -0
- package/dist/client/rpc/bare-client.js +62 -66
- package/dist/client/rpc/ensure-worker-ready.d.ts +9 -0
- package/dist/client/rpc/ensure-worker-ready.js +17 -0
- package/dist/client/rpc/expo-rpc-client.js +2 -1
- package/dist/client/rpc/node-rpc-client.js +22 -8
- package/dist/client/rpc/rpc-client.d.ts +2 -2
- package/dist/client/rpc/rpc-client.js +10 -4
- package/dist/client/rpc/rpc-error.d.ts +9 -0
- package/dist/client/rpc/rpc-error.js +105 -0
- package/dist/commands/bundle/bare-pack.d.ts +13 -0
- package/dist/commands/bundle/bare-pack.js +54 -0
- package/dist/commands/bundle/constants.d.ts +7 -0
- package/dist/commands/bundle/constants.js +23 -0
- package/dist/commands/bundle/entry-gen.d.ts +2 -0
- package/dist/commands/bundle/entry-gen.js +48 -0
- package/dist/commands/bundle/index.d.ts +20 -0
- package/dist/commands/bundle/index.js +141 -0
- package/dist/commands/bundle/manifest.d.ts +21 -0
- package/dist/commands/bundle/manifest.js +193 -0
- package/dist/commands/bundle/plugins.d.ts +9 -0
- package/dist/commands/bundle/plugins.js +51 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/verify/abi.d.ts +52 -0
- package/dist/commands/verify/abi.js +125 -0
- package/dist/commands/verify/addon-source.d.ts +43 -0
- package/dist/commands/verify/addon-source.js +75 -0
- package/dist/commands/verify/bundle-source.d.ts +12 -0
- package/dist/commands/verify/bundle-source.js +53 -0
- package/dist/commands/verify/index.d.ts +59 -0
- package/dist/commands/verify/index.js +371 -0
- package/dist/commands/verify/node-modules-source.d.ts +11 -0
- package/dist/commands/verify/node-modules-source.js +76 -0
- package/dist/commands/verify/prebuilds.d.ts +15 -0
- package/dist/commands/verify/prebuilds.js +39 -0
- package/dist/examples/cancel-by-request-id.d.ts +38 -0
- package/dist/examples/cancel-by-request-id.js +103 -0
- package/dist/examples/classification/classify-image.d.ts +2 -0
- package/dist/examples/classification/classify-image.js +23 -0
- package/dist/examples/diffusion-esrgan-upscale.d.ts +2 -0
- package/dist/examples/diffusion-esrgan-upscale.js +78 -0
- package/dist/examples/diffusion-txt2vid.d.ts +2 -0
- package/dist/examples/diffusion-txt2vid.js +81 -0
- package/dist/examples/download-with-cancel.js +10 -10
- package/dist/examples/embed-multi-gpu.d.ts +2 -0
- package/dist/examples/embed-multi-gpu.js +46 -0
- package/dist/examples/llamacpp-multi-gpu.d.ts +2 -0
- package/dist/examples/llamacpp-multi-gpu.js +57 -0
- package/dist/examples/plugins.js +3 -7
- package/dist/examples/rag/rag-hyperdb/cancellation.js +20 -17
- package/dist/examples/tools/llamacpp-tools-gemma4.d.ts +2 -0
- package/dist/examples/tools/llamacpp-tools-gemma4.js +73 -0
- package/dist/examples/tools/llamacpp-tools-qwen35.d.ts +2 -0
- package/dist/examples/tools/llamacpp-tools-qwen35.js +69 -0
- package/dist/examples/transcription/parakeet-ctc-filesystem.js +18 -12
- package/dist/examples/transcription/parakeet-microphone-record.js +7 -12
- package/dist/examples/transcription/parakeet-microphone-stream.d.ts +2 -0
- package/dist/examples/transcription/parakeet-microphone-stream.js +79 -0
- package/dist/examples/transcription/parakeet-sortformer-streaming.d.ts +2 -0
- package/dist/examples/transcription/parakeet-sortformer-streaming.js +121 -0
- package/dist/examples/transcription/parakeet-sortformer.js +58 -55
- package/dist/examples/transcription/parakeet-tdt-filesystem.js +18 -15
- package/dist/examples/transcription/whispercpp-microphone-conversation.d.ts +2 -0
- package/dist/examples/transcription/whispercpp-microphone-conversation.js +107 -0
- package/dist/examples/tts/chatterbox.js +7 -16
- package/dist/examples/tts/llm-to-tts-streaming.js +3 -10
- package/dist/examples/tts/supertonic-multilingual.js +4 -12
- package/dist/examples/tts/supertonic.js +5 -12
- package/dist/examples/vla-smolvla.d.ts +2 -0
- package/dist/examples/vla-smolvla.js +75 -0
- package/dist/examples/voice-assistant/voice-assistant.js +3 -10
- package/dist/expo/plugins/find-in-ancestor-node-modules.d.ts +14 -0
- package/dist/expo/plugins/find-in-ancestor-node-modules.js +24 -0
- package/dist/expo/plugins/get-project-root.d.ts +22 -0
- package/dist/expo/plugins/get-project-root.js +23 -0
- package/dist/expo/plugins/index.d.ts +4 -0
- package/dist/expo/plugins/index.js +4 -0
- package/dist/expo/plugins/resolve-sdk-package-dir.d.ts +9 -2
- package/dist/expo/plugins/resolve-sdk-package-dir.js +38 -11
- package/dist/expo/plugins/withDeviceInfo.js +2 -1
- package/dist/expo/plugins/withMobileBundle.d.ts +5 -4
- package/dist/expo/plugins/withMobileBundle.js +42 -58
- package/dist/index.d.ts +6 -2
- package/dist/index.js +23 -2
- package/dist/models/registry/models.d.ts +3725 -514
- package/dist/models/registry/models.js +7269 -3910
- package/dist/models/update-models/naming.js +22 -8
- package/dist/pear/pre.d.ts +3 -0
- package/dist/pear/pre.js +9 -2
- package/dist/schemas/cancel.d.ts +172 -28
- package/dist/schemas/cancel.js +120 -19
- package/dist/schemas/classification.d.ts +53 -0
- package/dist/schemas/classification.js +33 -0
- package/dist/schemas/common.d.ts +860 -1379
- package/dist/schemas/common.js +8 -1
- package/dist/schemas/completion-event.d.ts +17 -0
- package/dist/schemas/completion-event.js +12 -1
- package/dist/schemas/completion-stream.d.ts +16 -1
- package/dist/schemas/completion-stream.js +25 -7
- package/dist/schemas/download-asset.d.ts +25 -9
- package/dist/schemas/download-asset.js +17 -6
- package/dist/schemas/embed.d.ts +1 -0
- package/dist/schemas/embed.js +5 -0
- package/dist/schemas/engine-addon-map.d.ts +3 -0
- package/dist/schemas/engine-addon-map.js +18 -5
- package/dist/schemas/error.d.ts +31 -0
- package/dist/schemas/error.js +29 -1
- package/dist/schemas/finetune.d.ts +2 -0
- package/dist/schemas/finetune.js +5 -0
- package/dist/schemas/get-model-info.d.ts +10 -6
- package/dist/schemas/get-model-info.js +2 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.js +3 -0
- package/dist/schemas/llamacpp-config.d.ts +64 -8
- package/dist/schemas/llamacpp-config.js +12 -0
- package/dist/schemas/load-model.d.ts +4644 -8605
- package/dist/schemas/load-model.js +90 -7
- package/dist/schemas/model-src-utils.d.ts +34 -14
- package/dist/schemas/model-types.d.ts +54 -14
- package/dist/schemas/model-types.js +28 -5
- package/dist/schemas/ocr.d.ts +8 -3
- package/dist/schemas/plugin.d.ts +60 -6
- package/dist/schemas/plugin.js +31 -5
- package/dist/schemas/rag.d.ts +9 -0
- package/dist/schemas/rag.js +17 -9
- package/dist/schemas/registry.d.ts +74 -30
- package/dist/schemas/registry.js +5 -0
- package/dist/schemas/reload-config.d.ts +34 -14
- package/dist/schemas/sdcpp-config.d.ts +445 -16
- package/dist/schemas/sdcpp-config.js +387 -26
- package/dist/schemas/sdk-config.d.ts +2431 -2723
- package/dist/schemas/sdk-config.js +16 -1
- package/dist/schemas/sdk-errors-client.d.ts +6 -0
- package/dist/schemas/sdk-errors-client.js +31 -1
- package/dist/schemas/sdk-errors-server.d.ts +8 -1
- package/dist/schemas/sdk-errors-server.js +45 -5
- package/dist/schemas/text-to-speech.d.ts +81 -698
- package/dist/schemas/text-to-speech.js +46 -19
- package/dist/schemas/transcription-config.d.ts +40 -229
- package/dist/schemas/transcription-config.js +76 -15
- package/dist/schemas/transcription.d.ts +108 -2
- package/dist/schemas/transcription.js +81 -0
- package/dist/schemas/translate.d.ts +2 -0
- package/dist/schemas/translate.js +13 -2
- package/dist/schemas/translation-config.d.ts +90 -40
- package/dist/schemas/unload-model.d.ts +2 -1
- package/dist/schemas/unload-model.js +4 -1
- package/dist/schemas/vla.d.ts +87 -0
- package/dist/schemas/vla.js +108 -0
- package/dist/scripts/run-unit-tests.js +22 -3
- package/dist/server/bare/ops/cancel.d.ts +27 -1
- package/dist/server/bare/ops/cancel.js +36 -10
- package/dist/server/bare/ops/embed.d.ts +3 -3
- package/dist/server/bare/ops/embed.js +144 -28
- package/dist/server/bare/ops/kv-cache-utils.d.ts +0 -7
- package/dist/server/bare/ops/kv-cache-utils.js +8 -47
- package/dist/server/bare/ops/transcribe.d.ts +11 -5
- package/dist/server/bare/ops/transcribe.js +230 -50
- package/dist/server/bare/ops/translate.d.ts +1 -1
- package/dist/server/bare/ops/translate.js +197 -88
- package/dist/server/bare/plugins/ggml-classification/ops/classify.d.ts +6 -0
- package/dist/server/bare/plugins/ggml-classification/ops/classify.js +30 -0
- package/dist/server/bare/plugins/ggml-classification/plugin.d.ts +32 -0
- package/dist/server/bare/plugins/ggml-classification/plugin.js +55 -0
- package/dist/server/bare/plugins/ggml-vla/ops/vla-hparams.d.ts +3 -0
- package/dist/server/bare/plugins/ggml-vla/ops/vla-hparams.js +12 -0
- package/dist/server/bare/plugins/ggml-vla/ops/vla-run.d.ts +3 -0
- package/dist/server/bare/plugins/ggml-vla/ops/vla-run.js +75 -0
- package/dist/server/bare/plugins/ggml-vla/plugin.d.ts +54 -0
- package/dist/server/bare/plugins/ggml-vla/plugin.js +57 -0
- package/dist/server/bare/plugins/index.d.ts +3 -1
- package/dist/server/bare/plugins/index.js +3 -1
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +12 -3
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +173 -172
- package/dist/server/bare/plugins/llamacpp-completion/ops/context-overflow.d.ts +29 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/context-overflow.js +65 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/finetune.js +125 -21
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-session.d.ts +154 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-session.js +448 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.d.ts +21 -73
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.js +18 -101
- package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +36 -3
- package/dist/server/bare/plugins/llamacpp-completion/plugin.js +183 -85
- package/dist/server/bare/plugins/llamacpp-completion/transform.d.ts +10 -0
- package/dist/server/bare/plugins/llamacpp-completion/transform.js +34 -0
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +7 -0
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +10 -1
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +42 -15
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +5 -1
- package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +8 -3
- package/dist/server/bare/plugins/onnx-ocr/plugin.js +3 -0
- package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +73 -244
- package/dist/server/bare/plugins/parakeet-transcription/plugin.js +68 -96
- package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.js +8 -0
- package/dist/server/bare/plugins/sdcpp-generation/ops/upscale.d.ts +3 -0
- package/dist/server/bare/plugins/sdcpp-generation/ops/upscale.js +40 -0
- package/dist/server/bare/plugins/sdcpp-generation/ops/video.d.ts +3 -0
- package/dist/server/bare/plugins/sdcpp-generation/ops/video.js +199 -0
- package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +288 -15
- package/dist/server/bare/plugins/sdcpp-generation/plugin.js +150 -7
- package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech-stream.js +2 -15
- package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech.js +2 -1
- package/dist/server/bare/plugins/tts-ggml/plugin.d.ts +75 -0
- package/dist/server/bare/plugins/tts-ggml/plugin.js +189 -0
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +47 -3
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +61 -14
- package/dist/server/bare/rag-hyperdb/index.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/index.js +1 -1
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +26 -4
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +65 -28
- package/dist/server/bare/registry/model-config-utils.js +7 -0
- package/dist/server/bare/runtime/disposable-scope.d.ts +36 -0
- package/dist/server/bare/runtime/disposable-scope.js +69 -0
- package/dist/server/bare/runtime/index.d.ts +8 -0
- package/dist/server/bare/runtime/index.js +3 -0
- package/dist/server/bare/runtime/request-context.d.ts +49 -0
- package/dist/server/bare/runtime/request-context.js +1 -0
- package/dist/server/bare/runtime/request-id.d.ts +12 -0
- package/dist/server/bare/runtime/request-id.js +14 -0
- package/dist/server/bare/runtime/request-registry-singleton.d.ts +4 -0
- package/dist/server/bare/runtime/request-registry-singleton.js +27 -0
- package/dist/server/bare/runtime/request-registry.d.ts +136 -0
- package/dist/server/bare/runtime/request-registry.js +297 -0
- package/dist/server/bare/runtime/with-request-context.d.ts +22 -0
- package/dist/server/bare/runtime/with-request-context.js +53 -0
- package/dist/server/bare/runtime-lifecycle.js +9 -9
- package/dist/server/bare/types/addon-responses.d.ts +12 -1
- package/dist/server/env.js +4 -1
- package/dist/server/plugins/index.d.ts +1 -1
- package/dist/server/plugins/index.js +1 -1
- package/dist/server/plugins/registry.d.ts +1 -0
- package/dist/server/plugins/registry.js +5 -0
- package/dist/server/rpc/handler-registry.js +30 -7
- package/dist/server/rpc/handler-selection.d.ts +9 -0
- package/dist/server/rpc/handler-selection.js +14 -0
- package/dist/server/rpc/handler-utils.js +5 -13
- package/dist/server/rpc/handlers/cancel-delegated.js +28 -31
- package/dist/server/rpc/handlers/cancelHandler.d.ts +30 -1
- package/dist/server/rpc/handlers/cancelHandler.js +54 -22
- package/dist/server/rpc/handlers/classify.d.ts +3 -0
- package/dist/server/rpc/handlers/classify.js +4 -0
- package/dist/server/rpc/handlers/delete-cache.d.ts +9 -0
- package/dist/server/rpc/handlers/delete-cache.js +13 -15
- package/dist/server/rpc/handlers/download-asset.js +133 -40
- package/dist/server/rpc/handlers/index.d.ts +4 -0
- package/dist/server/rpc/handlers/index.js +4 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +60 -2
- package/dist/server/rpc/handlers/load-model/download-manager.js +141 -8
- package/dist/server/rpc/handlers/load-model/handler.js +216 -98
- package/dist/server/rpc/handlers/load-model/http.js +3 -3
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +1 -1
- package/dist/server/rpc/handlers/load-model/registry.js +1 -1
- package/dist/server/rpc/handlers/load-model/resolve-session.d.ts +20 -1
- package/dist/server/rpc/handlers/load-model/resolve-session.js +6 -5
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +3 -2
- package/dist/server/rpc/handlers/load-model/resolve.js +18 -6
- package/dist/server/rpc/handlers/load-model/types.d.ts +24 -0
- package/dist/server/rpc/handlers/rag.js +133 -15
- package/dist/server/rpc/handlers/upscale-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/upscale-stream.js +4 -0
- package/dist/server/rpc/handlers/video-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/video-stream.js +4 -0
- package/dist/server/rpc/profiling/operation-metrics.js +23 -0
- package/dist/server/utils/completion-normalizer.js +8 -0
- package/dist/server/utils/config-transform.js +1 -1
- package/dist/server/utils/tools/dialect.js +4 -0
- package/dist/server/utils/tools/parser.js +16 -1
- package/dist/server/utils/tools/parsers/gemma4native.d.ts +4 -0
- package/dist/server/utils/tools/parsers/gemma4native.js +60 -0
- package/dist/server/utils/tools/parsers/qwen35.d.ts +4 -0
- package/dist/server/utils/tools/parsers/qwen35.js +120 -0
- package/dist/server/worker.js +14 -11
- package/dist/utils/aggregate-events.d.ts +9 -0
- package/dist/utils/aggregate-events.js +18 -3
- package/dist/utils/decorate-promise.d.ts +34 -0
- package/dist/utils/decorate-promise.js +35 -0
- package/dist/utils/errors-client.d.ts +18 -0
- package/dist/utils/errors-client.js +31 -0
- package/dist/utils/errors-server.d.ts +115 -2
- package/dist/utils/errors-server.js +148 -3
- package/package.json +68 -77
- package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +0 -490
- package/dist/server/bare/plugins/onnx-tts/plugin.js +0 -266
- package/dist/server/bare/plugins/onnx-tts/wav-helper.d.ts +0 -14
- package/dist/server/bare/plugins/onnx-tts/wav-helper.js +0 -107
- /package/dist/server/bare/plugins/{onnx-tts → tts-ggml}/ops/text-to-speech-stream.d.ts +0 -0
- /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
|
-
}
|
|
File without changes
|
|
File without changes
|