@qvac/sdk 0.8.1 → 1.0.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 +70 -121
- 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 -9
- package/dist/client/api/transcribe.js +9 -11
- 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/whispercpp-filesystem.js +43 -0
- package/dist/examples/{transcription/whispercpp-microphone-record.js → whispercpp-microphone-record.js} +9 -8
- 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 +619 -0
- package/dist/models/hyperdrive/models.js +693 -0
- package/dist/schemas/cancel.d.ts +0 -18
- package/dist/schemas/cancel.js +0 -7
- package/dist/schemas/common.d.ts +166 -3012
- 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 +893 -14471
- 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/transcription.d.ts +0 -3
- package/dist/schemas/transcription.js +0 -1
- 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 +25 -0
- package/dist/schemas/whispercpp-config.js +18 -0
- 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 +87 -54
- 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 +55 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +48 -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 -16
- package/dist/server/bare/registry/model-registry.js +13 -34
- 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 +41 -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 +55 -424
- 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 +24 -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/utils/tool-parser.js +14 -28
- 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/transcription/whispercpp-filesystem.js +0 -69
- package/dist/examples/transcription/whispercpp-prompt.d.ts +0 -2
- package/dist/examples/transcription/whispercpp-prompt.js +0 -67
- 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/schemas/transcription-config.js +0 -95
- 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/utils/tool-integration.d.ts +0 -13
- package/dist/server/utils/tool-integration.js +0 -43
- 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/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,53 @@
|
|
|
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
|
-
|
|
42
|
-
|
|
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`);
|
|
52
|
-
return null;
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.log(`⚠️ Could not get expected file size from HEAD request: ${String(error)}`);
|
|
31
|
+
console.log(`✅ Using cached HTTP model: ${modelPath}`);
|
|
32
|
+
return modelPath;
|
|
53
33
|
}
|
|
54
|
-
if (localSize !== expectedSize) {
|
|
55
|
-
|
|
34
|
+
if (expectedSize > 0 && localSize !== expectedSize) {
|
|
35
|
+
console.log(`📥 Cached file size mismatch. Expected: ${expectedSize}, Found: ${localSize}. Re-downloading...`);
|
|
56
36
|
return null;
|
|
57
37
|
}
|
|
58
|
-
|
|
38
|
+
console.log(`✅ Using cached HTTP model: ${modelPath}`);
|
|
59
39
|
return modelPath;
|
|
60
40
|
}
|
|
61
|
-
catch
|
|
62
|
-
//
|
|
63
|
-
if (error instanceof PartialDownloadOfflineError) {
|
|
64
|
-
throw error;
|
|
65
|
-
}
|
|
66
|
-
// File doesn't exist or other access error
|
|
41
|
+
catch {
|
|
42
|
+
// File doesn't exist
|
|
67
43
|
return null;
|
|
68
44
|
}
|
|
69
45
|
}
|
|
70
46
|
async function performHttpDownload(url, modelPath, downloadKey, progressCallback, signal) {
|
|
71
47
|
if (signal?.aborted) {
|
|
72
|
-
throw new
|
|
48
|
+
throw new Error("Download cancelled");
|
|
73
49
|
}
|
|
74
|
-
|
|
50
|
+
console.log(`📥 Downloading model from HTTP: ${url}`);
|
|
75
51
|
// Check if file exists for resuming
|
|
76
52
|
let startOffset = 0;
|
|
77
53
|
let downloadedBytes = 0;
|
|
@@ -79,10 +55,10 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
79
55
|
const existingStats = await fsPromises.stat(modelPath);
|
|
80
56
|
startOffset = existingStats.size;
|
|
81
57
|
downloadedBytes = startOffset;
|
|
82
|
-
|
|
58
|
+
console.log(`📥 Resuming download from byte ${startOffset}`);
|
|
83
59
|
}
|
|
84
60
|
catch {
|
|
85
|
-
|
|
61
|
+
console.log(`📥 Starting fresh download`);
|
|
86
62
|
}
|
|
87
63
|
// Prepare headers for resume if needed
|
|
88
64
|
const headers = {
|
|
@@ -91,62 +67,41 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
91
67
|
if (startOffset > 0) {
|
|
92
68
|
headers["Range"] = `bytes=${startOffset}-`;
|
|
93
69
|
}
|
|
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
|
-
}
|
|
70
|
+
// Make the fetch request
|
|
71
|
+
const response = await fetch(url, {
|
|
72
|
+
method: "GET",
|
|
73
|
+
headers,
|
|
74
|
+
...(signal && { signal }),
|
|
75
|
+
// bare-fetch automatically follows redirects
|
|
76
|
+
});
|
|
114
77
|
if (!response.ok) {
|
|
115
78
|
// Check if it's a 416 (Range Not Satisfiable) - file already complete
|
|
116
79
|
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
|
-
}
|
|
80
|
+
console.log(`✅ File already completely downloaded`);
|
|
128
81
|
return;
|
|
129
82
|
}
|
|
130
83
|
// Check if server doesn't support range requests
|
|
131
84
|
if (response.status === 200 && startOffset > 0) {
|
|
132
|
-
|
|
85
|
+
console.log(`⚠️ Server doesn't support resume, starting fresh download`);
|
|
133
86
|
startOffset = 0;
|
|
134
87
|
downloadedBytes = 0;
|
|
135
88
|
// Retry without Range header
|
|
136
|
-
|
|
89
|
+
const freshResponse = await fetch(url, {
|
|
137
90
|
method: "GET",
|
|
138
91
|
headers: {
|
|
139
|
-
"User-Agent": "qvac-sdk",
|
|
92
|
+
"User-Agent": "qvac-sdk/1.0",
|
|
140
93
|
},
|
|
141
94
|
...(signal && { signal }),
|
|
142
95
|
});
|
|
143
|
-
if (!
|
|
144
|
-
throw new
|
|
96
|
+
if (!freshResponse.ok) {
|
|
97
|
+
throw new Error(`HTTP error: ${freshResponse.status} ${freshResponse.statusText}`);
|
|
145
98
|
}
|
|
99
|
+
// Use the fresh response
|
|
100
|
+
Object.assign(response, freshResponse);
|
|
146
101
|
}
|
|
147
102
|
else if (response.status !== 206) {
|
|
148
103
|
// 206 is Partial Content (successful resume)
|
|
149
|
-
throw new
|
|
104
|
+
throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
|
|
150
105
|
}
|
|
151
106
|
}
|
|
152
107
|
// Get total size from headers
|
|
@@ -166,14 +121,14 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
166
121
|
// For fresh downloads
|
|
167
122
|
totalBytes = contentLength ? parseInt(contentLength) : 0;
|
|
168
123
|
}
|
|
169
|
-
|
|
124
|
+
console.log(`📏 Total size: ${totalBytes} bytes (${(totalBytes / 1024 / 1024).toFixed(2)} MB)`);
|
|
170
125
|
// Create write stream (append if resuming)
|
|
171
126
|
const writeStreamOptions = startOffset > 0 && response.status === 206 ? { flags: "a" } : {};
|
|
172
127
|
const writeStream = fs.createWriteStream(modelPath, writeStreamOptions);
|
|
173
128
|
// Get the response body
|
|
174
129
|
const body = response.body;
|
|
175
130
|
if (!body) {
|
|
176
|
-
throw new
|
|
131
|
+
throw new Error("No response body received");
|
|
177
132
|
}
|
|
178
133
|
try {
|
|
179
134
|
// Check if body has pipe method (it's a Node/Bare stream)
|
|
@@ -189,7 +144,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
189
144
|
type: "modelProgress",
|
|
190
145
|
downloaded: downloadedBytes,
|
|
191
146
|
total: totalBytes,
|
|
192
|
-
percentage:
|
|
147
|
+
percentage: totalBytes > 0 ? (downloadedBytes / totalBytes) * 100 : 0,
|
|
193
148
|
downloadKey,
|
|
194
149
|
});
|
|
195
150
|
}
|
|
@@ -209,7 +164,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
209
164
|
signal.addEventListener("abort", abortHandler);
|
|
210
165
|
}
|
|
211
166
|
writeStream.on("finish", () => {
|
|
212
|
-
|
|
167
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
213
168
|
if (signal) {
|
|
214
169
|
signal.removeEventListener("abort", abortHandler);
|
|
215
170
|
}
|
|
@@ -225,7 +180,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
225
180
|
// Check if abort signal is triggered
|
|
226
181
|
if (signal && signal.aborted) {
|
|
227
182
|
writeStream.destroy();
|
|
228
|
-
throw new
|
|
183
|
+
throw new Error("Download cancelled");
|
|
229
184
|
}
|
|
230
185
|
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
231
186
|
downloadedBytes += buffer.length;
|
|
@@ -234,7 +189,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
234
189
|
type: "modelProgress",
|
|
235
190
|
downloaded: downloadedBytes,
|
|
236
191
|
total: totalBytes,
|
|
237
|
-
percentage:
|
|
192
|
+
percentage: totalBytes > 0 ? (downloadedBytes / totalBytes) * 100 : 0,
|
|
238
193
|
downloadKey,
|
|
239
194
|
});
|
|
240
195
|
}
|
|
@@ -251,7 +206,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
251
206
|
// Close the write stream
|
|
252
207
|
await new Promise((resolve, reject) => {
|
|
253
208
|
writeStream.end(() => {
|
|
254
|
-
|
|
209
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
255
210
|
resolve();
|
|
256
211
|
});
|
|
257
212
|
writeStream.on("error", reject);
|
|
@@ -276,7 +231,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
276
231
|
type: "modelProgress",
|
|
277
232
|
downloaded: downloadedBytes,
|
|
278
233
|
total: totalBytes,
|
|
279
|
-
percentage:
|
|
234
|
+
percentage: totalBytes > 0 ? (downloadedBytes / totalBytes) * 100 : 0,
|
|
280
235
|
downloadKey,
|
|
281
236
|
});
|
|
282
237
|
}
|
|
@@ -297,41 +252,34 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
297
252
|
// Close the write stream
|
|
298
253
|
await new Promise((resolve, reject) => {
|
|
299
254
|
writeStream.end(() => {
|
|
300
|
-
|
|
255
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
301
256
|
resolve();
|
|
302
257
|
});
|
|
303
258
|
writeStream.on("error", reject);
|
|
304
259
|
});
|
|
305
260
|
}
|
|
306
261
|
else {
|
|
307
|
-
throw new
|
|
262
|
+
throw new Error("Response body is not readable");
|
|
308
263
|
}
|
|
309
264
|
}
|
|
310
265
|
}
|
|
311
266
|
catch (error) {
|
|
312
267
|
writeStream.destroy();
|
|
313
|
-
|
|
268
|
+
console.error("Error during download:", error instanceof Error ? error.message : String(error));
|
|
314
269
|
throw error instanceof Error ? error : new Error(String(error));
|
|
315
270
|
}
|
|
316
271
|
}
|
|
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
|
-
}
|
|
272
|
+
export async function downloadModelFromHttp(url, progressCallback) {
|
|
326
273
|
const downloadKey = createHttpDownloadKey(url);
|
|
274
|
+
// Check if already downloading
|
|
327
275
|
const existing = getActiveDownload(downloadKey);
|
|
328
276
|
if (existing) {
|
|
329
|
-
|
|
330
|
-
hooks?.markCacheMiss();
|
|
277
|
+
console.log(`📥 Reusing existing download for: ${downloadKey}`);
|
|
331
278
|
return existing.promise;
|
|
332
279
|
}
|
|
333
280
|
const cacheDir = getModelsCacheDir();
|
|
334
281
|
const sourceHash = generateShortHash(url);
|
|
282
|
+
const filename = extractFilenameFromUrl(url);
|
|
335
283
|
const modelPath = `${cacheDir}/${sourceHash}_${filename}`;
|
|
336
284
|
// Create managed download with AbortController
|
|
337
285
|
const abortController = new AbortController();
|
|
@@ -340,70 +288,28 @@ export async function downloadModelFromHttp(url, progressCallback, hooks) {
|
|
|
340
288
|
// Check if already cached
|
|
341
289
|
const cachedPath = await validateCachedFile(modelPath, url, abortController.signal);
|
|
342
290
|
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
291
|
return cachedPath;
|
|
363
292
|
}
|
|
364
293
|
// Download the file
|
|
365
|
-
hooks?.markCacheMiss();
|
|
366
294
|
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
295
|
return modelPath;
|
|
387
296
|
}
|
|
388
297
|
catch (error) {
|
|
389
|
-
|
|
298
|
+
console.error("❌ Error downloading model:", error instanceof Error ? error.message : String(error));
|
|
390
299
|
// Check if we should delete the partial file (clearCache was requested)
|
|
391
300
|
if (error instanceof Error && error.message === "Download cancelled") {
|
|
392
301
|
if (shouldClearCache(downloadKey)) {
|
|
393
|
-
|
|
302
|
+
console.log("🗑️ Clearing cache - deleting partial file");
|
|
394
303
|
try {
|
|
395
304
|
await fsPromises.unlink(modelPath);
|
|
396
|
-
|
|
305
|
+
console.log(`✅ Deleted partial file: ${modelPath}`);
|
|
397
306
|
}
|
|
398
|
-
catch
|
|
399
|
-
|
|
400
|
-
path: modelPath,
|
|
401
|
-
error,
|
|
402
|
-
});
|
|
307
|
+
catch {
|
|
308
|
+
// Ignore cleanup errors
|
|
403
309
|
}
|
|
404
310
|
}
|
|
405
311
|
else {
|
|
406
|
-
|
|
312
|
+
console.log("📥 Download paused - partial file preserved for resume");
|
|
407
313
|
}
|
|
408
314
|
clearClearCacheFlag(downloadKey);
|
|
409
315
|
}
|
|
@@ -429,278 +335,3 @@ export async function downloadModelFromHttp(url, progressCallback, hooks) {
|
|
|
429
335
|
registerDownload(downloadKey, downloadEntry);
|
|
430
336
|
return downloadPromise;
|
|
431
337
|
}
|
|
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
|