@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.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 (665) hide show
  1. package/README.md +29 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/agent-memory.d.ts +118 -0
  4. package/dist/agent-memory.d.ts.map +1 -0
  5. package/dist/agent-memory.js +186 -0
  6. package/dist/agent-memory.js.map +1 -0
  7. package/dist/async-local-storage.d.ts +20 -0
  8. package/dist/async-local-storage.d.ts.map +1 -0
  9. package/dist/async-local-storage.js +28 -0
  10. package/dist/async-local-storage.js.map +1 -0
  11. package/dist/blender-executor.d.ts +93 -0
  12. package/dist/blender-executor.d.ts.map +1 -0
  13. package/dist/blender-executor.js +294 -0
  14. package/dist/blender-executor.js.map +1 -0
  15. package/dist/comfy-executor.d.ts +23 -1
  16. package/dist/comfy-executor.d.ts.map +1 -1
  17. package/dist/comfy-executor.js +234 -55
  18. package/dist/comfy-executor.js.map +1 -1
  19. package/dist/context-packer.d.ts +1 -1
  20. package/dist/context-packer.d.ts.map +1 -1
  21. package/dist/context-packer.js +23 -25
  22. package/dist/context-packer.js.map +1 -1
  23. package/dist/context.d.ts +954 -127
  24. package/dist/context.d.ts.map +1 -1
  25. package/dist/context.js +2424 -513
  26. package/dist/context.js.map +1 -1
  27. package/dist/cost-reconciler.d.ts +32 -0
  28. package/dist/cost-reconciler.d.ts.map +1 -0
  29. package/dist/cost-reconciler.js +21 -0
  30. package/dist/cost-reconciler.js.map +1 -0
  31. package/dist/entities.d.ts +33 -0
  32. package/dist/entities.d.ts.map +1 -0
  33. package/dist/entities.js +43 -0
  34. package/dist/entities.js.map +1 -0
  35. package/dist/external-media-fetch.d.ts +29 -0
  36. package/dist/external-media-fetch.d.ts.map +1 -0
  37. package/dist/external-media-fetch.js +38 -0
  38. package/dist/external-media-fetch.js.map +1 -0
  39. package/dist/generation-receipt.d.ts +86 -0
  40. package/dist/generation-receipt.d.ts.map +1 -0
  41. package/dist/generation-receipt.js +137 -0
  42. package/dist/generation-receipt.js.map +1 -0
  43. package/dist/generation-registry.d.ts +67 -0
  44. package/dist/generation-registry.d.ts.map +1 -0
  45. package/dist/generation-registry.js +126 -0
  46. package/dist/generation-registry.js.map +1 -0
  47. package/dist/google/client.d.ts +196 -0
  48. package/dist/google/client.d.ts.map +1 -0
  49. package/dist/google/client.js +396 -0
  50. package/dist/google/client.js.map +1 -0
  51. package/dist/google/index.d.ts +3 -0
  52. package/dist/google/index.d.ts.map +1 -0
  53. package/dist/google/index.js +3 -0
  54. package/dist/google/index.js.map +1 -0
  55. package/dist/google/token.d.ts +15 -0
  56. package/dist/google/token.d.ts.map +1 -0
  57. package/dist/google/token.js +24 -0
  58. package/dist/google/token.js.map +1 -0
  59. package/dist/host-binaries.d.ts +106 -0
  60. package/dist/host-binaries.d.ts.map +1 -0
  61. package/dist/host-binaries.js +344 -0
  62. package/dist/host-binaries.js.map +1 -0
  63. package/dist/image-codec.d.ts +74 -0
  64. package/dist/image-codec.d.ts.map +1 -0
  65. package/dist/image-codec.js +273 -0
  66. package/dist/image-codec.js.map +1 -0
  67. package/dist/index.d.ts +56 -6
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +43 -4
  70. package/dist/index.js.map +1 -1
  71. package/dist/invocation-account.d.ts +43 -0
  72. package/dist/invocation-account.d.ts.map +1 -0
  73. package/dist/invocation-account.js +60 -0
  74. package/dist/invocation-account.js.map +1 -0
  75. package/dist/media-ref-bytes.d.ts +19 -0
  76. package/dist/media-ref-bytes.d.ts.map +1 -0
  77. package/dist/media-ref-bytes.js +181 -0
  78. package/dist/media-ref-bytes.js.map +1 -0
  79. package/dist/node-executor.d.ts +113 -2
  80. package/dist/node-executor.d.ts.map +1 -1
  81. package/dist/permission-gate.d.ts +152 -0
  82. package/dist/permission-gate.d.ts.map +1 -0
  83. package/dist/permission-gate.js +87 -0
  84. package/dist/permission-gate.js.map +1 -0
  85. package/dist/prefixed-storage-adapter.d.ts +33 -0
  86. package/dist/prefixed-storage-adapter.d.ts.map +1 -0
  87. package/dist/prefixed-storage-adapter.js +70 -0
  88. package/dist/prefixed-storage-adapter.js.map +1 -0
  89. package/dist/prompt-asset-refs.d.ts +222 -0
  90. package/dist/prompt-asset-refs.d.ts.map +1 -0
  91. package/dist/prompt-asset-refs.js +751 -0
  92. package/dist/prompt-asset-refs.js.map +1 -0
  93. package/dist/provider-cache.d.ts +3 -0
  94. package/dist/provider-cache.d.ts.map +1 -0
  95. package/dist/provider-cache.js +8 -0
  96. package/dist/provider-cache.js.map +1 -0
  97. package/dist/providers/aki-provider.d.ts +33 -10
  98. package/dist/providers/aki-provider.d.ts.map +1 -1
  99. package/dist/providers/aki-provider.js +84 -77
  100. package/dist/providers/aki-provider.js.map +1 -1
  101. package/dist/providers/alibaba-provider.d.ts +39 -0
  102. package/dist/providers/alibaba-provider.d.ts.map +1 -0
  103. package/dist/providers/alibaba-provider.js +86 -0
  104. package/dist/providers/alibaba-provider.js.map +1 -0
  105. package/dist/providers/anthropic-provider.d.ts +52 -3
  106. package/dist/providers/anthropic-provider.d.ts.map +1 -1
  107. package/dist/providers/anthropic-provider.js +1020 -338
  108. package/dist/providers/anthropic-provider.js.map +1 -1
  109. package/dist/providers/atlascloud-provider.d.ts +101 -0
  110. package/dist/providers/atlascloud-provider.d.ts.map +1 -0
  111. package/dist/providers/atlascloud-provider.js +1009 -0
  112. package/dist/providers/atlascloud-provider.js.map +1 -0
  113. package/dist/providers/atlascloud-transport.d.ts +100 -0
  114. package/dist/providers/atlascloud-transport.d.ts.map +1 -0
  115. package/dist/providers/atlascloud-transport.js +364 -0
  116. package/dist/providers/atlascloud-transport.js.map +1 -0
  117. package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
  118. package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
  119. package/dist/providers/atlascloud-webhook-registry.js +104 -0
  120. package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
  121. package/dist/providers/audio-mime.d.ts +11 -0
  122. package/dist/providers/audio-mime.d.ts.map +1 -0
  123. package/dist/providers/audio-mime.js +46 -0
  124. package/dist/providers/audio-mime.js.map +1 -0
  125. package/dist/providers/base-provider.d.ts +481 -24
  126. package/dist/providers/base-provider.d.ts.map +1 -1
  127. package/dist/providers/base-provider.js +1259 -42
  128. package/dist/providers/base-provider.js.map +1 -1
  129. package/dist/providers/cassette-provider.d.ts +217 -0
  130. package/dist/providers/cassette-provider.d.ts.map +1 -0
  131. package/dist/providers/cassette-provider.js +502 -0
  132. package/dist/providers/cassette-provider.js.map +1 -0
  133. package/dist/providers/cerebras-provider.d.ts +6 -12
  134. package/dist/providers/cerebras-provider.d.ts.map +1 -1
  135. package/dist/providers/cerebras-provider.js +8 -33
  136. package/dist/providers/cerebras-provider.js.map +1 -1
  137. package/dist/providers/claude-agent-provider.d.ts +131 -68
  138. package/dist/providers/claude-agent-provider.d.ts.map +1 -1
  139. package/dist/providers/claude-agent-provider.js +1095 -515
  140. package/dist/providers/claude-agent-provider.js.map +1 -1
  141. package/dist/providers/codex-provider.d.ts +82 -0
  142. package/dist/providers/codex-provider.d.ts.map +1 -0
  143. package/dist/providers/codex-provider.js +492 -0
  144. package/dist/providers/codex-provider.js.map +1 -0
  145. package/dist/providers/cohere-provider.d.ts +5 -2
  146. package/dist/providers/cohere-provider.d.ts.map +1 -1
  147. package/dist/providers/cohere-provider.js +9 -2
  148. package/dist/providers/cohere-provider.js.map +1 -1
  149. package/dist/providers/comfy-cloud-provider.d.ts +30 -0
  150. package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
  151. package/dist/providers/comfy-cloud-provider.js +42 -0
  152. package/dist/providers/comfy-cloud-provider.js.map +1 -0
  153. package/dist/providers/content-filter.d.ts +46 -0
  154. package/dist/providers/content-filter.d.ts.map +1 -0
  155. package/dist/providers/content-filter.js +92 -0
  156. package/dist/providers/content-filter.js.map +1 -0
  157. package/dist/providers/context-exceeded.d.ts +37 -0
  158. package/dist/providers/context-exceeded.d.ts.map +1 -0
  159. package/dist/providers/context-exceeded.js +114 -0
  160. package/dist/providers/context-exceeded.js.map +1 -0
  161. package/dist/providers/context-window.d.ts +44 -0
  162. package/dist/providers/context-window.d.ts.map +1 -0
  163. package/dist/providers/context-window.js +145 -0
  164. package/dist/providers/context-window.js.map +1 -0
  165. package/dist/providers/contract/index.d.ts +4 -0
  166. package/dist/providers/contract/index.d.ts.map +1 -0
  167. package/dist/providers/contract/index.js +4 -0
  168. package/dist/providers/contract/index.js.map +1 -0
  169. package/dist/providers/contract/probe-manifest.d.ts +75 -0
  170. package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
  171. package/dist/providers/contract/probe-manifest.js +379 -0
  172. package/dist/providers/contract/probe-manifest.js.map +1 -0
  173. package/dist/providers/contract/probe-runner.d.ts +57 -0
  174. package/dist/providers/contract/probe-runner.d.ts.map +1 -0
  175. package/dist/providers/contract/probe-runner.js +180 -0
  176. package/dist/providers/contract/probe-runner.js.map +1 -0
  177. package/dist/providers/contract/redact.d.ts +29 -0
  178. package/dist/providers/contract/redact.d.ts.map +1 -0
  179. package/dist/providers/contract/redact.js +113 -0
  180. package/dist/providers/contract/redact.js.map +1 -0
  181. package/dist/providers/core-tools.d.ts +74 -0
  182. package/dist/providers/core-tools.d.ts.map +1 -0
  183. package/dist/providers/core-tools.js +127 -0
  184. package/dist/providers/core-tools.js.map +1 -0
  185. package/dist/providers/cost-calculator.d.ts +69 -50
  186. package/dist/providers/cost-calculator.d.ts.map +1 -1
  187. package/dist/providers/cost-calculator.js +207 -397
  188. package/dist/providers/cost-calculator.js.map +1 -1
  189. package/dist/providers/credential-check.d.ts +45 -0
  190. package/dist/providers/credential-check.d.ts.map +1 -0
  191. package/dist/providers/credential-check.js +159 -0
  192. package/dist/providers/credential-check.js.map +1 -0
  193. package/dist/providers/custom-model-kinds.d.ts +33 -0
  194. package/dist/providers/custom-model-kinds.d.ts.map +1 -0
  195. package/dist/providers/custom-model-kinds.js +96 -0
  196. package/dist/providers/custom-model-kinds.js.map +1 -0
  197. package/dist/providers/custom-openai-provider.d.ts +81 -0
  198. package/dist/providers/custom-openai-provider.d.ts.map +1 -0
  199. package/dist/providers/custom-openai-provider.js +182 -0
  200. package/dist/providers/custom-openai-provider.js.map +1 -0
  201. package/dist/providers/custom-provider-registry.d.ts +19 -0
  202. package/dist/providers/custom-provider-registry.d.ts.map +1 -0
  203. package/dist/providers/custom-provider-registry.js +52 -0
  204. package/dist/providers/custom-provider-registry.js.map +1 -0
  205. package/dist/providers/deepseek-provider.d.ts +8 -14
  206. package/dist/providers/deepseek-provider.d.ts.map +1 -1
  207. package/dist/providers/deepseek-provider.js +6 -35
  208. package/dist/providers/deepseek-provider.js.map +1 -1
  209. package/dist/providers/defaults.d.ts +12 -0
  210. package/dist/providers/defaults.d.ts.map +1 -0
  211. package/dist/providers/defaults.js +12 -0
  212. package/dist/providers/defaults.js.map +1 -0
  213. package/dist/providers/elevenlabs-provider.d.ts +49 -0
  214. package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
  215. package/dist/providers/elevenlabs-provider.js +142 -0
  216. package/dist/providers/elevenlabs-provider.js.map +1 -0
  217. package/dist/providers/entity-references.d.ts +31 -0
  218. package/dist/providers/entity-references.d.ts.map +1 -0
  219. package/dist/providers/entity-references.js +113 -0
  220. package/dist/providers/entity-references.js.map +1 -0
  221. package/dist/providers/evolink-provider.d.ts +38 -0
  222. package/dist/providers/evolink-provider.d.ts.map +1 -0
  223. package/dist/providers/evolink-provider.js +304 -0
  224. package/dist/providers/evolink-provider.js.map +1 -0
  225. package/dist/providers/fake-provider.d.ts +72 -1
  226. package/dist/providers/fake-provider.d.ts.map +1 -1
  227. package/dist/providers/fake-provider.js +203 -1
  228. package/dist/providers/fake-provider.js.map +1 -1
  229. package/dist/providers/fal-generations.d.ts +106 -0
  230. package/dist/providers/fal-generations.d.ts.map +1 -0
  231. package/dist/providers/fal-generations.js +286 -0
  232. package/dist/providers/fal-generations.js.map +1 -0
  233. package/dist/providers/fal-provider.d.ts +171 -7
  234. package/dist/providers/fal-provider.d.ts.map +1 -1
  235. package/dist/providers/fal-provider.js +1369 -64
  236. package/dist/providers/fal-provider.js.map +1 -1
  237. package/dist/providers/fal-queue.d.ts +47 -0
  238. package/dist/providers/fal-queue.d.ts.map +1 -0
  239. package/dist/providers/fal-queue.js +231 -0
  240. package/dist/providers/fal-queue.js.map +1 -0
  241. package/dist/providers/gemini-provider.d.ts +148 -8
  242. package/dist/providers/gemini-provider.d.ts.map +1 -1
  243. package/dist/providers/gemini-provider.js +1500 -316
  244. package/dist/providers/gemini-provider.js.map +1 -1
  245. package/dist/providers/gmi-provider.d.ts +21 -0
  246. package/dist/providers/gmi-provider.d.ts.map +1 -0
  247. package/dist/providers/gmi-provider.js +34 -0
  248. package/dist/providers/gmi-provider.js.map +1 -0
  249. package/dist/providers/gpt-image-size.d.ts +3 -0
  250. package/dist/providers/gpt-image-size.d.ts.map +1 -0
  251. package/dist/providers/gpt-image-size.js +37 -0
  252. package/dist/providers/gpt-image-size.js.map +1 -0
  253. package/dist/providers/groq-provider.d.ts +9 -12
  254. package/dist/providers/groq-provider.d.ts.map +1 -1
  255. package/dist/providers/groq-provider.js +19 -33
  256. package/dist/providers/groq-provider.js.map +1 -1
  257. package/dist/providers/groq-request.d.ts +38 -0
  258. package/dist/providers/groq-request.d.ts.map +1 -0
  259. package/dist/providers/groq-request.js +138 -0
  260. package/dist/providers/groq-request.js.map +1 -0
  261. package/dist/providers/higgsfield-provider.d.ts +30 -0
  262. package/dist/providers/higgsfield-provider.d.ts.map +1 -0
  263. package/dist/providers/higgsfield-provider.js +131 -0
  264. package/dist/providers/higgsfield-provider.js.map +1 -0
  265. package/dist/providers/higgsfield-transport.d.ts +106 -0
  266. package/dist/providers/higgsfield-transport.d.ts.map +1 -0
  267. package/dist/providers/higgsfield-transport.js +182 -0
  268. package/dist/providers/higgsfield-transport.js.map +1 -0
  269. package/dist/providers/http-transport.d.ts +74 -0
  270. package/dist/providers/http-transport.d.ts.map +1 -0
  271. package/dist/providers/http-transport.js +152 -0
  272. package/dist/providers/http-transport.js.map +1 -0
  273. package/dist/providers/huggingface-provider.d.ts +71 -3
  274. package/dist/providers/huggingface-provider.d.ts.map +1 -1
  275. package/dist/providers/huggingface-provider.js +230 -34
  276. package/dist/providers/huggingface-provider.js.map +1 -1
  277. package/dist/providers/image-mime.d.ts +39 -0
  278. package/dist/providers/image-mime.d.ts.map +1 -0
  279. package/dist/providers/image-mime.js +111 -0
  280. package/dist/providers/image-mime.js.map +1 -0
  281. package/dist/providers/image-ref.d.ts +21 -0
  282. package/dist/providers/image-ref.d.ts.map +1 -0
  283. package/dist/providers/image-ref.js +44 -0
  284. package/dist/providers/image-ref.js.map +1 -0
  285. package/dist/providers/index.d.ts +84 -8
  286. package/dist/providers/index.d.ts.map +1 -1
  287. package/dist/providers/index.js +239 -56
  288. package/dist/providers/index.js.map +1 -1
  289. package/dist/providers/jina-provider.d.ts +10 -2
  290. package/dist/providers/jina-provider.d.ts.map +1 -1
  291. package/dist/providers/jina-provider.js +16 -7
  292. package/dist/providers/jina-provider.js.map +1 -1
  293. package/dist/providers/kie-provider.d.ts +170 -9
  294. package/dist/providers/kie-provider.d.ts.map +1 -1
  295. package/dist/providers/kie-provider.js +1176 -228
  296. package/dist/providers/kie-provider.js.map +1 -1
  297. package/dist/providers/kie-webhook-registry.d.ts +28 -0
  298. package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
  299. package/dist/providers/kie-webhook-registry.js +91 -0
  300. package/dist/providers/kie-webhook-registry.js.map +1 -0
  301. package/dist/providers/llama-provider.d.ts +21 -37
  302. package/dist/providers/llama-provider.d.ts.map +1 -1
  303. package/dist/providers/llama-provider.js +43 -354
  304. package/dist/providers/llama-provider.js.map +1 -1
  305. package/dist/providers/lmstudio-provider.d.ts +4 -7
  306. package/dist/providers/lmstudio-provider.d.ts.map +1 -1
  307. package/dist/providers/lmstudio-provider.js +24 -15
  308. package/dist/providers/lmstudio-provider.js.map +1 -1
  309. package/dist/providers/manifest-models.d.ts +341 -1
  310. package/dist/providers/manifest-models.d.ts.map +1 -1
  311. package/dist/providers/manifest-models.js +1106 -22
  312. package/dist/providers/manifest-models.js.map +1 -1
  313. package/dist/providers/media-mime.d.ts +14 -0
  314. package/dist/providers/media-mime.d.ts.map +1 -0
  315. package/dist/providers/media-mime.js +35 -0
  316. package/dist/providers/media-mime.js.map +1 -0
  317. package/dist/providers/meshy-provider.d.ts +14 -1
  318. package/dist/providers/meshy-provider.d.ts.map +1 -1
  319. package/dist/providers/meshy-provider.js +76 -46
  320. package/dist/providers/meshy-provider.js.map +1 -1
  321. package/dist/providers/meta-provider.d.ts +22 -0
  322. package/dist/providers/meta-provider.d.ts.map +1 -0
  323. package/dist/providers/meta-provider.js +54 -0
  324. package/dist/providers/meta-provider.js.map +1 -0
  325. package/dist/providers/minimax-provider.d.ts +25 -18
  326. package/dist/providers/minimax-provider.d.ts.map +1 -1
  327. package/dist/providers/minimax-provider.js +211 -72
  328. package/dist/providers/minimax-provider.js.map +1 -1
  329. package/dist/providers/mistral-provider.d.ts +6 -12
  330. package/dist/providers/mistral-provider.d.ts.map +1 -1
  331. package/dist/providers/mistral-provider.js +10 -34
  332. package/dist/providers/mistral-provider.js.map +1 -1
  333. package/dist/providers/moonshot-provider.d.ts +11 -15
  334. package/dist/providers/moonshot-provider.d.ts.map +1 -1
  335. package/dist/providers/moonshot-provider.js +33 -23
  336. package/dist/providers/moonshot-provider.js.map +1 -1
  337. package/dist/providers/node-llama-cpp-provider.d.ts +98 -0
  338. package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
  339. package/dist/providers/node-llama-cpp-provider.js +479 -0
  340. package/dist/providers/node-llama-cpp-provider.js.map +1 -0
  341. package/dist/providers/nodetool-provider.d.ts +49 -0
  342. package/dist/providers/nodetool-provider.d.ts.map +1 -0
  343. package/dist/providers/nodetool-provider.js +224 -0
  344. package/dist/providers/nodetool-provider.js.map +1 -0
  345. package/dist/providers/oauth/browser-launcher.d.ts +23 -0
  346. package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
  347. package/dist/providers/oauth/browser-launcher.js +45 -0
  348. package/dist/providers/oauth/browser-launcher.js.map +1 -0
  349. package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
  350. package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
  351. package/dist/providers/oauth/claude-code-credentials.js +133 -0
  352. package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
  353. package/dist/providers/oauth/claude-code-login.d.ts +124 -0
  354. package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
  355. package/dist/providers/oauth/claude-code-login.js +230 -0
  356. package/dist/providers/oauth/claude-code-login.js.map +1 -0
  357. package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
  358. package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
  359. package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
  360. package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
  361. package/dist/providers/oauth/errors.d.ts +54 -0
  362. package/dist/providers/oauth/errors.d.ts.map +1 -0
  363. package/dist/providers/oauth/errors.js +79 -0
  364. package/dist/providers/oauth/errors.js.map +1 -0
  365. package/dist/providers/oauth/index.d.ts +105 -0
  366. package/dist/providers/oauth/index.d.ts.map +1 -0
  367. package/dist/providers/oauth/index.js +167 -0
  368. package/dist/providers/oauth/index.js.map +1 -0
  369. package/dist/providers/oauth/jwt-claims.d.ts +23 -0
  370. package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
  371. package/dist/providers/oauth/jwt-claims.js +67 -0
  372. package/dist/providers/oauth/jwt-claims.js.map +1 -0
  373. package/dist/providers/oauth/local-callback-server.d.ts +60 -0
  374. package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
  375. package/dist/providers/oauth/local-callback-server.js +148 -0
  376. package/dist/providers/oauth/local-callback-server.js.map +1 -0
  377. package/dist/providers/oauth/oauth-client.d.ts +55 -0
  378. package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
  379. package/dist/providers/oauth/oauth-client.js +161 -0
  380. package/dist/providers/oauth/oauth-client.js.map +1 -0
  381. package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
  382. package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
  383. package/dist/providers/oauth/openai-oauth-provider.js +265 -0
  384. package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
  385. package/dist/providers/oauth/pkce-helper.d.ts +43 -0
  386. package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
  387. package/dist/providers/oauth/pkce-helper.js +57 -0
  388. package/dist/providers/oauth/pkce-helper.js.map +1 -0
  389. package/dist/providers/oauth/redaction.d.ts +22 -0
  390. package/dist/providers/oauth/redaction.d.ts.map +1 -0
  391. package/dist/providers/oauth/redaction.js +59 -0
  392. package/dist/providers/oauth/redaction.js.map +1 -0
  393. package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
  394. package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
  395. package/dist/providers/oauth/secure-credential-store.js +73 -0
  396. package/dist/providers/oauth/secure-credential-store.js.map +1 -0
  397. package/dist/providers/oauth/token-store.d.ts +53 -0
  398. package/dist/providers/oauth/token-store.d.ts.map +1 -0
  399. package/dist/providers/oauth/token-store.js +78 -0
  400. package/dist/providers/oauth/token-store.js.map +1 -0
  401. package/dist/providers/oauth/types.d.ts +64 -0
  402. package/dist/providers/oauth/types.d.ts.map +1 -0
  403. package/dist/providers/oauth/types.js +12 -0
  404. package/dist/providers/oauth/types.js.map +1 -0
  405. package/dist/providers/object-tracking.d.ts +47 -0
  406. package/dist/providers/object-tracking.d.ts.map +1 -0
  407. package/dist/providers/object-tracking.js +46 -0
  408. package/dist/providers/object-tracking.js.map +1 -0
  409. package/dist/providers/offline-model-index.d.ts +20 -0
  410. package/dist/providers/offline-model-index.d.ts.map +1 -0
  411. package/dist/providers/offline-model-index.js +112 -0
  412. package/dist/providers/offline-model-index.js.map +1 -0
  413. package/dist/providers/ollama-provider.d.ts +28 -1
  414. package/dist/providers/ollama-provider.d.ts.map +1 -1
  415. package/dist/providers/ollama-provider.js +193 -43
  416. package/dist/providers/ollama-provider.js.map +1 -1
  417. package/dist/providers/openai-compat/client.d.ts +57 -0
  418. package/dist/providers/openai-compat/client.d.ts.map +1 -0
  419. package/dist/providers/openai-compat/client.js +157 -0
  420. package/dist/providers/openai-compat/client.js.map +1 -0
  421. package/dist/providers/openai-compat/decode.d.ts +36 -0
  422. package/dist/providers/openai-compat/decode.d.ts.map +1 -0
  423. package/dist/providers/openai-compat/decode.js +55 -0
  424. package/dist/providers/openai-compat/decode.js.map +1 -0
  425. package/dist/providers/openai-compat/errors.d.ts +54 -0
  426. package/dist/providers/openai-compat/errors.d.ts.map +1 -0
  427. package/dist/providers/openai-compat/errors.js +144 -0
  428. package/dist/providers/openai-compat/errors.js.map +1 -0
  429. package/dist/providers/openai-compat/index.d.ts +8 -0
  430. package/dist/providers/openai-compat/index.d.ts.map +1 -0
  431. package/dist/providers/openai-compat/index.js +5 -0
  432. package/dist/providers/openai-compat/index.js.map +1 -0
  433. package/dist/providers/openai-compat/sse.d.ts +14 -0
  434. package/dist/providers/openai-compat/sse.d.ts.map +1 -0
  435. package/dist/providers/openai-compat/sse.js +69 -0
  436. package/dist/providers/openai-compat/sse.js.map +1 -0
  437. package/dist/providers/openai-compat/types.d.ts +75 -0
  438. package/dist/providers/openai-compat/types.d.ts.map +1 -0
  439. package/dist/providers/openai-compat/types.js +9 -0
  440. package/dist/providers/openai-compat/types.js.map +1 -0
  441. package/dist/providers/openai-compat-provider.d.ts +90 -0
  442. package/dist/providers/openai-compat-provider.d.ts.map +1 -0
  443. package/dist/providers/openai-compat-provider.js +282 -0
  444. package/dist/providers/openai-compat-provider.js.map +1 -0
  445. package/dist/providers/openai-provider.d.ts +89 -26
  446. package/dist/providers/openai-provider.d.ts.map +1 -1
  447. package/dist/providers/openai-provider.js +990 -105
  448. package/dist/providers/openai-provider.js.map +1 -1
  449. package/dist/providers/openrouter-provider.d.ts +6 -12
  450. package/dist/providers/openrouter-provider.d.ts.map +1 -1
  451. package/dist/providers/openrouter-provider.js +24 -53
  452. package/dist/providers/openrouter-provider.js.map +1 -1
  453. package/dist/providers/provider-call-failure.d.ts +39 -0
  454. package/dist/providers/provider-call-failure.d.ts.map +1 -0
  455. package/dist/providers/provider-call-failure.js +132 -0
  456. package/dist/providers/provider-call-failure.js.map +1 -0
  457. package/dist/providers/provider-error.d.ts +59 -0
  458. package/dist/providers/provider-error.d.ts.map +1 -0
  459. package/dist/providers/provider-error.js +165 -0
  460. package/dist/providers/provider-error.js.map +1 -0
  461. package/dist/providers/provider-generations.d.ts +99 -0
  462. package/dist/providers/provider-generations.d.ts.map +1 -0
  463. package/dist/providers/provider-generations.js +71 -0
  464. package/dist/providers/provider-generations.js.map +1 -0
  465. package/dist/providers/provider-queue.d.ts +62 -0
  466. package/dist/providers/provider-queue.d.ts.map +1 -0
  467. package/dist/providers/provider-queue.js +28 -0
  468. package/dist/providers/provider-queue.js.map +1 -0
  469. package/dist/providers/provider-registry.d.ts +33 -14
  470. package/dist/providers/provider-registry.d.ts.map +1 -1
  471. package/dist/providers/provider-registry.js +85 -68
  472. package/dist/providers/provider-registry.js.map +1 -1
  473. package/dist/providers/provider-request-log.d.ts +53 -0
  474. package/dist/providers/provider-request-log.d.ts.map +1 -0
  475. package/dist/providers/provider-request-log.js +157 -0
  476. package/dist/providers/provider-request-log.js.map +1 -0
  477. package/dist/providers/provider-session.d.ts +3 -0
  478. package/dist/providers/provider-session.d.ts.map +1 -0
  479. package/dist/providers/provider-session.js +10 -0
  480. package/dist/providers/provider-session.js.map +1 -0
  481. package/dist/providers/provider-transport.d.ts +11 -0
  482. package/dist/providers/provider-transport.d.ts.map +1 -0
  483. package/dist/providers/provider-transport.js +11 -0
  484. package/dist/providers/provider-transport.js.map +1 -0
  485. package/dist/providers/python-provider.d.ts +20 -12
  486. package/dist/providers/python-provider.d.ts.map +1 -1
  487. package/dist/providers/python-provider.js +185 -25
  488. package/dist/providers/python-provider.js.map +1 -1
  489. package/dist/providers/replicate-provider.d.ts +89 -7
  490. package/dist/providers/replicate-provider.d.ts.map +1 -1
  491. package/dist/providers/replicate-provider.js +801 -65
  492. package/dist/providers/replicate-provider.js.map +1 -1
  493. package/dist/providers/replicate-retry.d.ts +30 -0
  494. package/dist/providers/replicate-retry.d.ts.map +1 -0
  495. package/dist/providers/replicate-retry.js +97 -0
  496. package/dist/providers/replicate-retry.js.map +1 -0
  497. package/dist/providers/responses-api.d.ts +27 -0
  498. package/dist/providers/responses-api.d.ts.map +1 -0
  499. package/dist/providers/responses-api.js +297 -0
  500. package/dist/providers/responses-api.js.map +1 -0
  501. package/dist/providers/reve-provider.d.ts +45 -0
  502. package/dist/providers/reve-provider.d.ts.map +1 -0
  503. package/dist/providers/reve-provider.js +159 -0
  504. package/dist/providers/reve-provider.js.map +1 -0
  505. package/dist/providers/rodin-provider.d.ts +23 -1
  506. package/dist/providers/rodin-provider.d.ts.map +1 -1
  507. package/dist/providers/rodin-provider.js +89 -51
  508. package/dist/providers/rodin-provider.js.map +1 -1
  509. package/dist/providers/safe-url.d.ts +70 -0
  510. package/dist/providers/safe-url.d.ts.map +1 -0
  511. package/dist/providers/safe-url.js +277 -0
  512. package/dist/providers/safe-url.js.map +1 -0
  513. package/dist/providers/scripted-provider.d.ts +9 -0
  514. package/dist/providers/scripted-provider.d.ts.map +1 -1
  515. package/dist/providers/scripted-provider.js +86 -10
  516. package/dist/providers/scripted-provider.js.map +1 -1
  517. package/dist/providers/structured-output.d.ts +42 -0
  518. package/dist/providers/structured-output.d.ts.map +1 -0
  519. package/dist/providers/structured-output.js +83 -0
  520. package/dist/providers/structured-output.js.map +1 -0
  521. package/dist/providers/together-provider.d.ts +19 -16
  522. package/dist/providers/together-provider.d.ts.map +1 -1
  523. package/dist/providers/together-provider.js +103 -225
  524. package/dist/providers/together-provider.js.map +1 -1
  525. package/dist/providers/topaz-provider.d.ts +44 -0
  526. package/dist/providers/topaz-provider.d.ts.map +1 -0
  527. package/dist/providers/topaz-provider.js +239 -0
  528. package/dist/providers/topaz-provider.js.map +1 -0
  529. package/dist/providers/types.d.ts +603 -4
  530. package/dist/providers/types.d.ts.map +1 -1
  531. package/dist/providers/types.js +81 -1
  532. package/dist/providers/types.js.map +1 -1
  533. package/dist/providers/useapi-provider.d.ts +27 -0
  534. package/dist/providers/useapi-provider.d.ts.map +1 -0
  535. package/dist/providers/useapi-provider.js +266 -0
  536. package/dist/providers/useapi-provider.js.map +1 -0
  537. package/dist/providers/video-duration.d.ts +6 -0
  538. package/dist/providers/video-duration.d.ts.map +1 -0
  539. package/dist/providers/video-duration.js +63 -0
  540. package/dist/providers/video-duration.js.map +1 -0
  541. package/dist/providers/video-frame-fallback.d.ts +39 -0
  542. package/dist/providers/video-frame-fallback.d.ts.map +1 -0
  543. package/dist/providers/video-frame-fallback.js +155 -0
  544. package/dist/providers/video-frame-fallback.js.map +1 -0
  545. package/dist/providers/video-frames.d.ts +61 -0
  546. package/dist/providers/video-frames.d.ts.map +1 -0
  547. package/dist/providers/video-frames.js +208 -0
  548. package/dist/providers/video-frames.js.map +1 -0
  549. package/dist/providers/video-mime.d.ts +14 -0
  550. package/dist/providers/video-mime.d.ts.map +1 -0
  551. package/dist/providers/video-mime.js +44 -0
  552. package/dist/providers/video-mime.js.map +1 -0
  553. package/dist/providers/video-to-audio.d.ts +34 -0
  554. package/dist/providers/video-to-audio.d.ts.map +1 -0
  555. package/dist/providers/video-to-audio.js +62 -0
  556. package/dist/providers/video-to-audio.js.map +1 -0
  557. package/dist/providers/vllm-provider.d.ts +22 -8
  558. package/dist/providers/vllm-provider.d.ts.map +1 -1
  559. package/dist/providers/vllm-provider.js +48 -23
  560. package/dist/providers/vllm-provider.js.map +1 -1
  561. package/dist/providers/voyage-provider.d.ts +10 -2
  562. package/dist/providers/voyage-provider.d.ts.map +1 -1
  563. package/dist/providers/voyage-provider.js +16 -7
  564. package/dist/providers/voyage-provider.js.map +1 -1
  565. package/dist/providers/xai-provider.d.ts +54 -13
  566. package/dist/providers/xai-provider.d.ts.map +1 -1
  567. package/dist/providers/xai-provider.js +299 -22
  568. package/dist/providers/xai-provider.js.map +1 -1
  569. package/dist/python-bridge-base.d.ts +358 -0
  570. package/dist/python-bridge-base.d.ts.map +1 -0
  571. package/dist/python-bridge-base.js +1557 -0
  572. package/dist/python-bridge-base.js.map +1 -0
  573. package/dist/python-bridge-codec.d.ts +28 -0
  574. package/dist/python-bridge-codec.d.ts.map +1 -0
  575. package/dist/python-bridge-codec.js +39 -0
  576. package/dist/python-bridge-codec.js.map +1 -0
  577. package/dist/python-bridge-factory.d.ts +52 -0
  578. package/dist/python-bridge-factory.d.ts.map +1 -0
  579. package/dist/python-bridge-factory.js +69 -0
  580. package/dist/python-bridge-factory.js.map +1 -0
  581. package/dist/python-bridge-framing.d.ts +68 -0
  582. package/dist/python-bridge-framing.d.ts.map +1 -0
  583. package/dist/python-bridge-framing.js +91 -0
  584. package/dist/python-bridge-framing.js.map +1 -0
  585. package/dist/python-bridge-types.d.ts +545 -2
  586. package/dist/python-bridge-types.d.ts.map +1 -1
  587. package/dist/python-bridge-types.js +49 -1
  588. package/dist/python-bridge-types.js.map +1 -1
  589. package/dist/python-graph-resolver.d.ts +57 -0
  590. package/dist/python-graph-resolver.d.ts.map +1 -0
  591. package/dist/python-graph-resolver.js +79 -0
  592. package/dist/python-graph-resolver.js.map +1 -0
  593. package/dist/python-node-executor.d.ts +36 -4
  594. package/dist/python-node-executor.d.ts.map +1 -1
  595. package/dist/python-node-executor.js +177 -86
  596. package/dist/python-node-executor.js.map +1 -1
  597. package/dist/python-stdio-bridge.d.ts +18 -37
  598. package/dist/python-stdio-bridge.d.ts.map +1 -1
  599. package/dist/python-stdio-bridge.js +148 -475
  600. package/dist/python-stdio-bridge.js.map +1 -1
  601. package/dist/python-websocket-bridge.d.ts +140 -0
  602. package/dist/python-websocket-bridge.d.ts.map +1 -0
  603. package/dist/python-websocket-bridge.js +561 -0
  604. package/dist/python-websocket-bridge.js.map +1 -0
  605. package/dist/python-worker-stderr.d.ts +4 -0
  606. package/dist/python-worker-stderr.d.ts.map +1 -0
  607. package/dist/python-worker-stderr.js +24 -0
  608. package/dist/python-worker-stderr.js.map +1 -0
  609. package/dist/recommended-models.d.ts +2 -2
  610. package/dist/recommended-models.d.ts.map +1 -1
  611. package/dist/recommended-models.js +24 -4
  612. package/dist/recommended-models.js.map +1 -1
  613. package/dist/recoverable-node-error.d.ts +31 -0
  614. package/dist/recoverable-node-error.d.ts.map +1 -0
  615. package/dist/recoverable-node-error.js +37 -0
  616. package/dist/recoverable-node-error.js.map +1 -0
  617. package/dist/redact-params.d.ts +13 -0
  618. package/dist/redact-params.d.ts.map +1 -0
  619. package/dist/redact-params.js +57 -0
  620. package/dist/redact-params.js.map +1 -0
  621. package/dist/sandbox-module-catalog.d.ts +43 -0
  622. package/dist/sandbox-module-catalog.d.ts.map +1 -0
  623. package/dist/sandbox-module-catalog.js +25 -0
  624. package/dist/sandbox-module-catalog.js.map +1 -0
  625. package/dist/storage-workspace.d.ts +59 -0
  626. package/dist/storage-workspace.d.ts.map +1 -0
  627. package/dist/storage-workspace.js +426 -0
  628. package/dist/storage-workspace.js.map +1 -0
  629. package/dist/swappable-python-bridge.d.ts +83 -0
  630. package/dist/swappable-python-bridge.d.ts.map +1 -0
  631. package/dist/swappable-python-bridge.js +246 -0
  632. package/dist/swappable-python-bridge.js.map +1 -0
  633. package/dist/telemetry.d.ts +7 -0
  634. package/dist/telemetry.d.ts.map +1 -1
  635. package/dist/telemetry.js +23 -0
  636. package/dist/telemetry.js.map +1 -1
  637. package/dist/testing.d.ts +81 -0
  638. package/dist/testing.d.ts.map +1 -0
  639. package/dist/testing.js +130 -0
  640. package/dist/testing.js.map +1 -0
  641. package/dist/token-counter.d.ts +30 -0
  642. package/dist/token-counter.d.ts.map +1 -0
  643. package/dist/token-counter.js +156 -0
  644. package/dist/token-counter.js.map +1 -0
  645. package/dist/trace-exporters.d.ts +10 -0
  646. package/dist/trace-exporters.d.ts.map +1 -1
  647. package/dist/trace-exporters.js +59 -20
  648. package/dist/trace-exporters.js.map +1 -1
  649. package/dist/tracing-helpers.d.ts +45 -4
  650. package/dist/tracing-helpers.d.ts.map +1 -1
  651. package/dist/tracing-helpers.js +62 -19
  652. package/dist/tracing-helpers.js.map +1 -1
  653. package/dist/turn-budget.d.ts +278 -0
  654. package/dist/turn-budget.d.ts.map +1 -0
  655. package/dist/turn-budget.js +365 -0
  656. package/dist/turn-budget.js.map +1 -0
  657. package/dist/variable-channel.d.ts +48 -0
  658. package/dist/variable-channel.d.ts.map +1 -0
  659. package/dist/variable-channel.js +110 -0
  660. package/dist/variable-channel.js.map +1 -0
  661. package/dist/workspace.d.ts +119 -0
  662. package/dist/workspace.d.ts.map +1 -0
  663. package/dist/workspace.js +112 -0
  664. package/dist/workspace.js.map +1 -0
  665. package/package.json +107 -19
@@ -0,0 +1,157 @@
1
+ import { sseEvents } from "./sse.js";
2
+ import { OpenAICompatError, errorFromOkBody, errorFromResponse, errorFromStreamEvent } from "./errors.js";
3
+ import { isObjectLike } from "@nodetool-ai/protocol";
4
+ const RETRYABLE_STATUS = new Set([408, 409, 429]);
5
+ const DEFAULT_MAX_RETRIES = 2;
6
+ const DEFAULT_TIMEOUT_MS = 600_000;
7
+ export function trimTrailingSlashes(url) {
8
+ // A loop, not `replace(/\/+$/,"")` — the regex backtracks polynomially on
9
+ // adversarial input.
10
+ let end = url.length;
11
+ while (end > 0 && url[end - 1] === "/")
12
+ end -= 1;
13
+ return url.slice(0, end);
14
+ }
15
+ function isRetryableStatus(status) {
16
+ return RETRYABLE_STATUS.has(status) || status >= 500;
17
+ }
18
+ /** `Retry-After` seconds when present and sane (0–60s), else null. */
19
+ function retryAfterMs(response) {
20
+ const header = response.headers.get("retry-after");
21
+ if (!header)
22
+ return null;
23
+ const seconds = Number(header);
24
+ if (Number.isFinite(seconds) && seconds >= 0 && seconds <= 60) {
25
+ return seconds * 1000;
26
+ }
27
+ const dateMs = Date.parse(header);
28
+ if (!Number.isNaN(dateMs)) {
29
+ const delta = dateMs - Date.now();
30
+ if (delta > 0 && delta <= 60_000)
31
+ return delta;
32
+ }
33
+ return null;
34
+ }
35
+ function sleep(ms) {
36
+ return new Promise((resolve) => setTimeout(resolve, ms));
37
+ }
38
+ function backoffMs(attempt) {
39
+ const base = Math.min(500 * 2 ** attempt, 8000);
40
+ return base * (0.75 + Math.random() * 0.5);
41
+ }
42
+ /**
43
+ * Minimal typed client for OpenAI-compatible `/chat/completions` endpoints,
44
+ * built on `fetch`. Replaces the `openai` npm package for providers that only
45
+ * ever used it as a generic HTTP client (Groq, Cerebras, xAI, Mistral, …).
46
+ */
47
+ export class OpenAICompatClient {
48
+ baseURL;
49
+ _apiKey;
50
+ _defaultHeaders;
51
+ _fetch;
52
+ _maxRetries;
53
+ _timeoutMs;
54
+ constructor(options) {
55
+ this.baseURL = trimTrailingSlashes(options.baseURL);
56
+ this._apiKey = options.apiKey;
57
+ this._defaultHeaders = options.defaultHeaders ?? {};
58
+ this._fetch = options.fetchFn ?? globalThis.fetch.bind(globalThis);
59
+ this._maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
60
+ this._timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
61
+ }
62
+ headers(streaming) {
63
+ return {
64
+ Authorization: `Bearer ${this._apiKey}`,
65
+ "Content-Type": "application/json",
66
+ Accept: streaming ? "text/event-stream" : "application/json",
67
+ ...this._defaultHeaders
68
+ };
69
+ }
70
+ /**
71
+ * POST with retries. Retries fire only before any body is consumed, so both
72
+ * the non-streaming call and the streaming connection setup are covered.
73
+ * Non-2xx responses (after retries) surface as {@link OpenAICompatError}.
74
+ */
75
+ async post(path, body, streaming, options) {
76
+ const url = `${this.baseURL}${path}`;
77
+ const payload = JSON.stringify(body);
78
+ for (let attempt = 0;; attempt++) {
79
+ options.signal?.throwIfAborted();
80
+ const timeout = AbortSignal.timeout(this._timeoutMs);
81
+ const signal = options.signal
82
+ ? AbortSignal.any([options.signal, timeout])
83
+ : timeout;
84
+ let response;
85
+ try {
86
+ response = await this._fetch(url, {
87
+ method: "POST",
88
+ headers: this.headers(streaming),
89
+ body: payload,
90
+ signal
91
+ });
92
+ }
93
+ catch (error) {
94
+ // Abort by the caller is never retried; network errors and timeouts are.
95
+ if (options.signal?.aborted)
96
+ throw error;
97
+ if (attempt >= this._maxRetries)
98
+ throw error;
99
+ await sleep(backoffMs(attempt));
100
+ continue;
101
+ }
102
+ if (response.ok)
103
+ return response;
104
+ const detail = await response.text().catch(() => "");
105
+ if (attempt < this._maxRetries && isRetryableStatus(response.status)) {
106
+ await sleep(retryAfterMs(response) ?? backoffMs(attempt));
107
+ continue;
108
+ }
109
+ throw errorFromResponse(response.status, detail);
110
+ }
111
+ }
112
+ /**
113
+ * Non-streaming chat completion.
114
+ *
115
+ * A 200 is not proof of success: a gateway that routes to an upstream
116
+ * provider answers 200 and reports a later failure inside the body, so the
117
+ * body is checked for an `error` before it is handed back as a completion.
118
+ */
119
+ async chatCompletions(request, options = {}) {
120
+ const response = await this.post("/chat/completions", { ...request, stream: false }, false, options);
121
+ const body = await response.json();
122
+ const error = errorFromOkBody(body);
123
+ if (error)
124
+ throw error;
125
+ return body;
126
+ }
127
+ /**
128
+ * Streaming chat completion. Yields parsed SSE chunks until the `[DONE]`
129
+ * sentinel (or end of stream). Mid-stream `{"error": …}` events throw an
130
+ * {@link OpenAICompatError}.
131
+ */
132
+ async *chatCompletionsStream(request, options = {}) {
133
+ const response = await this.post("/chat/completions", { ...request, stream: true }, true, options);
134
+ if (!response.body) {
135
+ throw new OpenAICompatError(response.status, "streaming response has no body");
136
+ }
137
+ for await (const data of sseEvents(response.body)) {
138
+ if (data === "[DONE]")
139
+ return;
140
+ let parsed;
141
+ try {
142
+ parsed = JSON.parse(data);
143
+ }
144
+ catch {
145
+ throw new OpenAICompatError(undefined, `could not parse stream event as JSON: ${data.slice(0, 200)}`);
146
+ }
147
+ if (!isObjectLike(parsed))
148
+ continue;
149
+ const event = parsed;
150
+ const error = errorFromStreamEvent(event);
151
+ if (error)
152
+ throw error;
153
+ yield event;
154
+ }
155
+ }
156
+ }
157
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/openai-compat/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Response decoding for the OpenAI Chat Completions dialect.
3
+ *
4
+ * Split out of {@link OpenAICompatProvider} so one function owns the step from
5
+ * a raw `POST /chat/completions` body to the fields NodeTool reads. The live
6
+ * contract probe and the checked-in raw-response fixtures
7
+ * (`packages/runtime/tests/fixtures/provider-contract/`) run this same
8
+ * function, so a wire change shows up here rather than in a provider method no
9
+ * test can reach without a network call.
10
+ */
11
+ import type { ChatCompletionUsage } from "./types.js";
12
+ /** One tool call as it arrives on the wire, before NodeTool normalizes it. */
13
+ export interface DecodedToolCall {
14
+ id: string;
15
+ name: string;
16
+ /** Raw JSON argument string; absent when the gateway omitted it. */
17
+ arguments?: string;
18
+ }
19
+ export interface DecodedChatCompletion {
20
+ content: string | null;
21
+ /** Undefined when the response carried no `tool_calls` field at all. */
22
+ toolCalls: DecodedToolCall[] | undefined;
23
+ finishReason: string | null;
24
+ usage: {
25
+ inputTokens: number;
26
+ outputTokens: number;
27
+ cachedTokens: number;
28
+ } | null;
29
+ }
30
+ export declare function decodeChatCompletionUsage(usage: ChatCompletionUsage | null | undefined): DecodedChatCompletion["usage"];
31
+ /**
32
+ * Decode a non-streaming chat completion body. Throws when the envelope
33
+ * carries no choice — the one shape the caller cannot turn into a message.
34
+ */
35
+ export declare function decodeChatCompletion(body: unknown): DecodedChatCompletion;
36
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../src/providers/openai-compat/decode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,wEAAwE;IACxE,SAAS,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACnF;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAC5C,qBAAqB,CAAC,OAAO,CAAC,CAOhC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,qBAAqB,CA8BzE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Response decoding for the OpenAI Chat Completions dialect.
3
+ *
4
+ * Split out of {@link OpenAICompatProvider} so one function owns the step from
5
+ * a raw `POST /chat/completions` body to the fields NodeTool reads. The live
6
+ * contract probe and the checked-in raw-response fixtures
7
+ * (`packages/runtime/tests/fixtures/provider-contract/`) run this same
8
+ * function, so a wire change shows up here rather than in a provider method no
9
+ * test can reach without a network call.
10
+ */
11
+ import { isObjectLike } from "@nodetool-ai/protocol";
12
+ export function decodeChatCompletionUsage(usage) {
13
+ if (!usage)
14
+ return null;
15
+ return {
16
+ inputTokens: usage.prompt_tokens ?? 0,
17
+ outputTokens: usage.completion_tokens ?? 0,
18
+ cachedTokens: usage.prompt_tokens_details?.cached_tokens ?? 0
19
+ };
20
+ }
21
+ /**
22
+ * Decode a non-streaming chat completion body. Throws when the envelope
23
+ * carries no choice — the one shape the caller cannot turn into a message.
24
+ */
25
+ export function decodeChatCompletion(body) {
26
+ if (!isObjectLike(body)) {
27
+ throw new Error("chat completion response is not an object");
28
+ }
29
+ const completion = body;
30
+ const choice = completion.choices?.[0];
31
+ if (!choice) {
32
+ throw new Error("chat completion response has no choices");
33
+ }
34
+ const message = choice.message;
35
+ // Keep function calls, and entries with no `type` at all — some gateways
36
+ // omit it (the wire type marks `type` optional). The streaming path
37
+ // likewise accepts every tool-call delta. Only drop entries that explicitly
38
+ // declare a non-function type.
39
+ const toolCalls = !Array.isArray(message?.tool_calls)
40
+ ? undefined
41
+ : message.tool_calls
42
+ .filter((tc) => tc.type === "function" || tc.type === undefined)
43
+ .map((tc) => ({
44
+ id: String(tc.id ?? ""),
45
+ name: String(tc.function?.name ?? ""),
46
+ arguments: tc.function?.arguments ?? undefined
47
+ }));
48
+ return {
49
+ content: message?.content ?? null,
50
+ toolCalls,
51
+ finishReason: choice.finish_reason ?? null,
52
+ usage: decodeChatCompletionUsage(completion.usage)
53
+ };
54
+ }
55
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/providers/openai-compat/decode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAsBrD,MAAM,UAAU,yBAAyB,CACvC,KAA6C;IAE7C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;QACrC,YAAY,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;QAC1C,YAAY,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,IAAI,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,UAAU,GAAG,IAA8B,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,yEAAyE;IACzE,oEAAoE;IACpE,4EAA4E;IAC5E,+BAA+B;IAC/B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACnD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,UAAU;aACf,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;aAC/D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACZ,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;YACrC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,SAAS;SAC/C,CAAC,CAAC,CAAC;IAEV,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,SAAS;QACT,YAAY,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;QAC1C,KAAK,EAAE,yBAAyB,CAAC,UAAU,CAAC,KAAK,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ export declare class OpenAICompatError extends Error {
2
+ /** HTTP status; `undefined` for mid-stream error events with no status. */
3
+ readonly status: number | undefined;
4
+ readonly code: string | null;
5
+ readonly type: string | null;
6
+ readonly param: string | null;
7
+ /** The parsed error body (or raw text when not JSON). */
8
+ readonly body: unknown;
9
+ constructor(status: number | undefined, message: string, details?: {
10
+ code?: string | null;
11
+ type?: string | null;
12
+ param?: string | null;
13
+ body?: unknown;
14
+ });
15
+ }
16
+ interface ParsedErrorBody {
17
+ message: string;
18
+ code: string | null;
19
+ type: string | null;
20
+ param: string | null;
21
+ body: unknown;
22
+ }
23
+ /**
24
+ * Extract the human-readable message (and code/type/param) from an
25
+ * OpenAI-style error payload: `{"error": {"message": …, "code": …}}`, a
26
+ * top-level `{"message": …}`, or plain text.
27
+ */
28
+ export declare function parseErrorBody(text: string): ParsedErrorBody;
29
+ /** Map a non-2xx HTTP response body to an {@link OpenAICompatError}. */
30
+ export declare function errorFromResponse(status: number, bodyText: string): OpenAICompatError;
31
+ /**
32
+ * Map a mid-stream SSE error event to an {@link OpenAICompatError}. Returns
33
+ * `null` when the event is not an error.
34
+ *
35
+ * The error rides at the top level (`{"error": {...}}`) or inside the first
36
+ * choice — OpenRouter reports a failure that happens after the stream opened
37
+ * as a `finish_reason: "error"` choice, because the 200 status is already on
38
+ * the wire by then.
39
+ */
40
+ export declare function errorFromStreamEvent(event: Record<string, unknown>): OpenAICompatError | null;
41
+ /**
42
+ * Map an error carried by a *successful* (HTTP 200) chat-completion body to an
43
+ * {@link OpenAICompatError}. Returns `null` for an ordinary completion.
44
+ *
45
+ * A gateway that has already committed a 200 cannot report a later failure in
46
+ * the status, so it reports it in the body instead — OpenRouter's API
47
+ * reference says to check the body for an `error` field even on a 200 rather
48
+ * than relying on the status alone. Without this the body reaches
49
+ * {@link decodeChatCompletion}, which sees no `choices` and answers "no
50
+ * choices" — a diagnosis that names neither the endpoint nor the reason.
51
+ */
52
+ export declare function errorFromOkBody(body: unknown): OpenAICompatError | null;
53
+ export {};
54
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/providers/openai-compat/errors.ts"],"names":[],"mappings":"AAUA,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB,YACE,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;KACX,EASP;CACF;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAUD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAuB5D;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAGnB;AAsDD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,iBAAiB,GAAG,IAAI,CAK1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Typed error for OpenAI-compatible HTTP endpoints.
3
+ *
4
+ * The message deliberately mirrors the `openai` SDK's `APIError` format —
5
+ * `"<status> <upstream message>"` — because callers classify failures by
6
+ * matching on `String(error)` (BaseProvider.isRateLimitError looks for `429` /
7
+ * "rate limit", isContextLengthError for "context length", …).
8
+ */
9
+ import { isNumber, isString } from "@nodetool-ai/protocol";
10
+ export class OpenAICompatError extends Error {
11
+ /** HTTP status; `undefined` for mid-stream error events with no status. */
12
+ status;
13
+ code;
14
+ type;
15
+ param;
16
+ /** The parsed error body (or raw text when not JSON). */
17
+ body;
18
+ constructor(status, message, details = {}) {
19
+ super(status === undefined ? message : `${status} ${message}`);
20
+ this.name = "OpenAICompatError";
21
+ this.status = status;
22
+ this.code = details.code ?? null;
23
+ this.type = details.type ?? null;
24
+ this.param = details.param ?? null;
25
+ this.body = details.body;
26
+ }
27
+ }
28
+ function isRecord(value) {
29
+ return typeof value === "object" && value !== null && !Array.isArray(value);
30
+ }
31
+ function stringOrNull(value) {
32
+ return isString(value) ? value : null;
33
+ }
34
+ /**
35
+ * Extract the human-readable message (and code/type/param) from an
36
+ * OpenAI-style error payload: `{"error": {"message": …, "code": …}}`, a
37
+ * top-level `{"message": …}`, or plain text.
38
+ */
39
+ export function parseErrorBody(text) {
40
+ let parsed;
41
+ try {
42
+ parsed = JSON.parse(text);
43
+ }
44
+ catch {
45
+ return { message: text, code: null, type: null, param: null, body: text };
46
+ }
47
+ const root = isRecord(parsed) ? parsed : {};
48
+ const err = isRecord(root.error) ? root.error : root;
49
+ const message = stringOrNull(err.message) ??
50
+ (isString(root.error) ? root.error : null) ??
51
+ text;
52
+ return {
53
+ message,
54
+ code: stringOrNull(err.code) ?? (isNumber(err.code) ? String(err.code) : null),
55
+ type: stringOrNull(err.type),
56
+ param: stringOrNull(err.param),
57
+ body: parsed
58
+ };
59
+ }
60
+ /** Map a non-2xx HTTP response body to an {@link OpenAICompatError}. */
61
+ export function errorFromResponse(status, bodyText) {
62
+ const parsed = parseErrorBody(bodyText);
63
+ return new OpenAICompatError(status, parsed.message, parsed);
64
+ }
65
+ /**
66
+ * Map one `error` value — wherever it sat in the payload — to an
67
+ * {@link OpenAICompatError}. `payload` is the whole body or event, kept for
68
+ * the error's `body` so a caller logging the failure sees what arrived.
69
+ * Returns `null` when `err` is absent or not an error shape.
70
+ */
71
+ function errorFromErrorValue(err, payload, fallbackMessage) {
72
+ if (err === undefined || err === null)
73
+ return null;
74
+ if (isString(err)) {
75
+ return new OpenAICompatError(undefined, err, { body: payload });
76
+ }
77
+ if (!isRecord(err))
78
+ return null;
79
+ const message = stringOrNull(err.message) ?? fallbackMessage;
80
+ // A numeric `code` is the HTTP status on a gateway that reports the failure
81
+ // in a 200 body (OpenRouter mirrors the status there). Taking it as the
82
+ // status is what keeps `BaseProvider.isRateLimitError` — which matches on
83
+ // `String(error)` — working for a 429 that never reached the status line.
84
+ const codeStatus = isNumber(err.code) && err.code >= 100 && err.code <= 599
85
+ ? err.code
86
+ : undefined;
87
+ const status = isNumber(err.status)
88
+ ? err.status
89
+ : isNumber(err.http_status)
90
+ ? err.http_status
91
+ : codeStatus;
92
+ return new OpenAICompatError(status, message, {
93
+ code: stringOrNull(err.code) ?? (isNumber(err.code) ? String(err.code) : null),
94
+ type: stringOrNull(err.type),
95
+ param: stringOrNull(err.param),
96
+ body: payload
97
+ });
98
+ }
99
+ /** The `error` carried by the payload's first choice, if any. */
100
+ function choiceError(payload) {
101
+ const choices = payload.choices;
102
+ if (!Array.isArray(choices))
103
+ return undefined;
104
+ const choice = choices[0];
105
+ if (!isRecord(choice))
106
+ return undefined;
107
+ // Streaming puts it on the delta on some gateways, non-streaming on the
108
+ // choice itself; the choice's own field wins when both are present.
109
+ if (choice.error !== undefined && choice.error !== null)
110
+ return choice.error;
111
+ const delta = choice.delta;
112
+ return isRecord(delta) ? delta.error : undefined;
113
+ }
114
+ /**
115
+ * Map a mid-stream SSE error event to an {@link OpenAICompatError}. Returns
116
+ * `null` when the event is not an error.
117
+ *
118
+ * The error rides at the top level (`{"error": {...}}`) or inside the first
119
+ * choice — OpenRouter reports a failure that happens after the stream opened
120
+ * as a `finish_reason: "error"` choice, because the 200 status is already on
121
+ * the wire by then.
122
+ */
123
+ export function errorFromStreamEvent(event) {
124
+ return (errorFromErrorValue(event.error, event, "stream error") ??
125
+ errorFromErrorValue(choiceError(event), event, "stream error"));
126
+ }
127
+ /**
128
+ * Map an error carried by a *successful* (HTTP 200) chat-completion body to an
129
+ * {@link OpenAICompatError}. Returns `null` for an ordinary completion.
130
+ *
131
+ * A gateway that has already committed a 200 cannot report a later failure in
132
+ * the status, so it reports it in the body instead — OpenRouter's API
133
+ * reference says to check the body for an `error` field even on a 200 rather
134
+ * than relying on the status alone. Without this the body reaches
135
+ * {@link decodeChatCompletion}, which sees no `choices` and answers "no
136
+ * choices" — a diagnosis that names neither the endpoint nor the reason.
137
+ */
138
+ export function errorFromOkBody(body) {
139
+ if (!isRecord(body))
140
+ return null;
141
+ return (errorFromErrorValue(body.error, body, "chat completion failed") ??
142
+ errorFromErrorValue(choiceError(body), body, "chat completion failed"));
143
+ }
144
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/providers/openai-compat/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { OpenAICompatClient, trimTrailingSlashes } from "./client.js";
2
+ export type { OpenAICompatClientOptions, RequestOptions } from "./client.js";
3
+ export { OpenAICompatError, errorFromOkBody, errorFromResponse, errorFromStreamEvent, parseErrorBody } from "./errors.js";
4
+ export { sseEvents } from "./sse.js";
5
+ export { decodeChatCompletion, decodeChatCompletionUsage } from "./decode.js";
6
+ export type { DecodedChatCompletion, DecodedToolCall } from "./decode.js";
7
+ export type { ChatCompletionsRequest, ChatCompletionResponse, ChatCompletionChunk, ChatCompletionChunkChoice, ChatCompletionChunkDelta, ChatCompletionChunkDeltaToolCall, ChatCompletionChoice, ChatCompletionAssistantMessage, ChatCompletionMessageToolCall, ChatCompletionToolCallFunction, ChatCompletionUsage } from "./types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openai-compat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EACV,yBAAyB,EACzB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,qBAAqB,EACrB,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,mBAAmB,EACpB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { OpenAICompatClient, trimTrailingSlashes } from "./client.js";
2
+ export { OpenAICompatError, errorFromOkBody, errorFromResponse, errorFromStreamEvent, parseErrorBody } from "./errors.js";
3
+ export { sseEvents } from "./sse.js";
4
+ export { decodeChatCompletion, decodeChatCompletionUsage } from "./decode.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/openai-compat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKtE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Minimal Server-Sent Events parser for OpenAI-style streaming responses.
3
+ *
4
+ * Yields the joined `data:` payload of each event. Handles the parts of the
5
+ * SSE spec that OpenAI-compatible gateways actually exercise:
6
+ * - events separated by blank lines, with LF or CRLF line endings
7
+ * - events and lines split across arbitrary network-chunk boundaries
8
+ * - multiple `data:` lines per event (joined with `\n`)
9
+ * - comment lines (`:`) and non-data fields (`event:`, `id:`, …) are ignored
10
+ * - a final unterminated event is flushed at end-of-stream (some gateways
11
+ * close the connection right after `data: [DONE]` without a blank line)
12
+ */
13
+ export declare function sseEvents(body: ReadableStream<Uint8Array>): AsyncGenerator<string, void, undefined>;
14
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/providers/openai-compat/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAuB,SAAS,CAC9B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAC/B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAsDzC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Minimal Server-Sent Events parser for OpenAI-style streaming responses.
3
+ *
4
+ * Yields the joined `data:` payload of each event. Handles the parts of the
5
+ * SSE spec that OpenAI-compatible gateways actually exercise:
6
+ * - events separated by blank lines, with LF or CRLF line endings
7
+ * - events and lines split across arbitrary network-chunk boundaries
8
+ * - multiple `data:` lines per event (joined with `\n`)
9
+ * - comment lines (`:`) and non-data fields (`event:`, `id:`, …) are ignored
10
+ * - a final unterminated event is flushed at end-of-stream (some gateways
11
+ * close the connection right after `data: [DONE]` without a blank line)
12
+ */
13
+ export async function* sseEvents(body) {
14
+ const reader = body.getReader();
15
+ const decoder = new TextDecoder("utf-8");
16
+ let buffer = "";
17
+ let dataLines = [];
18
+ const takeEvent = () => {
19
+ if (dataLines.length === 0)
20
+ return null;
21
+ const event = dataLines.join("\n");
22
+ dataLines = [];
23
+ return event;
24
+ };
25
+ const consumeLine = (rawLine) => {
26
+ const line = rawLine.endsWith("\r") ? rawLine.slice(0, -1) : rawLine;
27
+ if (line === "") {
28
+ return takeEvent();
29
+ }
30
+ if (line.startsWith("data:")) {
31
+ const value = line.slice(5);
32
+ dataLines.push(value.startsWith(" ") ? value.slice(1) : value);
33
+ }
34
+ // Comments (":…") and other fields ("event:", "id:", "retry:") are ignored.
35
+ return null;
36
+ };
37
+ try {
38
+ for (;;) {
39
+ const { value, done } = await reader.read();
40
+ if (done)
41
+ break;
42
+ buffer += decoder.decode(value, { stream: true });
43
+ let newlineAt;
44
+ while ((newlineAt = buffer.indexOf("\n")) !== -1) {
45
+ const line = buffer.slice(0, newlineAt);
46
+ buffer = buffer.slice(newlineAt + 1);
47
+ const event = consumeLine(line);
48
+ if (event !== null)
49
+ yield event;
50
+ }
51
+ }
52
+ // Flush any decoder-buffered bytes and a trailing line without newline.
53
+ buffer += decoder.decode();
54
+ if (buffer !== "") {
55
+ const event = consumeLine(buffer);
56
+ if (event !== null)
57
+ yield event;
58
+ }
59
+ const trailing = takeEvent();
60
+ if (trailing !== null)
61
+ yield trailing;
62
+ }
63
+ finally {
64
+ // Stop the underlying connection if the consumer bails early.
65
+ await reader.cancel().catch(() => undefined);
66
+ reader.releaseLock();
67
+ }
68
+ }
69
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/providers/openai-compat/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAC9B,IAAgC;IAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,MAAM,SAAS,GAAG,GAAkB,EAAE;QACpC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,SAAS,GAAG,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,OAAe,EAAiB,EAAE;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACrE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,4EAA4E;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,IAAI,SAAiB,CAAC;YACtB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,KAAK,KAAK,IAAI;oBAAE,MAAM,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,KAAK,KAAK,IAAI;gBAAE,MAAM,KAAK,CAAC;QAClC,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;QAC7B,IAAI,QAAQ,KAAK,IAAI;YAAE,MAAM,QAAQ,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,8DAA8D;QAC9D,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}