@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
@@ -1,20 +1,43 @@
1
+ import { normalizeModelType } from "../../schemas/index.js";
2
+ import os from "bare-os";
1
3
  import { handlers } from "../../server/rpc/handlers/index.js";
2
4
  import { RPCNoHandlerError, RPCRequestNotSentError, } from "../../utils/errors-client.js";
5
+ import { initializeConfig } from "../init-hooks.js";
6
+ import { setSDKConfig } from "../../server/bare/registry/config-registry.js";
7
+ import { setRuntimeContext } from "../../server/bare/registry/runtime-context-registry.js";
8
+ import { resolveModelConfig } from "../../server/bare/registry/model-config-registry.js";
9
+ import { resolveConfig } from "../config-loader/resolve-config.bare.js";
3
10
  // Get the handler for a request type
4
- const getHandler = (type) => {
11
+ function getHandler(type) {
5
12
  const handler = handlers[type];
6
13
  return typeof handler === "function" ? handler : undefined;
7
- };
8
- export async function send(request) {
14
+ }
15
+ function applyDeviceDefaultsToLoadModel(request) {
16
+ if (request.type !== "loadModel" || !("modelSrc" in request)) {
17
+ return request;
18
+ }
19
+ let canonicalType;
20
+ try {
21
+ canonicalType = normalizeModelType(request.modelType);
22
+ }
23
+ catch {
24
+ return request;
25
+ }
26
+ const rawConfig = request.modelConfig ?? {};
27
+ const configWithDefaults = resolveModelConfig(canonicalType, rawConfig);
28
+ return { ...request, modelConfig: configWithDefaults };
29
+ }
30
+ async function send(request) {
9
31
  if (request.type === "ping") {
10
32
  return { type: "pong", number: Math.random() * 100 };
11
33
  }
12
34
  const handler = getHandler(request.type);
13
35
  if (!handler)
14
36
  throw new RPCNoHandlerError(request.type);
15
- return (await handler(request));
37
+ const processedRequest = applyDeviceDefaultsToLoadModel(request);
38
+ return (await handler(processedRequest));
16
39
  }
17
- export async function* stream(request) {
40
+ async function* stream(request) {
18
41
  const handler = getHandler(request.type);
19
42
  if (!handler)
20
43
  throw new RPCNoHandlerError(request.type);
@@ -22,11 +45,12 @@ export async function* stream(request) {
22
45
  if (request.type === "loadModel" &&
23
46
  "withProgress" in request &&
24
47
  request.withProgress) {
48
+ const processedRequest = applyDeviceDefaultsToLoadModel(request);
25
49
  async function* streamWithProgress() {
26
50
  const queue = [];
27
51
  let done = false;
28
52
  const loadModelHandler = handler;
29
- loadModelHandler(request, (update) => queue.push(update))
53
+ loadModelHandler(processedRequest, (update) => queue.push(update))
30
54
  .then((final) => {
31
55
  queue.push(final);
32
56
  done = true;
@@ -97,6 +121,27 @@ const createMockRPCRequest = () => {
97
121
  if (!requestData) {
98
122
  throw new RPCRequestNotSentError();
99
123
  }
124
+ // Handle special internal config initialization message
125
+ if (typeof requestData === "object" &&
126
+ "type" in requestData &&
127
+ requestData.type === "__init_config") {
128
+ try {
129
+ const initData = requestData;
130
+ if (initData.config) {
131
+ setSDKConfig(initData.config);
132
+ }
133
+ if (initData.runtimeContext) {
134
+ setRuntimeContext(initData.runtimeContext);
135
+ }
136
+ return Buffer.from(JSON.stringify({ success: true }));
137
+ }
138
+ catch (error) {
139
+ return Buffer.from(JSON.stringify({
140
+ success: false,
141
+ error: error instanceof Error ? error.message : String(error),
142
+ }));
143
+ }
144
+ }
100
145
  const response = await send(requestData);
101
146
  return Buffer.from(JSON.stringify(response));
102
147
  },
@@ -110,10 +155,24 @@ const createMockRPCRequest = () => {
110
155
  },
111
156
  };
112
157
  };
113
- export function getRPC() {
114
- return {
158
+ let configInitialized = false;
159
+ export async function getRPC() {
160
+ const mockRPC = {
115
161
  request() {
116
162
  return createMockRPCRequest();
117
163
  },
118
164
  };
165
+ // Initialize config once on first call
166
+ if (!configInitialized) {
167
+ const runtimeContext = {
168
+ runtime: "bare",
169
+ platform: os.platform(),
170
+ };
171
+ await initializeConfig(mockRPC, resolveConfig, runtimeContext);
172
+ configInitialized = true;
173
+ }
174
+ return mockRPC;
175
+ }
176
+ export function close() {
177
+ // noop
119
178
  }
@@ -1,4 +1,4 @@
1
1
  import RPC from "bare-rpc";
2
- export declare const getRPC: () => Promise<RPC>;
3
- export declare const close: () => void;
2
+ export declare function getRPC(): Promise<RPC>;
3
+ export declare function close(): void;
4
4
  //# sourceMappingURL=expo-rpc-client.d.ts.map
@@ -1,9 +1,54 @@
1
1
  import RPC from "bare-rpc";
2
2
  import { RPCConnectionFailedError } from "../../utils/errors-client.js";
3
+ import { initializeConfig } from "../init-hooks.js";
4
+ import { resolveConfig } from "../config-loader/resolve-config.expo.js";
5
+ import { getClientLogger } from "../../logging/index.js";
6
+ const logger = getClientLogger();
3
7
  let rpcInstance = null;
4
8
  let rpcPromise = null;
5
- console.log("EXPO RPC Client bundle");
6
- export const getRPC = async () => {
9
+ let workletInstance = null;
10
+ let workletInitialized = false;
11
+ let cachedRuntimeContext;
12
+ logger.debug("EXPO RPC Client bundle");
13
+ async function getRuntimeContext() {
14
+ if (cachedRuntimeContext) {
15
+ return cachedRuntimeContext;
16
+ }
17
+ // expo-device is optional - gracefully handle if not installed
18
+ let deviceModel;
19
+ let deviceBrand;
20
+ let platform;
21
+ try {
22
+ const expoModulesCore = await import("expo-modules-core");
23
+ // this looks odd, but is necessary to ensure that import can be used safely.
24
+ // It will crash the app if the module is not installed, but the node dependency is present.
25
+ const nativeDeviceModule = expoModulesCore.requireOptionalNativeModule("ExpoDevice");
26
+ if (nativeDeviceModule) {
27
+ const Device = await import("expo-device");
28
+ logger.info(`Device: ${Device.modelName} ${Device.brand} ${Device.osName}`);
29
+ const osName = Device?.osName?.toLowerCase();
30
+ if (osName?.includes("ios")) {
31
+ platform = "ios";
32
+ }
33
+ else if (osName?.includes("android")) {
34
+ platform = "android";
35
+ }
36
+ deviceModel = Device.modelName ?? undefined;
37
+ deviceBrand = Device.brand ?? undefined;
38
+ }
39
+ }
40
+ catch {
41
+ logger.debug("expo-device not available, device info will be omitted");
42
+ }
43
+ cachedRuntimeContext = {
44
+ runtime: "react-native",
45
+ platform,
46
+ deviceModel,
47
+ deviceBrand,
48
+ };
49
+ return cachedRuntimeContext;
50
+ }
51
+ export async function getRPC() {
7
52
  if (rpcInstance) {
8
53
  return rpcInstance;
9
54
  }
@@ -11,10 +56,22 @@ export const getRPC = async () => {
11
56
  return rpcPromise;
12
57
  }
13
58
  rpcPromise = (async () => {
59
+ if (workletInstance) {
60
+ logger.debug("🔄 Reusing existing worklet");
61
+ rpcInstance = new RPC(workletInstance.IPC, () => { });
62
+ // Only initialize once per worklet - server state persists
63
+ if (!workletInitialized) {
64
+ const runtimeContext = await getRuntimeContext();
65
+ await initializeConfig(rpcInstance, resolveConfig, runtimeContext);
66
+ workletInitialized = true;
67
+ }
68
+ return rpcInstance;
69
+ }
14
70
  const { Paths } = await import("expo-file-system");
15
71
  const bareKitModule = await import("react-native-bare-kit");
16
72
  const worklet = new bareKitModule.Worklet();
17
- console.log("Starting worklet");
73
+ workletInstance = worklet;
74
+ logger.debug("Starting new worklet");
18
75
  // Load the mobile bundle - this will be generated by the Expo plugin
19
76
  // using the user's installed bare library versions
20
77
  let mobileBundle;
@@ -28,7 +85,7 @@ export const getRPC = async () => {
28
85
  const message = "Failed to load mobile worker bundle. Make sure the QVAC Expo plugin is configured. " +
29
86
  `Add '@qvac/sdk/expo-plugin' to your app.json plugins array. ` +
30
87
  `Error: ${String(error)}`;
31
- console.error(message);
88
+ logger.error(message);
32
89
  throw new RPCConnectionFailedError(message, error instanceof Error ? error : undefined);
33
90
  }
34
91
  worklet.start("worker.bundle", mobileBundle, [
@@ -39,27 +96,28 @@ export const getRPC = async () => {
39
96
  HOME_DIR: Paths.document.uri.replace("file://", ""),
40
97
  }),
41
98
  ]);
42
- console.log("Worklet started");
99
+ logger.info("Worklet started");
43
100
  rpcInstance = new RPC(worklet.IPC, () => {
44
101
  // Use this for async callbacks
45
102
  });
46
- const { replayConfigIfCached } = await import("../init-hooks.js");
47
- await replayConfigIfCached(rpcInstance);
103
+ const runtimeContext = await getRuntimeContext();
104
+ await initializeConfig(rpcInstance, resolveConfig, runtimeContext);
105
+ workletInitialized = true;
48
106
  return rpcInstance;
49
107
  })();
50
108
  try {
51
109
  return await rpcPromise;
52
110
  }
53
111
  catch (error) {
54
- console.error(`Failed to initialize RPC: ${String(error)}`);
112
+ logger.error(`Failed to initialize RPC: ${String(error)}`);
55
113
  throw error;
56
114
  }
57
115
  finally {
58
116
  rpcPromise = null;
59
117
  }
60
- };
61
- export const close = () => {
62
- console.log("🧹 Closing RPC client (Expo)");
118
+ }
119
+ export function close() {
120
+ logger.info("🧹 Closing RPC client (Expo)");
63
121
  rpcInstance = null;
64
122
  rpcPromise = null;
65
- };
123
+ }
@@ -5,5 +5,5 @@ export declare function getRPC(): {
5
5
  createResponseStream: () => AsyncGenerator<unknown, void, unknown>;
6
6
  };
7
7
  };
8
- export declare const close: () => void;
8
+ export declare function close(): void;
9
9
  //# sourceMappingURL=node-rpc-client.d.ts.map
@@ -5,6 +5,10 @@ import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { RPCRequestNotSentError } from "../../utils/errors-client.js";
8
+ import { initializeConfig } from "../init-hooks.js";
9
+ import { resolveConfig } from "../config-loader/resolve-config.node.js";
10
+ import { getClientLogger } from "../../logging/index.js";
11
+ const logger = getClientLogger();
8
12
  const __filename = fileURLToPath(import.meta.url);
9
13
  const __dirname = path.dirname(__filename);
10
14
  let rpcInstance = null;
@@ -50,8 +54,11 @@ async function ensureRPC() {
50
54
  });
51
55
  });
52
56
  const rpc = await rpcPromise;
53
- const { replayConfigIfCached } = await import("../init-hooks.js");
54
- await replayConfigIfCached(rpc);
57
+ const runtimeContext = {
58
+ runtime: "node",
59
+ platform: process.platform,
60
+ };
61
+ await initializeConfig(rpc, resolveConfig, runtimeContext);
55
62
  return rpc;
56
63
  }
57
64
  const mockRPC = {
@@ -93,20 +100,20 @@ const mockRPC = {
93
100
  export function getRPC() {
94
101
  return mockRPC;
95
102
  }
96
- export const close = () => {
97
- console.log("🧹 Closing RPC client");
103
+ export function close() {
104
+ logger.info("🧹 Closing RPC client");
98
105
  if (bareWorkerProc) {
99
- console.log("🐻🔫 Killing bare worker process");
106
+ logger.info("🐻🔫 Killing bare worker process");
100
107
  bareWorkerProc.kill("SIGTERM");
101
108
  bareWorkerProc = null;
102
109
  }
103
110
  if (ipcServer) {
104
- console.log("🔌 Closing IPC server");
111
+ logger.info("🔌 Closing IPC server");
105
112
  ipcServer.close();
106
113
  ipcServer = null;
107
114
  }
108
115
  rpcInstance = null;
109
116
  rpcPromise = null;
110
- };
117
+ }
111
118
  // Register cleanup handlers for the parent process
112
119
  process.once("exit", close);
@@ -2,5 +2,5 @@ import type RPC from "bare-rpc";
2
2
  import { type Request, type Response, type RPCOptions } from "../../schemas/index";
3
3
  export declare function send<T extends Request>(request: T, rpc?: RPC, options?: RPCOptions): Promise<Response>;
4
4
  export declare function stream<T extends Request>(request: T, rpc?: RPC, options?: RPCOptions): AsyncGenerator<Response>;
5
- export declare function close(): Promise<void>;
5
+ export declare function close(): void;
6
6
  //# sourceMappingURL=rpc-client.d.ts.map
@@ -1,6 +1,9 @@
1
1
  import { requestSchema, responseSchema, } from "../../schemas/index.js";
2
2
  import { RPCError } from "./rpc-error.js";
3
3
  import { withTimeout, withTimeoutStream } from "../../utils/withTimeout.js";
4
+ import { getClientLogger, summarizeRequest } from "../../logging/index.js";
5
+ import { getRPC, close as closeRPC } from "#rpc";
6
+ const logger = getClientLogger();
4
7
  let rpcInstance = null;
5
8
  let commandCounter = 0;
6
9
  function getNextCommandId() {
@@ -12,66 +15,30 @@ function checkAndThrowError(response) {
12
15
  throw new RPCError(response);
13
16
  }
14
17
  }
15
- async function getRPC() {
18
+ async function getRPCInstance() {
16
19
  if (rpcInstance)
17
20
  return rpcInstance;
18
- const isRN = typeof navigator !== "undefined" && navigator.product === "ReactNative";
19
- // Detect Bare runtime - Bare exposes global Bare object
20
- // TODO we can use something like https://www.npmjs.com/package/which-runtime at some point
21
- const isBare = typeof globalThis !== "undefined" && "Bare" in globalThis;
22
- // TODO Lots of type unsafe hacks to make this work cross platform
23
- if (isRN) {
24
- console.log("React Native runtime detected");
25
- // Only import expo client for React Native - Metro won't bundle the Node client
26
- const expoRPCClientPath = "./expo-rpc-client";
27
- const mod = (await import(expoRPCClientPath));
28
- rpcInstance = await (typeof mod === "function" ? mod() : mod.getRPC());
29
- return rpcInstance;
30
- }
31
- else if (isBare) {
32
- console.log("Bare runtime detected");
33
- // Use dynamic import for Bare client
34
- const mod = await import("./bare-client.js");
35
- rpcInstance = mod.getRPC();
36
- return rpcInstance;
37
- }
38
- else {
39
- console.log("Node runtime detected");
40
- // Use dynamic import for Node client to prevent Metro from bundling it
41
- const mod = await import("./node-rpc-client.js");
42
- rpcInstance = mod.getRPC();
43
- return rpcInstance;
44
- }
21
+ rpcInstance = await getRPC();
22
+ return rpcInstance;
45
23
  }
46
24
  export async function send(request, rpc, options) {
47
25
  const parsedRequest = requestSchema.parse(request);
48
- const rpcInstance = rpc || (await getRPC());
26
+ const rpcInstance = rpc || (await getRPCInstance());
49
27
  const req = rpcInstance.request(getNextCommandId());
50
- // TODO temp for debugging, find a better solution to exclude large payloads
51
- // Log request type and basic info, avoid logging large payloads
52
- if (request.type === "transcribeStream") {
53
- console.log("RPC Client sending:", {
54
- type: request.type,
55
- modelId: request.modelId,
56
- audioChunkType: request.audioChunk.type,
57
- audioChunkSize: request.audioChunk.value.length,
58
- });
59
- }
60
- else {
61
- console.log("RPC Client sending:", request);
62
- }
28
+ logger.debug("RPC Client sending:", summarizeRequest(request));
63
29
  const payload = JSON.stringify(parsedRequest);
64
30
  req.send(payload, "utf-8");
65
31
  const response = await withTimeout(req.reply("utf-8"), options?.timeout);
66
32
  const resPayload = responseSchema.parse(JSON.parse(response?.toString() || "{}"));
67
- console.log("ResPayload", { type: resPayload.type });
33
+ logger.debug("ResPayload", { type: resPayload.type });
68
34
  checkAndThrowError(resPayload);
69
35
  return resPayload;
70
36
  }
71
37
  export async function* stream(request, rpc, options = {}) {
72
38
  const parsedRequest = requestSchema.parse(request);
73
- const rpcInstance = rpc || (await getRPC());
39
+ const rpcInstance = rpc || (await getRPCInstance());
74
40
  const req = rpcInstance.request(getNextCommandId());
41
+ logger.debug("RPC Client streaming:", summarizeRequest(request));
75
42
  req.send(JSON.stringify(parsedRequest), "utf-8");
76
43
  const responseStream = req.createResponseStream({ encoding: "utf-8" });
77
44
  let buffer = "";
@@ -95,21 +62,9 @@ export async function* stream(request, rpc, options = {}) {
95
62
  }
96
63
  }
97
64
  }
98
- export async function close() {
65
+ export function close() {
99
66
  if (!rpcInstance)
100
67
  return;
101
- const isRN = typeof navigator !== "undefined" && navigator.product === "ReactNative";
102
- const isBare = typeof globalThis !== "undefined" && "Bare" in globalThis;
103
- if (isRN) {
104
- const mod = (await import("./expo-rpc-client.js"));
105
- mod.close();
106
- }
107
- else if (isBare) {
108
- // Bare runs in-process (no separate worker), so no cleanup needed
109
- }
110
- else {
111
- const mod = (await import("./node-rpc-client.js"));
112
- mod.close();
113
- }
68
+ closeRPC();
114
69
  rpcInstance = null;
115
70
  }
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ swarmRelays: string[];
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=blind-relay.config.d.ts.map
@@ -0,0 +1,7 @@
1
+ export default {
2
+ swarmRelays: [
3
+ "0000000000000000000000000000000000000000000000000000000000000001",
4
+ "0000000000000000000000000000000000000000000000000000000000000002",
5
+ "0000000000000000000000000000000000000000000000000000000000000003",
6
+ ],
7
+ };
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ loggerLevel: string;
3
+ loggerConsoleOutput: boolean;
4
+ httpDownloadConcurrency: number;
5
+ httpConnectionTimeoutMs: number;
6
+ };
7
+ export default _default;
8
+ //# sourceMappingURL=default.config.d.ts.map
@@ -0,0 +1,6 @@
1
+ export default {
2
+ loggerLevel: "info",
3
+ loggerConsoleOutput: true,
4
+ httpDownloadConcurrency: 3,
5
+ httpConnectionTimeoutMs: 10000,
6
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-reload.d.ts.map
@@ -0,0 +1,49 @@
1
+ import { WHISPER_TINY, loadModel, transcribe, unloadModel } from "../index";
2
+ // Parse command line arguments
3
+ const args = process.argv.slice(2);
4
+ if (!args[0]) {
5
+ console.error("Usage: bun run examples/config-reload.ts <audio-file-path>");
6
+ process.exit(1);
7
+ }
8
+ const audioFilePath = args[0];
9
+ try {
10
+ // Initial load with English language
11
+ console.log("Loading Whisper model with English config...");
12
+ const modelId = await loadModel({
13
+ modelSrc: WHISPER_TINY,
14
+ modelType: "whisper",
15
+ modelConfig: {
16
+ language: "en",
17
+ },
18
+ });
19
+ // Transcribe with English config
20
+ console.log("Transcribing audio with English config...");
21
+ const englishText = await transcribe({
22
+ modelId,
23
+ audioChunk: audioFilePath,
24
+ });
25
+ console.log(`Transcription (EN): ${englishText}`);
26
+ console.log();
27
+ // Hot reload config - change language and temperature
28
+ console.log("Hot reloading config (changing language and temperature)...");
29
+ const reloadedId = await loadModel({
30
+ modelId,
31
+ modelType: "whisper",
32
+ modelConfig: {
33
+ language: "es", // Change to Spanish
34
+ },
35
+ });
36
+ console.log(`Config reloaded, same model ID: ${reloadedId === modelId}`);
37
+ // Transcribe again with updated config
38
+ console.log("Transcribing with updated config...");
39
+ const spanishText = await transcribe({
40
+ modelId,
41
+ audioChunk: audioFilePath,
42
+ });
43
+ console.log(`Transcription (ES): ${spanishText}`);
44
+ await unloadModel({ modelId });
45
+ }
46
+ catch (error) {
47
+ console.error("❌ Error:", error);
48
+ process.exit(1);
49
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Default Config Example
3
+ *
4
+ * This example demonstrates how to use a config file with the SDK.
5
+ *
6
+ * Supported config formats:
7
+ * - qvac.config.json (JSON)
8
+ * - qvac.config.js (JavaScript with default export)
9
+ * - qvac.config.ts (TypeScript with default export)
10
+ *
11
+ * Config resolution order:
12
+ * 1. QVAC_CONFIG_PATH environment variable (used here for demo purposes)
13
+ * 2. Config file in project root - auto-discovered, no env var needed
14
+ * 3. SDK defaults
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=default-config-usage.d.ts.map
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Default Config Example
3
+ *
4
+ * This example demonstrates how to use a config file with the SDK.
5
+ *
6
+ * Supported config formats:
7
+ * - qvac.config.json (JSON)
8
+ * - qvac.config.js (JavaScript with default export)
9
+ * - qvac.config.ts (TypeScript with default export)
10
+ *
11
+ * Config resolution order:
12
+ * 1. QVAC_CONFIG_PATH environment variable (used here for demo purposes)
13
+ * 2. Config file in project root - auto-discovered, no env var needed
14
+ * 3. SDK defaults
15
+ */
16
+ // Note: This example uses .js file for the config
17
+ // However it could be .json or .ts as well, depending on your needs.
18
+ const configDir = import.meta.dirname ?? process.cwd();
19
+ process.env["QVAC_CONFIG_PATH"] =
20
+ `${configDir}/config/default/default.config.js`;
21
+ console.log(`🔍 Using config from: ${process.env["QVAC_CONFIG_PATH"]}`);
22
+ const { loadModel, unloadModel, completion, LLAMA_3_2_1B_INST_Q4_0 } = await import("@qvac/sdk");
23
+ try {
24
+ console.log("🚀 Loading model with configured settings...\n");
25
+ const modelId = await loadModel({
26
+ modelSrc: LLAMA_3_2_1B_INST_Q4_0,
27
+ modelType: "llm",
28
+ });
29
+ console.log("\n💬 Running completion...\n");
30
+ const result = completion({
31
+ modelId,
32
+ history: [
33
+ { role: "user", content: "Say 'Config works!' in exactly 3 words." },
34
+ ],
35
+ stream: true,
36
+ });
37
+ for await (const token of result.tokenStream) {
38
+ process.stdout.write(token);
39
+ }
40
+ console.log("\n");
41
+ await unloadModel({ modelId });
42
+ }
43
+ catch (error) {
44
+ console.error("❌ Error:", error);
45
+ process.exit(1);
46
+ }
47
+ export {};
@@ -32,6 +32,7 @@ try {
32
32
  providerPublicKey,
33
33
  timeout: 5_000, // Optional: 5 second timeout for delegated requests
34
34
  fallbackToLocal: true, // Optional: Fall back to local inference if delegation fails
35
+ // forceNewConnection: true, // Optional: Force a new connection instead of reusing cached one
35
36
  },
36
37
  onProgress: (progress) => {
37
38
  console.log(`📊 Download progress: ${progress.percentage.toFixed(1)}% (${progress.downloaded}/${progress.total} bytes)`);
@@ -1,26 +1,26 @@
1
- import { downloadAsset, setConfig, close, LLAMA_3_2_1B_INST_Q4_0, } from "@qvac/sdk";
2
- // ⚠️ IMPORTANT: These are MOCK relay public keys for demonstration only
3
- // To use blind relays in production:
4
- // 1. Run your own relay servers using hyperswarm
5
- // 2. Use well-known public relays from trusted sources
6
- // 3. Never rely on example/mock keys for production use
7
- const MOCK_RELAY_PUBLIC_KEYS = [
8
- "0000000000000000000000000000000000000000000000000000000000000001",
9
- "0000000000000000000000000000000000000000000000000000000000000002",
10
- "0000000000000000000000000000000000000000000000000000000000000003",
11
- ];
1
+ // Set config path before importing SDK - the SDK loads config during initialization
2
+ // This example uses a config file that defines blind relay public keys for improved P2P connectivity
3
+ // Blind relays help establish connections through NAT/firewalls by acting as intermediaries
4
+ const configDir = import.meta.dirname ?? process.cwd();
5
+ process.env["QVAC_CONFIG_PATH"] =
6
+ `${configDir}/config/blind-relay/blind-relay.config.js`;
7
+ import { downloadAsset, close, LLAMA_3_2_1B_INST_Q4_0, loadModel, getModelInfo, unloadModel, } from "@qvac/sdk";
12
8
  console.log(`🚀 Download with Blind Relays Example`);
13
9
  console.log(`${"=".repeat(60)}\n`);
14
- console.log(`⚠️ Using MOCK relay keys - replace with real relays!\n`);
15
10
  try {
16
- // Configure SDK to use blind relays for improved connectivity
17
- // Blind relays help with NAT traversal and firewall bypassing
18
- await setConfig({
19
- swarmRelays: MOCK_RELAY_PUBLIC_KEYS,
20
- });
21
- console.log(`✅ Configured ${MOCK_RELAY_PUBLIC_KEYS.length} blind relays`);
11
+ // Config is loaded from examples/config/qvac.config.json (set via QVAC_CONFIG_PATH above)
12
+ // The config contains swarmRelays - an array of Hyperswarm relay public keys
13
+ // These relays help with NAT traversal and firewall bypassing for P2P downloads
22
14
  console.log(`📥 Starting model download from Hyperdrive...\n`);
23
15
  const startTime = Date.now();
16
+ const modelId = await loadModel({
17
+ modelSrc: LLAMA_3_2_1B_INST_Q4_0,
18
+ modelType: "llm",
19
+ });
20
+ console.log(`Model loaded with ID: ${modelId}`);
21
+ const firstStatus = await getModelInfo(LLAMA_3_2_1B_INST_Q4_0);
22
+ console.log(`First status: ${JSON.stringify(firstStatus)}`);
23
+ await unloadModel({ modelId });
24
24
  // Download model with progress tracking
25
25
  await downloadAsset({
26
26
  assetSrc: LLAMA_3_2_1B_INST_Q4_0,
@@ -38,11 +38,12 @@ try {
38
38
  });
39
39
  console.log(`\n✅ Model downloaded successfully using blind relays!`);
40
40
  console.log(`Blind relays helped establish peer connections through NAT/firewalls\n`);
41
- await close();
41
+ close();
42
42
  }
43
43
  catch (error) {
44
44
  console.error("❌ Error:", error);
45
- console.log(`\nIf download failed, ensure you're using valid relay public keys`);
46
- console.log(` Mock keys in this example won't work in practice!`);
45
+ console.log(`\nIf download failed, check the relay public keys in:`);
46
+ console.log(` examples/config/qvac.config.json`);
47
+ console.log(` (Mock keys in this example won't work in practice!)`);
47
48
  process.exit(1);
48
49
  }