@qvac/sdk 0.15.0 → 0.17.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 +87 -84
- package/README.md +65 -0
- package/dist/client/api/audio-gen-result.d.ts +4 -0
- package/dist/client/api/audio-gen-result.js +132 -0
- package/dist/client/api/audio-gen.d.ts +29 -0
- package/dist/client/api/audio-gen.js +31 -0
- package/dist/client/api/batch-completion.d.ts +2 -2
- package/dist/client/api/batch-completion.js +2 -2
- package/dist/client/api/bci-transcribe.d.ts +1 -1
- package/dist/client/api/bci-transcribe.js +3 -3
- package/dist/client/api/cancel.d.ts +1 -1
- package/dist/client/api/cancel.js +1 -1
- package/dist/client/api/classify.d.ts +1 -1
- package/dist/client/api/classify.js +1 -1
- package/dist/client/api/completion-stream.d.ts +3 -3
- package/dist/client/api/completion-stream.js +3 -3
- package/dist/client/api/delete-cache.js +1 -1
- package/dist/client/api/diffusion.d.ts +1 -1
- package/dist/client/api/diffusion.js +1 -1
- package/dist/client/api/download-asset.d.ts +1 -1
- package/dist/client/api/download-asset.js +3 -3
- package/dist/client/api/embed.d.ts +1 -1
- package/dist/client/api/embed.js +2 -2
- package/dist/client/api/finetune.d.ts +1 -1
- package/dist/client/api/finetune.js +2 -2
- package/dist/client/api/get-loaded-model-info.d.ts +2 -2
- package/dist/client/api/get-loaded-model-info.js +1 -1
- package/dist/client/api/get-model-info.d.ts +2 -2
- package/dist/client/api/get-model-info.js +1 -1
- package/dist/client/api/get-system-resources.d.ts +3 -0
- package/dist/client/api/get-system-resources.js +16 -0
- package/dist/client/api/heartbeat.d.ts +2 -2
- package/dist/client/api/heartbeat.js +1 -1
- package/dist/client/api/index.d.ts +35 -33
- package/dist/client/api/index.js +2 -0
- package/dist/client/api/invoke-plugin.d.ts +1 -1
- package/dist/client/api/invoke-plugin.js +1 -1
- package/dist/client/api/load-model.d.ts +2 -2
- package/dist/client/api/load-model.js +4 -4
- package/dist/client/api/logging-stream.d.ts +1 -1
- package/dist/client/api/logging-stream.js +1 -1
- package/dist/client/api/ocr.d.ts +10 -1
- package/dist/client/api/ocr.js +10 -1
- package/dist/client/api/provide.d.ts +1 -1
- package/dist/client/api/provide.js +1 -1
- package/dist/client/api/rag.d.ts +1 -1
- package/dist/client/api/rag.js +2 -2
- package/dist/client/api/registry.d.ts +1 -1
- package/dist/client/api/registry.js +1 -1
- package/dist/client/api/resume.js +1 -1
- package/dist/client/api/state.d.ts +1 -1
- package/dist/client/api/state.js +1 -1
- package/dist/client/api/stop-provider.js +1 -1
- package/dist/client/api/subscribe-logs.d.ts +1 -1
- package/dist/client/api/suspend.js +1 -1
- package/dist/client/api/text-to-speech.d.ts +3 -2
- package/dist/client/api/text-to-speech.js +31 -9
- package/dist/client/api/transcribe.d.ts +1 -1
- package/dist/client/api/transcribe.js +2 -2
- package/dist/client/api/translate.d.ts +1 -1
- package/dist/client/api/translate.js +7 -18
- package/dist/client/api/unload-model.d.ts +1 -1
- package/dist/client/api/unload-model.js +2 -2
- package/dist/client/api/upscale.d.ts +1 -1
- package/dist/client/api/upscale.js +1 -1
- package/dist/client/api/video.d.ts +8 -5
- package/dist/client/api/video.js +9 -6
- package/dist/client/api/vla.d.ts +15 -11
- package/dist/client/api/vla.js +14 -10
- package/dist/client/config-loader/config-utils.d.ts +1 -1
- package/dist/client/config-loader/resolve-config.bare.d.ts +1 -1
- package/dist/client/config-loader/resolve-config.expo.d.ts +1 -1
- package/dist/client/config-loader/resolve-config.node.d.ts +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/init-hooks.d.ts +1 -1
- package/dist/client/logging-stream-registry.d.ts +1 -1
- package/dist/client/plugins-factory.d.ts +2 -2
- package/dist/client/plugins-factory.js +1 -1
- package/dist/client/rpc/bare-client.d.ts +1 -1
- package/dist/client/rpc/bare-client.js +3 -3
- package/dist/client/rpc/expo-rpc-client.js +3 -3
- package/dist/client/rpc/node-rpc-client.js +2 -2
- package/dist/client/rpc/profiling/index.d.ts +1 -1
- package/dist/client/rpc/profiling/profiler.d.ts +2 -2
- package/dist/client/rpc/profiling/profiler.js +4 -0
- package/dist/client/rpc/rpc-client.d.ts +1 -1
- package/dist/client/rpc/rpc-client.js +7 -4
- package/dist/client/rpc/rpc-error.d.ts +1 -1
- package/dist/client/rpc/rpc-error.js +7 -1
- package/dist/commands/bundle/bare-pack.d.ts +1 -1
- package/dist/commands/bundle/constants.js +1 -0
- package/dist/commands/bundle/entry-gen.js +1 -1
- package/dist/commands/bundle/index.js +6 -6
- package/dist/commands/bundle/manifest.d.ts +1 -1
- package/dist/commands/bundle/plugins.d.ts +2 -2
- package/dist/commands/bundle/plugins.js +1 -1
- package/dist/commands/index.d.ts +4 -4
- package/dist/commands/index.js +2 -2
- package/dist/commands/verify/abi.d.ts +1 -1
- package/dist/commands/verify/abi.js +1 -1
- package/dist/commands/verify/bundle-source.d.ts +1 -1
- package/dist/commands/verify/bundle-source.js +2 -2
- package/dist/commands/verify/index.d.ts +3 -3
- package/dist/commands/verify/index.js +5 -5
- package/dist/commands/verify/node-modules-source.d.ts +1 -1
- package/dist/commands/verify/node-modules-source.js +1 -1
- package/dist/commands/verify/prebuilds.d.ts +2 -1
- package/dist/commands/verify/prebuilds.js +8 -11
- package/dist/commands/verify/resource-collectors.d.ts +88 -0
- package/dist/commands/verify/resource-collectors.js +261 -0
- package/dist/constants/audio.js +1 -1
- package/dist/constants/index.d.ts +2 -2
- package/dist/examples/{transcription → asr}/parakeet-ctc-filesystem.js +2 -3
- package/dist/examples/{transcription → asr}/parakeet-microphone-record.js +2 -2
- package/dist/examples/{transcription → asr}/parakeet-microphone-stream.js +2 -2
- package/dist/examples/{transcription → asr}/parakeet-sortformer-streaming.js +2 -2
- package/dist/examples/{transcription → asr}/parakeet-sortformer.js +1 -1
- package/dist/examples/asr/parakeet-tdt-filesystem-chunked.d.ts +2 -0
- package/dist/examples/asr/parakeet-tdt-filesystem-chunked.js +203 -0
- package/dist/examples/{transcription → asr}/parakeet-tdt-filesystem.js +2 -2
- package/dist/examples/{transcription → asr}/whispercpp-filesystem-streaming.js +1 -1
- package/dist/examples/{transcription → asr}/whispercpp-filesystem.js +1 -1
- package/dist/examples/{transcription → asr}/whispercpp-microphone-conversation.js +1 -1
- package/dist/examples/{transcription → asr}/whispercpp-microphone-record.js +2 -2
- package/dist/examples/{transcription → asr}/whispercpp-prompt.js +1 -1
- package/dist/examples/audiogen/generate-music.d.ts +2 -0
- package/dist/examples/audiogen/generate-music.js +112 -0
- package/dist/examples/cache-management.js +1 -1
- package/dist/examples/config-reload.js +1 -1
- package/dist/examples/diffusion-ideogram.d.ts +2 -0
- package/dist/examples/diffusion-ideogram.js +108 -0
- package/dist/examples/diffusion-img2vid-ltx.d.ts +2 -0
- package/dist/examples/diffusion-img2vid-ltx.js +98 -0
- package/dist/examples/diffusion-txt2vid-ltx.d.ts +2 -0
- package/dist/examples/diffusion-txt2vid-ltx.js +92 -0
- package/dist/examples/diffusion-txt2vid-wan22.d.ts +2 -0
- package/dist/examples/diffusion-txt2vid-wan22.js +96 -0
- package/dist/examples/logging-streaming.js +5 -1
- package/dist/examples/quickstart.bare.js +1 -1
- package/dist/examples/rag/rag-mongodb.d.ts +2 -0
- package/dist/examples/rag/rag-mongodb.js +180 -0
- package/dist/examples/tools/llamacpp-tools-auto-dialect.d.ts +2 -0
- package/dist/examples/tools/llamacpp-tools-auto-dialect.js +77 -0
- package/dist/examples/tts/parler.d.ts +2 -0
- package/dist/examples/tts/parler.js +51 -0
- package/dist/examples/vla-groot.d.ts +2 -0
- package/dist/examples/vla-groot.js +120 -0
- package/dist/examples/voice-assistant/voice-assistant.js +2 -2
- package/dist/expo/plugins/index.d.ts +11 -11
- package/dist/expo/plugins/withDeviceInfo.js +2 -2
- package/dist/expo/plugins/withMobileBundle.js +3 -3
- package/dist/index.d.ts +16 -16
- package/dist/index.js +4 -4
- package/dist/logging/addon.d.ts +1 -1
- package/dist/logging/base-logger.d.ts +1 -1
- package/dist/logging/base-logger.js +1 -1
- package/dist/logging/client-logger.d.ts +1 -1
- package/dist/logging/index.d.ts +9 -9
- package/dist/logging/logger.d.ts +1 -1
- package/dist/logging/namespaces.d.ts +1 -1
- package/dist/logging/registry.d.ts +1 -1
- package/dist/logging/server-logger.d.ts +1 -1
- package/dist/logging/stream-logger.d.ts +1 -1
- package/dist/logging/transport.d.ts +1 -1
- package/dist/logging/utils.d.ts +1 -1
- package/dist/logging/utils.js +1 -1
- package/dist/models/registry/index.d.ts +1 -1
- package/dist/models/registry/models.d.ts +6443 -9832
- package/dist/models/registry/models.js +4076 -7658
- package/dist/models/update-models/codegen.d.ts +1 -1
- package/dist/models/update-models/companions.d.ts +1 -1
- package/dist/models/update-models/history.d.ts +1 -1
- package/dist/models/update-models/history.js +4 -4
- package/dist/models/update-models/naming.d.ts +1 -1
- package/dist/models/update-models/naming.js +12 -2
- package/dist/models/update-models/processing.d.ts +1 -1
- package/dist/models/update-models/processing.js +1 -1
- package/dist/models/update-models/registry.d.ts +2 -2
- package/dist/models/update-models/shards.d.ts +1 -1
- package/dist/models/update-models/types.d.ts +1 -1
- package/dist/pear/pre.js +2 -0
- package/dist/profiling/aggregator.d.ts +1 -1
- package/dist/profiling/backend-diagnostics.d.ts +8 -0
- package/dist/profiling/backend-diagnostics.js +21 -0
- package/dist/profiling/controller.d.ts +4 -2
- package/dist/profiling/controller.js +8 -0
- package/dist/profiling/envelope.d.ts +3 -2
- package/dist/profiling/envelope.js +13 -2
- package/dist/profiling/events.d.ts +2 -2
- package/dist/profiling/exporters.d.ts +1 -1
- package/dist/profiling/index.d.ts +9 -8
- package/dist/profiling/index.js +3 -2
- package/dist/profiling/types.d.ts +6 -0
- package/dist/schemas/audio-gen.d.ts +253 -0
- package/dist/schemas/audio-gen.js +69 -0
- package/dist/schemas/batch-completion-stream.d.ts +11 -6
- package/dist/schemas/bci-config.d.ts +2 -0
- package/dist/schemas/bci.d.ts +1 -1
- package/dist/schemas/cancel.d.ts +5 -0
- package/dist/schemas/cancel.js +1 -0
- package/dist/schemas/common.d.ts +1938 -58
- package/dist/schemas/common.js +9 -1
- package/dist/schemas/completion-event.d.ts +5 -2
- package/dist/schemas/completion-event.js +3 -0
- package/dist/schemas/completion-stream.d.ts +195 -3
- package/dist/schemas/completion-stream.js +72 -2
- package/dist/schemas/constants-registry.d.ts +69 -0
- package/dist/schemas/constants-registry.js +52 -0
- package/dist/schemas/delete-cache.js +7 -3
- package/dist/schemas/download-asset.d.ts +8 -4
- package/dist/schemas/engine-addon-map.d.ts +3 -1
- package/dist/schemas/engine-addon-map.js +6 -2
- package/dist/schemas/finetune.js +6 -3
- package/dist/schemas/get-loaded-model-info.d.ts +18 -0
- package/dist/schemas/get-loaded-model-info.js +14 -6
- package/dist/schemas/get-model-info.d.ts +2 -0
- package/dist/schemas/get-model-info.js +1 -0
- package/dist/schemas/index.d.ts +53 -51
- package/dist/schemas/index.js +4 -2
- package/dist/schemas/llamacpp-config.d.ts +30 -6
- package/dist/schemas/llamacpp-config.js +1 -6
- package/dist/schemas/load-model.d.ts +7654 -2919
- package/dist/schemas/load-model.js +45 -6
- package/dist/schemas/mcp-adapter.d.ts +1 -1
- package/dist/schemas/model-src-utils.d.ts +10 -2
- package/dist/schemas/model-types.d.ts +19 -1
- package/dist/schemas/model-types.js +11 -0
- package/dist/schemas/ocr.d.ts +2 -0
- package/dist/schemas/plugin.d.ts +17 -8
- package/dist/schemas/plugin.js +16 -6
- package/dist/schemas/profiling.d.ts +587 -0
- package/dist/schemas/profiling.js +22 -0
- package/dist/schemas/registry.d.ts +18 -0
- package/dist/schemas/registry.js +2 -0
- package/dist/schemas/reload-config.d.ts +10 -2
- package/dist/schemas/reload-config.js +3 -1
- package/dist/schemas/sdcpp-config.d.ts +296 -0
- package/dist/schemas/sdcpp-config.js +165 -17
- package/dist/schemas/sdk-config.d.ts +958 -40
- package/dist/schemas/sdk-errors-server.js +3 -1
- package/dist/schemas/system-resources.d.ts +3967 -0
- package/dist/schemas/system-resources.js +149 -0
- package/dist/schemas/text-to-speech.d.ts +340 -6
- package/dist/schemas/text-to-speech.js +136 -17
- package/dist/schemas/tools.d.ts +1 -1
- package/dist/schemas/tools.js +2 -1
- package/dist/schemas/transcription-config.d.ts +2 -0
- package/dist/schemas/translate.d.ts +2 -2
- package/dist/schemas/translate.js +12 -6
- package/dist/schemas/translation-config.d.ts +30 -10
- package/dist/schemas/vla.d.ts +10 -0
- package/dist/schemas/vla.js +31 -11
- package/dist/scripts/check-resource-collectors-packaging.d.ts +33 -0
- package/dist/scripts/check-resource-collectors-packaging.js +136 -0
- package/dist/scripts/contract/build-contract.d.ts +38 -0
- package/dist/scripts/contract/build-contract.js +620 -0
- package/dist/scripts/contract/build-error-codes.d.ts +17 -0
- package/dist/scripts/contract/build-error-codes.js +17 -0
- package/dist/scripts/contract/build-model-type-maps.d.ts +22 -0
- package/dist/scripts/contract/build-model-type-maps.js +16 -0
- package/dist/scripts/contract/build-models-registry.d.ts +17 -0
- package/dist/scripts/contract/build-models-registry.js +31 -0
- package/dist/scripts/contract/plugin-contract.d.ts +23 -0
- package/dist/scripts/contract/plugin-contract.js +28 -0
- package/dist/scripts/export-contract.d.ts +2 -0
- package/dist/scripts/export-contract.js +27 -0
- package/dist/scripts/export-plugin-contract.d.ts +2 -0
- package/dist/scripts/export-plugin-contract.js +18 -0
- package/dist/server/bare/delegate-rpc-client.d.ts +1 -1
- package/dist/server/bare/delegate-rpc-client.js +3 -3
- package/dist/server/bare/hyperswarm.d.ts +1 -1
- package/dist/server/bare/hyperswarm.js +2 -2
- package/dist/server/bare/ops/bci-transcribe.d.ts +1 -1
- package/dist/server/bare/ops/bci-transcribe.js +4 -4
- package/dist/server/bare/ops/cancel.d.ts +2 -2
- package/dist/server/bare/ops/cancel.js +2 -2
- package/dist/server/bare/ops/embed.d.ts +1 -1
- package/dist/server/bare/ops/embed.js +3 -3
- package/dist/server/bare/ops/kv-cache-retention.d.ts +12 -0
- package/dist/server/bare/ops/kv-cache-retention.js +121 -0
- package/dist/server/bare/ops/kv-cache-utils.d.ts +2 -1
- package/dist/server/bare/ops/kv-cache-utils.js +26 -5
- package/dist/server/bare/ops/load-model.d.ts +2 -2
- package/dist/server/bare/ops/load-model.js +7 -5
- package/dist/server/bare/ops/transcribe.d.ts +2 -2
- package/dist/server/bare/ops/transcribe.js +20 -40
- package/dist/server/bare/ops/translate.d.ts +1 -1
- package/dist/server/bare/ops/translate.js +21 -12
- package/dist/server/bare/ops/unload-model.d.ts +1 -1
- package/dist/server/bare/ops/unload-model.js +5 -5
- package/dist/server/bare/plugins/asr-ggml/config.d.ts +32 -0
- package/dist/server/bare/plugins/asr-ggml/config.js +46 -0
- package/dist/server/bare/plugins/asr-ggml/logging.d.ts +11 -0
- package/dist/server/bare/plugins/asr-ggml/logging.js +12 -0
- package/dist/server/bare/plugins/audiogen-ggml/config.d.ts +18 -0
- package/dist/server/bare/plugins/audiogen-ggml/config.js +23 -0
- package/dist/server/bare/plugins/audiogen-ggml/ops/audio-gen-stream.d.ts +3 -0
- package/dist/server/bare/plugins/audiogen-ggml/ops/audio-gen-stream.js +162 -0
- package/dist/server/bare/plugins/audiogen-ggml/plugin.d.ts +213 -0
- package/dist/server/bare/plugins/audiogen-ggml/plugin.js +58 -0
- package/dist/server/bare/plugins/bci-whispercpp-transcription/plugin.d.ts +8 -5
- package/dist/server/bare/plugins/bci-whispercpp-transcription/plugin.js +4 -4
- package/dist/server/bare/plugins/bci-whispercpp-transcription/resolve-config.d.ts +1 -1
- package/dist/server/bare/plugins/ggml-classification/ops/classify.d.ts +1 -1
- package/dist/server/bare/plugins/ggml-classification/ops/classify.js +1 -1
- package/dist/server/bare/plugins/ggml-classification/plugin.d.ts +2 -2
- package/dist/server/bare/plugins/ggml-classification/plugin.js +1 -1
- package/dist/server/bare/plugins/ggml-ocr/ops/ocr-stream.d.ts +1 -1
- package/dist/server/bare/plugins/ggml-ocr/ops/ocr-stream.js +2 -2
- package/dist/server/bare/plugins/ggml-ocr/plugin.d.ts +4 -2
- package/dist/server/bare/plugins/ggml-ocr/plugin.js +4 -25
- package/dist/server/bare/plugins/ggml-ocr/resolve-config.d.ts +6 -0
- package/dist/server/bare/plugins/ggml-ocr/resolve-config.js +73 -0
- package/dist/server/bare/plugins/ggml-vla/ops/vla-hparams.d.ts +1 -1
- package/dist/server/bare/plugins/ggml-vla/ops/vla-hparams.js +1 -1
- package/dist/server/bare/plugins/ggml-vla/ops/vla-run.d.ts +1 -1
- package/dist/server/bare/plugins/ggml-vla/ops/vla-run.js +1 -1
- package/dist/server/bare/plugins/ggml-vla/plugin.d.ts +8 -3
- package/dist/server/bare/plugins/ggml-vla/plugin.js +1 -1
- package/dist/server/bare/plugins/index.d.ts +12 -11
- package/dist/server/bare/plugins/index.js +1 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/batch-completion-stream.d.ts +3 -3
- package/dist/server/bare/plugins/llamacpp-completion/ops/batch-completion-stream.js +5 -5
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stats.d.ts +11 -1
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stats.js +16 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +3 -3
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +26 -35
- package/dist/server/bare/plugins/llamacpp-completion/ops/finetune.d.ts +1 -1
- package/dist/server/bare/plugins/llamacpp-completion/ops/finetune.js +3 -3
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-session.d.ts +20 -10
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-session.js +217 -80
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.d.ts +8 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.js +8 -0
- package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +20 -8
- package/dist/server/bare/plugins/llamacpp-completion/plugin.js +16 -16
- package/dist/server/bare/plugins/llamacpp-completion/transform.d.ts +1 -1
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +8 -3
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +5 -5
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +12 -2
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +3 -3
- package/dist/server/bare/plugins/nmtcpp-translation/resolve-vocab.d.ts +1 -1
- package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +6 -6
- package/dist/server/bare/plugins/parakeet-transcription/plugin.js +13 -20
- package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.d.ts +1 -1
- package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.js +1 -1
- package/dist/server/bare/plugins/sdcpp-generation/ops/upscale.d.ts +1 -1
- package/dist/server/bare/plugins/sdcpp-generation/ops/upscale.js +1 -1
- package/dist/server/bare/plugins/sdcpp-generation/ops/video.d.ts +4 -1
- package/dist/server/bare/plugins/sdcpp-generation/ops/video.js +40 -5
- package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +155 -5
- package/dist/server/bare/plugins/sdcpp-generation/plugin.js +109 -23
- package/dist/server/bare/plugins/tts-ggml/ops/parler-options.d.ts +7 -0
- package/dist/server/bare/plugins/tts-ggml/ops/parler-options.js +30 -0
- package/dist/server/bare/plugins/tts-ggml/ops/text-to-speech-stream.d.ts +2 -2
- package/dist/server/bare/plugins/tts-ggml/ops/text-to-speech-stream.js +8 -5
- package/dist/server/bare/plugins/tts-ggml/ops/text-to-speech.d.ts +2 -2
- package/dist/server/bare/plugins/tts-ggml/ops/text-to-speech.js +16 -22
- package/dist/server/bare/plugins/tts-ggml/plugin.d.ts +120 -5
- package/dist/server/bare/plugins/tts-ggml/plugin.js +63 -5
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +8 -6
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +17 -25
- package/dist/server/bare/rag-hyperdb/handlers/chunk.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/close-workspace.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/close-workspace.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/ingest.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/ingest.js +2 -2
- package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/reindex.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/reindex.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/search.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/search.js +2 -2
- package/dist/server/bare/rag-hyperdb/index.d.ts +11 -11
- package/dist/server/bare/rag-hyperdb/index.js +11 -11
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +1 -1
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +4 -4
- package/dist/server/bare/registry/config-registry.d.ts +1 -1
- package/dist/server/bare/registry/config-registry.js +1 -1
- package/dist/server/bare/registry/model-config-registry.d.ts +2 -2
- package/dist/server/bare/registry/model-config-registry.js +4 -4
- package/dist/server/bare/registry/model-config-utils.d.ts +1 -1
- package/dist/server/bare/registry/model-config-utils.js +3 -0
- package/dist/server/bare/registry/model-registry.d.ts +15 -4
- package/dist/server/bare/registry/registry-client.js +2 -2
- package/dist/server/bare/registry/runtime-context-registry.d.ts +1 -1
- package/dist/server/bare/resources/collector.d.ts +644 -0
- package/dist/server/bare/resources/collector.js +226 -0
- package/dist/server/bare/resources/native.d.ts +3 -0
- package/dist/server/bare/resources/native.js +35 -0
- package/dist/server/bare/resources/normalize.d.ts +13 -0
- package/dist/server/bare/resources/normalize.js +73 -0
- package/dist/server/bare/resources/types.d.ts +66 -0
- package/dist/server/bare/resources/types.js +1 -0
- package/dist/server/bare/resources/worker-collector.d.ts +5 -0
- package/dist/server/bare/resources/worker-collector.js +15 -0
- package/dist/server/bare/runtime/index.d.ts +7 -7
- package/dist/server/bare/runtime/index.js +3 -3
- package/dist/server/bare/runtime/request-context.d.ts +2 -2
- package/dist/server/bare/runtime/request-registry-singleton.d.ts +1 -1
- package/dist/server/bare/runtime/request-registry-singleton.js +11 -1
- package/dist/server/bare/runtime/request-registry.d.ts +2 -2
- package/dist/server/bare/runtime/request-registry.js +1 -1
- package/dist/server/bare/runtime/with-request-context.d.ts +1 -1
- package/dist/server/bare/runtime-lifecycle.d.ts +1 -1
- package/dist/server/bare/types/addon-responses.d.ts +8 -34
- package/dist/server/bare/utils/asr-events.d.ts +15 -0
- package/dist/server/bare/utils/asr-events.js +30 -0
- package/dist/server/bare/utils/audio-input.d.ts +1 -1
- package/dist/server/bare/utils/audio-input.js +1 -1
- package/dist/server/bare/utils/transcribe-metadata.d.ts +1 -1
- package/dist/server/bare/utils/tts-stats.d.ts +9 -5
- package/dist/server/bare/utils/tts-stats.js +6 -0
- package/dist/server/error-handlers.d.ts +1 -1
- package/dist/server/plugins/index.d.ts +1 -1
- package/dist/server/plugins/registry.d.ts +1 -1
- package/dist/server/plugins/registry.js +35 -8
- package/dist/server/rpc/create-server.js +23 -1
- package/dist/server/rpc/delegate-transport.d.ts +2 -2
- package/dist/server/rpc/delegate-transport.js +5 -10
- package/dist/server/rpc/handle-request.js +3 -3
- package/dist/server/rpc/handler-registry.d.ts +1 -1
- package/dist/server/rpc/handler-registry.js +45 -36
- package/dist/server/rpc/handler-selection.d.ts +2 -2
- package/dist/server/rpc/handler-utils.d.ts +2 -2
- package/dist/server/rpc/handler-utils.js +5 -5
- package/dist/server/rpc/handlers/audio-gen-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/audio-gen-stream.js +4 -0
- package/dist/server/rpc/handlers/batch-completion-stream.d.ts +3 -1
- package/dist/server/rpc/handlers/batch-completion-stream.js +1 -1
- package/dist/server/rpc/handlers/bci-transcribe-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/bci-transcribe-stream.js +1 -1
- package/dist/server/rpc/handlers/bci-transcribe.d.ts +1 -1
- package/dist/server/rpc/handlers/bci-transcribe.js +1 -1
- package/dist/server/rpc/handlers/cancel-delegated.d.ts +2 -2
- package/dist/server/rpc/handlers/cancel-delegated.js +3 -3
- package/dist/server/rpc/handlers/cancelHandler.d.ts +1 -1
- package/dist/server/rpc/handlers/cancelHandler.js +3 -3
- package/dist/server/rpc/handlers/classify.d.ts +1 -1
- package/dist/server/rpc/handlers/classify.js +1 -1
- package/dist/server/rpc/handlers/completion-orchestrate.d.ts +42 -0
- package/dist/server/rpc/handlers/completion-orchestrate.js +190 -0
- package/dist/server/rpc/handlers/completion-stream-delegated.d.ts +2 -2
- package/dist/server/rpc/handlers/completion-stream-delegated.js +3 -3
- package/dist/server/rpc/handlers/completion-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/completion-stream.js +1 -1
- package/dist/server/rpc/handlers/delete-cache.d.ts +1 -1
- package/dist/server/rpc/handlers/delete-cache.js +1 -1
- package/dist/server/rpc/handlers/diffusion-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/diffusion-stream.js +1 -1
- package/dist/server/rpc/handlers/download-asset.d.ts +1 -1
- package/dist/server/rpc/handlers/download-asset.js +4 -4
- package/dist/server/rpc/handlers/embed.d.ts +1 -1
- package/dist/server/rpc/handlers/embed.js +1 -1
- package/dist/server/rpc/handlers/finetune.d.ts +1 -1
- package/dist/server/rpc/handlers/finetune.js +2 -2
- package/dist/server/rpc/handlers/get-loaded-model-info.d.ts +1 -1
- package/dist/server/rpc/handlers/get-loaded-model-info.js +10 -4
- package/dist/server/rpc/handlers/get-model-info.d.ts +1 -1
- package/dist/server/rpc/handlers/get-model-info.js +4 -4
- package/dist/server/rpc/handlers/get-system-resources.d.ts +3 -0
- package/dist/server/rpc/handlers/get-system-resources.js +53 -0
- package/dist/server/rpc/handlers/heartbeat-delegated.d.ts +2 -2
- package/dist/server/rpc/handlers/heartbeat-delegated.js +2 -2
- package/dist/server/rpc/handlers/heartbeat.d.ts +1 -1
- package/dist/server/rpc/handlers/index.d.ts +38 -32
- package/dist/server/rpc/handlers/index.js +6 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +3 -3
- package/dist/server/rpc/handlers/load-model/download-manager.js +1 -1
- package/dist/server/rpc/handlers/load-model/download-stats.d.ts +3 -3
- package/dist/server/rpc/handlers/load-model/handler.d.ts +1 -1
- package/dist/server/rpc/handlers/load-model/handler.js +12 -8
- package/dist/server/rpc/handlers/load-model/http.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/http.js +4 -4
- package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +5 -5
- package/dist/server/rpc/handlers/load-model/index.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/registry-client-options.d.ts +1 -1
- package/dist/server/rpc/handlers/load-model/registry-companion-set.d.ts +3 -3
- package/dist/server/rpc/handlers/load-model/registry-companion-set.js +3 -3
- package/dist/server/rpc/handlers/load-model/registry-download-utils.d.ts +4 -4
- package/dist/server/rpc/handlers/load-model/registry-download-utils.js +3 -3
- package/dist/server/rpc/handlers/load-model/registry-metadata.d.ts +1 -1
- package/dist/server/rpc/handlers/load-model/registry.d.ts +3 -3
- package/dist/server/rpc/handlers/load-model/registry.js +6 -6
- package/dist/server/rpc/handlers/load-model/resolve-session.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/resolve-session.js +3 -3
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/resolve.js +2 -2
- package/dist/server/rpc/handlers/load-model/types.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model-delegated.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model-delegated.js +3 -3
- package/dist/server/rpc/handlers/logging-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/logging-stream.js +1 -1
- package/dist/server/rpc/handlers/ocr-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/ocr-stream.js +1 -1
- package/dist/server/rpc/handlers/plugin-dispatch.js +3 -3
- package/dist/server/rpc/handlers/plugin-invoke.d.ts +1 -1
- package/dist/server/rpc/handlers/plugin-invoke.js +3 -3
- package/dist/server/rpc/handlers/provideHandler/connection.js +1 -1
- package/dist/server/rpc/handlers/provideHandler/handler.d.ts +1 -1
- package/dist/server/rpc/handlers/provideHandler/handler.js +1 -1
- package/dist/server/rpc/handlers/provideHandler/proxy.js +1 -1
- package/dist/server/rpc/handlers/provideHandler.d.ts +1 -1
- package/dist/server/rpc/handlers/rag.d.ts +1 -1
- package/dist/server/rpc/handlers/rag.js +4 -4
- package/dist/server/rpc/handlers/registry.d.ts +1 -1
- package/dist/server/rpc/handlers/registry.js +1 -1
- package/dist/server/rpc/handlers/resume.d.ts +1 -1
- package/dist/server/rpc/handlers/resume.js +1 -1
- package/dist/server/rpc/handlers/state.d.ts +1 -1
- package/dist/server/rpc/handlers/state.js +1 -1
- package/dist/server/rpc/handlers/stopProvideHandler.d.ts +1 -1
- package/dist/server/rpc/handlers/stopProvideHandler.js +1 -1
- package/dist/server/rpc/handlers/suspend.d.ts +1 -1
- package/dist/server/rpc/handlers/suspend.js +1 -1
- package/dist/server/rpc/handlers/text-to-speech-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/text-to-speech-stream.js +1 -1
- package/dist/server/rpc/handlers/text-to-speech.d.ts +1 -1
- package/dist/server/rpc/handlers/text-to-speech.js +1 -1
- package/dist/server/rpc/handlers/transcribe-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/transcribe-stream.js +1 -1
- package/dist/server/rpc/handlers/transcribe.d.ts +1 -1
- package/dist/server/rpc/handlers/transcribe.js +1 -1
- package/dist/server/rpc/handlers/translate.d.ts +1 -1
- package/dist/server/rpc/handlers/translate.js +1 -1
- package/dist/server/rpc/handlers/unload-model-delegated.d.ts +1 -1
- package/dist/server/rpc/handlers/unload-model-delegated.js +5 -5
- package/dist/server/rpc/handlers/unload-model.d.ts +1 -1
- package/dist/server/rpc/handlers/unload-model.js +3 -3
- package/dist/server/rpc/handlers/upscale-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/upscale-stream.js +1 -1
- package/dist/server/rpc/handlers/video-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/video-stream.js +1 -1
- package/dist/server/rpc/index.d.ts +2 -2
- package/dist/server/rpc/method-shapes.d.ts +53 -0
- package/dist/server/rpc/method-shapes.js +50 -0
- package/dist/server/rpc/profiling/backend-diagnostics.d.ts +3 -0
- package/dist/server/rpc/profiling/backend-diagnostics.js +16 -0
- package/dist/server/rpc/profiling/context.d.ts +1 -1
- package/dist/server/rpc/profiling/delegation-profiler.d.ts +2 -2
- package/dist/server/rpc/profiling/index.d.ts +4 -4
- package/dist/server/rpc/profiling/operation-metrics.d.ts +2 -2
- package/dist/server/rpc/profiling/operation-metrics.js +29 -1
- package/dist/server/rpc/profiling/operation-wrappers.d.ts +1 -1
- package/dist/server/rpc/profiling/operation-wrappers.js +51 -13
- package/dist/server/rpc/profiling/profiler.d.ts +2 -2
- package/dist/server/rpc/transport-selector.d.ts +1 -1
- package/dist/server/utils/archive.js +1 -1
- package/dist/server/utils/audio/decoder.d.ts +1 -1
- package/dist/server/utils/audio/decoder.js +1 -1
- package/dist/server/utils/cache/auto-history.d.ts +1 -1
- package/dist/server/utils/cache/auto-history.js +13 -9
- package/dist/server/utils/cache/paths.d.ts +1 -1
- package/dist/server/utils/cache/paths.js +6 -6
- package/dist/server/utils/checksum.d.ts +1 -1
- package/dist/server/utils/completion-normalizer.d.ts +2 -1
- package/dist/server/utils/completion-normalizer.js +31 -1
- package/dist/server/utils/config-transform.d.ts +1 -1
- package/dist/server/utils/config-transform.js +5 -7
- package/dist/server/utils/index.d.ts +11 -11
- package/dist/server/utils/path-security.d.ts +1 -1
- package/dist/server/utils/qvac-paths.js +1 -1
- package/dist/server/utils/response-format.d.ts +1 -1
- package/dist/server/utils/shard-utils.d.ts +1 -1
- package/dist/server/utils/tool-integration.d.ts +1 -1
- package/dist/server/utils/tool-integration.js +2 -2
- package/dist/server/utils/tools/dialect.d.ts +1 -1
- package/dist/server/utils/tools/dialect.js +2 -0
- package/dist/server/utils/tools/index.d.ts +2 -2
- package/dist/server/utils/tools/parser.d.ts +1 -1
- package/dist/server/utils/tools/parser.js +16 -8
- package/dist/server/utils/tools/parsers/dsml.d.ts +4 -0
- package/dist/server/utils/tools/parsers/dsml.js +176 -0
- package/dist/server/utils/tools/parsers/gemma4native.d.ts +2 -2
- package/dist/server/utils/tools/parsers/gemma4native.js +1 -1
- package/dist/server/utils/tools/parsers/harmony.d.ts +2 -2
- package/dist/server/utils/tools/parsers/harmony.js +1 -1
- package/dist/server/utils/tools/parsers/hermes.d.ts +2 -2
- package/dist/server/utils/tools/parsers/hermes.js +1 -1
- package/dist/server/utils/tools/parsers/json.d.ts +2 -2
- package/dist/server/utils/tools/parsers/json.js +1 -1
- package/dist/server/utils/tools/parsers/pythonic.d.ts +2 -2
- package/dist/server/utils/tools/parsers/pythonic.js +1 -1
- package/dist/server/utils/tools/parsers/qwen35.d.ts +2 -2
- package/dist/server/utils/tools/parsers/qwen35.js +1 -1
- package/dist/server/utils/tools/shared.d.ts +1 -1
- package/dist/server/utils/worker-lock.js +1 -1
- package/dist/server/worker-core.js +14 -10
- package/dist/server/worker.js +4 -3
- package/dist/utils/aggregate-events.d.ts +2 -2
- package/dist/utils/aggregate-events.js +2 -2
- package/dist/utils/errors-client.d.ts +0 -3
- package/dist/utils/errors-client.js +0 -5
- package/dist/utils/errors-server.d.ts +1 -1
- package/dist/utils/mcp-adapter.d.ts +4 -4
- package/dist/utils/mcp-adapter.js +1 -1
- package/dist/utils/tool-helpers.d.ts +1 -1
- package/dist/utils/tool-helpers.js +1 -1
- package/docs/system-resources-support-matrix.md +103 -0
- package/package.json +37 -19
- /package/dist/examples/{transcription → asr}/parakeet-ctc-filesystem.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/parakeet-microphone-record.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/parakeet-microphone-stream.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/parakeet-sortformer-streaming.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/parakeet-sortformer.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/parakeet-tdt-filesystem.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/whispercpp-filesystem-streaming.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/whispercpp-filesystem.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/whispercpp-microphone-conversation.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/whispercpp-microphone-record.d.ts +0 -0
- /package/dist/examples/{transcription → asr}/whispercpp-prompt.d.ts +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { loadModel, unloadModel, video } from '@qvac/sdk';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
// Text-to-video (+ synchronized audio) with LTX-2. Unlike Wan, LTX-2 uses a
|
|
5
|
+
// Gemma text encoder (llmModelSrc), a video VAE (vaeModelSrc), a set of
|
|
6
|
+
// text-embedding connectors (embeddingsConnectorsModelSrc — this is what
|
|
7
|
+
// selects the LTX-2 layout), and an optional audio VAE (audioVaeModelSrc)
|
|
8
|
+
// that produces a 48 kHz audio track muxed into the output AVI.
|
|
9
|
+
//
|
|
10
|
+
// This example needs powerful hardware: LTX-2.3 is a ~21B model, budget at
|
|
11
|
+
// least 20+ GB of video / unified memory.
|
|
12
|
+
//
|
|
13
|
+
// No LTX-2 model constants ship in the SDK registry, so the model sources
|
|
14
|
+
// default to public HuggingFace URLs (the SDK downloads http(s) sources
|
|
15
|
+
// directly). Pass your own paths / URLs via argv to override.
|
|
16
|
+
const HF = 'https://huggingface.co';
|
|
17
|
+
const diffusionModelSrc = process.argv[2] ||
|
|
18
|
+
`${HF}/QuantStack/LTX-2.3-GGUF/resolve/main/LTX-2.3-distilled-1.1/LTX-2.3-22B-distilled-1.1-Q5_K_M.gguf`;
|
|
19
|
+
const llmModelSrc = process.argv[3] || `${HF}/unsloth/gemma-3-12b-it-GGUF/resolve/main/gemma-3-12b-it-UD-Q4_K_XL.gguf`;
|
|
20
|
+
const vaeModelSrc = process.argv[4] ||
|
|
21
|
+
`${HF}/unsloth/LTX-2.3-GGUF/resolve/main/vae/ltx-2.3-22b-distilled_video_vae.safetensors`;
|
|
22
|
+
const audioVaeModelSrc = process.argv[5] ||
|
|
23
|
+
`${HF}/unsloth/LTX-2.3-GGUF/resolve/main/vae/ltx-2.3-22b-distilled_audio_vae.safetensors`;
|
|
24
|
+
const embeddingsConnectorsModelSrc = process.argv[6] ||
|
|
25
|
+
`${HF}/unsloth/LTX-2.3-GGUF/resolve/main/text_encoders/ltx-2.3-22b-distilled_embeddings_connectors.safetensors`;
|
|
26
|
+
const prompt = process.argv[7] || 'a claymation cat playing jazz on a piano';
|
|
27
|
+
const outputDir = process.argv[8] || '.';
|
|
28
|
+
try {
|
|
29
|
+
console.log('▸ Loading LTX-2 model (diffusion + Gemma + video VAE + audio VAE + connectors)...');
|
|
30
|
+
const modelId = await loadModel({
|
|
31
|
+
modelSrc: diffusionModelSrc,
|
|
32
|
+
modelType: 'sdcpp-generation',
|
|
33
|
+
modelConfig: {
|
|
34
|
+
mode: 'video',
|
|
35
|
+
device: 'gpu',
|
|
36
|
+
threads: 4,
|
|
37
|
+
// Supplying embeddingsConnectorsModelSrc selects the LTX-2 layout.
|
|
38
|
+
llmModelSrc,
|
|
39
|
+
vaeModelSrc,
|
|
40
|
+
audioVaeModelSrc,
|
|
41
|
+
embeddingsConnectorsModelSrc,
|
|
42
|
+
diffusion_fa: true,
|
|
43
|
+
vae_tiling: true
|
|
44
|
+
},
|
|
45
|
+
onProgress: (p) => {
|
|
46
|
+
const mb = (n) => (n / 1e6).toFixed(1);
|
|
47
|
+
const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
|
|
48
|
+
process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
|
|
49
|
+
if (p.percentage >= 100)
|
|
50
|
+
process.stderr.write('\n');
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
console.log(`▸ Model loaded: ${modelId}`);
|
|
54
|
+
console.log(`\n▸ Generating video for: "${prompt}"`);
|
|
55
|
+
const { progressStream, outputs, stats } = video({
|
|
56
|
+
modelId,
|
|
57
|
+
mode: 'txt2vid',
|
|
58
|
+
prompt,
|
|
59
|
+
negative_prompt: 'blurry, low quality, static, jittery, watermark, distorted audio',
|
|
60
|
+
// LTX-2 requires width/height as multiples of 32.
|
|
61
|
+
width: 512,
|
|
62
|
+
height: 320,
|
|
63
|
+
// LTX-2 requires (8*k + 1) frames, max 257. At 24 fps: 25≈1s, 121≈5s, 241≈10s.
|
|
64
|
+
video_frames: 121,
|
|
65
|
+
fps: 24,
|
|
66
|
+
// Distilled variants run in 4-8 steps with cfg ~1.0; the full --dev model
|
|
67
|
+
// wants steps >= 20 and cfg ~7.0.
|
|
68
|
+
steps: 10,
|
|
69
|
+
cfg_scale: 1.0,
|
|
70
|
+
seed: 42,
|
|
71
|
+
// Tile the video VAE decode along the time axis to cap peak VRAM on long
|
|
72
|
+
// / HD clips (LTX-2 only).
|
|
73
|
+
temporal_tiling: true
|
|
74
|
+
});
|
|
75
|
+
for await (const { step, totalSteps } of progressStream) {
|
|
76
|
+
console.log(`▸ step ${step}/${totalSteps}`);
|
|
77
|
+
}
|
|
78
|
+
const buffers = await outputs;
|
|
79
|
+
for (let i = 0; i < buffers.length; i++) {
|
|
80
|
+
const outputPath = path.join(outputDir, `ltx_t2v_${i}.avi`);
|
|
81
|
+
fs.writeFileSync(outputPath, buffers[i]);
|
|
82
|
+
console.log(`▸ Saved ${outputPath} (play in VLC to hear the muxed audio track)`);
|
|
83
|
+
}
|
|
84
|
+
console.log('\n▸ Stats:', await stats);
|
|
85
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
86
|
+
console.log('▸ Done.');
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('✖', error);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { loadModel, unloadModel, video, WAN2_2_TI2V_5B_Q5_K_S, UMT5_XXL_FP16, WAN_2_2_COMFYUI_REPACKAGED_VAE } from '@qvac/sdk';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
// Text-to-video with Wan 2.2 TI2V-5B Turbo (Q5_K_S). Like Wan 2.1 this is a
|
|
5
|
+
// split layout — diffusion model + UMT5-XXL text encoder + VAE — but it needs
|
|
6
|
+
// the Wan 2.2 VAE specifically: its 16x spatial compression is what gives
|
|
7
|
+
// TI2V its 32-pixel grid, and the Wan 2.1 VAE is not interchangeable.
|
|
8
|
+
//
|
|
9
|
+
// TI2V-5B is a single-expert model. The high_noise_* / moe_boundary fields
|
|
10
|
+
// belong to the two-expert Wan 2.2 A14B layout and are rejected here.
|
|
11
|
+
//
|
|
12
|
+
// Budget at least 16 GB of video memory or 20 GB of unified memory. The
|
|
13
|
+
// artifacts total roughly 16.4 GB, dominated by the fp16 text encoder.
|
|
14
|
+
//
|
|
15
|
+
// The text encoder is byte-identical to the Wan 2.1 repackage, so both
|
|
16
|
+
// generations share the one UMT5_XXL_FP16 registry entry.
|
|
17
|
+
const diffusionModelSrc = process.argv[2] || WAN2_2_TI2V_5B_Q5_K_S;
|
|
18
|
+
const t5XxlModelSrc = process.argv[3] || UMT5_XXL_FP16;
|
|
19
|
+
const vaeModelSrc = process.argv[4] || WAN_2_2_COMFYUI_REPACKAGED_VAE;
|
|
20
|
+
// Prompt tip: Turbo responds well to explicit camera and lighting direction.
|
|
21
|
+
// Describe continuous motion rather than a pose, or the clip reads as a still.
|
|
22
|
+
const prompt = process.argv[5] ||
|
|
23
|
+
'A single white porcelain espresso cup on a dark walnut table beside a sunlit window, ' +
|
|
24
|
+
'delicate steam curling upward, slow circular camera move, warm morning light, ' +
|
|
25
|
+
'sharp ceramic texture, realistic continuous motion';
|
|
26
|
+
const outputDir = process.argv[6] || '.';
|
|
27
|
+
try {
|
|
28
|
+
console.log('▸ Loading Wan 2.2 TI2V-5B Turbo model (diffusion + UMT5-XXL + Wan 2.2 VAE)...');
|
|
29
|
+
const modelId = await loadModel({
|
|
30
|
+
modelSrc: diffusionModelSrc,
|
|
31
|
+
modelType: 'sdcpp-generation',
|
|
32
|
+
modelConfig: {
|
|
33
|
+
mode: 'video',
|
|
34
|
+
device: 'gpu',
|
|
35
|
+
threads: 4,
|
|
36
|
+
t5XxlModelSrc,
|
|
37
|
+
vaeModelSrc,
|
|
38
|
+
diffusion_fa: true,
|
|
39
|
+
offload_to_cpu: true,
|
|
40
|
+
vae_tiling: true
|
|
41
|
+
},
|
|
42
|
+
onProgress: (p) => {
|
|
43
|
+
const mb = (n) => (n / 1e6).toFixed(1);
|
|
44
|
+
const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
|
|
45
|
+
process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
|
|
46
|
+
if (p.percentage >= 100)
|
|
47
|
+
process.stderr.write('\n');
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
console.log(`▸ Model loaded: ${modelId}`);
|
|
51
|
+
console.log(`\n▸ Generating video for: "${prompt}"`);
|
|
52
|
+
const { progressStream, outputs, stats } = video({
|
|
53
|
+
modelId,
|
|
54
|
+
mode: 'txt2vid',
|
|
55
|
+
prompt,
|
|
56
|
+
negative_prompt: 'flickering, temporal jitter, morphing, duplicated subject, warped geometry, ' +
|
|
57
|
+
'distorted anatomy, blurry details, low resolution, text, watermark, logo',
|
|
58
|
+
// TI2V-5B requires width and height to be multiples of 32 — stricter than
|
|
59
|
+
// the multiple of 16 the schema enforces for Wan generally. Native
|
|
60
|
+
// validation derives this from the loaded GGUF, so a non-conforming size
|
|
61
|
+
// fails at generation time rather than at load.
|
|
62
|
+
// Turbo was trained on this 720p, 24 fps, five-second shape; 640x352 with
|
|
63
|
+
// 49 frames is a much cheaper way to smoke-test the pipeline.
|
|
64
|
+
width: 1280,
|
|
65
|
+
height: 704,
|
|
66
|
+
// Frame count must satisfy (4*k + 1), k >= 1. At 24 fps: 49 ≈ 2s,
|
|
67
|
+
// 121 ≈ 5s (the trained length).
|
|
68
|
+
video_frames: 121,
|
|
69
|
+
fps: 24,
|
|
70
|
+
// Turbo is distilled for very short schedules: 4 steps with guidance
|
|
71
|
+
// effectively disabled. The non-distilled TI2V-5B wants steps >= 30 and
|
|
72
|
+
// cfg ~5.0 instead.
|
|
73
|
+
steps: 4,
|
|
74
|
+
cfg_scale: 1.0,
|
|
75
|
+
flow_shift: 5.0,
|
|
76
|
+
seed: 42,
|
|
77
|
+
vae_tiling: true
|
|
78
|
+
});
|
|
79
|
+
for await (const { step, totalSteps } of progressStream) {
|
|
80
|
+
console.log(`▸ step ${step}/${totalSteps}`);
|
|
81
|
+
}
|
|
82
|
+
const buffers = await outputs;
|
|
83
|
+
for (let i = 0; i < buffers.length; i++) {
|
|
84
|
+
const outputPath = path.join(outputDir, `wan22_ti2v_t2v_${i}.avi`);
|
|
85
|
+
fs.writeFileSync(outputPath, buffers[i]);
|
|
86
|
+
console.log(`▸ Saved ${outputPath}`);
|
|
87
|
+
}
|
|
88
|
+
console.log('\n▸ Stats:', await stats);
|
|
89
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
90
|
+
console.log('▸ Done.');
|
|
91
|
+
process.exit(0);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('✖', error);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
@@ -46,7 +46,11 @@ try {
|
|
|
46
46
|
const result = completion({
|
|
47
47
|
modelId: llmModelId,
|
|
48
48
|
history: messages,
|
|
49
|
-
stream: true
|
|
49
|
+
stream: true,
|
|
50
|
+
// Bound the generation: at temp 0.7 a 1B model can ignore "to 5" and ramble
|
|
51
|
+
// past ctx_size (2048) into a context overflow. This demo only needs enough
|
|
52
|
+
// tokens to show logs streaming.
|
|
53
|
+
generationParams: { predict: 512 }
|
|
50
54
|
});
|
|
51
55
|
const { embedding } = await embed({
|
|
52
56
|
modelId: embedModelId,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// then register the plugins this example uses via `plugins([...])`.
|
|
4
4
|
import bareProcess from 'bare-process';
|
|
5
5
|
import { plugins, LLAMA_3_2_1B_INST_Q4_0 } from '@qvac/sdk';
|
|
6
|
-
import { llmPlugin } from '@qvac/sdk/llamacpp-completion/plugin
|
|
6
|
+
import { llmPlugin } from '@qvac/sdk/llamacpp-completion/plugin';
|
|
7
7
|
globalThis.process = bareProcess;
|
|
8
8
|
const { loadModel, completion, unloadModel } = plugins([llmPlugin]);
|
|
9
9
|
// From here it is the same as the Node quickstart.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { embed, loadModel, unloadModel, GTE_LARGE_FP16 } from '@qvac/sdk';
|
|
2
|
+
import { MongoClient } from 'mongodb';
|
|
3
|
+
const INDEX_NAME = 'documents_vector_index';
|
|
4
|
+
const MONGODB_SETUP_INSTRUCTIONS = `
|
|
5
|
+
▸ This example needs a MongoDB deployment with Atlas Vector Search.
|
|
6
|
+
|
|
7
|
+
One way to get one is to run it in Docker:
|
|
8
|
+
|
|
9
|
+
docker run -p 27017:27017 --name atlas-local mongodb/mongodb-atlas-local
|
|
10
|
+
|
|
11
|
+
For more details, visit: https://www.mongodb.com/docs/atlas/cli/current/atlas-cli-deploy-docker/
|
|
12
|
+
`;
|
|
13
|
+
async function initializeMongoClient() {
|
|
14
|
+
// Replace with your own deployment's connection string if it is not the Docker one
|
|
15
|
+
// https://www.mongodb.com/docs/manual/reference/connection-string/
|
|
16
|
+
const client = new MongoClient('mongodb://localhost:27017/?directConnection=true');
|
|
17
|
+
try {
|
|
18
|
+
await client.connect();
|
|
19
|
+
await client.db('admin').command({ ping: 1 });
|
|
20
|
+
console.log('▸ Connected to MongoDB server');
|
|
21
|
+
return client;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
console.error('✖ Failed to connect to MongoDB server');
|
|
25
|
+
console.error('▸ Please ensure the server is running on localhost:27017');
|
|
26
|
+
console.error(MONGODB_SETUP_INSTRUCTIONS);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function wait(ms) {
|
|
31
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
// Get query and category from command line or use defaults
|
|
35
|
+
const query = process.argv[2] || 'machine learning algorithms';
|
|
36
|
+
const category = process.argv[3] || 'ai';
|
|
37
|
+
console.log(`▸ Query: "${query}" (category: "${category}")`);
|
|
38
|
+
const client = await initializeMongoClient();
|
|
39
|
+
const collection = client.db('qvac').collection('documents');
|
|
40
|
+
const modelId = await loadModel({
|
|
41
|
+
modelSrc: GTE_LARGE_FP16,
|
|
42
|
+
onProgress: (p) => {
|
|
43
|
+
const mb = (n) => (n / 1e6).toFixed(1);
|
|
44
|
+
const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
|
|
45
|
+
process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
|
|
46
|
+
if (p.percentage >= 100)
|
|
47
|
+
process.stderr.write('\n');
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// Sample corpus, each document tagged with a category to filter on
|
|
51
|
+
const samples = [
|
|
52
|
+
{
|
|
53
|
+
id: 1,
|
|
54
|
+
category: 'ai',
|
|
55
|
+
text: 'Machine learning is a subset of artificial intelligence that focuses on algorithms that can learn and make predictions from data without being explicitly programmed for every task.'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 2,
|
|
59
|
+
category: 'ai',
|
|
60
|
+
text: 'Deep learning uses neural networks with multiple layers to process and learn from complex data patterns, enabling breakthroughs in image recognition and natural language processing.'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 3,
|
|
64
|
+
category: 'ai',
|
|
65
|
+
text: 'Natural language processing combines computational linguistics with machine learning to help computers understand, interpret, and generate human language in a meaningful way.'
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 4,
|
|
69
|
+
category: 'ai',
|
|
70
|
+
text: 'Computer vision enables machines to interpret and understand visual information from the world, using techniques like image classification, object detection, and facial recognition.'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 5,
|
|
74
|
+
category: 'computing',
|
|
75
|
+
text: 'Quantum computing leverages quantum mechanical phenomena to process information in fundamentally different ways than classical computers, potentially solving certain problems exponentially faster.'
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 6,
|
|
79
|
+
category: 'security',
|
|
80
|
+
text: 'Blockchain technology creates decentralized, immutable ledgers that enable secure peer-to-peer transactions without requiring a central authority or intermediary.'
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 7,
|
|
84
|
+
category: 'computing',
|
|
85
|
+
text: 'Cloud computing delivers computing services over the internet, allowing users to access resources like storage, processing power, and applications on-demand from anywhere.'
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 8,
|
|
89
|
+
category: 'security',
|
|
90
|
+
text: 'Cybersecurity protects digital systems, networks, and data from malicious attacks, unauthorized access, and various forms of cyber threats through multiple layers of defense.'
|
|
91
|
+
}
|
|
92
|
+
];
|
|
93
|
+
// (Re)create the collection
|
|
94
|
+
try {
|
|
95
|
+
await collection.drop();
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
console.warn(`▸ Collection didn't exist, no need to drop: ${String(e)}`);
|
|
99
|
+
}
|
|
100
|
+
// Embed and store documents
|
|
101
|
+
console.log('▸ Embedding documents...');
|
|
102
|
+
const documents = [];
|
|
103
|
+
for (const sample of samples) {
|
|
104
|
+
const { embedding } = await embed({ modelId, text: sample.text });
|
|
105
|
+
documents.push({
|
|
106
|
+
id: sample.id,
|
|
107
|
+
category: sample.category,
|
|
108
|
+
text: sample.text,
|
|
109
|
+
embedding
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
await collection.insertMany(documents);
|
|
113
|
+
// numDimensions is fixed at index creation and must match the model: GTE Large is 1024
|
|
114
|
+
console.log('▸ Creating vector search index...');
|
|
115
|
+
await collection.createSearchIndex({
|
|
116
|
+
name: INDEX_NAME,
|
|
117
|
+
type: 'vectorSearch',
|
|
118
|
+
definition: {
|
|
119
|
+
fields: [
|
|
120
|
+
{
|
|
121
|
+
type: 'vector',
|
|
122
|
+
path: 'embedding',
|
|
123
|
+
numDimensions: 1024,
|
|
124
|
+
similarity: 'cosine'
|
|
125
|
+
},
|
|
126
|
+
// A field must be indexed as a filter to be usable in a $vectorSearch filter
|
|
127
|
+
{
|
|
128
|
+
type: 'filter',
|
|
129
|
+
path: 'category'
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
// Index builds are asynchronous; querying too early returns no matches
|
|
135
|
+
for (let attempt = 0; attempt < 60; attempt++) {
|
|
136
|
+
const [index] = (await collection.listSearchIndexes(INDEX_NAME).toArray());
|
|
137
|
+
if (index?.queryable)
|
|
138
|
+
break;
|
|
139
|
+
if (attempt === 59)
|
|
140
|
+
throw new Error(`Index ${INDEX_NAME} did not become queryable`);
|
|
141
|
+
await wait(1000);
|
|
142
|
+
}
|
|
143
|
+
console.log('▸ Searching for similar documents...');
|
|
144
|
+
const { embedding: queryEmbedding } = await embed({ modelId, text: query });
|
|
145
|
+
const results = await collection
|
|
146
|
+
.aggregate([
|
|
147
|
+
{
|
|
148
|
+
$vectorSearch: {
|
|
149
|
+
index: INDEX_NAME,
|
|
150
|
+
path: 'embedding',
|
|
151
|
+
queryVector: queryEmbedding,
|
|
152
|
+
filter: { category: { $eq: category } },
|
|
153
|
+
numCandidates: 100,
|
|
154
|
+
limit: 3
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
$project: {
|
|
159
|
+
_id: 0,
|
|
160
|
+
id: 1,
|
|
161
|
+
category: 1,
|
|
162
|
+
text: 1,
|
|
163
|
+
score: { $meta: 'vectorSearchScore' }
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
])
|
|
167
|
+
.toArray();
|
|
168
|
+
console.log('▸ Top 3 most similar documents:');
|
|
169
|
+
results.forEach((result, index) => {
|
|
170
|
+
console.log(`${index + 1}. (Score: ${result.score.toFixed(4)}, Category: ${result.category})`);
|
|
171
|
+
console.log(` ${result.text}`);
|
|
172
|
+
console.log();
|
|
173
|
+
});
|
|
174
|
+
await unloadModel({ modelId });
|
|
175
|
+
await client.close();
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
console.error('✖', error);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-calling example with automatic dialect detection.
|
|
3
|
+
*
|
|
4
|
+
* The SDK infers the tool-call format from the model name/path. It supports
|
|
5
|
+
* model families such as Qwen3.5/3.6, Gemma4, GPT-OSS, DeepSeek V3.2/V4, and
|
|
6
|
+
* LFM without requiring a toolDialect override.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* bun run bare:example dist/examples/tools/llamacpp-tools-auto-dialect.js <model-src>
|
|
10
|
+
*/
|
|
11
|
+
import { completion, loadModel, unloadModel } from '@qvac/sdk';
|
|
12
|
+
import { tools, mockExecute } from './shared.js';
|
|
13
|
+
const modelSrc = process.argv[2];
|
|
14
|
+
if (!modelSrc) {
|
|
15
|
+
console.error('✖ Missing model source: pass a tool-capable GGUF path or URL');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
let modelId;
|
|
19
|
+
try {
|
|
20
|
+
modelId = await loadModel({
|
|
21
|
+
modelSrc,
|
|
22
|
+
modelType: 'llamacpp-completion',
|
|
23
|
+
modelConfig: { ctx_size: 4096, tools: true },
|
|
24
|
+
onProgress: (p) => {
|
|
25
|
+
const mb = (n) => (n / 1e6).toFixed(1);
|
|
26
|
+
const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
|
|
27
|
+
process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
|
|
28
|
+
if (p.percentage >= 100)
|
|
29
|
+
process.stderr.write('\n');
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
console.log(`▸ Model loaded: ${modelId}`);
|
|
33
|
+
const history = [
|
|
34
|
+
{
|
|
35
|
+
role: 'system',
|
|
36
|
+
content: 'You are a helpful assistant that can call tools to look up weather and horoscopes.'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
role: 'user',
|
|
40
|
+
content: "What's the weather in Tokyo and my horoscope for Aquarius?"
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
const result = completion({ modelId, history, stream: true, tools });
|
|
44
|
+
const tokensTask = (async () => {
|
|
45
|
+
for await (const token of result.tokenStream) {
|
|
46
|
+
process.stdout.write(token);
|
|
47
|
+
}
|
|
48
|
+
})();
|
|
49
|
+
const toolsTask = (async () => {
|
|
50
|
+
for await (const evt of result.toolCallStream) {
|
|
51
|
+
if (evt.type === 'toolCall') {
|
|
52
|
+
console.log(`\n▸ ${evt.call.name}(${JSON.stringify(evt.call.arguments)})`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
})();
|
|
56
|
+
await Promise.all([tokensTask, toolsTask]);
|
|
57
|
+
const toolCalls = await result.toolCalls;
|
|
58
|
+
console.log('\n\n▸ Final tool calls:');
|
|
59
|
+
if (toolCalls.length > 0) {
|
|
60
|
+
for (const call of toolCalls) {
|
|
61
|
+
console.log(`▸ ${call.name}(${JSON.stringify(call.arguments)})`);
|
|
62
|
+
const toolResult = mockExecute(call.name, call.arguments);
|
|
63
|
+
console.log(`▸ result: ${toolResult}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log('▸ (none)');
|
|
68
|
+
}
|
|
69
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('✖', error);
|
|
74
|
+
if (modelId)
|
|
75
|
+
await unloadModel({ modelId, clearStorage: false }).catch(() => { });
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { loadModel, textToSpeech, unloadModel, TTS_MINI_V1_EN_PARLER_TTS_Q8_0 } from '@qvac/sdk';
|
|
2
|
+
import { createWav, playAudio, int16ArrayToBuffer, createWavHeader } from './utils.js';
|
|
3
|
+
// Parler-TTS (GGML): description-conditioned speech with per-call voice controls.
|
|
4
|
+
// Uses the registry-hosted Mini v1 Q8_0 model and its native 44.1 kHz output.
|
|
5
|
+
const PARLER_SAMPLE_RATE = 44100;
|
|
6
|
+
try {
|
|
7
|
+
const modelId = await loadModel({
|
|
8
|
+
modelSrc: TTS_MINI_V1_EN_PARLER_TTS_Q8_0,
|
|
9
|
+
modelConfig: {
|
|
10
|
+
ttsEngine: 'parler',
|
|
11
|
+
voice: 'Laura',
|
|
12
|
+
seed: 42
|
|
13
|
+
},
|
|
14
|
+
onProgress: (p) => {
|
|
15
|
+
const mb = (n) => (n / 1e6).toFixed(1);
|
|
16
|
+
const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
|
|
17
|
+
process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
|
|
18
|
+
if (p.percentage >= 100)
|
|
19
|
+
process.stderr.write('\n');
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
console.log(`▸ Model loaded: ${modelId}`);
|
|
23
|
+
console.log('▸ Testing Parler Text-to-Speech...');
|
|
24
|
+
const result = textToSpeech({
|
|
25
|
+
modelId,
|
|
26
|
+
text: 'Hey, how are you doing today?',
|
|
27
|
+
inputType: 'text',
|
|
28
|
+
stream: false,
|
|
29
|
+
emotion: 'happy'
|
|
30
|
+
});
|
|
31
|
+
const audioBuffer = await result.buffer;
|
|
32
|
+
console.log(`▸ TTS complete. Total samples: ${audioBuffer.length}`);
|
|
33
|
+
console.log('▸ Saving audio to file...');
|
|
34
|
+
createWav(audioBuffer, PARLER_SAMPLE_RATE, 'parler-output.wav');
|
|
35
|
+
console.log('▸ Audio saved to parler-output.wav');
|
|
36
|
+
console.log('▸ Playing audio...');
|
|
37
|
+
const audioData = int16ArrayToBuffer(audioBuffer);
|
|
38
|
+
const wavBuffer = Buffer.concat([
|
|
39
|
+
createWavHeader(audioData.length, PARLER_SAMPLE_RATE),
|
|
40
|
+
audioData
|
|
41
|
+
]);
|
|
42
|
+
playAudio(wavBuffer);
|
|
43
|
+
console.log('▸ Audio playback complete');
|
|
44
|
+
await unloadModel({ modelId });
|
|
45
|
+
console.log('▸ Model unloaded');
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error('✖', error);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NVIDIA GR00T N1.7-3B (vision-language-action) example using the QVAC SDK.
|
|
3
|
+
*
|
|
4
|
+
* Loads the GR00T-N1.7-3B LIBERO GGUF model, runs a single inference pass with
|
|
5
|
+
* synthetic inputs, and prints the produced action chunk + per-stage timings.
|
|
6
|
+
*
|
|
7
|
+
* GR00T differs from SmolVLA / π₀.₅ in the ways the SDK surfaces via
|
|
8
|
+
* `vlaHparams()`:
|
|
9
|
+
* - `imageInputMode: 'patches'` — each `images` entry is a pre-patchified
|
|
10
|
+
* buffer of `hparams.imagePatchElems` floats, NOT a `3·w·h` pixel plane.
|
|
11
|
+
* A real consumer patchifies each camera frame the way `Gr00tPolicy` does
|
|
12
|
+
* (the model's learned patch-embed runs inside the addon); here we feed
|
|
13
|
+
* synthetic patch buffers of the right length.
|
|
14
|
+
* - `stateInputMode: 'continuous'` — the robot state is projected by an
|
|
15
|
+
* in-model linear layer; pad it to `hparams.maxStateDim` with `vlaPadState`.
|
|
16
|
+
* - `noise` is REQUIRED. GR00T is a flow-matching model that does not sample
|
|
17
|
+
* its own prior; a missing `noise` is rejected as INVALID_INPUT.
|
|
18
|
+
*
|
|
19
|
+
* The prompt must place one contiguous run of `MERGED_TOKENS_PER_IMAGE`
|
|
20
|
+
* image-placeholder tokens per camera. A real consumer produces this by
|
|
21
|
+
* tokenising the instruction with the Qwen3-VL tokenizer, which inserts the
|
|
22
|
+
* image tokens; we lay it out by hand for the smoke.
|
|
23
|
+
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* bun examples/vla-groot.ts [path-to-groot.gguf]
|
|
26
|
+
*
|
|
27
|
+
* By default the example pulls the registry-baked GR00T-LIBERO GGUF (~3.76 GB)
|
|
28
|
+
* on first run and caches it locally. Pass an absolute path on the command line
|
|
29
|
+
* to override and load a local GGUF instead.
|
|
30
|
+
*/
|
|
31
|
+
import { close, loadModel, GROOT_Q8_VF16, unloadModel, vla, vlaHparams, vlaPadState } from '@qvac/sdk';
|
|
32
|
+
// LIBERO GR00T prompt layout (Qwen3-VL tokenizer). GR00T reports
|
|
33
|
+
// `hparams.tokenizerMaxLength === 0` — it does not surface a tokenizer length,
|
|
34
|
+
// so the prompt length is fixed by the model: 2 cameras × 64 merged image
|
|
35
|
+
// tokens (256 patches, 2×2 merge) = 128 image tokens, plus text, = 148 total.
|
|
36
|
+
// A real consumer gets these from the tokenizer; the smoke hard-codes them.
|
|
37
|
+
const IMAGE_TOKEN_ID = 151655;
|
|
38
|
+
const MERGED_TOKENS_PER_IMAGE = 64;
|
|
39
|
+
const PROMPT_LENGTH = 148;
|
|
40
|
+
const TEXT_TOKEN_ID = 1000;
|
|
41
|
+
const modelSrcOverride = process.argv[2];
|
|
42
|
+
const modelSrc = modelSrcOverride ?? GROOT_Q8_VF16;
|
|
43
|
+
try {
|
|
44
|
+
console.log('▸ Loading GR00T (N1.7-3B LIBERO) model...');
|
|
45
|
+
const modelId = await loadModel({
|
|
46
|
+
modelSrc,
|
|
47
|
+
modelType: 'ggml-vla',
|
|
48
|
+
modelConfig: { backend: 'cpu' },
|
|
49
|
+
onProgress: (p) => {
|
|
50
|
+
const mb = (n) => (n / 1e6).toFixed(1);
|
|
51
|
+
const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
|
|
52
|
+
process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
|
|
53
|
+
if (p.percentage >= 100)
|
|
54
|
+
process.stderr.write('\n');
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (typeof modelSrc !== 'string')
|
|
58
|
+
process.stderr.write('\n');
|
|
59
|
+
console.log(`▸ Model loaded: ${modelId}`);
|
|
60
|
+
const { hparams, backendName } = await vlaHparams({ modelId });
|
|
61
|
+
console.log(`▸ Backend: ${backendName ?? '(unknown)'}`);
|
|
62
|
+
console.log('▸ Hparams:', hparams);
|
|
63
|
+
const patchElems = hparams.imagePatchElems;
|
|
64
|
+
if (hparams.imageInputMode !== 'patches' || patchElems == null) {
|
|
65
|
+
throw new Error(`expected a patch-input model (imageInputMode 'patches' + imagePatchElems); ` +
|
|
66
|
+
`got imageInputMode=${hparams.imageInputMode}`);
|
|
67
|
+
}
|
|
68
|
+
const numCameras = hparams.numCameras ?? 2;
|
|
69
|
+
// Patch-input model: each camera is a pre-patchified buffer of exactly
|
|
70
|
+
// `imagePatchElems` floats. A real consumer patchifies each camera frame the
|
|
71
|
+
// way `Gr00tPolicy` does (the model's learned patch-embed runs inside the
|
|
72
|
+
// addon); we use small synthetic values.
|
|
73
|
+
const images = Array.from({ length: numCameras }, () => new Float32Array(patchElems).fill(0.02));
|
|
74
|
+
// Continuous-state model: pad the robot state to `maxStateDim`.
|
|
75
|
+
const state = vlaPadState([0, 0, 0, 0, 0, 0], hparams.maxStateDim);
|
|
76
|
+
// GR00T requires the noise prior (flow-matching; it is not sampled in-model).
|
|
77
|
+
const noise = new Float32Array(hparams.chunkSize * hparams.maxActionDim);
|
|
78
|
+
// Prompt: one run of `MERGED_TOKENS_PER_IMAGE` image tokens per camera, each
|
|
79
|
+
// followed by a text separator, padded out to the fixed `PROMPT_LENGTH`.
|
|
80
|
+
const tokens = new Int32Array(PROMPT_LENGTH);
|
|
81
|
+
let w = 0;
|
|
82
|
+
for (let cam = 0; cam < numCameras; cam++) {
|
|
83
|
+
for (let k = 0; k < MERGED_TOKENS_PER_IMAGE && w < tokens.length; k++) {
|
|
84
|
+
tokens[w++] = IMAGE_TOKEN_ID;
|
|
85
|
+
}
|
|
86
|
+
if (w < tokens.length)
|
|
87
|
+
tokens[w++] = TEXT_TOKEN_ID + cam;
|
|
88
|
+
}
|
|
89
|
+
for (; w < tokens.length; w++)
|
|
90
|
+
tokens[w] = TEXT_TOKEN_ID + w;
|
|
91
|
+
const mask = new Uint8Array(PROMPT_LENGTH).fill(1);
|
|
92
|
+
console.log('▸ Running VLA inference...');
|
|
93
|
+
const { actions, actionDim, chunkSize, stats } = await vla({
|
|
94
|
+
modelId,
|
|
95
|
+
images,
|
|
96
|
+
// Patch inputs ignore imgWidth/imgHeight, but the request schema requires
|
|
97
|
+
// positive integers; pass the model's vision image size.
|
|
98
|
+
imgWidth: hparams.visionImageSize,
|
|
99
|
+
imgHeight: hparams.visionImageSize,
|
|
100
|
+
state,
|
|
101
|
+
tokens,
|
|
102
|
+
mask,
|
|
103
|
+
noise
|
|
104
|
+
});
|
|
105
|
+
console.log(`▸ Got ${chunkSize} action steps of dim ${actionDim}.`);
|
|
106
|
+
console.log(Array.from(actions.subarray(0, actionDim)));
|
|
107
|
+
if (stats) {
|
|
108
|
+
console.log(`▸ Timing: vision=${stats.vision_ms?.toFixed(0)}ms ` +
|
|
109
|
+
`ode=${stats.ode_ms?.toFixed(0)}ms ` +
|
|
110
|
+
`total=${stats.total_ms?.toFixed(0)}ms`);
|
|
111
|
+
}
|
|
112
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
113
|
+
console.log('▸ Model unloaded.');
|
|
114
|
+
process.exit(0);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error('✖', error);
|
|
118
|
+
await close();
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { loadModel, unloadModel, transcribeStream, completion, textToSpeech, WHISPER_TINY, VAD_SILERO_5_1_2, LLAMA_3_2_1B_INST_Q4_0, TTS_EN_SUPERTONIC_Q8_0 } from '@qvac/sdk';
|
|
14
14
|
import { spawnSync } from 'child_process';
|
|
15
|
-
import { startMicrophone } from '../audio/mic-input';
|
|
16
|
-
import { createWavHeader, int16ArrayToBuffer, playAudio } from '../tts/utils';
|
|
15
|
+
import { startMicrophone } from '../audio/mic-input.js';
|
|
16
|
+
import { createWavHeader, int16ArrayToBuffer, playAudio } from '../tts/utils.js';
|
|
17
17
|
const MIC_SAMPLE_RATE = 16000;
|
|
18
18
|
const TTS_SAMPLE_RATE = 44100;
|
|
19
19
|
const SYSTEM_PROMPT = 'You are a concise, friendly voice assistant. Keep responses under two sentences. ' +
|