@qvac/sdk 0.5.0 → 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.
Files changed (259) hide show
  1. package/README.md +48 -11
  2. package/bare-imports.json +35 -0
  3. package/dist/client/api/cancel.d.ts +12 -3
  4. package/dist/client/api/cancel.js +12 -3
  5. package/dist/client/api/get-model-info.d.ts +2 -2
  6. package/dist/client/api/get-model-info.js +2 -2
  7. package/dist/client/api/index.d.ts +2 -1
  8. package/dist/client/api/index.js +2 -1
  9. package/dist/client/api/load-model.js +6 -1
  10. package/dist/client/api/ocr.d.ts +31 -0
  11. package/dist/client/api/ocr.js +88 -0
  12. package/dist/client/api/rag.d.ts +215 -20
  13. package/dist/client/api/rag.js +382 -23
  14. package/dist/client/api/translate.js +10 -11
  15. package/dist/client/api/unload-model.js +1 -1
  16. package/dist/client/init-hooks.d.ts +4 -3
  17. package/dist/client/init-hooks.js +40 -31
  18. package/dist/client/rpc/bare-client.d.ts +1 -178
  19. package/dist/client/rpc/bare-client.js +42 -9
  20. package/dist/client/rpc/expo-rpc-client.js +57 -2
  21. package/dist/client/rpc/node-rpc-client.js +5 -1
  22. package/dist/client/rpc/rpc-client.d.ts +1 -1
  23. package/dist/client/rpc/rpc-client.js +11 -57
  24. package/dist/examples/config/blind-relay/blind-relay.config.d.ts +5 -0
  25. package/dist/examples/config/blind-relay/blind-relay.config.js +7 -0
  26. package/dist/examples/config/default/default.config.d.ts +8 -0
  27. package/dist/examples/config/default/default.config.js +6 -0
  28. package/dist/examples/default-config-usage.d.ts +17 -0
  29. package/dist/examples/default-config-usage.js +47 -0
  30. package/dist/examples/delegated-inference/consumer.js +1 -0
  31. package/dist/examples/download-with-blind-relays.js +4 -3
  32. package/dist/examples/embed-hyperdrive.js +4 -0
  33. package/dist/examples/kv-cache-custom-key.js +16 -1
  34. package/dist/examples/llamacpp-sharded.js +12 -3
  35. package/dist/examples/ocr-fasttext.d.ts +2 -0
  36. package/dist/examples/ocr-fasttext.js +52 -0
  37. package/dist/examples/quickstart.d.ts +2 -0
  38. package/dist/examples/quickstart.js +28 -0
  39. package/dist/examples/rag/rag-hyperdb/cancellation.d.ts +2 -0
  40. package/dist/examples/rag/rag-hyperdb/cancellation.js +75 -0
  41. package/dist/examples/rag/rag-hyperdb/ingest.d.ts +2 -0
  42. package/dist/examples/rag/{rag-hyperdb.js → rag-hyperdb/ingest.js} +10 -4
  43. package/dist/examples/rag/rag-hyperdb/pipeline.d.ts +2 -0
  44. package/dist/examples/rag/rag-hyperdb/pipeline.js +74 -0
  45. package/dist/examples/rag/rag-hyperdb/workspaces.d.ts +2 -0
  46. package/dist/examples/rag/rag-hyperdb/workspaces.js +178 -0
  47. package/dist/examples/translation/translation-bergamot-batch.d.ts +2 -0
  48. package/dist/examples/translation/translation-bergamot-batch.js +49 -0
  49. package/dist/examples/translation/translation-bergamot.d.ts +2 -0
  50. package/dist/examples/translation/translation-bergamot.js +39 -0
  51. package/dist/examples/translation/translation-indic.js +1 -0
  52. package/dist/examples/translation/translation-opus.js +1 -0
  53. package/dist/examples/translation/translation-stream.js +1 -0
  54. package/dist/expo/plugins/withMobileBundle.js +29 -10
  55. package/dist/index.d.ts +3 -2
  56. package/dist/index.js +3 -1
  57. package/dist/logging/addon.js +23 -7
  58. package/dist/logging/base-logger.js +2 -2
  59. package/dist/logging/client-logger.js +15 -4
  60. package/dist/logging/index.d.ts +1 -0
  61. package/dist/logging/index.js +1 -0
  62. package/dist/logging/logger.js +11 -3
  63. package/dist/logging/namespaces.d.ts +1 -0
  64. package/dist/logging/namespaces.js +1 -0
  65. package/dist/logging/registry.d.ts +5 -0
  66. package/dist/logging/registry.js +17 -5
  67. package/dist/logging/transport.js +2 -2
  68. package/dist/logging/utils.d.ts +2 -0
  69. package/dist/logging/utils.js +62 -0
  70. package/dist/models/hyperdrive/models.d.ts +1096 -178
  71. package/dist/models/hyperdrive/models.js +1476 -507
  72. package/dist/schemas/archive.d.ts +9 -0
  73. package/dist/schemas/archive.js +17 -0
  74. package/dist/schemas/cancel.d.ts +6 -0
  75. package/dist/schemas/cancel.js +5 -0
  76. package/dist/schemas/common.d.ts +582 -77
  77. package/dist/schemas/common.js +6 -1
  78. package/dist/schemas/delegate.d.ts +1 -0
  79. package/dist/schemas/delegate.js +1 -0
  80. package/dist/schemas/download-asset.d.ts +21 -9
  81. package/dist/schemas/get-model-info.d.ts +12 -10
  82. package/dist/schemas/get-model-info.js +9 -1
  83. package/dist/schemas/index.d.ts +6 -2
  84. package/dist/schemas/index.js +9 -2
  85. package/dist/schemas/llamacpp-config.d.ts +112 -8
  86. package/dist/schemas/llamacpp-config.js +40 -8
  87. package/dist/schemas/load-model.d.ts +2993 -525
  88. package/dist/schemas/load-model.js +88 -33
  89. package/dist/schemas/logging-stream.d.ts +2 -2
  90. package/dist/schemas/model-src-utils.d.ts +38 -16
  91. package/dist/schemas/model-src-utils.js +4 -8
  92. package/dist/schemas/model-types.d.ts +154 -0
  93. package/dist/schemas/model-types.js +140 -0
  94. package/dist/schemas/ocr.d.ts +88 -0
  95. package/dist/schemas/ocr.js +52 -0
  96. package/dist/schemas/rag.d.ts +183 -52
  97. package/dist/schemas/rag.js +148 -23
  98. package/dist/schemas/reload-config.d.ts +20 -8
  99. package/dist/schemas/reload-config.js +7 -5
  100. package/dist/schemas/runtime-context.d.ts +19 -0
  101. package/dist/schemas/runtime-context.js +7 -0
  102. package/dist/schemas/sdk-config.d.ts +697 -2
  103. package/dist/schemas/sdk-config.js +99 -1
  104. package/dist/schemas/sdk-errors-client.d.ts +1 -0
  105. package/dist/schemas/sdk-errors-client.js +5 -0
  106. package/dist/schemas/sdk-errors-server.d.ts +14 -0
  107. package/dist/schemas/sdk-errors-server.js +70 -0
  108. package/dist/schemas/shard.d.ts +21 -0
  109. package/dist/schemas/shard.js +17 -0
  110. package/dist/schemas/translate.d.ts +68 -23
  111. package/dist/schemas/translate.js +37 -11
  112. package/dist/schemas/translation-config.d.ts +272 -29
  113. package/dist/schemas/translation-config.js +63 -6
  114. package/dist/scripts/run-unit-tests.d.ts +2 -0
  115. package/dist/scripts/run-unit-tests.js +17 -0
  116. package/dist/server/bare/addons/llamacpp-completion/cache-logger.d.ts +6 -0
  117. package/dist/server/bare/addons/llamacpp-completion/cache-logger.js +34 -0
  118. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.d.ts +1 -5
  119. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.js +3 -26
  120. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.js +26 -7
  121. package/dist/server/bare/addons/llamacpp-completion/index.d.ts +4 -0
  122. package/dist/server/bare/addons/llamacpp-completion/index.js +3 -0
  123. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.d.ts +4 -1
  124. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.js +43 -10
  125. package/dist/server/bare/addons/llamacpp-embedding/create-model.d.ts +8 -0
  126. package/dist/server/bare/addons/llamacpp-embedding/create-model.js +38 -0
  127. package/dist/server/bare/addons/llamacpp-embedding/index.d.ts +3 -0
  128. package/dist/server/bare/addons/llamacpp-embedding/index.js +2 -0
  129. package/dist/server/bare/addons/load-model.js +28 -24
  130. package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.js +23 -8
  131. package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.js +35 -11
  132. package/dist/server/bare/addons/onnx-ocr/create-model.d.ts +10 -0
  133. package/dist/server/bare/addons/onnx-ocr/create-model.js +39 -0
  134. package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.d.ts +10 -0
  135. package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.js +109 -0
  136. package/dist/server/bare/addons/onnx-ocr/index.d.ts +3 -0
  137. package/dist/server/bare/addons/onnx-ocr/index.js +2 -0
  138. package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.js +2 -1
  139. package/dist/server/bare/delegate-rpc-client.js +19 -1
  140. package/dist/server/bare/rag-hyperdb/handlers/chunk.d.ts +3 -0
  141. package/dist/server/bare/rag-hyperdb/handlers/chunk.js +7 -0
  142. package/dist/server/bare/rag-hyperdb/handlers/close-workspace.d.ts +3 -0
  143. package/dist/server/bare/rag-hyperdb/handlers/close-workspace.js +9 -0
  144. package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +1 -1
  145. package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +9 -10
  146. package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.d.ts +3 -0
  147. package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.js +14 -0
  148. package/dist/server/bare/rag-hyperdb/handlers/ingest.d.ts +9 -0
  149. package/dist/server/bare/rag-hyperdb/handlers/ingest.js +18 -0
  150. package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.d.ts +3 -0
  151. package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.js +4 -0
  152. package/dist/server/bare/rag-hyperdb/handlers/reindex.d.ts +9 -0
  153. package/dist/server/bare/rag-hyperdb/handlers/reindex.js +16 -0
  154. package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +7 -4
  155. package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +13 -14
  156. package/dist/server/bare/rag-hyperdb/handlers/search.js +10 -10
  157. package/dist/server/bare/rag-hyperdb/index.d.ts +8 -1
  158. package/dist/server/bare/rag-hyperdb/index.js +8 -1
  159. package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +7 -0
  160. package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +39 -0
  161. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.d.ts +15 -0
  162. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +135 -0
  163. package/dist/server/bare/registry/config-registry.js +11 -0
  164. package/dist/server/bare/registry/logging-stream-registry.js +3 -3
  165. package/dist/server/bare/registry/model-config-registry.d.ts +4 -0
  166. package/dist/server/bare/registry/model-config-registry.js +15 -0
  167. package/dist/server/bare/registry/model-config-utils.d.ts +15 -0
  168. package/dist/server/bare/registry/model-config-utils.js +121 -0
  169. package/dist/server/bare/registry/model-registry.d.ts +6 -29
  170. package/dist/server/bare/registry/runtime-context-registry.d.ts +7 -0
  171. package/dist/server/bare/registry/runtime-context-registry.js +26 -0
  172. package/dist/server/bare/utils/loader-adapter.d.ts +7 -0
  173. package/dist/server/bare/utils/loader-adapter.js +9 -0
  174. package/dist/server/error-handlers.js +4 -2
  175. package/dist/server/rpc/handle-request.js +91 -9
  176. package/dist/server/rpc/handlers/cancelHandler.js +10 -1
  177. package/dist/server/rpc/handlers/completion-stream.js +1 -1
  178. package/dist/server/rpc/handlers/delete-cache.js +1 -1
  179. package/dist/server/rpc/handlers/embed.js +1 -1
  180. package/dist/server/rpc/handlers/get-model-info.d.ts +1 -1
  181. package/dist/server/rpc/handlers/get-model-info.js +22 -10
  182. package/dist/server/rpc/handlers/index.d.ts +4 -1
  183. package/dist/server/rpc/handlers/index.js +2 -0
  184. package/dist/server/rpc/handlers/load-model/download-manager.d.ts +11 -11
  185. package/dist/server/rpc/handlers/load-model/download-manager.js +36 -26
  186. package/dist/server/rpc/handlers/{load-model.d.ts → load-model/handler.d.ts} +2 -2
  187. package/dist/server/rpc/handlers/load-model/handler.js +179 -0
  188. package/dist/server/rpc/handlers/load-model/http.js +342 -33
  189. package/dist/server/rpc/handlers/load-model/hyperdrive.js +5 -3
  190. package/dist/server/rpc/handlers/load-model/index.d.ts +2 -2
  191. package/dist/server/rpc/handlers/load-model/index.js +2 -2
  192. package/dist/server/rpc/handlers/load-model/resolve.js +32 -3
  193. package/dist/server/rpc/handlers/load-model-delegated.js +6 -3
  194. package/dist/server/rpc/handlers/ocr-stream.d.ts +3 -0
  195. package/dist/server/rpc/handlers/ocr-stream.js +39 -0
  196. package/dist/server/rpc/handlers/rag.d.ts +2 -2
  197. package/dist/server/rpc/handlers/rag.js +107 -43
  198. package/dist/server/rpc/handlers/text-to-speech.js +1 -1
  199. package/dist/server/rpc/handlers/transcribe-stream.js +1 -1
  200. package/dist/server/rpc/handlers/translate.js +6 -15
  201. package/dist/server/utils/archive.d.ts +3 -0
  202. package/dist/server/utils/archive.js +171 -0
  203. package/dist/server/utils/audio/decoder.js +2 -2
  204. package/dist/server/utils/cache.d.ts +5 -5
  205. package/dist/server/utils/cache.js +6 -6
  206. package/dist/server/utils/config-transform.d.ts +2 -2
  207. package/dist/server/utils/config-transform.js +8 -6
  208. package/dist/server/utils/formatting.d.ts +13 -0
  209. package/dist/server/utils/formatting.js +26 -0
  210. package/dist/server/utils/gguf-tensor-extractor.d.ts +15 -0
  211. package/dist/server/utils/gguf-tensor-extractor.js +314 -0
  212. package/dist/server/utils/index.d.ts +3 -1
  213. package/dist/server/utils/index.js +3 -1
  214. package/dist/server/utils/shard-utils.d.ts +42 -16
  215. package/dist/server/utils/shard-utils.js +95 -7
  216. package/dist/server/worker.js +8 -3
  217. package/dist/utils/errors-base.d.ts +1 -1
  218. package/dist/utils/errors-base.js +2 -2
  219. package/dist/utils/errors-client.d.ts +12 -0
  220. package/dist/utils/errors-client.js +20 -0
  221. package/dist/utils/errors-server.d.ts +33 -0
  222. package/dist/utils/errors-server.js +55 -0
  223. package/package.json +40 -15
  224. package/dist/client/rpc/bare-rpc-client.d.ts +0 -4
  225. package/dist/client/rpc/bare-rpc-client.js +0 -94
  226. package/dist/examples/config/config-path.d.ts +0 -8
  227. package/dist/examples/config/config-path.js +0 -13
  228. package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +0 -2
  229. package/dist/examples/rag/rag-hyperdb-workspaces.js +0 -106
  230. package/dist/examples/rag/rag-hyperdb.d.ts +0 -2
  231. package/dist/server/bare/addons/llamacpp/index.d.ts +0 -4
  232. package/dist/server/bare/addons/llamacpp/index.js +0 -3
  233. package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +0 -5
  234. package/dist/server/bare/rag-hyperdb/rag-manager.js +0 -66
  235. package/dist/server/rpc/handlers/load-model.js +0 -111
  236. package/dist/server/utils/hash.d.ts +0 -5
  237. package/dist/server/utils/hash.js +0 -11
  238. package/dist/utils/getProcessSafe.d.ts +0 -7
  239. package/dist/utils/getProcessSafe.js +0 -17
  240. package/dist/utils/runtime.d.ts +0 -30
  241. package/dist/utils/runtime.js +0 -48
  242. /package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.d.ts +0 -0
  243. /package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.d.ts +0 -0
  244. /package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.js +0 -0
  245. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.d.ts +0 -0
  246. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.d.ts +0 -0
  247. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.d.ts +0 -0
  248. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.js +0 -0
  249. /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.d.ts +0 -0
  250. /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.js +0 -0
  251. /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.d.ts +0 -0
  252. /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.js +0 -0
  253. /package/dist/server/bare/addons/{tts → onnx-tts}/index.d.ts +0 -0
  254. /package/dist/server/bare/addons/{tts → onnx-tts}/index.js +0 -0
  255. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.d.ts +0 -0
  256. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/handlers/transcribe-stream.d.ts +0 -0
  257. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/handlers/transcribe-stream.js +0 -0
  258. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.d.ts +0 -0
  259. /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,3 @@
1
+ import { type RagChunkParams } from "../../../../schemas/index";
2
+ export declare function chunk(params: RagChunkParams): Promise<import("@qvac/rag").Doc[]>;
3
+ //# sourceMappingURL=chunk.d.ts.map
@@ -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,3 @@
1
+ import { type RagCloseWorkspaceParams } from "../../../../schemas/index";
2
+ export declare function closeWorkspace(params: RagCloseWorkspaceParams): Promise<void>;
3
+ //# sourceMappingURL=close-workspace.d.ts.map
@@ -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<boolean>;
2
+ export declare function deleteEmbeddings(params: RagDeleteEmbeddingsParams): Promise<void>;
3
3
  //# sourceMappingURL=delete-embeddings.d.ts.map
@@ -1,12 +1,11 @@
1
- import { getRagInstance } from "../rag-manager.js";
2
- import { embed } from "../../addons/llamacpp/index.js";
3
- import { ragDeleteEmbeddingsOperationSchema, } from "../../../../schemas/index.js";
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 { modelId, ids, workspace } = ragDeleteEmbeddingsOperationSchema.parse(params);
6
- const embeddingFunction = async (text) => {
7
- return await embed({ modelId, text });
8
- };
9
- const rag = await getRagInstance(modelId, embeddingFunction, workspace);
10
- const success = await rag.deleteEmbeddings(ids);
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,3 @@
1
+ import { type RagDeleteWorkspaceParams } from "../../../../schemas/index";
2
+ export declare function deleteWorkspace(params: RagDeleteWorkspaceParams): Promise<void>;
3
+ //# sourceMappingURL=delete-workspace.d.ts.map
@@ -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,3 @@
1
+ import { type RagWorkspaceInfo } from "../rag-workspace-manager";
2
+ export declare function listWorkspaces(): RagWorkspaceInfo[];
3
+ //# sourceMappingURL=list-workspaces.d.ts.map
@@ -0,0 +1,4 @@
1
+ import { listWorkspaces as listWorkspacesFromManager, } from "../rag-workspace-manager.js";
2
+ export function listWorkspaces() {
3
+ return listWorkspacesFromManager();
4
+ }
@@ -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
- export declare function saveEmbeddings(params: RagSaveEmbeddingsParams): Promise<{
3
- processed: import("@qvac/rag").SaveEmbeddingsResult[];
4
- droppedIndices: number[];
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 { getRagInstance } from "../rag-manager.js";
2
- import { embed } from "../../addons/llamacpp/index.js";
3
- import { ragSaveEmbeddingsOperationSchema, } from "../../../../schemas/index.js";
4
- export async function saveEmbeddings(params) {
5
- const { modelId, documents, chunk, chunkOpts, workspace } = ragSaveEmbeddingsOperationSchema.parse(params);
6
- const embeddingFunction = async (text) => {
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 result = await rag.saveEmbeddings(documents, saveOpts);
15
- return result;
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 { ragSearchOperationSchema } from "../../../../schemas/index.js";
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 } = ragSearchOperationSchema.parse(params);
6
- const embeddingFunction = async (text) => {
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 { closeRagInstance, closeAllRagInstances, } from "./rag-manager";
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 { closeRagInstance, closeAllRagInstances, } from "./rag-manager.js";
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