@qvac/sdk 0.19.1 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/NOTICE +78 -55
  2. package/README.md +3 -1
  3. package/dist/examples/abot-world.js +3 -3
  4. package/dist/examples/advisory-model-fit.d.ts +59 -0
  5. package/dist/examples/advisory-model-fit.js +156 -0
  6. package/dist/examples/asr/parakeet-nemotron-filesystem.d.ts +2 -0
  7. package/dist/examples/asr/parakeet-nemotron-filesystem.js +170 -0
  8. package/dist/examples/audiogen/edit-music.d.ts +2 -0
  9. package/dist/examples/audiogen/edit-music.js +121 -0
  10. package/dist/examples/audiogen/understand-music.d.ts +2 -0
  11. package/dist/examples/audiogen/understand-music.js +73 -0
  12. package/dist/examples/diffusion-ic-lora-ltx.js +3 -3
  13. package/dist/examples/diffusion-img2vid.js +1 -1
  14. package/dist/examples/diffusion-txt2vid-minimax-h3.d.ts +2 -0
  15. package/dist/examples/diffusion-txt2vid-minimax-h3.js +64 -0
  16. package/dist/examples/diffusion-txt2vid.js +1 -1
  17. package/dist/examples/rag/rag-turbovec.d.ts +2 -0
  18. package/dist/examples/rag/rag-turbovec.js +58 -0
  19. package/dist/examples/tts/audio8.js +5 -5
  20. package/dist/examples/tts/chatterbox-enhanced.js +4 -5
  21. package/dist/examples/tts/chatterbox-multilingual.js +5 -5
  22. package/dist/examples/tts/chatterbox.js +5 -5
  23. package/dist/examples/tts/cosyvoice3.js +5 -5
  24. package/dist/examples/tts/llm-to-tts-streaming.js +12 -2
  25. package/dist/examples/tts/parler.js +5 -5
  26. package/dist/examples/tts/supertonic-enhanced.js +4 -5
  27. package/dist/examples/tts/supertonic-multilingual.js +5 -5
  28. package/dist/examples/tts/supertonic.js +5 -5
  29. package/dist/scripts/contract/build-contract.d.ts +1 -1
  30. package/dist/scripts/contract/constants-registry.d.ts +31 -0
  31. package/dist/scripts/contract/constants-registry.js +13 -2
  32. package/dist/scripts/contract/method-shapes.d.ts +3 -0
  33. package/dist/scripts/contract/method-shapes.js +3 -0
  34. package/dist/src/client/api/assess-model-fit.d.ts +9 -4
  35. package/dist/src/client/api/assess-model-fit.js +9 -4
  36. package/dist/src/client/api/audio-edit.d.ts +36 -0
  37. package/dist/src/client/api/audio-edit.js +38 -0
  38. package/dist/src/client/api/audio-gen-result.d.ts +5 -1
  39. package/dist/src/client/api/audio-gen-result.js +105 -52
  40. package/dist/src/client/api/audio-gen.d.ts +38 -1
  41. package/dist/src/client/api/audio-gen.js +38 -1
  42. package/dist/src/client/api/audio-understand.d.ts +25 -0
  43. package/dist/src/client/api/audio-understand.js +27 -0
  44. package/dist/src/client/api/index.d.ts +3 -0
  45. package/dist/src/client/api/index.js +3 -0
  46. package/dist/src/client/api/text-to-speech.d.ts +31 -4
  47. package/dist/src/client/api/text-to-speech.js +118 -21
  48. package/dist/src/client/api/vector-index.d.ts +143 -0
  49. package/dist/src/client/api/vector-index.js +168 -0
  50. package/dist/src/client/api/world.d.ts +2 -2
  51. package/dist/src/commands/bundle/manifest.d.ts +2 -0
  52. package/dist/src/commands/verify/addon-source.d.ts +6 -0
  53. package/dist/src/commands/verify/bundle-source.d.ts +2 -0
  54. package/dist/src/commands/verify/bundle-source.js +155 -1
  55. package/dist/src/commands/verify/index.js +1 -0
  56. package/dist/src/commands/verify/prebuilds.d.ts +23 -0
  57. package/dist/src/commands/verify/prebuilds.js +129 -13
  58. package/dist/src/commands/verify/resource-collectors.js +2 -1
  59. package/dist/src/expo/plugins/patches/qvac-platform-addons.d.ts +23 -0
  60. package/dist/src/expo/plugins/patches/qvac-platform-addons.js +94 -0
  61. package/dist/src/expo/plugins/withMobileBundle.d.ts +9 -6
  62. package/dist/src/expo/plugins/withMobileBundle.js +54 -34
  63. package/dist/src/index.d.ts +3 -3
  64. package/dist/src/index.js +7 -3
  65. package/dist/src/schemas/sdk-errors-server.d.ts +4 -0
  66. package/dist/src/schemas/sdk-errors-server.js +22 -0
  67. package/dist/src/utils/aggregate-events.d.ts +3 -1
  68. package/dist/src/utils/aggregate-events.js +7 -1
  69. package/dist/src/utils/errors-server.d.ts +12 -0
  70. package/dist/src/utils/errors-server.js +21 -0
  71. package/package.json +23 -17
  72. package/src/electron-forge/index.cjs +86 -14
  73. package/src/expo/plugins/patches/android-link.mjs +18 -9
  74. package/src/expo/plugins/patches/ios-link.mjs +18 -9
  75. package/src/expo/plugins/patches/qvac-platform-addons.ts +124 -0
package/NOTICE CHANGED
@@ -73,12 +73,16 @@ Third-Party Model Licenses
73
73
  https://github.com/tetherto/qvac/releases/download/bci-test-assets-v0.1.0/bci-embedder.bin
74
74
  cosyvoice3-campplus-f32
75
75
  https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
76
+ cosyvoice3-flow-bf16
77
+ https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
76
78
  cosyvoice3-flow-f32
77
79
  https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
78
80
  cosyvoice3-hift-f32
79
81
  https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
80
82
  cosyvoice3-llm-q8_0
81
83
  https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
84
+ cosyvoice3-llm-q8_0-fused
85
+ https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
82
86
  cosyvoice3-s3tok-f16
83
87
  https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
84
88
  craft_mlt_25k
@@ -207,6 +211,18 @@ Third-Party Model Licenses
207
211
  https://huggingface.co/HuggingFaceVLA/smolvla_libero
208
212
  SmolVLM2-500M-Video-Instruct-GGUF
209
213
  https://huggingface.co/ggml-org/SmolVLM2-500M-Video-Instruct-GGUF
214
+ TranslatePsy-AfriSLM-0.8B-Q4-GGUF
215
+ https://huggingface.co/qvac/TranslatePsy-AfriSLM-0.8B-Q4-GGUF
216
+ TranslatePsy-AfriSLM-0.8B-Q8-GGUF
217
+ https://huggingface.co/qvac/TranslatePsy-AfriSLM-0.8B-Q8-GGUF
218
+ TranslatePsy-AfriSLM-2B-Q4-GGUF
219
+ https://huggingface.co/qvac/TranslatePsy-AfriSLM-2B-Q4-GGUF
220
+ TranslatePsy-AfriSLM-2B-Q8-GGUF
221
+ https://huggingface.co/qvac/TranslatePsy-AfriSLM-2B-Q8-GGUF
222
+ TranslatePsy-AfriSLM-4B-Q4-GGUF
223
+ https://huggingface.co/qvac/TranslatePsy-AfriSLM-4B-Q4-GGUF
224
+ TranslatePsy-AfriSLM-4B-Q8-GGUF
225
+ https://huggingface.co/qvac/TranslatePsy-AfriSLM-4B-Q8-GGUF
210
226
  umt5-xxl-enc-q8_0
211
227
  https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged
212
228
  unlimited-ocr-gguf
@@ -318,8 +334,12 @@ Third-Party Model Licenses
318
334
 
319
335
  --- mit (MIT License) ---
320
336
 
337
+ acestep-5Hz-lm-0.6B-BF16
338
+ https://huggingface.co/ACE-Step/acestep-5Hz-lm-0.6B
321
339
  acestep-5Hz-lm-0.6B-Q8_0
322
340
  https://huggingface.co/ACE-Step/acestep-5Hz-lm-0.6B
341
+ acestep-v15-base-Q4_K_M
342
+ https://huggingface.co/ACE-Step/acestep-v15-base
323
343
  acestep-v15-sft-Q8_0
324
344
  https://huggingface.co/ACE-Step/acestep-v15-sft
325
345
  acestep-v15-turbo-Q4_K_M
@@ -608,6 +628,12 @@ Third-Party Model Licenses
608
628
  https://huggingface.co/nvidia/GR00T-N1.7-LIBERO
609
629
  groot-q8_vf16
610
630
  https://huggingface.co/nvidia/GR00T-N1.7-3B
631
+ nemotron-3.5-asr-streaming-0.6b.f16
632
+ https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b
633
+ nemotron-3.5-asr-streaming-0.6b.q4_0
634
+ https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b
635
+ nemotron-3.5-asr-streaming-0.6b.q8_0
636
+ https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b
611
637
  parakeet-unified-en-0.6b.f16
612
638
  https://huggingface.co/nvidia/parakeet-unified-en-0.6b
613
639
  parakeet-unified-en-0.6b.q4_0
@@ -663,54 +689,60 @@ JavaScript Dependencies
663
689
 
664
690
  --- apache-2.0 (Apache License 2.0) ---
665
691
 
666
- @hyperswarm/secret-stream@6.9.1
692
+ @hyperswarm/secret-stream@6.9.2
667
693
  https://github.com/holepunchto/hyperswarm-secret-stream
668
- @qvac/asr-ggml@0.3.3
694
+ @qvac/asr-ggml@0.5.3
669
695
  https://github.com/tetherto/qvac
670
- @qvac/audiogen-ggml@0.3.3
696
+ @qvac/asr-ggml-darwin-arm64@0.5.3
671
697
  https://github.com/tetherto/qvac
672
- @qvac/bci-whispercpp@0.8.2
698
+ @qvac/audiogen-ggml@0.4.1
673
699
  https://github.com/tetherto/qvac
674
- @qvac/classification-ggml@0.23.0
700
+ @qvac/audiogen-ggml-darwin-arm64@0.4.1
675
701
  https://github.com/tetherto/qvac
676
- @qvac/decoder-audio@0.5.0
702
+ @qvac/bci-whispercpp@0.9.1
677
703
  https://github.com/tetherto/qvac
678
- @qvac/diagnostics@0.1.2
704
+ @qvac/classification-ggml@0.26.3
679
705
  https://github.com/tetherto/qvac
680
- @qvac/diffusion-cpp@0.21.0
706
+ @qvac/decoder-audio@0.6.0
681
707
  https://github.com/tetherto/qvac
682
- @qvac/embed-llamacpp@0.37.0
708
+ @qvac/diffusion-cpp@0.24.0
683
709
  https://github.com/tetherto/qvac
684
- @qvac/error@0.1.1
685
- @qvac/fabric@0.10.0
710
+ @qvac/embed-llamacpp@0.41.3
686
711
  https://github.com/tetherto/qvac
687
- @qvac/infer-base@0.4.2
712
+ @qvac/error@0.1.1
713
+ @qvac/fabric@0.16.1
688
714
  https://github.com/tetherto/qvac
689
715
  @qvac/infer-base@0.6.2
690
716
  https://github.com/tetherto/qvac
691
- @qvac/inference@0.19.1
717
+ @qvac/inference@0.20.0
692
718
  https://github.com/tetherto/qvac
693
719
  @qvac/langdetect-text@0.1.2
694
720
  https://github.com/tetherto/qvac
695
- @qvac/llm-llamacpp@0.49.1
721
+ @qvac/llm-llamacpp@0.53.2
696
722
  https://github.com/tetherto/qvac
697
723
  @qvac/logging@0.1.1
698
724
  https://github.com/tetherto/qvac
699
- @qvac/ocr-ggml@0.21.0
725
+ @qvac/model-fit@0.12.2
726
+ https://github.com/tetherto/qvac
727
+ @qvac/ocr-ggml@0.24.3
728
+ https://github.com/tetherto/qvac
729
+ @qvac/rag@0.8.1
700
730
  https://github.com/tetherto/qvac
701
731
  @qvac/registry-client@0.6.1
702
732
  https://github.com/tetherto/qvac
703
733
  @qvac/registry-schema@0.3.0
704
734
  https://github.com/tetherto/qvac
705
- @qvac/translation-nmtcpp@0.13.0
735
+ @qvac/translation-nmtcpp@0.16.4
706
736
  https://github.com/tetherto/qvac
707
- @qvac/tts-ggml@0.8.1
737
+ @qvac/tts-ggml@0.9.2
708
738
  https://github.com/tetherto/qvac
709
- @qvac/vla-ggml@0.24.0
739
+ @qvac/tts-ggml-darwin-arm64@0.9.2
740
+ https://github.com/tetherto/qvac
741
+ @qvac/vla-ggml@0.27.3
710
742
  https://github.com/tetherto/qvac
711
743
  adaptive-timeout@1.0.1
712
744
  https://github.com/holepunchto/adaptive-timeout
713
- b4a@1.8.1
745
+ b4a@1.9.0
714
746
  https://github.com/holepunchto/b4a
715
747
  bare-abort@2.0.13
716
748
  https://github.com/holepunchto/bare-abort
@@ -728,7 +760,7 @@ JavaScript Dependencies
728
760
  https://github.com/holepunchto/bare-bundle
729
761
  bare-bundle-id@1.0.2
730
762
  https://github.com/holepunchto/bare-bundle-id
731
- bare-cov@1.2.2
763
+ bare-cov@1.2.3
732
764
  https://github.com/holepunchto/bare-cov
733
765
  bare-cpu-info@0.1.1
734
766
  https://github.com/holepunchto/bare-cpu-info
@@ -736,7 +768,7 @@ JavaScript Dependencies
736
768
  https://github.com/holepunchto/bare-crypto
737
769
  bare-debug-log@2.0.0
738
770
  https://github.com/holepunchto/bare-debug-log
739
- bare-dns@2.2.0
771
+ bare-dns@2.2.1
740
772
  https://github.com/holepunchto/bare-dns
741
773
  bare-encoding@1.0.3
742
774
  https://github.com/holepunchto/bare-encoding
@@ -744,9 +776,9 @@ JavaScript Dependencies
744
776
  https://github.com/holepunchto/bare-env
745
777
  bare-events@2.9.2
746
778
  https://github.com/holepunchto/bare-events
747
- bare-fetch@3.2.1
779
+ bare-fetch@3.4.0
748
780
  https://github.com/holepunchto/bare-fetch
749
- bare-ffmpeg@1.5.0
781
+ bare-ffmpeg@1.6.0
750
782
  https://github.com/holepunchto/bare-ffmpeg
751
783
  bare-form-data@1.2.2
752
784
  https://github.com/holepunchto/bare-form-data
@@ -760,7 +792,7 @@ JavaScript Dependencies
760
792
  https://github.com/holepunchto/bare-hrtime
761
793
  bare-http-parser@2.1.4
762
794
  https://github.com/holepunchto/bare-http-parser
763
- bare-http1@4.6.1
795
+ bare-http1@4.6.2
764
796
  https://github.com/holepunchto/bare-http1
765
797
  bare-https@3.1.0
766
798
  https://github.com/holepunchto/bare-https
@@ -768,19 +800,15 @@ JavaScript Dependencies
768
800
  https://github.com/holepunchto/bare-inspect
769
801
  bare-inspector@6.1.0
770
802
  https://github.com/holepunchto/bare-inspector
771
- bare-lief@0.2.7
772
- https://github.com/holepunchto/bare-lief
773
- bare-link@3.3.0
774
- https://github.com/holepunchto/bare-link
775
803
  bare-mime@1.0.0
776
804
  https://github.com/holepunchto/bare-mime
777
805
  bare-module@6.4.0
778
806
  https://github.com/holepunchto/bare-module
779
- bare-module-lexer@1.6.6
807
+ bare-module-lexer@1.6.7
780
808
  https://github.com/holepunchto/bare-module-lexer
781
809
  bare-module-resolve@1.12.5
782
810
  https://github.com/holepunchto/bare-module-resolve
783
- bare-module-traverse@2.5.5
811
+ bare-module-traverse@2.5.6
784
812
  https://github.com/holepunchto/bare-module-traverse
785
813
  bare-net@2.3.3
786
814
  https://github.com/holepunchto/bare-net
@@ -800,12 +828,10 @@ JavaScript Dependencies
800
828
  https://github.com/holepunchto/bare-process
801
829
  bare-rpc@1.3.8
802
830
  https://github.com/holepunchto/bare-rpc
803
- bare-runtime@1.32.0
831
+ bare-runtime@1.33.4
804
832
  https://github.com/holepunchto/bare-runtime
805
- bare-runtime-darwin-arm64@1.32.0
833
+ bare-runtime-darwin-arm64@1.33.4
806
834
  https://github.com/holepunchto/bare-runtime
807
- bare-semver@1.1.0
808
- https://github.com/holepunchto/bare-semver
809
835
  bare-signals@4.2.0
810
836
  https://github.com/holepunchto/bare-signals
811
837
  bare-signals@5.0.0
@@ -814,13 +840,11 @@ JavaScript Dependencies
814
840
  https://github.com/holepunchto/bare-stdio
815
841
  bare-stream@2.13.4
816
842
  https://github.com/holepunchto/bare-stream
817
- bare-structured-clone@1.6.0
818
- https://github.com/holepunchto/bare-structured-clone
819
843
  bare-stylize@0.0.1
820
844
  https://github.com/holepunchto/bare-stylize
821
845
  bare-subprocess@5.2.3
822
846
  https://github.com/holepunchto/bare-subprocess
823
- bare-subprocess@6.1.0
847
+ bare-subprocess@6.2.0
824
848
  https://github.com/holepunchto/bare-subprocess
825
849
  bare-tcp@2.6.1
826
850
  https://github.com/holepunchto/bare-tcp
@@ -828,16 +852,17 @@ JavaScript Dependencies
828
852
  https://github.com/holepunchto/bare-tls
829
853
  bare-tty@5.2.1
830
854
  https://github.com/holepunchto/bare-tty
831
- bare-type@1.1.1
855
+ bare-type@1.4.0
832
856
  https://github.com/holepunchto/bare-type
833
- bare-type-stripper@0.1.6
857
+ bare-type-stripper@0.1.7
834
858
  https://github.com/holepunchto/bare-type-stripper
835
859
  bare-url@2.5.4
836
860
  https://github.com/holepunchto/bare-url
837
861
  bare-utils@1.6.0
838
862
  https://github.com/holepunchto/bare-utils
839
- bare-v8-to-istanbul@1.0.2
840
- bare-ws@3.1.0
863
+ bare-v8-to-istanbul@1.0.4
864
+ https://github.com/holepunchto/bare-v8-to-istanbul
865
+ bare-ws@3.2.0
841
866
  https://github.com/holepunchto/bare-ws
842
867
  bare-zlib@1.4.1
843
868
  https://github.com/holepunchto/bare-zlib
@@ -869,7 +894,7 @@ JavaScript Dependencies
869
894
  https://github.com/holepunchto/hypercore-id-encoding
870
895
  hypercore-stats@2.5.1
871
896
  https://github.com/holepunchto/hypercore-stats
872
- hypercore-storage@3.2.1
897
+ hypercore-storage@3.3.1
873
898
  https://github.com/holepunchto/hypercore-storage
874
899
  hyperdb@6.9.0
875
900
  https://github.com/holepunchto/hyperdb
@@ -879,9 +904,9 @@ JavaScript Dependencies
879
904
  https://github.com/holepunchto/hyperdht-stats
880
905
  hyperdispatch@1.6.0
881
906
  https://github.com/holepunchto/hyperdispatch
882
- hyperdrive@13.3.3
907
+ hyperdrive@13.3.4
883
908
  https://github.com/holepunchto/hyperdrive
884
- hyperschema@1.24.0
909
+ hyperschema@1.26.2
885
910
  https://github.com/holepunchto/hyperschema
886
911
  hyperswarm-stats@1.3.1
887
912
  https://github.com/holepunchto/hyperswarm-stats
@@ -907,11 +932,11 @@ JavaScript Dependencies
907
932
  https://github.com/holepunchto/refcounter
908
933
  require-addon@1.3.0
909
934
  https://github.com/holepunchto/require-addon
910
- require-asset@1.2.2
935
+ require-asset@1.2.4
911
936
  https://github.com/holepunchto/require-asset
912
937
  resource-on-exit@1.0.0
913
938
  https://github.com/holepunchto/bare-teardown
914
- rocksdb-native@3.17.4
939
+ rocksdb-native@3.18.1
915
940
  https://github.com/holepunchto/rocksdb-native
916
941
  scope-lock@1.2.4
917
942
  https://github.com/holepunchto/scope-lock
@@ -921,7 +946,7 @@ JavaScript Dependencies
921
946
  https://github.com/holepunchto/sub-encoder
922
947
  text-decoder@1.2.7
923
948
  https://github.com/holepunchto/text-decoder
924
- udx-native@1.21.1
949
+ udx-native@1.21.3
925
950
  https://github.com/holepunchto/udx-native
926
951
  unslab@1.3.0
927
952
  https://github.com/holepunchto/unslab
@@ -949,10 +974,6 @@ JavaScript Dependencies
949
974
 
950
975
  --- mit (MIT License) ---
951
976
 
952
- @jridgewell/resolve-uri@3.1.2
953
- https://github.com/jridgewell/resolve-uri
954
- @jridgewell/sourcemap-codec@1.6.0
955
- https://github.com/jridgewell/sourcemaps
956
977
  @jridgewell/trace-mapping@0.3.31
957
978
  https://github.com/jridgewell/sourcemaps
958
979
  @types/istanbul-lib-coverage@2.0.6
@@ -967,7 +988,7 @@ JavaScript Dependencies
967
988
  https://github.com/mafintosh/codecs
968
989
  convert-source-map@2.0.0
969
990
  https://github.com/thlorenz/convert-source-map
970
- corestore@7.12.4
991
+ corestore@7.12.5
971
992
  https://github.com/holepunchto/corestore
972
993
  debounceify@1.1.0
973
994
  https://github.com/mafintosh/debounceify
@@ -987,13 +1008,13 @@ JavaScript Dependencies
987
1008
  https://github.com/mafintosh/generate-string
988
1009
  hyperbee@2.27.3
989
1010
  https://github.com/holepunchto/hyperbee
990
- hypercore@11.35.5
1011
+ hypercore@11.36.1
991
1012
  https://github.com/holepunchto/hypercore
992
1013
  hypercore-crypto@3.7.0
993
1014
  https://github.com/mafintosh/hypercore-crypto
994
1015
  hyperdht@6.34.0
995
1016
  https://github.com/holepunchto/hyperdht
996
- hyperswarm@4.17.1
1017
+ hyperswarm@4.17.2
997
1018
  https://github.com/holepunchto/hyperswarm
998
1019
  is-options@1.0.2
999
1020
  https://github.com/mafintosh/is-options
@@ -1001,6 +1022,8 @@ JavaScript Dependencies
1001
1022
  https://github.com/mikolalysenko/is-property
1002
1023
  kademlia-routing-table@1.0.6
1003
1024
  https://github.com/mafintosh/kademlia-routing-table
1025
+ llm-splitter@0.2.0
1026
+ https://github.com/nearform/llm-splitter
1004
1027
  mutexify@1.4.0
1005
1028
  https://github.com/mafintosh/mutexify
1006
1029
  nat-sampler@1.0.1
@@ -1071,6 +1094,6 @@ JavaScript Dependencies
1071
1094
  https://github.com/mafintosh/xache
1072
1095
  z32@1.1.0
1073
1096
  https://github.com/mafintosh/z32
1074
- zod@4.6.1
1097
+ zod@4.6.5
1075
1098
  https://github.com/colinhacks/zod
1076
1099
 
package/README.md CHANGED
@@ -144,7 +144,9 @@ initialized, the event omits the resource block.
144
144
 
145
145
  Use `assessModelFit` to check, before downloading anything, whether models are
146
146
  likely to fit in this device's memory. It reads generated catalog metadata plus a
147
- fresh memory sample — no weights, no load, no native probe:
147
+ fresh memory sample, and for a single candidate the registry's weightless
148
+ description of the artifact, so the engine's own fitter can answer — no weights,
149
+ no load:
148
150
 
149
151
  ```ts
150
152
  import { assessModelFit, QWEN3_8B_INST_Q4_K_M } from '@qvac/sdk'
@@ -1,4 +1,4 @@
1
- import { cancel, loadModel, unloadModel, worldCreateScene, worldStep, ABOT_WORLD_0_5B_Q8_0, ABOT_WORLD_0_5B_LF_VAE, ABOT_WORLD_0_5B_LF_VAE_F16, UMT5_XXL_ENC_Q8_0 } from '@qvac/sdk';
1
+ import { cancel, loadModel, unloadModel, worldCreateScene, worldStep, ABOT_WORLD_0_5B_Q8_0, ABOT_WORLD_0_5B_LF_TAEHV_VAE, ABOT_WORLD_0_5B_LF_WAN_VAE, UMT5_XXL_ENC_Q8_0 } from '@qvac/sdk';
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
4
  // ABot-World: build a world from a single image, then walk it. Each step
@@ -38,9 +38,9 @@ try {
38
38
  // vaeModelSrc — the full-precision Wan2.2 VAE. ENCODES the first frame
39
39
  // during worldCreateScene, and is not touched again after that.
40
40
  // Swapping them loads at first and fails once the walk starts.
41
- taehvModelSrc: ABOT_WORLD_0_5B_LF_VAE,
41
+ taehvModelSrc: ABOT_WORLD_0_5B_LF_TAEHV_VAE,
42
42
  t5XxlModelSrc: UMT5_XXL_ENC_Q8_0,
43
- vaeModelSrc: ABOT_WORLD_0_5B_LF_VAE_F16,
43
+ vaeModelSrc: ABOT_WORLD_0_5B_LF_WAN_VAE,
44
44
  world: {
45
45
  seed: 42,
46
46
  // ~3.7x fewer frame-passes per block. Without it, block times ramp from
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Advisory llama.cpp fit check (QVAC-22629).
3
+ *
4
+ * Before a completion or embedding load, the SDK runs `@qvac/model-fit` in one
5
+ * disposable Bare child and projects whether the exact configuration it is
6
+ * about to load will fit in device memory.
7
+ *
8
+ * The result is ADVISORY. It never blocks a load. `does-not-fit` is logged and
9
+ * the ordinary load path runs unchanged. Crashes, timeouts, malformed
10
+ * responses, unsupported configurations, and internal errors all resolve to
11
+ * "no evidence" and are equally non-blocking. Nothing consumes the verdict
12
+ * yet — this PR only produces it.
13
+ *
14
+ * The verdict is emitted on the SDK server log stream, not to stdout, so this
15
+ * example subscribes to `loggingStream({ id: SDK_LOG_ID })` and reprints the
16
+ * `[advisory-fit:…]` lines.
17
+ *
18
+ * ---------------------------------------------------------------------------
19
+ * What fits on this machine (Apple M4 Pro, 24 GiB unified memory)
20
+ * ---------------------------------------------------------------------------
21
+ *
22
+ * Measured with `@qvac/model-fit@0.8.0` (the first release carrying the
23
+ * qvac-fabric#214 memory-reporting fix) at the default 1024 MiB margin. The
24
+ * fitter budgets against what the machine can actually keep resident
25
+ * (total − wired − compressor: 17.4 GiB on this machine at idle), not the raw
26
+ * RAM figure.
27
+ *
28
+ * PROJECTED TO FIT — all layers on GPU
29
+ * Qwen3.5 0.8B Q4_K_M 0.5 GiB @ 4k ctx
30
+ * gpt-oss-20B Q4_K_M 10.8 GiB @ 32k ctx
31
+ * gte-large fp16 0.6 GiB (embedding, context pinned to 512)
32
+ *
33
+ * PROJECTED NOT TO FIT — try any of these to see a `does-not-fit` verdict
34
+ * gpt-oss-20B Q4_K_M 10.8 GiB @ 128k ctx with an f32 KV cache ← below
35
+ * Gemma 4 31B Q4_K_M 18.3 GiB @ 1k ctx ← the weights alone do not
36
+ * fit with gpu_layers: 99
37
+ *
38
+ * gpt-oss-20B at 128k context FITS with the default KV cache and DOES NOT FIT
39
+ * once `cache-type-k`/`cache-type-v` are set to `f32`. Same model, same
40
+ * context, same machine — the verdict tracks the configuration, not the file
41
+ * size.
42
+ *
43
+ * Two boundaries worth understanding when reading verdicts:
44
+ *
45
+ * 1. The verdict answers for a PLACEMENT, not a model. The SDK's schema
46
+ * default is `gpu_layers: 99` ("everything on the GPU"), so `does-not-fit`
47
+ * means "not at this placement". Omit `gpu_layers` and the fitter is free
48
+ * to move layers to the CPU side instead.
49
+ * 2. A `does-not-fit` configuration can still RUN on macOS when the OS
50
+ * compresses and pages hard enough — and a `fits` configuration right at
51
+ * the boundary can still fail at first decode under memory pressure.
52
+ * Prediction cannot separate those cases from a snapshot; the addon-side
53
+ * probe decode (QVAC-24114) is the runtime check that catches the
54
+ * remainder. The verdict here is the honest working-set budget, and the
55
+ * measured failure modes punish over-committing, so treat `does-not-fit`
56
+ * as "expect degradation or decode failure", not "the load will error".
57
+ */
58
+ export {};
59
+ //# sourceMappingURL=advisory-model-fit.d.ts.map
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Advisory llama.cpp fit check (QVAC-22629).
3
+ *
4
+ * Before a completion or embedding load, the SDK runs `@qvac/model-fit` in one
5
+ * disposable Bare child and projects whether the exact configuration it is
6
+ * about to load will fit in device memory.
7
+ *
8
+ * The result is ADVISORY. It never blocks a load. `does-not-fit` is logged and
9
+ * the ordinary load path runs unchanged. Crashes, timeouts, malformed
10
+ * responses, unsupported configurations, and internal errors all resolve to
11
+ * "no evidence" and are equally non-blocking. Nothing consumes the verdict
12
+ * yet — this PR only produces it.
13
+ *
14
+ * The verdict is emitted on the SDK server log stream, not to stdout, so this
15
+ * example subscribes to `loggingStream({ id: SDK_LOG_ID })` and reprints the
16
+ * `[advisory-fit:…]` lines.
17
+ *
18
+ * ---------------------------------------------------------------------------
19
+ * What fits on this machine (Apple M4 Pro, 24 GiB unified memory)
20
+ * ---------------------------------------------------------------------------
21
+ *
22
+ * Measured with `@qvac/model-fit@0.8.0` (the first release carrying the
23
+ * qvac-fabric#214 memory-reporting fix) at the default 1024 MiB margin. The
24
+ * fitter budgets against what the machine can actually keep resident
25
+ * (total − wired − compressor: 17.4 GiB on this machine at idle), not the raw
26
+ * RAM figure.
27
+ *
28
+ * PROJECTED TO FIT — all layers on GPU
29
+ * Qwen3.5 0.8B Q4_K_M 0.5 GiB @ 4k ctx
30
+ * gpt-oss-20B Q4_K_M 10.8 GiB @ 32k ctx
31
+ * gte-large fp16 0.6 GiB (embedding, context pinned to 512)
32
+ *
33
+ * PROJECTED NOT TO FIT — try any of these to see a `does-not-fit` verdict
34
+ * gpt-oss-20B Q4_K_M 10.8 GiB @ 128k ctx with an f32 KV cache ← below
35
+ * Gemma 4 31B Q4_K_M 18.3 GiB @ 1k ctx ← the weights alone do not
36
+ * fit with gpu_layers: 99
37
+ *
38
+ * gpt-oss-20B at 128k context FITS with the default KV cache and DOES NOT FIT
39
+ * once `cache-type-k`/`cache-type-v` are set to `f32`. Same model, same
40
+ * context, same machine — the verdict tracks the configuration, not the file
41
+ * size.
42
+ *
43
+ * Two boundaries worth understanding when reading verdicts:
44
+ *
45
+ * 1. The verdict answers for a PLACEMENT, not a model. The SDK's schema
46
+ * default is `gpu_layers: 99` ("everything on the GPU"), so `does-not-fit`
47
+ * means "not at this placement". Omit `gpu_layers` and the fitter is free
48
+ * to move layers to the CPU side instead.
49
+ * 2. A `does-not-fit` configuration can still RUN on macOS when the OS
50
+ * compresses and pages hard enough — and a `fits` configuration right at
51
+ * the boundary can still fail at first decode under memory pressure.
52
+ * Prediction cannot separate those cases from a snapshot; the addon-side
53
+ * probe decode (QVAC-24114) is the runtime check that catches the
54
+ * remainder. The verdict here is the honest working-set budget, and the
55
+ * measured failure modes punish over-committing, so treat `does-not-fit`
56
+ * as "expect degradation or decode failure", not "the load will error".
57
+ */
58
+ import { completion, loadModel, unloadModel, loggingStream, SDK_LOG_ID, QWEN3_5_0_8B_MULTIMODAL_Q4_K_M, GPT_OSS_20B_INST_Q4_K_M } from '@qvac/sdk';
59
+ // The oversized load below is expected to be reported as `does-not-fit` and
60
+ // then attempted anyway, because the check is advisory. It really does try to
61
+ // allocate ~11 GiB, so it stays opt-in.
62
+ const ATTEMPT_OVERSIZED = process.env['QVAC_FIT_DEMO_ATTEMPT_OVERSIZED'] === '1';
63
+ // Reprint the worker's advisory verdicts. They arrive on the SDK server log
64
+ // stream; everything else on that stream is filtered out to keep this readable.
65
+ //
66
+ // Called once per phase rather than once for the process: a subscription
67
+ // currently stops delivering after any `unloadModel`, so a single one would go
68
+ // silent before the second verdict. Resubscribing after the unload works.
69
+ function watchVerdicts() {
70
+ void (async () => {
71
+ for await (const log of loggingStream({ id: SDK_LOG_ID })) {
72
+ if (log.message.includes('[advisory-fit:')) {
73
+ console.log(`▸ [${log.level.toUpperCase()}] ${log.message}`);
74
+ }
75
+ }
76
+ })().catch(() => {
77
+ // Stream terminated — normal on shutdown.
78
+ });
79
+ }
80
+ watchVerdicts();
81
+ try {
82
+ // 1. A load the fitter projects to fit. The verdict carries the plan it
83
+ // projected: resolved context, offloaded layers, and GPU device count.
84
+ console.log('▸ Loading Qwen3.5 0.8B @ 4k — expected verdict: projected to fit');
85
+ const smallModelId = await loadModel({
86
+ modelSrc: QWEN3_5_0_8B_MULTIMODAL_Q4_K_M,
87
+ modelConfig: { ctx_size: 4096 }
88
+ });
89
+ console.log(`▸ Loaded ${smallModelId}\n`);
90
+ const result = completion({
91
+ modelId: smallModelId,
92
+ history: [{ role: 'user', content: 'Say hello in five words.' }],
93
+ stream: false,
94
+ generationParams: { predict: 48 }
95
+ });
96
+ const final = await result.final;
97
+ console.log(`▸ Completion still works normally: ${final.contentText.trim().slice(0, 120)}\n`);
98
+ // Unloaded before the next phase, so the second verdict is measured on an
99
+ // idle machine and stays comparable to the fixture tables above. Leaving it
100
+ // loaded would shift the verdict: the check reserves resident weight bytes
101
+ // through the fit margin, and since model-fit 0.8.0 the fit child also sees
102
+ // system-wide wired memory.
103
+ await unloadModel({ modelId: smallModelId, clearStorage: false });
104
+ watchVerdicts();
105
+ // 2. A load the fitter projects NOT to fit. The point of this example is that
106
+ // the SDK reports the verdict and then loads anyway — the check is
107
+ // evidence, not admission control.
108
+ if (!ATTEMPT_OVERSIZED) {
109
+ console.log('▸ Skipping the oversized gpt-oss-20B load.');
110
+ console.log('▸ Set QVAC_FIT_DEMO_ATTEMPT_OVERSIZED=1 to let it run and watch the');
111
+ console.log(' load proceed past a `does-not-fit` verdict (allocates ~11 GiB).');
112
+ }
113
+ else {
114
+ console.log('▸ Loading gpt-oss-20B @ 128k with an f32 KV cache');
115
+ console.log('▸ Expected verdict: projected NOT to fit');
116
+ console.log('▸ The load is attempted regardless. That is the fail-open contract:');
117
+ console.log(' the verdict is evidence, not admission control.\n');
118
+ const bigModelId = await loadModel({
119
+ modelSrc: GPT_OSS_20B_INST_Q4_K_M,
120
+ modelConfig: {
121
+ ctx_size: 131072,
122
+ 'cache-type-k': 'f32',
123
+ 'cache-type-v': 'f32'
124
+ }
125
+ });
126
+ console.log(`▸ Load returned ${bigModelId} — the advisory verdict did not block it`);
127
+ // Loading is not the same as being usable: a model can load and then fail
128
+ // at decode time. Gemma 4 31B does exactly that on this machine. So run a
129
+ // real completion and report throughput rather than trusting the load.
130
+ try {
131
+ const check = completion({
132
+ modelId: bigModelId,
133
+ history: [{ role: 'user', content: 'Name three colours. Answer briefly.' }],
134
+ stream: false,
135
+ generationParams: { predict: 40 }
136
+ });
137
+ const checkFinal = await check.final;
138
+ console.log(`▸ ...and it actually runs: ${checkFinal.stats?.tokensPerSecond?.toFixed(1) ?? '?'} tok/s ` +
139
+ `— the OS compressed and paged its way past the working-set budget`);
140
+ }
141
+ catch (inferenceError) {
142
+ console.log(`▸ ...but it cannot run: ${inferenceError instanceof Error ? inferenceError.message : String(inferenceError)}`);
143
+ console.log('▸ The verdict was right, and `loadModel` succeeding did not mean usable.');
144
+ }
145
+ await unloadModel({ modelId: bigModelId, clearStorage: false });
146
+ }
147
+ }
148
+ catch (error) {
149
+ // A failing load here is the native loader's own error, not the fit check.
150
+ // The check never throws and never converts a verdict into a load failure.
151
+ console.error('✖', error instanceof Error ? error.message : error);
152
+ process.exitCode = 1;
153
+ }
154
+ // The log subscription is an open stream and would otherwise keep the process
155
+ // alive after the work is done.
156
+ process.exit(process.exitCode ?? 0);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parakeet-nemotron-filesystem.d.ts.map