@qvac/sdk 0.8.0 → 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 -13
- package/dist/client/api/cancel.js +6 -16
- 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 +1 -5
- package/dist/client/api/index.js +1 -5
- 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 +1 -1
- package/dist/client/api/ping.js +2 -3
- 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.js +4 -39
- 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.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/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 -6
- package/dist/schemas/cancel.js +0 -5
- package/dist/schemas/common.d.ts +164 -2973
- package/dist/schemas/common.js +1 -23
- package/dist/schemas/completion-stream.d.ts +60 -31
- package/dist/schemas/completion-stream.js +44 -20
- package/dist/schemas/delegate.d.ts +0 -1
- package/dist/schemas/delegate.js +0 -1
- 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 +1 -19
- package/dist/schemas/index.js +1 -19
- 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 -14358
- 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/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 +46 -157
- 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 +12 -32
- 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 +6 -18
- 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 +21 -59
- 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 -141
- package/NOTICE +0 -358
- 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/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/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/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/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 -204
- 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 -215
- package/dist/server/rpc/handler-registry.d.ts +0 -3
- package/dist/server/rpc/handler-registry.js +0 -90
- package/dist/server/rpc/handler-utils.d.ts +0 -23
- package/dist/server/rpc/handler-utils.js +0 -128
- 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/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 -564
- 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/ping.d.ts +0 -3
- package/dist/server/rpc/handlers/ping.js +0 -3
- 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/{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,41 +1,42 @@
|
|
|
1
1
|
import fs, { promises as fsPromises } from "bare-fs";
|
|
2
2
|
import path from "bare-path";
|
|
3
|
+
import crypto from "bare-crypto";
|
|
3
4
|
import Corestore from "corestore";
|
|
4
5
|
import Hyperswarm, {} from "hyperswarm";
|
|
5
6
|
import Hyperdrive from "hyperdrive";
|
|
6
7
|
import {} from "bare-stream";
|
|
7
8
|
import { AbortController } from "bare-abort-controller";
|
|
8
|
-
import { getEnv } from "../../../
|
|
9
|
-
import { getModelsCacheDir, generateShortHash
|
|
10
|
-
import { getModelBySrc } from "../../../../models/
|
|
9
|
+
import { getEnv } from "../../../worker.js";
|
|
10
|
+
import { getModelsCacheDir, generateShortHash } from "../../../utils/index.js";
|
|
11
|
+
import { getModelBySrc } from "../../../../models/hyperdrive/index.js";
|
|
11
12
|
import { getActiveDownload, registerDownload, unregisterDownload, createHyperdriveDownloadKey, shouldClearCache, clearClearCacheFlag, } from "./download-manager.js";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
function createProgressHandler(blob, progressCallback, downloadKey, initialBytes = 0) {
|
|
14
|
+
let downloadedBytes = initialBytes;
|
|
15
|
+
return (index, bytes) => {
|
|
16
|
+
if (index >= blob.blockOffset &&
|
|
17
|
+
index < blob.blockOffset + blob.blockLength) {
|
|
18
|
+
downloadedBytes += bytes;
|
|
19
|
+
if (progressCallback && downloadKey) {
|
|
20
|
+
progressCallback({
|
|
21
|
+
type: "modelProgress",
|
|
22
|
+
downloaded: downloadedBytes,
|
|
23
|
+
total: blob.byteLength,
|
|
24
|
+
percentage: blob.byteLength > 0 ? (downloadedBytes / blob.byteLength) * 100 : 0,
|
|
25
|
+
downloadKey,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
18
30
|
}
|
|
19
31
|
async function setupHyperdrive(hyperdriveKey, corestoreDir) {
|
|
20
32
|
const corestore = new Corestore(corestoreDir);
|
|
21
33
|
await corestore.ready();
|
|
22
34
|
const drive = new Hyperdrive(corestore, Buffer.from(hyperdriveKey, "hex"));
|
|
23
35
|
await drive.ready();
|
|
24
|
-
const
|
|
25
|
-
const config = getSDKConfig();
|
|
26
|
-
const relayPublicKeys = config.swarmRelays;
|
|
27
|
-
if (!relayPublicKeys || relayPublicKeys.length === 0) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
return relayPublicKeys.map((key) => Buffer.from(key, "hex"));
|
|
31
|
-
};
|
|
32
|
-
const swarmOptions = {
|
|
33
|
-
relayThrough: getRelays,
|
|
34
|
-
};
|
|
35
|
-
const swarm = new Hyperswarm(swarmOptions);
|
|
36
|
+
const swarm = new Hyperswarm();
|
|
36
37
|
const doneFindingPeers = drive.findingPeers();
|
|
37
38
|
swarm.on("connection", (connection) => {
|
|
38
|
-
|
|
39
|
+
console.log(`🤝 Connected to peer for hyperdrive download`);
|
|
39
40
|
drive.replicate(connection);
|
|
40
41
|
});
|
|
41
42
|
swarm.join(drive.discoveryKey, { server: false, client: true });
|
|
@@ -43,7 +44,7 @@ async function setupHyperdrive(hyperdriveKey, corestoreDir) {
|
|
|
43
44
|
return { corestore, drive, swarm, corestoreDir };
|
|
44
45
|
}
|
|
45
46
|
async function cleanupHyperdrive(setup) {
|
|
46
|
-
|
|
47
|
+
console.log("🧹 Cleaning up hyperdrive setup");
|
|
47
48
|
if (!setup.swarm.suspended) {
|
|
48
49
|
try {
|
|
49
50
|
await setup.swarm.suspend();
|
|
@@ -57,12 +58,12 @@ async function cleanupHyperdrive(setup) {
|
|
|
57
58
|
await setup.corestore.close();
|
|
58
59
|
}
|
|
59
60
|
export async function deleteCorestoreDirectory(corestoreDir) {
|
|
60
|
-
|
|
61
|
+
console.log(`🗑️ DELETING corestore directory... ${corestoreDir}`);
|
|
61
62
|
try {
|
|
62
63
|
await fsPromises.rm(corestoreDir, { recursive: true, force: true });
|
|
63
64
|
}
|
|
64
65
|
catch (e) {
|
|
65
|
-
|
|
66
|
+
console.error(`Error deleting corestore directory: ${e instanceof Error ? e.message : String(e)}`);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
async function findFileInHyperdrive(drive, modelFileName) {
|
|
@@ -102,7 +103,7 @@ async function findFileInHyperdrive(drive, modelFileName) {
|
|
|
102
103
|
const filesInfo = availableFiles.length > 0
|
|
103
104
|
? `Available files: ${availableFiles.join(", ")}`
|
|
104
105
|
: "Could not list available files";
|
|
105
|
-
throw new
|
|
106
|
+
throw new Error(`File ${modelFileName} not found in hyperdrive. ${filesInfo}`);
|
|
106
107
|
}
|
|
107
108
|
async function checkFileDownloaded(drive, entry) {
|
|
108
109
|
const blobs = await drive.getBlobs();
|
|
@@ -142,7 +143,40 @@ async function validateFileExistence(drive, file) {
|
|
|
142
143
|
totalBytes,
|
|
143
144
|
};
|
|
144
145
|
}
|
|
145
|
-
async function
|
|
146
|
+
async function validateFileChecksum(filePath, expectedChecksum) {
|
|
147
|
+
console.log(`🔍 Validating SHA256 checksum...`);
|
|
148
|
+
return new Promise((resolve) => {
|
|
149
|
+
try {
|
|
150
|
+
const hash = crypto.createHash("sha256");
|
|
151
|
+
const stream = fs.createReadStream(filePath);
|
|
152
|
+
stream.on("data", (chunk) => {
|
|
153
|
+
hash.update(chunk);
|
|
154
|
+
});
|
|
155
|
+
stream.on("end", () => {
|
|
156
|
+
const actualChecksum = hash.digest("hex");
|
|
157
|
+
console.log(`Expected: ${String(expectedChecksum)}`);
|
|
158
|
+
console.log(`Actual: ${String(actualChecksum)}`);
|
|
159
|
+
const isValid = actualChecksum === expectedChecksum;
|
|
160
|
+
if (isValid) {
|
|
161
|
+
console.log(`✅ Checksum validation passed!`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.log(`❌ Checksum validation FAILED! File may be corrupted.`);
|
|
165
|
+
}
|
|
166
|
+
resolve(isValid);
|
|
167
|
+
});
|
|
168
|
+
stream.on("error", (error) => {
|
|
169
|
+
console.error(`❌ Error validating checksum: ${error.message}`);
|
|
170
|
+
resolve(false);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error(`❌ Error validating checksum: ${error instanceof Error ? error.message : String(error)}`);
|
|
175
|
+
resolve(false);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
async function validateCachedFile(modelPath, modelFileName, expectedSize, expectedChecksum) {
|
|
146
180
|
try {
|
|
147
181
|
await fsPromises.access(modelPath);
|
|
148
182
|
const localStats = await fsPromises.stat(modelPath);
|
|
@@ -150,16 +184,21 @@ async function validateCachedFile(modelPath, modelFileName, expectedSize, expect
|
|
|
150
184
|
// For hyperdrive: only validate if file is complete
|
|
151
185
|
// Partial files are ignored - corestore state is the source of truth for resume
|
|
152
186
|
if (localSize === expectedSize) {
|
|
153
|
-
|
|
187
|
+
console.log(`✅ Model cached with correct size: ${modelPath}`);
|
|
154
188
|
// Always validate checksum if provided, even when size matches
|
|
155
189
|
if (expectedChecksum && expectedChecksum.length === 64) {
|
|
156
|
-
const
|
|
157
|
-
if (
|
|
158
|
-
|
|
190
|
+
const isValid = await validateFileChecksum(modelPath, expectedChecksum);
|
|
191
|
+
if (isValid) {
|
|
192
|
+
return modelPath;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
throw new Error(`File ${modelFileName} is fully downloaded but checksum validation failed. Expected: ${expectedChecksum}. File may be corrupted.`);
|
|
159
196
|
}
|
|
160
197
|
}
|
|
161
|
-
|
|
162
|
-
|
|
198
|
+
else {
|
|
199
|
+
console.log(`✅ Model already cached and size validated: ${modelPath}`);
|
|
200
|
+
return modelPath;
|
|
201
|
+
}
|
|
163
202
|
}
|
|
164
203
|
// File exists but incomplete - will be overwritten during download
|
|
165
204
|
// Resume state will be determined by corestore blocks, not file size
|
|
@@ -170,66 +209,91 @@ async function validateCachedFile(modelPath, modelFileName, expectedSize, expect
|
|
|
170
209
|
return null;
|
|
171
210
|
}
|
|
172
211
|
}
|
|
173
|
-
async function
|
|
212
|
+
async function performHyperdriveDownload(modelPath, modelFileName, hyperdriveKey, corestoreDir, downloadKey, progressCallback, seed, signal) {
|
|
174
213
|
// Check if already aborted
|
|
175
214
|
if (signal?.aborted) {
|
|
176
|
-
throw new
|
|
215
|
+
throw new Error("Download cancelled");
|
|
177
216
|
}
|
|
178
|
-
|
|
217
|
+
console.log(`Downloading model from hyperdrive ${hyperdriveKey} to ${modelPath}`);
|
|
179
218
|
const setup = await setupHyperdrive(hyperdriveKey, corestoreDir);
|
|
219
|
+
// Set up abort handler
|
|
220
|
+
let readStream;
|
|
221
|
+
let writeStream;
|
|
180
222
|
const cleanup = () => {
|
|
181
|
-
|
|
223
|
+
console.log("🛑 Aborting hyperdrive download...");
|
|
182
224
|
setup.swarm.suspended = true;
|
|
183
225
|
setup.swarm.suspend().catch(() => {
|
|
184
226
|
// Ignore errors during emergency suspend
|
|
185
227
|
});
|
|
228
|
+
// Destroy streams if they exist
|
|
229
|
+
if (readStream) {
|
|
230
|
+
readStream.destroy();
|
|
231
|
+
}
|
|
232
|
+
if (writeStream) {
|
|
233
|
+
writeStream.destroy();
|
|
234
|
+
}
|
|
186
235
|
};
|
|
187
236
|
signal?.addEventListener("abort", cleanup);
|
|
188
|
-
let
|
|
237
|
+
let downloadHandler;
|
|
189
238
|
try {
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
239
|
+
const { entry, blobs, targetPath, blocksDownloaded, totalBlocks, totalBytes, } = await validateFileExistence(setup.drive, modelFileName);
|
|
240
|
+
const blob = entry?.value?.blob;
|
|
241
|
+
if (!blob) {
|
|
242
|
+
throw new Error(`No blob found for ${modelFileName}`);
|
|
243
|
+
}
|
|
244
|
+
// Calculate already downloaded bytes for resuming
|
|
245
|
+
const bytesPerBlock = totalBlocks > 0 ? totalBytes / totalBlocks : 0;
|
|
246
|
+
const initialBytes = Math.floor(blocksDownloaded * bytesPerBlock);
|
|
247
|
+
// Track only downloads for blocks within our file's blob range
|
|
248
|
+
downloadHandler = createProgressHandler(blob, progressCallback, downloadKey, initialBytes);
|
|
249
|
+
blobs.core.on("download", downloadHandler);
|
|
250
|
+
// Check if aborted before starting streams
|
|
251
|
+
if (signal?.aborted) {
|
|
252
|
+
throw new Error("Download cancelled");
|
|
253
|
+
}
|
|
254
|
+
// Trigger download for this file (hyperdrive will only download missing blocks)
|
|
255
|
+
setup.drive.download(targetPath);
|
|
256
|
+
readStream = setup.drive.createReadStream(targetPath);
|
|
257
|
+
writeStream = fs.createWriteStream(modelPath);
|
|
258
|
+
// Pipe the streams
|
|
259
|
+
readStream.pipe(writeStream);
|
|
260
|
+
// Wait for download to complete
|
|
261
|
+
await new Promise((resolve, reject) => {
|
|
262
|
+
writeStream.on("finish", resolve);
|
|
263
|
+
writeStream.on("error", reject);
|
|
264
|
+
readStream.on("error", reject);
|
|
265
|
+
// Also reject on abort
|
|
266
|
+
signal?.addEventListener("abort", () => {
|
|
267
|
+
reject(new Error("Download cancelled"));
|
|
268
|
+
}, { once: true });
|
|
269
|
+
});
|
|
270
|
+
console.log(`✅ Model downloaded successfully to ${modelPath}`);
|
|
271
|
+
// Delete corestore directory after successful download (only when not seeding, to save space)
|
|
272
|
+
if (!seed) {
|
|
273
|
+
await deleteCorestoreDirectory(setup.corestoreDir);
|
|
214
274
|
}
|
|
215
|
-
downloadSucceeded = true;
|
|
216
275
|
}
|
|
217
276
|
catch (error) {
|
|
218
|
-
|
|
277
|
+
console.error("❌ Error during hyperdrive download:", error instanceof Error ? error.message : String(error));
|
|
219
278
|
// Preserve cancellation errors
|
|
220
279
|
if (error instanceof Error && error.message === "Download cancelled") {
|
|
221
280
|
throw error;
|
|
222
281
|
}
|
|
223
|
-
throw new
|
|
282
|
+
throw new Error(`Download failed for ${modelFileName} from hyperdrive: ${hyperdriveKey}`);
|
|
224
283
|
}
|
|
225
284
|
finally {
|
|
226
285
|
signal?.removeEventListener("abort", cleanup);
|
|
286
|
+
if (downloadHandler) {
|
|
287
|
+
try {
|
|
288
|
+
const { blobs } = await validateFileExistence(setup.drive, modelFileName);
|
|
289
|
+
blobs.core.off("download", downloadHandler);
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
// If we can't get blobs, setup is already closed
|
|
293
|
+
}
|
|
294
|
+
}
|
|
227
295
|
if (!seed) {
|
|
228
296
|
await cleanupHyperdrive(setup);
|
|
229
|
-
// Delete only after close - Windows EBUSY on LOCK if deleted before corestore.close()
|
|
230
|
-
if (downloadSucceeded) {
|
|
231
|
-
await deleteCorestoreDirectory(corestoreDir);
|
|
232
|
-
}
|
|
233
297
|
}
|
|
234
298
|
// Only delete corestore and partial file if user explicitly requested clearCache
|
|
235
299
|
if (signal?.aborted && shouldClearCache(downloadKey)) {
|
|
@@ -244,110 +308,56 @@ async function downloadSingleFileToFilesystem(modelPath, modelFileName, hyperdri
|
|
|
244
308
|
clearClearCacheFlag(downloadKey);
|
|
245
309
|
}
|
|
246
310
|
}
|
|
247
|
-
async function
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
311
|
+
export async function downloadModelFromHyperdrive(hyperdriveKey, modelFileName, seed, progressCallback, expectedChecksum) {
|
|
312
|
+
const downloadKey = createHyperdriveDownloadKey(hyperdriveKey, modelFileName);
|
|
313
|
+
// Check if already downloading
|
|
314
|
+
const existing = getActiveDownload(downloadKey);
|
|
315
|
+
if (existing) {
|
|
316
|
+
return existing.promise;
|
|
252
317
|
}
|
|
253
|
-
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
const
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const baseProgress = {
|
|
267
|
-
type: "modelProgress",
|
|
268
|
-
downloaded: cappedDownloaded,
|
|
269
|
-
total: totalBytes,
|
|
270
|
-
percentage: calculatePercentage(cappedDownloaded, totalBytes),
|
|
271
|
-
downloadKey: progressContext.downloadKey,
|
|
272
|
-
};
|
|
273
|
-
if (progressContext.shardInfo) {
|
|
274
|
-
const currentOverall = progressContext.shardInfo.overallDownloaded + cappedDownloaded;
|
|
275
|
-
progressContext.callback({
|
|
276
|
-
...baseProgress,
|
|
277
|
-
shardInfo: {
|
|
278
|
-
currentShard: progressContext.shardInfo.currentShard,
|
|
279
|
-
totalShards: progressContext.shardInfo.totalShards,
|
|
280
|
-
shardName: progressContext.shardInfo.shardName,
|
|
281
|
-
overallDownloaded: currentOverall,
|
|
282
|
-
overallTotal: progressContext.shardInfo.overallTotal,
|
|
283
|
-
overallPercentage: progressContext.shardInfo.overallTotal > 0
|
|
284
|
-
? (currentOverall / progressContext.shardInfo.overallTotal) *
|
|
285
|
-
100
|
|
286
|
-
: 0,
|
|
287
|
-
},
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
progressContext.callback(baseProgress);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
blobs.core.on("download", progressHandler);
|
|
297
|
-
let readStream;
|
|
298
|
-
let writeStream;
|
|
299
|
-
try {
|
|
300
|
-
// Download blocks and stream to file
|
|
301
|
-
drive.download(targetPath);
|
|
302
|
-
readStream = drive.createReadStream(targetPath);
|
|
303
|
-
writeStream = fs.createWriteStream(targetFilePath);
|
|
304
|
-
readStream.pipe(writeStream);
|
|
305
|
-
await new Promise((resolve, reject) => {
|
|
306
|
-
writeStream.on("finish", resolve);
|
|
307
|
-
writeStream.on("error", reject);
|
|
308
|
-
readStream.on("error", reject);
|
|
309
|
-
signal?.addEventListener("abort", () => reject(new Error("Download cancelled")), { once: true });
|
|
310
|
-
});
|
|
311
|
-
blobs.core.off("download", progressHandler);
|
|
312
|
-
// Validate file size
|
|
313
|
-
const stats = await fsPromises.stat(targetFilePath);
|
|
314
|
-
if (stats.size !== fileSizeToValidate) {
|
|
315
|
-
throw new ChecksumValidationFailedError(`${path.basename(targetFilePath)}. File size mismatch: expected ${fileSizeToValidate}, got ${stats.size}`);
|
|
316
|
-
}
|
|
317
|
-
// Validate checksum
|
|
318
|
-
if (expectedChecksum && expectedChecksum.length === 64) {
|
|
319
|
-
const checksum = await measureChecksum(targetFilePath, hooks);
|
|
320
|
-
if (checksum !== expectedChecksum) {
|
|
321
|
-
await fsPromises.unlink(targetFilePath);
|
|
322
|
-
throw new ChecksumValidationFailedError(`${path.basename(targetFilePath)}. Expected: ${expectedChecksum}. Actual: ${checksum}`);
|
|
318
|
+
const corestoreDir = path.join(getEnv().HOME_DIR, ".qvac", "corestore", hyperdriveKey);
|
|
319
|
+
const cacheDir = getModelsCacheDir();
|
|
320
|
+
const sourceHash = generateShortHash(`${hyperdriveKey}/${modelFileName}`);
|
|
321
|
+
const modelPath = path.join(cacheDir, `${sourceHash}_${modelFileName}`);
|
|
322
|
+
// Get model definition to get expected size (if it's a known model)
|
|
323
|
+
const model = getModelBySrc(modelFileName, hyperdriveKey);
|
|
324
|
+
// First, check if we already have a valid cached file (only if we have model metadata)
|
|
325
|
+
if (model) {
|
|
326
|
+
const cachedPath = await validateCachedFile(modelPath, modelFileName, model.expectedSize, expectedChecksum || model.sha256Checksum);
|
|
327
|
+
if (cachedPath) {
|
|
328
|
+
// Delete any leftover corestore directory from previous runs (only when not seeding)
|
|
329
|
+
if (!seed) {
|
|
330
|
+
await deleteCorestoreDirectory(corestoreDir);
|
|
323
331
|
}
|
|
332
|
+
return cachedPath;
|
|
324
333
|
}
|
|
325
|
-
else if (!expectedChecksum) {
|
|
326
|
-
logger.warn(`⚠️ No checksum available for validation`);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
catch (error) {
|
|
330
|
-
if (readStream) {
|
|
331
|
-
readStream.destroy();
|
|
332
|
-
}
|
|
333
|
-
if (writeStream) {
|
|
334
|
-
writeStream.destroy();
|
|
335
|
-
}
|
|
336
|
-
blobs.core.off("download", progressHandler);
|
|
337
|
-
throw error;
|
|
338
334
|
}
|
|
339
|
-
|
|
340
|
-
function createManagedDownload(downloadKey, hyperdriveKey, modelFileName, downloadFn, progressCallback) {
|
|
335
|
+
// Create managed download with AbortController
|
|
341
336
|
const abortController = new AbortController();
|
|
342
337
|
const downloadPromise = (async () => {
|
|
343
338
|
try {
|
|
344
|
-
|
|
339
|
+
// Download the file from hyperdrive
|
|
340
|
+
await performHyperdriveDownload(modelPath, modelFileName, hyperdriveKey, corestoreDir, downloadKey, progressCallback, seed, abortController.signal);
|
|
341
|
+
// Validate checksum using provided checksum or model's checksum (if available)
|
|
342
|
+
const checksumToValidate = expectedChecksum || model?.sha256Checksum;
|
|
343
|
+
if (checksumToValidate && checksumToValidate.length === 64) {
|
|
344
|
+
const isValid = await validateFileChecksum(modelPath, checksumToValidate);
|
|
345
|
+
if (!isValid) {
|
|
346
|
+
await fsPromises.unlink(modelPath);
|
|
347
|
+
throw new Error(`Checksum validation failed for ${modelFileName}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
console.log(`⚠️ No valid checksum available for validation`);
|
|
352
|
+
}
|
|
353
|
+
return modelPath;
|
|
345
354
|
}
|
|
346
355
|
finally {
|
|
356
|
+
// Cleanup from download manager
|
|
347
357
|
unregisterDownload(downloadKey);
|
|
348
|
-
clearClearCacheFlag(downloadKey);
|
|
349
358
|
}
|
|
350
359
|
})();
|
|
360
|
+
// Register download
|
|
351
361
|
const downloadEntry = {
|
|
352
362
|
key: downloadKey,
|
|
353
363
|
promise: downloadPromise,
|
|
@@ -361,206 +371,3 @@ function createManagedDownload(downloadKey, hyperdriveKey, modelFileName, downlo
|
|
|
361
371
|
registerDownload(downloadKey, downloadEntry);
|
|
362
372
|
return downloadPromise;
|
|
363
373
|
}
|
|
364
|
-
async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileName, shardMetadata, progressCallback, seed, signal, hooks) {
|
|
365
|
-
if (signal?.aborted) {
|
|
366
|
-
throw new DownloadCancelledError();
|
|
367
|
-
}
|
|
368
|
-
const shardInfo = detectShardedModel(firstShardFileName);
|
|
369
|
-
if (!shardInfo.isSharded || !shardInfo.totalShards) {
|
|
370
|
-
throw new ModelLoadFailedError(`Not a sharded model: ${firstShardFileName}`);
|
|
371
|
-
}
|
|
372
|
-
const shardDir = getShardedModelCacheDir(hyperdriveKey);
|
|
373
|
-
const allFiles = shardMetadata.map((s) => s.filename);
|
|
374
|
-
const numberedShardCount = shardInfo.totalShards;
|
|
375
|
-
logger.info(`Downloading sharded model with ${numberedShardCount} numbered shards + ${allFiles.length - numberedShardCount} companion files to ${shardDir}`);
|
|
376
|
-
// Check which files need to be downloaded
|
|
377
|
-
const invalidIndices = await checkShardCompleteness(hyperdriveKey, allFiles, shardMetadata, hooks ? (ms) => hooks.addChecksumValidationTimeMs(ms) : undefined);
|
|
378
|
-
if (invalidIndices.length === 0) {
|
|
379
|
-
logger.info(`✅ All ${allFiles.length} files already downloaded and validated`);
|
|
380
|
-
hooks?.markCacheHit();
|
|
381
|
-
if (progressCallback) {
|
|
382
|
-
const overallTotal = shardMetadata.reduce((sum, shard) => sum + shard.expectedSize, 0);
|
|
383
|
-
const lastFile = allFiles[allFiles.length - 1];
|
|
384
|
-
progressCallback({
|
|
385
|
-
type: "modelProgress",
|
|
386
|
-
downloaded: overallTotal,
|
|
387
|
-
total: overallTotal,
|
|
388
|
-
percentage: 100,
|
|
389
|
-
downloadKey: createHyperdriveDownloadKey(hyperdriveKey, firstShardFileName),
|
|
390
|
-
shardInfo: {
|
|
391
|
-
currentShard: allFiles.length,
|
|
392
|
-
totalShards: allFiles.length,
|
|
393
|
-
shardName: lastFile,
|
|
394
|
-
overallDownloaded: overallTotal,
|
|
395
|
-
overallTotal,
|
|
396
|
-
overallPercentage: 100,
|
|
397
|
-
},
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
await extractTensorsFromShards(shardDir, firstShardFileName);
|
|
401
|
-
return getShardPath(hyperdriveKey, allFiles[0]);
|
|
402
|
-
}
|
|
403
|
-
logger.info(`📥 Need to download ${invalidIndices.length} of ${allFiles.length} files`);
|
|
404
|
-
hooks?.markCacheMiss();
|
|
405
|
-
// Setup hyperdrive once for all shards
|
|
406
|
-
const corestoreDir = getCorestoreDir(hyperdriveKey);
|
|
407
|
-
const setup = await setupHyperdrive(hyperdriveKey, corestoreDir);
|
|
408
|
-
const cleanup = () => {
|
|
409
|
-
logger.info("🛑 Aborting sharded hyperdrive download...");
|
|
410
|
-
setup.swarm.suspended = true;
|
|
411
|
-
setup.swarm.suspend().catch(() => {
|
|
412
|
-
// Ignore errors during emergency suspend
|
|
413
|
-
});
|
|
414
|
-
};
|
|
415
|
-
signal?.addEventListener("abort", cleanup);
|
|
416
|
-
let downloadSucceeded = false;
|
|
417
|
-
try {
|
|
418
|
-
// Calculate overall progress
|
|
419
|
-
const overallTotal = shardMetadata.reduce((sum, shard) => sum + shard.expectedSize, 0);
|
|
420
|
-
let overallDownloaded = 0;
|
|
421
|
-
// Download each file sequentially
|
|
422
|
-
for (let i = 0; i < allFiles.length; i++) {
|
|
423
|
-
if (signal?.aborted) {
|
|
424
|
-
throw new DownloadCancelledError();
|
|
425
|
-
}
|
|
426
|
-
const file = allFiles[i];
|
|
427
|
-
const fileMeta = shardMetadata[i];
|
|
428
|
-
const filePath = getShardPath(hyperdriveKey, file);
|
|
429
|
-
// Skip if already valid
|
|
430
|
-
if (!invalidIndices.includes(i)) {
|
|
431
|
-
logger.debug(`✅ File ${i + 1}/${allFiles.length} already valid: ${file}`);
|
|
432
|
-
overallDownloaded += fileMeta.expectedSize;
|
|
433
|
-
// Report progress for skipped files
|
|
434
|
-
if (progressCallback) {
|
|
435
|
-
progressCallback({
|
|
436
|
-
type: "modelProgress",
|
|
437
|
-
downloaded: fileMeta.expectedSize,
|
|
438
|
-
total: fileMeta.expectedSize,
|
|
439
|
-
percentage: 100,
|
|
440
|
-
downloadKey: createHyperdriveDownloadKey(hyperdriveKey, firstShardFileName),
|
|
441
|
-
shardInfo: {
|
|
442
|
-
currentShard: i + 1,
|
|
443
|
-
totalShards: allFiles.length,
|
|
444
|
-
shardName: file,
|
|
445
|
-
overallDownloaded,
|
|
446
|
-
overallTotal,
|
|
447
|
-
overallPercentage: calculatePercentage(overallDownloaded, overallTotal),
|
|
448
|
-
},
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
continue;
|
|
452
|
-
}
|
|
453
|
-
logger.info(`📥 Downloading file ${i + 1}/${allFiles.length}: ${file}`);
|
|
454
|
-
const progressContext = progressCallback
|
|
455
|
-
? {
|
|
456
|
-
downloadKey: createHyperdriveDownloadKey(hyperdriveKey, firstShardFileName),
|
|
457
|
-
callback: progressCallback,
|
|
458
|
-
shardInfo: {
|
|
459
|
-
currentShard: i + 1,
|
|
460
|
-
totalShards: allFiles.length,
|
|
461
|
-
shardName: file,
|
|
462
|
-
overallDownloaded,
|
|
463
|
-
overallTotal,
|
|
464
|
-
},
|
|
465
|
-
}
|
|
466
|
-
: undefined;
|
|
467
|
-
await downloadAndValidateFile(setup.drive, file, filePath, fileMeta.expectedSize, fileMeta.sha256Checksum, progressContext, signal, hooks);
|
|
468
|
-
if (signal?.aborted) {
|
|
469
|
-
throw new DownloadCancelledError();
|
|
470
|
-
}
|
|
471
|
-
logger.info(`✅ File ${i + 1}/${allFiles.length} downloaded and validated`);
|
|
472
|
-
overallDownloaded += fileMeta.expectedSize;
|
|
473
|
-
}
|
|
474
|
-
if (progressCallback && overallDownloaded === overallTotal) {
|
|
475
|
-
const lastFile = allFiles[allFiles.length - 1];
|
|
476
|
-
progressCallback({
|
|
477
|
-
type: "modelProgress",
|
|
478
|
-
downloaded: overallTotal,
|
|
479
|
-
total: overallTotal,
|
|
480
|
-
percentage: 100,
|
|
481
|
-
downloadKey: createHyperdriveDownloadKey(hyperdriveKey, firstShardFileName),
|
|
482
|
-
shardInfo: {
|
|
483
|
-
currentShard: allFiles.length,
|
|
484
|
-
totalShards: allFiles.length,
|
|
485
|
-
shardName: lastFile,
|
|
486
|
-
overallDownloaded,
|
|
487
|
-
overallTotal,
|
|
488
|
-
overallPercentage: 100,
|
|
489
|
-
},
|
|
490
|
-
});
|
|
491
|
-
}
|
|
492
|
-
await extractTensorsFromShards(shardDir, firstShardFileName);
|
|
493
|
-
downloadSucceeded = true;
|
|
494
|
-
}
|
|
495
|
-
catch (error) {
|
|
496
|
-
logger.error("❌ Error during sharded hyperdrive download:", error instanceof Error ? error.message : String(error));
|
|
497
|
-
// Preserve cancellation errors
|
|
498
|
-
if (error instanceof Error && error.message === "Download cancelled") {
|
|
499
|
-
throw error;
|
|
500
|
-
}
|
|
501
|
-
throw new HyperdriveDownloadFailedError(`Sharded download failed for ${firstShardFileName} from hyperdrive: ${hyperdriveKey}`, error);
|
|
502
|
-
}
|
|
503
|
-
finally {
|
|
504
|
-
signal?.removeEventListener("abort", cleanup);
|
|
505
|
-
if (!seed) {
|
|
506
|
-
await cleanupHyperdrive(setup);
|
|
507
|
-
// Delete only after close - Windows EBUSY on LOCK if deleted before corestore.close()
|
|
508
|
-
if (downloadSucceeded) {
|
|
509
|
-
await deleteCorestoreDirectory(corestoreDir);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
// Only delete corestore and partial files if user explicitly requested clearCache
|
|
513
|
-
const downloadKey = createHyperdriveDownloadKey(hyperdriveKey, firstShardFileName);
|
|
514
|
-
if (signal?.aborted && shouldClearCache(downloadKey)) {
|
|
515
|
-
await deleteCorestoreDirectory(corestoreDir);
|
|
516
|
-
}
|
|
517
|
-
clearClearCacheFlag(downloadKey);
|
|
518
|
-
}
|
|
519
|
-
return getShardPath(hyperdriveKey, allFiles[0]);
|
|
520
|
-
}
|
|
521
|
-
export async function downloadModelFromHyperdrive(hyperdriveKey, modelFileName, seed, progressCallback, hooks, expectedChecksum) {
|
|
522
|
-
const downloadKey = createHyperdriveDownloadKey(hyperdriveKey, modelFileName);
|
|
523
|
-
// Check if already downloading
|
|
524
|
-
const existing = getActiveDownload(downloadKey);
|
|
525
|
-
if (existing) {
|
|
526
|
-
hooks?.markCacheMiss();
|
|
527
|
-
return existing.promise;
|
|
528
|
-
}
|
|
529
|
-
const shardInfo = detectShardedModel(modelFileName);
|
|
530
|
-
const model = getModelBySrc(modelFileName, hyperdriveKey);
|
|
531
|
-
if (shardInfo.isSharded && model?.shardMetadata) {
|
|
532
|
-
return createManagedDownload(downloadKey, hyperdriveKey, modelFileName, (signal) => downloadShardedFilesToFilesystem(hyperdriveKey, modelFileName, model.shardMetadata, progressCallback, seed, signal, hooks), progressCallback);
|
|
533
|
-
}
|
|
534
|
-
// Non-sharded model download
|
|
535
|
-
const corestoreDir = getCorestoreDir(hyperdriveKey);
|
|
536
|
-
const cacheDir = getModelsCacheDir();
|
|
537
|
-
const sourceHash = generateShortHash(`${hyperdriveKey}/${modelFileName}`);
|
|
538
|
-
const modelPath = path.join(cacheDir, `${sourceHash}_${modelFileName}`);
|
|
539
|
-
// First, check if we already have a valid cached file (only if we have model metadata)
|
|
540
|
-
if (model) {
|
|
541
|
-
const cachedPath = await validateCachedFile(modelPath, modelFileName, model.expectedSize, expectedChecksum || model.sha256Checksum, hooks);
|
|
542
|
-
if (cachedPath) {
|
|
543
|
-
hooks?.markCacheHit();
|
|
544
|
-
if (progressCallback) {
|
|
545
|
-
progressCallback({
|
|
546
|
-
type: "modelProgress",
|
|
547
|
-
downloaded: model.expectedSize,
|
|
548
|
-
total: model.expectedSize,
|
|
549
|
-
percentage: 100,
|
|
550
|
-
downloadKey,
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
// Delete any leftover corestore directory from previous runs (only when not seeding)
|
|
554
|
-
if (!seed) {
|
|
555
|
-
await deleteCorestoreDirectory(corestoreDir);
|
|
556
|
-
}
|
|
557
|
-
return cachedPath;
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
hooks?.markCacheMiss();
|
|
561
|
-
return createManagedDownload(downloadKey, hyperdriveKey, modelFileName, async (signal) => {
|
|
562
|
-
const checksumToValidate = expectedChecksum || model?.sha256Checksum || "";
|
|
563
|
-
await downloadSingleFileToFilesystem(modelPath, modelFileName, hyperdriveKey, corestoreDir, downloadKey, checksumToValidate, progressCallback, seed, signal, hooks);
|
|
564
|
-
return modelPath;
|
|
565
|
-
}, progressCallback);
|
|
566
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { handleLoadModel } from "
|
|
1
|
+
export { handleLoadModel } from "../load-model";
|
|
2
|
+
export { downloadModelFromHyperdrive } from "./hyperdrive";
|
|
2
3
|
export { resolveModelPath } from "./resolve";
|
|
3
|
-
export { createCancelFunction } from "./download-manager";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { handleLoadModel } from "
|
|
1
|
+
export { handleLoadModel } from "../load-model";
|
|
2
|
+
export { downloadModelFromHyperdrive } from "./hyperdrive.js";
|
|
2
3
|
export { resolveModelPath } from "./resolve.js";
|
|
3
|
-
export { createCancelFunction } from "./download-manager.js";
|