@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.
Files changed (334) hide show
  1. package/README.md +365 -200
  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/completion-stream.d.ts +15 -5
  6. package/dist/client/api/completion-stream.js +50 -14
  7. package/dist/client/api/embed.d.ts +17 -3
  8. package/dist/client/api/embed.js +0 -8
  9. package/dist/client/api/get-model-info.d.ts +2 -2
  10. package/dist/client/api/get-model-info.js +2 -2
  11. package/dist/client/api/index.d.ts +2 -2
  12. package/dist/client/api/index.js +2 -2
  13. package/dist/client/api/load-model.d.ts +37 -11
  14. package/dist/client/api/load-model.js +34 -117
  15. package/dist/client/api/logging-stream.d.ts +6 -3
  16. package/dist/client/api/logging-stream.js +6 -3
  17. package/dist/client/api/ocr.d.ts +31 -0
  18. package/dist/client/api/ocr.js +88 -0
  19. package/dist/client/api/rag.d.ts +215 -20
  20. package/dist/client/api/rag.js +382 -23
  21. package/dist/client/api/translate.js +10 -11
  22. package/dist/client/api/unload-model.js +6 -3
  23. package/dist/client/config-loader/config-utils.d.ts +5 -0
  24. package/dist/client/config-loader/config-utils.js +20 -0
  25. package/dist/client/config-loader/resolve-config.bare.d.ts +9 -0
  26. package/dist/client/config-loader/resolve-config.bare.js +87 -0
  27. package/dist/client/config-loader/resolve-config.expo.d.ts +11 -0
  28. package/dist/client/config-loader/resolve-config.expo.js +62 -0
  29. package/dist/client/config-loader/resolve-config.node.d.ts +9 -0
  30. package/dist/client/config-loader/resolve-config.node.js +118 -0
  31. package/dist/client/init-hooks.d.ts +18 -3
  32. package/dist/client/init-hooks.js +57 -29
  33. package/dist/client/logging-stream-registry.d.ts +1 -1
  34. package/dist/client/logging-stream-registry.js +14 -13
  35. package/dist/client/rpc/bare-client.d.ts +3 -184
  36. package/dist/client/rpc/bare-client.js +67 -8
  37. package/dist/client/rpc/expo-rpc-client.d.ts +2 -2
  38. package/dist/client/rpc/expo-rpc-client.js +70 -12
  39. package/dist/client/rpc/node-rpc-client.d.ts +1 -1
  40. package/dist/client/rpc/node-rpc-client.js +14 -7
  41. package/dist/client/rpc/rpc-client.d.ts +1 -1
  42. package/dist/client/rpc/rpc-client.js +13 -58
  43. package/dist/examples/config/blind-relay/blind-relay.config.d.ts +5 -0
  44. package/dist/examples/config/blind-relay/blind-relay.config.js +7 -0
  45. package/dist/examples/config/default/default.config.d.ts +8 -0
  46. package/dist/examples/config/default/default.config.js +6 -0
  47. package/dist/examples/config-reload.d.ts +2 -0
  48. package/dist/examples/config-reload.js +49 -0
  49. package/dist/examples/default-config-usage.d.ts +17 -0
  50. package/dist/examples/default-config-usage.js +47 -0
  51. package/dist/examples/delegated-inference/consumer.js +1 -0
  52. package/dist/examples/download-with-blind-relays.js +22 -21
  53. package/dist/examples/embed-hyperdrive.js +39 -3
  54. package/dist/examples/kv-cache-cleanup.js +1 -1
  55. package/dist/examples/kv-cache-custom-key.js +16 -1
  56. package/dist/examples/kv-cache-example.js +1 -1
  57. package/dist/examples/llamacpp-hyperdrive.js +1 -1
  58. package/dist/examples/llamacpp-sharded.js +13 -4
  59. package/dist/examples/logging-file-transport.d.ts +2 -0
  60. package/dist/examples/{llamacpp-file-logging.js → logging-file-transport.js} +3 -7
  61. package/dist/examples/logging-streaming.d.ts +2 -0
  62. package/dist/examples/logging-streaming.js +75 -0
  63. package/dist/examples/mcp-websearch.d.ts +13 -0
  64. package/dist/examples/mcp-websearch.js +176 -0
  65. package/dist/examples/ocr-fasttext.d.ts +2 -0
  66. package/dist/examples/ocr-fasttext.js +52 -0
  67. package/dist/examples/quickstart.d.ts +2 -0
  68. package/dist/examples/quickstart.js +28 -0
  69. package/dist/examples/rag/rag-hyperdb/cancellation.d.ts +2 -0
  70. package/dist/examples/rag/rag-hyperdb/cancellation.js +75 -0
  71. package/dist/examples/rag/rag-hyperdb/ingest.d.ts +2 -0
  72. package/dist/examples/rag/{rag-hyperdb.js → rag-hyperdb/ingest.js} +10 -4
  73. package/dist/examples/rag/rag-hyperdb/pipeline.d.ts +2 -0
  74. package/dist/examples/rag/rag-hyperdb/pipeline.js +74 -0
  75. package/dist/examples/rag/rag-hyperdb/workspaces.d.ts +2 -0
  76. package/dist/examples/rag/rag-hyperdb/workspaces.js +178 -0
  77. package/dist/examples/translation/translation-bergamot-batch.d.ts +2 -0
  78. package/dist/examples/translation/translation-bergamot-batch.js +49 -0
  79. package/dist/examples/translation/translation-bergamot.d.ts +2 -0
  80. package/dist/examples/translation/translation-bergamot.js +39 -0
  81. package/dist/examples/translation/translation-indic.js +1 -0
  82. package/dist/examples/translation/translation-opus.js +1 -0
  83. package/dist/examples/translation/translation-stream.js +1 -0
  84. package/dist/expo/plugins/withMobileBundle.js +29 -10
  85. package/dist/index.d.ts +5 -4
  86. package/dist/index.js +4 -2
  87. package/dist/logging/addon.d.ts +6 -0
  88. package/dist/logging/addon.js +75 -0
  89. package/dist/logging/base-logger.js +26 -16
  90. package/dist/logging/client-logger.d.ts +3 -0
  91. package/dist/logging/client-logger.js +24 -0
  92. package/dist/logging/index.d.ts +7 -1
  93. package/dist/logging/index.js +7 -1
  94. package/dist/logging/logger.d.ts +0 -2
  95. package/dist/logging/logger.js +11 -6
  96. package/dist/logging/namespaces.d.ts +12 -0
  97. package/dist/logging/namespaces.js +12 -0
  98. package/dist/logging/registry.d.ts +31 -0
  99. package/dist/logging/registry.js +48 -0
  100. package/dist/logging/server-logger.d.ts +3 -0
  101. package/dist/logging/server-logger.js +16 -0
  102. package/dist/logging/stream-logger.d.ts +1 -1
  103. package/dist/logging/stream-logger.js +6 -3
  104. package/dist/logging/transport.js +2 -2
  105. package/dist/logging/types.d.ts +2 -0
  106. package/dist/logging/utils.d.ts +2 -0
  107. package/dist/logging/utils.js +62 -0
  108. package/dist/models/hyperdrive/models.d.ts +1886 -230
  109. package/dist/models/hyperdrive/models.js +2191 -443
  110. package/dist/schemas/archive.d.ts +9 -0
  111. package/dist/schemas/archive.js +17 -0
  112. package/dist/schemas/cancel.d.ts +6 -0
  113. package/dist/schemas/cancel.js +5 -0
  114. package/dist/schemas/common.d.ts +660 -92
  115. package/dist/schemas/common.js +6 -4
  116. package/dist/schemas/delegate.d.ts +1 -0
  117. package/dist/schemas/delegate.js +1 -0
  118. package/dist/schemas/download-asset.d.ts +21 -9
  119. package/dist/schemas/embed.d.ts +3 -3
  120. package/dist/schemas/embed.js +9 -2
  121. package/dist/schemas/get-model-info.d.ts +12 -10
  122. package/dist/schemas/get-model-info.js +9 -1
  123. package/dist/schemas/index.d.ts +9 -1
  124. package/dist/schemas/index.js +12 -1
  125. package/dist/schemas/json-schema.d.ts +16 -0
  126. package/dist/schemas/json-schema.js +2 -0
  127. package/dist/schemas/llamacpp-config.d.ts +117 -12
  128. package/dist/schemas/llamacpp-config.js +46 -12
  129. package/dist/schemas/load-model.d.ts +3669 -481
  130. package/dist/schemas/load-model.js +95 -34
  131. package/dist/schemas/logging-stream.d.ts +11 -4
  132. package/dist/schemas/logging-stream.js +4 -3
  133. package/dist/schemas/mcp-adapter.d.ts +47 -0
  134. package/dist/schemas/mcp-adapter.js +1 -0
  135. package/dist/schemas/model-src-utils.d.ts +38 -14
  136. package/dist/schemas/model-src-utils.js +4 -3
  137. package/dist/schemas/model-types.d.ts +154 -0
  138. package/dist/schemas/model-types.js +140 -0
  139. package/dist/schemas/ocr.d.ts +88 -0
  140. package/dist/schemas/ocr.js +52 -0
  141. package/dist/schemas/rag.d.ts +183 -52
  142. package/dist/schemas/rag.js +148 -23
  143. package/dist/schemas/reload-config.d.ts +356 -0
  144. package/dist/schemas/reload-config.js +44 -0
  145. package/dist/schemas/runtime-context.d.ts +19 -0
  146. package/dist/schemas/runtime-context.js +7 -0
  147. package/dist/schemas/sdk-config.d.ts +717 -0
  148. package/dist/schemas/sdk-config.js +131 -0
  149. package/dist/schemas/sdk-errors-client.d.ts +5 -0
  150. package/dist/schemas/sdk-errors-client.js +25 -0
  151. package/dist/schemas/sdk-errors-server.d.ts +17 -0
  152. package/dist/schemas/sdk-errors-server.js +85 -0
  153. package/dist/schemas/shard.d.ts +21 -0
  154. package/dist/schemas/shard.js +17 -0
  155. package/dist/schemas/tools.d.ts +3 -0
  156. package/dist/schemas/translate.d.ts +68 -23
  157. package/dist/schemas/translate.js +37 -11
  158. package/dist/schemas/translation-config.d.ts +337 -13
  159. package/dist/schemas/translation-config.js +65 -9
  160. package/dist/schemas/whispercpp-config.d.ts +9 -1
  161. package/dist/schemas/whispercpp-config.js +2 -1
  162. package/dist/scripts/run-unit-tests.d.ts +2 -0
  163. package/dist/scripts/run-unit-tests.js +17 -0
  164. package/dist/server/bare/addons/llamacpp-completion/cache-logger.d.ts +6 -0
  165. package/dist/server/bare/addons/llamacpp-completion/cache-logger.js +34 -0
  166. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.d.ts +1 -5
  167. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.js +6 -20
  168. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.js +26 -7
  169. package/dist/server/bare/addons/llamacpp-completion/index.d.ts +4 -0
  170. package/dist/server/bare/addons/llamacpp-completion/index.js +3 -0
  171. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.d.ts +4 -1
  172. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.js +49 -14
  173. package/dist/server/bare/addons/llamacpp-embedding/create-model.d.ts +8 -0
  174. package/dist/server/bare/addons/llamacpp-embedding/create-model.js +38 -0
  175. package/dist/server/bare/addons/llamacpp-embedding/handlers/embed.d.ts +12 -0
  176. package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.js +18 -4
  177. package/dist/server/bare/addons/llamacpp-embedding/index.d.ts +3 -0
  178. package/dist/server/bare/addons/llamacpp-embedding/index.js +2 -0
  179. package/dist/server/bare/addons/load-model.js +38 -28
  180. package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.js +23 -8
  181. package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.js +35 -11
  182. package/dist/server/bare/addons/onnx-ocr/create-model.d.ts +10 -0
  183. package/dist/server/bare/addons/onnx-ocr/create-model.js +39 -0
  184. package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.d.ts +10 -0
  185. package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.js +109 -0
  186. package/dist/server/bare/addons/onnx-ocr/index.d.ts +3 -0
  187. package/dist/server/bare/addons/onnx-ocr/index.js +2 -0
  188. package/dist/server/bare/addons/unload-model.js +6 -3
  189. package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.js +2 -1
  190. package/dist/server/bare/addons/whispercpp-transcription/handlers/transcribe-stream.js +82 -0
  191. package/dist/server/bare/delegate-rpc-client.js +31 -11
  192. package/dist/server/bare/hyperswarm.js +7 -5
  193. package/dist/server/bare/rag-hyperdb/handlers/chunk.d.ts +3 -0
  194. package/dist/server/bare/rag-hyperdb/handlers/chunk.js +7 -0
  195. package/dist/server/bare/rag-hyperdb/handlers/close-workspace.d.ts +3 -0
  196. package/dist/server/bare/rag-hyperdb/handlers/close-workspace.js +9 -0
  197. package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +1 -1
  198. package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +9 -10
  199. package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.d.ts +3 -0
  200. package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.js +14 -0
  201. package/dist/server/bare/rag-hyperdb/handlers/ingest.d.ts +9 -0
  202. package/dist/server/bare/rag-hyperdb/handlers/ingest.js +18 -0
  203. package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.d.ts +3 -0
  204. package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.js +4 -0
  205. package/dist/server/bare/rag-hyperdb/handlers/reindex.d.ts +9 -0
  206. package/dist/server/bare/rag-hyperdb/handlers/reindex.js +16 -0
  207. package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +7 -4
  208. package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +13 -14
  209. package/dist/server/bare/rag-hyperdb/handlers/search.js +10 -10
  210. package/dist/server/bare/rag-hyperdb/index.d.ts +8 -1
  211. package/dist/server/bare/rag-hyperdb/index.js +8 -1
  212. package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +7 -0
  213. package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +39 -0
  214. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.d.ts +15 -0
  215. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +135 -0
  216. package/dist/server/bare/registry/config-registry.d.ts +13 -4
  217. package/dist/server/bare/registry/config-registry.js +53 -10
  218. package/dist/server/bare/registry/logging-stream-registry.d.ts +24 -7
  219. package/dist/server/bare/registry/logging-stream-registry.js +99 -20
  220. package/dist/server/bare/registry/model-config-registry.d.ts +4 -0
  221. package/dist/server/bare/registry/model-config-registry.js +15 -0
  222. package/dist/server/bare/registry/model-config-utils.d.ts +15 -0
  223. package/dist/server/bare/registry/model-config-utils.js +121 -0
  224. package/dist/server/bare/registry/model-registry.d.ts +6 -26
  225. package/dist/server/bare/registry/model-registry.js +9 -6
  226. package/dist/server/bare/registry/runtime-context-registry.d.ts +7 -0
  227. package/dist/server/bare/registry/runtime-context-registry.js +26 -0
  228. package/dist/server/bare/utils/loader-adapter.d.ts +7 -0
  229. package/dist/server/bare/utils/loader-adapter.js +9 -0
  230. package/dist/server/error-handlers.js +4 -2
  231. package/dist/server/rpc/create-server.js +5 -3
  232. package/dist/server/rpc/handle-request.js +115 -19
  233. package/dist/server/rpc/handlers/cancelHandler.js +13 -2
  234. package/dist/server/rpc/handlers/completion-stream-delegated.js +4 -2
  235. package/dist/server/rpc/handlers/completion-stream.js +1 -1
  236. package/dist/server/rpc/handlers/delete-cache.js +4 -2
  237. package/dist/server/rpc/handlers/download-asset.js +3 -1
  238. package/dist/server/rpc/handlers/embed.js +4 -2
  239. package/dist/server/rpc/handlers/get-model-info.d.ts +1 -1
  240. package/dist/server/rpc/handlers/get-model-info.js +22 -10
  241. package/dist/server/rpc/handlers/index.d.ts +4 -2
  242. package/dist/server/rpc/handlers/index.js +2 -2
  243. package/dist/server/rpc/handlers/load-model/download-manager.d.ts +11 -11
  244. package/dist/server/rpc/handlers/load-model/download-manager.js +40 -28
  245. package/dist/server/rpc/handlers/{load-model.d.ts → load-model/handler.d.ts} +2 -2
  246. package/dist/server/rpc/handlers/load-model/handler.js +179 -0
  247. package/dist/server/rpc/handlers/load-model/http.js +361 -50
  248. package/dist/server/rpc/handlers/load-model/hyperdrive.js +26 -22
  249. package/dist/server/rpc/handlers/load-model/index.d.ts +2 -2
  250. package/dist/server/rpc/handlers/load-model/index.js +2 -2
  251. package/dist/server/rpc/handlers/load-model/resolve.js +39 -8
  252. package/dist/server/rpc/handlers/load-model-delegated.d.ts +2 -2
  253. package/dist/server/rpc/handlers/load-model-delegated.js +15 -10
  254. package/dist/server/rpc/handlers/logging-stream.js +4 -4
  255. package/dist/server/rpc/handlers/ocr-stream.d.ts +3 -0
  256. package/dist/server/rpc/handlers/ocr-stream.js +39 -0
  257. package/dist/server/rpc/handlers/provideHandler/connection.js +12 -10
  258. package/dist/server/rpc/handlers/provideHandler/handler.js +18 -16
  259. package/dist/server/rpc/handlers/provideHandler/proxy.js +8 -6
  260. package/dist/server/rpc/handlers/rag.d.ts +2 -2
  261. package/dist/server/rpc/handlers/rag.js +107 -41
  262. package/dist/server/rpc/handlers/stopProvideHandler.js +3 -1
  263. package/dist/server/rpc/handlers/text-to-speech.js +1 -1
  264. package/dist/server/rpc/handlers/transcribe-stream.js +4 -2
  265. package/dist/server/rpc/handlers/translate.js +9 -16
  266. package/dist/server/rpc/handlers/unload-model.js +4 -2
  267. package/dist/server/utils/archive.d.ts +3 -0
  268. package/dist/server/utils/archive.js +171 -0
  269. package/dist/server/utils/audio/decoder.d.ts +2 -1
  270. package/dist/server/utils/audio/decoder.js +48 -11
  271. package/dist/server/utils/cache.d.ts +5 -5
  272. package/dist/server/utils/cache.js +13 -11
  273. package/dist/server/utils/config-transform.d.ts +3 -0
  274. package/dist/server/utils/config-transform.js +23 -0
  275. package/dist/server/utils/formatting.d.ts +13 -0
  276. package/dist/server/utils/formatting.js +26 -0
  277. package/dist/server/utils/gguf-tensor-extractor.d.ts +15 -0
  278. package/dist/server/utils/gguf-tensor-extractor.js +314 -0
  279. package/dist/server/utils/index.d.ts +4 -1
  280. package/dist/server/utils/index.js +4 -1
  281. package/dist/server/utils/shard-utils.d.ts +42 -16
  282. package/dist/server/utils/shard-utils.js +95 -7
  283. package/dist/server/worker.js +49 -19
  284. package/dist/utils/errors-base.d.ts +1 -1
  285. package/dist/utils/errors-base.js +2 -2
  286. package/dist/utils/errors-client.d.ts +24 -0
  287. package/dist/utils/errors-client.js +40 -0
  288. package/dist/utils/errors-server.d.ts +42 -0
  289. package/dist/utils/errors-server.js +71 -0
  290. package/dist/utils/mcp-adapter.d.ts +12 -0
  291. package/dist/utils/mcp-adapter.js +103 -0
  292. package/dist/utils/object.d.ts +2 -0
  293. package/dist/utils/object.js +3 -0
  294. package/dist/utils/tool-helpers.d.ts +10 -2
  295. package/dist/utils/tool-helpers.js +24 -11
  296. package/package.json +74 -36
  297. package/dist/client/api/set-config.d.ts +0 -7
  298. package/dist/client/api/set-config.js +0 -20
  299. package/dist/client/config-manager.d.ts +0 -4
  300. package/dist/client/config-manager.js +0 -8
  301. package/dist/client/rpc/bare-rpc-client.d.ts +0 -4
  302. package/dist/client/rpc/bare-rpc-client.js +0 -91
  303. package/dist/examples/llamacpp-file-logging.d.ts +0 -2
  304. package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +0 -2
  305. package/dist/examples/rag/rag-hyperdb-workspaces.js +0 -106
  306. package/dist/examples/rag/rag-hyperdb.d.ts +0 -2
  307. package/dist/schemas/set-config.d.ts +0 -21
  308. package/dist/schemas/set-config.js +0 -14
  309. package/dist/server/bare/addons/llamacpp/handlers/embed.d.ts +0 -4
  310. package/dist/server/bare/addons/llamacpp/index.d.ts +0 -4
  311. package/dist/server/bare/addons/llamacpp/index.js +0 -3
  312. package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +0 -63
  313. package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +0 -5
  314. package/dist/server/bare/rag-hyperdb/rag-manager.js +0 -64
  315. package/dist/server/rpc/handlers/load-model.js +0 -59
  316. package/dist/server/rpc/handlers/set-config.d.ts +0 -3
  317. package/dist/server/rpc/handlers/set-config.js +0 -18
  318. package/dist/server/utils/hash.d.ts +0 -5
  319. package/dist/server/utils/hash.js +0 -11
  320. /package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.d.ts +0 -0
  321. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.d.ts +0 -0
  322. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.d.ts +0 -0
  323. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.d.ts +0 -0
  324. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.js +0 -0
  325. /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.d.ts +0 -0
  326. /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.js +0 -0
  327. /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.d.ts +0 -0
  328. /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.js +0 -0
  329. /package/dist/server/bare/addons/{tts → onnx-tts}/index.d.ts +0 -0
  330. /package/dist/server/bare/addons/{tts → onnx-tts}/index.js +0 -0
  331. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.d.ts +0 -0
  332. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/handlers/transcribe-stream.d.ts +0 -0
  333. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.d.ts +0 -0
  334. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.js +0 -0
@@ -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
+ }
@@ -1,5 +1,14 @@
1
- import type { SDKConfig } from "../../../schemas/index";
2
- export declare const setSDKConfig: (config: SDKConfig) => void;
3
- export declare const getSDKConfig: () => SDKConfig;
4
- export declare const getConfiguredCacheDir: () => string;
1
+ import type { QvacConfig } from "../../../schemas/index";
2
+ /**
3
+ * Sets the SDK configuration. This can only be called ONCE during initialization.
4
+ * After the first call, the config becomes immutable and any subsequent calls will throw.
5
+ *
6
+ * @param config - The configuration to set
7
+ * @throws {ConfigAlreadySetError} If config has already been set
8
+ * @throws {CacheDirNotAbsoluteError} If cacheDirectory is not an absolute path
9
+ * @throws {CacheDirNotWritableError} If cacheDirectory is not writable
10
+ */
11
+ export declare function setSDKConfig(config: QvacConfig): void;
12
+ export declare function getSDKConfig(): QvacConfig;
13
+ export declare function getConfiguredCacheDir(): string;
5
14
  //# sourceMappingURL=config-registry.d.ts.map
@@ -1,12 +1,32 @@
1
1
  import fs from "bare-fs";
2
2
  import path from "bare-path";
3
3
  import { getEnv } from "../../worker.js";
4
- import { CacheDirNotAbsoluteError, CacheDirNotWritableError, } from "../../../utils/errors-server.js";
4
+ import { CacheDirNotAbsoluteError, CacheDirNotWritableError, ConfigAlreadySetError, } from "../../../utils/errors-server.js";
5
+ import { getServerLogger, setGlobalConsoleOutput, setGlobalLogLevel, } from "../../../logging/index.js";
6
+ const logger = getServerLogger();
5
7
  const configRegistry = {
6
8
  cacheDirectory: undefined,
7
9
  swarmRelays: undefined,
10
+ loggerLevel: undefined,
11
+ loggerConsoleOutput: undefined,
12
+ httpDownloadConcurrency: undefined,
13
+ deviceDefaults: undefined,
8
14
  };
9
- export const setSDKConfig = (config) => {
15
+ let configIsSet = false;
16
+ /**
17
+ * Sets the SDK configuration. This can only be called ONCE during initialization.
18
+ * After the first call, the config becomes immutable and any subsequent calls will throw.
19
+ *
20
+ * @param config - The configuration to set
21
+ * @throws {ConfigAlreadySetError} If config has already been set
22
+ * @throws {CacheDirNotAbsoluteError} If cacheDirectory is not an absolute path
23
+ * @throws {CacheDirNotWritableError} If cacheDirectory is not writable
24
+ */
25
+ export function setSDKConfig(config) {
26
+ // Enforce immutability - config can only be set once
27
+ if (configIsSet) {
28
+ throw new ConfigAlreadySetError();
29
+ }
10
30
  if (config.cacheDirectory !== undefined && config.cacheDirectory !== null) {
11
31
  if (!path.isAbsolute(config.cacheDirectory)) {
12
32
  throw new CacheDirNotAbsoluteError();
@@ -21,19 +41,42 @@ export const setSDKConfig = (config) => {
21
41
  throw new CacheDirNotWritableError(config.cacheDirectory, error instanceof Error ? error.message : String(error), error);
22
42
  }
23
43
  configRegistry.cacheDirectory = config.cacheDirectory;
24
- console.log(`✅ Cache directory set to: ${config.cacheDirectory}`);
44
+ logger.info(`✅ Cache directory set to: ${config.cacheDirectory}`);
25
45
  }
26
46
  if (config.swarmRelays !== undefined && config.swarmRelays !== null) {
27
47
  configRegistry.swarmRelays = config.swarmRelays;
48
+ logger.info(`✅ Swarm relays configured: ${config.swarmRelays.length} relay(s)`);
28
49
  }
29
- };
30
- export const getSDKConfig = () => {
50
+ if (config.loggerLevel !== undefined && config.loggerLevel !== null) {
51
+ configRegistry.loggerLevel = config.loggerLevel;
52
+ setGlobalLogLevel(config.loggerLevel);
53
+ logger.info(`Log level set to: ${config.loggerLevel}`);
54
+ }
55
+ if (config.loggerConsoleOutput !== undefined &&
56
+ config.loggerConsoleOutput !== null) {
57
+ configRegistry.loggerConsoleOutput = config.loggerConsoleOutput;
58
+ setGlobalConsoleOutput(config.loggerConsoleOutput);
59
+ logger.info(`Console output ${config.loggerConsoleOutput ? "enabled" : "disabled"}`);
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
+ }
70
+ // Mark config as set - now it's immutable
71
+ configIsSet = true;
72
+ }
73
+ export function getSDKConfig() {
31
74
  return { ...configRegistry };
32
- };
33
- const getDefaultCacheDir = () => {
75
+ }
76
+ function getDefaultCacheDir() {
34
77
  const homeDir = getEnv().HOME_DIR;
35
78
  return path.join(homeDir, ".qvac", "models");
36
- };
37
- export const getConfiguredCacheDir = () => {
79
+ }
80
+ export function getConfiguredCacheDir() {
38
81
  return configRegistry.cacheDirectory || getDefaultCacheDir();
39
- };
82
+ }
@@ -1,13 +1,30 @@
1
+ /**
2
+ * Logging Stream Registry
3
+ *
4
+ * Manages RPC subscriptions for streaming logs from server to connected clients.
5
+ *
6
+ * Purpose:
7
+ * - Registers client subscriptions to model/SDK log streams
8
+ * - Routes log messages to subscribed clients via RPC
9
+ * - Buffers logs during model loading (before client subscribes)
10
+ * - Manages stream lifecycle (subscribe/unsubscribe)
11
+ *
12
+ */
1
13
  import type { LogLevel } from "@qvac/logging";
2
- export declare function registerLoggingStream(modelId: string, streamHandler: (level: LogLevel, namespace: string, message: string) => void): void;
3
- export declare function unregisterLoggingStream(modelId: string, streamHandler: (level: LogLevel, namespace: string, message: string) => void): void;
4
- export declare function unregisterAllLoggingStreams(modelId: string): void;
5
- export declare function sendLogToStreams(modelId: string, level: LogLevel, namespace: string, message: string): void;
6
- export declare function hasLoggingStreams(modelId: string): boolean | undefined;
14
+ export declare function startLogBuffering(id: string): void;
15
+ export declare function stopLogBufferingWithTimeout(id: string): void;
16
+ export declare function registerLoggingStream(id: string, streamHandler: (level: LogLevel, namespace: string, message: string) => void): void;
17
+ export declare function unregisterLoggingStream(id: string, streamHandler: (level: LogLevel, namespace: string, message: string) => void): void;
18
+ export declare function unregisterAllLoggingStreams(id: string): void;
19
+ export declare function sendLogToStreams(id: string, level: LogLevel, namespace: string, message: string): void;
20
+ export declare function hasLoggingStreams(id: string): boolean | undefined;
7
21
  export declare function getLoggingStreamStats(): {
8
- totalModels: number;
9
- modelIds: string[];
22
+ totalIds: number;
23
+ ids: string[];
10
24
  totalStreams: number;
25
+ bufferedIds: number;
26
+ idsWithBuffering: number;
27
+ activeTimeouts: number;
11
28
  };
12
29
  export declare function clearAllLoggingStreams(): void;
13
30
  //# sourceMappingURL=logging-stream-registry.d.ts.map
@@ -1,53 +1,132 @@
1
+ /**
2
+ * Logging Stream Registry
3
+ *
4
+ * Manages RPC subscriptions for streaming logs from server to connected clients.
5
+ *
6
+ * Purpose:
7
+ * - Registers client subscriptions to model/SDK log streams
8
+ * - Routes log messages to subscribed clients via RPC
9
+ * - Buffers logs during model loading (before client subscribes)
10
+ * - Manages stream lifecycle (subscribe/unsubscribe)
11
+ *
12
+ */
1
13
  const loggingStreams = new Map();
2
- export function registerLoggingStream(modelId, streamHandler) {
3
- if (!loggingStreams.has(modelId)) {
4
- loggingStreams.set(modelId, new Set());
14
+ // Buffering for logs emitted during model loading (before client subscribes)
15
+ const MAX_BUFFERED_LOGS_PER_MODEL = 100;
16
+ const BUFFER_EXPIRY_MS = 30_000;
17
+ const BUFFERING_TIMEOUT_MS = 5_000;
18
+ const logBuffer = new Map();
19
+ const modelsWithBuffering = new Set();
20
+ const bufferingTimeouts = new Map();
21
+ function clearBufferingTimeout(id) {
22
+ const timeout = bufferingTimeouts.get(id);
23
+ if (timeout) {
24
+ clearTimeout(timeout);
25
+ bufferingTimeouts.delete(id);
5
26
  }
6
- loggingStreams.get(modelId).add(streamHandler);
7
27
  }
8
- export function unregisterLoggingStream(modelId, streamHandler) {
9
- const streams = loggingStreams.get(modelId);
28
+ export function startLogBuffering(id) {
29
+ modelsWithBuffering.add(id);
30
+ }
31
+ export function stopLogBufferingWithTimeout(id) {
32
+ clearBufferingTimeout(id);
33
+ const timeout = setTimeout(() => {
34
+ if (modelsWithBuffering.has(id)) {
35
+ modelsWithBuffering.delete(id);
36
+ logBuffer.delete(id);
37
+ }
38
+ bufferingTimeouts.delete(id);
39
+ }, BUFFERING_TIMEOUT_MS);
40
+ bufferingTimeouts.set(id, timeout);
41
+ }
42
+ export function registerLoggingStream(id, streamHandler) {
43
+ if (!loggingStreams.has(id)) {
44
+ loggingStreams.set(id, new Set());
45
+ }
46
+ loggingStreams.get(id).add(streamHandler);
47
+ const buffered = logBuffer.get(id);
48
+ if (buffered && buffered.length > 0) {
49
+ for (const log of buffered) {
50
+ try {
51
+ streamHandler(log.level, log.namespace, log.message);
52
+ }
53
+ catch (error) {
54
+ console.error(`Error flushing buffered log for ID ${id}:`, error); // fallback (avoid recursion)
55
+ }
56
+ }
57
+ logBuffer.delete(id);
58
+ }
59
+ modelsWithBuffering.delete(id);
60
+ clearBufferingTimeout(id);
61
+ }
62
+ export function unregisterLoggingStream(id, streamHandler) {
63
+ const streams = loggingStreams.get(id);
10
64
  if (streams) {
11
65
  streams.delete(streamHandler);
12
66
  if (streams.size === 0) {
13
- loggingStreams.delete(modelId);
67
+ loggingStreams.delete(id);
14
68
  }
15
69
  }
16
70
  }
17
- export function unregisterAllLoggingStreams(modelId) {
18
- // Simply remove all logging handlers for this model
71
+ export function unregisterAllLoggingStreams(id) {
72
+ // Simply remove all logging handlers
19
73
  // Active streams will naturally terminate when no more logs flow
20
- loggingStreams.delete(modelId);
21
- console.debug(`Unregistered all logging streams for model ${modelId}`);
74
+ loggingStreams.delete(id);
75
+ logBuffer.delete(id);
76
+ modelsWithBuffering.delete(id);
77
+ clearBufferingTimeout(id);
22
78
  }
23
- export function sendLogToStreams(modelId, level, namespace, message) {
24
- const streams = loggingStreams.get(modelId);
25
- if (streams) {
79
+ export function sendLogToStreams(id, level, namespace, message) {
80
+ const streams = loggingStreams.get(id);
81
+ const isBuffering = modelsWithBuffering.has(id);
82
+ if (streams && streams.size > 0) {
26
83
  for (const streamHandler of streams) {
27
84
  try {
28
85
  streamHandler(level, namespace, message);
29
86
  }
30
87
  catch (error) {
31
- console.error(`Error sending log to stream for model ${modelId}:`, error);
88
+ console.error(`Error sending log to stream for ID ${id}:`, error); // fallback (avoid recursion)
32
89
  }
33
90
  }
34
91
  }
92
+ else if (isBuffering) {
93
+ if (!logBuffer.has(id)) {
94
+ logBuffer.set(id, []);
95
+ }
96
+ const buffer = logBuffer.get(id);
97
+ const now = Date.now();
98
+ const validLogs = buffer.filter((log) => now - log.timestamp < BUFFER_EXPIRY_MS);
99
+ if (validLogs.length >= MAX_BUFFERED_LOGS_PER_MODEL) {
100
+ validLogs.shift();
101
+ }
102
+ validLogs.push({ level, namespace, message, timestamp: now });
103
+ logBuffer.set(id, validLogs);
104
+ }
35
105
  }
36
- export function hasLoggingStreams(modelId) {
37
- const streams = loggingStreams.get(modelId);
106
+ export function hasLoggingStreams(id) {
107
+ const streams = loggingStreams.get(id);
38
108
  return streams && streams.size > 0;
39
109
  }
40
110
  export function getLoggingStreamStats() {
41
111
  return {
42
- totalModels: loggingStreams.size,
43
- modelIds: Array.from(loggingStreams.keys()),
112
+ totalIds: loggingStreams.size,
113
+ ids: Array.from(loggingStreams.keys()),
44
114
  totalStreams: Array.from(loggingStreams.values()).reduce((sum, streams) => sum + streams.size, 0),
115
+ bufferedIds: logBuffer.size,
116
+ idsWithBuffering: modelsWithBuffering.size,
117
+ activeTimeouts: bufferingTimeouts.size,
45
118
  };
46
119
  }
47
120
  export function clearAllLoggingStreams() {
48
121
  const count = loggingStreams.size;
122
+ for (const timeout of bufferingTimeouts.values()) {
123
+ clearTimeout(timeout);
124
+ }
49
125
  loggingStreams.clear();
126
+ logBuffer.clear();
127
+ modelsWithBuffering.clear();
128
+ bufferingTimeouts.clear();
50
129
  if (count > 0) {
51
- console.log(`🧹 Cleared logging streams for ${count} model(s)`);
130
+ console.log(`🧹 Cleared logging streams for ${count} ID(s)`); // fallback (avoid recursion)
52
131
  }
53
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
@@ -0,0 +1,121 @@
1
+ import { ModelType, } from "../../../schemas/index.js";
2
+ import { llmConfigSchema, embedConfigSchema } from "../../../schemas/llamacpp-config.js";
3
+ import { whisperConfigSchema } from "../../../schemas/whispercpp-config.js";
4
+ import { ocrConfigSchema } from "../../../schemas/ocr.js";
5
+ export const CANONICAL_TO_ALIAS = {
6
+ [ModelType.llamacppCompletion]: "llm",
7
+ [ModelType.llamacppEmbedding]: "embeddings",
8
+ [ModelType.whispercppTranscription]: "whisper",
9
+ [ModelType.nmtcppTranslation]: "nmt",
10
+ [ModelType.onnxTts]: "tts",
11
+ [ModelType.onnxOcr]: "ocr",
12
+ };
13
+ export const MODEL_CONFIG_SCHEMAS = {
14
+ [ModelType.llamacppCompletion]: llmConfigSchema,
15
+ [ModelType.llamacppEmbedding]: embedConfigSchema,
16
+ [ModelType.whispercppTranscription]: whisperConfigSchema,
17
+ [ModelType.onnxOcr]: ocrConfigSchema,
18
+ };
19
+ // Ordered general → specific (later patterns override earlier)
20
+ export const BUILTIN_DEVICE_PATTERNS = [
21
+ {
22
+ name: "Android devices (SDK default)",
23
+ match: {
24
+ platform: "android",
25
+ },
26
+ defaults: {
27
+ [ModelType.llamacppEmbedding]: { flashAttention: "off" },
28
+ },
29
+ },
30
+ {
31
+ name: "Pixel devices (SDK default)",
32
+ match: {
33
+ platform: "android",
34
+ deviceBrand: "google",
35
+ deviceModelPrefix: "Pixel",
36
+ },
37
+ defaults: {
38
+ [ModelType.llamacppCompletion]: { device: "cpu" },
39
+ [ModelType.llamacppEmbedding]: { device: "cpu" },
40
+ },
41
+ },
42
+ {
43
+ name: "iPhone 17",
44
+ match: {
45
+ platform: "ios",
46
+ deviceModelPrefix: "iPhone 17",
47
+ },
48
+ defaults: {
49
+ [ModelType.llamacppCompletion]: { device: "cpu" },
50
+ [ModelType.llamacppEmbedding]: { device: "cpu" },
51
+ },
52
+ },
53
+ ];
54
+ export function matchesPattern(ctx, match) {
55
+ if (match.platform !== undefined && ctx.platform !== match.platform) {
56
+ return false;
57
+ }
58
+ if (match.deviceBrand !== undefined &&
59
+ ctx.deviceBrand?.toLowerCase() !== match.deviceBrand.toLowerCase()) {
60
+ return false;
61
+ }
62
+ if (match.deviceModelPrefix !== undefined &&
63
+ !(ctx.deviceModel?.startsWith(match.deviceModelPrefix) ?? false)) {
64
+ return false;
65
+ }
66
+ if (match.deviceModelContains !== undefined &&
67
+ !(ctx.deviceModel?.includes(match.deviceModelContains) ?? false)) {
68
+ return false;
69
+ }
70
+ return true;
71
+ }
72
+ export function findAllMatchingPatterns(ctx, patterns) {
73
+ return patterns.filter((pattern) => matchesPattern(ctx, pattern.match));
74
+ }
75
+ export function getDefaultsFromPattern(modelType, pattern) {
76
+ let defaults = pattern.defaults[modelType];
77
+ if (!defaults) {
78
+ const aliasKey = CANONICAL_TO_ALIAS[modelType];
79
+ if (aliasKey && aliasKey in pattern.defaults) {
80
+ defaults = pattern.defaults[aliasKey];
81
+ }
82
+ }
83
+ return defaults;
84
+ }
85
+ export function resolveModelConfigWithContext(modelType, userInput, ctx, userPatterns, builtinPatterns = BUILTIN_DEVICE_PATTERNS, onLog) {
86
+ // Find ALL matching patterns (general → specific order preserved)
87
+ const matchingBuiltin = findAllMatchingPatterns(ctx, builtinPatterns);
88
+ const matchingUser = findAllMatchingPatterns(ctx, userPatterns);
89
+ // Merge in order: builtin patterns → user patterns → user input
90
+ // Later values override earlier (more specific wins)
91
+ const appliedPatterns = [];
92
+ let mergedDefaults = {};
93
+ for (const pattern of matchingBuiltin) {
94
+ const defaults = getDefaultsFromPattern(modelType, pattern);
95
+ if (defaults) {
96
+ appliedPatterns.push(pattern.name);
97
+ mergedDefaults = { ...mergedDefaults, ...defaults };
98
+ }
99
+ }
100
+ for (const pattern of matchingUser) {
101
+ const defaults = getDefaultsFromPattern(modelType, pattern);
102
+ if (defaults) {
103
+ appliedPatterns.push(pattern.name);
104
+ mergedDefaults = { ...mergedDefaults, ...defaults };
105
+ }
106
+ }
107
+ const merged = {
108
+ ...mergedDefaults,
109
+ ...userInput,
110
+ };
111
+ const schema = MODEL_CONFIG_SCHEMAS[modelType];
112
+ const finalConfig = schema ? schema.parse(merged) : merged;
113
+ if (onLog) {
114
+ onLog({
115
+ appliedPatterns,
116
+ mergedDefaults,
117
+ finalConfig: finalConfig,
118
+ });
119
+ }
120
+ return finalConfig;
121
+ }