@qvac/sdk 0.8.1 → 1.1.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/LICENSE +24 -1
- package/README.md +191 -373
- package/dist/client/api/cancel.d.ts +4 -22
- package/dist/client/api/cancel.js +6 -25
- package/dist/client/api/completion-stream.d.ts +30 -24
- package/dist/client/api/completion-stream.js +69 -118
- package/dist/client/api/delete-cache.js +2 -3
- package/dist/client/api/download-asset.d.ts +5 -6
- package/dist/client/api/download-asset.js +20 -16
- package/dist/client/api/embed.d.ts +4 -21
- package/dist/client/api/embed.js +14 -4
- package/dist/client/api/index.d.ts +2 -6
- package/dist/client/api/index.js +2 -6
- package/dist/client/api/load-model.d.ts +21 -49
- package/dist/client/api/load-model.js +134 -40
- package/dist/client/api/logging-stream.d.ts +4 -7
- package/dist/client/api/logging-stream.js +5 -9
- package/dist/client/api/ping.d.ts +11 -0
- package/dist/client/api/ping.js +18 -0
- package/dist/client/api/provide.d.ts +1 -1
- package/dist/client/api/provide.js +3 -4
- package/dist/client/api/rag.d.ts +21 -216
- package/dist/client/api/rag.js +36 -396
- package/dist/client/api/stop-provider.d.ts +1 -1
- package/dist/client/api/stop-provider.js +3 -4
- package/dist/client/api/text-to-speech.d.ts +2 -2
- package/dist/client/api/text-to-speech.js +3 -3
- package/dist/client/api/transcribe.d.ts +5 -7
- package/dist/client/api/transcribe.js +9 -8
- package/dist/client/api/translate.d.ts +3 -3
- package/dist/client/api/translate.js +15 -15
- package/dist/client/api/unload-model.d.ts +1 -5
- package/dist/client/api/unload-model.js +4 -17
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/logging-stream-registry.d.ts +1 -1
- package/dist/client/logging-stream-registry.js +13 -14
- package/dist/client/rpc/bare-client.d.ts +139 -3
- package/dist/client/rpc/bare-client.js +16 -117
- package/dist/client/rpc/bare-rpc-client.d.ts +4 -0
- package/dist/client/rpc/bare-rpc-client.js +87 -0
- package/dist/client/rpc/expo-rpc-client.d.ts +1 -2
- package/dist/client/rpc/expo-rpc-client.js +14 -57
- package/dist/client/rpc/node-rpc-client.d.ts +8 -3
- package/dist/client/rpc/node-rpc-client.js +62 -218
- package/dist/client/rpc/rpc-client.d.ts +2 -3
- package/dist/client/rpc/rpc-client.js +49 -184
- package/dist/constants/audio.d.ts +2 -1
- package/dist/constants/audio.js +17 -1
- package/dist/constants/index.d.ts +0 -1
- package/dist/constants/index.js +0 -1
- package/dist/examples/delegated-inference/consumer.js +2 -3
- package/dist/examples/download-with-cancel.js +4 -3
- package/dist/examples/embed-hyperdrive.d.ts +2 -0
- package/dist/examples/embed-hyperdrive.js +19 -0
- package/dist/examples/kv-cache-cleanup.js +2 -1
- package/dist/examples/kv-cache-custom-key.js +2 -16
- package/dist/examples/kv-cache-example.js +2 -1
- package/dist/examples/llamacpp-file-logging.d.ts +2 -0
- package/dist/examples/{logging-file-transport.js → llamacpp-file-logging.js} +8 -3
- package/dist/examples/llamacpp-filesystem.js +2 -2
- package/dist/examples/llamacpp-http.js +1 -0
- package/dist/examples/llamacpp-hyperdrive.d.ts +2 -0
- package/dist/examples/{llamacpp-p2p.js → llamacpp-hyperdrive.js} +2 -1
- package/dist/examples/llamacpp-multimodal.js +4 -3
- package/dist/examples/llamacpp-native-tools.js +30 -72
- package/dist/examples/multi-model-demo.js +3 -2
- package/dist/examples/parallel-download.js +14 -46
- package/dist/examples/rag/rag-chromadb.js +1 -0
- package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb-workspaces.js +107 -0
- package/dist/examples/rag/rag-hyperdb.d.ts +2 -0
- package/dist/examples/rag/{rag-hyperdb/ingest.js → rag-hyperdb.js} +5 -10
- package/dist/examples/rag/rag-lancedb.js +1 -0
- package/dist/examples/rag/rag-sqlite.js +1 -0
- package/dist/examples/seed-hyperdrive.d.ts +2 -0
- package/dist/examples/text-to-speech.d.ts +3 -0
- package/dist/examples/{tts/utils.js → text-to-speech.js} +63 -18
- package/dist/examples/translation/translation-indic.js +1 -4
- package/dist/examples/translation/translation-llm-context.js +1 -0
- package/dist/examples/translation/translation-llm.js +2 -2
- package/dist/examples/translation/translation-opus.js +3 -6
- package/dist/examples/translation/translation-stream.js +3 -3
- package/dist/examples/{transcription/whispercpp-filesystem.js → whispercpp-filesystem.js} +7 -2
- package/dist/examples/{transcription/whispercpp-microphone-record.js → whispercpp-microphone-record.js} +6 -1
- package/dist/examples/{transcription/whispercpp-prompt.js → whispercpp-prompt.js} +6 -2
- package/dist/expo/plugins/index.d.ts +0 -3
- package/dist/expo/plugins/index.js +0 -3
- package/dist/expo/plugins/withMobileBundle.d.ts +2 -5
- package/dist/expo/plugins/withMobileBundle.js +40 -121
- package/dist/expo/plugins/withQvacSDK.d.ts +0 -4
- package/dist/expo/plugins/withQvacSDK.js +1 -26
- package/dist/index.d.ts +4 -9
- package/dist/index.js +5 -11
- package/dist/logging/base-logger.js +16 -26
- package/dist/logging/index.d.ts +1 -7
- package/dist/logging/index.js +1 -7
- package/dist/logging/logger.d.ts +2 -0
- package/dist/logging/logger.js +6 -11
- package/dist/logging/stream-logger.d.ts +1 -1
- package/dist/logging/stream-logger.js +3 -6
- package/dist/logging/transport.js +2 -2
- package/dist/logging/types.d.ts +0 -2
- package/dist/logging/utils.d.ts +0 -2
- package/dist/logging/utils.js +0 -62
- package/dist/models/{registry → hyperdrive}/index.js +1 -1
- package/dist/models/hyperdrive/models.d.ts +795 -0
- package/dist/models/hyperdrive/models.js +891 -0
- package/dist/schemas/cancel.d.ts +0 -18
- package/dist/schemas/cancel.js +0 -7
- package/dist/schemas/common.d.ts +153 -2857
- package/dist/schemas/common.js +4 -27
- package/dist/schemas/completion-stream.d.ts +60 -31
- package/dist/schemas/completion-stream.js +44 -20
- package/dist/schemas/delegate.d.ts +0 -9
- package/dist/schemas/delegate.js +2 -6
- package/dist/schemas/download-asset.d.ts +3 -125
- package/dist/schemas/download-asset.js +5 -22
- package/dist/schemas/embed.d.ts +3 -3
- package/dist/schemas/embed.js +2 -9
- package/dist/schemas/index.d.ts +2 -20
- package/dist/schemas/index.js +2 -20
- package/dist/schemas/llamacpp-config.d.ts +12 -243
- package/dist/schemas/llamacpp-config.js +14 -50
- package/dist/schemas/load-model.d.ts +986 -14092
- package/dist/schemas/load-model.js +72 -325
- package/dist/schemas/logging-stream.d.ts +4 -11
- package/dist/schemas/logging-stream.js +3 -4
- package/dist/schemas/ping.d.ts +11 -0
- package/dist/schemas/ping.js +8 -0
- package/dist/schemas/rag.d.ts +52 -183
- package/dist/schemas/rag.js +23 -152
- package/dist/schemas/text-to-speech.d.ts +1 -692
- package/dist/schemas/text-to-speech.js +3 -35
- package/dist/schemas/translate.d.ts +23 -68
- package/dist/schemas/translate.js +11 -37
- package/dist/schemas/translation-config.d.ts +7 -810
- package/dist/schemas/translation-config.js +7 -113
- package/dist/schemas/unload-model.d.ts +0 -2
- package/dist/schemas/unload-model.js +0 -2
- package/dist/schemas/whispercpp-config.d.ts +74 -0
- package/dist/schemas/{transcription-config.js → whispercpp-config.js} +8 -31
- package/dist/server/bare/{ops → addons}/cancel.js +1 -2
- package/dist/server/bare/addons/index.d.ts +4 -0
- package/dist/server/bare/addons/index.js +3 -0
- package/dist/server/bare/addons/llamacpp/create-model.d.ts +5 -0
- package/dist/server/bare/addons/llamacpp/create-model.js +67 -0
- package/dist/server/bare/{plugins/llamacpp-completion/ops → addons/llamacpp/handlers}/completion-stream.d.ts +1 -2
- package/dist/server/bare/{plugins/llamacpp-completion/ops → addons/llamacpp/handlers}/completion-stream.js +49 -46
- package/dist/server/bare/addons/llamacpp/handlers/embed.d.ts +4 -0
- package/dist/server/bare/{ops → addons/llamacpp/handlers}/embed.js +7 -22
- package/dist/server/bare/addons/llamacpp/index.d.ts +4 -0
- package/dist/server/bare/addons/llamacpp/index.js +3 -0
- package/dist/server/bare/{ops → addons/llamacpp}/kv-cache-utils.d.ts +1 -4
- package/dist/server/bare/{ops → addons/llamacpp}/kv-cache-utils.js +19 -54
- package/dist/server/bare/addons/load-model.d.ts +3 -0
- package/dist/server/bare/addons/load-model.js +62 -0
- package/dist/server/bare/addons/translation/create-model.d.ts +4 -0
- package/dist/server/bare/addons/translation/create-model.js +45 -0
- package/dist/server/bare/addons/translation/handlers/translate.d.ts +3 -0
- package/dist/server/bare/{ops → addons/translation/handlers}/translate.js +14 -47
- package/dist/server/bare/addons/translation/index.d.ts +3 -0
- package/dist/server/bare/addons/translation/index.js +2 -0
- package/dist/server/bare/addons/tts/create-model.d.ts +6 -0
- package/dist/server/bare/addons/tts/create-model.js +40 -0
- package/dist/server/bare/{plugins/onnx-tts/ops → addons/tts/handlers}/text-to-speech.js +3 -25
- package/dist/server/bare/addons/tts/index.d.ts +3 -0
- package/dist/server/bare/addons/tts/index.js +2 -0
- package/dist/server/bare/addons/unload-model.js +20 -0
- package/dist/server/bare/addons/whispercpp/create-model.d.ts +6 -0
- package/dist/server/bare/addons/whispercpp/create-model.js +56 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +62 -0
- package/dist/server/bare/addons/whispercpp/index.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/index.js +2 -0
- package/dist/server/bare/delegate-rpc-client.d.ts +0 -6
- package/dist/server/bare/delegate-rpc-client.js +45 -187
- package/dist/server/bare/hyperswarm.d.ts +0 -3
- package/dist/server/bare/hyperswarm.js +6 -29
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +10 -9
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +4 -7
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +14 -13
- package/dist/server/bare/rag-hyperdb/handlers/search.js +10 -10
- package/dist/server/bare/rag-hyperdb/index.d.ts +1 -8
- package/dist/server/bare/rag-hyperdb/index.js +1 -8
- package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +5 -0
- package/dist/server/bare/rag-hyperdb/rag-manager.js +65 -0
- package/dist/server/bare/registry/logging-stream-registry.d.ts +7 -24
- package/dist/server/bare/registry/logging-stream-registry.js +20 -99
- package/dist/server/bare/registry/model-registry.d.ts +26 -14
- package/dist/server/bare/registry/model-registry.js +15 -29
- package/dist/server/error-handlers.d.ts +2 -3
- package/dist/server/error-handlers.js +10 -15
- package/dist/server/http-server.d.ts +2 -0
- package/dist/server/http-server.js +189 -0
- package/dist/server/rpc/create-server.js +3 -5
- package/dist/server/rpc/handle-request.d.ts +9 -0
- package/dist/server/rpc/handle-request.js +242 -92
- package/dist/server/rpc/handlers/cancelHandler.js +3 -14
- package/dist/server/rpc/handlers/completion-stream-delegated.d.ts +1 -3
- package/dist/server/rpc/handlers/completion-stream-delegated.js +8 -20
- package/dist/server/rpc/handlers/completion-stream.js +43 -2
- package/dist/server/rpc/handlers/delete-cache.js +2 -4
- package/dist/server/rpc/handlers/download-asset.js +6 -59
- package/dist/server/rpc/handlers/embed.js +19 -2
- package/dist/server/rpc/handlers/index.d.ts +0 -13
- package/dist/server/rpc/handlers/index.js +0 -13
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +11 -12
- package/dist/server/rpc/handlers/load-model/download-manager.js +28 -43
- package/dist/server/rpc/handlers/load-model/http.d.ts +1 -2
- package/dist/server/rpc/handlers/load-model/http.js +59 -422
- package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +1 -2
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +171 -364
- package/dist/server/rpc/handlers/load-model/index.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/index.js +2 -2
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +1 -3
- package/dist/server/rpc/handlers/load-model/resolve.js +29 -110
- package/dist/server/rpc/handlers/load-model-delegated.d.ts +2 -6
- package/dist/server/rpc/handlers/load-model-delegated.js +20 -60
- package/dist/server/rpc/handlers/{load-model/handler.d.ts → load-model.d.ts} +2 -2
- package/dist/server/rpc/handlers/load-model.js +57 -0
- package/dist/server/rpc/handlers/logging-stream.js +4 -4
- package/dist/server/rpc/handlers/provideHandler/connection.js +10 -12
- package/dist/server/rpc/handlers/provideHandler/handler.js +17 -20
- package/dist/server/rpc/handlers/provideHandler/proxy.js +6 -8
- package/dist/server/rpc/handlers/rag.d.ts +2 -2
- package/dist/server/rpc/handlers/rag.js +43 -130
- package/dist/server/rpc/handlers/stopProvideHandler.js +2 -6
- package/dist/server/rpc/handlers/text-to-speech.js +5 -2
- package/dist/server/rpc/handlers/transcribe-stream.js +28 -2
- package/dist/server/rpc/handlers/translate.js +49 -2
- package/dist/server/rpc/handlers/unload-model.js +3 -12
- package/dist/server/rpc/index.d.ts +1 -1
- package/dist/server/utils/audio/decoder.d.ts +1 -2
- package/dist/server/utils/audio/decoder.js +12 -49
- package/dist/server/utils/cache.d.ts +8 -19
- package/dist/server/utils/cache.js +15 -100
- package/dist/server/utils/hash.d.ts +5 -0
- package/dist/server/utils/hash.js +11 -0
- package/dist/server/utils/index.d.ts +2 -7
- package/dist/server/utils/index.js +2 -7
- package/dist/server/worker.d.ts +5 -4
- package/dist/server/worker.js +89 -22
- package/package.json +41 -148
- package/NOTICE +0 -695
- package/bare-imports.json +0 -44
- package/dist/client/api/get-model-info.d.ts +0 -36
- package/dist/client/api/get-model-info.js +0 -14
- package/dist/client/api/heartbeat.d.ts +0 -30
- package/dist/client/api/heartbeat.js +0 -38
- package/dist/client/api/invoke-plugin.d.ts +0 -15
- package/dist/client/api/invoke-plugin.js +0 -38
- package/dist/client/api/ocr.d.ts +0 -31
- package/dist/client/api/ocr.js +0 -88
- package/dist/client/api/registry.d.ts +0 -14
- package/dist/client/api/registry.js +0 -37
- package/dist/client/config-loader/config-utils.d.ts +0 -5
- package/dist/client/config-loader/config-utils.js +0 -20
- package/dist/client/config-loader/resolve-config.bare.d.ts +0 -9
- package/dist/client/config-loader/resolve-config.bare.js +0 -87
- package/dist/client/config-loader/resolve-config.expo.d.ts +0 -11
- package/dist/client/config-loader/resolve-config.expo.js +0 -62
- package/dist/client/config-loader/resolve-config.node.d.ts +0 -10
- package/dist/client/config-loader/resolve-config.node.js +0 -145
- package/dist/client/init-hooks.d.ts +0 -21
- package/dist/client/init-hooks.js +0 -66
- package/dist/client/rpc/expo-device-info.d.ts +0 -6
- package/dist/client/rpc/expo-device-info.js +0 -32
- package/dist/client/rpc/profiling/index.d.ts +0 -2
- package/dist/client/rpc/profiling/index.js +0 -1
- package/dist/client/rpc/profiling/profiler.d.ts +0 -27
- package/dist/client/rpc/profiling/profiler.js +0 -139
- package/dist/constants/registry.d.ts +0 -2
- package/dist/constants/registry.js +0 -1
- package/dist/examples/cache-management.d.ts +0 -2
- package/dist/examples/cache-management.js +0 -97
- package/dist/examples/config/blind-relay/blind-relay.config.d.ts +0 -5
- package/dist/examples/config/blind-relay/blind-relay.config.js +0 -7
- package/dist/examples/config/default/default.config.d.ts +0 -8
- package/dist/examples/config/default/default.config.js +0 -6
- package/dist/examples/config/plugins/plugins.config.d.ts +0 -5
- package/dist/examples/config/plugins/plugins.config.js +0 -4
- package/dist/examples/config-reload.d.ts +0 -2
- package/dist/examples/config-reload.js +0 -49
- package/dist/examples/default-config-usage.d.ts +0 -17
- package/dist/examples/default-config-usage.js +0 -47
- package/dist/examples/delegated-inference/consumer-profiled.d.ts +0 -2
- package/dist/examples/delegated-inference/consumer-profiled.js +0 -67
- package/dist/examples/download-with-blind-relays.d.ts +0 -2
- package/dist/examples/download-with-blind-relays.js +0 -49
- package/dist/examples/embed-p2p.d.ts +0 -2
- package/dist/examples/embed-p2p.js +0 -54
- package/dist/examples/llamacpp-p2p.d.ts +0 -2
- package/dist/examples/llamacpp-sharded.d.ts +0 -2
- package/dist/examples/llamacpp-sharded.js +0 -53
- package/dist/examples/logging-file-transport.d.ts +0 -2
- package/dist/examples/logging-streaming.d.ts +0 -2
- package/dist/examples/logging-streaming.js +0 -75
- package/dist/examples/mcp-websearch.d.ts +0 -13
- package/dist/examples/mcp-websearch.js +0 -176
- package/dist/examples/ocr-fasttext.d.ts +0 -2
- package/dist/examples/ocr-fasttext.js +0 -52
- package/dist/examples/plugins.d.ts +0 -14
- package/dist/examples/plugins.js +0 -129
- package/dist/examples/profiling/basic.d.ts +0 -2
- package/dist/examples/profiling/basic.js +0 -71
- package/dist/examples/profiling/per-call.d.ts +0 -2
- package/dist/examples/profiling/per-call.js +0 -30
- package/dist/examples/quickstart.d.ts +0 -2
- package/dist/examples/quickstart.js +0 -28
- package/dist/examples/rag/rag-hyperdb/cancellation.d.ts +0 -2
- package/dist/examples/rag/rag-hyperdb/cancellation.js +0 -75
- package/dist/examples/rag/rag-hyperdb/ingest.d.ts +0 -2
- package/dist/examples/rag/rag-hyperdb/pipeline.d.ts +0 -2
- package/dist/examples/rag/rag-hyperdb/pipeline.js +0 -74
- package/dist/examples/rag/rag-hyperdb/workspaces.d.ts +0 -2
- package/dist/examples/rag/rag-hyperdb/workspaces.js +0 -178
- package/dist/examples/registry-query.d.ts +0 -2
- package/dist/examples/registry-query.js +0 -87
- package/dist/examples/seed-p2p.d.ts +0 -2
- package/dist/examples/transcription/parakeet-ctc-filesystem.d.ts +0 -2
- package/dist/examples/transcription/parakeet-ctc-filesystem.js +0 -40
- package/dist/examples/transcription/parakeet-microphone-record.d.ts +0 -2
- package/dist/examples/transcription/parakeet-microphone-record.js +0 -95
- package/dist/examples/transcription/parakeet-sortformer.d.ts +0 -2
- package/dist/examples/transcription/parakeet-sortformer.js +0 -115
- package/dist/examples/transcription/parakeet-tdt-filesystem.d.ts +0 -2
- package/dist/examples/transcription/parakeet-tdt-filesystem.js +0 -44
- package/dist/examples/translation/translation-bergamot-batch.d.ts +0 -2
- package/dist/examples/translation/translation-bergamot-batch.js +0 -49
- package/dist/examples/translation/translation-bergamot-pivot.d.ts +0 -2
- package/dist/examples/translation/translation-bergamot-pivot.js +0 -73
- package/dist/examples/translation/translation-bergamot.d.ts +0 -2
- package/dist/examples/translation/translation-bergamot.js +0 -39
- package/dist/examples/translation/translation-llm-afriquegemma.d.ts +0 -2
- package/dist/examples/translation/translation-llm-afriquegemma.js +0 -39
- package/dist/examples/tts/chatterbox.d.ts +0 -2
- package/dist/examples/tts/chatterbox.js +0 -59
- package/dist/examples/tts/supertonic.d.ts +0 -2
- package/dist/examples/tts/supertonic.js +0 -51
- package/dist/examples/tts/utils.d.ts +0 -17
- package/dist/expo/plugins/resolve-sdk-package-dir.d.ts +0 -15
- package/dist/expo/plugins/resolve-sdk-package-dir.js +0 -31
- package/dist/expo/plugins/withAndroidArchitecture.d.ts +0 -8
- package/dist/expo/plugins/withAndroidArchitecture.js +0 -52
- package/dist/expo/plugins/withAndroidNdkVersion.d.ts +0 -8
- package/dist/expo/plugins/withAndroidNdkVersion.js +0 -31
- package/dist/expo/plugins/withDeviceInfo.d.ts +0 -10
- package/dist/expo/plugins/withDeviceInfo.js +0 -48
- package/dist/logging/addon.d.ts +0 -6
- package/dist/logging/addon.js +0 -75
- package/dist/logging/client-logger.d.ts +0 -3
- package/dist/logging/client-logger.js +0 -24
- package/dist/logging/namespaces.d.ts +0 -6
- package/dist/logging/namespaces.js +0 -6
- package/dist/logging/registry.d.ts +0 -31
- package/dist/logging/registry.js +0 -62
- package/dist/logging/server-logger.d.ts +0 -3
- package/dist/logging/server-logger.js +0 -16
- package/dist/models/registry/models.d.ts +0 -10417
- package/dist/models/registry/models.js +0 -10757
- package/dist/models/update-models/codegen.d.ts +0 -3
- package/dist/models/update-models/codegen.js +0 -135
- package/dist/models/update-models/history.d.ts +0 -24
- package/dist/models/update-models/history.js +0 -107
- package/dist/models/update-models/index.d.ts +0 -2
- package/dist/models/update-models/index.js +0 -125
- package/dist/models/update-models/naming.d.ts +0 -4
- package/dist/models/update-models/naming.js +0 -370
- package/dist/models/update-models/processing.d.ts +0 -8
- package/dist/models/update-models/processing.js +0 -67
- package/dist/models/update-models/registry.d.ts +0 -4
- package/dist/models/update-models/registry.js +0 -67
- package/dist/models/update-models/shards.d.ts +0 -4
- package/dist/models/update-models/shards.js +0 -57
- package/dist/models/update-models/types.d.ts +0 -60
- package/dist/models/update-models/types.js +0 -1
- package/dist/models/update-models/utils.d.ts +0 -3
- package/dist/models/update-models/utils.js +0 -21
- package/dist/pear/pre.d.ts +0 -18
- package/dist/pear/pre.js +0 -433
- package/dist/profiling/aggregator.d.ts +0 -15
- package/dist/profiling/aggregator.js +0 -100
- package/dist/profiling/clock.d.ts +0 -12
- package/dist/profiling/clock.js +0 -51
- package/dist/profiling/controller.d.ts +0 -33
- package/dist/profiling/controller.js +0 -123
- package/dist/profiling/envelope.d.ts +0 -10
- package/dist/profiling/envelope.js +0 -36
- package/dist/profiling/events.d.ts +0 -20
- package/dist/profiling/events.js +0 -37
- package/dist/profiling/exporters.d.ts +0 -10
- package/dist/profiling/exporters.js +0 -236
- package/dist/profiling/index.d.ts +0 -36
- package/dist/profiling/index.js +0 -31
- package/dist/profiling/ring-buffer.d.ts +0 -19
- package/dist/profiling/ring-buffer.js +0 -83
- package/dist/profiling/types.d.ts +0 -47
- package/dist/profiling/types.js +0 -1
- package/dist/schemas/archive.d.ts +0 -9
- package/dist/schemas/archive.js +0 -17
- package/dist/schemas/engine-addon-map.d.ts +0 -5
- package/dist/schemas/engine-addon-map.js +0 -52
- package/dist/schemas/get-model-info.d.ts +0 -120
- package/dist/schemas/get-model-info.js +0 -58
- package/dist/schemas/heartbeat.d.ts +0 -17
- package/dist/schemas/heartbeat.js +0 -10
- package/dist/schemas/json-schema.d.ts +0 -16
- package/dist/schemas/json-schema.js +0 -2
- package/dist/schemas/mcp-adapter.d.ts +0 -47
- package/dist/schemas/mcp-adapter.js +0 -1
- package/dist/schemas/model-src-utils.d.ts +0 -148
- package/dist/schemas/model-src-utils.js +0 -35
- package/dist/schemas/model-types.d.ts +0 -183
- package/dist/schemas/model-types.js +0 -168
- package/dist/schemas/ocr.d.ts +0 -125
- package/dist/schemas/ocr.js +0 -57
- package/dist/schemas/path-validation.d.ts +0 -10
- package/dist/schemas/path-validation.js +0 -22
- package/dist/schemas/plugin.d.ts +0 -226
- package/dist/schemas/plugin.js +0 -158
- package/dist/schemas/profiling.d.ts +0 -105
- package/dist/schemas/profiling.js +0 -66
- package/dist/schemas/registry.d.ts +0 -356
- package/dist/schemas/registry.js +0 -93
- package/dist/schemas/reload-config.d.ts +0 -476
- package/dist/schemas/reload-config.js +0 -44
- package/dist/schemas/runtime-context.d.ts +0 -19
- package/dist/schemas/runtime-context.js +0 -7
- package/dist/schemas/sdk-config.d.ts +0 -2973
- package/dist/schemas/sdk-config.js +0 -136
- package/dist/schemas/sdk-errors-client.d.ts +0 -31
- package/dist/schemas/sdk-errors-client.js +0 -143
- package/dist/schemas/sdk-errors-registry.d.ts +0 -6
- package/dist/schemas/sdk-errors-registry.js +0 -8
- package/dist/schemas/sdk-errors-server.d.ts +0 -89
- package/dist/schemas/sdk-errors-server.js +0 -451
- package/dist/schemas/shard.d.ts +0 -21
- package/dist/schemas/shard.js +0 -17
- package/dist/schemas/tools.d.ts +0 -65
- package/dist/schemas/tools.js +0 -43
- package/dist/schemas/transcription-config.d.ts +0 -383
- package/dist/scripts/run-security-tests-bare.d.ts +0 -2
- package/dist/scripts/run-security-tests-bare.js +0 -78
- package/dist/scripts/run-security-tests.d.ts +0 -2
- package/dist/scripts/run-security-tests.js +0 -22
- package/dist/scripts/run-unit-tests.d.ts +0 -2
- package/dist/scripts/run-unit-tests.js +0 -17
- package/dist/server/bare/ops/embed.d.ts +0 -12
- package/dist/server/bare/ops/load-model.d.ts +0 -9
- package/dist/server/bare/ops/load-model.js +0 -85
- package/dist/server/bare/ops/transcribe.d.ts +0 -3
- package/dist/server/bare/ops/transcribe.js +0 -75
- package/dist/server/bare/ops/translate.d.ts +0 -5
- package/dist/server/bare/ops/unload-model.js +0 -41
- package/dist/server/bare/plugins/index.d.ts +0 -8
- package/dist/server/bare/plugins/index.js +0 -7
- package/dist/server/bare/plugins/llamacpp-completion/ops/cache-logger.d.ts +0 -6
- package/dist/server/bare/plugins/llamacpp-completion/ops/cache-logger.js +0 -34
- package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +0 -220
- package/dist/server/bare/plugins/llamacpp-completion/plugin.js +0 -155
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +0 -54
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +0 -87
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +0 -367
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +0 -201
- package/dist/server/bare/plugins/onnx-ocr/ops/ocr-stream.d.ts +0 -10
- package/dist/server/bare/plugins/onnx-ocr/ops/ocr-stream.js +0 -110
- package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +0 -86
- package/dist/server/bare/plugins/onnx-ocr/plugin.js +0 -117
- package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +0 -373
- package/dist/server/bare/plugins/onnx-tts/plugin.js +0 -182
- package/dist/server/bare/plugins/onnx-tts/wav-helper.d.ts +0 -14
- package/dist/server/bare/plugins/onnx-tts/wav-helper.js +0 -107
- package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +0 -317
- package/dist/server/bare/plugins/parakeet-transcription/plugin.js +0 -154
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +0 -237
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +0 -86
- package/dist/server/bare/rag-hyperdb/handlers/chunk.d.ts +0 -3
- package/dist/server/bare/rag-hyperdb/handlers/chunk.js +0 -7
- package/dist/server/bare/rag-hyperdb/handlers/close-workspace.d.ts +0 -3
- package/dist/server/bare/rag-hyperdb/handlers/close-workspace.js +0 -9
- package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.d.ts +0 -3
- package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.js +0 -14
- package/dist/server/bare/rag-hyperdb/handlers/ingest.d.ts +0 -9
- package/dist/server/bare/rag-hyperdb/handlers/ingest.js +0 -18
- package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.d.ts +0 -3
- package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.js +0 -4
- package/dist/server/bare/rag-hyperdb/handlers/reindex.d.ts +0 -9
- package/dist/server/bare/rag-hyperdb/handlers/reindex.js +0 -16
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +0 -7
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +0 -39
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.d.ts +0 -15
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +0 -136
- package/dist/server/bare/registry/config-registry.d.ts +0 -14
- package/dist/server/bare/registry/config-registry.js +0 -82
- package/dist/server/bare/registry/model-config-registry.d.ts +0 -4
- package/dist/server/bare/registry/model-config-registry.js +0 -15
- package/dist/server/bare/registry/model-config-utils.d.ts +0 -15
- package/dist/server/bare/registry/model-config-utils.js +0 -112
- package/dist/server/bare/registry/registry-client.d.ts +0 -5
- package/dist/server/bare/registry/registry-client.js +0 -37
- package/dist/server/bare/registry/runtime-context-registry.d.ts +0 -7
- package/dist/server/bare/registry/runtime-context-registry.js +0 -26
- package/dist/server/bare/utils/audio-input.d.ts +0 -10
- package/dist/server/bare/utils/audio-input.js +0 -33
- package/dist/server/bare/utils/loader-adapter.d.ts +0 -7
- package/dist/server/bare/utils/loader-adapter.js +0 -9
- package/dist/server/env.d.ts +0 -22
- package/dist/server/env.js +0 -57
- package/dist/server/plugins/index.d.ts +0 -2
- package/dist/server/plugins/index.js +0 -1
- package/dist/server/plugins/registry.d.ts +0 -9
- package/dist/server/plugins/registry.js +0 -79
- package/dist/server/rpc/delegate-transport.d.ts +0 -19
- package/dist/server/rpc/delegate-transport.js +0 -236
- package/dist/server/rpc/delegate-utils.d.ts +0 -2
- package/dist/server/rpc/delegate-utils.js +0 -5
- package/dist/server/rpc/handler-registry.d.ts +0 -3
- package/dist/server/rpc/handler-registry.js +0 -113
- package/dist/server/rpc/handler-utils.d.ts +0 -23
- package/dist/server/rpc/handler-utils.js +0 -170
- package/dist/server/rpc/handlers/cancel-delegated.d.ts +0 -4
- package/dist/server/rpc/handlers/cancel-delegated.js +0 -71
- package/dist/server/rpc/handlers/get-model-info.d.ts +0 -3
- package/dist/server/rpc/handlers/get-model-info.js +0 -164
- package/dist/server/rpc/handlers/heartbeat-delegated.d.ts +0 -4
- package/dist/server/rpc/handlers/heartbeat-delegated.js +0 -32
- package/dist/server/rpc/handlers/heartbeat.d.ts +0 -3
- package/dist/server/rpc/handlers/heartbeat.js +0 -3
- package/dist/server/rpc/handlers/load-model/download-stats.d.ts +0 -6
- package/dist/server/rpc/handlers/load-model/download-stats.js +0 -87
- package/dist/server/rpc/handlers/load-model/handler.js +0 -187
- package/dist/server/rpc/handlers/load-model/registry.d.ts +0 -11
- package/dist/server/rpc/handlers/load-model/registry.js +0 -548
- package/dist/server/rpc/handlers/load-model/types.d.ts +0 -29
- package/dist/server/rpc/handlers/load-model/types.js +0 -1
- package/dist/server/rpc/handlers/ocr-stream.d.ts +0 -3
- package/dist/server/rpc/handlers/ocr-stream.js +0 -4
- package/dist/server/rpc/handlers/plugin-dispatch.d.ts +0 -15
- package/dist/server/rpc/handlers/plugin-dispatch.js +0 -59
- package/dist/server/rpc/handlers/plugin-invoke.d.ts +0 -4
- package/dist/server/rpc/handlers/plugin-invoke.js +0 -92
- package/dist/server/rpc/handlers/registry.d.ts +0 -5
- package/dist/server/rpc/handlers/registry.js +0 -157
- package/dist/server/rpc/handlers/unload-model-delegated.d.ts +0 -3
- package/dist/server/rpc/handlers/unload-model-delegated.js +0 -32
- package/dist/server/rpc/profiling/context.d.ts +0 -18
- package/dist/server/rpc/profiling/context.js +0 -38
- package/dist/server/rpc/profiling/delegation-profiler.d.ts +0 -32
- package/dist/server/rpc/profiling/delegation-profiler.js +0 -154
- package/dist/server/rpc/profiling/index.d.ts +0 -5
- package/dist/server/rpc/profiling/index.js +0 -4
- package/dist/server/rpc/profiling/operation-metrics.d.ts +0 -25
- package/dist/server/rpc/profiling/operation-metrics.js +0 -199
- package/dist/server/rpc/profiling/operation-wrappers.d.ts +0 -18
- package/dist/server/rpc/profiling/operation-wrappers.js +0 -124
- package/dist/server/rpc/profiling/profiler.d.ts +0 -13
- package/dist/server/rpc/profiling/profiler.js +0 -97
- package/dist/server/utils/archive.d.ts +0 -4
- package/dist/server/utils/archive.js +0 -179
- package/dist/server/utils/checksum.d.ts +0 -4
- package/dist/server/utils/checksum.js +0 -31
- package/dist/server/utils/config-transform.d.ts +0 -3
- package/dist/server/utils/config-transform.js +0 -23
- package/dist/server/utils/formatting.d.ts +0 -19
- package/dist/server/utils/formatting.js +0 -61
- package/dist/server/utils/gguf-tensor-extractor.d.ts +0 -15
- package/dist/server/utils/gguf-tensor-extractor.js +0 -314
- package/dist/server/utils/path-security.d.ts +0 -12
- package/dist/server/utils/path-security.js +0 -25
- package/dist/server/utils/shard-utils.d.ts +0 -48
- package/dist/server/utils/shard-utils.js +0 -125
- package/dist/server/worker-core.d.ts +0 -6
- package/dist/server/worker-core.js +0 -88
- package/dist/utils/errors-base.d.ts +0 -3
- package/dist/utils/errors-base.js +0 -13
- package/dist/utils/errors-client.d.ts +0 -137
- package/dist/utils/errors-client.js +0 -240
- package/dist/utils/errors-server.d.ts +0 -236
- package/dist/utils/errors-server.js +0 -412
- package/dist/utils/global-singleton.d.ts +0 -2
- package/dist/utils/global-singleton.js +0 -10
- package/dist/utils/mcp-adapter.d.ts +0 -12
- package/dist/utils/mcp-adapter.js +0 -103
- package/dist/utils/object.d.ts +0 -2
- package/dist/utils/object.js +0 -3
- package/dist/utils/path-sanitize.d.ts +0 -17
- package/dist/utils/path-sanitize.js +0 -54
- package/dist/utils/tool-helpers.d.ts +0 -25
- package/dist/utils/tool-helpers.js +0 -112
- package/expo/plugins/patches/android-link.mjs +0 -63
- package/expo/plugins/patches/ios-link.mjs +0 -63
- /package/dist/examples/{seed-p2p.js → seed-hyperdrive.js} +0 -0
- /package/dist/examples/{transcription/whispercpp-filesystem.d.ts → whispercpp-filesystem.d.ts} +0 -0
- /package/dist/examples/{transcription/whispercpp-microphone-record.d.ts → whispercpp-microphone-record.d.ts} +0 -0
- /package/dist/examples/{transcription/whispercpp-prompt.d.ts → whispercpp-prompt.d.ts} +0 -0
- /package/dist/models/{registry → hyperdrive}/index.d.ts +0 -0
- /package/dist/server/bare/{ops → addons}/cancel.d.ts +0 -0
- /package/dist/server/bare/{plugins/onnx-tts/ops → addons/tts/handlers}/text-to-speech.d.ts +0 -0
- /package/dist/server/bare/{ops → addons}/unload-model.d.ts +0 -0
|
@@ -1,77 +1,52 @@
|
|
|
1
1
|
import fs, { promises as fsPromises } from "bare-fs";
|
|
2
|
-
import path from "bare-path";
|
|
3
2
|
import { Readable } from "bare-stream";
|
|
4
3
|
import fetch from "bare-fetch";
|
|
5
4
|
import { AbortController } from "bare-abort-controller";
|
|
6
|
-
import {
|
|
7
|
-
import { getModelsCacheDir, getShardedModelCacheDir, generateShortHash, detectShardedModel, parsePatternBasedShardUrl, extractTensorsFromShards, calculatePercentage, isArchiveUrl, sanitizePathComponent, extractAndValidateShardedArchive, validateShardedModelCache, checkAllShardsExist, generateShardFilenames, hasValidGGUFHeader, } from "../../../utils/index.js";
|
|
8
|
-
import { getSDKConfig } from "../../../bare/registry/config-registry.js";
|
|
5
|
+
import { getModelsCacheDir, generateShortHash } from "../../../utils/index.js";
|
|
9
6
|
import { getActiveDownload, registerDownload, unregisterDownload, createHttpDownloadKey, shouldClearCache, clearClearCacheFlag, } from "./download-manager.js";
|
|
10
|
-
import { DownloadCancelledError, HTTPError, NoResponseBodyError, PartialDownloadOfflineError, ResponseBodyNotReadableError, } from "../../../../utils/errors-server.js";
|
|
11
|
-
import { getServerLogger } from "../../../../logging/index.js";
|
|
12
|
-
const logger = getServerLogger();
|
|
13
|
-
const DEFAULT_CONCURRENCY = 3;
|
|
14
|
-
const DEFAULT_HTTP_CONNECTION_TIMEOUT_MS = 10_000;
|
|
15
7
|
function extractFilenameFromUrl(url) {
|
|
16
8
|
// Parse URL to get the filename from the path
|
|
17
9
|
const urlParts = url.split("/");
|
|
18
10
|
const filename = urlParts[urlParts.length - 1] || "model.gguf";
|
|
19
11
|
// Remove query parameters if present
|
|
20
12
|
const cleanFilename = filename.split("?")[0] || "model.gguf";
|
|
21
|
-
|
|
22
|
-
return sanitizePathComponent(cleanFilename);
|
|
13
|
+
return cleanFilename;
|
|
23
14
|
}
|
|
24
15
|
async function validateCachedFile(modelPath, url, signal) {
|
|
25
16
|
try {
|
|
26
17
|
await fsPromises.access(modelPath);
|
|
27
18
|
const localStats = await fsPromises.stat(modelPath);
|
|
28
19
|
const localSize = localStats.size;
|
|
29
|
-
|
|
30
|
-
const connectionTimeout = config.httpConnectionTimeoutMs ?? DEFAULT_HTTP_CONNECTION_TIMEOUT_MS;
|
|
20
|
+
// Get expected size from HEAD request
|
|
31
21
|
let expectedSize = 0;
|
|
32
22
|
try {
|
|
33
|
-
const response = await
|
|
23
|
+
const response = await fetch(url, {
|
|
34
24
|
method: "HEAD",
|
|
35
25
|
...(signal && { signal }),
|
|
36
|
-
})
|
|
26
|
+
});
|
|
37
27
|
expectedSize = parseInt(response.headers.get("content-length") || "0");
|
|
38
28
|
}
|
|
39
|
-
catch (
|
|
40
|
-
|
|
41
|
-
logger.info(`📴 Falling back to GGUF header validation...`);
|
|
42
|
-
const hasValidHeader = await hasValidGGUFHeader(modelPath);
|
|
43
|
-
if (hasValidHeader) {
|
|
44
|
-
logger.info(`✅ Offline - GGUF header valid, using cached file: ${modelPath}`);
|
|
45
|
-
return modelPath;
|
|
46
|
-
}
|
|
47
|
-
if (localSize > 0) {
|
|
48
|
-
logger.error(`❌ Offline with partial download (${localSize} bytes). Cannot resume without network.`);
|
|
49
|
-
throw new PartialDownloadOfflineError(url, localSize);
|
|
50
|
-
}
|
|
51
|
-
logger.warn(`⚠️ Offline and GGUF validation failed - file may be incomplete`);
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.log(`⚠️ Could not get expected file size from HEAD request, will re-download: ${String(error)}`);
|
|
52
31
|
return null;
|
|
53
32
|
}
|
|
54
33
|
if (localSize !== expectedSize) {
|
|
55
|
-
|
|
34
|
+
console.log(`📥 Cached file size mismatch. Expected: ${expectedSize}, Found: ${localSize}. Re-downloading...`);
|
|
56
35
|
return null;
|
|
57
36
|
}
|
|
58
|
-
|
|
37
|
+
console.log(`✅ Using cached HTTP model: ${modelPath}`);
|
|
59
38
|
return modelPath;
|
|
60
39
|
}
|
|
61
|
-
catch
|
|
62
|
-
//
|
|
63
|
-
if (error instanceof PartialDownloadOfflineError) {
|
|
64
|
-
throw error;
|
|
65
|
-
}
|
|
66
|
-
// File doesn't exist or other access error
|
|
40
|
+
catch {
|
|
41
|
+
// File doesn't exist
|
|
67
42
|
return null;
|
|
68
43
|
}
|
|
69
44
|
}
|
|
70
45
|
async function performHttpDownload(url, modelPath, downloadKey, progressCallback, signal) {
|
|
71
46
|
if (signal?.aborted) {
|
|
72
|
-
throw new
|
|
47
|
+
throw new Error("Download cancelled");
|
|
73
48
|
}
|
|
74
|
-
|
|
49
|
+
console.log(`📥 Downloading model from HTTP: ${url}`);
|
|
75
50
|
// Check if file exists for resuming
|
|
76
51
|
let startOffset = 0;
|
|
77
52
|
let downloadedBytes = 0;
|
|
@@ -79,74 +54,60 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
79
54
|
const existingStats = await fsPromises.stat(modelPath);
|
|
80
55
|
startOffset = existingStats.size;
|
|
81
56
|
downloadedBytes = startOffset;
|
|
82
|
-
|
|
57
|
+
console.log(`📥 Resuming download from byte ${startOffset}`);
|
|
83
58
|
}
|
|
84
59
|
catch {
|
|
85
|
-
|
|
60
|
+
console.log(`📥 Starting fresh download`);
|
|
86
61
|
}
|
|
87
62
|
// Prepare headers for resume if needed
|
|
88
63
|
const headers = {
|
|
89
64
|
"User-Agent": "qvac-sdk",
|
|
90
65
|
};
|
|
66
|
+
const isPresignedUrl = url.includes("X-Amz-") || // AWS S3
|
|
67
|
+
url.includes("X-Goog-") || // Google Cloud Storage
|
|
68
|
+
(url.includes("sig=") && url.includes("se=")); // Azure Blob Storage SAS
|
|
69
|
+
if (isPresignedUrl) {
|
|
70
|
+
const urlObj = new URL(url);
|
|
71
|
+
headers["host"] = urlObj.hostname; // Override to prevent :443 from being appended
|
|
72
|
+
}
|
|
91
73
|
if (startOffset > 0) {
|
|
92
74
|
headers["Range"] = `bytes=${startOffset}-`;
|
|
93
75
|
}
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
...(signal && { signal }),
|
|
102
|
-
}), connectionTimeout);
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
// Check if it was parent abort
|
|
106
|
-
if (signal?.aborted) {
|
|
107
|
-
throw new DownloadCancelledError();
|
|
108
|
-
}
|
|
109
|
-
// Connection timeout or network error
|
|
110
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
111
|
-
logger.error(`❌ Connection failed: ${errorMsg}. URL: ${url}`);
|
|
112
|
-
throw new HTTPError(0, `Connection failed: ${errorMsg}`, error);
|
|
113
|
-
}
|
|
76
|
+
// Make the fetch request
|
|
77
|
+
const response = await fetch(url, {
|
|
78
|
+
method: "GET",
|
|
79
|
+
headers,
|
|
80
|
+
...(signal && { signal }),
|
|
81
|
+
// bare-fetch automatically follows redirects
|
|
82
|
+
});
|
|
114
83
|
if (!response.ok) {
|
|
115
84
|
// Check if it's a 416 (Range Not Satisfiable) - file already complete
|
|
116
85
|
if (response.status === 416 && startOffset > 0) {
|
|
117
|
-
|
|
118
|
-
// Send 100% progress for already complete file
|
|
119
|
-
if (progressCallback) {
|
|
120
|
-
progressCallback({
|
|
121
|
-
type: "modelProgress",
|
|
122
|
-
downloaded: startOffset,
|
|
123
|
-
total: startOffset,
|
|
124
|
-
percentage: 100,
|
|
125
|
-
downloadKey,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
86
|
+
console.log(`✅ File already completely downloaded`);
|
|
128
87
|
return;
|
|
129
88
|
}
|
|
130
89
|
// Check if server doesn't support range requests
|
|
131
90
|
if (response.status === 200 && startOffset > 0) {
|
|
132
|
-
|
|
91
|
+
console.log(`⚠️ Server doesn't support resume, starting fresh download`);
|
|
133
92
|
startOffset = 0;
|
|
134
93
|
downloadedBytes = 0;
|
|
135
94
|
// Retry without Range header
|
|
136
|
-
|
|
95
|
+
const freshResponse = await fetch(url, {
|
|
137
96
|
method: "GET",
|
|
138
97
|
headers: {
|
|
139
|
-
"User-Agent": "qvac-sdk",
|
|
98
|
+
"User-Agent": "qvac-sdk/1.0",
|
|
140
99
|
},
|
|
141
100
|
...(signal && { signal }),
|
|
142
101
|
});
|
|
143
|
-
if (!
|
|
144
|
-
throw new
|
|
102
|
+
if (!freshResponse.ok) {
|
|
103
|
+
throw new Error(`HTTP error: ${freshResponse.status} ${freshResponse.statusText}`);
|
|
145
104
|
}
|
|
105
|
+
// Use the fresh response
|
|
106
|
+
Object.assign(response, freshResponse);
|
|
146
107
|
}
|
|
147
108
|
else if (response.status !== 206) {
|
|
148
109
|
// 206 is Partial Content (successful resume)
|
|
149
|
-
throw new
|
|
110
|
+
throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
|
|
150
111
|
}
|
|
151
112
|
}
|
|
152
113
|
// Get total size from headers
|
|
@@ -166,14 +127,14 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
166
127
|
// For fresh downloads
|
|
167
128
|
totalBytes = contentLength ? parseInt(contentLength) : 0;
|
|
168
129
|
}
|
|
169
|
-
|
|
130
|
+
console.log(`📏 Total size: ${totalBytes} bytes (${(totalBytes / 1024 / 1024).toFixed(2)} MB)`);
|
|
170
131
|
// Create write stream (append if resuming)
|
|
171
132
|
const writeStreamOptions = startOffset > 0 && response.status === 206 ? { flags: "a" } : {};
|
|
172
133
|
const writeStream = fs.createWriteStream(modelPath, writeStreamOptions);
|
|
173
134
|
// Get the response body
|
|
174
135
|
const body = response.body;
|
|
175
136
|
if (!body) {
|
|
176
|
-
throw new
|
|
137
|
+
throw new Error("No response body received");
|
|
177
138
|
}
|
|
178
139
|
try {
|
|
179
140
|
// Check if body has pipe method (it's a Node/Bare stream)
|
|
@@ -189,7 +150,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
189
150
|
type: "modelProgress",
|
|
190
151
|
downloaded: downloadedBytes,
|
|
191
152
|
total: totalBytes,
|
|
192
|
-
percentage:
|
|
153
|
+
percentage: totalBytes > 0 ? (downloadedBytes / totalBytes) * 100 : 0,
|
|
193
154
|
downloadKey,
|
|
194
155
|
});
|
|
195
156
|
}
|
|
@@ -209,7 +170,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
209
170
|
signal.addEventListener("abort", abortHandler);
|
|
210
171
|
}
|
|
211
172
|
writeStream.on("finish", () => {
|
|
212
|
-
|
|
173
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
213
174
|
if (signal) {
|
|
214
175
|
signal.removeEventListener("abort", abortHandler);
|
|
215
176
|
}
|
|
@@ -225,7 +186,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
225
186
|
// Check if abort signal is triggered
|
|
226
187
|
if (signal && signal.aborted) {
|
|
227
188
|
writeStream.destroy();
|
|
228
|
-
throw new
|
|
189
|
+
throw new Error("Download cancelled");
|
|
229
190
|
}
|
|
230
191
|
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
231
192
|
downloadedBytes += buffer.length;
|
|
@@ -234,7 +195,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
234
195
|
type: "modelProgress",
|
|
235
196
|
downloaded: downloadedBytes,
|
|
236
197
|
total: totalBytes,
|
|
237
|
-
percentage:
|
|
198
|
+
percentage: totalBytes > 0 ? (downloadedBytes / totalBytes) * 100 : 0,
|
|
238
199
|
downloadKey,
|
|
239
200
|
});
|
|
240
201
|
}
|
|
@@ -251,7 +212,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
251
212
|
// Close the write stream
|
|
252
213
|
await new Promise((resolve, reject) => {
|
|
253
214
|
writeStream.end(() => {
|
|
254
|
-
|
|
215
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
255
216
|
resolve();
|
|
256
217
|
});
|
|
257
218
|
writeStream.on("error", reject);
|
|
@@ -276,7 +237,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
276
237
|
type: "modelProgress",
|
|
277
238
|
downloaded: downloadedBytes,
|
|
278
239
|
total: totalBytes,
|
|
279
|
-
percentage:
|
|
240
|
+
percentage: totalBytes > 0 ? (downloadedBytes / totalBytes) * 100 : 0,
|
|
280
241
|
downloadKey,
|
|
281
242
|
});
|
|
282
243
|
}
|
|
@@ -297,41 +258,34 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
297
258
|
// Close the write stream
|
|
298
259
|
await new Promise((resolve, reject) => {
|
|
299
260
|
writeStream.end(() => {
|
|
300
|
-
|
|
261
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
301
262
|
resolve();
|
|
302
263
|
});
|
|
303
264
|
writeStream.on("error", reject);
|
|
304
265
|
});
|
|
305
266
|
}
|
|
306
267
|
else {
|
|
307
|
-
throw new
|
|
268
|
+
throw new Error("Response body is not readable");
|
|
308
269
|
}
|
|
309
270
|
}
|
|
310
271
|
}
|
|
311
272
|
catch (error) {
|
|
312
273
|
writeStream.destroy();
|
|
313
|
-
|
|
274
|
+
console.error("Error during download:", error instanceof Error ? error.message : String(error));
|
|
314
275
|
throw error instanceof Error ? error : new Error(String(error));
|
|
315
276
|
}
|
|
316
277
|
}
|
|
317
|
-
export async function downloadModelFromHttp(url, progressCallback
|
|
318
|
-
const filename = extractFilenameFromUrl(url);
|
|
319
|
-
if (isArchiveUrl(url)) {
|
|
320
|
-
return downloadShardedModelFromArchive(url, progressCallback, hooks);
|
|
321
|
-
}
|
|
322
|
-
const shardInfo = detectShardedModel(filename);
|
|
323
|
-
if (shardInfo.isSharded && shardInfo.totalShards) {
|
|
324
|
-
return downloadShardedModelFromHttp(url, progressCallback, hooks);
|
|
325
|
-
}
|
|
278
|
+
export async function downloadModelFromHttp(url, progressCallback) {
|
|
326
279
|
const downloadKey = createHttpDownloadKey(url);
|
|
280
|
+
// Check if already downloading
|
|
327
281
|
const existing = getActiveDownload(downloadKey);
|
|
328
282
|
if (existing) {
|
|
329
|
-
|
|
330
|
-
hooks?.markCacheMiss();
|
|
283
|
+
console.log(`📥 Reusing existing download for: ${downloadKey}`);
|
|
331
284
|
return existing.promise;
|
|
332
285
|
}
|
|
333
286
|
const cacheDir = getModelsCacheDir();
|
|
334
287
|
const sourceHash = generateShortHash(url);
|
|
288
|
+
const filename = extractFilenameFromUrl(url);
|
|
335
289
|
const modelPath = `${cacheDir}/${sourceHash}_${filename}`;
|
|
336
290
|
// Create managed download with AbortController
|
|
337
291
|
const abortController = new AbortController();
|
|
@@ -340,70 +294,28 @@ export async function downloadModelFromHttp(url, progressCallback, hooks) {
|
|
|
340
294
|
// Check if already cached
|
|
341
295
|
const cachedPath = await validateCachedFile(modelPath, url, abortController.signal);
|
|
342
296
|
if (cachedPath) {
|
|
343
|
-
hooks?.markCacheHit();
|
|
344
|
-
if (progressCallback) {
|
|
345
|
-
try {
|
|
346
|
-
const stats = await fsPromises.stat(cachedPath);
|
|
347
|
-
progressCallback({
|
|
348
|
-
type: "modelProgress",
|
|
349
|
-
downloaded: stats.size,
|
|
350
|
-
total: stats.size,
|
|
351
|
-
percentage: 100,
|
|
352
|
-
downloadKey,
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
catch (error) {
|
|
356
|
-
logger.debug("Failed to get file stats for progress callback", {
|
|
357
|
-
path: cachedPath,
|
|
358
|
-
error,
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
297
|
return cachedPath;
|
|
363
298
|
}
|
|
364
299
|
// Download the file
|
|
365
|
-
hooks?.markCacheMiss();
|
|
366
300
|
await performHttpDownload(url, modelPath, downloadKey, progressCallback, abortController.signal);
|
|
367
|
-
// Send final 100% progress update
|
|
368
|
-
if (progressCallback) {
|
|
369
|
-
try {
|
|
370
|
-
const stats = await fsPromises.stat(modelPath);
|
|
371
|
-
progressCallback({
|
|
372
|
-
type: "modelProgress",
|
|
373
|
-
downloaded: stats.size,
|
|
374
|
-
total: stats.size,
|
|
375
|
-
percentage: 100,
|
|
376
|
-
downloadKey,
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
catch (error) {
|
|
380
|
-
logger.debug("Failed to get file stats for final progress update", {
|
|
381
|
-
path: modelPath,
|
|
382
|
-
error,
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
301
|
return modelPath;
|
|
387
302
|
}
|
|
388
303
|
catch (error) {
|
|
389
|
-
|
|
304
|
+
console.error("❌ Error downloading model:", error instanceof Error ? error.message : String(error));
|
|
390
305
|
// Check if we should delete the partial file (clearCache was requested)
|
|
391
306
|
if (error instanceof Error && error.message === "Download cancelled") {
|
|
392
307
|
if (shouldClearCache(downloadKey)) {
|
|
393
|
-
|
|
308
|
+
console.log("🗑️ Clearing cache - deleting partial file");
|
|
394
309
|
try {
|
|
395
310
|
await fsPromises.unlink(modelPath);
|
|
396
|
-
|
|
311
|
+
console.log(`✅ Deleted partial file: ${modelPath}`);
|
|
397
312
|
}
|
|
398
|
-
catch
|
|
399
|
-
|
|
400
|
-
path: modelPath,
|
|
401
|
-
error,
|
|
402
|
-
});
|
|
313
|
+
catch {
|
|
314
|
+
// Ignore cleanup errors
|
|
403
315
|
}
|
|
404
316
|
}
|
|
405
317
|
else {
|
|
406
|
-
|
|
318
|
+
console.log("📥 Download paused - partial file preserved for resume");
|
|
407
319
|
}
|
|
408
320
|
clearClearCacheFlag(downloadKey);
|
|
409
321
|
}
|
|
@@ -429,278 +341,3 @@ export async function downloadModelFromHttp(url, progressCallback, hooks) {
|
|
|
429
341
|
registerDownload(downloadKey, downloadEntry);
|
|
430
342
|
return downloadPromise;
|
|
431
343
|
}
|
|
432
|
-
async function downloadShardedModelFromHttp(shardUrl, progressCallback, hooks) {
|
|
433
|
-
const config = getSDKConfig();
|
|
434
|
-
const concurrency = config.httpDownloadConcurrency ?? DEFAULT_CONCURRENCY;
|
|
435
|
-
const { shardUrls: shardInfos, cacheKey } = parsePatternBasedShardUrl(shardUrl);
|
|
436
|
-
const downloadKey = `http-sharded:${cacheKey}`;
|
|
437
|
-
logger.info(`📥 HTTP sharded download: ${shardInfos.length} shards detected from ${shardUrl}`);
|
|
438
|
-
const existing = getActiveDownload(downloadKey);
|
|
439
|
-
if (existing) {
|
|
440
|
-
logger.info(`📥 Reusing existing sharded download for: ${downloadKey}`);
|
|
441
|
-
hooks?.markCacheMiss();
|
|
442
|
-
return existing.promise;
|
|
443
|
-
}
|
|
444
|
-
const abortController = new AbortController();
|
|
445
|
-
const shardDir = getShardedModelCacheDir(cacheKey);
|
|
446
|
-
const downloadPromise = (async () => {
|
|
447
|
-
try {
|
|
448
|
-
const shardStates = await Promise.all(shardInfos.map(async (shard, index) => {
|
|
449
|
-
const shardPath = path.join(shardDir, shard.filename);
|
|
450
|
-
let expectedSize = 0;
|
|
451
|
-
try {
|
|
452
|
-
const response = await fetch(shard.url, {
|
|
453
|
-
method: "HEAD",
|
|
454
|
-
signal: abortController.signal,
|
|
455
|
-
});
|
|
456
|
-
expectedSize = parseInt(response.headers.get("content-length") || "0");
|
|
457
|
-
}
|
|
458
|
-
catch (error) {
|
|
459
|
-
logger.warn("Failed to get shard size via HEAD request", {
|
|
460
|
-
url: shard.url,
|
|
461
|
-
error,
|
|
462
|
-
});
|
|
463
|
-
// expectedSize remains 0, progress percentage will be 0
|
|
464
|
-
}
|
|
465
|
-
return {
|
|
466
|
-
index,
|
|
467
|
-
shard,
|
|
468
|
-
shardPath,
|
|
469
|
-
expectedSize,
|
|
470
|
-
downloadedBytes: 0,
|
|
471
|
-
isComplete: false,
|
|
472
|
-
};
|
|
473
|
-
}));
|
|
474
|
-
const overallTotal = shardStates.reduce((sum, s) => sum + s.expectedSize, 0);
|
|
475
|
-
logger.info(`📏 Total size: ${overallTotal} bytes (${(overallTotal / 1024 / 1024).toFixed(2)} MB)`);
|
|
476
|
-
const cacheChecks = await Promise.all(shardStates.map(async (state) => {
|
|
477
|
-
const cached = await validateCachedFile(state.shardPath, state.shard.url, abortController.signal);
|
|
478
|
-
return { state, isCached: cached !== null };
|
|
479
|
-
}));
|
|
480
|
-
const shardsToDownload = cacheChecks
|
|
481
|
-
.filter((c) => !c.isCached)
|
|
482
|
-
.map((c) => c.state);
|
|
483
|
-
for (const check of cacheChecks) {
|
|
484
|
-
if (check.isCached) {
|
|
485
|
-
check.state.isComplete = true;
|
|
486
|
-
check.state.downloadedBytes = check.state.expectedSize;
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
logger.info(`📥 ${shardsToDownload.length} of ${shardInfos.length} shards need downloading`);
|
|
490
|
-
if (shardsToDownload.length === 0) {
|
|
491
|
-
hooks?.markCacheHit();
|
|
492
|
-
}
|
|
493
|
-
else {
|
|
494
|
-
hooks?.markCacheMiss();
|
|
495
|
-
}
|
|
496
|
-
await downloadShardsWithConcurrency(shardsToDownload, shardStates, concurrency, abortController.signal, downloadKey, overallTotal, progressCallback);
|
|
497
|
-
logger.info(`✅ All ${shardInfos.length} shards downloaded successfully`);
|
|
498
|
-
await extractTensorsFromShards(shardDir, shardInfos[0].filename);
|
|
499
|
-
return path.join(shardDir, shardInfos[0].filename);
|
|
500
|
-
}
|
|
501
|
-
catch (error) {
|
|
502
|
-
logger.error("❌ Error during sharded download:", error instanceof Error ? error.message : String(error));
|
|
503
|
-
if (error instanceof Error && error.message === "Download cancelled") {
|
|
504
|
-
if (shouldClearCache(downloadKey)) {
|
|
505
|
-
logger.info("🗑️ Clearing cache - deleting partial shard files");
|
|
506
|
-
try {
|
|
507
|
-
await fsPromises.rm(shardDir, { recursive: true, force: true });
|
|
508
|
-
logger.info(`✅ Deleted shard directory: ${shardDir}`);
|
|
509
|
-
}
|
|
510
|
-
catch (cleanupError) {
|
|
511
|
-
logger.debug("Failed to delete shard directory during cleanup", {
|
|
512
|
-
path: shardDir,
|
|
513
|
-
error: cleanupError,
|
|
514
|
-
});
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
throw error;
|
|
519
|
-
}
|
|
520
|
-
finally {
|
|
521
|
-
unregisterDownload(downloadKey);
|
|
522
|
-
clearClearCacheFlag(downloadKey);
|
|
523
|
-
}
|
|
524
|
-
})();
|
|
525
|
-
registerDownload(downloadKey, {
|
|
526
|
-
key: downloadKey,
|
|
527
|
-
promise: downloadPromise,
|
|
528
|
-
abortController,
|
|
529
|
-
startTime: Date.now(),
|
|
530
|
-
type: "http",
|
|
531
|
-
url: shardUrl,
|
|
532
|
-
modelPath: shardDir,
|
|
533
|
-
});
|
|
534
|
-
return downloadPromise;
|
|
535
|
-
}
|
|
536
|
-
async function downloadShardedModelFromArchive(archiveUrl, progressCallback, hooks) {
|
|
537
|
-
const filename = extractFilenameFromUrl(archiveUrl);
|
|
538
|
-
const sourceHash = generateShortHash(archiveUrl);
|
|
539
|
-
const downloadKey = `http-archive:${sourceHash}`;
|
|
540
|
-
logger.info(`📦 HTTP archive download: ${filename}`);
|
|
541
|
-
const existing = getActiveDownload(downloadKey);
|
|
542
|
-
if (existing) {
|
|
543
|
-
logger.info(`📥 Reusing existing archive download for: ${downloadKey}`);
|
|
544
|
-
hooks?.markCacheMiss();
|
|
545
|
-
return existing.promise;
|
|
546
|
-
}
|
|
547
|
-
const abortController = new AbortController();
|
|
548
|
-
const extractDir = getShardedModelCacheDir(sourceHash);
|
|
549
|
-
const archivePath = path.join(extractDir, `${sourceHash}_${filename}`);
|
|
550
|
-
const downloadPromise = (async () => {
|
|
551
|
-
try {
|
|
552
|
-
await fsPromises.mkdir(extractDir, { recursive: true });
|
|
553
|
-
const files = await fsPromises.readdir(extractDir);
|
|
554
|
-
const shardedFile = files.find((f) => detectShardedModel(String(f)).isSharded);
|
|
555
|
-
if (!shardedFile) {
|
|
556
|
-
hooks?.markCacheMiss();
|
|
557
|
-
return downloadAndExtractArchive();
|
|
558
|
-
}
|
|
559
|
-
const shardFilename = String(shardedFile);
|
|
560
|
-
const allShardsExist = await checkAllShardsExist(extractDir, shardFilename);
|
|
561
|
-
if (!allShardsExist) {
|
|
562
|
-
logger.warn(`⚠️ Incomplete shards found, re-downloading archive`);
|
|
563
|
-
hooks?.markCacheMiss();
|
|
564
|
-
return downloadAndExtractArchive();
|
|
565
|
-
}
|
|
566
|
-
const shardFilenames = generateShardFilenames(shardFilename);
|
|
567
|
-
const firstShard = path.join(extractDir, shardFilenames[0]);
|
|
568
|
-
const isComplete = await validateShardedModelCache(extractDir, shardFilename);
|
|
569
|
-
if (isComplete) {
|
|
570
|
-
logger.info(`✅ Archive already extracted: ${extractDir}`);
|
|
571
|
-
hooks?.markCacheHit();
|
|
572
|
-
if (progressCallback) {
|
|
573
|
-
progressCallback({
|
|
574
|
-
type: "modelProgress",
|
|
575
|
-
downloaded: 1,
|
|
576
|
-
total: 1,
|
|
577
|
-
percentage: 100,
|
|
578
|
-
downloadKey,
|
|
579
|
-
});
|
|
580
|
-
}
|
|
581
|
-
return firstShard;
|
|
582
|
-
}
|
|
583
|
-
logger.info(`📝 All shards present but tensors.txt missing, extracting tensors...`);
|
|
584
|
-
try {
|
|
585
|
-
await extractTensorsFromShards(extractDir, shardFilename);
|
|
586
|
-
logger.info(`✅ Tensors extracted successfully`);
|
|
587
|
-
hooks?.markCacheHit();
|
|
588
|
-
if (progressCallback) {
|
|
589
|
-
progressCallback({
|
|
590
|
-
type: "modelProgress",
|
|
591
|
-
downloaded: 1,
|
|
592
|
-
total: 1,
|
|
593
|
-
percentage: 100,
|
|
594
|
-
downloadKey,
|
|
595
|
-
});
|
|
596
|
-
}
|
|
597
|
-
return firstShard;
|
|
598
|
-
}
|
|
599
|
-
catch (error) {
|
|
600
|
-
logger.warn(`Failed to extract tensors, will re-download archive`, {
|
|
601
|
-
error,
|
|
602
|
-
});
|
|
603
|
-
hooks?.markCacheMiss();
|
|
604
|
-
return downloadAndExtractArchive();
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
catch (error) {
|
|
608
|
-
logger.error("❌ Error downloading/extracting archive:", error);
|
|
609
|
-
throw error;
|
|
610
|
-
}
|
|
611
|
-
finally {
|
|
612
|
-
unregisterDownload(downloadKey);
|
|
613
|
-
}
|
|
614
|
-
async function downloadAndExtractArchive() {
|
|
615
|
-
await performHttpDownload(archiveUrl, archivePath, downloadKey, progressCallback, abortController.signal);
|
|
616
|
-
logger.info(`✅ Archive downloaded, extracting to: ${extractDir}`);
|
|
617
|
-
const firstShardPath = await extractAndValidateShardedArchive(archivePath, extractDir, abortController.signal);
|
|
618
|
-
try {
|
|
619
|
-
await fsPromises.unlink(archivePath);
|
|
620
|
-
logger.info(`🗑️ Cleaned up archive file: ${archivePath}`);
|
|
621
|
-
}
|
|
622
|
-
catch (cleanupError) {
|
|
623
|
-
logger.debug("Failed to delete archive file during cleanup", {
|
|
624
|
-
path: archivePath,
|
|
625
|
-
error: cleanupError,
|
|
626
|
-
});
|
|
627
|
-
}
|
|
628
|
-
return firstShardPath;
|
|
629
|
-
}
|
|
630
|
-
})();
|
|
631
|
-
registerDownload(downloadKey, {
|
|
632
|
-
key: downloadKey,
|
|
633
|
-
promise: downloadPromise,
|
|
634
|
-
abortController,
|
|
635
|
-
startTime: Date.now(),
|
|
636
|
-
type: "http",
|
|
637
|
-
url: archiveUrl,
|
|
638
|
-
modelPath: archivePath,
|
|
639
|
-
});
|
|
640
|
-
return downloadPromise;
|
|
641
|
-
}
|
|
642
|
-
async function downloadShardsWithConcurrency(shardsToDownload, allShards, concurrency, signal, downloadKey, overallTotal, progressCallback) {
|
|
643
|
-
const queue = [...shardsToDownload];
|
|
644
|
-
const inFlight = new Set();
|
|
645
|
-
while (queue.length > 0 || inFlight.size > 0) {
|
|
646
|
-
if (signal.aborted) {
|
|
647
|
-
throw new DownloadCancelledError();
|
|
648
|
-
}
|
|
649
|
-
while (queue.length > 0 && inFlight.size < concurrency) {
|
|
650
|
-
const state = queue.shift();
|
|
651
|
-
const downloadPromise = (async () => {
|
|
652
|
-
logger.info(`📥 Downloading shard ${state.index + 1}: ${state.shard.filename}`);
|
|
653
|
-
await performHttpDownload(state.shard.url, state.shardPath, downloadKey, (progress) => {
|
|
654
|
-
state.downloadedBytes = progress.downloaded;
|
|
655
|
-
if (progressCallback) {
|
|
656
|
-
const overallDownloaded = allShards.reduce((sum, s) => sum + s.downloadedBytes, 0);
|
|
657
|
-
progressCallback({
|
|
658
|
-
type: "modelProgress",
|
|
659
|
-
downloaded: state.downloadedBytes,
|
|
660
|
-
total: state.expectedSize,
|
|
661
|
-
percentage: calculatePercentage(state.downloadedBytes, state.expectedSize),
|
|
662
|
-
downloadKey,
|
|
663
|
-
shardInfo: {
|
|
664
|
-
currentShard: state.index + 1,
|
|
665
|
-
totalShards: allShards.length,
|
|
666
|
-
shardName: state.shard.filename,
|
|
667
|
-
overallDownloaded,
|
|
668
|
-
overallTotal,
|
|
669
|
-
overallPercentage: calculatePercentage(overallDownloaded, overallTotal),
|
|
670
|
-
},
|
|
671
|
-
});
|
|
672
|
-
}
|
|
673
|
-
}, signal);
|
|
674
|
-
logger.info(`✅ Shard ${state.index + 1} complete: ${state.shard.filename}`);
|
|
675
|
-
})().finally(() => {
|
|
676
|
-
inFlight.delete(downloadPromise);
|
|
677
|
-
});
|
|
678
|
-
inFlight.add(downloadPromise);
|
|
679
|
-
}
|
|
680
|
-
if (inFlight.size > 0) {
|
|
681
|
-
await Promise.race(inFlight);
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
// Mark all downloaded shards as complete
|
|
685
|
-
for (const state of shardsToDownload) {
|
|
686
|
-
state.isComplete = true;
|
|
687
|
-
state.downloadedBytes = state.expectedSize;
|
|
688
|
-
}
|
|
689
|
-
if (progressCallback) {
|
|
690
|
-
progressCallback({
|
|
691
|
-
type: "modelProgress",
|
|
692
|
-
downloaded: overallTotal,
|
|
693
|
-
total: overallTotal,
|
|
694
|
-
percentage: 100,
|
|
695
|
-
downloadKey,
|
|
696
|
-
shardInfo: {
|
|
697
|
-
currentShard: allShards.length,
|
|
698
|
-
totalShards: allShards.length,
|
|
699
|
-
shardName: allShards[allShards.length - 1].shard.filename,
|
|
700
|
-
overallDownloaded: overallTotal,
|
|
701
|
-
overallTotal,
|
|
702
|
-
overallPercentage: 100,
|
|
703
|
-
},
|
|
704
|
-
});
|
|
705
|
-
}
|
|
706
|
-
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ModelProgressUpdate } from "../../../../schemas/index";
|
|
2
|
-
import type { DownloadMetricsHooks } from "./types";
|
|
3
2
|
export declare function deleteCorestoreDirectory(corestoreDir: string): Promise<void>;
|
|
4
|
-
export declare function downloadModelFromHyperdrive(hyperdriveKey: string, modelFileName: string, seed?: boolean, progressCallback?: (progress: ModelProgressUpdate) => void,
|
|
3
|
+
export declare function downloadModelFromHyperdrive(hyperdriveKey: string, modelFileName: string, seed?: boolean, progressCallback?: (progress: ModelProgressUpdate) => void, expectedChecksum?: string): Promise<string>;
|
|
5
4
|
//# sourceMappingURL=hyperdrive.d.ts.map
|