@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
@@ -1,5 +1,11 @@
1
- import { parseToolCalls, convertToolsToGrammar, } from "./tool-parser.js";
2
- export function insertToolsIntoHistory(history, tools) {
1
+ import { detectToolDialectFromName } from "./tools/index.js";
2
+ import { getModelInfo } from "../bare/registry/model-registry.js";
3
+ /**
4
+ * Static tools mode: prepend tools right after the system message (or at the
5
+ * very start when no system message is present). The tool block stays in the
6
+ * kv-cache for the whole chat session.
7
+ */
8
+ export function prependToolsToHistory(history, tools) {
3
9
  const systemMsgIndex = history.findIndex((msg) => msg.role === "system");
4
10
  if (systemMsgIndex >= 0) {
5
11
  return [
@@ -10,44 +16,18 @@ export function insertToolsIntoHistory(history, tools) {
10
16
  }
11
17
  return [...tools, ...history];
12
18
  }
13
- export function setupToolGrammar(modelConfig, tools) {
14
- const grammar = convertToolsToGrammar(tools);
15
- modelConfig["grammar"] = grammar;
19
+ /**
20
+ * Dynamic tools mode: append tools after the last history message. The
21
+ * addon's compact-tools mode anchors the block after the last user message
22
+ * and trims it from the kv-cache once the tool-call chain resolves, so a
23
+ * subsequent turn can ship a different tool set without poisoning the cache.
24
+ */
25
+ export function appendToolsToHistory(history, tools) {
26
+ return [...history, ...tools];
16
27
  }
17
- function isInsideThinkBlock(text) {
18
- const lastOpen = text.lastIndexOf("<think>");
19
- if (lastOpen === -1)
20
- return false;
21
- const lastClose = text.lastIndexOf("</think>");
22
- return lastClose < lastOpen;
23
- }
24
- export function checkForToolEvents(accumulatedText, currentToken, tools, emittedToolCallPositions) {
25
- const events = [];
26
- if (isInsideThinkBlock(accumulatedText)) {
27
- return events;
28
- }
29
- if (currentToken.includes("</tool_call>") || currentToken.includes("}")) {
30
- const { toolCalls, errors } = parseToolCalls(accumulatedText, tools);
31
- for (const call of toolCalls) {
32
- const callPosition = accumulatedText.indexOf(call.raw || "");
33
- if (callPosition >= 0 && !emittedToolCallPositions.has(callPosition)) {
34
- emittedToolCallPositions.add(callPosition);
35
- events.push({
36
- type: "toolCall",
37
- call,
38
- });
39
- }
40
- }
41
- for (const error of errors) {
42
- const errorPosition = accumulatedText.indexOf(error.raw || "");
43
- if (errorPosition >= 0 && !emittedToolCallPositions.has(errorPosition)) {
44
- emittedToolCallPositions.add(errorPosition);
45
- events.push({
46
- type: "toolCallError",
47
- error,
48
- });
49
- }
50
- }
51
- }
52
- return events;
28
+ export function detectToolDialect(modelId) {
29
+ const info = getModelInfo(modelId);
30
+ if (!info)
31
+ return "hermes";
32
+ return detectToolDialectFromName(info.name, info.path);
53
33
  }
@@ -0,0 +1,8 @@
1
+ import type { ToolDialect } from "../../../schemas/index";
2
+ /**
3
+ * Detects the tool-call dialect from a model's registry name and file path.
4
+ * Defaults to "hermes" (its parser chain also covers unknown JSON-payload
5
+ * models). Bypass with `completion({ toolDialect })`.
6
+ */
7
+ export declare function detectToolDialectFromName(name: string | undefined, path: string): ToolDialect;
8
+ //# sourceMappingURL=dialect.d.ts.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Detects the tool-call dialect from a model's registry name and file path.
3
+ * Defaults to "hermes" (its parser chain also covers unknown JSON-payload
4
+ * models). Bypass with `completion({ toolDialect })`.
5
+ */
6
+ export function detectToolDialectFromName(name, path) {
7
+ const basename = path.toLowerCase().split(/[/\\]/).pop() ?? "";
8
+ const tag = `${(name ?? "").toLowerCase()}|${basename}`;
9
+ if (/gpt[_-]?oss/.test(tag))
10
+ return "harmony";
11
+ if (/lfm[_-]?\d/.test(tag))
12
+ return "pythonic";
13
+ return "hermes";
14
+ }
@@ -0,0 +1,3 @@
1
+ export { detectToolDialectFromName } from "./dialect";
2
+ export { parseToolCalls } from "./parser";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ export { detectToolDialectFromName } from "./dialect.js";
2
+ export { parseToolCalls } from "./parser.js";
@@ -0,0 +1,6 @@
1
+ import type { Tool, ToolCall, ToolCallError, ToolDialect } from "../../../schemas/index";
2
+ export declare function parseToolCalls(text: string, tools: Tool[], dialect?: ToolDialect): {
3
+ toolCalls: ToolCall[];
4
+ errors: ToolCallError[];
5
+ };
6
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1,46 @@
1
+ import { stripThinkingBlocks, } from "./shared.js";
2
+ import { parseGemmaFormat, parseGenericFormat, parseLlamacppFormat, } from "./parsers/json.js";
3
+ import { parseHermesFormat } from "./parsers/hermes.js";
4
+ import { parsePythonicFormat } from "./parsers/pythonic.js";
5
+ import { parseHarmonyFormat } from "./parsers/harmony.js";
6
+ function pickFormatParsers(dialect) {
7
+ switch (dialect) {
8
+ case "pythonic":
9
+ return [parsePythonicFormat];
10
+ case "hermes":
11
+ // Hermes first so frame errors surface; JSON fallbacks then cover
12
+ // unknown JSON-payload models.
13
+ return [parseHermesFormat, parseGemmaFormat, parseLlamacppFormat];
14
+ case "json":
15
+ return [parseGemmaFormat, parseLlamacppFormat];
16
+ case "harmony":
17
+ return [parseHarmonyFormat];
18
+ default:
19
+ // Harmony first: `to=functions.` is uniquely Harmony and can't
20
+ // false-match other dialects.
21
+ // Pythonic last: its bare `[name(...)]` form can match payloads that
22
+ // look like other dialects.
23
+ return [
24
+ parseHarmonyFormat,
25
+ parseHermesFormat,
26
+ parseGemmaFormat,
27
+ parseLlamacppFormat,
28
+ parsePythonicFormat,
29
+ ];
30
+ }
31
+ }
32
+ export function parseToolCalls(text, tools, dialect) {
33
+ if (!tools || tools.length === 0) {
34
+ return { toolCalls: [], errors: [] };
35
+ }
36
+ const cleaned = stripThinkingBlocks(text);
37
+ const formatParsers = pickFormatParsers(dialect);
38
+ for (const parser of formatParsers) {
39
+ const result = parser(cleaned, tools);
40
+ if (result.matched) {
41
+ return { toolCalls: result.toolCalls, errors: result.errors };
42
+ }
43
+ }
44
+ const generic = parseGenericFormat(cleaned, tools);
45
+ return { toolCalls: generic.toolCalls, errors: generic.errors };
46
+ }
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "../../../../schemas/index";
2
+ import { type ParserResult } from "../shared";
3
+ export declare function parseHarmonyFormat(text: string, tools: Tool[]): ParserResult;
4
+ //# sourceMappingURL=harmony.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { generateStableToolCallId, validateToolArguments, } from "../shared.js";
2
+ const HARMONY_FRAME_RE = /to=functions\.([\w-]+)\s+<\|constrain\|>json<\|message\|>([\s\S]*?)(?=<\|call\|>|$)/g;
3
+ export function parseHarmonyFormat(text, tools) {
4
+ const toolCalls = [];
5
+ const errors = [];
6
+ if (!text.includes("to=functions.")) {
7
+ return { matched: false, toolCalls, errors };
8
+ }
9
+ HARMONY_FRAME_RE.lastIndex = 0;
10
+ let m;
11
+ while ((m = HARMONY_FRAME_RE.exec(text)) !== null) {
12
+ const name = m[1];
13
+ const payload = m[2]?.trim();
14
+ const raw = m[0];
15
+ if (!name || payload === undefined)
16
+ continue;
17
+ let parsedArgs;
18
+ try {
19
+ parsedArgs = JSON.parse(payload);
20
+ }
21
+ catch (error) {
22
+ errors.push({
23
+ code: "PARSE_ERROR",
24
+ message: `Failed to parse Harmony tool call JSON for ${name}: ${error instanceof Error ? error.message : String(error)}`,
25
+ raw,
26
+ });
27
+ continue;
28
+ }
29
+ if (typeof parsedArgs !== "object" ||
30
+ parsedArgs === null ||
31
+ Array.isArray(parsedArgs)) {
32
+ errors.push({
33
+ code: "PARSE_ERROR",
34
+ message: `Harmony tool call payload for ${name} is not a JSON object`,
35
+ raw,
36
+ });
37
+ continue;
38
+ }
39
+ const args = parsedArgs;
40
+ const validation = validateToolArguments(name, args, tools);
41
+ if (!validation.isValid && validation.error) {
42
+ errors.push({ ...validation.error, raw });
43
+ continue;
44
+ }
45
+ toolCalls.push({
46
+ id: generateStableToolCallId(name, args),
47
+ name,
48
+ arguments: args,
49
+ raw,
50
+ });
51
+ }
52
+ // Defer `matched` to extraction so partial Harmony shapes fall through
53
+ // to the next parser instead of short-circuiting the chain.
54
+ return {
55
+ matched: toolCalls.length > 0 || errors.length > 0,
56
+ toolCalls,
57
+ errors,
58
+ };
59
+ }
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "../../../../schemas/index";
2
+ import { type ParserResult } from "../shared";
3
+ export declare function parseHermesFormat(text: string, tools: Tool[]): ParserResult;
4
+ //# sourceMappingURL=hermes.d.ts.map
@@ -0,0 +1,100 @@
1
+ import { generateStableToolCallId, isValidToolCall, validateToolArguments, } from "../shared.js";
2
+ // Hermes-style: JSON payload wrapped in `<tool_call>...</tool_call>` tags
3
+ export function parseHermesFormat(text, tools) {
4
+ const toolCalls = [];
5
+ const errors = [];
6
+ if (!text.includes("<tool_call>")) {
7
+ return { matched: false, toolCalls, errors };
8
+ }
9
+ // Incomplete frame: open marker without close (cutoff/abort). Recover
10
+ // the inner buffer here — fallthrough to JSON parsers can't strip the
11
+ // `<tool_call>` prefix on its own.
12
+ if (!text.includes("</tool_call>")) {
13
+ return recoverIncompleteHermesFrame(text, tools);
14
+ }
15
+ const toolCallRegex = /<tool_call>\s*({[\s\S]*?})\s*<\/tool_call>/g;
16
+ const matches = Array.from(text.matchAll(toolCallRegex));
17
+ for (const match of matches) {
18
+ const callJson = match[1];
19
+ if (!callJson)
20
+ continue;
21
+ const trimmedJson = callJson.trim();
22
+ let callItem;
23
+ try {
24
+ callItem = JSON.parse(trimmedJson);
25
+ }
26
+ catch (error) {
27
+ errors.push({
28
+ code: "PARSE_ERROR",
29
+ message: `Failed to parse Hermes tool call: ${error instanceof Error ? error.message : String(error)}`,
30
+ raw: trimmedJson,
31
+ });
32
+ continue;
33
+ }
34
+ if (!isValidToolCall(callItem)) {
35
+ errors.push({
36
+ code: "PARSE_ERROR",
37
+ message: "Hermes tool call is missing name/arguments",
38
+ raw: trimmedJson,
39
+ });
40
+ continue;
41
+ }
42
+ const call = callItem;
43
+ const validation = validateToolArguments(call.name, call.arguments, tools);
44
+ if (!validation.isValid && validation.error) {
45
+ errors.push({
46
+ ...validation.error,
47
+ raw: trimmedJson,
48
+ });
49
+ continue;
50
+ }
51
+ toolCalls.push({
52
+ id: call.id || generateStableToolCallId(call.name, call.arguments),
53
+ name: call.name,
54
+ arguments: call.arguments,
55
+ raw: trimmedJson,
56
+ });
57
+ }
58
+ return { matched: true, toolCalls, errors };
59
+ }
60
+ // Strips a possible truncated close-tag tail (`</tool`, `</tool_c`)
61
+ // before parsing. Bounded to buffers that actually contain the open marker.
62
+ function recoverIncompleteHermesFrame(text, tools) {
63
+ const openIdx = text.indexOf("<tool_call>");
64
+ const inner = text.slice(openIdx + "<tool_call>".length).trim();
65
+ const partialCloseIdx = inner.search(/<\/tool/);
66
+ const candidate = partialCloseIdx === -1 ? inner : inner.slice(0, partialCloseIdx).trim();
67
+ if (candidate.length === 0) {
68
+ return { matched: false, toolCalls: [], errors: [] };
69
+ }
70
+ let parsed;
71
+ try {
72
+ parsed = JSON.parse(candidate);
73
+ }
74
+ catch {
75
+ return { matched: false, toolCalls: [], errors: [] };
76
+ }
77
+ if (!isValidToolCall(parsed)) {
78
+ return { matched: false, toolCalls: [], errors: [] };
79
+ }
80
+ const validation = validateToolArguments(parsed.name, parsed.arguments, tools);
81
+ if (!validation.isValid && validation.error) {
82
+ return {
83
+ matched: true,
84
+ toolCalls: [],
85
+ errors: [{ ...validation.error, raw: candidate }],
86
+ };
87
+ }
88
+ return {
89
+ matched: true,
90
+ toolCalls: [
91
+ {
92
+ id: parsed.id || generateStableToolCallId(parsed.name, parsed.arguments),
93
+ name: parsed.name,
94
+ arguments: parsed.arguments,
95
+ raw: candidate,
96
+ },
97
+ ],
98
+ errors: [],
99
+ };
100
+ }
@@ -0,0 +1,6 @@
1
+ import type { Tool } from "../../../../schemas/index";
2
+ import { type ParserResult } from "../shared";
3
+ export declare function parseGemmaFormat(text: string, tools: Tool[]): ParserResult;
4
+ export declare function parseLlamacppFormat(text: string, tools: Tool[]): ParserResult;
5
+ export declare function parseGenericFormat(text: string, tools: Tool[]): ParserResult;
6
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1,115 @@
1
+ import { generateStableToolCallId, isValidToolCall, validateToolArguments, } from "../shared.js";
2
+ export function parseGemmaFormat(text, tools) {
3
+ const toolCalls = [];
4
+ const errors = [];
5
+ let parsed;
6
+ try {
7
+ parsed = JSON.parse(text);
8
+ }
9
+ catch {
10
+ return { matched: false, toolCalls, errors };
11
+ }
12
+ if (!parsed ||
13
+ typeof parsed !== "object" ||
14
+ !("tool_calls" in parsed) ||
15
+ !Array.isArray(parsed.tool_calls)) {
16
+ return { matched: false, toolCalls, errors };
17
+ }
18
+ for (const callItem of parsed.tool_calls) {
19
+ if (!isValidToolCall(callItem)) {
20
+ errors.push({
21
+ code: "PARSE_ERROR",
22
+ message: "Gemma tool_calls entry is missing name/arguments",
23
+ raw: JSON.stringify(callItem),
24
+ });
25
+ continue;
26
+ }
27
+ const call = callItem;
28
+ const validation = validateToolArguments(call.name, call.arguments, tools);
29
+ if (!validation.isValid && validation.error) {
30
+ errors.push({
31
+ ...validation.error,
32
+ raw: JSON.stringify(call),
33
+ });
34
+ continue;
35
+ }
36
+ toolCalls.push({
37
+ id: call.id || generateStableToolCallId(call.name, call.arguments),
38
+ name: call.name,
39
+ arguments: call.arguments,
40
+ raw: JSON.stringify(call),
41
+ });
42
+ }
43
+ return { matched: true, toolCalls, errors };
44
+ }
45
+ export function parseLlamacppFormat(text, tools) {
46
+ const toolCalls = [];
47
+ const errors = [];
48
+ let parsedItem;
49
+ try {
50
+ parsedItem = JSON.parse(text);
51
+ }
52
+ catch {
53
+ return { matched: false, toolCalls, errors };
54
+ }
55
+ if (!isValidToolCall(parsedItem)) {
56
+ return { matched: false, toolCalls, errors };
57
+ }
58
+ const parsed = parsedItem;
59
+ const validation = validateToolArguments(parsed.name, parsed.arguments, tools);
60
+ if (!validation.isValid && validation.error) {
61
+ errors.push({
62
+ ...validation.error,
63
+ raw: text,
64
+ });
65
+ }
66
+ else {
67
+ toolCalls.push({
68
+ id: parsed.id || generateStableToolCallId(parsed.name, parsed.arguments),
69
+ name: parsed.name,
70
+ arguments: parsed.arguments,
71
+ raw: text,
72
+ });
73
+ }
74
+ return { matched: true, toolCalls, errors };
75
+ }
76
+ // Last-resort fallback: loose JSON `{"name":..., "arguments":...}` objects
77
+ // anywhere in the text. Runs after dialect-specific parsers all miss.
78
+ export function parseGenericFormat(text, tools) {
79
+ const toolCalls = [];
80
+ const errors = [];
81
+ const jsonObjectRegex = /\{[\s\S]*?"name"[\s\S]*?"arguments"[\s\S]*?\}/g;
82
+ let match;
83
+ let matched = false;
84
+ while ((match = jsonObjectRegex.exec(text)) !== null) {
85
+ matched = true;
86
+ try {
87
+ const objItem = JSON.parse(match[0]);
88
+ if (isValidToolCall(objItem)) {
89
+ const obj = objItem;
90
+ const validation = validateToolArguments(obj.name, obj.arguments, tools);
91
+ if (!validation.isValid && validation.error) {
92
+ errors.push({
93
+ ...validation.error,
94
+ raw: match[0],
95
+ });
96
+ continue;
97
+ }
98
+ toolCalls.push({
99
+ id: obj.id || generateStableToolCallId(obj.name, obj.arguments),
100
+ name: obj.name,
101
+ arguments: obj.arguments,
102
+ raw: match[0],
103
+ });
104
+ }
105
+ }
106
+ catch (error) {
107
+ errors.push({
108
+ code: "PARSE_ERROR",
109
+ message: `Failed to parse generic tool call: ${error instanceof Error ? error.message : String(error)}`,
110
+ raw: match[0],
111
+ });
112
+ }
113
+ }
114
+ return { matched, toolCalls, errors };
115
+ }
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "../../../../schemas/index";
2
+ import { type ParserResult } from "../shared";
3
+ export declare function parsePythonicFormat(text: string, tools: Tool[]): ParserResult;
4
+ //# sourceMappingURL=pythonic.d.ts.map