@qvac/sdk 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -11
- 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/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 -1
- package/dist/client/api/index.js +2 -1
- package/dist/client/api/load-model.js +6 -1
- 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 +1 -1
- package/dist/client/init-hooks.d.ts +4 -3
- package/dist/client/init-hooks.js +40 -31
- package/dist/client/rpc/bare-client.d.ts +1 -178
- package/dist/client/rpc/bare-client.js +42 -9
- package/dist/client/rpc/expo-rpc-client.js +57 -2
- package/dist/client/rpc/node-rpc-client.js +5 -1
- package/dist/client/rpc/rpc-client.d.ts +1 -1
- package/dist/client/rpc/rpc-client.js +11 -57
- 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/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 +4 -3
- package/dist/examples/embed-hyperdrive.js +4 -0
- package/dist/examples/kv-cache-custom-key.js +16 -1
- package/dist/examples/llamacpp-sharded.js +12 -3
- 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 +3 -2
- package/dist/index.js +3 -1
- package/dist/logging/addon.js +23 -7
- package/dist/logging/base-logger.js +2 -2
- package/dist/logging/client-logger.js +15 -4
- package/dist/logging/index.d.ts +1 -0
- package/dist/logging/index.js +1 -0
- package/dist/logging/logger.js +11 -3
- package/dist/logging/namespaces.d.ts +1 -0
- package/dist/logging/namespaces.js +1 -0
- package/dist/logging/registry.d.ts +5 -0
- package/dist/logging/registry.js +17 -5
- package/dist/logging/transport.js +2 -2
- package/dist/logging/utils.d.ts +2 -0
- package/dist/logging/utils.js +62 -0
- package/dist/models/hyperdrive/models.d.ts +1096 -178
- package/dist/models/hyperdrive/models.js +1476 -507
- 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 +582 -77
- package/dist/schemas/common.js +6 -1
- 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/get-model-info.d.ts +12 -10
- package/dist/schemas/get-model-info.js +9 -1
- package/dist/schemas/index.d.ts +6 -2
- package/dist/schemas/index.js +9 -2
- package/dist/schemas/llamacpp-config.d.ts +112 -8
- package/dist/schemas/llamacpp-config.js +40 -8
- package/dist/schemas/load-model.d.ts +2993 -525
- package/dist/schemas/load-model.js +88 -33
- package/dist/schemas/logging-stream.d.ts +2 -2
- package/dist/schemas/model-src-utils.d.ts +38 -16
- package/dist/schemas/model-src-utils.js +4 -8
- 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 +20 -8
- package/dist/schemas/reload-config.js +7 -5
- package/dist/schemas/runtime-context.d.ts +19 -0
- package/dist/schemas/runtime-context.js +7 -0
- package/dist/schemas/sdk-config.d.ts +697 -2
- package/dist/schemas/sdk-config.js +99 -1
- package/dist/schemas/sdk-errors-client.d.ts +1 -0
- package/dist/schemas/sdk-errors-client.js +5 -0
- package/dist/schemas/sdk-errors-server.d.ts +14 -0
- package/dist/schemas/sdk-errors-server.js +70 -0
- package/dist/schemas/shard.d.ts +21 -0
- package/dist/schemas/shard.js +17 -0
- package/dist/schemas/translate.d.ts +68 -23
- package/dist/schemas/translate.js +37 -11
- package/dist/schemas/translation-config.d.ts +272 -29
- package/dist/schemas/translation-config.js +63 -6
- 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 +3 -26
- 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 +43 -10
- 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/index.d.ts +3 -0
- package/dist/server/bare/addons/llamacpp-embedding/index.js +2 -0
- package/dist/server/bare/addons/load-model.js +28 -24
- 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/{whispercpp → whispercpp-transcription}/create-model.js +2 -1
- package/dist/server/bare/delegate-rpc-client.js +19 -1
- 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.js +11 -0
- package/dist/server/bare/registry/logging-stream-registry.js +3 -3
- 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 +110 -0
- package/dist/server/bare/registry/model-registry.d.ts +6 -29
- 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/handle-request.js +91 -9
- package/dist/server/rpc/handlers/cancelHandler.js +10 -1
- package/dist/server/rpc/handlers/completion-stream.js +1 -1
- package/dist/server/rpc/handlers/delete-cache.js +1 -1
- package/dist/server/rpc/handlers/embed.js +1 -1
- 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 -1
- package/dist/server/rpc/handlers/index.js +2 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +11 -11
- package/dist/server/rpc/handlers/load-model/download-manager.js +36 -26
- 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 +342 -33
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +5 -3
- 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 +32 -3
- package/dist/server/rpc/handlers/load-model-delegated.js +6 -3
- 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/rag.d.ts +2 -2
- package/dist/server/rpc/handlers/rag.js +107 -43
- package/dist/server/rpc/handlers/text-to-speech.js +1 -1
- package/dist/server/rpc/handlers/transcribe-stream.js +1 -1
- package/dist/server/rpc/handlers/translate.js +6 -15
- package/dist/server/utils/archive.d.ts +3 -0
- package/dist/server/utils/archive.js +171 -0
- package/dist/server/utils/audio/decoder.js +2 -2
- package/dist/server/utils/cache.d.ts +5 -5
- package/dist/server/utils/cache.js +6 -6
- package/dist/server/utils/config-transform.d.ts +2 -2
- package/dist/server/utils/config-transform.js +8 -6
- 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 +3 -1
- package/dist/server/utils/index.js +3 -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 +8 -3
- package/dist/utils/errors-base.d.ts +1 -1
- package/dist/utils/errors-base.js +2 -2
- package/dist/utils/errors-client.d.ts +12 -0
- package/dist/utils/errors-client.js +20 -0
- package/dist/utils/errors-server.d.ts +33 -0
- package/dist/utils/errors-server.js +55 -0
- package/package.json +42 -17
- package/dist/client/rpc/bare-rpc-client.d.ts +0 -4
- package/dist/client/rpc/bare-rpc-client.js +0 -94
- package/dist/examples/config/config-path.d.ts +0 -8
- package/dist/examples/config/config-path.js +0 -13
- 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/server/bare/addons/llamacpp/index.d.ts +0 -4
- package/dist/server/bare/addons/llamacpp/index.js +0 -3
- package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +0 -5
- package/dist/server/bare/rag-hyperdb/rag-manager.js +0 -66
- package/dist/server/rpc/handlers/load-model.js +0 -111
- package/dist/server/utils/hash.d.ts +0 -5
- package/dist/server/utils/hash.js +0 -11
- package/dist/utils/getProcessSafe.d.ts +0 -7
- package/dist/utils/getProcessSafe.js +0 -17
- package/dist/utils/runtime.d.ts +0 -30
- package/dist/utils/runtime.js +0 -48
- /package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.d.ts +0 -0
- /package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.d.ts +0 -0
- /package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.js +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}/handlers/transcribe-stream.js +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
|
@@ -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 }),
|
|
@@ -6,6 +6,17 @@ import { getServerLogger } from "../../logging/index.js";
|
|
|
6
6
|
const logger = getServerLogger();
|
|
7
7
|
// Map of active RPC instances by public key
|
|
8
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
|
+
}
|
|
9
20
|
// Establish RPC connection to a peer if not already connected
|
|
10
21
|
async function ensureRPCConnection(topic, publicKey, timeout) {
|
|
11
22
|
// Check if we already have an RPC instance for this peer
|
|
@@ -48,6 +59,10 @@ async function ensureRPCConnection(topic, publicKey, timeout) {
|
|
|
48
59
|
// Create an RPC instance for a specific HyperSwarm peer
|
|
49
60
|
export async function getRPC(topic, publicKey, options = {}) {
|
|
50
61
|
const swarm = getSwarm();
|
|
62
|
+
// Close existing connection if forceNewConnection is true
|
|
63
|
+
if (options.forceNewConnection) {
|
|
64
|
+
closeConnection(publicKey);
|
|
65
|
+
}
|
|
51
66
|
// Set up connection tracking
|
|
52
67
|
swarm.on("connection", (conn) => {
|
|
53
68
|
const peerPubkey = conn.remotePublicKey?.toString("hex");
|
|
@@ -58,15 +73,18 @@ export async function getRPC(topic, publicKey, options = {}) {
|
|
|
58
73
|
const rpc = new RPC(conn, () => {
|
|
59
74
|
// No-op handler since we're only sending requests, not receiving them
|
|
60
75
|
});
|
|
61
|
-
// Store RPC instance by peer ID for lookup
|
|
76
|
+
// Store RPC instance and connection by peer ID for lookup
|
|
62
77
|
activeRPCs.set(peerPubkey, rpc);
|
|
78
|
+
activeConnections.set(peerPubkey, conn);
|
|
63
79
|
conn.on("close", () => {
|
|
64
80
|
logger.debug(`Connection closed for peer: ${peerPubkey}`);
|
|
65
81
|
activeRPCs.delete(peerPubkey);
|
|
82
|
+
activeConnections.delete(peerPubkey);
|
|
66
83
|
});
|
|
67
84
|
conn.on("error", (err) => {
|
|
68
85
|
logger.error(`Connection error for peer ${peerPubkey}:`, err);
|
|
69
86
|
activeRPCs.delete(peerPubkey);
|
|
87
|
+
activeConnections.delete(peerPubkey);
|
|
70
88
|
});
|
|
71
89
|
});
|
|
72
90
|
return await ensureRPCConnection(topic, publicKey, options.timeout);
|
|
@@ -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";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type AbortSignal } from "bare-abort-controller";
|
|
2
|
+
export declare function getWorkspaceKey(workspace?: string): string;
|
|
3
|
+
export declare function registerRagOperation(workspace: string | undefined, operation: string): AbortSignal;
|
|
4
|
+
export declare function unregisterRagOperation(workspace?: string): void;
|
|
5
|
+
export declare function cancelRagOperation(workspace?: string): boolean;
|
|
6
|
+
export declare function cancelAllRagOperations(): void;
|
|
7
|
+
//# sourceMappingURL=rag-operation-manager.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AbortController } from "bare-abort-controller";
|
|
2
|
+
import { DEFAULT_WORKSPACE } from "./rag-workspace-manager.js";
|
|
3
|
+
// Map of workspace -> active operation
|
|
4
|
+
const activeOperations = new Map();
|
|
5
|
+
export function getWorkspaceKey(workspace) {
|
|
6
|
+
return workspace ?? DEFAULT_WORKSPACE;
|
|
7
|
+
}
|
|
8
|
+
export function registerRagOperation(workspace, operation) {
|
|
9
|
+
const key = getWorkspaceKey(workspace);
|
|
10
|
+
// Cancel any existing operation on this workspace
|
|
11
|
+
cancelRagOperation(workspace);
|
|
12
|
+
const abortController = new AbortController();
|
|
13
|
+
activeOperations.set(key, {
|
|
14
|
+
abortController,
|
|
15
|
+
operation,
|
|
16
|
+
startTime: Date.now(),
|
|
17
|
+
});
|
|
18
|
+
return abortController.signal;
|
|
19
|
+
}
|
|
20
|
+
export function unregisterRagOperation(workspace) {
|
|
21
|
+
const key = getWorkspaceKey(workspace);
|
|
22
|
+
activeOperations.delete(key);
|
|
23
|
+
}
|
|
24
|
+
export function cancelRagOperation(workspace) {
|
|
25
|
+
const key = getWorkspaceKey(workspace);
|
|
26
|
+
const entry = activeOperations.get(key);
|
|
27
|
+
if (!entry) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
entry.abortController.abort();
|
|
31
|
+
activeOperations.delete(key);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
export function cancelAllRagOperations() {
|
|
35
|
+
for (const [key, entry] of activeOperations.entries()) {
|
|
36
|
+
entry.abortController.abort();
|
|
37
|
+
activeOperations.delete(key);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RAG, HyperDBAdapter, type EmbeddingFunction } from "@qvac/rag";
|
|
2
|
+
export declare const DEFAULT_WORKSPACE = "default";
|
|
3
|
+
export declare function hasRagWorkspaceStorage(workspace?: string): boolean;
|
|
4
|
+
export declare function getRagDbAdapter(workspace?: string): Promise<HyperDBAdapter>;
|
|
5
|
+
export declare function getRagInstance(modelId: string, embeddingFunction: EmbeddingFunction, workspace?: string): Promise<RAG>;
|
|
6
|
+
export declare function closeRagInstance(workspace?: string): Promise<void>;
|
|
7
|
+
export declare function closeAllRagInstances(): Promise<void>;
|
|
8
|
+
export interface RagWorkspaceInfo {
|
|
9
|
+
name: string;
|
|
10
|
+
open: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function listWorkspaces(): RagWorkspaceInfo[];
|
|
13
|
+
export declare function isWorkspaceLoaded(workspace: string): boolean;
|
|
14
|
+
export declare function deleteWorkspace(workspace: string): Promise<boolean>;
|
|
15
|
+
//# sourceMappingURL=rag-workspace-manager.d.ts.map
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { RAG, HyperDBAdapter } from "@qvac/rag";
|
|
2
|
+
import Corestore from "corestore";
|
|
3
|
+
import fs, { promises as fsPromises } from "bare-fs";
|
|
4
|
+
import path from "bare-path";
|
|
5
|
+
import { getConfiguredCacheDir } from "../registry/config-registry.js";
|
|
6
|
+
import { RAGWorkspaceModelMismatchError, RAGWorkspaceNotOpenError, } from "../../../utils/errors-server.js";
|
|
7
|
+
import { createStreamLogger, getServerLogger, ADDON_NAMESPACES, } from "../../../logging/index.js";
|
|
8
|
+
import { cancelAllRagOperations } from "./rag-operation-manager.js";
|
|
9
|
+
const logger = getServerLogger();
|
|
10
|
+
const ragWorkspaces = new Map();
|
|
11
|
+
export const DEFAULT_WORKSPACE = "default";
|
|
12
|
+
function getWorkspaceKey(workspace) {
|
|
13
|
+
return workspace ?? DEFAULT_WORKSPACE;
|
|
14
|
+
}
|
|
15
|
+
function getRagBaseDir() {
|
|
16
|
+
const cacheDir = getConfiguredCacheDir();
|
|
17
|
+
return path.join(path.dirname(cacheDir), "rag-hyperdb");
|
|
18
|
+
}
|
|
19
|
+
function getStorePath(workspace) {
|
|
20
|
+
return path.join(getRagBaseDir(), workspace);
|
|
21
|
+
}
|
|
22
|
+
export function hasRagWorkspaceStorage(workspace) {
|
|
23
|
+
const key = getWorkspaceKey(workspace);
|
|
24
|
+
if (ragWorkspaces.has(key))
|
|
25
|
+
return true;
|
|
26
|
+
return fs.existsSync(getStorePath(key));
|
|
27
|
+
}
|
|
28
|
+
async function getOrCreateWorkspaceEntry(workspace) {
|
|
29
|
+
const key = getWorkspaceKey(workspace);
|
|
30
|
+
const existing = ragWorkspaces.get(key);
|
|
31
|
+
if (existing) {
|
|
32
|
+
return existing;
|
|
33
|
+
}
|
|
34
|
+
const storePath = getStorePath(key);
|
|
35
|
+
const corestore = new Corestore(storePath);
|
|
36
|
+
const dbAdapter = new HyperDBAdapter({
|
|
37
|
+
store: corestore,
|
|
38
|
+
dbName: key,
|
|
39
|
+
});
|
|
40
|
+
await dbAdapter.ready();
|
|
41
|
+
const entry = {
|
|
42
|
+
corestore,
|
|
43
|
+
dbAdapter,
|
|
44
|
+
};
|
|
45
|
+
ragWorkspaces.set(key, entry);
|
|
46
|
+
return entry;
|
|
47
|
+
}
|
|
48
|
+
export async function getRagDbAdapter(workspace) {
|
|
49
|
+
const entry = await getOrCreateWorkspaceEntry(workspace);
|
|
50
|
+
return entry.dbAdapter;
|
|
51
|
+
}
|
|
52
|
+
export async function getRagInstance(modelId, embeddingFunction, workspace) {
|
|
53
|
+
const key = getWorkspaceKey(workspace);
|
|
54
|
+
const entry = await getOrCreateWorkspaceEntry(workspace);
|
|
55
|
+
if (entry.rag) {
|
|
56
|
+
if (entry.modelId && entry.modelId !== modelId) {
|
|
57
|
+
throw new RAGWorkspaceModelMismatchError(key, entry.modelId, modelId);
|
|
58
|
+
}
|
|
59
|
+
return entry.rag;
|
|
60
|
+
}
|
|
61
|
+
const workspaceLogger = createStreamLogger(key, ADDON_NAMESPACES.RAG_HYPERDB);
|
|
62
|
+
const rag = new RAG({
|
|
63
|
+
dbAdapter: entry.dbAdapter,
|
|
64
|
+
embeddingFunction,
|
|
65
|
+
logger: workspaceLogger,
|
|
66
|
+
});
|
|
67
|
+
await rag.ready();
|
|
68
|
+
entry.rag = rag;
|
|
69
|
+
entry.modelId = modelId;
|
|
70
|
+
return rag;
|
|
71
|
+
}
|
|
72
|
+
export async function closeRagInstance(workspace) {
|
|
73
|
+
const key = getWorkspaceKey(workspace);
|
|
74
|
+
const entry = ragWorkspaces.get(key);
|
|
75
|
+
if (!entry) {
|
|
76
|
+
throw new RAGWorkspaceNotOpenError(key);
|
|
77
|
+
}
|
|
78
|
+
if (entry.rag) {
|
|
79
|
+
await entry.rag.close();
|
|
80
|
+
}
|
|
81
|
+
await entry.dbAdapter.close();
|
|
82
|
+
await entry.corestore.close();
|
|
83
|
+
ragWorkspaces.delete(key);
|
|
84
|
+
}
|
|
85
|
+
let isCleaningUp = false;
|
|
86
|
+
export async function closeAllRagInstances() {
|
|
87
|
+
if (isCleaningUp)
|
|
88
|
+
return;
|
|
89
|
+
isCleaningUp = true;
|
|
90
|
+
try {
|
|
91
|
+
cancelAllRagOperations();
|
|
92
|
+
const closures = Array.from(ragWorkspaces.entries()).map(async ([key, entry]) => {
|
|
93
|
+
if (entry.rag) {
|
|
94
|
+
await entry.rag.close();
|
|
95
|
+
}
|
|
96
|
+
await entry.dbAdapter.close();
|
|
97
|
+
await entry.corestore.close();
|
|
98
|
+
ragWorkspaces.delete(key);
|
|
99
|
+
});
|
|
100
|
+
await Promise.all(closures);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logger.error("❌ Error during RAG cleanup:", error);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
isCleaningUp = false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function listWorkspaces() {
|
|
110
|
+
const baseDir = getRagBaseDir();
|
|
111
|
+
if (!fs.existsSync(baseDir)) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
const entries = fs.readdirSync(baseDir, {
|
|
115
|
+
withFileTypes: true,
|
|
116
|
+
});
|
|
117
|
+
const directories = entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith("."));
|
|
118
|
+
return directories.map((entry) => ({
|
|
119
|
+
name: entry.name,
|
|
120
|
+
open: ragWorkspaces.has(entry.name),
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
export function isWorkspaceLoaded(workspace) {
|
|
124
|
+
const key = getWorkspaceKey(workspace);
|
|
125
|
+
return ragWorkspaces.has(key);
|
|
126
|
+
}
|
|
127
|
+
export async function deleteWorkspace(workspace) {
|
|
128
|
+
const key = getWorkspaceKey(workspace);
|
|
129
|
+
const storePath = getStorePath(key);
|
|
130
|
+
if (!fs.existsSync(storePath)) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
await fsPromises.rm(storePath, { recursive: true, force: true });
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
@@ -9,6 +9,8 @@ const configRegistry = {
|
|
|
9
9
|
swarmRelays: undefined,
|
|
10
10
|
loggerLevel: undefined,
|
|
11
11
|
loggerConsoleOutput: undefined,
|
|
12
|
+
httpDownloadConcurrency: undefined,
|
|
13
|
+
deviceDefaults: undefined,
|
|
12
14
|
};
|
|
13
15
|
let configIsSet = false;
|
|
14
16
|
/**
|
|
@@ -56,6 +58,15 @@ export function setSDKConfig(config) {
|
|
|
56
58
|
setGlobalConsoleOutput(config.loggerConsoleOutput);
|
|
57
59
|
logger.info(`Console output ${config.loggerConsoleOutput ? "enabled" : "disabled"}`);
|
|
58
60
|
}
|
|
61
|
+
if (config.httpDownloadConcurrency !== undefined &&
|
|
62
|
+
config.httpDownloadConcurrency !== null) {
|
|
63
|
+
configRegistry.httpDownloadConcurrency = config.httpDownloadConcurrency;
|
|
64
|
+
logger.info(`HTTP download concurrency set to: ${config.httpDownloadConcurrency}`);
|
|
65
|
+
}
|
|
66
|
+
if (config.deviceDefaults !== undefined && config.deviceDefaults !== null) {
|
|
67
|
+
configRegistry.deviceDefaults = config.deviceDefaults;
|
|
68
|
+
logger.info(`✅ Device defaults configured: ${config.deviceDefaults.length} pattern(s)`);
|
|
69
|
+
}
|
|
59
70
|
// Mark config as set - now it's immutable
|
|
60
71
|
configIsSet = true;
|
|
61
72
|
}
|
|
@@ -51,7 +51,7 @@ export function registerLoggingStream(id, streamHandler) {
|
|
|
51
51
|
streamHandler(log.level, log.namespace, log.message);
|
|
52
52
|
}
|
|
53
53
|
catch (error) {
|
|
54
|
-
console.error(`Error flushing buffered log for ID ${id}:`, error);
|
|
54
|
+
console.error(`Error flushing buffered log for ID ${id}:`, error); // fallback (avoid recursion)
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
logBuffer.delete(id);
|
|
@@ -85,7 +85,7 @@ export function sendLogToStreams(id, level, namespace, message) {
|
|
|
85
85
|
streamHandler(level, namespace, message);
|
|
86
86
|
}
|
|
87
87
|
catch (error) {
|
|
88
|
-
console.error(`Error sending log to stream for ID ${id}:`, error);
|
|
88
|
+
console.error(`Error sending log to stream for ID ${id}:`, error); // fallback (avoid recursion)
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
}
|
|
@@ -127,6 +127,6 @@ export function clearAllLoggingStreams() {
|
|
|
127
127
|
modelsWithBuffering.clear();
|
|
128
128
|
bufferingTimeouts.clear();
|
|
129
129
|
if (count > 0) {
|
|
130
|
-
console.log(`🧹 Cleared logging streams for ${count} ID(s)`);
|
|
130
|
+
console.log(`🧹 Cleared logging streams for ${count} ID(s)`); // fallback (avoid recursion)
|
|
131
131
|
}
|
|
132
132
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CanonicalModelType } from "../../../schemas/index";
|
|
2
|
+
export { CANONICAL_TO_ALIAS, MODEL_CONFIG_SCHEMAS, BUILTIN_DEVICE_PATTERNS, matchesPattern, findAllMatchingPatterns, getDefaultsFromPattern, resolveModelConfigWithContext, } from "./model-config-utils";
|
|
3
|
+
export declare function resolveModelConfig<T>(modelType: CanonicalModelType, userInput: Record<string, unknown>): T;
|
|
4
|
+
//# sourceMappingURL=model-config-registry.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { getSDKConfig } from "./config-registry.js";
|
|
2
|
+
import { getRuntimeContext } from "./runtime-context-registry.js";
|
|
3
|
+
import { getServerLogger } from "../../../logging/index.js";
|
|
4
|
+
export { CANONICAL_TO_ALIAS, MODEL_CONFIG_SCHEMAS, BUILTIN_DEVICE_PATTERNS, matchesPattern, findAllMatchingPatterns, getDefaultsFromPattern, resolveModelConfigWithContext, } from "./model-config-utils.js";
|
|
5
|
+
import { BUILTIN_DEVICE_PATTERNS, resolveModelConfigWithContext, } from "./model-config-utils.js";
|
|
6
|
+
const logger = getServerLogger();
|
|
7
|
+
export function resolveModelConfig(modelType, userInput) {
|
|
8
|
+
const ctx = getRuntimeContext();
|
|
9
|
+
const userPatterns = getSDKConfig().deviceDefaults ?? [];
|
|
10
|
+
return resolveModelConfigWithContext(modelType, userInput, ctx, userPatterns, BUILTIN_DEVICE_PATTERNS, (log) => {
|
|
11
|
+
if (log.appliedPatterns.length > 0) {
|
|
12
|
+
logger.debug(`[device-defaults] ${modelType}: applied [${log.appliedPatterns.join(" → ")}]`);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ZodSchema } from "zod";
|
|
2
|
+
import { type CanonicalModelType, type DevicePattern, type DeviceMatch, type RuntimeContext } from "../../../schemas/index";
|
|
3
|
+
export declare const CANONICAL_TO_ALIAS: Record<CanonicalModelType, string>;
|
|
4
|
+
export declare const MODEL_CONFIG_SCHEMAS: Partial<Record<CanonicalModelType, ZodSchema>>;
|
|
5
|
+
export declare const BUILTIN_DEVICE_PATTERNS: DevicePattern[];
|
|
6
|
+
export declare function matchesPattern(ctx: RuntimeContext, match: DeviceMatch): boolean;
|
|
7
|
+
export declare function findAllMatchingPatterns(ctx: RuntimeContext, patterns: DevicePattern[]): DevicePattern[];
|
|
8
|
+
export declare function getDefaultsFromPattern(modelType: CanonicalModelType, pattern: DevicePattern): Record<string, unknown> | undefined;
|
|
9
|
+
export type ConfigResolutionLog = {
|
|
10
|
+
appliedPatterns: string[];
|
|
11
|
+
mergedDefaults: Record<string, unknown>;
|
|
12
|
+
finalConfig: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
export declare function resolveModelConfigWithContext<T>(modelType: CanonicalModelType, userInput: Record<string, unknown>, ctx: RuntimeContext, userPatterns: DevicePattern[], builtinPatterns?: DevicePattern[], onLog?: (log: ConfigResolutionLog) => void): T;
|
|
15
|
+
//# sourceMappingURL=model-config-utils.d.ts.map
|