@qvac/sdk 0.4.1 → 0.6.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/README.md +365 -200
- package/bare-imports.json +35 -0
- package/dist/client/api/cancel.d.ts +12 -3
- package/dist/client/api/cancel.js +12 -3
- package/dist/client/api/completion-stream.d.ts +15 -5
- package/dist/client/api/completion-stream.js +50 -14
- package/dist/client/api/embed.d.ts +17 -3
- package/dist/client/api/embed.js +0 -8
- package/dist/client/api/get-model-info.d.ts +2 -2
- package/dist/client/api/get-model-info.js +2 -2
- package/dist/client/api/index.d.ts +2 -2
- package/dist/client/api/index.js +2 -2
- package/dist/client/api/load-model.d.ts +37 -11
- package/dist/client/api/load-model.js +34 -117
- package/dist/client/api/logging-stream.d.ts +6 -3
- package/dist/client/api/logging-stream.js +6 -3
- package/dist/client/api/ocr.d.ts +31 -0
- package/dist/client/api/ocr.js +88 -0
- package/dist/client/api/rag.d.ts +215 -20
- package/dist/client/api/rag.js +382 -23
- package/dist/client/api/translate.js +10 -11
- package/dist/client/api/unload-model.js +6 -3
- package/dist/client/config-loader/config-utils.d.ts +5 -0
- package/dist/client/config-loader/config-utils.js +20 -0
- package/dist/client/config-loader/resolve-config.bare.d.ts +9 -0
- package/dist/client/config-loader/resolve-config.bare.js +87 -0
- package/dist/client/config-loader/resolve-config.expo.d.ts +11 -0
- package/dist/client/config-loader/resolve-config.expo.js +62 -0
- package/dist/client/config-loader/resolve-config.node.d.ts +9 -0
- package/dist/client/config-loader/resolve-config.node.js +118 -0
- package/dist/client/init-hooks.d.ts +18 -3
- package/dist/client/init-hooks.js +57 -29
- package/dist/client/logging-stream-registry.d.ts +1 -1
- package/dist/client/logging-stream-registry.js +14 -13
- package/dist/client/rpc/bare-client.d.ts +3 -184
- package/dist/client/rpc/bare-client.js +67 -8
- package/dist/client/rpc/expo-rpc-client.d.ts +2 -2
- package/dist/client/rpc/expo-rpc-client.js +70 -12
- package/dist/client/rpc/node-rpc-client.d.ts +1 -1
- package/dist/client/rpc/node-rpc-client.js +14 -7
- package/dist/client/rpc/rpc-client.d.ts +1 -1
- package/dist/client/rpc/rpc-client.js +13 -58
- package/dist/examples/config/blind-relay/blind-relay.config.d.ts +5 -0
- package/dist/examples/config/blind-relay/blind-relay.config.js +7 -0
- package/dist/examples/config/default/default.config.d.ts +8 -0
- package/dist/examples/config/default/default.config.js +6 -0
- package/dist/examples/config-reload.d.ts +2 -0
- package/dist/examples/config-reload.js +49 -0
- package/dist/examples/default-config-usage.d.ts +17 -0
- package/dist/examples/default-config-usage.js +47 -0
- package/dist/examples/delegated-inference/consumer.js +1 -0
- package/dist/examples/download-with-blind-relays.js +22 -21
- package/dist/examples/embed-hyperdrive.js +39 -3
- package/dist/examples/kv-cache-cleanup.js +1 -1
- package/dist/examples/kv-cache-custom-key.js +16 -1
- package/dist/examples/kv-cache-example.js +1 -1
- package/dist/examples/llamacpp-hyperdrive.js +1 -1
- package/dist/examples/llamacpp-sharded.js +13 -4
- package/dist/examples/logging-file-transport.d.ts +2 -0
- package/dist/examples/{llamacpp-file-logging.js → logging-file-transport.js} +3 -7
- package/dist/examples/logging-streaming.d.ts +2 -0
- package/dist/examples/logging-streaming.js +75 -0
- package/dist/examples/mcp-websearch.d.ts +13 -0
- package/dist/examples/mcp-websearch.js +176 -0
- package/dist/examples/ocr-fasttext.d.ts +2 -0
- package/dist/examples/ocr-fasttext.js +52 -0
- package/dist/examples/quickstart.d.ts +2 -0
- package/dist/examples/quickstart.js +28 -0
- package/dist/examples/rag/rag-hyperdb/cancellation.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb/cancellation.js +75 -0
- package/dist/examples/rag/rag-hyperdb/ingest.d.ts +2 -0
- package/dist/examples/rag/{rag-hyperdb.js → rag-hyperdb/ingest.js} +10 -4
- package/dist/examples/rag/rag-hyperdb/pipeline.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb/pipeline.js +74 -0
- package/dist/examples/rag/rag-hyperdb/workspaces.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb/workspaces.js +178 -0
- package/dist/examples/translation/translation-bergamot-batch.d.ts +2 -0
- package/dist/examples/translation/translation-bergamot-batch.js +49 -0
- package/dist/examples/translation/translation-bergamot.d.ts +2 -0
- package/dist/examples/translation/translation-bergamot.js +39 -0
- package/dist/examples/translation/translation-indic.js +1 -0
- package/dist/examples/translation/translation-opus.js +1 -0
- package/dist/examples/translation/translation-stream.js +1 -0
- package/dist/expo/plugins/withMobileBundle.js +29 -10
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -2
- package/dist/logging/addon.d.ts +6 -0
- package/dist/logging/addon.js +75 -0
- package/dist/logging/base-logger.js +26 -16
- package/dist/logging/client-logger.d.ts +3 -0
- package/dist/logging/client-logger.js +24 -0
- package/dist/logging/index.d.ts +7 -1
- package/dist/logging/index.js +7 -1
- package/dist/logging/logger.d.ts +0 -2
- package/dist/logging/logger.js +11 -6
- package/dist/logging/namespaces.d.ts +12 -0
- package/dist/logging/namespaces.js +12 -0
- package/dist/logging/registry.d.ts +31 -0
- package/dist/logging/registry.js +48 -0
- package/dist/logging/server-logger.d.ts +3 -0
- package/dist/logging/server-logger.js +16 -0
- package/dist/logging/stream-logger.d.ts +1 -1
- package/dist/logging/stream-logger.js +6 -3
- package/dist/logging/transport.js +2 -2
- package/dist/logging/types.d.ts +2 -0
- package/dist/logging/utils.d.ts +2 -0
- package/dist/logging/utils.js +62 -0
- package/dist/models/hyperdrive/models.d.ts +1886 -230
- package/dist/models/hyperdrive/models.js +2191 -443
- package/dist/schemas/archive.d.ts +9 -0
- package/dist/schemas/archive.js +17 -0
- package/dist/schemas/cancel.d.ts +6 -0
- package/dist/schemas/cancel.js +5 -0
- package/dist/schemas/common.d.ts +660 -92
- package/dist/schemas/common.js +6 -4
- package/dist/schemas/delegate.d.ts +1 -0
- package/dist/schemas/delegate.js +1 -0
- package/dist/schemas/download-asset.d.ts +21 -9
- package/dist/schemas/embed.d.ts +3 -3
- package/dist/schemas/embed.js +9 -2
- package/dist/schemas/get-model-info.d.ts +12 -10
- package/dist/schemas/get-model-info.js +9 -1
- package/dist/schemas/index.d.ts +9 -1
- package/dist/schemas/index.js +12 -1
- package/dist/schemas/json-schema.d.ts +16 -0
- package/dist/schemas/json-schema.js +2 -0
- package/dist/schemas/llamacpp-config.d.ts +117 -12
- package/dist/schemas/llamacpp-config.js +46 -12
- package/dist/schemas/load-model.d.ts +3669 -481
- package/dist/schemas/load-model.js +95 -34
- package/dist/schemas/logging-stream.d.ts +11 -4
- package/dist/schemas/logging-stream.js +4 -3
- package/dist/schemas/mcp-adapter.d.ts +47 -0
- package/dist/schemas/mcp-adapter.js +1 -0
- package/dist/schemas/model-src-utils.d.ts +38 -14
- package/dist/schemas/model-src-utils.js +4 -3
- package/dist/schemas/model-types.d.ts +154 -0
- package/dist/schemas/model-types.js +140 -0
- package/dist/schemas/ocr.d.ts +88 -0
- package/dist/schemas/ocr.js +52 -0
- package/dist/schemas/rag.d.ts +183 -52
- package/dist/schemas/rag.js +148 -23
- package/dist/schemas/reload-config.d.ts +356 -0
- package/dist/schemas/reload-config.js +44 -0
- package/dist/schemas/runtime-context.d.ts +19 -0
- package/dist/schemas/runtime-context.js +7 -0
- package/dist/schemas/sdk-config.d.ts +717 -0
- package/dist/schemas/sdk-config.js +131 -0
- package/dist/schemas/sdk-errors-client.d.ts +5 -0
- package/dist/schemas/sdk-errors-client.js +25 -0
- package/dist/schemas/sdk-errors-server.d.ts +17 -0
- package/dist/schemas/sdk-errors-server.js +85 -0
- package/dist/schemas/shard.d.ts +21 -0
- package/dist/schemas/shard.js +17 -0
- package/dist/schemas/tools.d.ts +3 -0
- package/dist/schemas/translate.d.ts +68 -23
- package/dist/schemas/translate.js +37 -11
- package/dist/schemas/translation-config.d.ts +337 -13
- package/dist/schemas/translation-config.js +65 -9
- package/dist/schemas/whispercpp-config.d.ts +9 -1
- package/dist/schemas/whispercpp-config.js +2 -1
- package/dist/scripts/run-unit-tests.d.ts +2 -0
- package/dist/scripts/run-unit-tests.js +17 -0
- package/dist/server/bare/addons/llamacpp-completion/cache-logger.d.ts +6 -0
- package/dist/server/bare/addons/llamacpp-completion/cache-logger.js +34 -0
- package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.d.ts +1 -5
- package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.js +6 -20
- package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.js +26 -7
- package/dist/server/bare/addons/llamacpp-completion/index.d.ts +4 -0
- package/dist/server/bare/addons/llamacpp-completion/index.js +3 -0
- package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.d.ts +4 -1
- package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.js +49 -14
- package/dist/server/bare/addons/llamacpp-embedding/create-model.d.ts +8 -0
- package/dist/server/bare/addons/llamacpp-embedding/create-model.js +38 -0
- package/dist/server/bare/addons/llamacpp-embedding/handlers/embed.d.ts +12 -0
- package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.js +18 -4
- package/dist/server/bare/addons/llamacpp-embedding/index.d.ts +3 -0
- package/dist/server/bare/addons/llamacpp-embedding/index.js +2 -0
- package/dist/server/bare/addons/load-model.js +38 -28
- package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.js +23 -8
- package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.js +35 -11
- package/dist/server/bare/addons/onnx-ocr/create-model.d.ts +10 -0
- package/dist/server/bare/addons/onnx-ocr/create-model.js +39 -0
- package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.d.ts +10 -0
- package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.js +109 -0
- package/dist/server/bare/addons/onnx-ocr/index.d.ts +3 -0
- package/dist/server/bare/addons/onnx-ocr/index.js +2 -0
- package/dist/server/bare/addons/unload-model.js +6 -3
- package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.js +2 -1
- package/dist/server/bare/addons/whispercpp-transcription/handlers/transcribe-stream.js +82 -0
- package/dist/server/bare/delegate-rpc-client.js +31 -11
- package/dist/server/bare/hyperswarm.js +7 -5
- package/dist/server/bare/rag-hyperdb/handlers/chunk.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/chunk.js +7 -0
- package/dist/server/bare/rag-hyperdb/handlers/close-workspace.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/close-workspace.js +9 -0
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +9 -10
- package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.js +14 -0
- package/dist/server/bare/rag-hyperdb/handlers/ingest.d.ts +9 -0
- package/dist/server/bare/rag-hyperdb/handlers/ingest.js +18 -0
- package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.js +4 -0
- package/dist/server/bare/rag-hyperdb/handlers/reindex.d.ts +9 -0
- package/dist/server/bare/rag-hyperdb/handlers/reindex.js +16 -0
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +7 -4
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +13 -14
- package/dist/server/bare/rag-hyperdb/handlers/search.js +10 -10
- package/dist/server/bare/rag-hyperdb/index.d.ts +8 -1
- package/dist/server/bare/rag-hyperdb/index.js +8 -1
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +7 -0
- package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +39 -0
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.d.ts +15 -0
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +135 -0
- package/dist/server/bare/registry/config-registry.d.ts +13 -4
- package/dist/server/bare/registry/config-registry.js +53 -10
- package/dist/server/bare/registry/logging-stream-registry.d.ts +24 -7
- package/dist/server/bare/registry/logging-stream-registry.js +99 -20
- package/dist/server/bare/registry/model-config-registry.d.ts +4 -0
- package/dist/server/bare/registry/model-config-registry.js +15 -0
- package/dist/server/bare/registry/model-config-utils.d.ts +15 -0
- package/dist/server/bare/registry/model-config-utils.js +121 -0
- package/dist/server/bare/registry/model-registry.d.ts +6 -26
- package/dist/server/bare/registry/model-registry.js +9 -6
- package/dist/server/bare/registry/runtime-context-registry.d.ts +7 -0
- package/dist/server/bare/registry/runtime-context-registry.js +26 -0
- package/dist/server/bare/utils/loader-adapter.d.ts +7 -0
- package/dist/server/bare/utils/loader-adapter.js +9 -0
- package/dist/server/error-handlers.js +4 -2
- package/dist/server/rpc/create-server.js +5 -3
- package/dist/server/rpc/handle-request.js +115 -19
- package/dist/server/rpc/handlers/cancelHandler.js +13 -2
- package/dist/server/rpc/handlers/completion-stream-delegated.js +4 -2
- package/dist/server/rpc/handlers/completion-stream.js +1 -1
- package/dist/server/rpc/handlers/delete-cache.js +4 -2
- package/dist/server/rpc/handlers/download-asset.js +3 -1
- package/dist/server/rpc/handlers/embed.js +4 -2
- package/dist/server/rpc/handlers/get-model-info.d.ts +1 -1
- package/dist/server/rpc/handlers/get-model-info.js +22 -10
- package/dist/server/rpc/handlers/index.d.ts +4 -2
- package/dist/server/rpc/handlers/index.js +2 -2
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +11 -11
- package/dist/server/rpc/handlers/load-model/download-manager.js +40 -28
- package/dist/server/rpc/handlers/{load-model.d.ts → load-model/handler.d.ts} +2 -2
- package/dist/server/rpc/handlers/load-model/handler.js +179 -0
- package/dist/server/rpc/handlers/load-model/http.js +361 -50
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +26 -22
- 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.js +39 -8
- package/dist/server/rpc/handlers/load-model-delegated.d.ts +2 -2
- package/dist/server/rpc/handlers/load-model-delegated.js +15 -10
- package/dist/server/rpc/handlers/logging-stream.js +4 -4
- package/dist/server/rpc/handlers/ocr-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/ocr-stream.js +39 -0
- package/dist/server/rpc/handlers/provideHandler/connection.js +12 -10
- package/dist/server/rpc/handlers/provideHandler/handler.js +18 -16
- package/dist/server/rpc/handlers/provideHandler/proxy.js +8 -6
- package/dist/server/rpc/handlers/rag.d.ts +2 -2
- package/dist/server/rpc/handlers/rag.js +107 -41
- package/dist/server/rpc/handlers/stopProvideHandler.js +3 -1
- package/dist/server/rpc/handlers/text-to-speech.js +1 -1
- package/dist/server/rpc/handlers/transcribe-stream.js +4 -2
- package/dist/server/rpc/handlers/translate.js +9 -16
- package/dist/server/rpc/handlers/unload-model.js +4 -2
- package/dist/server/utils/archive.d.ts +3 -0
- package/dist/server/utils/archive.js +171 -0
- package/dist/server/utils/audio/decoder.d.ts +2 -1
- package/dist/server/utils/audio/decoder.js +48 -11
- package/dist/server/utils/cache.d.ts +5 -5
- package/dist/server/utils/cache.js +13 -11
- package/dist/server/utils/config-transform.d.ts +3 -0
- package/dist/server/utils/config-transform.js +23 -0
- package/dist/server/utils/formatting.d.ts +13 -0
- package/dist/server/utils/formatting.js +26 -0
- package/dist/server/utils/gguf-tensor-extractor.d.ts +15 -0
- package/dist/server/utils/gguf-tensor-extractor.js +314 -0
- package/dist/server/utils/index.d.ts +4 -1
- package/dist/server/utils/index.js +4 -1
- package/dist/server/utils/shard-utils.d.ts +42 -16
- package/dist/server/utils/shard-utils.js +95 -7
- package/dist/server/worker.js +49 -19
- package/dist/utils/errors-base.d.ts +1 -1
- package/dist/utils/errors-base.js +2 -2
- package/dist/utils/errors-client.d.ts +24 -0
- package/dist/utils/errors-client.js +40 -0
- package/dist/utils/errors-server.d.ts +42 -0
- package/dist/utils/errors-server.js +71 -0
- package/dist/utils/mcp-adapter.d.ts +12 -0
- package/dist/utils/mcp-adapter.js +103 -0
- package/dist/utils/object.d.ts +2 -0
- package/dist/utils/object.js +3 -0
- package/dist/utils/tool-helpers.d.ts +10 -2
- package/dist/utils/tool-helpers.js +24 -11
- package/package.json +74 -36
- package/dist/client/api/set-config.d.ts +0 -7
- package/dist/client/api/set-config.js +0 -20
- package/dist/client/config-manager.d.ts +0 -4
- package/dist/client/config-manager.js +0 -8
- package/dist/client/rpc/bare-rpc-client.d.ts +0 -4
- package/dist/client/rpc/bare-rpc-client.js +0 -91
- package/dist/examples/llamacpp-file-logging.d.ts +0 -2
- package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +0 -2
- package/dist/examples/rag/rag-hyperdb-workspaces.js +0 -106
- package/dist/examples/rag/rag-hyperdb.d.ts +0 -2
- package/dist/schemas/set-config.d.ts +0 -21
- package/dist/schemas/set-config.js +0 -14
- package/dist/server/bare/addons/llamacpp/handlers/embed.d.ts +0 -4
- package/dist/server/bare/addons/llamacpp/index.d.ts +0 -4
- package/dist/server/bare/addons/llamacpp/index.js +0 -3
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +0 -63
- package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +0 -5
- package/dist/server/bare/rag-hyperdb/rag-manager.js +0 -64
- package/dist/server/rpc/handlers/load-model.js +0 -59
- package/dist/server/rpc/handlers/set-config.d.ts +0 -3
- package/dist/server/rpc/handlers/set-config.js +0 -18
- package/dist/server/utils/hash.d.ts +0 -5
- package/dist/server/utils/hash.js +0 -11
- /package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.d.ts +0 -0
- /package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.d.ts +0 -0
- /package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.d.ts +0 -0
- /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.d.ts +0 -0
- /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.js +0 -0
- /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.d.ts +0 -0
- /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.js +0 -0
- /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.d.ts +0 -0
- /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.js +0 -0
- /package/dist/server/bare/addons/{tts → onnx-tts}/index.d.ts +0 -0
- /package/dist/server/bare/addons/{tts → onnx-tts}/index.js +0 -0
- /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.d.ts +0 -0
- /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/handlers/transcribe-stream.d.ts +0 -0
- /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.d.ts +0 -0
- /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.js +0 -0
|
@@ -6,11 +6,13 @@ import Hyperdrive from "hyperdrive";
|
|
|
6
6
|
import {} from "bare-stream";
|
|
7
7
|
import { AbortController } from "bare-abort-controller";
|
|
8
8
|
import { getEnv } from "../../../worker.js";
|
|
9
|
-
import { getModelsCacheDir, generateShortHash, detectShardedModel, getShardedModelCacheDir, getShardPath, checkShardCompleteness, calculateFileChecksum, } from "../../../utils/index.js";
|
|
9
|
+
import { getModelsCacheDir, generateShortHash, detectShardedModel, getShardedModelCacheDir, getShardPath, checkShardCompleteness, calculateFileChecksum, extractTensorsFromShards, calculatePercentage, } from "../../../utils/index.js";
|
|
10
10
|
import { getModelBySrc } from "../../../../models/hyperdrive/index.js";
|
|
11
11
|
import { getActiveDownload, registerDownload, unregisterDownload, createHyperdriveDownloadKey, shouldClearCache, clearClearCacheFlag, } from "./download-manager.js";
|
|
12
12
|
import { getSDKConfig } from "../../../bare/registry/config-registry.js";
|
|
13
13
|
import { FileNotFoundError, ChecksumValidationFailedError, DownloadCancelledError, HyperdriveDownloadFailedError, ModelLoadFailedError, NoBlobFoundError, } from "../../../../utils/errors-server.js";
|
|
14
|
+
import { getServerLogger } from "../../../../logging/index.js";
|
|
15
|
+
const logger = getServerLogger();
|
|
14
16
|
function getCorestoreDir(hyperdriveKey) {
|
|
15
17
|
return path.join(getEnv().HOME_DIR, ".qvac", "corestore", hyperdriveKey);
|
|
16
18
|
}
|
|
@@ -33,7 +35,7 @@ async function setupHyperdrive(hyperdriveKey, corestoreDir) {
|
|
|
33
35
|
const swarm = new Hyperswarm(swarmOptions);
|
|
34
36
|
const doneFindingPeers = drive.findingPeers();
|
|
35
37
|
swarm.on("connection", (connection) => {
|
|
36
|
-
|
|
38
|
+
logger.debug(`🤝 Connected to peer for hyperdrive download`);
|
|
37
39
|
drive.replicate(connection);
|
|
38
40
|
});
|
|
39
41
|
swarm.join(drive.discoveryKey, { server: false, client: true });
|
|
@@ -41,7 +43,7 @@ async function setupHyperdrive(hyperdriveKey, corestoreDir) {
|
|
|
41
43
|
return { corestore, drive, swarm, corestoreDir };
|
|
42
44
|
}
|
|
43
45
|
async function cleanupHyperdrive(setup) {
|
|
44
|
-
|
|
46
|
+
logger.debug("🧹 Cleaning up hyperdrive setup");
|
|
45
47
|
if (!setup.swarm.suspended) {
|
|
46
48
|
try {
|
|
47
49
|
await setup.swarm.suspend();
|
|
@@ -55,12 +57,12 @@ async function cleanupHyperdrive(setup) {
|
|
|
55
57
|
await setup.corestore.close();
|
|
56
58
|
}
|
|
57
59
|
export async function deleteCorestoreDirectory(corestoreDir) {
|
|
58
|
-
|
|
60
|
+
logger.info(`🗑️ DELETING corestore directory... ${corestoreDir}`);
|
|
59
61
|
try {
|
|
60
62
|
await fsPromises.rm(corestoreDir, { recursive: true, force: true });
|
|
61
63
|
}
|
|
62
64
|
catch (e) {
|
|
63
|
-
|
|
65
|
+
logger.error(`Error deleting corestore directory: ${e instanceof Error ? e.message : String(e)}`);
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
async function findFileInHyperdrive(drive, modelFileName) {
|
|
@@ -148,7 +150,7 @@ async function validateCachedFile(modelPath, modelFileName, expectedSize, expect
|
|
|
148
150
|
// For hyperdrive: only validate if file is complete
|
|
149
151
|
// Partial files are ignored - corestore state is the source of truth for resume
|
|
150
152
|
if (localSize === expectedSize) {
|
|
151
|
-
|
|
153
|
+
logger.info(`✅ Model cached with correct size: ${modelPath}`);
|
|
152
154
|
// Always validate checksum if provided, even when size matches
|
|
153
155
|
if (expectedChecksum && expectedChecksum.length === 64) {
|
|
154
156
|
const checksum = await calculateFileChecksum(modelPath);
|
|
@@ -156,7 +158,7 @@ async function validateCachedFile(modelPath, modelFileName, expectedSize, expect
|
|
|
156
158
|
throw new ChecksumValidationFailedError(`${modelFileName}. Expected: ${expectedChecksum}. Actual: ${checksum}. File may be corrupted`);
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
|
-
|
|
161
|
+
logger.info(`✅ Model already cached and size validated: ${modelPath}`);
|
|
160
162
|
return modelPath;
|
|
161
163
|
}
|
|
162
164
|
// File exists but incomplete - will be overwritten during download
|
|
@@ -173,10 +175,10 @@ async function downloadSingleFileToFilesystem(modelPath, modelFileName, hyperdri
|
|
|
173
175
|
if (signal?.aborted) {
|
|
174
176
|
throw new DownloadCancelledError();
|
|
175
177
|
}
|
|
176
|
-
|
|
178
|
+
logger.info(`Downloading model from hyperdrive ${hyperdriveKey} to ${modelPath}`);
|
|
177
179
|
const setup = await setupHyperdrive(hyperdriveKey, corestoreDir);
|
|
178
180
|
const cleanup = () => {
|
|
179
|
-
|
|
181
|
+
logger.info("🛑 Aborting hyperdrive download...");
|
|
180
182
|
setup.swarm.suspended = true;
|
|
181
183
|
setup.swarm.suspend().catch(() => {
|
|
182
184
|
// Ignore errors during emergency suspend
|
|
@@ -192,7 +194,7 @@ async function downloadSingleFileToFilesystem(modelPath, modelFileName, hyperdri
|
|
|
192
194
|
: undefined;
|
|
193
195
|
await downloadAndValidateFile(setup.drive, modelFileName, modelPath, 0, // Size will be determined from drive
|
|
194
196
|
expectedChecksum, progressContext, signal);
|
|
195
|
-
|
|
197
|
+
logger.info(`✅ Model downloaded successfully to ${modelPath}`);
|
|
196
198
|
// Send final 100% progress update
|
|
197
199
|
if (progressCallback) {
|
|
198
200
|
try {
|
|
@@ -215,7 +217,7 @@ async function downloadSingleFileToFilesystem(modelPath, modelFileName, hyperdri
|
|
|
215
217
|
}
|
|
216
218
|
}
|
|
217
219
|
catch (error) {
|
|
218
|
-
|
|
220
|
+
logger.error("❌ Error during hyperdrive download:", error instanceof Error ? error.message : String(error));
|
|
219
221
|
// Preserve cancellation errors
|
|
220
222
|
if (error instanceof Error && error.message === "Download cancelled") {
|
|
221
223
|
throw error;
|
|
@@ -263,7 +265,7 @@ async function downloadAndValidateFile(drive, sourceFileName, targetFilePath, ex
|
|
|
263
265
|
type: "modelProgress",
|
|
264
266
|
downloaded: cappedDownloaded,
|
|
265
267
|
total: totalBytes,
|
|
266
|
-
percentage:
|
|
268
|
+
percentage: calculatePercentage(cappedDownloaded, totalBytes),
|
|
267
269
|
downloadKey: progressContext.downloadKey,
|
|
268
270
|
};
|
|
269
271
|
if (progressContext.shardInfo) {
|
|
@@ -319,7 +321,7 @@ async function downloadAndValidateFile(drive, sourceFileName, targetFilePath, ex
|
|
|
319
321
|
}
|
|
320
322
|
}
|
|
321
323
|
else if (!expectedChecksum) {
|
|
322
|
-
|
|
324
|
+
logger.warn(`⚠️ No checksum available for validation`);
|
|
323
325
|
}
|
|
324
326
|
}
|
|
325
327
|
catch (error) {
|
|
@@ -368,11 +370,11 @@ async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileNam
|
|
|
368
370
|
const shardDir = getShardedModelCacheDir(hyperdriveKey);
|
|
369
371
|
const allFiles = shardMetadata.map((s) => s.filename);
|
|
370
372
|
const numberedShardCount = shardInfo.totalShards;
|
|
371
|
-
|
|
373
|
+
logger.info(`Downloading sharded model with ${numberedShardCount} numbered shards + ${allFiles.length - numberedShardCount} companion files to ${shardDir}`);
|
|
372
374
|
// Check which files need to be downloaded
|
|
373
375
|
const invalidIndices = await checkShardCompleteness(hyperdriveKey, allFiles, shardMetadata);
|
|
374
376
|
if (invalidIndices.length === 0) {
|
|
375
|
-
|
|
377
|
+
logger.info(`✅ All ${allFiles.length} files already downloaded and validated`);
|
|
376
378
|
if (progressCallback) {
|
|
377
379
|
const overallTotal = shardMetadata.reduce((sum, shard) => sum + shard.expectedSize, 0);
|
|
378
380
|
const lastFile = allFiles[allFiles.length - 1];
|
|
@@ -392,14 +394,15 @@ async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileNam
|
|
|
392
394
|
},
|
|
393
395
|
});
|
|
394
396
|
}
|
|
397
|
+
await extractTensorsFromShards(shardDir, firstShardFileName);
|
|
395
398
|
return getShardPath(hyperdriveKey, allFiles[0]);
|
|
396
399
|
}
|
|
397
|
-
|
|
400
|
+
logger.info(`📥 Need to download ${invalidIndices.length} of ${allFiles.length} files`);
|
|
398
401
|
// Setup hyperdrive once for all shards
|
|
399
402
|
const corestoreDir = getCorestoreDir(hyperdriveKey);
|
|
400
403
|
const setup = await setupHyperdrive(hyperdriveKey, corestoreDir);
|
|
401
404
|
const cleanup = () => {
|
|
402
|
-
|
|
405
|
+
logger.info("🛑 Aborting sharded hyperdrive download...");
|
|
403
406
|
setup.swarm.suspended = true;
|
|
404
407
|
setup.swarm.suspend().catch(() => {
|
|
405
408
|
// Ignore errors during emergency suspend
|
|
@@ -420,7 +423,7 @@ async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileNam
|
|
|
420
423
|
const filePath = getShardPath(hyperdriveKey, file);
|
|
421
424
|
// Skip if already valid
|
|
422
425
|
if (!invalidIndices.includes(i)) {
|
|
423
|
-
|
|
426
|
+
logger.debug(`✅ File ${i + 1}/${allFiles.length} already valid: ${file}`);
|
|
424
427
|
overallDownloaded += fileMeta.expectedSize;
|
|
425
428
|
// Report progress for skipped files
|
|
426
429
|
if (progressCallback) {
|
|
@@ -436,13 +439,13 @@ async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileNam
|
|
|
436
439
|
shardName: file,
|
|
437
440
|
overallDownloaded,
|
|
438
441
|
overallTotal,
|
|
439
|
-
overallPercentage:
|
|
442
|
+
overallPercentage: calculatePercentage(overallDownloaded, overallTotal),
|
|
440
443
|
},
|
|
441
444
|
});
|
|
442
445
|
}
|
|
443
446
|
continue;
|
|
444
447
|
}
|
|
445
|
-
|
|
448
|
+
logger.info(`📥 Downloading file ${i + 1}/${allFiles.length}: ${file}`);
|
|
446
449
|
const progressContext = progressCallback
|
|
447
450
|
? {
|
|
448
451
|
downloadKey: createHyperdriveDownloadKey(hyperdriveKey, firstShardFileName),
|
|
@@ -460,7 +463,7 @@ async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileNam
|
|
|
460
463
|
if (signal?.aborted) {
|
|
461
464
|
throw new DownloadCancelledError();
|
|
462
465
|
}
|
|
463
|
-
|
|
466
|
+
logger.info(`✅ File ${i + 1}/${allFiles.length} downloaded and validated`);
|
|
464
467
|
overallDownloaded += fileMeta.expectedSize;
|
|
465
468
|
}
|
|
466
469
|
if (progressCallback && overallDownloaded === overallTotal) {
|
|
@@ -481,13 +484,14 @@ async function downloadShardedFilesToFilesystem(hyperdriveKey, firstShardFileNam
|
|
|
481
484
|
},
|
|
482
485
|
});
|
|
483
486
|
}
|
|
487
|
+
await extractTensorsFromShards(shardDir, firstShardFileName);
|
|
484
488
|
// Delete corestore directory after successful download (only when not seeding)
|
|
485
489
|
if (!seed) {
|
|
486
490
|
await deleteCorestoreDirectory(corestoreDir);
|
|
487
491
|
}
|
|
488
492
|
}
|
|
489
493
|
catch (error) {
|
|
490
|
-
|
|
494
|
+
logger.error("❌ Error during sharded hyperdrive download:", error instanceof Error ? error.message : String(error));
|
|
491
495
|
// Preserve cancellation errors
|
|
492
496
|
if (error instanceof Error && error.message === "Download cancelled") {
|
|
493
497
|
throw error;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { handleLoadModel } from "
|
|
2
|
-
export { downloadModelFromHyperdrive } from "./hyperdrive";
|
|
1
|
+
export { handleLoadModel } from "./handler";
|
|
3
2
|
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 "
|
|
2
|
-
export { downloadModelFromHyperdrive } from "./hyperdrive.js";
|
|
1
|
+
export { handleLoadModel } from "./handler.js";
|
|
3
2
|
export { resolveModelPath } from "./resolve.js";
|
|
3
|
+
export { createCancelFunction } from "./download-manager.js";
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { models } from "../../../../models/hyperdrive/models.js";
|
|
2
|
-
import { hyperdriveUrlSchema } from "../../../../schemas/index.js";
|
|
3
|
-
import { getModelsCacheDir } from "../../../utils/index.js";
|
|
2
|
+
import { hyperdriveUrlSchema, SUPPORTED_ARCHIVE_EXTENSIONS, } from "../../../../schemas/index.js";
|
|
3
|
+
import { getModelsCacheDir, getShardedModelCacheDir, generateShortHash, extractAndValidateShardedArchive, } from "../../../utils/index.js";
|
|
4
4
|
import { promises as fsPromises } from "bare-fs";
|
|
5
5
|
import path from "bare-path";
|
|
6
6
|
import { downloadModelFromHttp } from "./http.js";
|
|
7
7
|
import { downloadModelFromHyperdrive } from "./hyperdrive.js";
|
|
8
8
|
import { ModelLoadFailedError, ModelNotFoundError, SeedingNotSupportedError, } from "../../../../utils/errors-server.js";
|
|
9
|
+
import { getServerLogger } from "../../../../logging/index.js";
|
|
10
|
+
const logger = getServerLogger();
|
|
11
|
+
function isArchivePath(filePath) {
|
|
12
|
+
const filename = path.basename(filePath).toLowerCase();
|
|
13
|
+
return SUPPORTED_ARCHIVE_EXTENSIONS.some((ext) => filename.endsWith(ext));
|
|
14
|
+
}
|
|
9
15
|
/**
|
|
10
16
|
* Resolves a local file path or cached file
|
|
11
17
|
*/
|
|
@@ -20,14 +26,30 @@ async function resolveLocalOrCachedFile(modelIdOrPath) {
|
|
|
20
26
|
const cachedPath = path.join(cacheDir, modelIdOrPath);
|
|
21
27
|
try {
|
|
22
28
|
await fsPromises.access(cachedPath);
|
|
23
|
-
|
|
29
|
+
logger.info(`Loading cached model: ${cachedPath}`);
|
|
30
|
+
// Check if cached file is an archive
|
|
31
|
+
if (isArchivePath(cachedPath)) {
|
|
32
|
+
logger.info(`Extracting cached archive: ${cachedPath}`);
|
|
33
|
+
const archiveHash = generateShortHash(cachedPath);
|
|
34
|
+
const extractDir = getShardedModelCacheDir(archiveHash);
|
|
35
|
+
const extractedPath = await extractAndValidateShardedArchive(cachedPath, extractDir);
|
|
36
|
+
return extractedPath;
|
|
37
|
+
}
|
|
24
38
|
return cachedPath;
|
|
25
39
|
}
|
|
26
40
|
catch {
|
|
27
41
|
// Try as local file in current directory
|
|
28
42
|
try {
|
|
29
43
|
await fsPromises.access(modelIdOrPath);
|
|
30
|
-
|
|
44
|
+
logger.info(`Loading local file: ${modelIdOrPath}`);
|
|
45
|
+
// Check if local file is an archive
|
|
46
|
+
if (isArchivePath(modelIdOrPath)) {
|
|
47
|
+
logger.info(`Extracting local archive: ${modelIdOrPath}`);
|
|
48
|
+
const archiveHash = generateShortHash(modelIdOrPath);
|
|
49
|
+
const extractDir = getShardedModelCacheDir(archiveHash);
|
|
50
|
+
const extractedPath = await extractAndValidateShardedArchive(modelIdOrPath, extractDir);
|
|
51
|
+
return extractedPath;
|
|
52
|
+
}
|
|
31
53
|
return modelIdOrPath;
|
|
32
54
|
}
|
|
33
55
|
catch {
|
|
@@ -57,18 +79,27 @@ export async function resolveModelPath(modelSrc, progressCallback, seed) {
|
|
|
57
79
|
// Check if it's an HTTP/HTTPS URL
|
|
58
80
|
if (actualModelSrc.startsWith("http://") ||
|
|
59
81
|
actualModelSrc.startsWith("https://")) {
|
|
60
|
-
|
|
82
|
+
logger.info(`Loading from HTTP URL: ${actualModelSrc}`);
|
|
61
83
|
actualPath = await downloadModelFromHttp(actualModelSrc, progressCallback);
|
|
62
|
-
|
|
84
|
+
logger.info(`Loaded Model to ${actualPath}`);
|
|
63
85
|
}
|
|
64
86
|
else if (hyperdriveKey) {
|
|
65
87
|
// Direct hyperdrive loading
|
|
66
|
-
|
|
88
|
+
logger.info(`Loading from hyperdrive: ${hyperdriveKey}`);
|
|
67
89
|
actualPath = await downloadModelFromHyperdrive(hyperdriveKey, actualModelSrc, seed, progressCallback);
|
|
68
90
|
}
|
|
69
91
|
else if (actualModelSrc.includes("/") || actualModelSrc.includes("\\")) {
|
|
70
92
|
// Handle file paths (absolute or relative with slashes)
|
|
71
|
-
|
|
93
|
+
// Check if it's a local archive file
|
|
94
|
+
if (isArchivePath(actualModelSrc)) {
|
|
95
|
+
logger.info(`Extracting local archive: ${actualModelSrc}`);
|
|
96
|
+
const archiveHash = generateShortHash(actualModelSrc);
|
|
97
|
+
const extractDir = getShardedModelCacheDir(archiveHash);
|
|
98
|
+
actualPath = await extractAndValidateShardedArchive(actualModelSrc, extractDir);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
actualPath = actualModelSrc;
|
|
102
|
+
}
|
|
72
103
|
}
|
|
73
104
|
else {
|
|
74
105
|
// Handle local files and cached files
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleLoadModelDelegated(request:
|
|
1
|
+
import type { LoadModelSrcRequest, LoadModelResponse, ModelProgressUpdate } from "../../../schemas/index";
|
|
2
|
+
export declare function handleLoadModelDelegated(request: LoadModelSrcRequest, progressCallback?: (update: ModelProgressUpdate) => void): Promise<LoadModelResponse>;
|
|
3
3
|
//# sourceMappingURL=load-model-delegated.d.ts.map
|
|
@@ -4,23 +4,28 @@ import { getRPC } from "../../bare/delegate-rpc-client.js";
|
|
|
4
4
|
import { send, stream } from "../../../client/rpc/rpc-client.js";
|
|
5
5
|
import { handleLoadModel } from "./load-model/index.js";
|
|
6
6
|
import { ModelLoadFailedError, DelegateNoFinalResponseError, } from "../../../utils/errors-server.js";
|
|
7
|
+
import { getServerLogger } from "../../../logging/index.js";
|
|
8
|
+
const logger = getServerLogger();
|
|
7
9
|
export async function handleLoadModelDelegated(request, progressCallback) {
|
|
8
10
|
if (!request.delegate) {
|
|
9
11
|
throw new ModelLoadFailedError("Delegate information is required for delegated load model");
|
|
10
12
|
}
|
|
11
13
|
const { delegate } = request;
|
|
12
|
-
const { topic, providerPublicKey, timeout, fallbackToLocal } = delegate;
|
|
14
|
+
const { topic, providerPublicKey, timeout, fallbackToLocal, forceNewConnection, } = delegate;
|
|
13
15
|
try {
|
|
14
|
-
|
|
16
|
+
logger.info(`📤 Sending delegated loadModel request to provider: ${providerPublicKey}${timeout ? `, timeout: ${timeout}ms` : ""}${forceNewConnection ? " (forcing new connection)" : ""}`);
|
|
15
17
|
// Create RPC instance for this HyperSwarm peer
|
|
16
|
-
const rpc = await getRPC(topic, providerPublicKey, {
|
|
18
|
+
const rpc = await getRPC(topic, providerPublicKey, {
|
|
19
|
+
timeout,
|
|
20
|
+
forceNewConnection,
|
|
21
|
+
});
|
|
17
22
|
// Strip out the delegate field to avoid infinite delegation
|
|
18
23
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
19
24
|
const { delegate: _, ...providerRequest } = request;
|
|
20
25
|
let finalResponse;
|
|
21
26
|
if (request.withProgress) {
|
|
22
27
|
// Use streaming for progress updates
|
|
23
|
-
|
|
28
|
+
logger.debug("📊 Using streaming mode for loadModel with progress");
|
|
24
29
|
const responseStream = stream(providerRequest, rpc, timeout ? { timeout } : {});
|
|
25
30
|
for await (const response of responseStream) {
|
|
26
31
|
if (response.type === "modelProgress") {
|
|
@@ -40,11 +45,11 @@ export async function handleLoadModelDelegated(request, progressCallback) {
|
|
|
40
45
|
}
|
|
41
46
|
else {
|
|
42
47
|
// Use simple send for non-progress requests
|
|
43
|
-
|
|
48
|
+
logger.debug("📤 Using simple send mode for loadModel");
|
|
44
49
|
finalResponse = (await send(providerRequest, rpc, timeout ? { timeout } : {}));
|
|
45
50
|
}
|
|
46
51
|
if (!finalResponse || !finalResponse.success) {
|
|
47
|
-
|
|
52
|
+
logger.error("Provider failed to load model:", finalResponse?.error);
|
|
48
53
|
return {
|
|
49
54
|
type: "loadModel",
|
|
50
55
|
success: false,
|
|
@@ -62,7 +67,7 @@ export async function handleLoadModelDelegated(request, progressCallback) {
|
|
|
62
67
|
delegateOptions.timeout = timeout;
|
|
63
68
|
}
|
|
64
69
|
registerModel(modelId, delegateOptions);
|
|
65
|
-
|
|
70
|
+
logger.info(`✅ Delegated model registered: ${modelId} -> provider: ${providerPublicKey}`);
|
|
66
71
|
return {
|
|
67
72
|
type: "loadModel",
|
|
68
73
|
success: true,
|
|
@@ -70,16 +75,16 @@ export async function handleLoadModelDelegated(request, progressCallback) {
|
|
|
70
75
|
};
|
|
71
76
|
}
|
|
72
77
|
catch (error) {
|
|
73
|
-
|
|
78
|
+
logger.error("Error in delegated load model:", error);
|
|
74
79
|
if (fallbackToLocal) {
|
|
75
|
-
|
|
80
|
+
logger.info("🔄 Fallback to local model loading enabled, attempting local load...");
|
|
76
81
|
try {
|
|
77
82
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
78
83
|
const { delegate: _, ...localRequest } = request;
|
|
79
84
|
return await handleLoadModel(localRequest, progressCallback);
|
|
80
85
|
}
|
|
81
86
|
catch (localError) {
|
|
82
|
-
|
|
87
|
+
logger.error("❌ Local fallback also failed:", localError);
|
|
83
88
|
return {
|
|
84
89
|
type: "loadModel",
|
|
85
90
|
success: false,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { registerLoggingStream, unregisterLoggingStream, } from "../../bare/registry/logging-stream-registry.js";
|
|
2
2
|
export async function* handleLoggingStream(request) {
|
|
3
|
-
const {
|
|
3
|
+
const { id } = request;
|
|
4
4
|
const logQueue = [];
|
|
5
5
|
let pendingResolve = null;
|
|
6
6
|
const streamHandler = (level, namespace, message) => {
|
|
7
7
|
const logResponse = {
|
|
8
8
|
type: "loggingStream",
|
|
9
|
-
|
|
9
|
+
id,
|
|
10
10
|
level: level,
|
|
11
11
|
namespace,
|
|
12
12
|
message,
|
|
@@ -19,7 +19,7 @@ export async function* handleLoggingStream(request) {
|
|
|
19
19
|
resolve();
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
registerLoggingStream(
|
|
22
|
+
registerLoggingStream(id, streamHandler);
|
|
23
23
|
try {
|
|
24
24
|
while (true) {
|
|
25
25
|
while (logQueue.length > 0) {
|
|
@@ -32,6 +32,6 @@ export async function* handleLoggingStream(request) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
finally {
|
|
35
|
-
unregisterLoggingStream(
|
|
35
|
+
unregisterLoggingStream(id, streamHandler);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ocr } from "../../bare/addons/onnx-ocr/index.js";
|
|
2
|
+
import { getServerLogger } from "../../../logging/index.js";
|
|
3
|
+
const logger = getServerLogger();
|
|
4
|
+
export async function* handleOCRStream(request) {
|
|
5
|
+
const { modelId, image, options } = request;
|
|
6
|
+
try {
|
|
7
|
+
// Stream OCR results in real-time
|
|
8
|
+
for await (const result of ocr({
|
|
9
|
+
image,
|
|
10
|
+
modelId,
|
|
11
|
+
options,
|
|
12
|
+
})) {
|
|
13
|
+
if (result.blocks && result.blocks.length > 0) {
|
|
14
|
+
yield {
|
|
15
|
+
type: "ocrStream",
|
|
16
|
+
blocks: result.blocks,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (result.stats) {
|
|
20
|
+
yield {
|
|
21
|
+
type: "ocrStream",
|
|
22
|
+
stats: result.stats,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Signal completion
|
|
27
|
+
yield {
|
|
28
|
+
type: "ocrStream",
|
|
29
|
+
done: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
logger.error("Error during OCR:", error);
|
|
34
|
+
yield {
|
|
35
|
+
type: "ocrStream",
|
|
36
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import RPC from "bare-rpc";
|
|
2
2
|
import { createRpcProxy } from "./proxy.js";
|
|
3
|
+
import { getServerLogger } from "../../../../logging/index.js";
|
|
4
|
+
const logger = getServerLogger();
|
|
3
5
|
export function setupConnectionHandlers(swarm) {
|
|
4
|
-
|
|
6
|
+
logger.debug("👂 Setting up connection listener...");
|
|
5
7
|
swarm.on("close", () => {
|
|
6
|
-
|
|
8
|
+
logger.debug("🔗 Connection closed!");
|
|
7
9
|
});
|
|
8
10
|
swarm.on("connection", (conn) => {
|
|
9
|
-
|
|
11
|
+
logger.debug("🔗 Connection event triggered!");
|
|
10
12
|
const peerPubkey = conn.remotePublicKey?.toString("hex");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
logger.info(`📡 New connection established from: ${peerPubkey?.substring(0, 16)}...`);
|
|
14
|
+
logger.debug("🔐 Full peer public key:", peerPubkey);
|
|
13
15
|
// Create RPC instance for this connection (as server)
|
|
14
|
-
|
|
16
|
+
logger.debug("⚙️ Creating RPC instance for connection...");
|
|
15
17
|
new RPC(conn, createRpcProxy());
|
|
16
|
-
|
|
18
|
+
logger.debug("✅ RPC instance created successfully");
|
|
17
19
|
conn.on("close", () => {
|
|
18
|
-
|
|
20
|
+
logger.debug(`🔌 Connection closed for peer: ${peerPubkey?.substring(0, 16)}`);
|
|
19
21
|
});
|
|
20
22
|
conn.on("error", (err) => {
|
|
21
|
-
|
|
23
|
+
logger.error(`❌ Connection error for peer ${peerPubkey?.substring(0, 16)}:`, err);
|
|
22
24
|
});
|
|
23
25
|
});
|
|
24
|
-
|
|
26
|
+
logger.debug("✅ Connection listener set up");
|
|
25
27
|
}
|
|
@@ -1,51 +1,53 @@
|
|
|
1
1
|
import { getSwarm, registerProviderTopic } from "../../../bare/hyperswarm.js";
|
|
2
2
|
import { setupConnectionHandlers } from "./connection.js";
|
|
3
|
+
import { getServerLogger } from "../../../../logging/index.js";
|
|
4
|
+
const logger = getServerLogger();
|
|
3
5
|
export async function provideHandler(request) {
|
|
4
6
|
const swarm = getSwarm({
|
|
5
7
|
firewallConfig: request.firewall,
|
|
6
8
|
});
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
logger.debug("🚀 Provide request received:", request);
|
|
10
|
+
logger.debug("🔍 Swarm keyPair exists:", !!swarm.keyPair);
|
|
11
|
+
logger.debug("🔍 Swarm publicKey:", swarm.keyPair?.publicKey?.toString("hex")?.substring(0, 16));
|
|
10
12
|
try {
|
|
11
|
-
|
|
13
|
+
logger.debug("⚡ Starting provide handler execution");
|
|
12
14
|
const pubKey = swarm.keyPair.publicKey;
|
|
13
|
-
|
|
15
|
+
logger.debug("🔑 Got public key:", pubKey.toString("hex"));
|
|
14
16
|
// Use provided topic from hex string
|
|
15
17
|
const topic = Buffer.from(request.topic, "hex");
|
|
16
18
|
// Join topic as server (provider)
|
|
17
|
-
|
|
19
|
+
logger.info("🌐 Joining topic as server...");
|
|
18
20
|
const discovery = swarm.join(topic, { server: true, client: false });
|
|
19
|
-
|
|
21
|
+
logger.debug("📡 Discovery object created:", !!discovery);
|
|
20
22
|
// Wait for the topic to be fully announced on the DHT
|
|
21
|
-
|
|
23
|
+
logger.debug("⏳ Waiting for topic announcement...");
|
|
22
24
|
await discovery.flushed();
|
|
23
|
-
|
|
25
|
+
logger.info(`✅ Topic announced: ${topic.toString("hex")}`);
|
|
24
26
|
// Wait for connections
|
|
25
|
-
|
|
27
|
+
logger.debug("⏳ Waiting for swarm flush...");
|
|
26
28
|
await swarm.flush();
|
|
27
|
-
|
|
29
|
+
logger.info(`🎯 Ready to accept connections on topic: ${topic.toString("hex").substring(0, 16)}...`);
|
|
28
30
|
// Handle incoming connections
|
|
29
31
|
setupConnectionHandlers(swarm);
|
|
30
32
|
registerProviderTopic(topic.toString("hex"));
|
|
31
|
-
|
|
33
|
+
logger.debug("🏁 About to return success response...");
|
|
32
34
|
const response = {
|
|
33
35
|
type: "provide",
|
|
34
36
|
success: true,
|
|
35
37
|
publicKey: pubKey.toString("hex"),
|
|
36
38
|
};
|
|
37
|
-
|
|
39
|
+
logger.debug("📤 Returning response:", response);
|
|
38
40
|
return response;
|
|
39
41
|
}
|
|
40
42
|
catch (error) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
logger.error("❌ Error in provide handler:", error);
|
|
44
|
+
logger.error("❌ Error stack:", error instanceof Error ? error.stack : "No stack trace");
|
|
43
45
|
const errorResponse = {
|
|
44
46
|
type: "provide",
|
|
45
47
|
success: false,
|
|
46
48
|
error: error instanceof Error ? error.message : "Unknown error",
|
|
47
49
|
};
|
|
48
|
-
|
|
50
|
+
logger.debug("📤 Returning error response:", errorResponse);
|
|
49
51
|
return errorResponse;
|
|
50
52
|
}
|
|
51
53
|
}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { handleRequest } from "../../handle-request.js";
|
|
2
|
+
import { getServerLogger } from "../../../../logging/index.js";
|
|
3
|
+
const logger = getServerLogger();
|
|
2
4
|
// Proxies RPC requests to the main handler: handleRequest
|
|
3
5
|
export function createRpcProxy() {
|
|
4
6
|
return async (rpcRequest) => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
logger.debug("📬 RPC request callback triggered!");
|
|
8
|
+
logger.debug("📦 Raw RPC request data:", rpcRequest.data?.toString());
|
|
7
9
|
try {
|
|
8
|
-
|
|
10
|
+
logger.debug("🚀 Calling handleRequest...");
|
|
9
11
|
await handleRequest(rpcRequest);
|
|
10
|
-
|
|
12
|
+
logger.debug("✅ handleRequest completed successfully");
|
|
11
13
|
}
|
|
12
14
|
catch (error) {
|
|
13
|
-
|
|
15
|
+
logger.error("❌ Error:", error instanceof Error ? error.message : error);
|
|
14
16
|
const errorResponse = JSON.stringify({
|
|
15
17
|
type: "error",
|
|
16
18
|
error: error instanceof Error ? error.message : "Unknown error",
|
|
17
19
|
});
|
|
18
|
-
|
|
20
|
+
logger.debug("📤 Sending error response:", errorResponse);
|
|
19
21
|
rpcRequest.reply(errorResponse, "utf-8");
|
|
20
22
|
}
|
|
21
23
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { RagRequest, RagResponse } from "../../../schemas/index";
|
|
2
|
-
export declare function handleRag(request: RagRequest): Promise<RagResponse>;
|
|
1
|
+
import type { RagRequest, RagResponse, RagProgressUpdate } from "../../../schemas/index";
|
|
2
|
+
export declare function handleRag(request: RagRequest, onProgress?: (update: RagProgressUpdate) => void): Promise<RagResponse>;
|
|
3
3
|
//# sourceMappingURL=rag.d.ts.map
|