@qvac/sdk 0.9.2 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +42 -95
- package/dist/client/api/cancel.d.ts +1 -1
- package/dist/client/api/cancel.js +1 -1
- package/dist/client/api/completion-stream.d.ts +51 -12
- package/dist/client/api/completion-stream.js +129 -56
- package/dist/client/api/delete-cache.d.ts +1 -0
- package/dist/client/api/delete-cache.js +1 -0
- package/dist/client/api/diffusion.d.ts +17 -2
- package/dist/client/api/diffusion.js +21 -4
- package/dist/client/api/embed.d.ts +4 -0
- package/dist/client/api/finetune.d.ts +21 -0
- package/dist/client/api/get-loaded-model-info.d.ts +25 -0
- package/dist/client/api/get-loaded-model-info.js +36 -0
- package/dist/client/api/get-model-info.d.ts +9 -1
- package/dist/client/api/get-model-info.js +8 -0
- package/dist/client/api/heartbeat.d.ts +2 -2
- package/dist/client/api/heartbeat.js +2 -2
- package/dist/client/api/index.d.ts +3 -1
- package/dist/client/api/index.js +3 -1
- package/dist/client/api/invoke-plugin.d.ts +16 -0
- package/dist/client/api/invoke-plugin.js +16 -0
- package/dist/client/api/load-model.d.ts +36 -3
- package/dist/client/api/load-model.js +31 -10
- package/dist/client/api/provide.d.ts +11 -5
- package/dist/client/api/provide.js +11 -6
- package/dist/client/api/rag.d.ts +9 -0
- package/dist/client/api/rag.js +9 -0
- package/dist/client/api/registry.d.ts +26 -0
- package/dist/client/api/registry.js +26 -0
- package/dist/client/api/resume.d.ts +20 -4
- package/dist/client/api/resume.js +20 -4
- package/dist/client/api/state.d.ts +23 -0
- package/dist/client/api/state.js +29 -0
- package/dist/client/api/stop-provider.d.ts +11 -5
- package/dist/client/api/stop-provider.js +11 -5
- package/dist/client/api/suspend.d.ts +21 -3
- package/dist/client/api/suspend.js +21 -3
- package/dist/client/api/text-to-speech.d.ts +64 -6
- package/dist/client/api/text-to-speech.js +423 -47
- package/dist/client/api/transcribe.d.ts +29 -4
- package/dist/client/api/transcribe.js +86 -28
- package/dist/client/api/translate.d.ts +1 -0
- package/dist/client/api/translate.js +1 -0
- package/dist/client/rpc/bare-client.js +22 -1
- package/dist/client/rpc/expo-rpc-client.d.ts +1 -1
- package/dist/client/rpc/expo-rpc-client.js +96 -4
- package/dist/client/rpc/node-rpc-client.js +36 -0
- package/dist/examples/audio/mic-input.d.ts +9 -0
- package/dist/examples/audio/mic-input.js +111 -0
- package/dist/examples/completion-events.d.ts +18 -0
- package/dist/examples/completion-events.js +79 -0
- package/dist/examples/delegated-inference/composite.js +12 -18
- package/dist/examples/delegated-inference/consumer-profiled.js +4 -11
- package/dist/examples/delegated-inference/consumer.js +8 -13
- package/dist/examples/delegated-inference/provider.js +11 -16
- package/dist/examples/diffusion-flux2-klein-img2img.d.ts +2 -0
- package/dist/examples/diffusion-flux2-klein-img2img.js +60 -0
- package/dist/examples/diffusion-flux2-klein.js +1 -0
- package/dist/examples/diffusion-img2img.d.ts +2 -0
- package/dist/examples/diffusion-img2img.js +49 -0
- package/dist/examples/diffusion-txt2img.js +2 -1
- package/dist/examples/kv-cache-example.js +11 -12
- package/dist/examples/llamacpp-cache.d.ts +2 -0
- package/dist/examples/llamacpp-cache.js +107 -0
- package/dist/examples/llamacpp-dynamic-tools.d.ts +2 -0
- package/dist/examples/llamacpp-dynamic-tools.js +144 -0
- package/dist/examples/llamacpp-structured-output.d.ts +2 -0
- package/dist/examples/llamacpp-structured-output.js +106 -0
- package/dist/examples/plugins.js +4 -4
- package/dist/examples/suspend-resume.js +21 -4
- package/dist/examples/{llamacpp-native-tools.js → tools/llamacpp-native-tools.js} +6 -55
- package/dist/examples/tools/llamacpp-tools-harmony-multiturn.d.ts +2 -0
- package/dist/examples/tools/llamacpp-tools-harmony-multiturn.js +81 -0
- package/dist/examples/tools/llamacpp-tools-pythonic.d.ts +2 -0
- package/dist/examples/tools/llamacpp-tools-pythonic.js +50 -0
- package/dist/examples/tools/shared.d.ts +21 -0
- package/dist/examples/tools/shared.js +42 -0
- package/dist/examples/transcription/parakeet-microphone-record.js +6 -33
- package/dist/examples/transcription/whispercpp-filesystem-streaming.js +7 -5
- package/dist/examples/transcription/whispercpp-filesystem.js +12 -3
- package/dist/examples/transcription/whispercpp-microphone-record.js +6 -29
- package/dist/examples/translation/translation-stream.js +5 -5
- package/dist/examples/tts/llm-to-tts-streaming.d.ts +16 -0
- package/dist/examples/tts/llm-to-tts-streaming.js +143 -0
- package/dist/examples/tts/supertonic-multilingual.js +3 -3
- package/dist/examples/tts/supertonic.js +3 -3
- package/dist/examples/tts/utils.d.ts +11 -1
- package/dist/examples/tts/utils.js +70 -17
- package/dist/examples/voice-assistant/voice-assistant.d.ts +2 -0
- package/dist/examples/voice-assistant/voice-assistant.js +207 -0
- package/dist/expo/plugins/withMobileBundle.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/logging/logger.d.ts +11 -0
- package/dist/logging/logger.js +11 -0
- package/dist/logging/types.d.ts +18 -0
- package/dist/models/registry/models.d.ts +6973 -7457
- package/dist/models/registry/models.js +6889 -6855
- package/dist/models/update-models/codegen.js +84 -23
- package/dist/models/update-models/companions.d.ts +18 -0
- package/dist/models/update-models/companions.js +175 -0
- package/dist/models/update-models/naming.js +0 -25
- package/dist/models/update-models/registry.d.ts +1 -0
- package/dist/models/update-models/registry.js +23 -3
- package/dist/models/update-models/types.d.ts +37 -9
- package/dist/profiling/index.d.ts +49 -0
- package/dist/profiling/index.js +49 -0
- package/dist/schemas/cancel.d.ts +6 -2
- package/dist/schemas/cancel.js +14 -7
- package/dist/schemas/common.d.ts +354 -271
- package/dist/schemas/common.js +26 -5
- package/dist/schemas/completion-event.d.ts +225 -0
- package/dist/schemas/completion-event.js +79 -0
- package/dist/schemas/completion-stream.d.ts +126 -31
- package/dist/schemas/completion-stream.js +138 -36
- package/dist/schemas/delegate.d.ts +0 -2
- package/dist/schemas/delegate.js +25 -6
- package/dist/schemas/download-asset.d.ts +5 -5
- package/dist/schemas/embed.js +21 -9
- package/dist/schemas/engine-addon-map.d.ts +11 -1
- package/dist/schemas/engine-addon-map.js +2 -2
- package/dist/schemas/get-loaded-model-info.d.ts +52 -0
- package/dist/schemas/get-loaded-model-info.js +44 -0
- package/dist/schemas/get-model-info.d.ts +2 -2
- package/dist/schemas/get-model-info.js +103 -32
- package/dist/schemas/heartbeat.d.ts +0 -1
- package/dist/schemas/index.d.ts +4 -1
- package/dist/schemas/index.js +4 -1
- package/dist/schemas/llamacpp-config.d.ts +14 -4
- package/dist/schemas/llamacpp-config.js +5 -0
- package/dist/schemas/load-model.d.ts +3233 -1260
- package/dist/schemas/load-model.js +23 -16
- package/dist/schemas/model-src-utils.d.ts +7 -6
- package/dist/schemas/model-src-utils.js +27 -1
- package/dist/schemas/model-types.d.ts +4 -4
- package/dist/schemas/ocr.d.ts +1 -1
- package/dist/schemas/plugin.d.ts +27 -3
- package/dist/schemas/plugin.js +27 -2
- package/dist/schemas/profiling.js +11 -3
- package/dist/schemas/provide.d.ts +1 -3
- package/dist/schemas/provide.js +0 -3
- package/dist/schemas/rag.d.ts +4 -4
- package/dist/schemas/registry.d.ts +10 -10
- package/dist/schemas/registry.js +36 -14
- package/dist/schemas/reload-config.d.ts +73 -7
- package/dist/schemas/sdcpp-config.d.ts +16 -8
- package/dist/schemas/sdcpp-config.js +118 -25
- package/dist/schemas/sdk-config.d.ts +116 -90
- package/dist/schemas/sdk-config.js +16 -0
- package/dist/schemas/sdk-errors-client.d.ts +3 -0
- package/dist/schemas/sdk-errors-client.js +16 -1
- package/dist/schemas/sdk-errors-server.d.ts +3 -0
- package/dist/schemas/sdk-errors-server.js +23 -0
- package/dist/schemas/state.d.ts +23 -0
- package/dist/schemas/state.js +14 -0
- package/dist/schemas/stop-provide.d.ts +0 -5
- package/dist/schemas/stop-provide.js +2 -6
- package/dist/schemas/text-to-speech.d.ts +93 -27
- package/dist/schemas/text-to-speech.js +27 -0
- package/dist/schemas/tools.d.ts +16 -0
- package/dist/schemas/tools.js +15 -0
- package/dist/schemas/transcription-config.d.ts +8 -8
- package/dist/schemas/transcription.d.ts +33 -0
- package/dist/schemas/transcription.js +9 -0
- package/dist/schemas/translate.js +59 -19
- package/dist/schemas/translation-config.d.ts +157 -133
- package/dist/schemas/translation-config.js +34 -11
- package/dist/server/bare/delegate-rpc-client.d.ts +1 -1
- package/dist/server/bare/delegate-rpc-client.js +131 -122
- package/dist/server/bare/hyperswarm.d.ts +2 -2
- package/dist/server/bare/hyperswarm.js +12 -7
- package/dist/server/bare/ops/cancel.js +7 -0
- package/dist/server/bare/ops/kv-cache-utils.d.ts +7 -10
- package/dist/server/bare/ops/kv-cache-utils.js +31 -40
- package/dist/server/bare/ops/load-model.js +0 -1
- package/dist/server/bare/ops/transcribe.d.ts +11 -4
- package/dist/server/bare/ops/transcribe.js +25 -4
- package/dist/server/bare/ops/translate.js +42 -4
- package/dist/server/bare/ops/unload-model.js +21 -19
- package/dist/server/bare/plugins/llamacpp-completion/ops/cache-logger.js +1 -2
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +13 -8
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +257 -85
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.d.ts +101 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.js +135 -0
- package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +80 -22
- package/dist/server/bare/plugins/llamacpp-completion/plugin.js +57 -32
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +10 -16
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +69 -44
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +54 -116
- package/dist/server/bare/plugins/nmtcpp-translation/resolve-vocab.d.ts +32 -0
- package/dist/server/bare/plugins/nmtcpp-translation/resolve-vocab.js +117 -0
- package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +1 -1
- package/dist/server/bare/plugins/onnx-ocr/plugin.js +1 -2
- package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech-stream.d.ts +7 -0
- package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech-stream.js +116 -0
- package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech.d.ts +2 -3
- package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech.js +71 -9
- package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +41 -13
- package/dist/server/bare/plugins/onnx-tts/plugin.js +48 -3
- package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +15 -7
- package/dist/server/bare/plugins/parakeet-transcription/plugin.js +5 -6
- package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.js +6 -0
- package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +8 -5
- package/dist/server/bare/plugins/sdcpp-generation/plugin.js +13 -13
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +17 -1
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +40 -17
- package/dist/server/bare/registry/config-registry.js +14 -3
- package/dist/server/bare/registry/model-registry.d.ts +8 -10
- package/dist/server/bare/registry/model-registry.js +17 -12
- package/dist/server/bare/registry/registry-client.js +79 -19
- package/dist/server/bare/runtime-lifecycle.d.ts +2 -1
- package/dist/server/bare/runtime-lifecycle.js +13 -2
- package/dist/server/bare/types/addon-responses.d.ts +8 -3
- package/dist/server/bare/utils/transcribe-metadata.d.ts +21 -0
- package/dist/server/bare/utils/transcribe-metadata.js +28 -0
- package/dist/server/bare/utils/tts-stats.d.ts +22 -0
- package/dist/server/bare/utils/tts-stats.js +10 -0
- package/dist/server/rpc/create-server.d.ts +4 -1
- package/dist/server/rpc/create-server.js +5 -1
- package/dist/server/rpc/delegate-transport.js +36 -29
- package/dist/server/rpc/handle-request.js +28 -3
- package/dist/server/rpc/handler-registry.js +7 -1
- package/dist/server/rpc/handler-utils.d.ts +5 -0
- package/dist/server/rpc/handler-utils.js +22 -0
- package/dist/server/rpc/handlers/cancel-delegated.js +3 -5
- package/dist/server/rpc/handlers/cancelHandler.js +4 -5
- package/dist/server/rpc/handlers/completion-stream-delegated.js +14 -5
- package/dist/server/rpc/handlers/delete-cache.js +8 -3
- package/dist/server/rpc/handlers/download-asset.js +3 -24
- package/dist/server/rpc/handlers/get-loaded-model-info.d.ts +3 -0
- package/dist/server/rpc/handlers/get-loaded-model-info.js +39 -0
- package/dist/server/rpc/handlers/get-model-info.js +93 -84
- package/dist/server/rpc/handlers/heartbeat-delegated.js +2 -2
- package/dist/server/rpc/handlers/index.d.ts +6 -0
- package/dist/server/rpc/handlers/index.js +6 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +35 -9
- package/dist/server/rpc/handlers/load-model/download-manager.js +142 -38
- package/dist/server/rpc/handlers/load-model/download-stats.d.ts +5 -4
- package/dist/server/rpc/handlers/load-model/download-stats.js +49 -8
- package/dist/server/rpc/handlers/load-model/handler.js +31 -50
- package/dist/server/rpc/handlers/load-model/http.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/http.js +97 -142
- package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +55 -74
- package/dist/server/rpc/handlers/load-model/index.d.ts +0 -1
- package/dist/server/rpc/handlers/load-model/index.js +0 -1
- package/dist/server/rpc/handlers/load-model/registry-client-options.d.ts +27 -0
- package/dist/server/rpc/handlers/load-model/registry-client-options.js +19 -0
- package/dist/server/rpc/handlers/load-model/registry-companion-set.d.ts +22 -0
- package/dist/server/rpc/handlers/load-model/registry-companion-set.js +208 -0
- package/dist/server/rpc/handlers/load-model/registry-download-utils.d.ts +24 -0
- package/dist/server/rpc/handlers/load-model/registry-download-utils.js +114 -0
- package/dist/server/rpc/handlers/load-model/registry.d.ts +2 -20
- package/dist/server/rpc/handlers/load-model/registry.js +109 -381
- package/dist/server/rpc/handlers/load-model/resolve-session.d.ts +15 -0
- package/dist/server/rpc/handlers/load-model/resolve-session.js +61 -0
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +3 -3
- package/dist/server/rpc/handlers/load-model/resolve.js +14 -23
- package/dist/server/rpc/handlers/load-model/types.d.ts +11 -4
- package/dist/server/rpc/handlers/load-model/types.js +28 -1
- package/dist/server/rpc/handlers/load-model-delegated.js +2 -4
- package/dist/server/rpc/handlers/plugin-dispatch.js +9 -5
- package/dist/server/rpc/handlers/plugin-invoke.js +1 -1
- package/dist/server/rpc/handlers/provideHandler/connection.js +13 -2
- package/dist/server/rpc/handlers/provideHandler/handler.js +42 -29
- package/dist/server/rpc/handlers/state.d.ts +3 -0
- package/dist/server/rpc/handlers/state.js +7 -0
- package/dist/server/rpc/handlers/stopProvideHandler.d.ts +2 -2
- package/dist/server/rpc/handlers/stopProvideHandler.js +12 -7
- package/dist/server/rpc/handlers/text-to-speech-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/text-to-speech-stream.js +4 -0
- package/dist/server/rpc/handlers/unload-model-delegated.js +3 -3
- package/dist/server/rpc/profiling/operation-metrics.js +20 -0
- package/dist/server/rpc/rpc-utils.js +1 -1
- package/dist/server/rpc/transport-selector.d.ts +3 -0
- package/dist/server/rpc/transport-selector.js +18 -0
- package/dist/server/utils/cache/auto-history.d.ts +4 -0
- package/dist/server/utils/cache/auto-history.js +22 -0
- package/dist/server/utils/{cache.d.ts → cache/paths.d.ts} +22 -5
- package/dist/server/utils/{cache.js → cache/paths.js} +36 -20
- package/dist/server/utils/cache/types.d.ts +8 -0
- package/dist/server/utils/cache/types.js +1 -0
- package/dist/server/utils/checksum.d.ts +2 -2
- package/dist/server/utils/checksum.js +1 -1
- package/dist/server/utils/clear-storage.d.ts +5 -0
- package/dist/server/utils/clear-storage.js +17 -0
- package/dist/server/utils/completion-normalizer.d.ts +17 -0
- package/dist/server/utils/completion-normalizer.js +413 -0
- package/dist/server/utils/expand-gguf-shards.d.ts +3 -0
- package/dist/server/utils/expand-gguf-shards.js +22 -0
- package/dist/server/utils/formatting.js +1 -1
- package/dist/server/utils/index.d.ts +4 -2
- package/dist/server/utils/index.js +4 -2
- package/dist/server/utils/qvac-paths.d.ts +2 -0
- package/dist/server/utils/qvac-paths.js +5 -0
- package/dist/server/utils/response-format.d.ts +3 -0
- package/dist/server/utils/response-format.js +20 -0
- package/dist/server/utils/tool-integration.d.ts +15 -4
- package/dist/server/utils/tool-integration.js +21 -41
- package/dist/server/utils/tools/dialect.d.ts +8 -0
- package/dist/server/utils/tools/dialect.js +14 -0
- package/dist/server/utils/tools/index.d.ts +3 -0
- package/dist/server/utils/tools/index.js +2 -0
- package/dist/server/utils/tools/parser.d.ts +6 -0
- package/dist/server/utils/tools/parser.js +46 -0
- package/dist/server/utils/tools/parsers/harmony.d.ts +4 -0
- package/dist/server/utils/tools/parsers/harmony.js +59 -0
- package/dist/server/utils/tools/parsers/hermes.d.ts +4 -0
- package/dist/server/utils/tools/parsers/hermes.js +100 -0
- package/dist/server/utils/tools/parsers/json.d.ts +6 -0
- package/dist/server/utils/tools/parsers/json.js +115 -0
- package/dist/server/utils/tools/parsers/pythonic.d.ts +4 -0
- package/dist/server/utils/tools/parsers/pythonic.js +267 -0
- package/dist/server/utils/tools/shared.d.ts +18 -0
- package/dist/server/utils/tools/shared.js +54 -0
- package/dist/server/utils/worker-lock.d.ts +3 -0
- package/dist/server/utils/worker-lock.js +67 -0
- package/dist/server/worker-core.d.ts +16 -1
- package/dist/server/worker-core.js +114 -14
- package/dist/utils/aggregate-events.d.ts +16 -0
- package/dist/utils/aggregate-events.js +52 -0
- package/dist/utils/cache-normalize.d.ts +10 -0
- package/dist/utils/cache-normalize.js +23 -0
- package/dist/utils/encoding.d.ts +8 -0
- package/dist/utils/encoding.js +13 -0
- package/dist/utils/errors-client.d.ts +12 -0
- package/dist/utils/errors-client.js +20 -0
- package/dist/utils/errors-server.d.ts +14 -0
- package/dist/utils/errors-server.js +31 -0
- package/dist/utils/load-model-validation.d.ts +7 -0
- package/dist/utils/load-model-validation.js +18 -0
- package/expo/plugins/patches/android-link.mjs +1 -1
- package/expo/plugins/patches/ios-link.mjs +1 -1
- package/package.json +14 -18
- package/dist/examples/translation/translation-opus.d.ts +0 -2
- package/dist/examples/translation/translation-opus.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/utils/model-path.d.ts +0 -5
- package/dist/server/utils/model-path.js +0 -7
- package/dist/server/utils/tool-parser.d.ts +0 -7
- package/dist/server/utils/tool-parser.js +0 -248
- /package/dist/examples/{llamacpp-native-tools.d.ts → tools/llamacpp-native-tools.d.ts} +0 -0
|
@@ -1,16 +1,124 @@
|
|
|
1
|
-
import {} from "
|
|
1
|
+
import { AbortController } from "bare-abort-controller";
|
|
2
|
+
import { DownloadCancelledError } from "../../../../utils/errors-server.js";
|
|
2
3
|
import { getServerLogger } from "../../../../logging/index.js";
|
|
3
4
|
const logger = getServerLogger();
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const activeTransfers = new Map();
|
|
6
|
+
let nextSubscriberId = 0;
|
|
7
|
+
function createSubscriber(onProgress) {
|
|
8
|
+
let resolve;
|
|
9
|
+
let reject;
|
|
10
|
+
const promise = new Promise((res, rej) => {
|
|
11
|
+
resolve = res;
|
|
12
|
+
reject = rej;
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
id: String(nextSubscriberId++),
|
|
16
|
+
onProgress,
|
|
17
|
+
settled: false,
|
|
18
|
+
resolve,
|
|
19
|
+
reject,
|
|
20
|
+
promise,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function settleSubscriber(subscriber, result) {
|
|
24
|
+
if (subscriber.settled)
|
|
25
|
+
return;
|
|
26
|
+
subscriber.settled = true;
|
|
27
|
+
if (result instanceof Error) {
|
|
28
|
+
subscriber.reject(result);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
subscriber.resolve(result);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function deliverProgress(transfer, subscriber, progress) {
|
|
35
|
+
if (subscriber.settled || !subscriber.onProgress)
|
|
36
|
+
return;
|
|
37
|
+
try {
|
|
38
|
+
subscriber.onProgress(progress);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
42
|
+
logger.warn("Progress callback threw; detaching subscriber", {
|
|
43
|
+
downloadKey: transfer.downloadKey,
|
|
44
|
+
subscriberId: subscriber.id,
|
|
45
|
+
error,
|
|
46
|
+
});
|
|
47
|
+
settleSubscriber(subscriber, error);
|
|
48
|
+
transfer.subscribers.delete(subscriber.id);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function broadcastTransferProgress(transfer, progress) {
|
|
52
|
+
transfer.lastProgress = progress;
|
|
53
|
+
for (const sub of Array.from(transfer.subscribers.values())) {
|
|
54
|
+
deliverProgress(transfer, sub, progress);
|
|
55
|
+
}
|
|
8
56
|
}
|
|
9
|
-
export function
|
|
10
|
-
|
|
57
|
+
export function startOrJoinDownload(downloadKey, startDownload, onProgress) {
|
|
58
|
+
const existing = activeTransfers.get(downloadKey);
|
|
59
|
+
if (existing && !existing.abortController.signal.aborted) {
|
|
60
|
+
logger.info(`📥 Reusing existing download for: ${downloadKey}`);
|
|
61
|
+
const subscriber = createSubscriber(onProgress);
|
|
62
|
+
existing.subscribers.set(subscriber.id, subscriber);
|
|
63
|
+
if (existing.lastProgress) {
|
|
64
|
+
deliverProgress(existing, subscriber, existing.lastProgress);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
promise: subscriber.promise,
|
|
68
|
+
joined: true,
|
|
69
|
+
getCacheHit: () => existing.cacheHit,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const abortController = new AbortController();
|
|
73
|
+
const transfer = {
|
|
74
|
+
downloadKey,
|
|
75
|
+
abortController,
|
|
76
|
+
subscribers: new Map(),
|
|
77
|
+
clearCache: false,
|
|
78
|
+
};
|
|
79
|
+
const initialSubscriber = createSubscriber(onProgress);
|
|
80
|
+
transfer.subscribers.set(initialSubscriber.id, initialSubscriber);
|
|
81
|
+
activeTransfers.set(downloadKey, transfer);
|
|
82
|
+
const downloadPromise = startDownload({
|
|
83
|
+
broadcastProgress: (progress) => {
|
|
84
|
+
broadcastTransferProgress(transfer, progress);
|
|
85
|
+
},
|
|
86
|
+
signal: abortController.signal,
|
|
87
|
+
shouldClearCache: () => transfer.clearCache,
|
|
88
|
+
setCacheHit: (cacheHit) => {
|
|
89
|
+
transfer.cacheHit = cacheHit;
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
transfer.downloadPromise = downloadPromise;
|
|
93
|
+
downloadPromise.then((path) => {
|
|
94
|
+
for (const sub of transfer.subscribers.values()) {
|
|
95
|
+
settleSubscriber(sub, path);
|
|
96
|
+
}
|
|
97
|
+
}, (error) => {
|
|
98
|
+
const rejection = error instanceof Error ? error : new Error(String(error));
|
|
99
|
+
for (const sub of transfer.subscribers.values()) {
|
|
100
|
+
settleSubscriber(sub, rejection);
|
|
101
|
+
}
|
|
102
|
+
}).finally(() => {
|
|
103
|
+
if (activeTransfers.get(downloadKey) === transfer) {
|
|
104
|
+
activeTransfers.delete(downloadKey);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
promise: initialSubscriber.promise,
|
|
109
|
+
joined: false,
|
|
110
|
+
getCacheHit: () => transfer.cacheHit,
|
|
111
|
+
};
|
|
11
112
|
}
|
|
12
|
-
export function
|
|
13
|
-
|
|
113
|
+
export function cancelTransfer(downloadKey, clearCache = false) {
|
|
114
|
+
const transfer = activeTransfers.get(downloadKey);
|
|
115
|
+
if (!transfer)
|
|
116
|
+
return;
|
|
117
|
+
transfer.clearCache = clearCache;
|
|
118
|
+
transfer.abortController.abort();
|
|
119
|
+
for (const sub of transfer.subscribers.values()) {
|
|
120
|
+
settleSubscriber(sub, new DownloadCancelledError());
|
|
121
|
+
}
|
|
14
122
|
}
|
|
15
123
|
export function createHyperdriveDownloadKey(hyperdriveKey, modelFileName) {
|
|
16
124
|
return `${hyperdriveKey}:${modelFileName}`;
|
|
@@ -18,38 +126,32 @@ export function createHyperdriveDownloadKey(hyperdriveKey, modelFileName) {
|
|
|
18
126
|
export function createHttpDownloadKey(url) {
|
|
19
127
|
return `http:${url}`;
|
|
20
128
|
}
|
|
21
|
-
export function createRegistryDownloadKey(registryPath) {
|
|
22
|
-
return `registry:${registryPath}`;
|
|
23
|
-
}
|
|
24
|
-
export function setClearCacheFlag(downloadKey, clearCache) {
|
|
25
|
-
if (clearCache) {
|
|
26
|
-
clearCacheFlags.set(downloadKey, true);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
clearCacheFlags.delete(downloadKey);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
export function shouldClearCache(downloadKey) {
|
|
33
|
-
return clearCacheFlags.get(downloadKey) ?? false;
|
|
34
|
-
}
|
|
35
|
-
export function clearClearCacheFlag(downloadKey) {
|
|
36
|
-
clearCacheFlags.delete(downloadKey);
|
|
129
|
+
export function createRegistryDownloadKey(registrySource, registryPath) {
|
|
130
|
+
return `registry:${registrySource}:${registryPath}`;
|
|
37
131
|
}
|
|
38
|
-
export function
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
132
|
+
export function applyJoinedDownloadStats(result, hooks) {
|
|
133
|
+
if (!result.joined)
|
|
134
|
+
return result.promise;
|
|
135
|
+
return result.promise.then((path) => {
|
|
136
|
+
const cacheHit = result.getCacheHit();
|
|
137
|
+
if (cacheHit === true) {
|
|
138
|
+
hooks?.markCacheHit?.();
|
|
43
139
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
140
|
+
else if (cacheHit === false) {
|
|
141
|
+
hooks?.markCacheMiss?.();
|
|
142
|
+
hooks?.markSharedTransfer?.();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
hooks?.markSharedTransfer?.();
|
|
146
|
+
}
|
|
147
|
+
return path;
|
|
148
|
+
});
|
|
49
149
|
}
|
|
50
150
|
export function cancelAllDownloads() {
|
|
51
|
-
logger.info(`🧹 Cancelling ${
|
|
52
|
-
Array.from(
|
|
151
|
+
logger.info(`🧹 Cancelling ${activeTransfers.size} active downloads`);
|
|
152
|
+
for (const key of Array.from(activeTransfers.keys())) {
|
|
153
|
+
cancelTransfer(key);
|
|
154
|
+
}
|
|
53
155
|
}
|
|
54
156
|
let isCleaningUp = false;
|
|
55
157
|
export async function cleanupDownloads() {
|
|
@@ -57,7 +159,9 @@ export async function cleanupDownloads() {
|
|
|
57
159
|
return;
|
|
58
160
|
isCleaningUp = true;
|
|
59
161
|
try {
|
|
60
|
-
const downloadPromises = Array.from(
|
|
162
|
+
const downloadPromises = Array.from(activeTransfers.values())
|
|
163
|
+
.filter((t) => t.downloadPromise !== undefined)
|
|
164
|
+
.map((t) => t.downloadPromise.catch(() => { }));
|
|
61
165
|
cancelAllDownloads();
|
|
62
166
|
if (downloadPromises.length > 0) {
|
|
63
167
|
await Promise.allSettled(downloadPromises);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ModelProgressUpdate } from "../../../../schemas/index";
|
|
2
|
-
import type { DownloadResult } from "./types";
|
|
3
|
-
export declare function downloadModelFromHttpWithStats(url: string, progressCallback?: (progress: ModelProgressUpdate) => void): Promise<DownloadResult>;
|
|
4
|
-
export declare function downloadModelFromRegistryWithStats(registryPath: string, registrySource: string, progressCallback?: (progress: ModelProgressUpdate) => void, expectedChecksum?: string): Promise<DownloadResult>;
|
|
5
|
-
export declare function downloadModelFromHyperdriveWithStats(hyperdriveKey: string, modelFileName: string, seed?: boolean, progressCallback?: (progress: ModelProgressUpdate) => void): Promise<DownloadResult>;
|
|
2
|
+
import type { DownloadStats, DownloadResult, DownloadHooks, ResolveResult } from "./types";
|
|
3
|
+
export declare function downloadModelFromHttpWithStats(url: string, progressCallback?: (progress: ModelProgressUpdate) => void, downloadHooks?: DownloadHooks): Promise<DownloadResult>;
|
|
4
|
+
export declare function downloadModelFromRegistryWithStats(registryPath: string, registrySource: string, progressCallback?: (progress: ModelProgressUpdate) => void, expectedChecksum?: string, downloadHooks?: DownloadHooks): Promise<DownloadResult>;
|
|
5
|
+
export declare function downloadModelFromHyperdriveWithStats(hyperdriveKey: string, modelFileName: string, seed?: boolean, progressCallback?: (progress: ModelProgressUpdate) => void, downloadHooks?: DownloadHooks): Promise<DownloadResult>;
|
|
6
|
+
export declare function mergeDownloadStats(results: ResolveResult[]): DownloadStats | undefined;
|
|
6
7
|
//# sourceMappingURL=download-stats.d.ts.map
|
|
@@ -7,10 +7,11 @@ function createStatsCollector() {
|
|
|
7
7
|
maxBytesDownloaded: 0,
|
|
8
8
|
startTimeMs: nowMs(),
|
|
9
9
|
cacheHit: undefined,
|
|
10
|
+
sharedTransfer: false,
|
|
10
11
|
checksumValidationTimeMsTotal: 0,
|
|
11
12
|
};
|
|
12
13
|
}
|
|
13
|
-
function
|
|
14
|
+
function createStatsHooks(collector) {
|
|
14
15
|
return {
|
|
15
16
|
markCacheHit: () => {
|
|
16
17
|
if (collector.cacheHit === undefined) {
|
|
@@ -21,6 +22,9 @@ function createHooks(collector) {
|
|
|
21
22
|
markCacheMiss: () => {
|
|
22
23
|
collector.cacheHit = false;
|
|
23
24
|
},
|
|
25
|
+
markSharedTransfer: () => {
|
|
26
|
+
collector.sharedTransfer = true;
|
|
27
|
+
},
|
|
24
28
|
addChecksumValidationTimeMs: (durationMs) => {
|
|
25
29
|
collector.checksumValidationTimeMsTotal += durationMs;
|
|
26
30
|
},
|
|
@@ -30,7 +34,7 @@ function wrapProgressCallback(collector, originalCallback) {
|
|
|
30
34
|
return (progress) => {
|
|
31
35
|
// Don't track bytes for cache hits (they're not real network transfer)
|
|
32
36
|
if (collector.cacheHit !== true) {
|
|
33
|
-
const downloaded = progress.
|
|
37
|
+
const downloaded = progress.fileSetInfo?.overallDownloaded ??
|
|
34
38
|
progress.shardInfo?.overallDownloaded ??
|
|
35
39
|
progress.downloaded ??
|
|
36
40
|
0;
|
|
@@ -43,6 +47,9 @@ function computeStats(collector) {
|
|
|
43
47
|
const downloadTimeMs = nowMs() - collector.startTimeMs;
|
|
44
48
|
const totalBytesDownloaded = collector.maxBytesDownloaded;
|
|
45
49
|
const stats = {};
|
|
50
|
+
if (collector.sharedTransfer) {
|
|
51
|
+
stats.sharedTransfer = true;
|
|
52
|
+
}
|
|
46
53
|
if (collector.cacheHit !== undefined) {
|
|
47
54
|
stats.cacheHit = collector.cacheHit;
|
|
48
55
|
}
|
|
@@ -52,6 +59,12 @@ function computeStats(collector) {
|
|
|
52
59
|
if (collector.cacheHit === true) {
|
|
53
60
|
return Object.keys(stats).length > 0 ? stats : undefined;
|
|
54
61
|
}
|
|
62
|
+
if (collector.sharedTransfer) {
|
|
63
|
+
if (downloadTimeMs > 0) {
|
|
64
|
+
stats.downloadTimeMs = downloadTimeMs;
|
|
65
|
+
}
|
|
66
|
+
return Object.keys(stats).length > 0 ? stats : undefined;
|
|
67
|
+
}
|
|
55
68
|
if (totalBytesDownloaded > 0) {
|
|
56
69
|
stats.downloadTimeMs = downloadTimeMs;
|
|
57
70
|
stats.totalBytesDownloaded = totalBytesDownloaded;
|
|
@@ -61,27 +74,55 @@ function computeStats(collector) {
|
|
|
61
74
|
}
|
|
62
75
|
return Object.keys(stats).length > 0 ? stats : undefined;
|
|
63
76
|
}
|
|
64
|
-
export async function downloadModelFromHttpWithStats(url, progressCallback) {
|
|
77
|
+
export async function downloadModelFromHttpWithStats(url, progressCallback, downloadHooks) {
|
|
65
78
|
const collector = createStatsCollector();
|
|
66
|
-
const hooks =
|
|
79
|
+
const hooks = { ...downloadHooks, ...createStatsHooks(collector) };
|
|
67
80
|
const wrappedCallback = wrapProgressCallback(collector, progressCallback);
|
|
68
81
|
const path = await downloadModelFromHttp(url, wrappedCallback, hooks);
|
|
69
82
|
const stats = computeStats(collector);
|
|
70
83
|
return stats ? { path, stats } : { path };
|
|
71
84
|
}
|
|
72
|
-
export async function downloadModelFromRegistryWithStats(registryPath, registrySource, progressCallback, expectedChecksum) {
|
|
85
|
+
export async function downloadModelFromRegistryWithStats(registryPath, registrySource, progressCallback, expectedChecksum, downloadHooks) {
|
|
73
86
|
const collector = createStatsCollector();
|
|
74
|
-
const hooks =
|
|
87
|
+
const hooks = { ...downloadHooks, ...createStatsHooks(collector) };
|
|
75
88
|
const wrappedCallback = wrapProgressCallback(collector, progressCallback);
|
|
76
89
|
const path = await downloadModelFromRegistry(registryPath, registrySource, wrappedCallback, expectedChecksum, hooks);
|
|
77
90
|
const stats = computeStats(collector);
|
|
78
91
|
return stats ? { path, stats } : { path };
|
|
79
92
|
}
|
|
80
|
-
export async function downloadModelFromHyperdriveWithStats(hyperdriveKey, modelFileName, seed, progressCallback) {
|
|
93
|
+
export async function downloadModelFromHyperdriveWithStats(hyperdriveKey, modelFileName, seed, progressCallback, downloadHooks) {
|
|
81
94
|
const collector = createStatsCollector();
|
|
82
|
-
const hooks =
|
|
95
|
+
const hooks = { ...downloadHooks, ...createStatsHooks(collector) };
|
|
83
96
|
const wrappedCallback = wrapProgressCallback(collector, progressCallback);
|
|
84
97
|
const path = await downloadModelFromHyperdrive(hyperdriveKey, modelFileName, seed, wrappedCallback, hooks);
|
|
85
98
|
const stats = computeStats(collector);
|
|
86
99
|
return stats ? { path, stats } : { path };
|
|
87
100
|
}
|
|
101
|
+
export function mergeDownloadStats(results) {
|
|
102
|
+
const stats = results
|
|
103
|
+
.map((r) => r.downloadStats)
|
|
104
|
+
.filter((s) => s !== undefined);
|
|
105
|
+
if (stats.length === 0)
|
|
106
|
+
return undefined;
|
|
107
|
+
const downloadTimeMs = Math.max(...stats.map((s) => s.downloadTimeMs ?? 0));
|
|
108
|
+
const totalBytesDownloaded = stats.reduce((sum, s) => sum + (s.totalBytesDownloaded ?? 0), 0);
|
|
109
|
+
const checksumValidationTimeMs = stats.reduce((sum, s) => sum + (s.checksumValidationTimeMs ?? 0), 0);
|
|
110
|
+
const cacheHitValues = stats
|
|
111
|
+
.map((s) => s.cacheHit)
|
|
112
|
+
.filter((v) => v !== undefined);
|
|
113
|
+
const merged = {};
|
|
114
|
+
if (downloadTimeMs > 0)
|
|
115
|
+
merged.downloadTimeMs = downloadTimeMs;
|
|
116
|
+
if (totalBytesDownloaded > 0)
|
|
117
|
+
merged.totalBytesDownloaded = totalBytesDownloaded;
|
|
118
|
+
if (downloadTimeMs > 0 && totalBytesDownloaded > 0) {
|
|
119
|
+
merged.downloadSpeedBps = (totalBytesDownloaded * 1000) / downloadTimeMs;
|
|
120
|
+
}
|
|
121
|
+
if (checksumValidationTimeMs > 0)
|
|
122
|
+
merged.checksumValidationTimeMs = checksumValidationTimeMs;
|
|
123
|
+
if (cacheHitValues.length > 0)
|
|
124
|
+
merged.cacheHit = cacheHitValues.every(Boolean);
|
|
125
|
+
if (stats.some((s) => s.sharedTransfer))
|
|
126
|
+
merged.sharedTransfer = true;
|
|
127
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
128
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { normalizeModelType, PROFILING_KEY, OPERATION_EVENT_KEY, } from "../../../../schemas/index.js";
|
|
2
2
|
import { loadModel } from "../../../bare/ops/load-model.js";
|
|
3
|
-
import {
|
|
3
|
+
import { createResolveSession } from "./resolve-session.js";
|
|
4
4
|
import { nowMs, generateProfileId } from "../../../../profiling/clock.js";
|
|
5
5
|
import { getModelEntry, updateModelConfig, } from "../../../bare/registry/model-registry.js";
|
|
6
6
|
import { generateShortHash, canonicalConfigString, transformConfigForReload, } from "../../../utils/index.js";
|
|
7
|
+
import { buildDownloadProfilingFields } from "./types.js";
|
|
7
8
|
import { ConfigReloadNotSupportedError, ModelTypeMismatchError, ModelIsDelegatedError, ModelNotFoundError, ModelLoadFailedError, PluginLoadConfigValidationFailedError, PluginNotFoundError, } from "../../../../utils/errors-server.js";
|
|
8
9
|
import { getServerLogger } from "../../../../logging/index.js";
|
|
9
10
|
import { getPlugin } from "../../../plugins/index.js";
|
|
@@ -34,37 +35,39 @@ export async function handleLoadModel(request, progressCallback) {
|
|
|
34
35
|
}
|
|
35
36
|
resolvedModelConfig = parseResult.data;
|
|
36
37
|
const totalLoadStart = profilingEnabled ? nowMs() : 0;
|
|
37
|
-
|
|
38
|
+
const session = createResolveSession({
|
|
39
|
+
progressCallback,
|
|
40
|
+
seed,
|
|
41
|
+
profilingEnabled,
|
|
42
|
+
});
|
|
43
|
+
const primaryResolve = session.resolvePrimaryModelPath(modelSrc);
|
|
38
44
|
let resolvedModelPath;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
let pluginResolveResult;
|
|
46
|
+
try {
|
|
47
|
+
const pluginResolve = plugin.resolveConfig
|
|
48
|
+
? Promise.resolve().then(() => plugin.resolveConfig(resolvedModelConfig, session.createResolveContext(modelSrc, canonicalModelType, modelName)))
|
|
49
|
+
: undefined;
|
|
50
|
+
[resolvedModelPath, pluginResolveResult] = pluginResolve
|
|
51
|
+
? await Promise.all([primaryResolve, pluginResolve])
|
|
52
|
+
: [await primaryResolve, undefined];
|
|
42
53
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
let pluginArtifacts = {};
|
|
47
|
-
if (plugin.resolveConfig) {
|
|
48
|
-
const ctx = {
|
|
49
|
-
resolveModelPath: (src) => resolveModelPath(src, progressCallback, seed),
|
|
50
|
-
modelSrc,
|
|
51
|
-
modelType: canonicalModelType,
|
|
52
|
-
...(modelName !== undefined && { modelName }),
|
|
53
|
-
};
|
|
54
|
-
const result = await plugin.resolveConfig(resolvedModelConfig, ctx);
|
|
55
|
-
resolvedModelConfig = result.config;
|
|
56
|
-
if (result.artifacts) {
|
|
57
|
-
pluginArtifacts = result.artifacts;
|
|
58
|
-
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
session.cancelAll();
|
|
56
|
+
throw error;
|
|
59
57
|
}
|
|
60
58
|
const configStr = canonicalConfigString(request.modelConfig);
|
|
61
59
|
const modelHashInput = `${request.modelType}:${modelSrc}:${configStr}`;
|
|
62
60
|
const modelId = generateShortHash(modelHashInput);
|
|
61
|
+
let pluginArtifacts = {};
|
|
62
|
+
if (pluginResolveResult) {
|
|
63
|
+
resolvedModelConfig = pluginResolveResult.config;
|
|
64
|
+
if (pluginResolveResult.artifacts) {
|
|
65
|
+
pluginArtifacts = pluginResolveResult.artifacts;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
63
68
|
if ("modelPath" in pluginArtifacts) {
|
|
64
|
-
|
|
69
|
+
throw new ModelLoadFailedError("Plugin returned reserved key \"modelPath\" in artifacts; primary model resolution is core-owned");
|
|
65
70
|
}
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
67
|
-
const { modelPath: _, ...artifacts } = pluginArtifacts;
|
|
68
71
|
if (!resolvedModelPath) {
|
|
69
72
|
throw new ModelLoadFailedError("modelPath resolution failed");
|
|
70
73
|
}
|
|
@@ -76,7 +79,7 @@ export async function handleLoadModel(request, progressCallback) {
|
|
|
76
79
|
modelType: canonicalModelType,
|
|
77
80
|
modelConfig: resolvedModelConfig,
|
|
78
81
|
},
|
|
79
|
-
artifacts: Object.keys(
|
|
82
|
+
artifacts: Object.keys(pluginArtifacts).length > 0 ? pluginArtifacts : undefined,
|
|
80
83
|
modelName,
|
|
81
84
|
}, profilingEnabled ? { collectTiming: true } : undefined);
|
|
82
85
|
const response = {
|
|
@@ -87,38 +90,16 @@ export async function handleLoadModel(request, progressCallback) {
|
|
|
87
90
|
if (profilingEnabled) {
|
|
88
91
|
const totalLoadTimeMs = nowMs() - totalLoadStart;
|
|
89
92
|
const profileId = profilingMeta?.id ?? generateProfileId();
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
const resolveResult = session.getAggregateResult();
|
|
94
|
+
const { gauges, tags } = buildDownloadProfilingFields(resolveResult?.downloadStats, resolveResult?.sourceType);
|
|
95
|
+
gauges["totalLoadTime"] = totalLoadTimeMs;
|
|
93
96
|
if (loadResult.timing?.modelInitializationTimeMs !== undefined) {
|
|
94
97
|
gauges["modelInitializationTime"] =
|
|
95
98
|
loadResult.timing.modelInitializationTimeMs;
|
|
96
99
|
}
|
|
97
|
-
if (resolveResult?.downloadStats) {
|
|
98
|
-
const ds = resolveResult.downloadStats;
|
|
99
|
-
if (ds.downloadTimeMs !== undefined) {
|
|
100
|
-
gauges["downloadTime"] = ds.downloadTimeMs;
|
|
101
|
-
}
|
|
102
|
-
if (ds.totalBytesDownloaded !== undefined) {
|
|
103
|
-
gauges["totalBytesDownloaded"] = ds.totalBytesDownloaded;
|
|
104
|
-
}
|
|
105
|
-
if (ds.downloadSpeedBps !== undefined) {
|
|
106
|
-
gauges["downloadSpeedBps"] = ds.downloadSpeedBps;
|
|
107
|
-
}
|
|
108
|
-
if (ds.checksumValidationTimeMs !== undefined) {
|
|
109
|
-
gauges["checksumValidationTime"] = ds.checksumValidationTimeMs;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
const tags = {};
|
|
113
100
|
if (canonicalModelType) {
|
|
114
101
|
tags["modelType"] = canonicalModelType;
|
|
115
102
|
}
|
|
116
|
-
if (resolveResult?.sourceType) {
|
|
117
|
-
tags["sourceType"] = resolveResult.sourceType;
|
|
118
|
-
}
|
|
119
|
-
if (resolveResult?.downloadStats?.cacheHit !== undefined) {
|
|
120
|
-
tags["cacheHit"] = resolveResult.downloadStats.cacheHit ? "true" : "false";
|
|
121
|
-
}
|
|
122
103
|
const operationEvent = {
|
|
123
104
|
op: "loadModel",
|
|
124
105
|
kind: "handler",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ModelProgressUpdate } from "../../../../schemas/index";
|
|
2
|
-
import type {
|
|
3
|
-
export declare function downloadModelFromHttp(url: string, progressCallback?: (progress: ModelProgressUpdate) => void, hooks?:
|
|
2
|
+
import type { DownloadHooks } from "./types";
|
|
3
|
+
export declare function downloadModelFromHttp(url: string, progressCallback?: (progress: ModelProgressUpdate) => void, hooks?: DownloadHooks): Promise<string>;
|
|
4
4
|
//# sourceMappingURL=http.d.ts.map
|