@bastani/pi-ai 0.9.14

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 (745) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +22 -0
  3. package/NOTICE.md +16 -0
  4. package/README.md +1672 -0
  5. package/dist/api/anthropic-messages.d.ts +71 -0
  6. package/dist/api/anthropic-messages.d.ts.map +1 -0
  7. package/dist/api/anthropic-messages.js +1060 -0
  8. package/dist/api/anthropic-messages.js.map +1 -0
  9. package/dist/api/anthropic-messages.lazy.d.ts +3 -0
  10. package/dist/api/anthropic-messages.lazy.d.ts.map +1 -0
  11. package/dist/api/anthropic-messages.lazy.js +3 -0
  12. package/dist/api/anthropic-messages.lazy.js.map +1 -0
  13. package/dist/api/azure-openai-responses.d.ts +15 -0
  14. package/dist/api/azure-openai-responses.d.ts.map +1 -0
  15. package/dist/api/azure-openai-responses.js +242 -0
  16. package/dist/api/azure-openai-responses.js.map +1 -0
  17. package/dist/api/azure-openai-responses.lazy.d.ts +3 -0
  18. package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -0
  19. package/dist/api/azure-openai-responses.lazy.js +3 -0
  20. package/dist/api/azure-openai-responses.lazy.js.map +1 -0
  21. package/dist/api/bedrock-converse-stream.d.ts +38 -0
  22. package/dist/api/bedrock-converse-stream.d.ts.map +1 -0
  23. package/dist/api/bedrock-converse-stream.js +967 -0
  24. package/dist/api/bedrock-converse-stream.js.map +1 -0
  25. package/dist/api/bedrock-converse-stream.lazy.d.ts +9 -0
  26. package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -0
  27. package/dist/api/bedrock-converse-stream.lazy.js +30 -0
  28. package/dist/api/bedrock-converse-stream.lazy.js.map +1 -0
  29. package/dist/api/cloudflare-gateway-binding.d.ts +69 -0
  30. package/dist/api/cloudflare-gateway-binding.d.ts.map +1 -0
  31. package/dist/api/cloudflare-gateway-binding.js +159 -0
  32. package/dist/api/cloudflare-gateway-binding.js.map +1 -0
  33. package/dist/api/cloudflare.d.ts +9 -0
  34. package/dist/api/cloudflare.d.ts.map +1 -0
  35. package/dist/api/cloudflare.js +9 -0
  36. package/dist/api/cloudflare.js.map +1 -0
  37. package/dist/api/constrained-sampling.d.ts +20 -0
  38. package/dist/api/constrained-sampling.d.ts.map +1 -0
  39. package/dist/api/constrained-sampling.js +222 -0
  40. package/dist/api/constrained-sampling.js.map +1 -0
  41. package/dist/api/github-copilot-headers.d.ts +8 -0
  42. package/dist/api/github-copilot-headers.d.ts.map +1 -0
  43. package/dist/api/github-copilot-headers.js +29 -0
  44. package/dist/api/github-copilot-headers.js.map +1 -0
  45. package/dist/api/google-generative-ai.d.ts +13 -0
  46. package/dist/api/google-generative-ai.d.ts.map +1 -0
  47. package/dist/api/google-generative-ai.js +417 -0
  48. package/dist/api/google-generative-ai.js.map +1 -0
  49. package/dist/api/google-generative-ai.lazy.d.ts +3 -0
  50. package/dist/api/google-generative-ai.lazy.d.ts.map +1 -0
  51. package/dist/api/google-generative-ai.lazy.js +3 -0
  52. package/dist/api/google-generative-ai.lazy.js.map +1 -0
  53. package/dist/api/google-shared.d.ts +81 -0
  54. package/dist/api/google-shared.d.ts.map +1 -0
  55. package/dist/api/google-shared.js +384 -0
  56. package/dist/api/google-shared.js.map +1 -0
  57. package/dist/api/google-vertex.d.ts +15 -0
  58. package/dist/api/google-vertex.d.ts.map +1 -0
  59. package/dist/api/google-vertex.js +466 -0
  60. package/dist/api/google-vertex.js.map +1 -0
  61. package/dist/api/google-vertex.lazy.d.ts +3 -0
  62. package/dist/api/google-vertex.lazy.d.ts.map +1 -0
  63. package/dist/api/google-vertex.lazy.js +3 -0
  64. package/dist/api/google-vertex.lazy.js.map +1 -0
  65. package/dist/api/lazy.d.ts +19 -0
  66. package/dist/api/lazy.d.ts.map +1 -0
  67. package/dist/api/lazy.js +70 -0
  68. package/dist/api/lazy.js.map +1 -0
  69. package/dist/api/mistral-conversations.d.ts +25 -0
  70. package/dist/api/mistral-conversations.d.ts.map +1 -0
  71. package/dist/api/mistral-conversations.js +736 -0
  72. package/dist/api/mistral-conversations.js.map +1 -0
  73. package/dist/api/mistral-conversations.lazy.d.ts +3 -0
  74. package/dist/api/mistral-conversations.lazy.d.ts.map +1 -0
  75. package/dist/api/mistral-conversations.lazy.js +3 -0
  76. package/dist/api/mistral-conversations.lazy.js.map +1 -0
  77. package/dist/api/openai-codex-responses.d.ts +31 -0
  78. package/dist/api/openai-codex-responses.d.ts.map +1 -0
  79. package/dist/api/openai-codex-responses.js +1294 -0
  80. package/dist/api/openai-codex-responses.js.map +1 -0
  81. package/dist/api/openai-codex-responses.lazy.d.ts +3 -0
  82. package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -0
  83. package/dist/api/openai-codex-responses.lazy.js +3 -0
  84. package/dist/api/openai-codex-responses.lazy.js.map +1 -0
  85. package/dist/api/openai-completions.d.ts +22 -0
  86. package/dist/api/openai-completions.d.ts.map +1 -0
  87. package/dist/api/openai-completions.js +1279 -0
  88. package/dist/api/openai-completions.js.map +1 -0
  89. package/dist/api/openai-completions.lazy.d.ts +3 -0
  90. package/dist/api/openai-completions.lazy.d.ts.map +1 -0
  91. package/dist/api/openai-completions.lazy.js +3 -0
  92. package/dist/api/openai-completions.lazy.js.map +1 -0
  93. package/dist/api/openai-prompt-cache.d.ts +3 -0
  94. package/dist/api/openai-prompt-cache.d.ts.map +1 -0
  95. package/dist/api/openai-prompt-cache.js +10 -0
  96. package/dist/api/openai-prompt-cache.js.map +1 -0
  97. package/dist/api/openai-responses-shared.d.ts +26 -0
  98. package/dist/api/openai-responses-shared.d.ts.map +1 -0
  99. package/dist/api/openai-responses-shared.js +686 -0
  100. package/dist/api/openai-responses-shared.js.map +1 -0
  101. package/dist/api/openai-responses.d.ts +14 -0
  102. package/dist/api/openai-responses.d.ts.map +1 -0
  103. package/dist/api/openai-responses.js +283 -0
  104. package/dist/api/openai-responses.js.map +1 -0
  105. package/dist/api/openai-responses.lazy.d.ts +3 -0
  106. package/dist/api/openai-responses.lazy.d.ts.map +1 -0
  107. package/dist/api/openai-responses.lazy.js +3 -0
  108. package/dist/api/openai-responses.lazy.js.map +1 -0
  109. package/dist/api/openrouter-images.d.ts +3 -0
  110. package/dist/api/openrouter-images.d.ts.map +1 -0
  111. package/dist/api/openrouter-images.js +132 -0
  112. package/dist/api/openrouter-images.js.map +1 -0
  113. package/dist/api/openrouter-images.lazy.d.ts +3 -0
  114. package/dist/api/openrouter-images.lazy.d.ts.map +1 -0
  115. package/dist/api/openrouter-images.lazy.js +4 -0
  116. package/dist/api/openrouter-images.lazy.js.map +1 -0
  117. package/dist/api/pi-messages.d.ts +97 -0
  118. package/dist/api/pi-messages.d.ts.map +1 -0
  119. package/dist/api/pi-messages.js +307 -0
  120. package/dist/api/pi-messages.js.map +1 -0
  121. package/dist/api/pi-messages.lazy.d.ts +3 -0
  122. package/dist/api/pi-messages.lazy.d.ts.map +1 -0
  123. package/dist/api/pi-messages.lazy.js +3 -0
  124. package/dist/api/pi-messages.lazy.js.map +1 -0
  125. package/dist/api/simple-options.d.ts +11 -0
  126. package/dist/api/simple-options.d.ts.map +1 -0
  127. package/dist/api/simple-options.js +59 -0
  128. package/dist/api/simple-options.js.map +1 -0
  129. package/dist/api/transform-messages.d.ts +8 -0
  130. package/dist/api/transform-messages.d.ts.map +1 -0
  131. package/dist/api/transform-messages.js +187 -0
  132. package/dist/api/transform-messages.js.map +1 -0
  133. package/dist/auth/context.d.ts +7 -0
  134. package/dist/auth/context.d.ts.map +1 -0
  135. package/dist/auth/context.js +42 -0
  136. package/dist/auth/context.js.map +1 -0
  137. package/dist/auth/credential-store.d.ts +17 -0
  138. package/dist/auth/credential-store.d.ts.map +1 -0
  139. package/dist/auth/credential-store.js +51 -0
  140. package/dist/auth/credential-store.js.map +1 -0
  141. package/dist/auth/helpers.d.ts +22 -0
  142. package/dist/auth/helpers.d.ts.map +1 -0
  143. package/dist/auth/helpers.js +53 -0
  144. package/dist/auth/helpers.js.map +1 -0
  145. package/dist/auth/oauth/anthropic.d.ts +9 -0
  146. package/dist/auth/oauth/anthropic.d.ts.map +1 -0
  147. package/dist/auth/oauth/anthropic.js +308 -0
  148. package/dist/auth/oauth/anthropic.js.map +1 -0
  149. package/dist/auth/oauth/device-code.d.ts +23 -0
  150. package/dist/auth/oauth/device-code.d.ts.map +1 -0
  151. package/dist/auth/oauth/device-code.js +69 -0
  152. package/dist/auth/oauth/device-code.js.map +1 -0
  153. package/dist/auth/oauth/github-copilot.d.ts +6 -0
  154. package/dist/auth/oauth/github-copilot.d.ts.map +1 -0
  155. package/dist/auth/oauth/github-copilot.js +328 -0
  156. package/dist/auth/oauth/github-copilot.js.map +1 -0
  157. package/dist/auth/oauth/kimi-coding.d.ts +10 -0
  158. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
  159. package/dist/auth/oauth/kimi-coding.js +261 -0
  160. package/dist/auth/oauth/kimi-coding.js.map +1 -0
  161. package/dist/auth/oauth/load.d.ts +27 -0
  162. package/dist/auth/oauth/load.d.ts.map +1 -0
  163. package/dist/auth/oauth/load.js +59 -0
  164. package/dist/auth/oauth/load.js.map +1 -0
  165. package/dist/auth/oauth/oauth-page.d.ts +3 -0
  166. package/dist/auth/oauth/oauth-page.d.ts.map +1 -0
  167. package/dist/auth/oauth/oauth-page.js +105 -0
  168. package/dist/auth/oauth/oauth-page.js.map +1 -0
  169. package/dist/auth/oauth/openai-codex.d.ts +9 -0
  170. package/dist/auth/oauth/openai-codex.d.ts.map +1 -0
  171. package/dist/auth/oauth/openai-codex.js +450 -0
  172. package/dist/auth/oauth/openai-codex.js.map +1 -0
  173. package/dist/auth/oauth/openrouter.d.ts +15 -0
  174. package/dist/auth/oauth/openrouter.d.ts.map +1 -0
  175. package/dist/auth/oauth/openrouter.js +277 -0
  176. package/dist/auth/oauth/openrouter.js.map +1 -0
  177. package/dist/auth/oauth/pkce.d.ts +13 -0
  178. package/dist/auth/oauth/pkce.d.ts.map +1 -0
  179. package/dist/auth/oauth/pkce.js +31 -0
  180. package/dist/auth/oauth/pkce.js.map +1 -0
  181. package/dist/auth/oauth/radius.d.ts +17 -0
  182. package/dist/auth/oauth/radius.d.ts.map +1 -0
  183. package/dist/auth/oauth/radius.js +321 -0
  184. package/dist/auth/oauth/radius.js.map +1 -0
  185. package/dist/auth/oauth/xai.d.ts +6 -0
  186. package/dist/auth/oauth/xai.d.ts.map +1 -0
  187. package/dist/auth/oauth/xai.js +190 -0
  188. package/dist/auth/oauth/xai.js.map +1 -0
  189. package/dist/auth/resolve.d.ts +27 -0
  190. package/dist/auth/resolve.d.ts.map +1 -0
  191. package/dist/auth/resolve.js +132 -0
  192. package/dist/auth/resolve.js.map +1 -0
  193. package/dist/auth/types.d.ts +231 -0
  194. package/dist/auth/types.d.ts.map +1 -0
  195. package/dist/auth/types.js +2 -0
  196. package/dist/auth/types.js.map +1 -0
  197. package/dist/bedrock-provider.d.ts +5 -0
  198. package/dist/bedrock-provider.d.ts.map +1 -0
  199. package/dist/bedrock-provider.js +6 -0
  200. package/dist/bedrock-provider.js.map +1 -0
  201. package/dist/bun-oauth.d.ts +3 -0
  202. package/dist/bun-oauth.d.ts.map +1 -0
  203. package/dist/bun-oauth.js +21 -0
  204. package/dist/bun-oauth.js.map +1 -0
  205. package/dist/cli.d.ts +3 -0
  206. package/dist/cli.d.ts.map +1 -0
  207. package/dist/cli.js +113 -0
  208. package/dist/cli.js.map +1 -0
  209. package/dist/compat/extension-oauth-types.d.ts +39 -0
  210. package/dist/compat/extension-oauth-types.d.ts.map +1 -0
  211. package/dist/compat/extension-oauth-types.js +2 -0
  212. package/dist/compat/extension-oauth-types.js.map +1 -0
  213. package/dist/compat.d.ts +67 -0
  214. package/dist/compat.d.ts.map +1 -0
  215. package/dist/compat.js +199 -0
  216. package/dist/compat.js.map +1 -0
  217. package/dist/env-api-keys.d.ts +21 -0
  218. package/dist/env-api-keys.d.ts.map +1 -0
  219. package/dist/env-api-keys.js +156 -0
  220. package/dist/env-api-keys.js.map +1 -0
  221. package/dist/image-models.d.ts +10 -0
  222. package/dist/image-models.d.ts.map +1 -0
  223. package/dist/image-models.generated.d.ts +680 -0
  224. package/dist/image-models.generated.d.ts.map +1 -0
  225. package/dist/image-models.generated.js +682 -0
  226. package/dist/image-models.generated.js.map +1 -0
  227. package/dist/image-models.js +23 -0
  228. package/dist/image-models.js.map +1 -0
  229. package/dist/images-api-registry.d.ts +14 -0
  230. package/dist/images-api-registry.d.ts.map +1 -0
  231. package/dist/images-api-registry.js +22 -0
  232. package/dist/images-api-registry.js.map +1 -0
  233. package/dist/images-models.d.ts +95 -0
  234. package/dist/images-models.d.ts.map +1 -0
  235. package/dist/images-models.js +143 -0
  236. package/dist/images-models.js.map +1 -0
  237. package/dist/images.d.ts +4 -0
  238. package/dist/images.d.ts.map +1 -0
  239. package/dist/images.js +14 -0
  240. package/dist/images.js.map +1 -0
  241. package/dist/index.d.ts +35 -0
  242. package/dist/index.d.ts.map +1 -0
  243. package/dist/index.js +22 -0
  244. package/dist/index.js.map +1 -0
  245. package/dist/legacy-api-aliases.d.ts +42 -0
  246. package/dist/legacy-api-aliases.d.ts.map +1 -0
  247. package/dist/legacy-api-aliases.js +49 -0
  248. package/dist/legacy-api-aliases.js.map +1 -0
  249. package/dist/model-catalog.d.ts +17 -0
  250. package/dist/model-catalog.d.ts.map +1 -0
  251. package/dist/model-catalog.js +4 -0
  252. package/dist/model-catalog.js.map +1 -0
  253. package/dist/models-store.d.ts +29 -0
  254. package/dist/models-store.d.ts.map +1 -0
  255. package/dist/models-store.js +17 -0
  256. package/dist/models-store.js.map +1 -0
  257. package/dist/models.d.ts +200 -0
  258. package/dist/models.d.ts.map +1 -0
  259. package/dist/models.generated.d.ts +81 -0
  260. package/dist/models.generated.d.ts.map +1 -0
  261. package/dist/models.generated.js +83 -0
  262. package/dist/models.generated.js.map +1 -0
  263. package/dist/models.js +588 -0
  264. package/dist/models.js.map +1 -0
  265. package/dist/oauth.d.ts +3 -0
  266. package/dist/oauth.d.ts.map +1 -0
  267. package/dist/oauth.js +2 -0
  268. package/dist/oauth.js.map +1 -0
  269. package/dist/providers/all.d.ts +28 -0
  270. package/dist/providers/all.d.ts.map +1 -0
  271. package/dist/providers/all.js +131 -0
  272. package/dist/providers/all.js.map +1 -0
  273. package/dist/providers/amazon-bedrock.d.ts +3 -0
  274. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  275. package/dist/providers/amazon-bedrock.js +93 -0
  276. package/dist/providers/amazon-bedrock.js.map +1 -0
  277. package/dist/providers/amazon-bedrock.models.d.ts +4 -0
  278. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -0
  279. package/dist/providers/amazon-bedrock.models.js +6 -0
  280. package/dist/providers/amazon-bedrock.models.js.map +1 -0
  281. package/dist/providers/ant-ling.d.ts +3 -0
  282. package/dist/providers/ant-ling.d.ts.map +1 -0
  283. package/dist/providers/ant-ling.js +15 -0
  284. package/dist/providers/ant-ling.js.map +1 -0
  285. package/dist/providers/ant-ling.models.d.ts +4 -0
  286. package/dist/providers/ant-ling.models.d.ts.map +1 -0
  287. package/dist/providers/ant-ling.models.js +6 -0
  288. package/dist/providers/ant-ling.models.js.map +1 -0
  289. package/dist/providers/anthropic.d.ts +3 -0
  290. package/dist/providers/anthropic.d.ts.map +1 -0
  291. package/dist/providers/anthropic.js +56 -0
  292. package/dist/providers/anthropic.js.map +1 -0
  293. package/dist/providers/anthropic.models.d.ts +4 -0
  294. package/dist/providers/anthropic.models.d.ts.map +1 -0
  295. package/dist/providers/anthropic.models.js +6 -0
  296. package/dist/providers/anthropic.models.js.map +1 -0
  297. package/dist/providers/azure-openai-responses.d.ts +3 -0
  298. package/dist/providers/azure-openai-responses.d.ts.map +1 -0
  299. package/dist/providers/azure-openai-responses.js +14 -0
  300. package/dist/providers/azure-openai-responses.js.map +1 -0
  301. package/dist/providers/azure-openai-responses.models.d.ts +4 -0
  302. package/dist/providers/azure-openai-responses.models.d.ts.map +1 -0
  303. package/dist/providers/azure-openai-responses.models.js +6 -0
  304. package/dist/providers/azure-openai-responses.models.js.map +1 -0
  305. package/dist/providers/baseten.d.ts +3 -0
  306. package/dist/providers/baseten.d.ts.map +1 -0
  307. package/dist/providers/baseten.js +15 -0
  308. package/dist/providers/baseten.js.map +1 -0
  309. package/dist/providers/baseten.models.d.ts +4 -0
  310. package/dist/providers/baseten.models.d.ts.map +1 -0
  311. package/dist/providers/baseten.models.js +6 -0
  312. package/dist/providers/baseten.models.js.map +1 -0
  313. package/dist/providers/cerebras.d.ts +3 -0
  314. package/dist/providers/cerebras.d.ts.map +1 -0
  315. package/dist/providers/cerebras.js +15 -0
  316. package/dist/providers/cerebras.js.map +1 -0
  317. package/dist/providers/cerebras.models.d.ts +4 -0
  318. package/dist/providers/cerebras.models.d.ts.map +1 -0
  319. package/dist/providers/cerebras.models.js +6 -0
  320. package/dist/providers/cerebras.models.js.map +1 -0
  321. package/dist/providers/cloudflare-ai-gateway.d.ts +3 -0
  322. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -0
  323. package/dist/providers/cloudflare-ai-gateway.js +21 -0
  324. package/dist/providers/cloudflare-ai-gateway.js.map +1 -0
  325. package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -0
  326. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -0
  327. package/dist/providers/cloudflare-ai-gateway.models.js +6 -0
  328. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -0
  329. package/dist/providers/cloudflare-auth.d.ts +4 -0
  330. package/dist/providers/cloudflare-auth.d.ts.map +1 -0
  331. package/dist/providers/cloudflare-auth.js +86 -0
  332. package/dist/providers/cloudflare-auth.js.map +1 -0
  333. package/dist/providers/cloudflare-stream.d.ts +8 -0
  334. package/dist/providers/cloudflare-stream.d.ts.map +1 -0
  335. package/dist/providers/cloudflare-stream.js +21 -0
  336. package/dist/providers/cloudflare-stream.js.map +1 -0
  337. package/dist/providers/cloudflare-workers-ai.d.ts +3 -0
  338. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -0
  339. package/dist/providers/cloudflare-workers-ai.js +15 -0
  340. package/dist/providers/cloudflare-workers-ai.js.map +1 -0
  341. package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -0
  342. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -0
  343. package/dist/providers/cloudflare-workers-ai.models.js +6 -0
  344. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -0
  345. package/dist/providers/data/.manifest.json +1 -0
  346. package/dist/providers/data/amazon-bedrock.json +1 -0
  347. package/dist/providers/data/ant-ling.json +1 -0
  348. package/dist/providers/data/anthropic.json +1 -0
  349. package/dist/providers/data/azure-openai-responses.json +1 -0
  350. package/dist/providers/data/baseten.json +1 -0
  351. package/dist/providers/data/cerebras.json +1 -0
  352. package/dist/providers/data/cloudflare-ai-gateway.json +1 -0
  353. package/dist/providers/data/cloudflare-workers-ai.json +1 -0
  354. package/dist/providers/data/deepseek.json +1 -0
  355. package/dist/providers/data/fireworks.json +1 -0
  356. package/dist/providers/data/github-copilot.json +1 -0
  357. package/dist/providers/data/google-vertex.json +1 -0
  358. package/dist/providers/data/google.json +1 -0
  359. package/dist/providers/data/groq.json +1 -0
  360. package/dist/providers/data/huggingface.json +1 -0
  361. package/dist/providers/data/kimi-coding.json +1 -0
  362. package/dist/providers/data/minimax-cn.json +1 -0
  363. package/dist/providers/data/minimax.json +1 -0
  364. package/dist/providers/data/mistral.json +1 -0
  365. package/dist/providers/data/moonshotai-cn.json +1 -0
  366. package/dist/providers/data/moonshotai.json +1 -0
  367. package/dist/providers/data/nvidia.json +1 -0
  368. package/dist/providers/data/openai-codex.json +1 -0
  369. package/dist/providers/data/openai.json +1 -0
  370. package/dist/providers/data/opencode-go.json +1 -0
  371. package/dist/providers/data/opencode.json +1 -0
  372. package/dist/providers/data/openrouter.json +1 -0
  373. package/dist/providers/data/qwen-token-plan-cn.json +1 -0
  374. package/dist/providers/data/qwen-token-plan-individual.json +1 -0
  375. package/dist/providers/data/qwen-token-plan.json +1 -0
  376. package/dist/providers/data/together.json +1 -0
  377. package/dist/providers/data/vercel-ai-gateway.json +1 -0
  378. package/dist/providers/data/xai.json +1 -0
  379. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -0
  380. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -0
  381. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -0
  382. package/dist/providers/data/xiaomi.json +1 -0
  383. package/dist/providers/data/zai-coding-cn.json +1 -0
  384. package/dist/providers/data/zai.json +1 -0
  385. package/dist/providers/deepseek.d.ts +3 -0
  386. package/dist/providers/deepseek.d.ts.map +1 -0
  387. package/dist/providers/deepseek.js +15 -0
  388. package/dist/providers/deepseek.js.map +1 -0
  389. package/dist/providers/deepseek.models.d.ts +4 -0
  390. package/dist/providers/deepseek.models.d.ts.map +1 -0
  391. package/dist/providers/deepseek.models.js +6 -0
  392. package/dist/providers/deepseek.models.js.map +1 -0
  393. package/dist/providers/faux.d.ts +102 -0
  394. package/dist/providers/faux.d.ts.map +1 -0
  395. package/dist/providers/faux.js +488 -0
  396. package/dist/providers/faux.js.map +1 -0
  397. package/dist/providers/fireworks.d.ts +3 -0
  398. package/dist/providers/fireworks.d.ts.map +1 -0
  399. package/dist/providers/fireworks.js +19 -0
  400. package/dist/providers/fireworks.js.map +1 -0
  401. package/dist/providers/fireworks.models.d.ts +4 -0
  402. package/dist/providers/fireworks.models.d.ts.map +1 -0
  403. package/dist/providers/fireworks.models.js +6 -0
  404. package/dist/providers/fireworks.models.js.map +1 -0
  405. package/dist/providers/github-copilot.d.ts +3 -0
  406. package/dist/providers/github-copilot.d.ts.map +1 -0
  407. package/dist/providers/github-copilot.js +35 -0
  408. package/dist/providers/github-copilot.js.map +1 -0
  409. package/dist/providers/github-copilot.models.d.ts +4 -0
  410. package/dist/providers/github-copilot.models.d.ts.map +1 -0
  411. package/dist/providers/github-copilot.models.js +6 -0
  412. package/dist/providers/github-copilot.models.js.map +1 -0
  413. package/dist/providers/google-vertex.d.ts +3 -0
  414. package/dist/providers/google-vertex.d.ts.map +1 -0
  415. package/dist/providers/google-vertex.js +94 -0
  416. package/dist/providers/google-vertex.js.map +1 -0
  417. package/dist/providers/google-vertex.models.d.ts +4 -0
  418. package/dist/providers/google-vertex.models.d.ts.map +1 -0
  419. package/dist/providers/google-vertex.models.js +6 -0
  420. package/dist/providers/google-vertex.models.js.map +1 -0
  421. package/dist/providers/google.d.ts +3 -0
  422. package/dist/providers/google.d.ts.map +1 -0
  423. package/dist/providers/google.js +15 -0
  424. package/dist/providers/google.js.map +1 -0
  425. package/dist/providers/google.models.d.ts +4 -0
  426. package/dist/providers/google.models.d.ts.map +1 -0
  427. package/dist/providers/google.models.js +6 -0
  428. package/dist/providers/google.models.js.map +1 -0
  429. package/dist/providers/groq.d.ts +3 -0
  430. package/dist/providers/groq.d.ts.map +1 -0
  431. package/dist/providers/groq.js +15 -0
  432. package/dist/providers/groq.js.map +1 -0
  433. package/dist/providers/groq.models.d.ts +4 -0
  434. package/dist/providers/groq.models.d.ts.map +1 -0
  435. package/dist/providers/groq.models.js +6 -0
  436. package/dist/providers/groq.models.js.map +1 -0
  437. package/dist/providers/huggingface.d.ts +3 -0
  438. package/dist/providers/huggingface.d.ts.map +1 -0
  439. package/dist/providers/huggingface.js +15 -0
  440. package/dist/providers/huggingface.js.map +1 -0
  441. package/dist/providers/huggingface.models.d.ts +4 -0
  442. package/dist/providers/huggingface.models.d.ts.map +1 -0
  443. package/dist/providers/huggingface.models.js +6 -0
  444. package/dist/providers/huggingface.models.js.map +1 -0
  445. package/dist/providers/images/register-builtins.d.ts +4 -0
  446. package/dist/providers/images/register-builtins.d.ts.map +1 -0
  447. package/dist/providers/images/register-builtins.js +34 -0
  448. package/dist/providers/images/register-builtins.js.map +1 -0
  449. package/dist/providers/kimi-coding.d.ts +3 -0
  450. package/dist/providers/kimi-coding.d.ts.map +1 -0
  451. package/dist/providers/kimi-coding.js +24 -0
  452. package/dist/providers/kimi-coding.js.map +1 -0
  453. package/dist/providers/kimi-coding.models.d.ts +4 -0
  454. package/dist/providers/kimi-coding.models.d.ts.map +1 -0
  455. package/dist/providers/kimi-coding.models.js +6 -0
  456. package/dist/providers/kimi-coding.models.js.map +1 -0
  457. package/dist/providers/minimax-cn.d.ts +3 -0
  458. package/dist/providers/minimax-cn.d.ts.map +1 -0
  459. package/dist/providers/minimax-cn.js +15 -0
  460. package/dist/providers/minimax-cn.js.map +1 -0
  461. package/dist/providers/minimax-cn.models.d.ts +4 -0
  462. package/dist/providers/minimax-cn.models.d.ts.map +1 -0
  463. package/dist/providers/minimax-cn.models.js +6 -0
  464. package/dist/providers/minimax-cn.models.js.map +1 -0
  465. package/dist/providers/minimax.d.ts +3 -0
  466. package/dist/providers/minimax.d.ts.map +1 -0
  467. package/dist/providers/minimax.js +15 -0
  468. package/dist/providers/minimax.js.map +1 -0
  469. package/dist/providers/minimax.models.d.ts +4 -0
  470. package/dist/providers/minimax.models.d.ts.map +1 -0
  471. package/dist/providers/minimax.models.js +6 -0
  472. package/dist/providers/minimax.models.js.map +1 -0
  473. package/dist/providers/mistral.d.ts +3 -0
  474. package/dist/providers/mistral.d.ts.map +1 -0
  475. package/dist/providers/mistral.js +15 -0
  476. package/dist/providers/mistral.js.map +1 -0
  477. package/dist/providers/mistral.models.d.ts +4 -0
  478. package/dist/providers/mistral.models.d.ts.map +1 -0
  479. package/dist/providers/mistral.models.js +6 -0
  480. package/dist/providers/mistral.models.js.map +1 -0
  481. package/dist/providers/moonshotai-cn.d.ts +3 -0
  482. package/dist/providers/moonshotai-cn.d.ts.map +1 -0
  483. package/dist/providers/moonshotai-cn.js +15 -0
  484. package/dist/providers/moonshotai-cn.js.map +1 -0
  485. package/dist/providers/moonshotai-cn.models.d.ts +4 -0
  486. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -0
  487. package/dist/providers/moonshotai-cn.models.js +6 -0
  488. package/dist/providers/moonshotai-cn.models.js.map +1 -0
  489. package/dist/providers/moonshotai.d.ts +3 -0
  490. package/dist/providers/moonshotai.d.ts.map +1 -0
  491. package/dist/providers/moonshotai.js +15 -0
  492. package/dist/providers/moonshotai.js.map +1 -0
  493. package/dist/providers/moonshotai.models.d.ts +4 -0
  494. package/dist/providers/moonshotai.models.d.ts.map +1 -0
  495. package/dist/providers/moonshotai.models.js +6 -0
  496. package/dist/providers/moonshotai.models.js.map +1 -0
  497. package/dist/providers/nvidia.d.ts +3 -0
  498. package/dist/providers/nvidia.d.ts.map +1 -0
  499. package/dist/providers/nvidia.js +15 -0
  500. package/dist/providers/nvidia.js.map +1 -0
  501. package/dist/providers/nvidia.models.d.ts +4 -0
  502. package/dist/providers/nvidia.models.d.ts.map +1 -0
  503. package/dist/providers/nvidia.models.js +6 -0
  504. package/dist/providers/nvidia.models.js.map +1 -0
  505. package/dist/providers/openai-codex.d.ts +3 -0
  506. package/dist/providers/openai-codex.d.ts.map +1 -0
  507. package/dist/providers/openai-codex.js +22 -0
  508. package/dist/providers/openai-codex.js.map +1 -0
  509. package/dist/providers/openai-codex.models.d.ts +4 -0
  510. package/dist/providers/openai-codex.models.d.ts.map +1 -0
  511. package/dist/providers/openai-codex.models.js +6 -0
  512. package/dist/providers/openai-codex.models.js.map +1 -0
  513. package/dist/providers/openai.d.ts +3 -0
  514. package/dist/providers/openai.d.ts.map +1 -0
  515. package/dist/providers/openai.js +15 -0
  516. package/dist/providers/openai.js.map +1 -0
  517. package/dist/providers/openai.models.d.ts +4 -0
  518. package/dist/providers/openai.models.d.ts.map +1 -0
  519. package/dist/providers/openai.models.js +6 -0
  520. package/dist/providers/openai.models.js.map +1 -0
  521. package/dist/providers/opencode-go.d.ts +3 -0
  522. package/dist/providers/opencode-go.d.ts.map +1 -0
  523. package/dist/providers/opencode-go.js +20 -0
  524. package/dist/providers/opencode-go.js.map +1 -0
  525. package/dist/providers/opencode-go.models.d.ts +4 -0
  526. package/dist/providers/opencode-go.models.d.ts.map +1 -0
  527. package/dist/providers/opencode-go.models.js +6 -0
  528. package/dist/providers/opencode-go.models.js.map +1 -0
  529. package/dist/providers/opencode.d.ts +3 -0
  530. package/dist/providers/opencode.d.ts.map +1 -0
  531. package/dist/providers/opencode.js +22 -0
  532. package/dist/providers/opencode.js.map +1 -0
  533. package/dist/providers/opencode.models.d.ts +4 -0
  534. package/dist/providers/opencode.models.d.ts.map +1 -0
  535. package/dist/providers/opencode.models.js +6 -0
  536. package/dist/providers/opencode.models.js.map +1 -0
  537. package/dist/providers/openrouter-images.d.ts +3 -0
  538. package/dist/providers/openrouter-images.d.ts.map +1 -0
  539. package/dist/providers/openrouter-images.js +22 -0
  540. package/dist/providers/openrouter-images.js.map +1 -0
  541. package/dist/providers/openrouter.d.ts +3 -0
  542. package/dist/providers/openrouter.d.ts.map +1 -0
  543. package/dist/providers/openrouter.js +23 -0
  544. package/dist/providers/openrouter.js.map +1 -0
  545. package/dist/providers/openrouter.models.d.ts +4 -0
  546. package/dist/providers/openrouter.models.d.ts.map +1 -0
  547. package/dist/providers/openrouter.models.js +6 -0
  548. package/dist/providers/openrouter.models.js.map +1 -0
  549. package/dist/providers/qwen-token-plan-cn.d.ts +3 -0
  550. package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
  551. package/dist/providers/qwen-token-plan-cn.js +15 -0
  552. package/dist/providers/qwen-token-plan-cn.js.map +1 -0
  553. package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
  554. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
  555. package/dist/providers/qwen-token-plan-cn.models.js +6 -0
  556. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
  557. package/dist/providers/qwen-token-plan-individual.d.ts +3 -0
  558. package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -0
  559. package/dist/providers/qwen-token-plan-individual.js +15 -0
  560. package/dist/providers/qwen-token-plan-individual.js.map +1 -0
  561. package/dist/providers/qwen-token-plan-individual.models.d.ts +4 -0
  562. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -0
  563. package/dist/providers/qwen-token-plan-individual.models.js +6 -0
  564. package/dist/providers/qwen-token-plan-individual.models.js.map +1 -0
  565. package/dist/providers/qwen-token-plan.d.ts +3 -0
  566. package/dist/providers/qwen-token-plan.d.ts.map +1 -0
  567. package/dist/providers/qwen-token-plan.js +15 -0
  568. package/dist/providers/qwen-token-plan.js.map +1 -0
  569. package/dist/providers/qwen-token-plan.models.d.ts +4 -0
  570. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
  571. package/dist/providers/qwen-token-plan.models.js +6 -0
  572. package/dist/providers/qwen-token-plan.models.js.map +1 -0
  573. package/dist/providers/radius-config.d.ts +26 -0
  574. package/dist/providers/radius-config.d.ts.map +1 -0
  575. package/dist/providers/radius-config.js +63 -0
  576. package/dist/providers/radius-config.js.map +1 -0
  577. package/dist/providers/radius.d.ts +9 -0
  578. package/dist/providers/radius.d.ts.map +1 -0
  579. package/dist/providers/radius.js +64 -0
  580. package/dist/providers/radius.js.map +1 -0
  581. package/dist/providers/together.d.ts +3 -0
  582. package/dist/providers/together.d.ts.map +1 -0
  583. package/dist/providers/together.js +15 -0
  584. package/dist/providers/together.js.map +1 -0
  585. package/dist/providers/together.models.d.ts +4 -0
  586. package/dist/providers/together.models.d.ts.map +1 -0
  587. package/dist/providers/together.models.js +6 -0
  588. package/dist/providers/together.models.js.map +1 -0
  589. package/dist/providers/vercel-ai-gateway.d.ts +3 -0
  590. package/dist/providers/vercel-ai-gateway.d.ts.map +1 -0
  591. package/dist/providers/vercel-ai-gateway.js +15 -0
  592. package/dist/providers/vercel-ai-gateway.js.map +1 -0
  593. package/dist/providers/vercel-ai-gateway.models.d.ts +4 -0
  594. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -0
  595. package/dist/providers/vercel-ai-gateway.models.js +6 -0
  596. package/dist/providers/vercel-ai-gateway.models.js.map +1 -0
  597. package/dist/providers/xai.d.ts +3 -0
  598. package/dist/providers/xai.d.ts.map +1 -0
  599. package/dist/providers/xai.js +28 -0
  600. package/dist/providers/xai.js.map +1 -0
  601. package/dist/providers/xai.models.d.ts +4 -0
  602. package/dist/providers/xai.models.d.ts.map +1 -0
  603. package/dist/providers/xai.models.js +6 -0
  604. package/dist/providers/xai.models.js.map +1 -0
  605. package/dist/providers/xiaomi-token-plan-ams.d.ts +3 -0
  606. package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -0
  607. package/dist/providers/xiaomi-token-plan-ams.js +15 -0
  608. package/dist/providers/xiaomi-token-plan-ams.js.map +1 -0
  609. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -0
  610. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -0
  611. package/dist/providers/xiaomi-token-plan-ams.models.js +6 -0
  612. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -0
  613. package/dist/providers/xiaomi-token-plan-cn.d.ts +3 -0
  614. package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -0
  615. package/dist/providers/xiaomi-token-plan-cn.js +15 -0
  616. package/dist/providers/xiaomi-token-plan-cn.js.map +1 -0
  617. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -0
  618. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -0
  619. package/dist/providers/xiaomi-token-plan-cn.models.js +6 -0
  620. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -0
  621. package/dist/providers/xiaomi-token-plan-sgp.d.ts +3 -0
  622. package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -0
  623. package/dist/providers/xiaomi-token-plan-sgp.js +15 -0
  624. package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -0
  625. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -0
  626. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -0
  627. package/dist/providers/xiaomi-token-plan-sgp.models.js +6 -0
  628. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -0
  629. package/dist/providers/xiaomi.d.ts +3 -0
  630. package/dist/providers/xiaomi.d.ts.map +1 -0
  631. package/dist/providers/xiaomi.js +15 -0
  632. package/dist/providers/xiaomi.js.map +1 -0
  633. package/dist/providers/xiaomi.models.d.ts +4 -0
  634. package/dist/providers/xiaomi.models.d.ts.map +1 -0
  635. package/dist/providers/xiaomi.models.js +6 -0
  636. package/dist/providers/xiaomi.models.js.map +1 -0
  637. package/dist/providers/zai-coding-cn.d.ts +3 -0
  638. package/dist/providers/zai-coding-cn.d.ts.map +1 -0
  639. package/dist/providers/zai-coding-cn.js +15 -0
  640. package/dist/providers/zai-coding-cn.js.map +1 -0
  641. package/dist/providers/zai-coding-cn.models.d.ts +4 -0
  642. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -0
  643. package/dist/providers/zai-coding-cn.models.js +6 -0
  644. package/dist/providers/zai-coding-cn.models.js.map +1 -0
  645. package/dist/providers/zai.d.ts +3 -0
  646. package/dist/providers/zai.d.ts.map +1 -0
  647. package/dist/providers/zai.js +15 -0
  648. package/dist/providers/zai.js.map +1 -0
  649. package/dist/providers/zai.models.d.ts +4 -0
  650. package/dist/providers/zai.models.d.ts.map +1 -0
  651. package/dist/providers/zai.models.js +6 -0
  652. package/dist/providers/zai.models.js.map +1 -0
  653. package/dist/session-resources.d.ts +4 -0
  654. package/dist/session-resources.d.ts.map +1 -0
  655. package/dist/session-resources.js +22 -0
  656. package/dist/session-resources.js.map +1 -0
  657. package/dist/types.d.ts +697 -0
  658. package/dist/types.d.ts.map +1 -0
  659. package/dist/types.js +2 -0
  660. package/dist/types.js.map +1 -0
  661. package/dist/utils/abort-signals.d.ts +6 -0
  662. package/dist/utils/abort-signals.d.ts.map +1 -0
  663. package/dist/utils/abort-signals.js +34 -0
  664. package/dist/utils/abort-signals.js.map +1 -0
  665. package/dist/utils/abort.d.ts +8 -0
  666. package/dist/utils/abort.d.ts.map +1 -0
  667. package/dist/utils/abort.js +49 -0
  668. package/dist/utils/abort.js.map +1 -0
  669. package/dist/utils/deferred-tools.d.ts +9 -0
  670. package/dist/utils/deferred-tools.d.ts.map +1 -0
  671. package/dist/utils/deferred-tools.js +36 -0
  672. package/dist/utils/deferred-tools.js.map +1 -0
  673. package/dist/utils/diagnostics.d.ts +19 -0
  674. package/dist/utils/diagnostics.d.ts.map +1 -0
  675. package/dist/utils/diagnostics.js +25 -0
  676. package/dist/utils/diagnostics.js.map +1 -0
  677. package/dist/utils/error-body.d.ts +25 -0
  678. package/dist/utils/error-body.d.ts.map +1 -0
  679. package/dist/utils/error-body.js +133 -0
  680. package/dist/utils/error-body.js.map +1 -0
  681. package/dist/utils/estimate.d.ts +17 -0
  682. package/dist/utils/estimate.d.ts.map +1 -0
  683. package/dist/utils/estimate.js +116 -0
  684. package/dist/utils/estimate.js.map +1 -0
  685. package/dist/utils/event-stream.d.ts +21 -0
  686. package/dist/utils/event-stream.d.ts.map +1 -0
  687. package/dist/utils/event-stream.js +81 -0
  688. package/dist/utils/event-stream.js.map +1 -0
  689. package/dist/utils/hash.d.ts +3 -0
  690. package/dist/utils/hash.d.ts.map +1 -0
  691. package/dist/utils/hash.js +14 -0
  692. package/dist/utils/hash.js.map +1 -0
  693. package/dist/utils/headers.d.ts +4 -0
  694. package/dist/utils/headers.d.ts.map +1 -0
  695. package/dist/utils/headers.js +18 -0
  696. package/dist/utils/headers.js.map +1 -0
  697. package/dist/utils/json-parse.d.ts +16 -0
  698. package/dist/utils/json-parse.d.ts.map +1 -0
  699. package/dist/utils/json-parse.js +113 -0
  700. package/dist/utils/json-parse.js.map +1 -0
  701. package/dist/utils/node-http-proxy.d.ts +4 -0
  702. package/dist/utils/node-http-proxy.d.ts.map +1 -0
  703. package/dist/utils/node-http-proxy.js +92 -0
  704. package/dist/utils/node-http-proxy.js.map +1 -0
  705. package/dist/utils/overflow.d.ts +68 -0
  706. package/dist/utils/overflow.d.ts.map +1 -0
  707. package/dist/utils/overflow.js +172 -0
  708. package/dist/utils/overflow.js.map +1 -0
  709. package/dist/utils/pi-user-agent.d.ts +2 -0
  710. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  711. package/dist/utils/pi-user-agent.js +12 -0
  712. package/dist/utils/pi-user-agent.js.map +1 -0
  713. package/dist/utils/provider-env.d.ts +7 -0
  714. package/dist/utils/provider-env.d.ts.map +1 -0
  715. package/dist/utils/provider-env.js +44 -0
  716. package/dist/utils/provider-env.js.map +1 -0
  717. package/dist/utils/provider-retry.d.ts +16 -0
  718. package/dist/utils/provider-retry.d.ts.map +1 -0
  719. package/dist/utils/provider-retry.js +94 -0
  720. package/dist/utils/provider-retry.js.map +1 -0
  721. package/dist/utils/retry.d.ts +53 -0
  722. package/dist/utils/retry.d.ts.map +1 -0
  723. package/dist/utils/retry.js +174 -0
  724. package/dist/utils/retry.js.map +1 -0
  725. package/dist/utils/sanitize-unicode.d.ts +22 -0
  726. package/dist/utils/sanitize-unicode.d.ts.map +1 -0
  727. package/dist/utils/sanitize-unicode.js +26 -0
  728. package/dist/utils/sanitize-unicode.js.map +1 -0
  729. package/dist/utils/text.d.ts +6 -0
  730. package/dist/utils/text.d.ts.map +1 -0
  731. package/dist/utils/text.js +10 -0
  732. package/dist/utils/text.js.map +1 -0
  733. package/dist/utils/typebox-helpers.d.ts +17 -0
  734. package/dist/utils/typebox-helpers.d.ts.map +1 -0
  735. package/dist/utils/typebox-helpers.js +21 -0
  736. package/dist/utils/typebox-helpers.js.map +1 -0
  737. package/dist/utils/uuid.d.ts +3 -0
  738. package/dist/utils/uuid.d.ts.map +1 -0
  739. package/dist/utils/uuid.js +46 -0
  740. package/dist/utils/uuid.js.map +1 -0
  741. package/dist/utils/validation.d.ts +18 -0
  742. package/dist/utils/validation.d.ts.map +1 -0
  743. package/dist/utils/validation.js +309 -0
  744. package/dist/utils/validation.js.map +1 -0
  745. package/package.json +122 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock-converse-stream.js","sourceRoot":"","sources":["../../src/api/bedrock-converse-stream.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Agent as HttpsAgent } from \"node:https\";\nimport {\n\tBedrockRuntimeClient,\n\ttype BedrockRuntimeClientConfig,\n\tBedrockRuntimeServiceException,\n\tStopReason as BedrockStopReason,\n\ttype Tool as BedrockTool,\n\tCachePointType,\n\tCacheTTL,\n\ttype ContentBlock,\n\ttype ContentBlockDeltaEvent,\n\ttype ContentBlockStartEvent,\n\ttype ContentBlockStopEvent,\n\tConversationRole,\n\tConverseStreamCommand,\n\ttype ConverseStreamMetadataEvent,\n\tImageFormat,\n\ttype Message,\n\ttype SystemContentBlock,\n\ttype ToolChoice,\n\ttype ToolConfiguration,\n\ttype ToolResultContentBlock,\n\tToolResultStatus,\n} from \"@aws-sdk/client-bedrock-runtime\";\nimport { NodeHttpHandler } from \"@smithy/node-http-handler\";\nimport type { BuildMiddleware, DocumentType, MetadataBearer } from \"@smithy/types\";\nimport { HttpProxyAgent } from \"http-proxy-agent\";\nimport { HttpsProxyAgent } from \"https-proxy-agent\";\nimport { calculateCost } from \"../models.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tCacheRetention,\n\tContext,\n\tImageContent,\n\tModel,\n\tProviderEnv,\n\tSimpleStreamOptions,\n\tStopReason,\n\tStreamFunction,\n\tStreamOptions,\n\tTextContent,\n\tThinkingBudgets,\n\tThinkingContent,\n\tThinkingLevel,\n\tTool,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.ts\";\nimport { appendAssistantMessageDiagnostic } from \"../utils/diagnostics.ts\";\nimport { normalizeProviderError } from \"../utils/error-body.ts\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { providerHeadersToRecord } from \"../utils/headers.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport { resolveHttpProxyUrlForTarget } from \"../utils/node-http-proxy.ts\";\nimport { getProviderEnvValue } from \"../utils/provider-env.ts\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.ts\";\nimport { getJsonSchemaToolParameters, resolveJsonSchemaStrictSampling } from \"./constrained-sampling.ts\";\nimport {\n\tadjustMaxTokensForThinking,\n\tbuildBaseOptions,\n\tclampMaxTokensToContext,\n\tclampReasoning,\n} from \"./simple-options.ts\";\nimport { transformMessages } from \"./transform-messages.ts\";\n\nexport type BedrockThinkingDisplay = \"summarized\" | \"omitted\";\n\nexport interface BedrockOptions extends StreamOptions {\n\tregion?: string;\n\tprofile?: string;\n\ttoolChoice?: \"auto\" | \"any\" | \"none\" | { type: \"tool\"; name: string };\n\t/* See https://docs.aws.amazon.com/bedrock/latest/userguide/inference-reasoning.html for supported models. */\n\treasoning?: ThinkingLevel;\n\t/* Custom token budgets per thinking level. Overrides default budgets. */\n\tthinkingBudgets?: ThinkingBudgets;\n\t/* Only supported by Claude 4.x models, see https://docs.aws.amazon.com/bedrock/latest/userguide/claude-messages-extended-thinking.html#claude-messages-extended-thinking-tool-use-interleaved */\n\tinterleavedThinking?: boolean;\n\t/**\n\t * Controls how Claude's thinking content is returned in responses.\n\t * - \"summarized\": Thinking blocks contain summarized thinking text (default here).\n\t * - \"omitted\": Thinking content is redacted but the signature still travels back\n\t * for multi-turn continuity, reducing time-to-first-text-token.\n\t *\n\t * Note: Anthropic's API default for Claude Opus 4.8 and Mythos Preview is\n\t * \"omitted\". We default to \"summarized\" here to keep behavior consistent with\n\t * older Claude 4 models. Only applies to Claude models on Bedrock.\n\t */\n\tthinkingDisplay?: BedrockThinkingDisplay;\n\t/** Key-value pairs attached to the inference request for cost allocation tagging.\n\t * Keys: max 64 chars, no `aws:` prefix. Values: max 256 chars. Max 50 pairs.\n\t * Tags appear in AWS Cost Explorer split cost allocation data.\n\t * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html */\n\trequestMetadata?: Record<string, string>;\n\t/** Bearer token for Bedrock API key authentication.\n\t * When set, bypasses SigV4 signing and sends Authorization: Bearer <token> instead.\n\t * Requires `bedrock:CallWithBearerToken` IAM permission on the token's identity.\n\t * Set via AWS_BEARER_TOKEN_BEDROCK env var or pass directly.\n\t * @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html */\n\tbearerToken?: string;\n}\n\ntype Block = (TextContent | ThinkingContent | ToolCall) & { index?: number; partialJson?: string };\n\nconst EMPTY_TEXT_PLACEHOLDER = \"<empty>\";\n\nexport const stream: StreamFunction<\"bedrock-converse-stream\", BedrockOptions> = (\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tcontext: Context,\n\toptions: BedrockOptions = {},\n): AssistantMessageEventStream => {\n\tconst stream = new AssistantMessageEventStream();\n\n\t(async () => {\n\t\tconst output: AssistantMessage = {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [],\n\t\t\tapi: \"bedrock-converse-stream\" as Api,\n\t\t\tprovider: model.provider,\n\t\t\tmodel: model.id,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"pending\",\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tconst blocks = output.content as Block[];\n\n\t\t// A profile explicitly configured through pi's auth flow (the `profile`\n\t\t// option or scoped `AWS_PROFILE` on the stored credential's env) must win\n\t\t// over ambient AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY. The SDK default\n\t\t// chain already prefers a configured profile over env keys, but only when\n\t\t// `credentials` is not set on the client config. See #6957.\n\t\tconst optionsProfile = options.profile || options.env?.AWS_PROFILE;\n\t\tconst config: BedrockRuntimeClientConfig = {\n\t\t\tprofile: optionsProfile || getProviderEnvValue(\"AWS_PROFILE\", options.env),\n\t\t};\n\t\tconst configuredRegion = getConfiguredBedrockRegion(options);\n\t\tconst hasAmbientConfiguredProfile = Boolean(getProviderEnvValue(\"AWS_PROFILE\"));\n\t\tconst endpointRegion = getStandardBedrockEndpointRegion(model.baseUrl);\n\t\tconst useExplicitEndpoint = shouldUseExplicitBedrockEndpoint(\n\t\t\tmodel.baseUrl,\n\t\t\tconfiguredRegion,\n\t\t\thasAmbientConfiguredProfile,\n\t\t);\n\n\t\t// Only pin standard AWS Bedrock runtime endpoints when no region or ambient AWS_PROFILE is configured.\n\t\t// This preserves custom endpoints (VPC/proxy) from #3402 without forcing built-in\n\t\t// catalog defaults such as us-east-1 to override AWS_REGION/AWS_PROFILE.\n\t\tif (useExplicitEndpoint) {\n\t\t\tconfig.endpoint = model.baseUrl;\n\t\t}\n\n\t\t// Resolve bearer token for Bedrock API key auth.\n\t\tconst skipAuth = getProviderEnvValue(\"AWS_BEDROCK_SKIP_AUTH\", options.env) === \"1\";\n\t\tconst bearerToken =\n\t\t\toptions.bearerToken ||\n\t\t\toptions.apiKey ||\n\t\t\tgetProviderEnvValue(\"AWS_BEARER_TOKEN_BEDROCK\", options.env) ||\n\t\t\tundefined;\n\t\tconst useBearerToken = bearerToken !== undefined && !skipAuth;\n\n\t\t// in Node.js/Bun environment only\n\t\tif (typeof process !== \"undefined\" && (process.versions?.node || process.versions?.bun)) {\n\t\t\t// Region resolution: ARN-embedded > explicit option > env vars > SDK default chain.\n\t\t\t// When the model ID is an inference profile ARN, extract the region from it.\n\t\t\t// This avoids conflicts with AWS_REGION set for other services.\n\t\t\tconst arnRegionMatch = model.id.match(/^arn:aws(?:-[a-z0-9-]+)?:bedrock:([a-z0-9-]+):/);\n\t\t\tif (arnRegionMatch) {\n\t\t\t\tconfig.region = arnRegionMatch[1];\n\t\t\t} else if (configuredRegion) {\n\t\t\t\tconfig.region = configuredRegion;\n\t\t\t} else if (endpointRegion && useExplicitEndpoint) {\n\t\t\t\tconfig.region = endpointRegion;\n\t\t\t} else if (!hasAmbientConfiguredProfile) {\n\t\t\t\tconfig.region = \"us-east-1\";\n\t\t\t}\n\n\t\t\t// Support proxies that don't need authentication\n\t\t\tif (skipAuth) {\n\t\t\t\tconfig.credentials = {\n\t\t\t\t\taccessKeyId: \"dummy-access-key\",\n\t\t\t\t\tsecretAccessKey: \"dummy-secret-key\",\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst credentials = getConfiguredBedrockCredentials(options.env);\n\t\t\tif (!skipAuth && credentials && !optionsProfile) {\n\t\t\t\tconfig.credentials = credentials;\n\t\t\t}\n\n\t\t\tconst proxyUrl = resolveHttpProxyUrlForTarget(model.baseUrl, options.env);\n\t\t\tif (proxyUrl) {\n\t\t\t\t// Bedrock runtime uses NodeHttp2Handler by default since v3.798.0, which is based\n\t\t\t\t// on `http2` module and has no support for http agent.\n\t\t\t\t// Use NodeHttpHandler to support HTTP(S) proxy agents.\n\t\t\t\tconfig.requestHandler = new NodeHttpHandler({\n\t\t\t\t\thttpAgent: new HttpProxyAgent(proxyUrl),\n\t\t\t\t\thttpsAgent: new HttpsProxyAgent(proxyUrl) as unknown as HttpsAgent,\n\t\t\t\t});\n\t\t\t} else if (getProviderEnvValue(\"AWS_BEDROCK_FORCE_HTTP1\", options.env) === \"1\") {\n\t\t\t\t// Some custom endpoints require HTTP/1.1 instead of HTTP/2\n\t\t\t\tconfig.requestHandler = new NodeHttpHandler();\n\t\t\t}\n\t\t} else {\n\t\t\t// Non-Node environment (browser): fall back to us-east-1 since\n\t\t\t// there's no config file resolution available.\n\t\t\tconfig.region =\n\t\t\t\tconfiguredRegion || (endpointRegion && useExplicitEndpoint ? endpointRegion : undefined) || \"us-east-1\";\n\t\t}\n\n\t\tif (useBearerToken) {\n\t\t\tconfig.token = { token: bearerToken };\n\t\t\tconfig.authSchemePreference = [\"httpBearerAuth\"];\n\t\t}\n\n\t\t// Kept outside the try so the catch can still correlate a mid-stream failure:\n\t\t// exceptions delivered as stream events carry no HTTP metadata of their own.\n\t\tlet responseRequestId: string | undefined;\n\n\t\ttry {\n\t\t\tconst supportsStrictMode = model.compat?.supportsStrictMode ?? false;\n\t\t\tconst client = new BedrockRuntimeClient(config);\n\t\t\tconst customHeaders = providerHeadersToRecord(options.headers);\n\t\t\tif (customHeaders) {\n\t\t\t\taddCustomHeadersMiddleware(client, customHeaders);\n\t\t\t}\n\t\t\tconst cacheRetention = resolveCacheRetention(options.cacheRetention, options.env);\n\t\t\tconst inferenceMaxTokens = options.maxTokens ?? (isAnthropicClaudeModel(model) ? model.maxTokens : undefined);\n\t\t\tlet commandInput = {\n\t\t\t\tmodelId: model.id,\n\t\t\t\tmessages: convertMessages(context, model, cacheRetention, options.env),\n\t\t\t\tsystem: buildSystemPrompt(context.systemPrompt, model, cacheRetention, options.env),\n\t\t\t\tinferenceConfig: {\n\t\t\t\t\t...(inferenceMaxTokens !== undefined && { maxTokens: inferenceMaxTokens }),\n\t\t\t\t\t...(options.temperature !== undefined && { temperature: options.temperature }),\n\t\t\t\t},\n\t\t\t\ttoolConfig: convertToolConfig(context.tools, options.toolChoice, supportsStrictMode),\n\t\t\t\tadditionalModelRequestFields: buildAdditionalModelRequestFields(model, options),\n\t\t\t\t...(options.requestMetadata !== undefined && { requestMetadata: options.requestMetadata }),\n\t\t\t};\n\t\t\tconst nextCommandInput = await options?.onPayload?.(commandInput, model);\n\t\t\tif (nextCommandInput !== undefined) {\n\t\t\t\tcommandInput = nextCommandInput as typeof commandInput;\n\t\t\t}\n\t\t\tconst command = new ConverseStreamCommand(commandInput);\n\n\t\t\tconst response = await client.send(command, { abortSignal: options.signal });\n\t\t\tresponseRequestId = normalizeDiagnosticValue(response.$metadata.requestId);\n\t\t\tif (response.$metadata.httpStatusCode !== undefined) {\n\t\t\t\tconst responseHeaders: Record<string, string> = {};\n\t\t\t\tif (response.$metadata.requestId) {\n\t\t\t\t\tresponseHeaders[\"x-amzn-requestid\"] = response.$metadata.requestId;\n\t\t\t\t}\n\t\t\t\tawait options?.onResponse?.({ status: response.$metadata.httpStatusCode, headers: responseHeaders }, model);\n\t\t\t}\n\n\t\t\tfor await (const item of response.stream!) {\n\t\t\t\tif (item.messageStart) {\n\t\t\t\t\tif (item.messageStart.role !== ConversationRole.ASSISTANT) {\n\t\t\t\t\t\tthrow new Error(\"Unexpected assistant message start but got user message start instead\");\n\t\t\t\t\t}\n\t\t\t\t\tstream.push({ type: \"start\", partial: output });\n\t\t\t\t} else if (item.contentBlockStart) {\n\t\t\t\t\thandleContentBlockStart(item.contentBlockStart, blocks, output, stream);\n\t\t\t\t} else if (item.contentBlockDelta) {\n\t\t\t\t\thandleContentBlockDelta(item.contentBlockDelta, blocks, output, stream);\n\t\t\t\t} else if (item.contentBlockStop) {\n\t\t\t\t\thandleContentBlockStop(item.contentBlockStop, blocks, output, stream);\n\t\t\t\t} else if (item.messageStop) {\n\t\t\t\t\toutput.rawStopReason = item.messageStop.stopReason;\n\t\t\t\t\tconst { stopReason, errorMessage } = mapStopReason(item.messageStop.stopReason);\n\t\t\t\t\toutput.stopReason = stopReason;\n\t\t\t\t\tif (errorMessage) {\n\t\t\t\t\t\toutput.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t} else if (item.metadata) {\n\t\t\t\t\thandleMetadata(item.metadata, model, output);\n\t\t\t\t} else if (item.internalServerException) {\n\t\t\t\t\tthrow item.internalServerException;\n\t\t\t\t} else if (item.modelStreamErrorException) {\n\t\t\t\t\tthrow item.modelStreamErrorException;\n\t\t\t\t} else if (item.validationException) {\n\t\t\t\t\tthrow item.validationException;\n\t\t\t\t} else if (item.throttlingException) {\n\t\t\t\t\tthrow item.throttlingException;\n\t\t\t\t} else if (item.serviceUnavailableException) {\n\t\t\t\t\tthrow item.serviceUnavailableException;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.signal?.aborted) {\n\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t}\n\n\t\t\tif (output.stopReason === \"pending\") {\n\t\t\t\tthrow new Error(\"Bedrock stream ended without a stop reason\");\n\t\t\t}\n\t\t\tif (output.stopReason === \"error\" || output.stopReason === \"aborted\") {\n\t\t\t\tthrow new Error(output.errorMessage || \"An unknown error occurred\");\n\t\t\t}\n\n\t\t\tstream.push({ type: \"done\", reason: output.stopReason, message: output });\n\t\t\tstream.end();\n\t\t} catch (error) {\n\t\t\tfor (const block of output.content) {\n\t\t\t\tdelete (block as Block).index;\n\t\t\t\t// partialJson is only a streaming scratch buffer; never persist it.\n\t\t\t\tdelete (block as Block).partialJson;\n\t\t\t}\n\t\t\toutput.stopReason = options.signal?.aborted ? \"aborted\" : \"error\";\n\t\t\toutput.errorMessage = formatBedrockError(error);\n\t\t\tif (output.stopReason === \"error\") {\n\t\t\t\tappendBedrockFailureDiagnostic(output, error, responseRequestId);\n\t\t\t}\n\t\t\tstream.push({ type: \"error\", reason: output.stopReason, error: output });\n\t\t\tstream.end();\n\t\t}\n\t})();\n\n\treturn stream;\n};\n\n/**\n * Human-readable prefixes for Bedrock SDK exception names.\n * The downstream retry logic in agent-session matches patterns like\n * `server.?error` and `service.?unavailable`, so we preserve the legacy\n * prefix format rather than using the raw SDK exception name.\n */\nconst BEDROCK_ERROR_PREFIXES: Record<string, string> = {\n\tInternalServerException: \"Internal server error\",\n\tModelStreamErrorException: \"Model stream error\",\n\tValidationException: \"Validation error\",\n\tThrottlingException: \"Throttling error\",\n\tServiceUnavailableException: \"Service unavailable\",\n};\n\n/**\n * Some models reject the account/profile's configured Bedrock data retention mode\n * (e.g. \"data retention mode 'default' is not available for this model\"). Point\n * users at the AWS docs explaining how to configure a supported mode.\n */\nconst BEDROCK_DATA_RETENTION_DOCS_URL = \"https://docs.aws.amazon.com/bedrock/latest/userguide/data-retention.html\";\n\n/**\n * Format a Bedrock error with a human-readable prefix.\n * AWS SDK exceptions (both from `client.send()` and from stream event items)\n * extend BedrockRuntimeServiceException. We map the `.name` to a stable\n * human-readable prefix so downstream consumers (retry logic, context-overflow\n * detection) can distinguish error categories via simple string matching.\n */\nfunction formatBedrockError(error: unknown): string {\n\tconst norm = normalizeProviderError(error);\n\t// Surface the raw HTTP body (with status) when the SDK did not fold it into\n\t// the message; otherwise fall back to the message. This is what stops a\n\t// gateway 403 from collapsing to `Unknown: UnknownError`.\n\tconst core =\n\t\t!norm.messageCarriesBody && norm.status !== undefined && norm.body !== undefined\n\t\t\t? `${norm.status}: ${norm.body}`\n\t\t\t: norm.message;\n\tconst dataRetentionHint = /data retention mode/i.test(core)\n\t\t? ` See ${BEDROCK_DATA_RETENTION_DOCS_URL} for supported data retention modes.`\n\t\t: \"\";\n\tif (error instanceof BedrockRuntimeServiceException) {\n\t\tconst prefix = BEDROCK_ERROR_PREFIXES[error.name] ?? error.name;\n\t\treturn `${prefix}: ${core}${dataRetentionHint}`;\n\t}\n\treturn `${core}${dataRetentionHint}`;\n}\n\ntype SdkErrorMetadata = { $metadata?: { httpStatusCode?: unknown; requestId?: unknown } };\n\n/** Over-long header values are dropped rather than truncated: a truncated request id is not a request id. */\nconst MAX_BEDROCK_DIAGNOSTIC_VALUE_CHARS = 200;\n\nfunction normalizeDiagnosticValue(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0 || trimmed.length > MAX_BEDROCK_DIAGNOSTIC_VALUE_CHARS) return undefined;\n\treturn trimmed;\n}\n\n/**\n * The SDK puts the modeled code on `error.name` for service exceptions and unmodeled stream errors alike, so\n * do not narrow to `BedrockRuntimeServiceException`. Modeled Bedrock errors all end in `Exception`, unlike\n * transport names such as `TimeoutError`.\n */\nfunction extractBedrockErrorCode(error: unknown): string | undefined {\n\tif (!(error instanceof Error) || !error.name.endsWith(\"Exception\")) return undefined;\n\treturn normalizeDiagnosticValue(error.name);\n}\n\n/**\n * Structured metadata alongside `errorMessage`, which stays byte-identical because `isRetryableAssistantError`\n * matches against it. Unknown fields are omitted, never guessed: a modeled mid-stream exception reaches us as\n * a bare object literal, leaving only `fallbackRequestId`. `details` only, as the throw is not always `Error`.\n */\nfunction appendBedrockFailureDiagnostic(\n\toutput: AssistantMessage,\n\terror: unknown,\n\tfallbackRequestId: string | undefined,\n): void {\n\tconst metadata = (error as SdkErrorMetadata)?.$metadata;\n\tconst details: Record<string, unknown> = {};\n\n\tif (typeof metadata?.httpStatusCode === \"number\") details.status = metadata.httpStatusCode;\n\n\tconst errorCode = extractBedrockErrorCode(error);\n\tif (errorCode !== undefined) details.errorCode = errorCode;\n\n\tconst requestId = normalizeDiagnosticValue(metadata?.requestId) ?? fallbackRequestId;\n\tif (requestId !== undefined) details.requestId = requestId;\n\n\tif (Object.keys(details).length === 0) return;\n\n\tappendAssistantMessageDiagnostic(output, { type: \"bedrock_response_failure\", timestamp: Date.now(), details });\n}\n\n/**\n * Header keys that must never be overwritten by caller-supplied headers.\n * `host` and `x-amz-*` participate in the SigV4 canonical request; `authorization`\n * is owned by SigV4 or the bearer-token path (config.token + authSchemePreference).\n * Compared case-insensitively (caller key is lower-cased before lookup).\n */\nconst RESERVED_HEADER_EXACT = new Set([\"authorization\", \"host\"]);\n\nfunction isReservedHeader(key: string): boolean {\n\tconst lower = key.toLowerCase();\n\treturn lower.startsWith(\"x-amz-\") || RESERVED_HEADER_EXACT.has(lower);\n}\n\n/**\n * Attach caller-supplied headers to the outgoing Bedrock request via a Smithy\n * `build`-step middleware. The `build` step runs after request serialisation but\n * before SigV4 signing, so injected headers are covered by the signature. Reserved\n * SigV4 / auth headers (`x-amz-*`, `authorization`, `host`) are silently skipped;\n * all other caller headers override any existing same-named header on the request.\n */\nfunction addCustomHeadersMiddleware(client: BedrockRuntimeClient, headers: Record<string, string>): void {\n\tconst middleware: BuildMiddleware<object, MetadataBearer> = (next) => async (args) => {\n\t\tconst request = args.request;\n\t\tif (request && typeof request === \"object\" && \"headers\" in request) {\n\t\t\tconst requestHeaders = (request as { headers: Record<string, string> }).headers;\n\t\t\tfor (const [key, value] of Object.entries(headers)) {\n\t\t\t\tif (!isReservedHeader(key)) {\n\t\t\t\t\trequestHeaders[key] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn next(args);\n\t};\n\tclient.middlewareStack.add(middleware, { step: \"build\", name: \"pi-ai-custom-headers\", priority: \"low\" });\n}\n\nexport const streamSimple: StreamFunction<\"bedrock-converse-stream\", SimpleStreamOptions> = (\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream => {\n\tconst base = buildBaseOptions(model, context, options, undefined);\n\tif (!options?.reasoning) {\n\t\treturn stream(model, context, { ...base, reasoning: undefined } satisfies BedrockOptions);\n\t}\n\n\tif (isAnthropicClaudeModel(model)) {\n\t\tif (supportsAdaptiveThinking(model.id, model.name)) {\n\t\t\treturn stream(model, context, {\n\t\t\t\t...base,\n\t\t\t\treasoning: options.reasoning,\n\t\t\t\tthinkingBudgets: options.thinkingBudgets,\n\t\t\t} satisfies BedrockOptions);\n\t\t}\n\n\t\t// Undefined means the caller did not request an output cap; let the helper use the model cap.\n\t\t// Do not coerce to 0 here, or the thinking budget would become the entire maxTokens value.\n\t\tconst adjusted = adjustMaxTokensForThinking(\n\t\t\tbase.maxTokens,\n\t\t\tmodel.maxTokens,\n\t\t\toptions.reasoning,\n\t\t\toptions.thinkingBudgets,\n\t\t);\n\n\t\tconst maxTokens = clampMaxTokensToContext(model, context, adjusted.maxTokens);\n\n\t\treturn stream(model, context, {\n\t\t\t...base,\n\t\t\tmaxTokens,\n\t\t\treasoning: options.reasoning,\n\t\t\tthinkingBudgets: {\n\t\t\t\t...(options.thinkingBudgets || {}),\n\t\t\t\t[clampReasoning(options.reasoning)!]: Math.min(adjusted.thinkingBudget, Math.max(0, maxTokens - 1024)),\n\t\t\t},\n\t\t} satisfies BedrockOptions);\n\t}\n\n\treturn stream(model, context, {\n\t\t...base,\n\t\treasoning: options.reasoning,\n\t\tthinkingBudgets: options.thinkingBudgets,\n\t} satisfies BedrockOptions);\n};\n\nfunction handleContentBlockStart(\n\tevent: ContentBlockStartEvent,\n\tblocks: Block[],\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n): void {\n\tconst index = event.contentBlockIndex!;\n\tconst start = event.start;\n\n\tif (start?.toolUse) {\n\t\tconst block: Block = {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: start.toolUse.toolUseId || \"\",\n\t\t\tname: start.toolUse.name || \"\",\n\t\t\targuments: {},\n\t\t\tpartialJson: \"\",\n\t\t\tindex,\n\t\t};\n\t\toutput.content.push(block);\n\t\tstream.push({ type: \"toolcall_start\", contentIndex: blocks.length - 1, partial: output });\n\t}\n}\n\nfunction handleContentBlockDelta(\n\tevent: ContentBlockDeltaEvent,\n\tblocks: Block[],\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n): void {\n\tconst contentBlockIndex = event.contentBlockIndex!;\n\tconst delta = event.delta;\n\tlet index = blocks.findIndex((b) => b.index === contentBlockIndex);\n\tlet block = blocks[index];\n\n\tif (delta?.text !== undefined) {\n\t\t// If no text block exists yet, create one, as `handleContentBlockStart` is not sent for text blocks\n\t\tif (!block) {\n\t\t\tconst newBlock: Block = { type: \"text\", text: \"\", index: contentBlockIndex };\n\t\t\toutput.content.push(newBlock);\n\t\t\tindex = blocks.length - 1;\n\t\t\tblock = blocks[index];\n\t\t\tstream.push({ type: \"text_start\", contentIndex: index, partial: output });\n\t\t}\n\t\tif (block.type === \"text\") {\n\t\t\tblock.text += delta.text;\n\t\t\tstream.push({ type: \"text_delta\", contentIndex: index, delta: delta.text, partial: output });\n\t\t}\n\t} else if (delta?.toolUse && block?.type === \"toolCall\") {\n\t\tblock.partialJson = (block.partialJson || \"\") + (delta.toolUse.input || \"\");\n\t\tblock.arguments = parseStreamingJson(block.partialJson);\n\t\tstream.push({ type: \"toolcall_delta\", contentIndex: index, delta: delta.toolUse.input || \"\", partial: output });\n\t} else if (delta?.reasoningContent) {\n\t\tlet thinkingBlock = block;\n\t\tlet thinkingIndex = index;\n\n\t\tif (!thinkingBlock) {\n\t\t\tconst newBlock: Block = { type: \"thinking\", thinking: \"\", thinkingSignature: \"\", index: contentBlockIndex };\n\t\t\toutput.content.push(newBlock);\n\t\t\tthinkingIndex = blocks.length - 1;\n\t\t\tthinkingBlock = blocks[thinkingIndex];\n\t\t\tstream.push({ type: \"thinking_start\", contentIndex: thinkingIndex, partial: output });\n\t\t}\n\n\t\tif (thinkingBlock?.type === \"thinking\") {\n\t\t\tif (delta.reasoningContent.text) {\n\t\t\t\tthinkingBlock.thinking += delta.reasoningContent.text;\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\tcontentIndex: thinkingIndex,\n\t\t\t\t\tdelta: delta.reasoningContent.text,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (delta.reasoningContent.signature) {\n\t\t\t\tthinkingBlock.thinkingSignature =\n\t\t\t\t\t(thinkingBlock.thinkingSignature || \"\") + delta.reasoningContent.signature;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction handleMetadata(\n\tevent: ConverseStreamMetadataEvent,\n\tmodel: Model<\"bedrock-converse-stream\">,\n\toutput: AssistantMessage,\n): void {\n\tif (event.usage) {\n\t\toutput.usage.input = event.usage.inputTokens || 0;\n\t\toutput.usage.output = event.usage.outputTokens || 0;\n\t\toutput.usage.cacheRead = event.usage.cacheReadInputTokens || 0;\n\t\toutput.usage.cacheWrite = event.usage.cacheWriteInputTokens || 0;\n\t\toutput.usage.totalTokens = event.usage.totalTokens || output.usage.input + output.usage.output;\n\t\tcalculateCost(model, output.usage);\n\t}\n}\n\nfunction handleContentBlockStop(\n\tevent: ContentBlockStopEvent,\n\tblocks: Block[],\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n): void {\n\tconst index = blocks.findIndex((b) => b.index === event.contentBlockIndex);\n\tconst block = blocks[index];\n\tif (!block) return;\n\tdelete (block as Block).index;\n\n\tswitch (block.type) {\n\t\tcase \"text\":\n\t\t\tstream.push({ type: \"text_end\", contentIndex: index, content: block.text, partial: output });\n\t\t\tbreak;\n\t\tcase \"thinking\":\n\t\t\tstream.push({ type: \"thinking_end\", contentIndex: index, content: block.thinking, partial: output });\n\t\t\tbreak;\n\t\tcase \"toolCall\":\n\t\t\tblock.arguments = parseStreamingJson(block.partialJson);\n\t\t\t// Finalize in-place and strip the scratch buffer so replay only\n\t\t\t// carries parsed arguments.\n\t\t\tdelete (block as Block).partialJson;\n\t\t\tstream.push({ type: \"toolcall_end\", contentIndex: index, toolCall: block, partial: output });\n\t\t\tbreak;\n\t}\n}\n\n/**\n * Check if the model supports adaptive thinking (Opus 4.6+, Sonnet 4.6).\n * Checks both model ID and model name to support application inference profiles\n * whose ARNs don't contain the model name.\n */\nfunction getModelMatchCandidates(modelId: string, modelName?: string): string[] {\n\tconst values = modelName ? [modelId, modelName] : [modelId];\n\treturn values.flatMap((value) => {\n\t\tconst lower = value.toLowerCase();\n\t\treturn [lower, lower.replace(/[\\s_.:]+/g, \"-\")];\n\t});\n}\n\nfunction supportsAdaptiveThinking(modelId: string, modelName?: string): boolean {\n\tconst candidates = getModelMatchCandidates(modelId, modelName);\n\treturn candidates.some(\n\t\t(s) =>\n\t\t\ts.includes(\"opus-4-6\") ||\n\t\t\ts.includes(\"opus-4-7\") ||\n\t\t\ts.includes(\"opus-4-8\") ||\n\t\t\ts.includes(\"opus-5\") ||\n\t\t\ts.includes(\"sonnet-4-6\") ||\n\t\t\ts.includes(\"sonnet-5\") ||\n\t\t\ts.includes(\"fable-5\"),\n\t);\n}\n\nfunction supportsNativeXhighEffort(model: Model<\"bedrock-converse-stream\">): boolean {\n\tconst candidates = getModelMatchCandidates(model.id, model.name);\n\treturn candidates.some(\n\t\t(s) =>\n\t\t\ts.includes(\"opus-4-7\") ||\n\t\t\ts.includes(\"opus-4-8\") ||\n\t\t\ts.includes(\"opus-5\") ||\n\t\t\ts.includes(\"sonnet-5\") ||\n\t\t\ts.includes(\"fable-5\"),\n\t);\n}\n\nfunction mapThinkingLevelToEffort(\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tlevel: SimpleStreamOptions[\"reasoning\"],\n): \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\" {\n\tif (level === \"xhigh\" && supportsNativeXhighEffort(model)) return \"xhigh\";\n\n\tconst mapped = level ? model.thinkingLevelMap?.[level] : undefined;\n\tif (typeof mapped === \"string\") return mapped as \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\n\tswitch (level) {\n\t\tcase \"minimal\":\n\t\tcase \"low\":\n\t\t\treturn \"low\";\n\t\tcase \"medium\":\n\t\t\treturn \"medium\";\n\t\tcase \"high\":\n\t\t\treturn \"high\";\n\t\tdefault:\n\t\t\treturn \"high\";\n\t}\n}\n\n/**\n * Resolve cache retention preference.\n * Defaults to \"short\" and uses PI_CACHE_RETENTION for backward compatibility.\n */\nfunction resolveCacheRetention(cacheRetention?: CacheRetention, env?: ProviderEnv): CacheRetention {\n\tif (cacheRetention) {\n\t\treturn cacheRetention;\n\t}\n\tif (getProviderEnvValue(\"PI_CACHE_RETENTION\", env) === \"long\") {\n\t\treturn \"long\";\n\t}\n\treturn \"short\";\n}\n\n/**\n * Check if the model is an Anthropic Claude model on Bedrock.\n * Checks both model ID and model name to support application inference profiles\n * whose ARNs don't contain the model name.\n */\nfunction isAnthropicClaudeModel(model: Model<\"bedrock-converse-stream\">): boolean {\n\tconst id = model.id.toLowerCase();\n\tconst name = model.name?.toLowerCase() ?? \"\";\n\treturn (\n\t\tid.includes(\"anthropic.claude\") ||\n\t\tid.includes(\"anthropic/claude\") ||\n\t\tname.includes(\"anthropic.claude\") ||\n\t\tname.includes(\"anthropic/claude\") ||\n\t\tname.includes(\"claude\")\n\t);\n}\n\n/**\n * Check if the model supports prompt caching.\n * Supported: Claude 3.5 Haiku, Claude 3.7 Sonnet, Claude 4.x models, Claude 5 models\n *\n * For base models and system-defined inference profiles the model ID / ARN\n * contains the model name, so we can decide locally.\n *\n * For application inference profiles (whose ARNs don't contain the model name),\n * also checks model.name which is user-controlled via models.json or registerProvider.\n * As a last resort, set AWS_BEDROCK_FORCE_CACHE=1 to enable cache points.\n * Amazon Nova models have automatic caching and don't need explicit cache points.\n */\nfunction supportsPromptCaching(model: Model<\"bedrock-converse-stream\">, env?: ProviderEnv): boolean {\n\tconst candidates = getModelMatchCandidates(model.id, model.name);\n\n\tconst hasClaudeRef = candidates.some((s) => s.includes(\"claude\"));\n\tif (!hasClaudeRef) {\n\t\t// Application inference profiles don't contain the model name in the ARN.\n\t\t// Allow users to force cache points via environment variable.\n\t\tif (getProviderEnvValue(\"AWS_BEDROCK_FORCE_CACHE\", env) === \"1\") return true;\n\t\treturn false;\n\t}\n\t// Claude 5 models (fable-5, opus-5, sonnet-5)\n\tif (candidates.some((s) => s.includes(\"fable-5\") || s.includes(\"opus-5\") || s.includes(\"sonnet-5\"))) return true;\n\t// Claude 4.x models (opus-4, sonnet-4, haiku-4)\n\tif (candidates.some((s) => s.includes(\"-4-\"))) return true;\n\t// Claude 3.7 Sonnet\n\tif (candidates.some((s) => s.includes(\"claude-3-7-sonnet\"))) return true;\n\t// Claude 3.5 Haiku\n\tif (candidates.some((s) => s.includes(\"claude-3-5-haiku\"))) return true;\n\treturn false;\n}\n\n/**\n * Check if the model supports thinking signatures in reasoningContent.\n * Only Anthropic Claude models support the signature field.\n * Other models (OpenAI, Qwen, Minimax, Moonshot, etc.) reject it with:\n * \"This model doesn't support the reasoningContent.reasoningText.signature field\"\n *\n * Checks both model ID and model name to support application inference profiles.\n */\nfunction supportsThinkingSignature(model: Model<\"bedrock-converse-stream\">): boolean {\n\treturn isAnthropicClaudeModel(model);\n}\n\nfunction buildSystemPrompt(\n\tsystemPrompt: string | undefined,\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tcacheRetention: CacheRetention,\n\tenv?: ProviderEnv,\n): SystemContentBlock[] | undefined {\n\tif (!systemPrompt) return undefined;\n\n\tconst blocks: SystemContentBlock[] = [{ text: sanitizeSurrogates(systemPrompt) }];\n\n\t// Add cache point for supported Claude models when caching is enabled\n\tif (cacheRetention !== \"none\" && supportsPromptCaching(model, env)) {\n\t\tblocks.push({\n\t\t\tcachePoint: { type: CachePointType.DEFAULT, ...(cacheRetention === \"long\" ? { ttl: CacheTTL.ONE_HOUR } : {}) },\n\t\t});\n\t}\n\n\treturn blocks;\n}\n\nfunction normalizeToolCallId(id: string): string {\n\tconst sanitized = id.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\treturn sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;\n}\n\nfunction createNonBlankTextBlock(text: string): ContentBlock.TextMember | undefined {\n\tconst sanitized = sanitizeSurrogates(text);\n\treturn sanitized.trim().length === 0 ? undefined : { text: sanitized };\n}\n\nfunction createRequiredTextBlock(text: string): ContentBlock.TextMember {\n\treturn createNonBlankTextBlock(text) ?? { text: EMPTY_TEXT_PLACEHOLDER };\n}\n\nfunction sanitizeBedrockDocument(value: DocumentType): DocumentType {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(sanitizeBedrockDocument);\n\t}\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(value)\n\t\t\t\t.filter(([key]) => key.length > 0)\n\t\t\t\t.map(([key, nestedValue]) => [key, sanitizeBedrockDocument(nestedValue)]),\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction convertToolResultContent(content: (TextContent | ImageContent)[]): ToolResultContentBlock[] {\n\tconst result: ToolResultContentBlock[] = [];\n\tfor (const c of content) {\n\t\tif (c.type === \"image\") {\n\t\t\tresult.push({ image: createImageBlock(c.mimeType, c.data) });\n\t\t} else {\n\t\t\tconst textBlock = createNonBlankTextBlock(c.text);\n\t\t\tif (textBlock) result.push(textBlock);\n\t\t}\n\t}\n\tif (result.length === 0) result.push({ text: EMPTY_TEXT_PLACEHOLDER });\n\treturn result;\n}\n\nfunction convertMessages(\n\tcontext: Context,\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tcacheRetention: CacheRetention,\n\tenv?: ProviderEnv,\n): Message[] {\n\tconst result: Message[] = [];\n\tconst transformedMessages = transformMessages(context.messages, model, normalizeToolCallId);\n\n\tfor (let i = 0; i < transformedMessages.length; i++) {\n\t\tconst m = transformedMessages[i];\n\n\t\tswitch (m.role) {\n\t\t\tcase \"user\": {\n\t\t\t\tconst content: ContentBlock[] = [];\n\t\t\t\tif (typeof m.content === \"string\") {\n\t\t\t\t\tcontent.push(createRequiredTextBlock(m.content));\n\t\t\t\t} else {\n\t\t\t\t\tfor (const c of m.content) {\n\t\t\t\t\t\tswitch (c.type) {\n\t\t\t\t\t\t\tcase \"text\": {\n\t\t\t\t\t\t\t\tconst textBlock = createNonBlankTextBlock(c.text);\n\t\t\t\t\t\t\t\tif (textBlock) content.push(textBlock);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"image\":\n\t\t\t\t\t\t\t\tcontent.push({ image: createImageBlock(c.mimeType, c.data) });\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (content.length === 0) content.push({ text: EMPTY_TEXT_PLACEHOLDER });\n\t\t\t\t}\n\t\t\t\tresult.push({\n\t\t\t\t\trole: ConversationRole.USER,\n\t\t\t\t\tcontent,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\t// Skip assistant messages with empty content (e.g., from aborted requests)\n\t\t\t\t// Bedrock rejects messages with empty content arrays\n\t\t\t\tif (m.content.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst contentBlocks: ContentBlock[] = [];\n\t\t\t\tfor (const c of m.content) {\n\t\t\t\t\tswitch (c.type) {\n\t\t\t\t\t\tcase \"text\": {\n\t\t\t\t\t\t\t// Skip empty text blocks\n\t\t\t\t\t\t\tconst textBlock = createNonBlankTextBlock(c.text);\n\t\t\t\t\t\t\tif (!textBlock) continue;\n\t\t\t\t\t\t\tcontentBlocks.push(textBlock);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"toolCall\":\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttoolUse: { toolUseId: c.id, name: c.name, input: sanitizeBedrockDocument(c.arguments) },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"thinking\": {\n\t\t\t\t\t\t\t// Skip empty thinking blocks\n\t\t\t\t\t\t\tconst thinking = sanitizeSurrogates(c.thinking);\n\t\t\t\t\t\t\tif (thinking.trim().length === 0) continue;\n\t\t\t\t\t\t\t// Only Anthropic models support the signature field in reasoningText.\n\t\t\t\t\t\t\t// For other models, we omit the signature to avoid errors like:\n\t\t\t\t\t\t\t// \"This model doesn't support the reasoningContent.reasoningText.signature field\"\n\t\t\t\t\t\t\tif (supportsThinkingSignature(model)) {\n\t\t\t\t\t\t\t\t// Signatures arrive after thinking deltas. If a partial or externally\n\t\t\t\t\t\t\t\t// persisted message lacks a signature, Bedrock rejects the replayed\n\t\t\t\t\t\t\t\t// reasoning block. Fall back to plain text, matching Anthropic.\n\t\t\t\t\t\t\t\tif (!c.thinkingSignature || c.thinkingSignature.trim().length === 0) {\n\t\t\t\t\t\t\t\t\tcontentBlocks.push({ text: thinking });\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\t\t\treasoningContent: {\n\t\t\t\t\t\t\t\t\t\t\treasoningText: {\n\t\t\t\t\t\t\t\t\t\t\t\ttext: thinking,\n\t\t\t\t\t\t\t\t\t\t\t\tsignature: c.thinkingSignature,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\t\treasoningContent: {\n\t\t\t\t\t\t\t\t\t\treasoningText: { text: thinking },\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Skip if all content blocks were filtered out\n\t\t\t\tif (contentBlocks.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tresult.push({\n\t\t\t\t\trole: ConversationRole.ASSISTANT,\n\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Collect all consecutive toolResult messages into a single user message\n\t\t\t\t// Bedrock requires all tool results to be in one message\n\t\t\t\tconst toolResults: ContentBlock.ToolResultMember[] = [];\n\n\t\t\t\t// Add current tool result with all content blocks combined\n\t\t\t\ttoolResults.push({\n\t\t\t\t\ttoolResult: {\n\t\t\t\t\t\ttoolUseId: m.toolCallId,\n\t\t\t\t\t\tcontent: convertToolResultContent(m.content),\n\t\t\t\t\t\tstatus: m.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\t// Look ahead for consecutive toolResult messages\n\t\t\t\tlet j = i + 1;\n\t\t\t\twhile (j < transformedMessages.length && transformedMessages[j].role === \"toolResult\") {\n\t\t\t\t\tconst nextMsg = transformedMessages[j] as ToolResultMessage;\n\t\t\t\t\ttoolResults.push({\n\t\t\t\t\t\ttoolResult: {\n\t\t\t\t\t\t\ttoolUseId: nextMsg.toolCallId,\n\t\t\t\t\t\t\tcontent: convertToolResultContent(nextMsg.content),\n\t\t\t\t\t\t\tstatus: nextMsg.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\t// Skip the messages we've already processed\n\t\t\t\ti = j - 1;\n\n\t\t\t\tresult.push({\n\t\t\t\t\trole: ConversationRole.USER,\n\t\t\t\t\tcontent: toolResults,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tcontinue;\n\t\t}\n\t}\n\n\t// Add cache point to the last user message for supported Claude models when caching is enabled\n\tif (cacheRetention !== \"none\" && supportsPromptCaching(model, env) && result.length > 0) {\n\t\tconst lastMessage = result[result.length - 1];\n\t\tif (lastMessage.role === ConversationRole.USER && lastMessage.content) {\n\t\t\t(lastMessage.content as ContentBlock[]).push({\n\t\t\t\tcachePoint: {\n\t\t\t\t\ttype: CachePointType.DEFAULT,\n\t\t\t\t\t...(cacheRetention === \"long\" ? { ttl: CacheTTL.ONE_HOUR } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction convertToolConfig(\n\ttools: Tool[] | undefined,\n\ttoolChoice: BedrockOptions[\"toolChoice\"],\n\tsupportsStrictMode: boolean,\n): ToolConfiguration | undefined {\n\tif (!tools?.length) return undefined;\n\tif (toolChoice === \"none\") return undefined;\n\n\tconst bedrockTools: BedrockTool[] = tools.map((tool) => {\n\t\tconst strict = resolveJsonSchemaStrictSampling(tool, supportsStrictMode);\n\t\treturn {\n\t\t\ttoolSpec: {\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tinputSchema: { json: getJsonSchemaToolParameters(tool, strict) as unknown as DocumentType },\n\t\t\t\t...(strict === true ? { strict: true } : {}),\n\t\t\t},\n\t\t};\n\t});\n\n\tlet bedrockToolChoice: ToolChoice | undefined;\n\tswitch (toolChoice) {\n\t\tcase \"auto\":\n\t\t\tbedrockToolChoice = { auto: {} };\n\t\t\tbreak;\n\t\tcase \"any\":\n\t\t\tbedrockToolChoice = { any: {} };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tif (toolChoice?.type === \"tool\") {\n\t\t\t\tbedrockToolChoice = { tool: { name: toolChoice.name } };\n\t\t\t}\n\t}\n\n\treturn { tools: bedrockTools, toolChoice: bedrockToolChoice };\n}\n\nfunction mapStopReason(reason: string | undefined): { stopReason: StopReason; errorMessage?: string } {\n\tswitch (reason) {\n\t\tcase BedrockStopReason.END_TURN:\n\t\tcase BedrockStopReason.STOP_SEQUENCE:\n\t\t\treturn { stopReason: \"stop\" };\n\t\tcase BedrockStopReason.MAX_TOKENS:\n\t\tcase BedrockStopReason.MODEL_CONTEXT_WINDOW_EXCEEDED:\n\t\t\treturn { stopReason: \"length\" };\n\t\tcase BedrockStopReason.TOOL_USE:\n\t\t\treturn { stopReason: \"toolUse\" };\n\t\tdefault:\n\t\t\treturn reason\n\t\t\t\t? { stopReason: \"error\", errorMessage: `Provider stopped with: ${reason}` }\n\t\t\t\t: { stopReason: \"error\" };\n\t}\n}\n\nfunction getConfiguredBedrockRegion(options: BedrockOptions): string | undefined {\n\treturn (\n\t\toptions.region ||\n\t\tgetProviderEnvValue(\"AWS_REGION\", options.env) ||\n\t\tgetProviderEnvValue(\"AWS_DEFAULT_REGION\", options.env) ||\n\t\tundefined\n\t);\n}\n\nfunction getConfiguredBedrockCredentials(env?: ProviderEnv): BedrockRuntimeClientConfig[\"credentials\"] | undefined {\n\tconst accessKeyId = getProviderEnvValue(\"AWS_ACCESS_KEY_ID\", env);\n\tconst secretAccessKey = getProviderEnvValue(\"AWS_SECRET_ACCESS_KEY\", env);\n\tif (!accessKeyId || !secretAccessKey) {\n\t\treturn undefined;\n\t}\n\tconst sessionToken = getProviderEnvValue(\"AWS_SESSION_TOKEN\", env);\n\treturn {\n\t\taccessKeyId,\n\t\tsecretAccessKey,\n\t\t...(sessionToken ? { sessionToken } : {}),\n\t};\n}\n\nfunction getStandardBedrockEndpointRegion(baseUrl: string | undefined): string | undefined {\n\tif (!baseUrl) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst { hostname } = new URL(baseUrl);\n\t\tconst match = hostname.toLowerCase().match(/^bedrock-runtime(?:-fips)?\\.([a-z0-9-]+)\\.amazonaws\\.com(?:\\.cn)?$/);\n\t\treturn match?.[1];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction shouldUseExplicitBedrockEndpoint(\n\tbaseUrl: string,\n\tconfiguredRegion: string | undefined,\n\thasAmbientConfiguredProfile: boolean,\n): boolean {\n\tconst endpointRegion = getStandardBedrockEndpointRegion(baseUrl);\n\tif (!endpointRegion) {\n\t\treturn true;\n\t}\n\n\treturn !configuredRegion && !hasAmbientConfiguredProfile;\n}\n\nfunction isGovCloudBedrockTarget(model: Model<\"bedrock-converse-stream\">, options: BedrockOptions): boolean {\n\tconst region = getConfiguredBedrockRegion(options);\n\tif (region?.toLowerCase().startsWith(\"us-gov-\")) {\n\t\treturn true;\n\t}\n\n\tconst modelId = model.id.toLowerCase();\n\treturn modelId.startsWith(\"us-gov.\") || modelId.startsWith(\"arn:aws-us-gov:\");\n}\n\nfunction buildAdditionalModelRequestFields(\n\tmodel: Model<\"bedrock-converse-stream\">,\n\toptions: BedrockOptions,\n): Record<string, any> | undefined {\n\tif (!options.reasoning || !model.reasoning) {\n\t\treturn undefined;\n\t}\n\n\tif (isAnthropicClaudeModel(model)) {\n\t\t// GovCloud Bedrock currently rejects the Claude thinking.display field.\n\t\t// Omit it there until the GovCloud Converse schema catches up.\n\t\tconst display = isGovCloudBedrockTarget(model, options) ? undefined : (options.thinkingDisplay ?? \"summarized\");\n\t\tconst result: Record<string, any> = supportsAdaptiveThinking(model.id, model.name)\n\t\t\t? {\n\t\t\t\t\tthinking: { type: \"adaptive\", ...(display !== undefined ? { display } : {}) },\n\t\t\t\t\toutput_config: { effort: mapThinkingLevelToEffort(model, options.reasoning) },\n\t\t\t\t}\n\t\t\t: (() => {\n\t\t\t\t\tconst defaultBudgets: Record<ThinkingLevel, number> = {\n\t\t\t\t\t\tminimal: 1024,\n\t\t\t\t\t\tlow: 2048,\n\t\t\t\t\t\tmedium: 8192,\n\t\t\t\t\t\thigh: 16384,\n\t\t\t\t\t\txhigh: 16384, // Budget-based Claude clamps extended levels to high\n\t\t\t\t\t\tmax: 16384,\n\t\t\t\t\t};\n\n\t\t\t\t\t// Custom budgets only cover token-based levels through high.\n\t\t\t\t\tconst level = options.reasoning === \"xhigh\" || options.reasoning === \"max\" ? \"high\" : options.reasoning;\n\t\t\t\t\tconst budget = options.thinkingBudgets?.[level] ?? defaultBudgets[options.reasoning];\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tthinking: {\n\t\t\t\t\t\t\ttype: \"enabled\",\n\t\t\t\t\t\t\tbudget_tokens: budget,\n\t\t\t\t\t\t\t...(display !== undefined ? { display } : {}),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t})();\n\n\t\tif (!supportsAdaptiveThinking(model.id, model.name) && (options.interleavedThinking ?? true)) {\n\t\t\tresult.anthropic_beta = [\"interleaved-thinking-2025-05-14\"];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\treturn undefined;\n}\n\nfunction createImageBlock(mimeType: string, data: string) {\n\tlet format: ImageFormat;\n\tswitch (mimeType) {\n\t\tcase \"image/jpeg\":\n\t\tcase \"image/jpg\":\n\t\t\tformat = ImageFormat.JPEG;\n\t\t\tbreak;\n\t\tcase \"image/png\":\n\t\t\tformat = ImageFormat.PNG;\n\t\t\tbreak;\n\t\tcase \"image/gif\":\n\t\t\tformat = ImageFormat.GIF;\n\t\t\tbreak;\n\t\tcase \"image/webp\":\n\t\t\tformat = ImageFormat.WEBP;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown image type: ${mimeType}`);\n\t}\n\n\tconst binaryString = atob(data);\n\tconst bytes = new Uint8Array(binaryString.length);\n\tfor (let i = 0; i < binaryString.length; i++) {\n\t\tbytes[i] = binaryString.charCodeAt(i);\n\t}\n\n\treturn { source: { bytes }, format };\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { ProviderStreams } from "../types.ts";
2
+ /**
3
+ * Overrides the dynamically imported bedrock implementation. Used by the Bun
4
+ * binary build, where the variable-specifier import cannot be bundled; the
5
+ * build registers a statically imported module instead.
6
+ */
7
+ export declare function setBedrockProviderModule(module: ProviderStreams): void;
8
+ export declare const bedrockConverseStreamApi: () => ProviderStreams;
9
+ //# sourceMappingURL=bedrock-converse-stream.lazy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock-converse-stream.lazy.d.ts","sourceRoot":"","sources":["../../src/api/bedrock-converse-stream.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAgBnD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAEtE;AAED,eAAO,MAAM,wBAAwB,uBAInC,CAAC","sourcesContent":["import type { ProviderStreams } from \"../types.ts\";\nimport { lazyApi } from \"./lazy.ts\";\n\n/**\n * Loads the bedrock implementation through a variable specifier so bundlers\n * (browser smoke, Bun compile) cannot follow the import into the Node-only\n * AWS SDK. The `.ts`/`.js` rewrite keeps the trick working from both source\n * and built output.\n */\nconst importNodeOnlyApi = (specifier: string): Promise<unknown> => {\n\tconst runtimeSpecifier = import.meta.url.endsWith(\".js\") ? specifier.replace(/\\.ts$/, \".js\") : specifier;\n\treturn import(runtimeSpecifier);\n};\n\nlet bedrockModuleOverride: ProviderStreams | undefined;\n\n/**\n * Overrides the dynamically imported bedrock implementation. Used by the Bun\n * binary build, where the variable-specifier import cannot be bundled; the\n * build registers a statically imported module instead.\n */\nexport function setBedrockProviderModule(module: ProviderStreams): void {\n\tbedrockModuleOverride = module;\n}\n\nexport const bedrockConverseStreamApi = (): ProviderStreams =>\n\tlazyApi(\n\t\tasync () =>\n\t\t\tbedrockModuleOverride ?? ((await importNodeOnlyApi(\"./bedrock-converse-stream.ts\")) as ProviderStreams),\n\t);\n"]}
@@ -0,0 +1,30 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { lazyApi } from "./lazy.js";
10
+ /**
11
+ * Loads the bedrock implementation through a variable specifier so bundlers
12
+ * (browser smoke, Bun compile) cannot follow the import into the Node-only
13
+ * AWS SDK. The `.ts`/`.js` rewrite keeps the trick working from both source
14
+ * and built output.
15
+ */
16
+ const importNodeOnlyApi = (specifier) => {
17
+ const runtimeSpecifier = import.meta.url.endsWith(".js") ? specifier.replace(/\.ts$/, ".js") : specifier;
18
+ return import(__rewriteRelativeImportExtension(runtimeSpecifier));
19
+ };
20
+ let bedrockModuleOverride;
21
+ /**
22
+ * Overrides the dynamically imported bedrock implementation. Used by the Bun
23
+ * binary build, where the variable-specifier import cannot be bundled; the
24
+ * build registers a statically imported module instead.
25
+ */
26
+ export function setBedrockProviderModule(module) {
27
+ bedrockModuleOverride = module;
28
+ }
29
+ export const bedrockConverseStreamApi = () => lazyApi(async () => bedrockModuleOverride ?? (await importNodeOnlyApi("./bedrock-converse-stream.ts")));
30
+ //# sourceMappingURL=bedrock-converse-stream.lazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock-converse-stream.lazy.js","sourceRoot":"","sources":["../../src/api/bedrock-converse-stream.lazy.ts"],"names":[],"mappings":";;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAoB,EAAE,CAAC;IAClE,MAAM,gBAAgB,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,OAAO,MAAM,kCAAC,gBAAgB,EAAC,CAAC;AAAA,CAChC,CAAC;AAEF,IAAI,qBAAkD,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAuB,EAAQ;IACvE,qBAAqB,GAAG,MAAM,CAAC;AAAA,CAC/B;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAoB,EAAE,CAC7D,OAAO,CACN,KAAK,IAAI,EAAE,CACV,qBAAqB,IAAK,CAAC,MAAM,iBAAiB,CAAC,8BAA8B,CAAC,CAAqB,CACxG,CAAC","sourcesContent":["import type { ProviderStreams } from \"../types.ts\";\nimport { lazyApi } from \"./lazy.ts\";\n\n/**\n * Loads the bedrock implementation through a variable specifier so bundlers\n * (browser smoke, Bun compile) cannot follow the import into the Node-only\n * AWS SDK. The `.ts`/`.js` rewrite keeps the trick working from both source\n * and built output.\n */\nconst importNodeOnlyApi = (specifier: string): Promise<unknown> => {\n\tconst runtimeSpecifier = import.meta.url.endsWith(\".js\") ? specifier.replace(/\\.ts$/, \".js\") : specifier;\n\treturn import(runtimeSpecifier);\n};\n\nlet bedrockModuleOverride: ProviderStreams | undefined;\n\n/**\n * Overrides the dynamically imported bedrock implementation. Used by the Bun\n * binary build, where the variable-specifier import cannot be bundled; the\n * build registers a statically imported module instead.\n */\nexport function setBedrockProviderModule(module: ProviderStreams): void {\n\tbedrockModuleOverride = module;\n}\n\nexport const bedrockConverseStreamApi = (): ProviderStreams =>\n\tlazyApi(\n\t\tasync () =>\n\t\t\tbedrockModuleOverride ?? ((await importNodeOnlyApi(\"./bedrock-converse-stream.ts\")) as ProviderStreams),\n\t);\n"]}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * AI Gateway transport over the Workers AI binding.
3
+ *
4
+ * pi's Cloudflare AI Gateway support speaks HTTPS
5
+ * (`gateway.ai.cloudflare.com/v1/{account}/{gateway}/{provider}/...`, see `api/cloudflare.ts`),
6
+ * which needs a Cloudflare API token even when the caller is a Worker in the gateway's own
7
+ * account.
8
+ *
9
+ * In order to solve for this problem, `createGatewayBindingFetch` returns a {@link FetchFunction}
10
+ * that translates requests under a gateway HTTPS prefix into calls to the Workers AI binding's
11
+ * universal endpoint, `env.AI.gateway(id).run({provider, endpoint, headers, query})`.
12
+ * Binding calls are pre-authenticated in-account and return the provider's native wire format as a
13
+ * regular (streaming) `Response`, so API implementations behave identically over either
14
+ * transport.
15
+ *
16
+ * The result is the transport for one gateway-bound client, not a general-purpose fetch:
17
+ * requests it cannot serve — URLs outside the prefix, or in-prefix requests the universal
18
+ * endpoint cannot express (non-POST, non-JSON body) — reject with a descriptive error.
19
+ * Transport selection is the caller's job, per client: route such traffic over HTTPS with
20
+ * real gateway auth instead of through this shim.
21
+ */
22
+ import type { FetchFunction } from "../types.ts";
23
+ /**
24
+ * Structural type for the Workers AI binding's gateway surface (`env.AI`), so this
25
+ * module does not depend on `@cloudflare/workers-types`. Any real `Ai` binding satisfies it.
26
+ */
27
+ export interface AiGatewayBinding {
28
+ gateway(id: string): AiGatewayBindingGateway;
29
+ }
30
+ export interface AiGatewayBindingGateway {
31
+ run(data: AiGatewayUniversalRequestLike, options?: {
32
+ signal?: AbortSignal;
33
+ }): Promise<Response>;
34
+ }
35
+ /** One universal-endpoint request entry, as accepted by `AiGateway.run()`. */
36
+ export interface AiGatewayUniversalRequestLike {
37
+ provider: string;
38
+ endpoint: string;
39
+ headers: Record<string, string>;
40
+ query: unknown;
41
+ }
42
+ /**
43
+ * Placeholder value for auth headers on binding-routed requests. API implementations
44
+ * require an API key or a recognized auth header (`authorization`, `x-api-key`,
45
+ * `cf-aig-authorization`) before dispatch; binding calls are pre-authenticated, so pass
46
+ * `cf-aig-authorization: Bearer ${CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL}` to satisfy
47
+ * the check. The shim strips `cf-aig-authorization` before calling the binding. Pair it with
48
+ * `Authorization: null` / `x-api-key: null` so the SDKs' placeholder auth headers never reach
49
+ * the gateway, which would treat a request-supplied auth header as a BYOK provider key that
50
+ * overrides its stored keys — the same as it would over HTTPS.
51
+ */
52
+ export declare const CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL = "cloudflare-gateway-binding";
53
+ export interface GatewayBindingFetchOptions {
54
+ /** The Workers AI binding (e.g. `env.AI`). */
55
+ binding: AiGatewayBinding;
56
+ /**
57
+ * Gateway HTTPS prefix every request must fall under, without a trailing slash:
58
+ * `https://gateway.ai.cloudflare.com/v1/{accountId}/{gatewayName}`.
59
+ */
60
+ baseUrl: string;
61
+ /** Gateway name passed to `binding.gateway()`. Must match the `baseUrl` gateway. */
62
+ gateway: string;
63
+ }
64
+ /**
65
+ * Create a `fetch` that routes AI Gateway requests through the Workers AI binding.
66
+ * See the module docs for behavior and composition notes.
67
+ */
68
+ export declare function createGatewayBindingFetch(options: GatewayBindingFetchOptions): FetchFunction;
69
+ //# sourceMappingURL=cloudflare-gateway-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-gateway-binding.d.ts","sourceRoot":"","sources":["../../src/api/cloudflare-gateway-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACvC,GAAG,CAAC,IAAI,EAAE,6BAA6B,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAChG;AAED,8EAA8E;AAC9E,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wCAAwC,+BAA+B,CAAC;AAErF,MAAM,WAAW,0BAA0B;IAC1C,8CAA8C;IAC9C,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;CAChB;AAQD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,aAAa,CAgE5F","sourcesContent":["/**\n * AI Gateway transport over the Workers AI binding.\n *\n * pi's Cloudflare AI Gateway support speaks HTTPS\n * (`gateway.ai.cloudflare.com/v1/{account}/{gateway}/{provider}/...`, see `api/cloudflare.ts`),\n * which needs a Cloudflare API token even when the caller is a Worker in the gateway's own\n * account.\n *\n * In order to solve for this problem, `createGatewayBindingFetch` returns a {@link FetchFunction}\n * that translates requests under a gateway HTTPS prefix into calls to the Workers AI binding's\n * universal endpoint, `env.AI.gateway(id).run({provider, endpoint, headers, query})`.\n * Binding calls are pre-authenticated in-account and return the provider's native wire format as a\n * regular (streaming) `Response`, so API implementations behave identically over either\n * transport.\n *\n * The result is the transport for one gateway-bound client, not a general-purpose fetch:\n * requests it cannot serve — URLs outside the prefix, or in-prefix requests the universal\n * endpoint cannot express (non-POST, non-JSON body) — reject with a descriptive error.\n * Transport selection is the caller's job, per client: route such traffic over HTTPS with\n * real gateway auth instead of through this shim.\n */\n\nimport type { FetchFunction } from \"../types.ts\";\n\n/**\n * Structural type for the Workers AI binding's gateway surface (`env.AI`), so this\n * module does not depend on `@cloudflare/workers-types`. Any real `Ai` binding satisfies it.\n */\nexport interface AiGatewayBinding {\n\tgateway(id: string): AiGatewayBindingGateway;\n}\n\nexport interface AiGatewayBindingGateway {\n\trun(data: AiGatewayUniversalRequestLike, options?: { signal?: AbortSignal }): Promise<Response>;\n}\n\n/** One universal-endpoint request entry, as accepted by `AiGateway.run()`. */\nexport interface AiGatewayUniversalRequestLike {\n\tprovider: string;\n\tendpoint: string;\n\theaders: Record<string, string>;\n\tquery: unknown;\n}\n\n/**\n * Placeholder value for auth headers on binding-routed requests. API implementations\n * require an API key or a recognized auth header (`authorization`, `x-api-key`,\n * `cf-aig-authorization`) before dispatch; binding calls are pre-authenticated, so pass\n * `cf-aig-authorization: Bearer ${CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL}` to satisfy\n * the check. The shim strips `cf-aig-authorization` before calling the binding. Pair it with\n * `Authorization: null` / `x-api-key: null` so the SDKs' placeholder auth headers never reach\n * the gateway, which would treat a request-supplied auth header as a BYOK provider key that\n * overrides its stored keys — the same as it would over HTTPS.\n */\nexport const CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL = \"cloudflare-gateway-binding\";\n\nexport interface GatewayBindingFetchOptions {\n\t/** The Workers AI binding (e.g. `env.AI`). */\n\tbinding: AiGatewayBinding;\n\t/**\n\t * Gateway HTTPS prefix every request must fall under, without a trailing slash:\n\t * `https://gateway.ai.cloudflare.com/v1/{accountId}/{gatewayName}`.\n\t */\n\tbaseUrl: string;\n\t/** Gateway name passed to `binding.gateway()`. Must match the `baseUrl` gateway. */\n\tgateway: string;\n}\n\n// Never forwarded to the binding: hop-by-hop/derived headers, and gateway auth\n// (binding calls are pre-authenticated; the sentinel must not reach the wire).\nconst STRIP_HEADERS = new Set([\"content-length\", \"host\", \"cf-aig-authorization\"]);\n\ntype FetchInput = Parameters<FetchFunction>[0];\n\n/**\n * Create a `fetch` that routes AI Gateway requests through the Workers AI binding.\n * See the module docs for behavior and composition notes.\n */\nexport function createGatewayBindingFetch(options: GatewayBindingFetchOptions): FetchFunction {\n\tconst { binding, gateway } = options;\n\t// Prefix matching runs on URL-normalized components (origin + pathname), not raw strings:\n\t// dot segments resolve away and fragments drop, matching what real fetch would put on the\n\t// wire, so a lexical variant can't split provider/endpoint differently than HTTPS would.\n\tconst base = new URL(options.baseUrl);\n\tconst basePath = base.pathname.endsWith(\"/\") ? base.pathname : `${base.pathname}/`;\n\n\treturn async (input: FetchInput, init?: RequestInit): Promise<Response> => {\n\t\tconst request = input instanceof Request ? input : undefined;\n\t\tconst url = request ? request.url : input.toString();\n\t\tconst method = (init?.method ?? request?.method ?? \"GET\").toUpperCase();\n\t\tlet parsed: URL | undefined;\n\t\ttry {\n\t\t\tparsed = new URL(url);\n\t\t} catch {\n\t\t\tparsed = undefined;\n\t\t}\n\t\t// Out-of-prefix URLs are a configuration bug, not passthrough traffic: silently\n\t\t// forwarding would ship the auth sentinel to whatever host the URL names.\n\t\tif (parsed === undefined || parsed.origin !== base.origin || !parsed.pathname.startsWith(basePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t`createGatewayBindingFetch: ${method} ${url} is outside the configured gateway ` +\n\t\t\t\t\t`prefix (${base.origin}${basePath}); this fetch only serves its gateway-bound client`,\n\t\t\t);\n\t\t}\n\n\t\t// In-prefix requests the universal endpoint cannot express always reject: forwarding\n\t\t// them over HTTPS would send the sentinel to the gateway and fail with a misleading\n\t\t// auth error instead of naming the real problem. Callers that need such endpoints\n\t\t// route them over HTTPS with real gateway auth themselves.\n\t\tconst unexpressible = (reason: string): never => {\n\t\t\tthrow new Error(\n\t\t\t\t`createGatewayBindingFetch: cannot express ${method} ${url} as a universal ` +\n\t\t\t\t\t`gateway request (${reason}); route it over HTTPS with gateway auth instead`,\n\t\t\t);\n\t\t};\n\t\tif (method !== \"POST\") return unexpressible(\"only POST is supported\");\n\n\t\tconst rest = parsed.pathname.slice(basePath.length);\n\t\tconst slash = rest.indexOf(\"/\");\n\t\tif (slash <= 0) {\n\t\t\treturn unexpressible(\"missing provider/endpoint path\");\n\t\t}\n\t\tconst provider = rest.slice(0, slash);\n\t\t// Keep the query string on the endpoint — it's part of what HTTPS would have sent.\n\t\tconst endpoint = rest.slice(slash + 1) + parsed.search;\n\n\t\tconst bodyText = await readBodyText(request, init);\n\t\tlet query: unknown;\n\t\ttry {\n\t\t\tquery = bodyText === undefined ? undefined : JSON.parse(bodyText);\n\t\t} catch {\n\t\t\treturn unexpressible(\"non-JSON body\");\n\t\t}\n\t\tif (query === undefined) {\n\t\t\treturn unexpressible(\"missing body\");\n\t\t}\n\n\t\tconst headers = collectHeaders(request, init);\n\t\t// Per the fetch spec an explicit `signal: null` in init clears a Request input's signal.\n\t\tconst signal = init?.signal ?? (init && \"signal\" in init && init.signal === null ? undefined : request?.signal);\n\t\treturn binding.gateway(gateway).run({ provider, endpoint, headers, query }, signal ? { signal } : {});\n\t};\n}\n\nasync function readBodyText(request: Request | undefined, init?: RequestInit): Promise<string | undefined> {\n\tconst body = init?.body;\n\tif (body === undefined || body === null) {\n\t\t// Per the fetch spec an explicit `body: null` in init clears a Request input's body.\n\t\tif (init && \"body\" in init && body === null) return undefined;\n\t\tif (request && request.body !== null) return request.clone().text();\n\t\treturn undefined;\n\t}\n\tif (typeof body === \"string\") return body;\n\tif (body instanceof Uint8Array) return new TextDecoder().decode(body);\n\tif (body instanceof ArrayBuffer) return new TextDecoder().decode(new Uint8Array(body));\n\t// URLSearchParams, FormData, Blob, ReadableStream in init: read via a Request wrapper.\n\t// Consuming a one-shot stream here is fine — unexpressible requests reject rather than\n\t// replay, so nothing downstream needs the body again.\n\treturn new Request(\"http://body.local\", {\n\t\tmethod: \"POST\",\n\t\tbody,\n\t\t// The fetch spec requires `duplex: \"half\"` to construct a Request with a stream body\n\t\t// (Node's undici enforces it; it is ignored for the replayable body types). TypeScript's\n\t\t// RequestInit does not declare the field yet, hence the cast.\n\t\tduplex: \"half\",\n\t} as RequestInit).text();\n}\n\n// Entry header names are lowercased so case-variant duplicates collapse and stripping is\n// uniform. Per the fetch spec, `init.headers` replaces a Request input's headers entirely.\nfunction collectHeaders(request: Request | undefined, init?: RequestInit): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tconst add = (key: string, value: string) => {\n\t\tconst name = key.toLowerCase();\n\t\tif (!STRIP_HEADERS.has(name)) result[name] = value;\n\t};\n\tconst headers = init?.headers;\n\tif (headers === undefined) {\n\t\tif (request) {\n\t\t\tfor (const [key, value] of request.headers) add(key, value);\n\t\t}\n\t} else if (headers instanceof Headers) {\n\t\tfor (const [key, value] of headers) add(key, value);\n\t} else if (Array.isArray(headers)) {\n\t\tfor (const [key, value] of headers) add(key, value);\n\t} else {\n\t\tfor (const [key, value] of Object.entries(headers)) {\n\t\t\tif (value !== undefined) add(key, String(value));\n\t\t}\n\t}\n\treturn result;\n}\n"]}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * AI Gateway transport over the Workers AI binding.
3
+ *
4
+ * pi's Cloudflare AI Gateway support speaks HTTPS
5
+ * (`gateway.ai.cloudflare.com/v1/{account}/{gateway}/{provider}/...`, see `api/cloudflare.ts`),
6
+ * which needs a Cloudflare API token even when the caller is a Worker in the gateway's own
7
+ * account.
8
+ *
9
+ * In order to solve for this problem, `createGatewayBindingFetch` returns a {@link FetchFunction}
10
+ * that translates requests under a gateway HTTPS prefix into calls to the Workers AI binding's
11
+ * universal endpoint, `env.AI.gateway(id).run({provider, endpoint, headers, query})`.
12
+ * Binding calls are pre-authenticated in-account and return the provider's native wire format as a
13
+ * regular (streaming) `Response`, so API implementations behave identically over either
14
+ * transport.
15
+ *
16
+ * The result is the transport for one gateway-bound client, not a general-purpose fetch:
17
+ * requests it cannot serve — URLs outside the prefix, or in-prefix requests the universal
18
+ * endpoint cannot express (non-POST, non-JSON body) — reject with a descriptive error.
19
+ * Transport selection is the caller's job, per client: route such traffic over HTTPS with
20
+ * real gateway auth instead of through this shim.
21
+ */
22
+ /**
23
+ * Placeholder value for auth headers on binding-routed requests. API implementations
24
+ * require an API key or a recognized auth header (`authorization`, `x-api-key`,
25
+ * `cf-aig-authorization`) before dispatch; binding calls are pre-authenticated, so pass
26
+ * `cf-aig-authorization: Bearer ${CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL}` to satisfy
27
+ * the check. The shim strips `cf-aig-authorization` before calling the binding. Pair it with
28
+ * `Authorization: null` / `x-api-key: null` so the SDKs' placeholder auth headers never reach
29
+ * the gateway, which would treat a request-supplied auth header as a BYOK provider key that
30
+ * overrides its stored keys — the same as it would over HTTPS.
31
+ */
32
+ export const CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL = "cloudflare-gateway-binding";
33
+ // Never forwarded to the binding: hop-by-hop/derived headers, and gateway auth
34
+ // (binding calls are pre-authenticated; the sentinel must not reach the wire).
35
+ const STRIP_HEADERS = new Set(["content-length", "host", "cf-aig-authorization"]);
36
+ /**
37
+ * Create a `fetch` that routes AI Gateway requests through the Workers AI binding.
38
+ * See the module docs for behavior and composition notes.
39
+ */
40
+ export function createGatewayBindingFetch(options) {
41
+ const { binding, gateway } = options;
42
+ // Prefix matching runs on URL-normalized components (origin + pathname), not raw strings:
43
+ // dot segments resolve away and fragments drop, matching what real fetch would put on the
44
+ // wire, so a lexical variant can't split provider/endpoint differently than HTTPS would.
45
+ const base = new URL(options.baseUrl);
46
+ const basePath = base.pathname.endsWith("/") ? base.pathname : `${base.pathname}/`;
47
+ return async (input, init) => {
48
+ const request = input instanceof Request ? input : undefined;
49
+ const url = request ? request.url : input.toString();
50
+ const method = (init?.method ?? request?.method ?? "GET").toUpperCase();
51
+ let parsed;
52
+ try {
53
+ parsed = new URL(url);
54
+ }
55
+ catch {
56
+ parsed = undefined;
57
+ }
58
+ // Out-of-prefix URLs are a configuration bug, not passthrough traffic: silently
59
+ // forwarding would ship the auth sentinel to whatever host the URL names.
60
+ if (parsed === undefined || parsed.origin !== base.origin || !parsed.pathname.startsWith(basePath)) {
61
+ throw new Error(`createGatewayBindingFetch: ${method} ${url} is outside the configured gateway ` +
62
+ `prefix (${base.origin}${basePath}); this fetch only serves its gateway-bound client`);
63
+ }
64
+ // In-prefix requests the universal endpoint cannot express always reject: forwarding
65
+ // them over HTTPS would send the sentinel to the gateway and fail with a misleading
66
+ // auth error instead of naming the real problem. Callers that need such endpoints
67
+ // route them over HTTPS with real gateway auth themselves.
68
+ const unexpressible = (reason) => {
69
+ throw new Error(`createGatewayBindingFetch: cannot express ${method} ${url} as a universal ` +
70
+ `gateway request (${reason}); route it over HTTPS with gateway auth instead`);
71
+ };
72
+ if (method !== "POST")
73
+ return unexpressible("only POST is supported");
74
+ const rest = parsed.pathname.slice(basePath.length);
75
+ const slash = rest.indexOf("/");
76
+ if (slash <= 0) {
77
+ return unexpressible("missing provider/endpoint path");
78
+ }
79
+ const provider = rest.slice(0, slash);
80
+ // Keep the query string on the endpoint — it's part of what HTTPS would have sent.
81
+ const endpoint = rest.slice(slash + 1) + parsed.search;
82
+ const bodyText = await readBodyText(request, init);
83
+ let query;
84
+ try {
85
+ query = bodyText === undefined ? undefined : JSON.parse(bodyText);
86
+ }
87
+ catch {
88
+ return unexpressible("non-JSON body");
89
+ }
90
+ if (query === undefined) {
91
+ return unexpressible("missing body");
92
+ }
93
+ const headers = collectHeaders(request, init);
94
+ // Per the fetch spec an explicit `signal: null` in init clears a Request input's signal.
95
+ const signal = init?.signal ?? (init && "signal" in init && init.signal === null ? undefined : request?.signal);
96
+ return binding.gateway(gateway).run({ provider, endpoint, headers, query }, signal ? { signal } : {});
97
+ };
98
+ }
99
+ async function readBodyText(request, init) {
100
+ const body = init?.body;
101
+ if (body === undefined || body === null) {
102
+ // Per the fetch spec an explicit `body: null` in init clears a Request input's body.
103
+ if (init && "body" in init && body === null)
104
+ return undefined;
105
+ if (request && request.body !== null)
106
+ return request.clone().text();
107
+ return undefined;
108
+ }
109
+ if (typeof body === "string")
110
+ return body;
111
+ if (body instanceof Uint8Array)
112
+ return new TextDecoder().decode(body);
113
+ if (body instanceof ArrayBuffer)
114
+ return new TextDecoder().decode(new Uint8Array(body));
115
+ // URLSearchParams, FormData, Blob, ReadableStream in init: read via a Request wrapper.
116
+ // Consuming a one-shot stream here is fine — unexpressible requests reject rather than
117
+ // replay, so nothing downstream needs the body again.
118
+ return new Request("http://body.local", {
119
+ method: "POST",
120
+ body,
121
+ // The fetch spec requires `duplex: "half"` to construct a Request with a stream body
122
+ // (Node's undici enforces it; it is ignored for the replayable body types). TypeScript's
123
+ // RequestInit does not declare the field yet, hence the cast.
124
+ duplex: "half",
125
+ }).text();
126
+ }
127
+ // Entry header names are lowercased so case-variant duplicates collapse and stripping is
128
+ // uniform. Per the fetch spec, `init.headers` replaces a Request input's headers entirely.
129
+ function collectHeaders(request, init) {
130
+ const result = {};
131
+ const add = (key, value) => {
132
+ const name = key.toLowerCase();
133
+ if (!STRIP_HEADERS.has(name))
134
+ result[name] = value;
135
+ };
136
+ const headers = init?.headers;
137
+ if (headers === undefined) {
138
+ if (request) {
139
+ for (const [key, value] of request.headers)
140
+ add(key, value);
141
+ }
142
+ }
143
+ else if (headers instanceof Headers) {
144
+ for (const [key, value] of headers)
145
+ add(key, value);
146
+ }
147
+ else if (Array.isArray(headers)) {
148
+ for (const [key, value] of headers)
149
+ add(key, value);
150
+ }
151
+ else {
152
+ for (const [key, value] of Object.entries(headers)) {
153
+ if (value !== undefined)
154
+ add(key, String(value));
155
+ }
156
+ }
157
+ return result;
158
+ }
159
+ //# sourceMappingURL=cloudflare-gateway-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-gateway-binding.js","sourceRoot":"","sources":["../../src/api/cloudflare-gateway-binding.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AI Gateway transport over the Workers AI binding.\n *\n * pi's Cloudflare AI Gateway support speaks HTTPS\n * (`gateway.ai.cloudflare.com/v1/{account}/{gateway}/{provider}/...`, see `api/cloudflare.ts`),\n * which needs a Cloudflare API token even when the caller is a Worker in the gateway's own\n * account.\n *\n * In order to solve for this problem, `createGatewayBindingFetch` returns a {@link FetchFunction}\n * that translates requests under a gateway HTTPS prefix into calls to the Workers AI binding's\n * universal endpoint, `env.AI.gateway(id).run({provider, endpoint, headers, query})`.\n * Binding calls are pre-authenticated in-account and return the provider's native wire format as a\n * regular (streaming) `Response`, so API implementations behave identically over either\n * transport.\n *\n * The result is the transport for one gateway-bound client, not a general-purpose fetch:\n * requests it cannot serve — URLs outside the prefix, or in-prefix requests the universal\n * endpoint cannot express (non-POST, non-JSON body) — reject with a descriptive error.\n * Transport selection is the caller's job, per client: route such traffic over HTTPS with\n * real gateway auth instead of through this shim.\n */\n\nimport type { FetchFunction } from \"../types.ts\";\n\n/**\n * Structural type for the Workers AI binding's gateway surface (`env.AI`), so this\n * module does not depend on `@cloudflare/workers-types`. Any real `Ai` binding satisfies it.\n */\nexport interface AiGatewayBinding {\n\tgateway(id: string): AiGatewayBindingGateway;\n}\n\nexport interface AiGatewayBindingGateway {\n\trun(data: AiGatewayUniversalRequestLike, options?: { signal?: AbortSignal }): Promise<Response>;\n}\n\n/** One universal-endpoint request entry, as accepted by `AiGateway.run()`. */\nexport interface AiGatewayUniversalRequestLike {\n\tprovider: string;\n\tendpoint: string;\n\theaders: Record<string, string>;\n\tquery: unknown;\n}\n\n/**\n * Placeholder value for auth headers on binding-routed requests. API implementations\n * require an API key or a recognized auth header (`authorization`, `x-api-key`,\n * `cf-aig-authorization`) before dispatch; binding calls are pre-authenticated, so pass\n * `cf-aig-authorization: Bearer ${CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL}` to satisfy\n * the check. The shim strips `cf-aig-authorization` before calling the binding. Pair it with\n * `Authorization: null` / `x-api-key: null` so the SDKs' placeholder auth headers never reach\n * the gateway, which would treat a request-supplied auth header as a BYOK provider key that\n * overrides its stored keys — the same as it would over HTTPS.\n */\nexport const CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL = \"cloudflare-gateway-binding\";\n\nexport interface GatewayBindingFetchOptions {\n\t/** The Workers AI binding (e.g. `env.AI`). */\n\tbinding: AiGatewayBinding;\n\t/**\n\t * Gateway HTTPS prefix every request must fall under, without a trailing slash:\n\t * `https://gateway.ai.cloudflare.com/v1/{accountId}/{gatewayName}`.\n\t */\n\tbaseUrl: string;\n\t/** Gateway name passed to `binding.gateway()`. Must match the `baseUrl` gateway. */\n\tgateway: string;\n}\n\n// Never forwarded to the binding: hop-by-hop/derived headers, and gateway auth\n// (binding calls are pre-authenticated; the sentinel must not reach the wire).\nconst STRIP_HEADERS = new Set([\"content-length\", \"host\", \"cf-aig-authorization\"]);\n\ntype FetchInput = Parameters<FetchFunction>[0];\n\n/**\n * Create a `fetch` that routes AI Gateway requests through the Workers AI binding.\n * See the module docs for behavior and composition notes.\n */\nexport function createGatewayBindingFetch(options: GatewayBindingFetchOptions): FetchFunction {\n\tconst { binding, gateway } = options;\n\t// Prefix matching runs on URL-normalized components (origin + pathname), not raw strings:\n\t// dot segments resolve away and fragments drop, matching what real fetch would put on the\n\t// wire, so a lexical variant can't split provider/endpoint differently than HTTPS would.\n\tconst base = new URL(options.baseUrl);\n\tconst basePath = base.pathname.endsWith(\"/\") ? base.pathname : `${base.pathname}/`;\n\n\treturn async (input: FetchInput, init?: RequestInit): Promise<Response> => {\n\t\tconst request = input instanceof Request ? input : undefined;\n\t\tconst url = request ? request.url : input.toString();\n\t\tconst method = (init?.method ?? request?.method ?? \"GET\").toUpperCase();\n\t\tlet parsed: URL | undefined;\n\t\ttry {\n\t\t\tparsed = new URL(url);\n\t\t} catch {\n\t\t\tparsed = undefined;\n\t\t}\n\t\t// Out-of-prefix URLs are a configuration bug, not passthrough traffic: silently\n\t\t// forwarding would ship the auth sentinel to whatever host the URL names.\n\t\tif (parsed === undefined || parsed.origin !== base.origin || !parsed.pathname.startsWith(basePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t`createGatewayBindingFetch: ${method} ${url} is outside the configured gateway ` +\n\t\t\t\t\t`prefix (${base.origin}${basePath}); this fetch only serves its gateway-bound client`,\n\t\t\t);\n\t\t}\n\n\t\t// In-prefix requests the universal endpoint cannot express always reject: forwarding\n\t\t// them over HTTPS would send the sentinel to the gateway and fail with a misleading\n\t\t// auth error instead of naming the real problem. Callers that need such endpoints\n\t\t// route them over HTTPS with real gateway auth themselves.\n\t\tconst unexpressible = (reason: string): never => {\n\t\t\tthrow new Error(\n\t\t\t\t`createGatewayBindingFetch: cannot express ${method} ${url} as a universal ` +\n\t\t\t\t\t`gateway request (${reason}); route it over HTTPS with gateway auth instead`,\n\t\t\t);\n\t\t};\n\t\tif (method !== \"POST\") return unexpressible(\"only POST is supported\");\n\n\t\tconst rest = parsed.pathname.slice(basePath.length);\n\t\tconst slash = rest.indexOf(\"/\");\n\t\tif (slash <= 0) {\n\t\t\treturn unexpressible(\"missing provider/endpoint path\");\n\t\t}\n\t\tconst provider = rest.slice(0, slash);\n\t\t// Keep the query string on the endpoint — it's part of what HTTPS would have sent.\n\t\tconst endpoint = rest.slice(slash + 1) + parsed.search;\n\n\t\tconst bodyText = await readBodyText(request, init);\n\t\tlet query: unknown;\n\t\ttry {\n\t\t\tquery = bodyText === undefined ? undefined : JSON.parse(bodyText);\n\t\t} catch {\n\t\t\treturn unexpressible(\"non-JSON body\");\n\t\t}\n\t\tif (query === undefined) {\n\t\t\treturn unexpressible(\"missing body\");\n\t\t}\n\n\t\tconst headers = collectHeaders(request, init);\n\t\t// Per the fetch spec an explicit `signal: null` in init clears a Request input's signal.\n\t\tconst signal = init?.signal ?? (init && \"signal\" in init && init.signal === null ? undefined : request?.signal);\n\t\treturn binding.gateway(gateway).run({ provider, endpoint, headers, query }, signal ? { signal } : {});\n\t};\n}\n\nasync function readBodyText(request: Request | undefined, init?: RequestInit): Promise<string | undefined> {\n\tconst body = init?.body;\n\tif (body === undefined || body === null) {\n\t\t// Per the fetch spec an explicit `body: null` in init clears a Request input's body.\n\t\tif (init && \"body\" in init && body === null) return undefined;\n\t\tif (request && request.body !== null) return request.clone().text();\n\t\treturn undefined;\n\t}\n\tif (typeof body === \"string\") return body;\n\tif (body instanceof Uint8Array) return new TextDecoder().decode(body);\n\tif (body instanceof ArrayBuffer) return new TextDecoder().decode(new Uint8Array(body));\n\t// URLSearchParams, FormData, Blob, ReadableStream in init: read via a Request wrapper.\n\t// Consuming a one-shot stream here is fine — unexpressible requests reject rather than\n\t// replay, so nothing downstream needs the body again.\n\treturn new Request(\"http://body.local\", {\n\t\tmethod: \"POST\",\n\t\tbody,\n\t\t// The fetch spec requires `duplex: \"half\"` to construct a Request with a stream body\n\t\t// (Node's undici enforces it; it is ignored for the replayable body types). TypeScript's\n\t\t// RequestInit does not declare the field yet, hence the cast.\n\t\tduplex: \"half\",\n\t} as RequestInit).text();\n}\n\n// Entry header names are lowercased so case-variant duplicates collapse and stripping is\n// uniform. Per the fetch spec, `init.headers` replaces a Request input's headers entirely.\nfunction collectHeaders(request: Request | undefined, init?: RequestInit): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tconst add = (key: string, value: string) => {\n\t\tconst name = key.toLowerCase();\n\t\tif (!STRIP_HEADERS.has(name)) result[name] = value;\n\t};\n\tconst headers = init?.headers;\n\tif (headers === undefined) {\n\t\tif (request) {\n\t\t\tfor (const [key, value] of request.headers) add(key, value);\n\t\t}\n\t} else if (headers instanceof Headers) {\n\t\tfor (const [key, value] of headers) add(key, value);\n\t} else if (Array.isArray(headers)) {\n\t\tfor (const [key, value] of headers) add(key, value);\n\t} else {\n\t\tfor (const [key, value] of Object.entries(headers)) {\n\t\t\tif (value !== undefined) add(key, String(value));\n\t\t}\n\t}\n\treturn result;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /** Workers AI direct endpoint. */
2
+ export declare const CLOUDFLARE_WORKERS_AI_BASE_URL = "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1";
3
+ /** AI Gateway Unified API. https://developers.cloudflare.com/ai-gateway/usage/unified-api/ */
4
+ export declare const CLOUDFLARE_AI_GATEWAY_COMPAT_BASE_URL = "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat";
5
+ /** AI Gateway → OpenAI passthrough. Used until /compat supports /v1/responses. */
6
+ export declare const CLOUDFLARE_AI_GATEWAY_OPENAI_BASE_URL = "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai";
7
+ /** AI Gateway → Anthropic passthrough. */
8
+ export declare const CLOUDFLARE_AI_GATEWAY_ANTHROPIC_BASE_URL = "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic";
9
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/api/cloudflare.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,eAAO,MAAM,8BAA8B,gFACmC,CAAC;AAE/E,8FAA8F;AAC9F,eAAO,MAAM,qCAAqC,gGAC4C,CAAC;AAE/F,oFAAkF;AAClF,eAAO,MAAM,qCAAqC,gGAC4C,CAAC;AAE/F,4CAA0C;AAC1C,eAAO,MAAM,wCAAwC,mGAC4C,CAAC","sourcesContent":["/** Workers AI direct endpoint. */\nexport const CLOUDFLARE_WORKERS_AI_BASE_URL =\n\t\"https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1\";\n\n/** AI Gateway Unified API. https://developers.cloudflare.com/ai-gateway/usage/unified-api/ */\nexport const CLOUDFLARE_AI_GATEWAY_COMPAT_BASE_URL =\n\t\"https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat\";\n\n/** AI Gateway → OpenAI passthrough. Used until /compat supports /v1/responses. */\nexport const CLOUDFLARE_AI_GATEWAY_OPENAI_BASE_URL =\n\t\"https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai\";\n\n/** AI Gateway → Anthropic passthrough. */\nexport const CLOUDFLARE_AI_GATEWAY_ANTHROPIC_BASE_URL =\n\t\"https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic\";\n"]}
@@ -0,0 +1,9 @@
1
+ /** Workers AI direct endpoint. */
2
+ export const CLOUDFLARE_WORKERS_AI_BASE_URL = "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1";
3
+ /** AI Gateway Unified API. https://developers.cloudflare.com/ai-gateway/usage/unified-api/ */
4
+ export const CLOUDFLARE_AI_GATEWAY_COMPAT_BASE_URL = "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat";
5
+ /** AI Gateway → OpenAI passthrough. Used until /compat supports /v1/responses. */
6
+ export const CLOUDFLARE_AI_GATEWAY_OPENAI_BASE_URL = "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai";
7
+ /** AI Gateway → Anthropic passthrough. */
8
+ export const CLOUDFLARE_AI_GATEWAY_ANTHROPIC_BASE_URL = "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic";
9
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/api/cloudflare.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,MAAM,CAAC,MAAM,8BAA8B,GAC1C,6EAA6E,CAAC;AAE/E,8FAA8F;AAC9F,MAAM,CAAC,MAAM,qCAAqC,GACjD,6FAA6F,CAAC;AAE/F,oFAAkF;AAClF,MAAM,CAAC,MAAM,qCAAqC,GACjD,6FAA6F,CAAC;AAE/F,4CAA0C;AAC1C,MAAM,CAAC,MAAM,wCAAwC,GACpD,gGAAgG,CAAC","sourcesContent":["/** Workers AI direct endpoint. */\nexport const CLOUDFLARE_WORKERS_AI_BASE_URL =\n\t\"https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1\";\n\n/** AI Gateway Unified API. https://developers.cloudflare.com/ai-gateway/usage/unified-api/ */\nexport const CLOUDFLARE_AI_GATEWAY_COMPAT_BASE_URL =\n\t\"https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat\";\n\n/** AI Gateway → OpenAI passthrough. Used until /compat supports /v1/responses. */\nexport const CLOUDFLARE_AI_GATEWAY_OPENAI_BASE_URL =\n\t\"https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai\";\n\n/** AI Gateway → Anthropic passthrough. */\nexport const CLOUDFLARE_AI_GATEWAY_ANTHROPIC_BASE_URL =\n\t\"https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic\";\n"]}
@@ -0,0 +1,20 @@
1
+ import type { Tool } from "../types.ts";
2
+ /** Convert a tool schema to the strict subset expected by provider constrained sampling. */
3
+ export declare function makeStrictJsonSchema(schema: Tool["parameters"]): Record<string, unknown>;
4
+ export declare function getJsonSchemaToolParameters(tool: Tool, strict: boolean | undefined): Tool["parameters"];
5
+ export interface GrammarConstrainedSampling {
6
+ format: "lark" | "regex";
7
+ definition: string;
8
+ inputProperty: string;
9
+ }
10
+ export interface GrammarToolInputJsonBuffer {
11
+ input: string;
12
+ started: boolean;
13
+ closed: boolean;
14
+ }
15
+ export declare function getGrammarToolInput(toolName: string, arguments_: Record<string, unknown>, inputProperty: string): string;
16
+ export declare function appendGrammarToolInputJsonDelta(buffer: GrammarToolInputJsonBuffer, inputProperty: string, nextInput: string, close: boolean): string | undefined;
17
+ export declare function resolveJsonSchemaStrictSampling(tool: Tool, supportsStrictMode: boolean): boolean | undefined;
18
+ export declare function resolveGrammarConstrainedSampling(tool: Tool, supportsOpenAIGrammarTools: boolean): GrammarConstrainedSampling | undefined;
19
+ export declare function createGrammarToolInputProperties(tools: Tool[] | undefined, supportsOpenAIGrammarTools: boolean): ReadonlyMap<string, string>;
20
+ //# sourceMappingURL=constrained-sampling.d.ts.map