@qvac/sdk 0.9.2 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/NOTICE +42 -95
  2. package/dist/client/api/cancel.d.ts +1 -1
  3. package/dist/client/api/cancel.js +1 -1
  4. package/dist/client/api/completion-stream.d.ts +51 -12
  5. package/dist/client/api/completion-stream.js +129 -56
  6. package/dist/client/api/delete-cache.d.ts +1 -0
  7. package/dist/client/api/delete-cache.js +1 -0
  8. package/dist/client/api/diffusion.d.ts +17 -2
  9. package/dist/client/api/diffusion.js +21 -4
  10. package/dist/client/api/embed.d.ts +4 -0
  11. package/dist/client/api/finetune.d.ts +21 -0
  12. package/dist/client/api/get-loaded-model-info.d.ts +25 -0
  13. package/dist/client/api/get-loaded-model-info.js +36 -0
  14. package/dist/client/api/get-model-info.d.ts +9 -1
  15. package/dist/client/api/get-model-info.js +8 -0
  16. package/dist/client/api/heartbeat.d.ts +2 -2
  17. package/dist/client/api/heartbeat.js +2 -2
  18. package/dist/client/api/index.d.ts +3 -1
  19. package/dist/client/api/index.js +3 -1
  20. package/dist/client/api/invoke-plugin.d.ts +16 -0
  21. package/dist/client/api/invoke-plugin.js +16 -0
  22. package/dist/client/api/load-model.d.ts +36 -3
  23. package/dist/client/api/load-model.js +31 -10
  24. package/dist/client/api/provide.d.ts +11 -5
  25. package/dist/client/api/provide.js +11 -6
  26. package/dist/client/api/rag.d.ts +9 -0
  27. package/dist/client/api/rag.js +9 -0
  28. package/dist/client/api/registry.d.ts +26 -0
  29. package/dist/client/api/registry.js +26 -0
  30. package/dist/client/api/resume.d.ts +20 -4
  31. package/dist/client/api/resume.js +20 -4
  32. package/dist/client/api/state.d.ts +23 -0
  33. package/dist/client/api/state.js +29 -0
  34. package/dist/client/api/stop-provider.d.ts +11 -5
  35. package/dist/client/api/stop-provider.js +11 -5
  36. package/dist/client/api/suspend.d.ts +21 -3
  37. package/dist/client/api/suspend.js +21 -3
  38. package/dist/client/api/text-to-speech.d.ts +64 -6
  39. package/dist/client/api/text-to-speech.js +423 -47
  40. package/dist/client/api/transcribe.d.ts +29 -4
  41. package/dist/client/api/transcribe.js +86 -28
  42. package/dist/client/api/translate.d.ts +1 -0
  43. package/dist/client/api/translate.js +1 -0
  44. package/dist/client/rpc/bare-client.js +22 -1
  45. package/dist/client/rpc/expo-rpc-client.d.ts +1 -1
  46. package/dist/client/rpc/expo-rpc-client.js +96 -4
  47. package/dist/client/rpc/node-rpc-client.js +36 -0
  48. package/dist/examples/audio/mic-input.d.ts +9 -0
  49. package/dist/examples/audio/mic-input.js +111 -0
  50. package/dist/examples/completion-events.d.ts +18 -0
  51. package/dist/examples/completion-events.js +79 -0
  52. package/dist/examples/delegated-inference/composite.js +12 -18
  53. package/dist/examples/delegated-inference/consumer-profiled.js +4 -11
  54. package/dist/examples/delegated-inference/consumer.js +8 -13
  55. package/dist/examples/delegated-inference/provider.js +11 -16
  56. package/dist/examples/diffusion-flux2-klein-img2img.d.ts +2 -0
  57. package/dist/examples/diffusion-flux2-klein-img2img.js +60 -0
  58. package/dist/examples/diffusion-flux2-klein.js +1 -0
  59. package/dist/examples/diffusion-img2img.d.ts +2 -0
  60. package/dist/examples/diffusion-img2img.js +49 -0
  61. package/dist/examples/diffusion-txt2img.js +2 -1
  62. package/dist/examples/kv-cache-example.js +11 -12
  63. package/dist/examples/llamacpp-cache.d.ts +2 -0
  64. package/dist/examples/llamacpp-cache.js +107 -0
  65. package/dist/examples/llamacpp-dynamic-tools.d.ts +2 -0
  66. package/dist/examples/llamacpp-dynamic-tools.js +144 -0
  67. package/dist/examples/llamacpp-structured-output.d.ts +2 -0
  68. package/dist/examples/llamacpp-structured-output.js +106 -0
  69. package/dist/examples/plugins.js +4 -4
  70. package/dist/examples/suspend-resume.js +21 -4
  71. package/dist/examples/{llamacpp-native-tools.js → tools/llamacpp-native-tools.js} +6 -55
  72. package/dist/examples/tools/llamacpp-tools-harmony-multiturn.d.ts +2 -0
  73. package/dist/examples/tools/llamacpp-tools-harmony-multiturn.js +81 -0
  74. package/dist/examples/tools/llamacpp-tools-pythonic.d.ts +2 -0
  75. package/dist/examples/tools/llamacpp-tools-pythonic.js +50 -0
  76. package/dist/examples/tools/shared.d.ts +21 -0
  77. package/dist/examples/tools/shared.js +42 -0
  78. package/dist/examples/transcription/parakeet-microphone-record.js +6 -33
  79. package/dist/examples/transcription/whispercpp-filesystem-streaming.js +7 -5
  80. package/dist/examples/transcription/whispercpp-filesystem.js +12 -3
  81. package/dist/examples/transcription/whispercpp-microphone-record.js +6 -29
  82. package/dist/examples/translation/translation-stream.js +5 -5
  83. package/dist/examples/tts/llm-to-tts-streaming.d.ts +16 -0
  84. package/dist/examples/tts/llm-to-tts-streaming.js +143 -0
  85. package/dist/examples/tts/supertonic-multilingual.js +3 -3
  86. package/dist/examples/tts/supertonic.js +3 -3
  87. package/dist/examples/tts/utils.d.ts +11 -1
  88. package/dist/examples/tts/utils.js +70 -17
  89. package/dist/examples/voice-assistant/voice-assistant.d.ts +2 -0
  90. package/dist/examples/voice-assistant/voice-assistant.js +207 -0
  91. package/dist/expo/plugins/withMobileBundle.js +1 -1
  92. package/dist/index.d.ts +2 -2
  93. package/dist/index.js +2 -2
  94. package/dist/logging/logger.d.ts +11 -0
  95. package/dist/logging/logger.js +11 -0
  96. package/dist/logging/types.d.ts +18 -0
  97. package/dist/models/registry/models.d.ts +6973 -7457
  98. package/dist/models/registry/models.js +6889 -6855
  99. package/dist/models/update-models/codegen.js +84 -23
  100. package/dist/models/update-models/companions.d.ts +18 -0
  101. package/dist/models/update-models/companions.js +175 -0
  102. package/dist/models/update-models/naming.js +0 -25
  103. package/dist/models/update-models/registry.d.ts +1 -0
  104. package/dist/models/update-models/registry.js +23 -3
  105. package/dist/models/update-models/types.d.ts +37 -9
  106. package/dist/profiling/index.d.ts +49 -0
  107. package/dist/profiling/index.js +49 -0
  108. package/dist/schemas/cancel.d.ts +6 -2
  109. package/dist/schemas/cancel.js +14 -7
  110. package/dist/schemas/common.d.ts +354 -271
  111. package/dist/schemas/common.js +26 -5
  112. package/dist/schemas/completion-event.d.ts +225 -0
  113. package/dist/schemas/completion-event.js +79 -0
  114. package/dist/schemas/completion-stream.d.ts +126 -31
  115. package/dist/schemas/completion-stream.js +138 -36
  116. package/dist/schemas/delegate.d.ts +0 -2
  117. package/dist/schemas/delegate.js +25 -6
  118. package/dist/schemas/download-asset.d.ts +5 -5
  119. package/dist/schemas/embed.js +21 -9
  120. package/dist/schemas/engine-addon-map.d.ts +11 -1
  121. package/dist/schemas/engine-addon-map.js +2 -2
  122. package/dist/schemas/get-loaded-model-info.d.ts +52 -0
  123. package/dist/schemas/get-loaded-model-info.js +44 -0
  124. package/dist/schemas/get-model-info.d.ts +2 -2
  125. package/dist/schemas/get-model-info.js +103 -32
  126. package/dist/schemas/heartbeat.d.ts +0 -1
  127. package/dist/schemas/index.d.ts +4 -1
  128. package/dist/schemas/index.js +4 -1
  129. package/dist/schemas/llamacpp-config.d.ts +14 -4
  130. package/dist/schemas/llamacpp-config.js +5 -0
  131. package/dist/schemas/load-model.d.ts +3233 -1260
  132. package/dist/schemas/load-model.js +23 -16
  133. package/dist/schemas/model-src-utils.d.ts +7 -6
  134. package/dist/schemas/model-src-utils.js +27 -1
  135. package/dist/schemas/model-types.d.ts +4 -4
  136. package/dist/schemas/ocr.d.ts +1 -1
  137. package/dist/schemas/plugin.d.ts +27 -3
  138. package/dist/schemas/plugin.js +27 -2
  139. package/dist/schemas/profiling.js +11 -3
  140. package/dist/schemas/provide.d.ts +1 -3
  141. package/dist/schemas/provide.js +0 -3
  142. package/dist/schemas/rag.d.ts +4 -4
  143. package/dist/schemas/registry.d.ts +10 -10
  144. package/dist/schemas/registry.js +36 -14
  145. package/dist/schemas/reload-config.d.ts +73 -7
  146. package/dist/schemas/sdcpp-config.d.ts +16 -8
  147. package/dist/schemas/sdcpp-config.js +118 -25
  148. package/dist/schemas/sdk-config.d.ts +116 -90
  149. package/dist/schemas/sdk-config.js +16 -0
  150. package/dist/schemas/sdk-errors-client.d.ts +3 -0
  151. package/dist/schemas/sdk-errors-client.js +16 -1
  152. package/dist/schemas/sdk-errors-server.d.ts +3 -0
  153. package/dist/schemas/sdk-errors-server.js +23 -0
  154. package/dist/schemas/state.d.ts +23 -0
  155. package/dist/schemas/state.js +14 -0
  156. package/dist/schemas/stop-provide.d.ts +0 -5
  157. package/dist/schemas/stop-provide.js +2 -6
  158. package/dist/schemas/text-to-speech.d.ts +93 -27
  159. package/dist/schemas/text-to-speech.js +27 -0
  160. package/dist/schemas/tools.d.ts +16 -0
  161. package/dist/schemas/tools.js +15 -0
  162. package/dist/schemas/transcription-config.d.ts +8 -8
  163. package/dist/schemas/transcription.d.ts +33 -0
  164. package/dist/schemas/transcription.js +9 -0
  165. package/dist/schemas/translate.js +59 -19
  166. package/dist/schemas/translation-config.d.ts +157 -133
  167. package/dist/schemas/translation-config.js +34 -11
  168. package/dist/server/bare/delegate-rpc-client.d.ts +1 -1
  169. package/dist/server/bare/delegate-rpc-client.js +131 -122
  170. package/dist/server/bare/hyperswarm.d.ts +2 -2
  171. package/dist/server/bare/hyperswarm.js +12 -7
  172. package/dist/server/bare/ops/cancel.js +7 -0
  173. package/dist/server/bare/ops/kv-cache-utils.d.ts +7 -10
  174. package/dist/server/bare/ops/kv-cache-utils.js +31 -40
  175. package/dist/server/bare/ops/load-model.js +0 -1
  176. package/dist/server/bare/ops/transcribe.d.ts +11 -4
  177. package/dist/server/bare/ops/transcribe.js +25 -4
  178. package/dist/server/bare/ops/translate.js +42 -4
  179. package/dist/server/bare/ops/unload-model.js +21 -19
  180. package/dist/server/bare/plugins/llamacpp-completion/ops/cache-logger.js +1 -2
  181. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +13 -8
  182. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +257 -85
  183. package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.d.ts +101 -0
  184. package/dist/server/bare/plugins/llamacpp-completion/ops/kv-cache-state.js +135 -0
  185. package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +80 -22
  186. package/dist/server/bare/plugins/llamacpp-completion/plugin.js +57 -32
  187. package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +10 -16
  188. package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +69 -44
  189. package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +54 -116
  190. package/dist/server/bare/plugins/nmtcpp-translation/resolve-vocab.d.ts +32 -0
  191. package/dist/server/bare/plugins/nmtcpp-translation/resolve-vocab.js +117 -0
  192. package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +1 -1
  193. package/dist/server/bare/plugins/onnx-ocr/plugin.js +1 -2
  194. package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech-stream.d.ts +7 -0
  195. package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech-stream.js +116 -0
  196. package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech.d.ts +2 -3
  197. package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech.js +71 -9
  198. package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +41 -13
  199. package/dist/server/bare/plugins/onnx-tts/plugin.js +48 -3
  200. package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +15 -7
  201. package/dist/server/bare/plugins/parakeet-transcription/plugin.js +5 -6
  202. package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.js +6 -0
  203. package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +8 -5
  204. package/dist/server/bare/plugins/sdcpp-generation/plugin.js +13 -13
  205. package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +17 -1
  206. package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +40 -17
  207. package/dist/server/bare/registry/config-registry.js +14 -3
  208. package/dist/server/bare/registry/model-registry.d.ts +8 -10
  209. package/dist/server/bare/registry/model-registry.js +17 -12
  210. package/dist/server/bare/registry/registry-client.js +79 -19
  211. package/dist/server/bare/runtime-lifecycle.d.ts +2 -1
  212. package/dist/server/bare/runtime-lifecycle.js +13 -2
  213. package/dist/server/bare/types/addon-responses.d.ts +8 -3
  214. package/dist/server/bare/utils/transcribe-metadata.d.ts +21 -0
  215. package/dist/server/bare/utils/transcribe-metadata.js +28 -0
  216. package/dist/server/bare/utils/tts-stats.d.ts +22 -0
  217. package/dist/server/bare/utils/tts-stats.js +10 -0
  218. package/dist/server/rpc/create-server.d.ts +4 -1
  219. package/dist/server/rpc/create-server.js +5 -1
  220. package/dist/server/rpc/delegate-transport.js +36 -29
  221. package/dist/server/rpc/handle-request.js +28 -3
  222. package/dist/server/rpc/handler-registry.js +7 -1
  223. package/dist/server/rpc/handler-utils.d.ts +5 -0
  224. package/dist/server/rpc/handler-utils.js +22 -0
  225. package/dist/server/rpc/handlers/cancel-delegated.js +3 -5
  226. package/dist/server/rpc/handlers/cancelHandler.js +4 -5
  227. package/dist/server/rpc/handlers/completion-stream-delegated.js +14 -5
  228. package/dist/server/rpc/handlers/delete-cache.js +8 -3
  229. package/dist/server/rpc/handlers/download-asset.js +3 -24
  230. package/dist/server/rpc/handlers/get-loaded-model-info.d.ts +3 -0
  231. package/dist/server/rpc/handlers/get-loaded-model-info.js +39 -0
  232. package/dist/server/rpc/handlers/get-model-info.js +93 -84
  233. package/dist/server/rpc/handlers/heartbeat-delegated.js +2 -2
  234. package/dist/server/rpc/handlers/index.d.ts +6 -0
  235. package/dist/server/rpc/handlers/index.js +6 -0
  236. package/dist/server/rpc/handlers/load-model/download-manager.d.ts +35 -9
  237. package/dist/server/rpc/handlers/load-model/download-manager.js +142 -38
  238. package/dist/server/rpc/handlers/load-model/download-stats.d.ts +5 -4
  239. package/dist/server/rpc/handlers/load-model/download-stats.js +49 -8
  240. package/dist/server/rpc/handlers/load-model/handler.js +31 -50
  241. package/dist/server/rpc/handlers/load-model/http.d.ts +2 -2
  242. package/dist/server/rpc/handlers/load-model/http.js +97 -142
  243. package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +2 -2
  244. package/dist/server/rpc/handlers/load-model/hyperdrive.js +55 -74
  245. package/dist/server/rpc/handlers/load-model/index.d.ts +0 -1
  246. package/dist/server/rpc/handlers/load-model/index.js +0 -1
  247. package/dist/server/rpc/handlers/load-model/registry-client-options.d.ts +27 -0
  248. package/dist/server/rpc/handlers/load-model/registry-client-options.js +19 -0
  249. package/dist/server/rpc/handlers/load-model/registry-companion-set.d.ts +22 -0
  250. package/dist/server/rpc/handlers/load-model/registry-companion-set.js +208 -0
  251. package/dist/server/rpc/handlers/load-model/registry-download-utils.d.ts +24 -0
  252. package/dist/server/rpc/handlers/load-model/registry-download-utils.js +114 -0
  253. package/dist/server/rpc/handlers/load-model/registry.d.ts +2 -20
  254. package/dist/server/rpc/handlers/load-model/registry.js +109 -381
  255. package/dist/server/rpc/handlers/load-model/resolve-session.d.ts +15 -0
  256. package/dist/server/rpc/handlers/load-model/resolve-session.js +61 -0
  257. package/dist/server/rpc/handlers/load-model/resolve.d.ts +3 -3
  258. package/dist/server/rpc/handlers/load-model/resolve.js +14 -23
  259. package/dist/server/rpc/handlers/load-model/types.d.ts +11 -4
  260. package/dist/server/rpc/handlers/load-model/types.js +28 -1
  261. package/dist/server/rpc/handlers/load-model-delegated.js +2 -4
  262. package/dist/server/rpc/handlers/plugin-dispatch.js +9 -5
  263. package/dist/server/rpc/handlers/plugin-invoke.js +1 -1
  264. package/dist/server/rpc/handlers/provideHandler/connection.js +13 -2
  265. package/dist/server/rpc/handlers/provideHandler/handler.js +42 -29
  266. package/dist/server/rpc/handlers/state.d.ts +3 -0
  267. package/dist/server/rpc/handlers/state.js +7 -0
  268. package/dist/server/rpc/handlers/stopProvideHandler.d.ts +2 -2
  269. package/dist/server/rpc/handlers/stopProvideHandler.js +12 -7
  270. package/dist/server/rpc/handlers/text-to-speech-stream.d.ts +3 -0
  271. package/dist/server/rpc/handlers/text-to-speech-stream.js +4 -0
  272. package/dist/server/rpc/handlers/unload-model-delegated.js +3 -3
  273. package/dist/server/rpc/profiling/operation-metrics.js +20 -0
  274. package/dist/server/rpc/rpc-utils.js +1 -1
  275. package/dist/server/rpc/transport-selector.d.ts +3 -0
  276. package/dist/server/rpc/transport-selector.js +18 -0
  277. package/dist/server/utils/cache/auto-history.d.ts +4 -0
  278. package/dist/server/utils/cache/auto-history.js +22 -0
  279. package/dist/server/utils/{cache.d.ts → cache/paths.d.ts} +22 -5
  280. package/dist/server/utils/{cache.js → cache/paths.js} +36 -20
  281. package/dist/server/utils/cache/types.d.ts +8 -0
  282. package/dist/server/utils/cache/types.js +1 -0
  283. package/dist/server/utils/checksum.d.ts +2 -2
  284. package/dist/server/utils/checksum.js +1 -1
  285. package/dist/server/utils/clear-storage.d.ts +5 -0
  286. package/dist/server/utils/clear-storage.js +17 -0
  287. package/dist/server/utils/completion-normalizer.d.ts +17 -0
  288. package/dist/server/utils/completion-normalizer.js +413 -0
  289. package/dist/server/utils/expand-gguf-shards.d.ts +3 -0
  290. package/dist/server/utils/expand-gguf-shards.js +22 -0
  291. package/dist/server/utils/formatting.js +1 -1
  292. package/dist/server/utils/index.d.ts +4 -2
  293. package/dist/server/utils/index.js +4 -2
  294. package/dist/server/utils/qvac-paths.d.ts +2 -0
  295. package/dist/server/utils/qvac-paths.js +5 -0
  296. package/dist/server/utils/response-format.d.ts +3 -0
  297. package/dist/server/utils/response-format.js +20 -0
  298. package/dist/server/utils/tool-integration.d.ts +15 -4
  299. package/dist/server/utils/tool-integration.js +21 -41
  300. package/dist/server/utils/tools/dialect.d.ts +8 -0
  301. package/dist/server/utils/tools/dialect.js +14 -0
  302. package/dist/server/utils/tools/index.d.ts +3 -0
  303. package/dist/server/utils/tools/index.js +2 -0
  304. package/dist/server/utils/tools/parser.d.ts +6 -0
  305. package/dist/server/utils/tools/parser.js +46 -0
  306. package/dist/server/utils/tools/parsers/harmony.d.ts +4 -0
  307. package/dist/server/utils/tools/parsers/harmony.js +59 -0
  308. package/dist/server/utils/tools/parsers/hermes.d.ts +4 -0
  309. package/dist/server/utils/tools/parsers/hermes.js +100 -0
  310. package/dist/server/utils/tools/parsers/json.d.ts +6 -0
  311. package/dist/server/utils/tools/parsers/json.js +115 -0
  312. package/dist/server/utils/tools/parsers/pythonic.d.ts +4 -0
  313. package/dist/server/utils/tools/parsers/pythonic.js +267 -0
  314. package/dist/server/utils/tools/shared.d.ts +18 -0
  315. package/dist/server/utils/tools/shared.js +54 -0
  316. package/dist/server/utils/worker-lock.d.ts +3 -0
  317. package/dist/server/utils/worker-lock.js +67 -0
  318. package/dist/server/worker-core.d.ts +16 -1
  319. package/dist/server/worker-core.js +114 -14
  320. package/dist/utils/aggregate-events.d.ts +16 -0
  321. package/dist/utils/aggregate-events.js +52 -0
  322. package/dist/utils/cache-normalize.d.ts +10 -0
  323. package/dist/utils/cache-normalize.js +23 -0
  324. package/dist/utils/encoding.d.ts +8 -0
  325. package/dist/utils/encoding.js +13 -0
  326. package/dist/utils/errors-client.d.ts +12 -0
  327. package/dist/utils/errors-client.js +20 -0
  328. package/dist/utils/errors-server.d.ts +14 -0
  329. package/dist/utils/errors-server.js +31 -0
  330. package/dist/utils/load-model-validation.d.ts +7 -0
  331. package/dist/utils/load-model-validation.js +18 -0
  332. package/expo/plugins/patches/android-link.mjs +1 -1
  333. package/expo/plugins/patches/ios-link.mjs +1 -1
  334. package/package.json +14 -18
  335. package/dist/examples/translation/translation-opus.d.ts +0 -2
  336. package/dist/examples/translation/translation-opus.js +0 -33
  337. package/dist/server/bare/utils/loader-adapter.d.ts +0 -7
  338. package/dist/server/bare/utils/loader-adapter.js +0 -9
  339. package/dist/server/utils/model-path.d.ts +0 -5
  340. package/dist/server/utils/model-path.js +0 -7
  341. package/dist/server/utils/tool-parser.d.ts +0 -7
  342. package/dist/server/utils/tool-parser.js +0 -248
  343. /package/dist/examples/{llamacpp-native-tools.d.ts → tools/llamacpp-native-tools.d.ts} +0 -0
@@ -0,0 +1,27 @@
1
+ import type { QvacConfig } from "../../../../schemas/index";
2
+ export declare const DEFAULT_REGISTRY_STREAM_TIMEOUT_MS = 60000;
3
+ export interface RegistryClientDownloadOptions {
4
+ timeout: number;
5
+ outputFile: string;
6
+ maxRetries?: number;
7
+ onProgress?: (progress: {
8
+ downloaded: number;
9
+ total: number;
10
+ }) => void;
11
+ signal?: globalThis.AbortSignal;
12
+ }
13
+ /**
14
+ * Build the options passed to @qvac/registry-client download methods from the
15
+ * current SDK config. Pure helper (no bare-* imports) so the mapping can be
16
+ * unit-tested without standing up a real registry client.
17
+ */
18
+ export declare function buildRegistryClientOptions(params: {
19
+ sdkConfig: Pick<QvacConfig, "registryStreamTimeoutMs" | "registryDownloadMaxRetries">;
20
+ outputFile: string;
21
+ onProgress?: ((progress: {
22
+ downloaded: number;
23
+ total: number;
24
+ }) => void) | undefined;
25
+ signal?: globalThis.AbortSignal | undefined;
26
+ }): RegistryClientDownloadOptions;
27
+ //# sourceMappingURL=registry-client-options.d.ts.map
@@ -0,0 +1,19 @@
1
+ export const DEFAULT_REGISTRY_STREAM_TIMEOUT_MS = 60_000;
2
+ /**
3
+ * Build the options passed to @qvac/registry-client download methods from the
4
+ * current SDK config. Pure helper (no bare-* imports) so the mapping can be
5
+ * unit-tested without standing up a real registry client.
6
+ */
7
+ export function buildRegistryClientOptions(params) {
8
+ const { sdkConfig, outputFile, onProgress, signal } = params;
9
+ const timeout = sdkConfig.registryStreamTimeoutMs
10
+ ?? DEFAULT_REGISTRY_STREAM_TIMEOUT_MS;
11
+ const maxRetries = sdkConfig.registryDownloadMaxRetries;
12
+ return {
13
+ timeout,
14
+ outputFile,
15
+ ...(maxRetries !== undefined && { maxRetries }),
16
+ ...(onProgress && { onProgress }),
17
+ ...(signal && { signal: signal }),
18
+ };
19
+ }
@@ -0,0 +1,22 @@
1
+ import type { ModelProgressUpdate } from "../../../../schemas/index";
2
+ import type { RegistryItem } from "../../../../models/registry/index";
3
+ import type { AbortSignal } from "bare-abort-controller";
4
+ import type { DownloadHooks } from "./types";
5
+ type CompanionSetMetadata = NonNullable<RegistryItem["companionSet"]>;
6
+ export interface DownloadCompanionSetOptions {
7
+ companionSet: CompanionSetMetadata;
8
+ downloadKey: string;
9
+ progressCallback?: ((progress: ModelProgressUpdate) => void) | undefined;
10
+ signal?: AbortSignal | undefined;
11
+ hooks?: DownloadHooks | undefined;
12
+ shouldClearCache?: (() => boolean) | undefined;
13
+ }
14
+ /**
15
+ * Download a companion set from the registry, placing files directly
16
+ * into their canonical layout at `sets/<setKey>/<targetName>`.
17
+ *
18
+ * Returns the path to the primary file.
19
+ */
20
+ export declare function downloadCompanionSetFromRegistry(options: DownloadCompanionSetOptions): Promise<string>;
21
+ export {};
22
+ //# sourceMappingURL=registry-companion-set.d.ts.map
@@ -0,0 +1,208 @@
1
+ import { promises as fsPromises } from "bare-fs";
2
+ import { getModelsCacheDir, getCompanionSetPath, getCompanionSetCacheDir, getSingleFileCachePath, generateShortHash, calculatePercentage, } from "../../../utils/index.js";
3
+ import { measureChecksum } from "../../../utils/checksum.js";
4
+ import { validateAndJoinPath } from "../../../utils/path-security.js";
5
+ import { buildBlobBinding, downloadSingleFileFromRegistry, validateCachedFile, } from "./registry-download-utils.js";
6
+ import { DownloadCancelledError, RegistryDownloadFailedError, } from "../../../../utils/errors-server.js";
7
+ import { getServerLogger } from "../../../../logging/index.js";
8
+ const logger = getServerLogger();
9
+ /**
10
+ * Download a companion set from the registry, placing files directly
11
+ * into their canonical layout at `sets/<setKey>/<targetName>`.
12
+ *
13
+ * Returns the path to the primary file.
14
+ */
15
+ export async function downloadCompanionSetFromRegistry(options) {
16
+ const { companionSet, downloadKey, progressCallback, signal, hooks, shouldClearCache, } = options;
17
+ const { files, setKey, primaryKey } = companionSet;
18
+ validateCompanionSetMetadata(files, primaryKey);
19
+ const primaryEntry = files.find((f) => f.key === primaryKey);
20
+ const primaryRegistryPath = primaryEntry.registryPath;
21
+ if (isLegacyOnnxSet(files)) {
22
+ const legacyPath = await checkLegacyOnnxCache(primaryRegistryPath, files, hooks);
23
+ if (legacyPath) {
24
+ logger.info(`✅ Using legacy ONNX cache for companion set: ${legacyPath}`);
25
+ hooks?.markCacheHit?.();
26
+ emitFinalProgress(progressCallback, downloadKey, setKey, files);
27
+ return legacyPath;
28
+ }
29
+ }
30
+ // Legacy flat-cache compatibility for Bergamot-style companion sets.
31
+ // This is valid only for families whose runtime still works with explicit
32
+ // per-file absolute paths; it is not a generic rule for all companion sets.
33
+ if (!isLegacyOnnxSet(files)) {
34
+ const flatPath = await checkLegacyFlatCache(files, primaryKey, hooks);
35
+ if (flatPath) {
36
+ logger.info(`✅ Using legacy flat cache for companion set: ${flatPath}`);
37
+ hooks?.markCacheHit?.();
38
+ emitFinalProgress(progressCallback, downloadKey, setKey, files);
39
+ return flatPath;
40
+ }
41
+ }
42
+ // Check canonical companion set cache
43
+ const validatedFiles = new Set();
44
+ for (const file of files) {
45
+ const filePath = getCompanionSetPath(setKey, file.targetName);
46
+ const cached = await validateCachedFile(filePath, file.targetName, file.expectedSize, file.sha256Checksum, hooks);
47
+ if (cached) {
48
+ validatedFiles.add(file.key);
49
+ }
50
+ }
51
+ if (validatedFiles.size === files.length) {
52
+ logger.info(`✅ All companion set files cached`);
53
+ hooks?.markCacheHit?.();
54
+ emitFinalProgress(progressCallback, downloadKey, setKey, files);
55
+ return getCompanionSetPath(setKey, primaryEntry.targetName);
56
+ }
57
+ // Download missing files
58
+ hooks?.markCacheMiss?.();
59
+ const overallTotal = files.reduce((sum, f) => sum + f.expectedSize, 0);
60
+ let overallDownloaded = 0;
61
+ try {
62
+ for (let i = 0; i < files.length; i++) {
63
+ const file = files[i];
64
+ const filePath = getCompanionSetPath(setKey, file.targetName);
65
+ if (validatedFiles.has(file.key)) {
66
+ overallDownloaded += file.expectedSize;
67
+ continue;
68
+ }
69
+ const fileProgressCallback = progressCallback
70
+ ? (progress) => {
71
+ const currentOverall = overallDownloaded + progress.downloaded;
72
+ progressCallback({
73
+ ...progress,
74
+ downloadKey,
75
+ fileSetInfo: {
76
+ setKey,
77
+ currentFile: file.targetName,
78
+ fileIndex: i + 1,
79
+ totalFiles: files.length,
80
+ overallDownloaded: currentOverall,
81
+ overallTotal,
82
+ overallPercentage: calculatePercentage(currentOverall, overallTotal),
83
+ },
84
+ });
85
+ }
86
+ : undefined;
87
+ const blobBinding = file.blobCoreKey
88
+ ? buildBlobBinding(file)
89
+ : undefined;
90
+ await downloadSingleFileFromRegistry(file.registryPath, file.registrySource, filePath, file.targetName, downloadKey, file.expectedSize, file.sha256Checksum, fileProgressCallback, signal, blobBinding, hooks);
91
+ overallDownloaded += file.expectedSize;
92
+ }
93
+ }
94
+ catch (error) {
95
+ if (error instanceof DownloadCancelledError && shouldClearCache?.()) {
96
+ try {
97
+ await fsPromises.rm(getCompanionSetCacheDir(setKey), {
98
+ recursive: true,
99
+ force: true,
100
+ });
101
+ }
102
+ catch (cleanupError) {
103
+ logger.debug("Failed to delete companion set cache during cleanup", {
104
+ setKey,
105
+ error: cleanupError,
106
+ });
107
+ }
108
+ }
109
+ throw error;
110
+ }
111
+ emitFinalProgress(progressCallback, downloadKey, setKey, files);
112
+ return getCompanionSetPath(setKey, primaryEntry.targetName);
113
+ }
114
+ function emitFinalProgress(progressCallback, downloadKey, setKey, files) {
115
+ if (!progressCallback)
116
+ return;
117
+ const overallTotal = files.reduce((sum, f) => sum + f.expectedSize, 0);
118
+ const lastFile = files[files.length - 1];
119
+ progressCallback({
120
+ type: "modelProgress",
121
+ downloaded: overallTotal,
122
+ total: overallTotal,
123
+ percentage: 100,
124
+ downloadKey,
125
+ fileSetInfo: {
126
+ setKey,
127
+ currentFile: lastFile.targetName,
128
+ fileIndex: files.length,
129
+ totalFiles: files.length,
130
+ overallDownloaded: overallTotal,
131
+ overallTotal,
132
+ overallPercentage: 100,
133
+ },
134
+ });
135
+ }
136
+ function validateCompanionSetMetadata(files, primaryKey) {
137
+ if (!files.some((f) => f.key === primaryKey)) {
138
+ throw new RegistryDownloadFailedError(`Companion set missing primary file (key: ${primaryKey})`);
139
+ }
140
+ const targetNames = new Set();
141
+ for (const file of files) {
142
+ if (targetNames.has(file.targetName)) {
143
+ throw new RegistryDownloadFailedError(`Companion set has duplicate targetName "${file.targetName}"`);
144
+ }
145
+ targetNames.add(file.targetName);
146
+ }
147
+ }
148
+ function isLegacyOnnxSet(files) {
149
+ return files.some((f) => f.primary === true && f.targetName.endsWith(".onnx"));
150
+ }
151
+ /**
152
+ * Check if a complete legacy ONNX cache exists for a companion set.
153
+ * Read-only probe: does not create legacy cache directories.
154
+ */
155
+ async function checkLegacyOnnxCache(primaryRegistryPath, files, hooks) {
156
+ const cacheKey = generateShortHash(primaryRegistryPath);
157
+ let primaryPath = null;
158
+ for (const file of files) {
159
+ const filePath = getLegacyOnnxPath(cacheKey, file.targetName);
160
+ try {
161
+ const stats = await fsPromises.stat(filePath);
162
+ if (stats.size !== file.expectedSize)
163
+ return null;
164
+ if (file.sha256Checksum && file.sha256Checksum.length === 64) {
165
+ const checksum = await measureChecksum(filePath, hooks);
166
+ if (checksum !== file.sha256Checksum)
167
+ return null;
168
+ }
169
+ }
170
+ catch {
171
+ return null;
172
+ }
173
+ if (file.primary === true) {
174
+ primaryPath = filePath;
175
+ }
176
+ }
177
+ return primaryPath;
178
+ }
179
+ function getLegacyOnnxPath(cacheKey, filename) {
180
+ const baseCache = getModelsCacheDir();
181
+ return validateAndJoinPath(baseCache, "onnx", cacheKey, filename);
182
+ }
183
+ /**
184
+ * Check if all companion files exist in the flat single-file cache.
185
+ */
186
+ async function checkLegacyFlatCache(files, primaryKey, hooks) {
187
+ let primaryPath = null;
188
+ for (const file of files) {
189
+ const flatPath = getSingleFileCachePath(file.registryPath);
190
+ try {
191
+ const stats = await fsPromises.stat(flatPath);
192
+ if (stats.size !== file.expectedSize)
193
+ return null;
194
+ if (file.sha256Checksum && file.sha256Checksum.length === 64) {
195
+ const checksum = await measureChecksum(flatPath, hooks);
196
+ if (checksum !== file.sha256Checksum)
197
+ return null;
198
+ }
199
+ }
200
+ catch {
201
+ return null;
202
+ }
203
+ if (file.key === primaryKey) {
204
+ primaryPath = flatPath;
205
+ }
206
+ }
207
+ return primaryPath;
208
+ }
@@ -0,0 +1,24 @@
1
+ import type { ModelProgressUpdate } from "../../../../schemas/index";
2
+ import type { QVACBlobBinding } from "@qvac/registry-client";
3
+ import type { AbortSignal } from "bare-abort-controller";
4
+ import type { DownloadHooks } from "./types";
5
+ export { DEFAULT_REGISTRY_STREAM_TIMEOUT_MS, buildRegistryClientOptions, } from "./registry-client-options";
6
+ export type { RegistryClientDownloadOptions } from "./registry-client-options";
7
+ export declare function buildBlobBinding(meta: {
8
+ blobCoreKey: string;
9
+ blobBlockOffset: number;
10
+ blobBlockLength: number;
11
+ blobByteOffset: number;
12
+ expectedSize: number;
13
+ }): QVACBlobBinding;
14
+ /**
15
+ * Validate a cached file against expected size and checksum.
16
+ */
17
+ export declare function validateCachedFile(modelPath: string, modelFileName: string, expectedSize: number, expectedChecksum?: string, hooks?: DownloadHooks): Promise<string | null>;
18
+ /**
19
+ * Download a single file from the registry to filesystem.
20
+ * When blobBinding is provided, uses direct blob download (skips metadata sync).
21
+ * Otherwise falls back to metadata-based downloadModel.
22
+ */
23
+ export declare function downloadSingleFileFromRegistry(registryPath: string, registrySource: string, modelPath: string, modelFileName: string, downloadKey: string, expectedSize: number, expectedChecksum: string, progressCallback?: (progress: ModelProgressUpdate) => void, signal?: AbortSignal, blobBinding?: QVACBlobBinding, hooks?: DownloadHooks): Promise<void>;
24
+ //# sourceMappingURL=registry-download-utils.d.ts.map
@@ -0,0 +1,114 @@
1
+ import { promises as fsPromises } from "bare-fs";
2
+ import path from "bare-path";
3
+ import { measureChecksum, calculatePercentage, } from "../../../utils/index.js";
4
+ import { getRegistryClient } from "../../../bare/registry/registry-client.js";
5
+ import { getSDKConfig } from "../../../bare/registry/config-registry.js";
6
+ import { buildRegistryClientOptions } from "./registry-client-options.js";
7
+ import { ChecksumValidationFailedError, DownloadCancelledError, } from "../../../../utils/errors-server.js";
8
+ import { getServerLogger } from "../../../../logging/index.js";
9
+ const logger = getServerLogger();
10
+ export { DEFAULT_REGISTRY_STREAM_TIMEOUT_MS, buildRegistryClientOptions, } from "./registry-client-options.js";
11
+ export function buildBlobBinding(meta) {
12
+ return {
13
+ coreKey: meta.blobCoreKey,
14
+ blockOffset: meta.blobBlockOffset,
15
+ blockLength: meta.blobBlockLength,
16
+ byteOffset: meta.blobByteOffset,
17
+ byteLength: meta.expectedSize,
18
+ };
19
+ }
20
+ /**
21
+ * Validate a cached file against expected size and checksum.
22
+ */
23
+ export async function validateCachedFile(modelPath, modelFileName, expectedSize, expectedChecksum, hooks) {
24
+ try {
25
+ await fsPromises.access(modelPath);
26
+ const localStats = await fsPromises.stat(modelPath);
27
+ const localSize = localStats.size;
28
+ if (localSize === expectedSize) {
29
+ logger.info(`✅ Model cached with correct size: ${modelPath}`);
30
+ if (expectedChecksum && expectedChecksum.length === 64) {
31
+ const checksum = await measureChecksum(modelPath, hooks);
32
+ if (checksum !== expectedChecksum) {
33
+ throw new ChecksumValidationFailedError(`${modelFileName}. Expected: ${expectedChecksum}. Actual: ${checksum}. File may be corrupted`);
34
+ }
35
+ }
36
+ logger.info(`✅ Model already cached and validated: ${modelPath}`);
37
+ return modelPath;
38
+ }
39
+ logger.warn(`🗑️ Removing incomplete cached file (expected ${expectedSize}, got ${localSize}): ${modelPath}`);
40
+ await fsPromises.unlink(modelPath);
41
+ return null;
42
+ }
43
+ catch (error) {
44
+ if (error instanceof ChecksumValidationFailedError) {
45
+ logger.warn(`🗑️ Removing corrupted cached file: ${modelPath}`);
46
+ await fsPromises.unlink(modelPath).catch(() => { });
47
+ }
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * Download a single file from the registry to filesystem.
53
+ * When blobBinding is provided, uses direct blob download (skips metadata sync).
54
+ * Otherwise falls back to metadata-based downloadModel.
55
+ */
56
+ export async function downloadSingleFileFromRegistry(registryPath, registrySource, modelPath, modelFileName, downloadKey, expectedSize, expectedChecksum, progressCallback, signal, blobBinding, hooks) {
57
+ if (signal?.aborted) {
58
+ throw new DownloadCancelledError();
59
+ }
60
+ const client = await getRegistryClient();
61
+ const dir = path.dirname(modelPath);
62
+ await fsPromises.mkdir(dir, { recursive: true });
63
+ const onProgress = progressCallback
64
+ ? (progress) => {
65
+ const total = progress.total || expectedSize || progress.downloaded;
66
+ progressCallback({
67
+ type: "modelProgress",
68
+ downloaded: progress.downloaded,
69
+ total,
70
+ percentage: total > 0
71
+ ? calculatePercentage(progress.downloaded, total)
72
+ : 0,
73
+ downloadKey,
74
+ });
75
+ }
76
+ : undefined;
77
+ const clientOptions = buildRegistryClientOptions({
78
+ sdkConfig: getSDKConfig(),
79
+ outputFile: modelPath,
80
+ onProgress,
81
+ signal,
82
+ });
83
+ if (blobBinding) {
84
+ logger.info(`📥 Downloading blob directly: ${modelFileName}`);
85
+ await client.downloadBlob(blobBinding, clientOptions);
86
+ }
87
+ else {
88
+ logger.info(`📥 Downloading from registry: ${registryPath}`);
89
+ await client.downloadModel(registryPath, registrySource, clientOptions);
90
+ }
91
+ logger.info(`✅ Downloaded to ${modelPath}`);
92
+ const stats = await fsPromises.stat(modelPath);
93
+ if (expectedSize && stats.size !== expectedSize) {
94
+ await fsPromises.unlink(modelPath).catch(() => { });
95
+ throw new ChecksumValidationFailedError(`${modelFileName}. File size mismatch: expected ${expectedSize}, got ${stats.size}`);
96
+ }
97
+ if (expectedChecksum && expectedChecksum.length === 64) {
98
+ const checksum = await measureChecksum(modelPath, hooks);
99
+ if (checksum !== expectedChecksum) {
100
+ await fsPromises.unlink(modelPath);
101
+ throw new ChecksumValidationFailedError(`${modelFileName}. Expected: ${expectedChecksum}. Actual: ${checksum}`);
102
+ }
103
+ logger.info(`✅ Checksum validated for ${modelFileName}`);
104
+ }
105
+ if (progressCallback) {
106
+ progressCallback({
107
+ type: "modelProgress",
108
+ downloaded: stats.size,
109
+ total: stats.size,
110
+ percentage: 100,
111
+ downloadKey,
112
+ });
113
+ }
114
+ }
@@ -1,22 +1,4 @@
1
1
  import type { ModelProgressUpdate } from "../../../../schemas/index";
2
- import { type RegistryItem } from "../../../../models/registry/index";
3
- import type { DownloadMetricsHooks } from "./types";
4
- /**
5
- * Find companion ONNX data file in registry.
6
- * ONNX models with external data may use either .onnx_data or .onnx.data.
7
- */
8
- export declare function findOnnxCompanionDataFile(registryPath: string): RegistryItem | undefined;
9
- /**
10
- * Resolve the main ONNX registry path from a companion data registry path.
11
- * Supports both .onnx_data and .onnx.data naming conventions.
12
- */
13
- export declare function getPairedOnnxRegistryPath(registryPath: string): string | undefined;
14
- /**
15
- * Download a model from the QVAC Registry.
16
- *
17
- * For known models (present in models.ts), uses direct blob download which
18
- * skips the registry metadata sync entirely. Falls back to metadata-based
19
- * download for unknown models.
20
- */
21
- export declare function downloadModelFromRegistry(registryPath: string, registrySource: string, progressCallback?: (progress: ModelProgressUpdate) => void, expectedChecksum?: string, hooks?: DownloadMetricsHooks): Promise<string>;
2
+ import type { DownloadHooks } from "./types";
3
+ export declare function downloadModelFromRegistry(registryPath: string, registrySource: string, progressCallback?: (progress: ModelProgressUpdate) => void, expectedChecksum?: string, hooks?: DownloadHooks): Promise<string>;
22
4
  //# sourceMappingURL=registry.d.ts.map