@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
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { getModel } from "../../../registry/model-registry.js";
|
|
2
|
+
import fs from "bare-fs";
|
|
3
|
+
import path from "bare-path";
|
|
4
|
+
import { getCacheDir } from "../../../../utils/index.js";
|
|
5
|
+
import { ImageFileNotFoundError, InvalidImageInputError, } from "../../../../../utils/errors-server.js";
|
|
6
|
+
function polygonToBbox(polygon) {
|
|
7
|
+
const xs = polygon.map((p) => p[0]);
|
|
8
|
+
const ys = polygon.map((p) => p[1]);
|
|
9
|
+
return [Math.min(...xs), Math.min(...ys), Math.max(...xs), Math.max(...ys)];
|
|
10
|
+
}
|
|
11
|
+
function normalizeBlock(block) {
|
|
12
|
+
if (block &&
|
|
13
|
+
typeof block === "object" &&
|
|
14
|
+
!Array.isArray(block) &&
|
|
15
|
+
"text" in block) {
|
|
16
|
+
const obj = block;
|
|
17
|
+
return {
|
|
18
|
+
text: obj.text || "",
|
|
19
|
+
...(obj.bbox && { bbox: obj.bbox }),
|
|
20
|
+
...(obj.confidence !== undefined && { confidence: obj.confidence }),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Addon format: [polygon, text, confidence] where polygon is [[x1,y1], [x2,y2], [x3,y3], [x4,y4]]
|
|
24
|
+
if (Array.isArray(block) && block.length >= 2) {
|
|
25
|
+
const blockArr = block;
|
|
26
|
+
const [polygonOrBbox, text, confidence] = blockArr;
|
|
27
|
+
const textStr = typeof text === "string" ? text : "";
|
|
28
|
+
if (Array.isArray(polygonOrBbox) &&
|
|
29
|
+
polygonOrBbox.length === 4 &&
|
|
30
|
+
Array.isArray(polygonOrBbox[0]) &&
|
|
31
|
+
polygonOrBbox[0].length === 2) {
|
|
32
|
+
return {
|
|
33
|
+
text: textStr,
|
|
34
|
+
bbox: polygonToBbox(polygonOrBbox),
|
|
35
|
+
...(confidence !== undefined && { confidence: Number(confidence) }),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(polygonOrBbox) &&
|
|
39
|
+
polygonOrBbox.length === 4 &&
|
|
40
|
+
typeof polygonOrBbox[0] === "number") {
|
|
41
|
+
return {
|
|
42
|
+
text: textStr,
|
|
43
|
+
bbox: polygonOrBbox,
|
|
44
|
+
...(confidence !== undefined && { confidence: Number(confidence) }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export async function* ocr(params) {
|
|
51
|
+
const model = getModel(params.modelId);
|
|
52
|
+
let imagePath;
|
|
53
|
+
let cleanupPath = null;
|
|
54
|
+
switch (params.image.type) {
|
|
55
|
+
case "base64": {
|
|
56
|
+
const tempDir = getCacheDir("tmp");
|
|
57
|
+
const tempPath = path.join(tempDir, `ocr-${Date.now()}.png`);
|
|
58
|
+
fs.writeFileSync(tempPath, Buffer.from(params.image.value, "base64"));
|
|
59
|
+
imagePath = tempPath;
|
|
60
|
+
cleanupPath = tempPath;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case "filePath": {
|
|
64
|
+
imagePath = params.image.value;
|
|
65
|
+
try {
|
|
66
|
+
fs.accessSync(imagePath);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new ImageFileNotFoundError(imagePath, error);
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
default:
|
|
74
|
+
throw new InvalidImageInputError();
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const response = (await model.run({
|
|
78
|
+
path: imagePath,
|
|
79
|
+
...(params.options && { options: params.options }),
|
|
80
|
+
}));
|
|
81
|
+
const rawData = [];
|
|
82
|
+
await response
|
|
83
|
+
.onUpdate((data) => {
|
|
84
|
+
rawData.push(data);
|
|
85
|
+
return [];
|
|
86
|
+
})
|
|
87
|
+
.await();
|
|
88
|
+
const blocks = rawData
|
|
89
|
+
.flat(1)
|
|
90
|
+
.map(normalizeBlock)
|
|
91
|
+
.filter((b) => b !== null);
|
|
92
|
+
if (blocks.length > 0) {
|
|
93
|
+
yield { blocks };
|
|
94
|
+
}
|
|
95
|
+
if (response.stats) {
|
|
96
|
+
yield { blocks: [], stats: response.stats };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (cleanupPath) {
|
|
101
|
+
try {
|
|
102
|
+
fs.unlinkSync(cleanupPath);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Ignore cleanup errors
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -2,9 +2,11 @@ import { promises as fsPromises } from "bare-fs";
|
|
|
2
2
|
import path from "bare-path";
|
|
3
3
|
import { unregisterModel } from "../registry/model-registry.js";
|
|
4
4
|
import { unregisterAllLoggingStreams } from "../registry/logging-stream-registry.js";
|
|
5
|
+
import { unregisterAddonLogger, getServerLogger } from "../../../logging/index.js";
|
|
5
6
|
import { unloadModelParamsSchema } from "../../../schemas/index.js";
|
|
6
7
|
import { ModelNotLoadedError } from "../../../utils/errors-server.js";
|
|
7
8
|
import { detectShardedModel } from "../../utils/index.js";
|
|
9
|
+
const logger = getServerLogger();
|
|
8
10
|
export async function unloadModel(params) {
|
|
9
11
|
const { modelId, clearStorage } = unloadModelParamsSchema.parse(params);
|
|
10
12
|
const entry = unregisterModel(modelId);
|
|
@@ -25,14 +27,15 @@ export async function unloadModel(params) {
|
|
|
25
27
|
// Delete entire shard directory
|
|
26
28
|
const shardDir = path.dirname(modelPath);
|
|
27
29
|
await fsPromises.rm(shardDir, { recursive: true, force: true });
|
|
28
|
-
|
|
30
|
+
logger.info(`Sharded model storage cleared: ${shardDir}`);
|
|
29
31
|
}
|
|
30
32
|
else {
|
|
31
33
|
// Delete single file
|
|
32
34
|
await fsPromises.rm(modelPath, { recursive: true, force: true });
|
|
33
|
-
|
|
35
|
+
logger.info(`Model storage cleared: ${modelPath}`);
|
|
34
36
|
}
|
|
35
37
|
}
|
|
38
|
+
unregisterAddonLogger(modelId);
|
|
36
39
|
unregisterAllLoggingStreams(modelId);
|
|
37
|
-
|
|
40
|
+
logger.info(`Model ${modelId} unloaded`);
|
|
38
41
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import TranscriptionWhispercpp from "@qvac/transcription-whispercpp";
|
|
1
|
+
import TranscriptionWhispercpp, {} from "@qvac/transcription-whispercpp";
|
|
2
2
|
import {} from "../../registry/model-registry.js";
|
|
3
3
|
import {} from "../../../../schemas/index.js";
|
|
4
4
|
import { createStreamLogger } from "../../../../logging/index.js";
|
|
@@ -26,6 +26,7 @@ export function createWhisperModel(modelId, modelPath, whisperConfig, vadModelPa
|
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
28
|
const { contextParams, miscConfig, ...whisperParams } = whisperConfig;
|
|
29
|
+
// Cast to upstream type - our stricter Zod schema is compatible at runtime
|
|
29
30
|
const config = {
|
|
30
31
|
whisperConfig: whisperParams,
|
|
31
32
|
...(contextParams && { contextParams }),
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { getModel, getModelConfig, } from "../../../registry/model-registry.js";
|
|
2
|
+
import { Readable } from "bare-stream";
|
|
3
|
+
import fs from "bare-fs";
|
|
4
|
+
import { needsDecoding, decodeAudioToStream } from "../../../../utils/index.js";
|
|
5
|
+
import {} from "../../../../../schemas/index.js";
|
|
6
|
+
import { AudioFileNotFoundError, InvalidAudioChunkError, } from "../../../../../utils/errors-server.js";
|
|
7
|
+
import { getServerLogger } from "../../../../../logging/index.js";
|
|
8
|
+
const logger = getServerLogger();
|
|
9
|
+
export async function* transcribe(params) {
|
|
10
|
+
const model = getModel(params.modelId);
|
|
11
|
+
const modelConfig = getModelConfig(params.modelId);
|
|
12
|
+
let originalConfig = null;
|
|
13
|
+
const audioFormat = modelConfig.audio_format || "s16le";
|
|
14
|
+
if (params.prompt && typeof model.reload === "function") {
|
|
15
|
+
originalConfig = modelConfig;
|
|
16
|
+
const updatedConfig = {
|
|
17
|
+
...originalConfig,
|
|
18
|
+
initial_prompt: params.prompt,
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
21
|
+
const { contextParams: _, miscConfig, ...whisperParams } = updatedConfig;
|
|
22
|
+
await model.reload({
|
|
23
|
+
whisperConfig: whisperParams,
|
|
24
|
+
...(miscConfig && { miscConfig }),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
let audioStream;
|
|
29
|
+
const audioChunk = params.audioChunk;
|
|
30
|
+
switch (audioChunk.type) {
|
|
31
|
+
case "base64": {
|
|
32
|
+
const audioBuffer = Buffer.from(audioChunk.value, "base64");
|
|
33
|
+
audioStream = Readable.from([audioBuffer]);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case "filePath": {
|
|
37
|
+
const filePath = audioChunk.value;
|
|
38
|
+
try {
|
|
39
|
+
fs.accessSync(filePath);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new AudioFileNotFoundError(filePath, error);
|
|
43
|
+
}
|
|
44
|
+
if (needsDecoding(filePath)) {
|
|
45
|
+
audioStream = await decodeAudioToStream(filePath, audioFormat);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
audioStream = fs.createReadStream(filePath);
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
default:
|
|
53
|
+
throw new InvalidAudioChunkError();
|
|
54
|
+
}
|
|
55
|
+
// Run transcription with streaming enabled
|
|
56
|
+
const response = await model.run(audioStream);
|
|
57
|
+
for await (const output of response.iterate()) {
|
|
58
|
+
logger.debug("Streaming Transcription Update:", output);
|
|
59
|
+
// Filter out blank audio chunks and process the text
|
|
60
|
+
const text = output
|
|
61
|
+
.filter((chunk) => !chunk.text.includes("[BLANK_AUDIO]"))
|
|
62
|
+
.map((chunk) => chunk.text)
|
|
63
|
+
.join("");
|
|
64
|
+
if (text.trim()) {
|
|
65
|
+
yield text;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
if (originalConfig && typeof model.reload === "function") {
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
72
|
+
const { contextParams: _, miscConfig, ...whisperParams } = originalConfig;
|
|
73
|
+
await model.reload({
|
|
74
|
+
whisperConfig: {
|
|
75
|
+
...whisperParams,
|
|
76
|
+
initial_prompt: "",
|
|
77
|
+
},
|
|
78
|
+
...(miscConfig && { miscConfig }),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -2,8 +2,21 @@ import { getSwarm } from "./hyperswarm.js";
|
|
|
2
2
|
import RPC from "bare-rpc";
|
|
3
3
|
import { withTimeout } from "../../utils/withTimeout.js";
|
|
4
4
|
import { DelegateConnectionFailedError } from "../../utils/errors-server.js";
|
|
5
|
+
import { getServerLogger } from "../../logging/index.js";
|
|
6
|
+
const logger = getServerLogger();
|
|
5
7
|
// Map of active RPC instances by public key
|
|
6
8
|
const activeRPCs = new Map();
|
|
9
|
+
// Map to store underlying connections for cleanup
|
|
10
|
+
const activeConnections = new Map();
|
|
11
|
+
function closeConnection(publicKey) {
|
|
12
|
+
const existingConnection = activeConnections.get(publicKey);
|
|
13
|
+
if (existingConnection) {
|
|
14
|
+
logger.info(`🔌 Closing existing connection for peer: ${publicKey}`);
|
|
15
|
+
existingConnection.destroy();
|
|
16
|
+
activeConnections.delete(publicKey);
|
|
17
|
+
activeRPCs.delete(publicKey);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
7
20
|
// Establish RPC connection to a peer if not already connected
|
|
8
21
|
async function ensureRPCConnection(topic, publicKey, timeout) {
|
|
9
22
|
// Check if we already have an RPC instance for this peer
|
|
@@ -12,7 +25,7 @@ async function ensureRPCConnection(topic, publicKey, timeout) {
|
|
|
12
25
|
if (!rpc) {
|
|
13
26
|
// Need to establish connection first
|
|
14
27
|
try {
|
|
15
|
-
|
|
28
|
+
logger.info(`🔗 Establishing RPC connection to topic: ${topic}, peer: ${publicKey}, timeout: ${timeout}ms`);
|
|
16
29
|
const connectionPromise = (async () => {
|
|
17
30
|
const topicBuffer = Buffer.from(topic, "hex");
|
|
18
31
|
// const discovery =
|
|
@@ -21,23 +34,23 @@ async function ensureRPCConnection(topic, publicKey, timeout) {
|
|
|
21
34
|
client: true,
|
|
22
35
|
});
|
|
23
36
|
await swarm.flush();
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
logger.info(`✅ Connected to topic: ${topic}`);
|
|
38
|
+
logger.debug(`📊 Active RPC connections: ${activeRPCs.size}`);
|
|
26
39
|
// Check again if we now have an RPC instance for the target peer
|
|
27
40
|
rpc = activeRPCs.get(publicKey);
|
|
28
41
|
if (!rpc) {
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
logger.error(`❌ No RPC instance found for peer ${publicKey}`);
|
|
43
|
+
logger.debug(`📊 Available RPC connections:`, Array.from(activeRPCs.keys()));
|
|
31
44
|
throw new DelegateConnectionFailedError(`Could not establish RPC connection to peer ${publicKey} on topic ${topic}`);
|
|
32
45
|
}
|
|
33
46
|
else {
|
|
34
|
-
|
|
47
|
+
logger.debug(`✅ RPC instance found for peer ${publicKey}`);
|
|
35
48
|
}
|
|
36
49
|
})();
|
|
37
50
|
await withTimeout(connectionPromise, timeout);
|
|
38
51
|
}
|
|
39
52
|
catch (error) {
|
|
40
|
-
|
|
53
|
+
logger.error("Failed to establish RPC connection:", error);
|
|
41
54
|
throw new DelegateConnectionFailedError(`RPC connection failed: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
42
55
|
}
|
|
43
56
|
}
|
|
@@ -46,25 +59,32 @@ async function ensureRPCConnection(topic, publicKey, timeout) {
|
|
|
46
59
|
// Create an RPC instance for a specific HyperSwarm peer
|
|
47
60
|
export async function getRPC(topic, publicKey, options = {}) {
|
|
48
61
|
const swarm = getSwarm();
|
|
62
|
+
// Close existing connection if forceNewConnection is true
|
|
63
|
+
if (options.forceNewConnection) {
|
|
64
|
+
closeConnection(publicKey);
|
|
65
|
+
}
|
|
49
66
|
// Set up connection tracking
|
|
50
67
|
swarm.on("connection", (conn) => {
|
|
51
68
|
const peerPubkey = conn.remotePublicKey?.toString("hex");
|
|
52
69
|
if (!peerPubkey)
|
|
53
70
|
return;
|
|
54
|
-
|
|
71
|
+
logger.debug(`🍺 New peer connection established: ${peerPubkey}`);
|
|
55
72
|
// Create RPC instance for this connection (as client)
|
|
56
73
|
const rpc = new RPC(conn, () => {
|
|
57
74
|
// No-op handler since we're only sending requests, not receiving them
|
|
58
75
|
});
|
|
59
|
-
// Store RPC instance by peer ID for lookup
|
|
76
|
+
// Store RPC instance and connection by peer ID for lookup
|
|
60
77
|
activeRPCs.set(peerPubkey, rpc);
|
|
78
|
+
activeConnections.set(peerPubkey, conn);
|
|
61
79
|
conn.on("close", () => {
|
|
62
|
-
|
|
80
|
+
logger.debug(`Connection closed for peer: ${peerPubkey}`);
|
|
63
81
|
activeRPCs.delete(peerPubkey);
|
|
82
|
+
activeConnections.delete(peerPubkey);
|
|
64
83
|
});
|
|
65
84
|
conn.on("error", (err) => {
|
|
66
|
-
|
|
85
|
+
logger.error(`Connection error for peer ${peerPubkey}:`, err);
|
|
67
86
|
activeRPCs.delete(peerPubkey);
|
|
87
|
+
activeConnections.delete(peerPubkey);
|
|
68
88
|
});
|
|
69
89
|
});
|
|
70
90
|
return await ensureRPCConnection(topic, publicKey, options.timeout);
|
|
@@ -3,13 +3,15 @@ import Hyperswarm from "hyperswarm";
|
|
|
3
3
|
import crypto from "bare-crypto";
|
|
4
4
|
import { envSchema } from "../../schemas/provide.js";
|
|
5
5
|
import { getSDKConfig } from "./registry/config-registry.js";
|
|
6
|
+
import { getServerLogger } from "../../logging/index.js";
|
|
7
|
+
const logger = getServerLogger();
|
|
6
8
|
function getHyperswarmSeedBuffer() {
|
|
7
9
|
const parsedEnv = envSchema.safeParse(process.env);
|
|
8
10
|
if (parsedEnv.success) {
|
|
9
11
|
return Buffer.from(parsedEnv.data.QVAC_HYPERSWARM_SEED, "hex");
|
|
10
12
|
}
|
|
11
13
|
else {
|
|
12
|
-
|
|
14
|
+
logger.info(`🎲 No seed provided, generating random seed (provider will have random identity)`);
|
|
13
15
|
return crypto.randomBytes(32);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
@@ -24,20 +26,20 @@ function createFirewallFunction(config) {
|
|
|
24
26
|
if (mode === "allow") {
|
|
25
27
|
const allowed = publicKeySet.has(remoteKeyHex);
|
|
26
28
|
if (!allowed) {
|
|
27
|
-
|
|
29
|
+
logger.debug(`🚫 Firewall: Denied connection from ${remoteKeyHex.substring(0, 16)}... (not in allowlist)`);
|
|
28
30
|
}
|
|
29
31
|
else {
|
|
30
|
-
|
|
32
|
+
logger.debug(`✅ Firewall: Allowed connection from ${remoteKeyHex.substring(0, 16)}... (in allowlist)`);
|
|
31
33
|
}
|
|
32
34
|
return !allowed;
|
|
33
35
|
}
|
|
34
36
|
else {
|
|
35
37
|
const denied = publicKeySet.has(remoteKeyHex);
|
|
36
38
|
if (denied) {
|
|
37
|
-
|
|
39
|
+
logger.debug(`🚫 Firewall: Denied connection from ${remoteKeyHex.substring(0, 16)}... (in denylist)`);
|
|
38
40
|
}
|
|
39
41
|
else {
|
|
40
|
-
|
|
42
|
+
logger.debug(`✅ Firewall: Allowed connection from ${remoteKeyHex.substring(0, 16)}... (not in denylist)`);
|
|
41
43
|
}
|
|
42
44
|
return denied;
|
|
43
45
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LLMChunkAdapter } from "@qvac/rag";
|
|
2
|
+
import { ragChunkParamsSchema } from "../../../../schemas/index.js";
|
|
3
|
+
export async function chunk(params) {
|
|
4
|
+
const { documents, chunkOpts } = ragChunkParamsSchema.parse(params);
|
|
5
|
+
const chunker = new LLMChunkAdapter(chunkOpts);
|
|
6
|
+
return await chunker.chunkText(documents, chunkOpts);
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { closeRagInstance, deleteWorkspace, DEFAULT_WORKSPACE, } from "../rag-workspace-manager.js";
|
|
2
|
+
import { ragCloseWorkspaceParamsSchema, } from "../../../../schemas/index.js";
|
|
3
|
+
export async function closeWorkspace(params) {
|
|
4
|
+
const { workspace, deleteOnClose } = ragCloseWorkspaceParamsSchema.parse(params);
|
|
5
|
+
await closeRagInstance(workspace);
|
|
6
|
+
if (deleteOnClose) {
|
|
7
|
+
await deleteWorkspace(workspace ?? DEFAULT_WORKSPACE);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type RagDeleteEmbeddingsParams } from "../../../../schemas/index";
|
|
2
|
-
export declare function deleteEmbeddings(params: RagDeleteEmbeddingsParams): Promise<
|
|
2
|
+
export declare function deleteEmbeddings(params: RagDeleteEmbeddingsParams): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=delete-embeddings.d.ts.map
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { getRagDbAdapter, hasRagWorkspaceStorage, } from "../rag-workspace-manager.js";
|
|
2
|
+
import { ragDeleteEmbeddingsParamsSchema, } from "../../../../schemas/index.js";
|
|
3
|
+
import { RAGDeleteFailedError } from "../../../../utils/errors-server.js";
|
|
4
4
|
export async function deleteEmbeddings(params) {
|
|
5
|
-
const {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
return success;
|
|
5
|
+
const { ids, workspace } = ragDeleteEmbeddingsParamsSchema.parse(params);
|
|
6
|
+
if (!hasRagWorkspaceStorage(workspace)) {
|
|
7
|
+
throw new RAGDeleteFailedError("workspace is not initialized");
|
|
8
|
+
}
|
|
9
|
+
const dbAdapter = await getRagDbAdapter(workspace);
|
|
10
|
+
await dbAdapter.deleteEmbeddings(ids);
|
|
12
11
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { isWorkspaceLoaded, deleteWorkspace as deleteWorkspaceFromManager, } from "../rag-workspace-manager.js";
|
|
2
|
+
import { ragDeleteWorkspaceParamsSchema, } from "../../../../schemas/index.js";
|
|
3
|
+
import { RAGWorkspaceNotFoundError, RAGWorkspaceInUseError, } from "../../../../utils/errors-server.js";
|
|
4
|
+
export async function deleteWorkspace(params) {
|
|
5
|
+
const { workspace } = ragDeleteWorkspaceParamsSchema.parse(params);
|
|
6
|
+
// Check if workspace is currently in use
|
|
7
|
+
if (isWorkspaceLoaded(workspace)) {
|
|
8
|
+
throw new RAGWorkspaceInUseError(workspace);
|
|
9
|
+
}
|
|
10
|
+
const deleted = await deleteWorkspaceFromManager(workspace);
|
|
11
|
+
if (!deleted) {
|
|
12
|
+
throw new RAGWorkspaceNotFoundError(workspace);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type RagIngestParams } from "../../../../schemas/index";
|
|
2
|
+
import type { IngestStage } from "@qvac/rag";
|
|
3
|
+
interface IngestHandlerOptions {
|
|
4
|
+
onProgress?: (stage: IngestStage, current: number, total: number) => void;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
}
|
|
7
|
+
export declare function ingest(params: RagIngestParams, options?: IngestHandlerOptions): Promise<import("@qvac/rag").IngestResult>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getRagInstance } from "../rag-workspace-manager.js";
|
|
2
|
+
import { embed } from "../../addons/llamacpp-embedding/index.js";
|
|
3
|
+
import { ragIngestParamsSchema } from "../../../../schemas/index.js";
|
|
4
|
+
export async function ingest(params, options) {
|
|
5
|
+
const { modelId, documents, chunk, chunkOpts, workspace, progressInterval } = ragIngestParamsSchema.parse(params);
|
|
6
|
+
async function embeddingFunction(text) {
|
|
7
|
+
return await embed({ modelId, text });
|
|
8
|
+
}
|
|
9
|
+
const rag = await getRagInstance(modelId, embeddingFunction, workspace);
|
|
10
|
+
const ingestOpts = {
|
|
11
|
+
chunk,
|
|
12
|
+
chunkOpts,
|
|
13
|
+
progressInterval,
|
|
14
|
+
onProgress: options?.onProgress,
|
|
15
|
+
signal: options?.signal,
|
|
16
|
+
};
|
|
17
|
+
return await rag.ingest(documents, modelId, ingestOpts);
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type RagReindexParams } from "../../../../schemas/index";
|
|
2
|
+
import type { ReindexResult, ReindexStage } from "@qvac/rag";
|
|
3
|
+
interface ReindexHandlerOptions {
|
|
4
|
+
onProgress?: (stage: ReindexStage, current: number, total: number) => void;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
}
|
|
7
|
+
export declare function reindex(params: RagReindexParams, options?: ReindexHandlerOptions): Promise<ReindexResult>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=reindex.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getRagDbAdapter, hasRagWorkspaceStorage, } from "../rag-workspace-manager.js";
|
|
2
|
+
import { ragReindexParamsSchema } from "../../../../schemas/index.js";
|
|
3
|
+
import { RAGHyperDBFailedError } from "../../../../utils/errors-server.js";
|
|
4
|
+
export async function reindex(params, options) {
|
|
5
|
+
const { workspace } = ragReindexParamsSchema.parse(params);
|
|
6
|
+
if (!hasRagWorkspaceStorage(workspace)) {
|
|
7
|
+
throw new RAGHyperDBFailedError("workspace is not initialized");
|
|
8
|
+
}
|
|
9
|
+
const dbAdapter = await getRagDbAdapter(workspace);
|
|
10
|
+
const reindexOpts = {
|
|
11
|
+
onProgress: options?.onProgress,
|
|
12
|
+
signal: options?.signal,
|
|
13
|
+
};
|
|
14
|
+
const result = await dbAdapter.reindex(reindexOpts);
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { type RagSaveEmbeddingsParams } from "../../../../schemas/index";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import type { SaveStage } from "@qvac/rag";
|
|
3
|
+
interface SaveEmbeddingsHandlerOptions {
|
|
4
|
+
onProgress?: (stage: SaveStage, current: number, total: number) => void;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
}
|
|
7
|
+
export declare function saveEmbeddings(params: RagSaveEmbeddingsParams, options?: SaveEmbeddingsHandlerOptions): Promise<import("@qvac/rag").SaveEmbeddingsResult[]>;
|
|
8
|
+
export {};
|
|
6
9
|
//# sourceMappingURL=save-embeddings.d.ts.map
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return await embed({ modelId, text });
|
|
8
|
-
};
|
|
9
|
-
const rag = await getRagInstance(modelId, embeddingFunction, workspace);
|
|
10
|
-
const saveOpts = { chunk };
|
|
11
|
-
if (chunkOpts) {
|
|
12
|
-
saveOpts.chunkOpts = chunkOpts;
|
|
1
|
+
import { getRagDbAdapter } from "../rag-workspace-manager.js";
|
|
2
|
+
import { ragSaveEmbeddingsParamsSchema, } from "../../../../schemas/index.js";
|
|
3
|
+
export async function saveEmbeddings(params, options) {
|
|
4
|
+
const { documents, progressInterval, workspace } = ragSaveEmbeddingsParamsSchema.parse(params);
|
|
5
|
+
if (documents.length === 0) {
|
|
6
|
+
return [];
|
|
13
7
|
}
|
|
14
|
-
const
|
|
15
|
-
|
|
8
|
+
const dbAdapter = await getRagDbAdapter(workspace);
|
|
9
|
+
const saveOpts = {
|
|
10
|
+
progressInterval,
|
|
11
|
+
onProgress: options?.onProgress,
|
|
12
|
+
signal: options?.signal,
|
|
13
|
+
};
|
|
14
|
+
return await dbAdapter.saveEmbeddings(documents, saveOpts);
|
|
16
15
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { getRagInstance } from "../rag-manager.js";
|
|
2
|
-
import { embed } from "../../addons/llamacpp/index.js";
|
|
3
|
-
import {
|
|
1
|
+
import { getRagInstance, hasRagWorkspaceStorage, } from "../rag-workspace-manager.js";
|
|
2
|
+
import { embed } from "../../addons/llamacpp-embedding/index.js";
|
|
3
|
+
import { ragSearchParamsSchema } from "../../../../schemas/index.js";
|
|
4
4
|
export async function search(params) {
|
|
5
|
-
const { modelId, query, topK, n, workspace } =
|
|
6
|
-
|
|
5
|
+
const { modelId, query, topK, n, workspace } = ragSearchParamsSchema.parse(params);
|
|
6
|
+
if (!hasRagWorkspaceStorage(workspace)) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
async function embeddingFunction(text) {
|
|
7
10
|
return await embed({ modelId, text });
|
|
8
|
-
}
|
|
11
|
+
}
|
|
9
12
|
const rag = await getRagInstance(modelId, embeddingFunction, workspace);
|
|
10
|
-
const results = await rag.search(query, {
|
|
11
|
-
topK,
|
|
12
|
-
n,
|
|
13
|
-
});
|
|
13
|
+
const results = await rag.search(query, { topK, n });
|
|
14
14
|
return results;
|
|
15
15
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
export { chunk } from "./handlers/chunk";
|
|
2
|
+
export { ingest } from "./handlers/ingest";
|
|
1
3
|
export { saveEmbeddings } from "./handlers/save-embeddings";
|
|
2
4
|
export { search } from "./handlers/search";
|
|
3
5
|
export { deleteEmbeddings } from "./handlers/delete-embeddings";
|
|
4
|
-
export {
|
|
6
|
+
export { reindex } from "./handlers/reindex";
|
|
7
|
+
export { listWorkspaces } from "./handlers/list-workspaces";
|
|
8
|
+
export { closeWorkspace } from "./handlers/close-workspace";
|
|
9
|
+
export { deleteWorkspace } from "./handlers/delete-workspace";
|
|
10
|
+
export { closeAllRagInstances, DEFAULT_WORKSPACE, type RagWorkspaceInfo, } from "./rag-workspace-manager";
|
|
11
|
+
export { registerRagOperation, unregisterRagOperation, cancelRagOperation, } from "./rag-operation-manager";
|
|
5
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
export { chunk } from "./handlers/chunk.js";
|
|
2
|
+
export { ingest } from "./handlers/ingest.js";
|
|
1
3
|
export { saveEmbeddings } from "./handlers/save-embeddings.js";
|
|
2
4
|
export { search } from "./handlers/search.js";
|
|
3
5
|
export { deleteEmbeddings } from "./handlers/delete-embeddings.js";
|
|
4
|
-
export {
|
|
6
|
+
export { reindex } from "./handlers/reindex.js";
|
|
7
|
+
export { listWorkspaces } from "./handlers/list-workspaces.js";
|
|
8
|
+
export { closeWorkspace } from "./handlers/close-workspace.js";
|
|
9
|
+
export { deleteWorkspace } from "./handlers/delete-workspace.js";
|
|
10
|
+
export { closeAllRagInstances, DEFAULT_WORKSPACE, } from "./rag-workspace-manager.js";
|
|
11
|
+
export { registerRagOperation, unregisterRagOperation, cancelRagOperation, } from "./rag-operation-manager.js";
|