@draht/ai 2026.5.12 → 2026.7.7

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 (611) hide show
  1. package/dist/api/anthropic-messages.d.ts +71 -0
  2. package/dist/api/anthropic-messages.d.ts.map +1 -0
  3. package/dist/api/anthropic-messages.js +972 -0
  4. package/dist/api/anthropic-messages.js.map +1 -0
  5. package/dist/api/anthropic-messages.lazy.d.ts +3 -0
  6. package/dist/api/anthropic-messages.lazy.d.ts.map +1 -0
  7. package/dist/api/anthropic-messages.lazy.js +3 -0
  8. package/dist/api/anthropic-messages.lazy.js.map +1 -0
  9. package/dist/api/azure-openai-responses.d.ts +15 -0
  10. package/dist/api/azure-openai-responses.d.ts.map +1 -0
  11. package/dist/api/azure-openai-responses.js +222 -0
  12. package/dist/api/azure-openai-responses.js.map +1 -0
  13. package/dist/api/azure-openai-responses.lazy.d.ts +3 -0
  14. package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -0
  15. package/dist/api/azure-openai-responses.lazy.js +3 -0
  16. package/dist/api/azure-openai-responses.lazy.js.map +1 -0
  17. package/dist/api/bedrock-converse-stream.d.ts +38 -0
  18. package/dist/api/bedrock-converse-stream.d.ts.map +1 -0
  19. package/dist/api/bedrock-converse-stream.js +876 -0
  20. package/dist/api/bedrock-converse-stream.js.map +1 -0
  21. package/dist/api/bedrock-converse-stream.lazy.d.ts +9 -0
  22. package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -0
  23. package/dist/api/bedrock-converse-stream.lazy.js +30 -0
  24. package/dist/api/bedrock-converse-stream.lazy.js.map +1 -0
  25. package/dist/api/cloudflare.d.ts +9 -0
  26. package/dist/api/cloudflare.d.ts.map +1 -0
  27. package/dist/api/cloudflare.js +9 -0
  28. package/dist/api/cloudflare.js.map +1 -0
  29. package/dist/{providers → api}/github-copilot-headers.d.ts +1 -1
  30. package/dist/api/github-copilot-headers.d.ts.map +1 -0
  31. package/dist/api/github-copilot-headers.js.map +1 -0
  32. package/dist/api/google-generative-ai.d.ts +13 -0
  33. package/dist/api/google-generative-ai.d.ts.map +1 -0
  34. package/dist/api/google-generative-ai.js +407 -0
  35. package/dist/api/google-generative-ai.js.map +1 -0
  36. package/dist/api/google-generative-ai.lazy.d.ts +3 -0
  37. package/dist/api/google-generative-ai.lazy.d.ts.map +1 -0
  38. package/dist/api/google-generative-ai.lazy.js +3 -0
  39. package/dist/api/google-generative-ai.lazy.js.map +1 -0
  40. package/dist/{providers → api}/google-shared.d.ts +8 -3
  41. package/dist/api/google-shared.d.ts.map +1 -0
  42. package/dist/{providers → api}/google-shared.js +34 -17
  43. package/dist/api/google-shared.js.map +1 -0
  44. package/dist/api/google-vertex.d.ts +15 -0
  45. package/dist/api/google-vertex.d.ts.map +1 -0
  46. package/dist/api/google-vertex.js +456 -0
  47. package/dist/api/google-vertex.js.map +1 -0
  48. package/dist/api/google-vertex.lazy.d.ts +3 -0
  49. package/dist/api/google-vertex.lazy.d.ts.map +1 -0
  50. package/dist/api/google-vertex.lazy.js +3 -0
  51. package/dist/api/google-vertex.lazy.js.map +1 -0
  52. package/dist/api/lazy.d.ts +15 -0
  53. package/dist/api/lazy.d.ts.map +1 -0
  54. package/dist/api/lazy.js +59 -0
  55. package/dist/api/lazy.js.map +1 -0
  56. package/dist/api/mistral-conversations.d.ts +25 -0
  57. package/dist/api/mistral-conversations.d.ts.map +1 -0
  58. package/dist/api/mistral-conversations.js +555 -0
  59. package/dist/api/mistral-conversations.js.map +1 -0
  60. package/dist/api/mistral-conversations.lazy.d.ts +3 -0
  61. package/dist/api/mistral-conversations.lazy.d.ts.map +1 -0
  62. package/dist/api/mistral-conversations.lazy.js +3 -0
  63. package/dist/api/mistral-conversations.lazy.js.map +1 -0
  64. package/dist/api/openai-codex-responses.d.ts +30 -0
  65. package/dist/api/openai-codex-responses.d.ts.map +1 -0
  66. package/dist/api/openai-codex-responses.js +1228 -0
  67. package/dist/api/openai-codex-responses.js.map +1 -0
  68. package/dist/api/openai-codex-responses.lazy.d.ts +3 -0
  69. package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -0
  70. package/dist/api/openai-codex-responses.lazy.js +3 -0
  71. package/dist/api/openai-codex-responses.lazy.js.map +1 -0
  72. package/dist/api/openai-completions.d.ts +19 -0
  73. package/dist/api/openai-completions.d.ts.map +1 -0
  74. package/dist/api/openai-completions.js +1061 -0
  75. package/dist/api/openai-completions.js.map +1 -0
  76. package/dist/api/openai-completions.lazy.d.ts +3 -0
  77. package/dist/api/openai-completions.lazy.d.ts.map +1 -0
  78. package/dist/api/openai-completions.lazy.js +3 -0
  79. package/dist/api/openai-completions.lazy.js.map +1 -0
  80. package/dist/api/openai-prompt-cache.d.ts +3 -0
  81. package/dist/api/openai-prompt-cache.d.ts.map +1 -0
  82. package/dist/api/openai-prompt-cache.js +10 -0
  83. package/dist/api/openai-prompt-cache.js.map +1 -0
  84. package/dist/{providers → api}/openai-responses-shared.d.ts +3 -2
  85. package/dist/api/openai-responses-shared.d.ts.map +1 -0
  86. package/dist/{providers → api}/openai-responses-shared.js +201 -189
  87. package/dist/api/openai-responses-shared.js.map +1 -0
  88. package/dist/{providers → api}/openai-responses.d.ts +3 -3
  89. package/dist/api/openai-responses.d.ts.map +1 -0
  90. package/dist/api/openai-responses.js +229 -0
  91. package/dist/api/openai-responses.js.map +1 -0
  92. package/dist/api/openai-responses.lazy.d.ts +3 -0
  93. package/dist/api/openai-responses.lazy.d.ts.map +1 -0
  94. package/dist/api/openai-responses.lazy.js +3 -0
  95. package/dist/api/openai-responses.lazy.js.map +1 -0
  96. package/dist/api/openrouter-images.d.ts +3 -0
  97. package/dist/api/openrouter-images.d.ts.map +1 -0
  98. package/dist/api/openrouter-images.js +126 -0
  99. package/dist/api/openrouter-images.js.map +1 -0
  100. package/dist/api/openrouter-images.lazy.d.ts +3 -0
  101. package/dist/api/openrouter-images.lazy.d.ts.map +1 -0
  102. package/dist/api/openrouter-images.lazy.js +4 -0
  103. package/dist/api/openrouter-images.lazy.js.map +1 -0
  104. package/dist/api/simple-options.d.ts +14 -0
  105. package/dist/api/simple-options.d.ts.map +1 -0
  106. package/dist/{providers → api}/simple-options.js +20 -4
  107. package/dist/api/simple-options.js.map +1 -0
  108. package/dist/{providers → api}/transform-messages.d.ts +1 -1
  109. package/dist/api/transform-messages.d.ts.map +1 -0
  110. package/dist/{providers → api}/transform-messages.js +66 -34
  111. package/dist/api/transform-messages.js.map +1 -0
  112. package/dist/auth/context.d.ts +7 -0
  113. package/dist/auth/context.d.ts.map +1 -0
  114. package/dist/auth/context.js +42 -0
  115. package/dist/auth/context.js.map +1 -0
  116. package/dist/auth/credential-store.d.ts +16 -0
  117. package/dist/auth/credential-store.d.ts.map +1 -0
  118. package/dist/auth/credential-store.js +37 -0
  119. package/dist/auth/credential-store.js.map +1 -0
  120. package/dist/auth/helpers.d.ts +20 -0
  121. package/dist/auth/helpers.d.ts.map +1 -0
  122. package/dist/auth/helpers.js +46 -0
  123. package/dist/auth/helpers.js.map +1 -0
  124. package/dist/auth/resolve.d.ts +26 -0
  125. package/dist/auth/resolve.d.ts.map +1 -0
  126. package/dist/auth/resolve.js +101 -0
  127. package/dist/auth/resolve.js.map +1 -0
  128. package/dist/auth/types.d.ts +180 -0
  129. package/dist/auth/types.d.ts.map +1 -0
  130. package/dist/auth/types.js +2 -0
  131. package/dist/auth/types.js.map +1 -0
  132. package/dist/bedrock-provider.d.ts +2 -2
  133. package/dist/bedrock-provider.d.ts.map +1 -1
  134. package/dist/bedrock-provider.js +3 -3
  135. package/dist/bedrock-provider.js.map +1 -1
  136. package/dist/cli.d.ts.map +1 -1
  137. package/dist/cli.js +14 -0
  138. package/dist/cli.js.map +1 -1
  139. package/dist/compat.d.ts +65 -0
  140. package/dist/compat.d.ts.map +1 -0
  141. package/dist/compat.js +182 -0
  142. package/dist/compat.js.map +1 -0
  143. package/dist/env-api-keys.d.ts +12 -3
  144. package/dist/env-api-keys.d.ts.map +1 -1
  145. package/dist/env-api-keys.js +77 -39
  146. package/dist/env-api-keys.js.map +1 -1
  147. package/dist/image-models.d.ts +10 -0
  148. package/dist/image-models.d.ts.map +1 -0
  149. package/dist/image-models.generated.d.ts +530 -0
  150. package/dist/image-models.generated.d.ts.map +1 -0
  151. package/dist/image-models.generated.js +532 -0
  152. package/dist/image-models.generated.js.map +1 -0
  153. package/dist/image-models.js +23 -0
  154. package/dist/image-models.js.map +1 -0
  155. package/dist/images-api-registry.d.ts +14 -0
  156. package/dist/images-api-registry.d.ts.map +1 -0
  157. package/dist/images-api-registry.js +22 -0
  158. package/dist/images-api-registry.js.map +1 -0
  159. package/dist/images-models.d.ts +93 -0
  160. package/dist/images-models.d.ts.map +1 -0
  161. package/dist/images-models.js +141 -0
  162. package/dist/images-models.js.map +1 -0
  163. package/dist/images.d.ts +4 -0
  164. package/dist/images.d.ts.map +1 -0
  165. package/dist/images.js +14 -0
  166. package/dist/images.js.map +1 -0
  167. package/dist/index.d.ts +30 -25
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +10 -5
  170. package/dist/index.js.map +1 -1
  171. package/dist/legacy-api-aliases.d.ts +42 -0
  172. package/dist/legacy-api-aliases.d.ts.map +1 -0
  173. package/dist/legacy-api-aliases.js +49 -0
  174. package/dist/legacy-api-aliases.js.map +1 -0
  175. package/dist/models.d.ts +136 -15
  176. package/dist/models.d.ts.map +1 -1
  177. package/dist/models.generated.d.ts +8134 -2008
  178. package/dist/models.generated.d.ts.map +1 -1
  179. package/dist/models.generated.js +70 -14888
  180. package/dist/models.generated.js.map +1 -1
  181. package/dist/models.js +218 -24
  182. package/dist/models.js.map +1 -1
  183. package/dist/oauth.d.ts +1 -1
  184. package/dist/oauth.d.ts.map +1 -1
  185. package/dist/oauth.js.map +1 -1
  186. package/dist/providers/all.d.ts +21 -0
  187. package/dist/providers/all.d.ts.map +1 -0
  188. package/dist/providers/all.js +114 -0
  189. package/dist/providers/all.js.map +1 -0
  190. package/dist/providers/amazon-bedrock.d.ts +2 -19
  191. package/dist/providers/amazon-bedrock.d.ts.map +1 -1
  192. package/dist/providers/amazon-bedrock.js +33 -649
  193. package/dist/providers/amazon-bedrock.js.map +1 -1
  194. package/dist/providers/amazon-bedrock.models.d.ts +1875 -0
  195. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -0
  196. package/dist/providers/amazon-bedrock.models.js +1829 -0
  197. package/dist/providers/amazon-bedrock.models.js.map +1 -0
  198. package/dist/providers/ant-ling.d.ts +3 -0
  199. package/dist/providers/ant-ling.d.ts.map +1 -0
  200. package/dist/providers/ant-ling.js +15 -0
  201. package/dist/providers/ant-ling.js.map +1 -0
  202. package/dist/providers/ant-ling.models.d.ts +86 -0
  203. package/dist/providers/ant-ling.models.d.ts.map +1 -0
  204. package/dist/providers/ant-ling.models.js +60 -0
  205. package/dist/providers/ant-ling.models.js.map +1 -0
  206. package/dist/providers/anthropic.d.ts +2 -39
  207. package/dist/providers/anthropic.d.ts.map +1 -1
  208. package/dist/providers/anthropic.js +17 -771
  209. package/dist/providers/anthropic.js.map +1 -1
  210. package/dist/providers/anthropic.models.d.ts +274 -0
  211. package/dist/providers/anthropic.models.d.ts.map +1 -0
  212. package/dist/providers/anthropic.models.js +253 -0
  213. package/dist/providers/anthropic.models.js.map +1 -0
  214. package/dist/providers/azure-openai-responses.d.ts +2 -14
  215. package/dist/providers/azure-openai-responses.d.ts.map +1 -1
  216. package/dist/providers/azure-openai-responses.js +11 -173
  217. package/dist/providers/azure-openai-responses.js.map +1 -1
  218. package/dist/providers/azure-openai-responses.models.d.ts +804 -0
  219. package/dist/providers/azure-openai-responses.models.d.ts.map +1 -0
  220. package/dist/providers/azure-openai-responses.models.js +743 -0
  221. package/dist/providers/azure-openai-responses.models.js.map +1 -0
  222. package/dist/providers/cerebras.d.ts +3 -0
  223. package/dist/providers/cerebras.d.ts.map +1 -0
  224. package/dist/providers/cerebras.js +15 -0
  225. package/dist/providers/cerebras.js.map +1 -0
  226. package/dist/providers/cerebras.models.d.ts +66 -0
  227. package/dist/providers/cerebras.models.d.ts.map +1 -0
  228. package/dist/providers/cerebras.models.js +59 -0
  229. package/dist/providers/cerebras.models.js.map +1 -0
  230. package/dist/providers/cloudflare-ai-gateway.d.ts +3 -0
  231. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -0
  232. package/dist/providers/cloudflare-ai-gateway.js +20 -0
  233. package/dist/providers/cloudflare-ai-gateway.js.map +1 -0
  234. package/dist/providers/cloudflare-ai-gateway.models.d.ts +786 -0
  235. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -0
  236. package/dist/providers/cloudflare-ai-gateway.models.js +684 -0
  237. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -0
  238. package/dist/providers/cloudflare-auth.d.ts +4 -0
  239. package/dist/providers/cloudflare-auth.d.ts.map +1 -0
  240. package/dist/providers/cloudflare-auth.js +85 -0
  241. package/dist/providers/cloudflare-auth.js.map +1 -0
  242. package/dist/providers/cloudflare-workers-ai.d.ts +3 -0
  243. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -0
  244. package/dist/providers/cloudflare-workers-ai.js +14 -0
  245. package/dist/providers/cloudflare-workers-ai.js.map +1 -0
  246. package/dist/providers/cloudflare-workers-ai.models.d.ts +302 -0
  247. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -0
  248. package/dist/providers/cloudflare-workers-ai.models.js +239 -0
  249. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -0
  250. package/dist/providers/deepseek.d.ts +3 -0
  251. package/dist/providers/deepseek.d.ts.map +1 -0
  252. package/dist/providers/deepseek.js +15 -0
  253. package/dist/providers/deepseek.js.map +1 -0
  254. package/dist/providers/deepseek.models.d.ts +63 -0
  255. package/dist/providers/deepseek.models.d.ts.map +1 -0
  256. package/dist/providers/deepseek.models.js +43 -0
  257. package/dist/providers/deepseek.models.js.map +1 -0
  258. package/dist/providers/faux.d.ts +43 -2
  259. package/dist/providers/faux.d.ts.map +1 -1
  260. package/dist/providers/faux.js +35 -7
  261. package/dist/providers/faux.js.map +1 -1
  262. package/dist/providers/fireworks.d.ts +3 -0
  263. package/dist/providers/fireworks.d.ts.map +1 -0
  264. package/dist/providers/fireworks.js +19 -0
  265. package/dist/providers/fireworks.js.map +1 -0
  266. package/dist/providers/fireworks.models.d.ts +381 -0
  267. package/dist/providers/fireworks.models.d.ts.map +1 -0
  268. package/dist/providers/fireworks.models.js +295 -0
  269. package/dist/providers/fireworks.models.js.map +1 -0
  270. package/dist/providers/github-copilot.d.ts +3 -0
  271. package/dist/providers/github-copilot.d.ts.map +1 -0
  272. package/dist/providers/github-copilot.js +25 -0
  273. package/dist/providers/github-copilot.js.map +1 -0
  274. package/dist/providers/github-copilot.models.d.ts +698 -0
  275. package/dist/providers/github-copilot.models.d.ts.map +1 -0
  276. package/dist/providers/github-copilot.models.js +483 -0
  277. package/dist/providers/github-copilot.models.js.map +1 -0
  278. package/dist/providers/google-vertex.d.ts +2 -14
  279. package/dist/providers/google-vertex.d.ts.map +1 -1
  280. package/dist/providers/google-vertex.js +30 -414
  281. package/dist/providers/google-vertex.js.map +1 -1
  282. package/dist/providers/google-vertex.models.d.ts +202 -0
  283. package/dist/providers/google-vertex.models.d.ts.map +1 -0
  284. package/dist/providers/google-vertex.models.js +182 -0
  285. package/dist/providers/google-vertex.models.js.map +1 -0
  286. package/dist/providers/google.d.ts +2 -12
  287. package/dist/providers/google.d.ts.map +1 -1
  288. package/dist/providers/google.js +12 -396
  289. package/dist/providers/google.js.map +1 -1
  290. package/dist/providers/google.models.d.ts +328 -0
  291. package/dist/providers/google.models.d.ts.map +1 -0
  292. package/dist/providers/google.models.js +288 -0
  293. package/dist/providers/google.models.js.map +1 -0
  294. package/dist/providers/groq.d.ts +3 -0
  295. package/dist/providers/groq.d.ts.map +1 -0
  296. package/dist/providers/groq.js +15 -0
  297. package/dist/providers/groq.js.map +1 -0
  298. package/dist/providers/groq.models.d.ts +128 -0
  299. package/dist/providers/groq.models.d.ts.map +1 -0
  300. package/dist/providers/groq.models.js +125 -0
  301. package/dist/providers/groq.models.js.map +1 -0
  302. package/dist/providers/huggingface.d.ts +3 -0
  303. package/dist/providers/huggingface.d.ts.map +1 -0
  304. package/dist/providers/huggingface.js +15 -0
  305. package/dist/providers/huggingface.js.map +1 -0
  306. package/dist/providers/huggingface.models.d.ts +983 -0
  307. package/dist/providers/huggingface.models.d.ts.map +1 -0
  308. package/dist/providers/huggingface.models.js +887 -0
  309. package/dist/providers/huggingface.models.js.map +1 -0
  310. package/dist/providers/images/register-builtins.d.ts +4 -0
  311. package/dist/providers/images/register-builtins.d.ts.map +1 -0
  312. package/dist/providers/images/register-builtins.js +34 -0
  313. package/dist/providers/images/register-builtins.js.map +1 -0
  314. package/dist/providers/kimi-coding.d.ts +3 -0
  315. package/dist/providers/kimi-coding.d.ts.map +1 -0
  316. package/dist/providers/kimi-coding.js +15 -0
  317. package/dist/providers/kimi-coding.js.map +1 -0
  318. package/dist/providers/kimi-coding.models.d.ts +63 -0
  319. package/dist/providers/kimi-coding.models.d.ts.map +1 -0
  320. package/dist/providers/kimi-coding.models.js +59 -0
  321. package/dist/providers/kimi-coding.models.js.map +1 -0
  322. package/dist/providers/minimax-cn.d.ts +3 -0
  323. package/dist/providers/minimax-cn.d.ts.map +1 -0
  324. package/dist/providers/minimax-cn.js +15 -0
  325. package/dist/providers/minimax-cn.js.map +1 -0
  326. package/dist/providers/minimax-cn.models.d.ts +54 -0
  327. package/dist/providers/minimax-cn.models.d.ts.map +1 -0
  328. package/dist/providers/minimax-cn.models.js +56 -0
  329. package/dist/providers/minimax-cn.models.js.map +1 -0
  330. package/dist/providers/minimax.d.ts +3 -0
  331. package/dist/providers/minimax.d.ts.map +1 -0
  332. package/dist/providers/minimax.js +15 -0
  333. package/dist/providers/minimax.js.map +1 -0
  334. package/dist/providers/minimax.models.d.ts +54 -0
  335. package/dist/providers/minimax.models.d.ts.map +1 -0
  336. package/dist/providers/minimax.models.js +56 -0
  337. package/dist/providers/minimax.models.js.map +1 -0
  338. package/dist/providers/mistral.d.ts +2 -21
  339. package/dist/providers/mistral.d.ts.map +1 -1
  340. package/dist/providers/mistral.js +12 -498
  341. package/dist/providers/mistral.js.map +1 -1
  342. package/dist/providers/mistral.models.d.ts +513 -0
  343. package/dist/providers/mistral.models.d.ts.map +1 -0
  344. package/dist/providers/mistral.models.js +515 -0
  345. package/dist/providers/mistral.models.js.map +1 -0
  346. package/dist/providers/moonshotai-cn.d.ts +3 -0
  347. package/dist/providers/moonshotai-cn.d.ts.map +1 -0
  348. package/dist/providers/moonshotai-cn.js +15 -0
  349. package/dist/providers/moonshotai-cn.js.map +1 -0
  350. package/dist/providers/moonshotai-cn.models.d.ts +234 -0
  351. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -0
  352. package/dist/providers/moonshotai-cn.models.js +169 -0
  353. package/dist/providers/moonshotai-cn.models.js.map +1 -0
  354. package/dist/providers/moonshotai.d.ts +3 -0
  355. package/dist/providers/moonshotai.d.ts.map +1 -0
  356. package/dist/providers/moonshotai.js +15 -0
  357. package/dist/providers/moonshotai.js.map +1 -0
  358. package/dist/providers/moonshotai.models.d.ts +234 -0
  359. package/dist/providers/moonshotai.models.d.ts.map +1 -0
  360. package/dist/providers/moonshotai.models.js +169 -0
  361. package/dist/providers/moonshotai.models.js.map +1 -0
  362. package/dist/providers/nvidia.d.ts +3 -0
  363. package/dist/providers/nvidia.d.ts.map +1 -0
  364. package/dist/providers/nvidia.js +15 -0
  365. package/dist/providers/nvidia.js.map +1 -0
  366. package/dist/providers/nvidia.models.d.ts +563 -0
  367. package/dist/providers/nvidia.models.d.ts.map +1 -0
  368. package/dist/providers/nvidia.models.js +385 -0
  369. package/dist/providers/nvidia.models.js.map +1 -0
  370. package/dist/providers/openai-codex.d.ts +3 -0
  371. package/dist/providers/openai-codex.d.ts.map +1 -0
  372. package/dist/providers/openai-codex.js +18 -0
  373. package/dist/providers/openai-codex.js.map +1 -0
  374. package/dist/providers/openai-codex.models.d.ts +87 -0
  375. package/dist/providers/openai-codex.models.d.ts.map +1 -0
  376. package/dist/providers/openai-codex.models.js +77 -0
  377. package/dist/providers/openai-codex.models.js.map +1 -0
  378. package/dist/providers/openai.d.ts +3 -0
  379. package/dist/providers/openai.d.ts.map +1 -0
  380. package/dist/providers/openai.js +15 -0
  381. package/dist/providers/openai.js.map +1 -0
  382. package/dist/providers/openai.models.d.ts +805 -0
  383. package/dist/providers/openai.models.d.ts.map +1 -0
  384. package/dist/providers/openai.models.js +743 -0
  385. package/dist/providers/openai.models.js.map +1 -0
  386. package/dist/providers/opencode-go.d.ts +3 -0
  387. package/dist/providers/opencode-go.d.ts.map +1 -0
  388. package/dist/providers/opencode-go.js +18 -0
  389. package/dist/providers/opencode-go.js.map +1 -0
  390. package/dist/providers/opencode-go.models.d.ts +309 -0
  391. package/dist/providers/opencode-go.models.d.ts.map +1 -0
  392. package/dist/providers/opencode-go.models.js +240 -0
  393. package/dist/providers/opencode-go.models.js.map +1 -0
  394. package/dist/providers/opencode.d.ts +3 -0
  395. package/dist/providers/opencode.d.ts.map +1 -0
  396. package/dist/providers/opencode.js +22 -0
  397. package/dist/providers/opencode.js.map +1 -0
  398. package/dist/providers/opencode.models.d.ts +1064 -0
  399. package/dist/providers/opencode.models.d.ts.map +1 -0
  400. package/dist/providers/opencode.models.js +888 -0
  401. package/dist/providers/opencode.models.js.map +1 -0
  402. package/dist/providers/openrouter-images.d.ts +3 -0
  403. package/dist/providers/openrouter-images.d.ts.map +1 -0
  404. package/dist/providers/openrouter-images.js +14 -0
  405. package/dist/providers/openrouter-images.js.map +1 -0
  406. package/dist/providers/openrouter.d.ts +3 -0
  407. package/dist/providers/openrouter.d.ts.map +1 -0
  408. package/dist/providers/openrouter.js +15 -0
  409. package/dist/providers/openrouter.js.map +1 -0
  410. package/dist/providers/openrouter.models.d.ts +5507 -0
  411. package/dist/providers/openrouter.models.d.ts.map +1 -0
  412. package/dist/providers/openrouter.models.js +4724 -0
  413. package/dist/providers/openrouter.models.js.map +1 -0
  414. package/dist/providers/together.d.ts +3 -0
  415. package/dist/providers/together.d.ts.map +1 -0
  416. package/dist/providers/together.js +15 -0
  417. package/dist/providers/together.js.map +1 -0
  418. package/dist/providers/together.models.d.ts +598 -0
  419. package/dist/providers/together.models.d.ts.map +1 -0
  420. package/dist/providers/together.models.js +380 -0
  421. package/dist/providers/together.models.js.map +1 -0
  422. package/dist/providers/vercel-ai-gateway.d.ts +3 -0
  423. package/dist/providers/vercel-ai-gateway.d.ts.map +1 -0
  424. package/dist/providers/vercel-ai-gateway.js +15 -0
  425. package/dist/providers/vercel-ai-gateway.js.map +1 -0
  426. package/dist/providers/vercel-ai-gateway.models.d.ts +3254 -0
  427. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -0
  428. package/dist/providers/vercel-ai-gateway.models.js +3206 -0
  429. package/dist/providers/vercel-ai-gateway.models.js.map +1 -0
  430. package/dist/providers/xai.d.ts +3 -0
  431. package/dist/providers/xai.d.ts.map +1 -0
  432. package/dist/providers/xai.js +15 -0
  433. package/dist/providers/xai.js.map +1 -0
  434. package/dist/providers/xai.models.d.ts +157 -0
  435. package/dist/providers/xai.models.d.ts.map +1 -0
  436. package/dist/providers/xai.models.js +131 -0
  437. package/dist/providers/xai.models.js.map +1 -0
  438. package/dist/providers/xiaomi-token-plan-ams.d.ts +3 -0
  439. package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -0
  440. package/dist/providers/xiaomi-token-plan-ams.js +15 -0
  441. package/dist/providers/xiaomi-token-plan-ams.js.map +1 -0
  442. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +108 -0
  443. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -0
  444. package/dist/providers/xiaomi-token-plan-ams.models.js +95 -0
  445. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -0
  446. package/dist/providers/xiaomi-token-plan-cn.d.ts +3 -0
  447. package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -0
  448. package/dist/providers/xiaomi-token-plan-cn.js +15 -0
  449. package/dist/providers/xiaomi-token-plan-cn.js.map +1 -0
  450. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +108 -0
  451. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -0
  452. package/dist/providers/xiaomi-token-plan-cn.models.js +95 -0
  453. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -0
  454. package/dist/providers/xiaomi-token-plan-sgp.d.ts +3 -0
  455. package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -0
  456. package/dist/providers/xiaomi-token-plan-sgp.js +15 -0
  457. package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -0
  458. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +108 -0
  459. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -0
  460. package/dist/providers/xiaomi-token-plan-sgp.models.js +95 -0
  461. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -0
  462. package/dist/providers/xiaomi.d.ts +3 -0
  463. package/dist/providers/xiaomi.d.ts.map +1 -0
  464. package/dist/providers/xiaomi.js +15 -0
  465. package/dist/providers/xiaomi.js.map +1 -0
  466. package/dist/providers/xiaomi.models.d.ts +129 -0
  467. package/dist/providers/xiaomi.models.d.ts.map +1 -0
  468. package/dist/providers/xiaomi.models.js +113 -0
  469. package/dist/providers/xiaomi.models.js.map +1 -0
  470. package/dist/providers/zai-coding-cn.d.ts +3 -0
  471. package/dist/providers/zai-coding-cn.d.ts.map +1 -0
  472. package/dist/providers/zai-coding-cn.js +15 -0
  473. package/dist/providers/zai-coding-cn.js.map +1 -0
  474. package/dist/providers/zai-coding-cn.models.d.ts +153 -0
  475. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -0
  476. package/dist/providers/zai-coding-cn.models.js +114 -0
  477. package/dist/providers/zai-coding-cn.models.js.map +1 -0
  478. package/dist/providers/zai.d.ts +3 -0
  479. package/dist/providers/zai.d.ts.map +1 -0
  480. package/dist/providers/zai.js +15 -0
  481. package/dist/providers/zai.js.map +1 -0
  482. package/dist/providers/zai.models.d.ts +153 -0
  483. package/dist/providers/zai.models.d.ts.map +1 -0
  484. package/dist/providers/zai.models.js +114 -0
  485. package/dist/providers/zai.models.js.map +1 -0
  486. package/dist/session-resources.d.ts +4 -0
  487. package/dist/session-resources.d.ts.map +1 -0
  488. package/dist/session-resources.js +22 -0
  489. package/dist/session-resources.js.map +1 -0
  490. package/dist/types.d.ts +262 -18
  491. package/dist/types.d.ts.map +1 -1
  492. package/dist/types.js.map +1 -1
  493. package/dist/utils/abort-signals.d.ts +6 -0
  494. package/dist/utils/abort-signals.d.ts.map +1 -0
  495. package/dist/utils/abort-signals.js +34 -0
  496. package/dist/utils/abort-signals.js.map +1 -0
  497. package/dist/utils/diagnostics.d.ts +19 -0
  498. package/dist/utils/diagnostics.d.ts.map +1 -0
  499. package/dist/utils/diagnostics.js +25 -0
  500. package/dist/utils/diagnostics.js.map +1 -0
  501. package/dist/utils/error-body.d.ts +25 -0
  502. package/dist/utils/error-body.d.ts.map +1 -0
  503. package/dist/utils/error-body.js +109 -0
  504. package/dist/utils/error-body.js.map +1 -0
  505. package/dist/utils/estimate.d.ts +17 -0
  506. package/dist/utils/estimate.d.ts.map +1 -0
  507. package/dist/utils/estimate.js +95 -0
  508. package/dist/utils/estimate.js.map +1 -0
  509. package/dist/utils/event-stream.d.ts +3 -3
  510. package/dist/utils/event-stream.d.ts.map +1 -1
  511. package/dist/utils/event-stream.js +2 -2
  512. package/dist/utils/event-stream.js.map +1 -1
  513. package/dist/utils/headers.d.ts +4 -0
  514. package/dist/utils/headers.d.ts.map +1 -0
  515. package/dist/utils/headers.js +18 -0
  516. package/dist/utils/headers.js.map +1 -0
  517. package/dist/utils/json-parse.d.ts +8 -1
  518. package/dist/utils/json-parse.d.ts.map +1 -1
  519. package/dist/utils/json-parse.js +89 -5
  520. package/dist/utils/json-parse.js.map +1 -1
  521. package/dist/utils/node-http-proxy.d.ts +4 -0
  522. package/dist/utils/node-http-proxy.d.ts.map +1 -0
  523. package/dist/utils/node-http-proxy.js +92 -0
  524. package/dist/utils/node-http-proxy.js.map +1 -0
  525. package/dist/utils/oauth/anthropic.d.ts +3 -1
  526. package/dist/utils/oauth/anthropic.d.ts.map +1 -1
  527. package/dist/utils/oauth/anthropic.js +33 -1
  528. package/dist/utils/oauth/anthropic.js.map +1 -1
  529. package/dist/utils/oauth/device-code.d.ts +23 -0
  530. package/dist/utils/oauth/device-code.d.ts.map +1 -0
  531. package/dist/utils/oauth/device-code.js +69 -0
  532. package/dist/utils/oauth/device-code.js.map +1 -0
  533. package/dist/utils/oauth/github-copilot.d.ts +5 -3
  534. package/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  535. package/dist/utils/oauth/github-copilot.js +158 -79
  536. package/dist/utils/oauth/github-copilot.js.map +1 -1
  537. package/dist/utils/oauth/index.d.ts +8 -11
  538. package/dist/utils/oauth/index.d.ts.map +1 -1
  539. package/dist/utils/oauth/index.js +2 -11
  540. package/dist/utils/oauth/index.js.map +1 -1
  541. package/dist/utils/oauth/load.d.ts +5 -0
  542. package/dist/utils/oauth/load.d.ts.map +1 -0
  543. package/dist/utils/oauth/load.js +22 -0
  544. package/dist/utils/oauth/load.js.map +1 -0
  545. package/dist/utils/oauth/openai-codex.d.ts +13 -2
  546. package/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  547. package/dist/utils/oauth/openai-codex.js +237 -73
  548. package/dist/utils/oauth/openai-codex.js.map +1 -1
  549. package/dist/utils/oauth/types.d.ts +18 -1
  550. package/dist/utils/oauth/types.d.ts.map +1 -1
  551. package/dist/utils/oauth/types.js.map +1 -1
  552. package/dist/utils/overflow.d.ts +8 -3
  553. package/dist/utils/overflow.d.ts.map +1 -1
  554. package/dist/utils/overflow.js +29 -3
  555. package/dist/utils/overflow.js.map +1 -1
  556. package/dist/utils/provider-env.d.ts +7 -0
  557. package/dist/utils/provider-env.d.ts.map +1 -0
  558. package/dist/utils/provider-env.js +44 -0
  559. package/dist/utils/provider-env.js.map +1 -0
  560. package/dist/utils/retry.d.ts +12 -0
  561. package/dist/utils/retry.d.ts.map +1 -0
  562. package/dist/utils/retry.js +87 -0
  563. package/dist/utils/retry.js.map +1 -0
  564. package/dist/utils/typebox-helpers.d.ts +1 -1
  565. package/dist/utils/typebox-helpers.d.ts.map +1 -1
  566. package/dist/utils/typebox-helpers.js +1 -1
  567. package/dist/utils/typebox-helpers.js.map +1 -1
  568. package/dist/utils/validation.d.ts +1 -1
  569. package/dist/utils/validation.d.ts.map +1 -1
  570. package/dist/utils/validation.js +230 -41
  571. package/dist/utils/validation.js.map +1 -1
  572. package/package.json +24 -44
  573. package/dist/api-registry.d.ts +0 -20
  574. package/dist/api-registry.d.ts.map +0 -1
  575. package/dist/api-registry.js +0 -44
  576. package/dist/api-registry.js.map +0 -1
  577. package/dist/providers/github-copilot-headers.d.ts.map +0 -1
  578. package/dist/providers/github-copilot-headers.js.map +0 -1
  579. package/dist/providers/google-gemini-cli.d.ts +0 -74
  580. package/dist/providers/google-gemini-cli.d.ts.map +0 -1
  581. package/dist/providers/google-gemini-cli.js +0 -776
  582. package/dist/providers/google-gemini-cli.js.map +0 -1
  583. package/dist/providers/google-shared.d.ts.map +0 -1
  584. package/dist/providers/google-shared.js.map +0 -1
  585. package/dist/providers/openai-codex-responses.d.ts +0 -9
  586. package/dist/providers/openai-codex-responses.d.ts.map +0 -1
  587. package/dist/providers/openai-codex-responses.js +0 -741
  588. package/dist/providers/openai-codex-responses.js.map +0 -1
  589. package/dist/providers/openai-completions.d.ts +0 -15
  590. package/dist/providers/openai-completions.d.ts.map +0 -1
  591. package/dist/providers/openai-completions.js +0 -760
  592. package/dist/providers/openai-completions.js.map +0 -1
  593. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  594. package/dist/providers/openai-responses-shared.js.map +0 -1
  595. package/dist/providers/openai-responses.d.ts.map +0 -1
  596. package/dist/providers/openai-responses.js +0 -190
  597. package/dist/providers/openai-responses.js.map +0 -1
  598. package/dist/providers/register-builtins.d.ts +0 -38
  599. package/dist/providers/register-builtins.d.ts.map +0 -1
  600. package/dist/providers/register-builtins.js +0 -261
  601. package/dist/providers/register-builtins.js.map +0 -1
  602. package/dist/providers/simple-options.d.ts +0 -13
  603. package/dist/providers/simple-options.d.ts.map +0 -1
  604. package/dist/providers/simple-options.js.map +0 -1
  605. package/dist/providers/transform-messages.d.ts.map +0 -1
  606. package/dist/providers/transform-messages.js.map +0 -1
  607. package/dist/stream.d.ts +0 -8
  608. package/dist/stream.d.ts.map +0 -1
  609. package/dist/stream.js +0 -27
  610. package/dist/stream.js.map +0 -1
  611. /package/dist/{providers → api}/github-copilot-headers.js +0 -0
@@ -1,655 +1,39 @@
1
- import { BedrockRuntimeClient, BedrockRuntimeServiceException, StopReason as BedrockStopReason, CachePointType, CacheTTL, ConversationRole, ConverseStreamCommand, ImageFormat, ToolResultStatus, } from "@aws-sdk/client-bedrock-runtime";
2
- import { calculateCost, supportsMax } from "../models.js";
3
- import { AssistantMessageEventStream } from "../utils/event-stream.js";
4
- import { parseStreamingJson } from "../utils/json-parse.js";
5
- import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
6
- import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning } from "./simple-options.js";
7
- import { transformMessages } from "./transform-messages.js";
8
- export const streamBedrock = (model, context, options = {}) => {
9
- const stream = new AssistantMessageEventStream();
10
- (async () => {
11
- const output = {
12
- role: "assistant",
13
- content: [],
14
- api: "bedrock-converse-stream",
15
- provider: model.provider,
16
- model: model.id,
17
- usage: {
18
- input: 0,
19
- output: 0,
20
- cacheRead: 0,
21
- cacheWrite: 0,
22
- totalTokens: 0,
23
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
24
- },
25
- stopReason: "stop",
26
- timestamp: Date.now(),
27
- };
28
- const blocks = output.content;
29
- const config = {
30
- profile: options.profile,
31
- };
32
- // in Node.js/Bun environment only
33
- if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) {
34
- // Region resolution: explicit option > env vars > SDK default chain.
35
- // When AWS_PROFILE is set, we leave region undefined so the SDK can
36
- // resovle it from aws profile configs. Otherwise fall back to us-east-1.
37
- const explicitRegion = options.region || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION;
38
- if (explicitRegion) {
39
- config.region = explicitRegion;
40
- }
41
- else if (!process.env.AWS_PROFILE) {
42
- config.region = "us-east-1";
43
- }
44
- // Support proxies that don't need authentication
45
- if (process.env.AWS_BEDROCK_SKIP_AUTH === "1") {
46
- config.credentials = {
47
- accessKeyId: "dummy-access-key",
48
- secretAccessKey: "dummy-secret-key",
49
- };
50
- }
51
- if (process.env.HTTP_PROXY ||
52
- process.env.HTTPS_PROXY ||
53
- process.env.NO_PROXY ||
54
- process.env.http_proxy ||
55
- process.env.https_proxy ||
56
- process.env.no_proxy) {
57
- const nodeHttpHandler = await import("@smithy/node-http-handler");
58
- const proxyAgent = await import("proxy-agent");
59
- const agent = new proxyAgent.ProxyAgent();
60
- // Bedrock runtime uses NodeHttp2Handler by default since v3.798.0, which is based
61
- // on `http2` module and has no support for http agent.
62
- // Use NodeHttpHandler to support http agent.
63
- config.requestHandler = new nodeHttpHandler.NodeHttpHandler({
64
- httpAgent: agent,
65
- httpsAgent: agent,
66
- });
67
- }
68
- else if (process.env.AWS_BEDROCK_FORCE_HTTP1 === "1") {
69
- // Some custom endpoints require HTTP/1.1 instead of HTTP/2
70
- const nodeHttpHandler = await import("@smithy/node-http-handler");
71
- config.requestHandler = new nodeHttpHandler.NodeHttpHandler();
72
- }
73
- }
74
- else {
75
- // Non-Node environment (browser): fall back to us-east-1 since
76
- // there's no config file resolution available.
77
- config.region = options.region || "us-east-1";
78
- }
79
- try {
80
- const client = new BedrockRuntimeClient(config);
81
- const cacheRetention = resolveCacheRetention(options.cacheRetention);
82
- let commandInput = {
83
- modelId: model.id,
84
- messages: convertMessages(context, model, cacheRetention),
85
- system: buildSystemPrompt(context.systemPrompt, model, cacheRetention),
86
- inferenceConfig: { maxTokens: options.maxTokens, temperature: options.temperature },
87
- toolConfig: convertToolConfig(context.tools, options.toolChoice),
88
- additionalModelRequestFields: buildAdditionalModelRequestFields(model, options),
89
- ...(options.requestMetadata !== undefined && { requestMetadata: options.requestMetadata }),
90
- };
91
- const nextCommandInput = await options?.onPayload?.(commandInput, model);
92
- if (nextCommandInput !== undefined) {
93
- commandInput = nextCommandInput;
94
- }
95
- const command = new ConverseStreamCommand(commandInput);
96
- const response = await client.send(command, { abortSignal: options.signal });
97
- for await (const item of response.stream) {
98
- if (item.messageStart) {
99
- if (item.messageStart.role !== ConversationRole.ASSISTANT) {
100
- throw new Error("Unexpected assistant message start but got user message start instead");
101
- }
102
- stream.push({ type: "start", partial: output });
103
- }
104
- else if (item.contentBlockStart) {
105
- handleContentBlockStart(item.contentBlockStart, blocks, output, stream);
106
- }
107
- else if (item.contentBlockDelta) {
108
- handleContentBlockDelta(item.contentBlockDelta, blocks, output, stream);
109
- }
110
- else if (item.contentBlockStop) {
111
- handleContentBlockStop(item.contentBlockStop, blocks, output, stream);
112
- }
113
- else if (item.messageStop) {
114
- output.stopReason = mapStopReason(item.messageStop.stopReason);
115
- }
116
- else if (item.metadata) {
117
- handleMetadata(item.metadata, model, output);
118
- }
119
- else if (item.internalServerException) {
120
- throw item.internalServerException;
121
- }
122
- else if (item.modelStreamErrorException) {
123
- throw item.modelStreamErrorException;
124
- }
125
- else if (item.validationException) {
126
- throw item.validationException;
127
- }
128
- else if (item.throttlingException) {
129
- throw item.throttlingException;
130
- }
131
- else if (item.serviceUnavailableException) {
132
- throw item.serviceUnavailableException;
133
- }
134
- }
135
- if (options.signal?.aborted) {
136
- throw new Error("Request was aborted");
137
- }
138
- if (output.stopReason === "error" || output.stopReason === "aborted") {
139
- throw new Error("An unknown error occurred");
140
- }
141
- stream.push({ type: "done", reason: output.stopReason, message: output });
142
- stream.end();
143
- }
144
- catch (error) {
145
- for (const block of output.content) {
146
- delete block.index;
147
- delete block.partialJson;
148
- }
149
- output.stopReason = options.signal?.aborted ? "aborted" : "error";
150
- output.errorMessage = formatBedrockError(error);
151
- stream.push({ type: "error", reason: output.stopReason, error: output });
152
- stream.end();
153
- }
154
- })();
155
- return stream;
156
- };
1
+ import { bedrockConverseStreamApi } from "../api/bedrock-converse-stream.lazy.js";
2
+ import { createProvider } from "../models.js";
3
+ import { AMAZON_BEDROCK_MODELS } from "./amazon-bedrock.models.js";
157
4
  /**
158
- * Human-readable prefixes for Bedrock SDK exception names.
159
- * The downstream retry logic in agent-session matches patterns like
160
- * `server.?error` and `service.?unavailable`, so we preserve the legacy
161
- * prefix format rather than using the raw SDK exception name.
5
+ * Bedrock auth is ambient: the AWS SDK's default credential chain handles the
6
+ * actual signing, so `resolve` only reports whether the provider is
7
+ * configured. A stored credential key is surfaced as the bearer token.
162
8
  */
163
- const BEDROCK_ERROR_PREFIXES = {
164
- InternalServerException: "Internal server error",
165
- ModelStreamErrorException: "Model stream error",
166
- ValidationException: "Validation error",
167
- ThrottlingException: "Throttling error",
168
- ServiceUnavailableException: "Service unavailable",
9
+ const bedrockAuth = {
10
+ name: "AWS credentials",
11
+ resolve: async ({ ctx, credential }) => {
12
+ if (credential?.key)
13
+ return { auth: { apiKey: credential.key }, source: "stored credential" };
14
+ if (await ctx.env("AWS_BEARER_TOKEN_BEDROCK"))
15
+ return { auth: {}, source: "AWS_BEARER_TOKEN_BEDROCK" };
16
+ if (await ctx.env("AWS_PROFILE"))
17
+ return { auth: {}, source: "AWS_PROFILE" };
18
+ if ((await ctx.env("AWS_ACCESS_KEY_ID")) && (await ctx.env("AWS_SECRET_ACCESS_KEY"))) {
19
+ return { auth: {}, source: "AWS access keys" };
20
+ }
21
+ if (await ctx.env("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"))
22
+ return { auth: {}, source: "ECS task role" };
23
+ if (await ctx.env("AWS_CONTAINER_CREDENTIALS_FULL_URI"))
24
+ return { auth: {}, source: "ECS task role" };
25
+ if (await ctx.env("AWS_WEB_IDENTITY_TOKEN_FILE"))
26
+ return { auth: {}, source: "web identity token" };
27
+ return undefined;
28
+ },
169
29
  };
170
- /**
171
- * Format a Bedrock error with a human-readable prefix.
172
- * AWS SDK exceptions (both from `client.send()` and from stream event items)
173
- * extend BedrockRuntimeServiceException. We map the `.name` to a stable
174
- * human-readable prefix so downstream consumers (retry logic, context-overflow
175
- * detection) can distinguish error categories via simple string matching.
176
- */
177
- function formatBedrockError(error) {
178
- const message = error instanceof Error ? error.message : JSON.stringify(error);
179
- if (error instanceof BedrockRuntimeServiceException) {
180
- const prefix = BEDROCK_ERROR_PREFIXES[error.name] ?? error.name;
181
- return `${prefix}: ${message}`;
182
- }
183
- return message;
184
- }
185
- export const streamSimpleBedrock = (model, context, options) => {
186
- const base = buildBaseOptions(model, options, undefined);
187
- if (!options?.reasoning) {
188
- return streamBedrock(model, context, { ...base, reasoning: undefined });
189
- }
190
- if (model.id.includes("anthropic.claude") || model.id.includes("anthropic/claude")) {
191
- if (supportsAdaptiveThinking(model.id)) {
192
- return streamBedrock(model, context, {
193
- ...base,
194
- reasoning: options.reasoning,
195
- thinkingBudgets: options.thinkingBudgets,
196
- });
197
- }
198
- const adjusted = adjustMaxTokensForThinking(base.maxTokens || 0, model.maxTokens, options.reasoning, options.thinkingBudgets);
199
- return streamBedrock(model, context, {
200
- ...base,
201
- maxTokens: adjusted.maxTokens,
202
- reasoning: options.reasoning,
203
- thinkingBudgets: {
204
- ...(options.thinkingBudgets || {}),
205
- [clampReasoning(options.reasoning)]: adjusted.thinkingBudget,
206
- },
207
- });
208
- }
209
- return streamBedrock(model, context, {
210
- ...base,
211
- reasoning: options.reasoning,
212
- thinkingBudgets: options.thinkingBudgets,
30
+ export function amazonBedrockProvider() {
31
+ return createProvider({
32
+ id: "amazon-bedrock",
33
+ name: "Amazon Bedrock",
34
+ auth: { apiKey: bedrockAuth },
35
+ models: Object.values(AMAZON_BEDROCK_MODELS),
36
+ api: bedrockConverseStreamApi(),
213
37
  });
214
- };
215
- function handleContentBlockStart(event, blocks, output, stream) {
216
- const index = event.contentBlockIndex;
217
- const start = event.start;
218
- if (start?.toolUse) {
219
- const block = {
220
- type: "toolCall",
221
- id: start.toolUse.toolUseId || "",
222
- name: start.toolUse.name || "",
223
- arguments: {},
224
- partialJson: "",
225
- index,
226
- };
227
- output.content.push(block);
228
- stream.push({ type: "toolcall_start", contentIndex: blocks.length - 1, partial: output });
229
- }
230
- }
231
- function handleContentBlockDelta(event, blocks, output, stream) {
232
- const contentBlockIndex = event.contentBlockIndex;
233
- const delta = event.delta;
234
- let index = blocks.findIndex((b) => b.index === contentBlockIndex);
235
- let block = blocks[index];
236
- if (delta?.text !== undefined) {
237
- // If no text block exists yet, create one, as `handleContentBlockStart` is not sent for text blocks
238
- if (!block) {
239
- const newBlock = { type: "text", text: "", index: contentBlockIndex };
240
- output.content.push(newBlock);
241
- index = blocks.length - 1;
242
- block = blocks[index];
243
- stream.push({ type: "text_start", contentIndex: index, partial: output });
244
- }
245
- if (block.type === "text") {
246
- block.text += delta.text;
247
- stream.push({ type: "text_delta", contentIndex: index, delta: delta.text, partial: output });
248
- }
249
- }
250
- else if (delta?.toolUse && block?.type === "toolCall") {
251
- block.partialJson = (block.partialJson || "") + (delta.toolUse.input || "");
252
- block.arguments = parseStreamingJson(block.partialJson);
253
- stream.push({ type: "toolcall_delta", contentIndex: index, delta: delta.toolUse.input || "", partial: output });
254
- }
255
- else if (delta?.reasoningContent) {
256
- let thinkingBlock = block;
257
- let thinkingIndex = index;
258
- if (!thinkingBlock) {
259
- const newBlock = { type: "thinking", thinking: "", thinkingSignature: "", index: contentBlockIndex };
260
- output.content.push(newBlock);
261
- thinkingIndex = blocks.length - 1;
262
- thinkingBlock = blocks[thinkingIndex];
263
- stream.push({ type: "thinking_start", contentIndex: thinkingIndex, partial: output });
264
- }
265
- if (thinkingBlock?.type === "thinking") {
266
- if (delta.reasoningContent.text) {
267
- thinkingBlock.thinking += delta.reasoningContent.text;
268
- stream.push({
269
- type: "thinking_delta",
270
- contentIndex: thinkingIndex,
271
- delta: delta.reasoningContent.text,
272
- partial: output,
273
- });
274
- }
275
- if (delta.reasoningContent.signature) {
276
- thinkingBlock.thinkingSignature =
277
- (thinkingBlock.thinkingSignature || "") + delta.reasoningContent.signature;
278
- }
279
- }
280
- }
281
- }
282
- function handleMetadata(event, model, output) {
283
- if (event.usage) {
284
- output.usage.input = event.usage.inputTokens || 0;
285
- output.usage.output = event.usage.outputTokens || 0;
286
- output.usage.cacheRead = event.usage.cacheReadInputTokens || 0;
287
- output.usage.cacheWrite = event.usage.cacheWriteInputTokens || 0;
288
- output.usage.totalTokens = event.usage.totalTokens || output.usage.input + output.usage.output;
289
- calculateCost(model, output.usage);
290
- }
291
- }
292
- function handleContentBlockStop(event, blocks, output, stream) {
293
- const index = blocks.findIndex((b) => b.index === event.contentBlockIndex);
294
- const block = blocks[index];
295
- if (!block)
296
- return;
297
- delete block.index;
298
- switch (block.type) {
299
- case "text":
300
- stream.push({ type: "text_end", contentIndex: index, content: block.text, partial: output });
301
- break;
302
- case "thinking":
303
- stream.push({ type: "thinking_end", contentIndex: index, content: block.thinking, partial: output });
304
- break;
305
- case "toolCall":
306
- block.arguments = parseStreamingJson(block.partialJson);
307
- delete block.partialJson;
308
- stream.push({ type: "toolcall_end", contentIndex: index, toolCall: block, partial: output });
309
- break;
310
- }
311
- }
312
- /**
313
- * Check if the model supports adaptive thinking (Opus 4.6 and Sonnet 4.6).
314
- */
315
- function supportsAdaptiveThinking(modelId) {
316
- return (modelId.includes("opus-4-6") ||
317
- modelId.includes("opus-4.6") ||
318
- modelId.includes("sonnet-4-6") ||
319
- modelId.includes("sonnet-4.6"));
320
- }
321
- function mapThinkingLevelToEffort(level, modelId) {
322
- const supportsMaxEffort = supportsMax({ id: modelId });
323
- switch (level) {
324
- case "minimal":
325
- case "low":
326
- return "low";
327
- case "medium":
328
- return "medium";
329
- case "high":
330
- return "high";
331
- case "xhigh":
332
- return supportsMaxEffort ? "max" : "high";
333
- case "max":
334
- return supportsMaxEffort ? "max" : "high";
335
- default:
336
- return "high";
337
- }
338
- }
339
- /**
340
- * Resolve cache retention preference.
341
- * Defaults to "short" and uses PI_CACHE_RETENTION for backward compatibility.
342
- */
343
- function resolveCacheRetention(cacheRetention) {
344
- if (cacheRetention) {
345
- return cacheRetention;
346
- }
347
- if (typeof process !== "undefined" && process.env.PI_CACHE_RETENTION === "long") {
348
- return "long";
349
- }
350
- return "short";
351
- }
352
- /**
353
- * Check if the model supports prompt caching.
354
- * Supported: Claude 3.5 Haiku, Claude 3.7 Sonnet, Claude 4.x models
355
- *
356
- * For base models and system-defined inference profiles the model ID / ARN
357
- * contains the model name, so we can decide locally.
358
- *
359
- * For application inference profiles (whose ARNs don't contain the model name),
360
- * set AWS_BEDROCK_FORCE_CACHE=1 to enable cache points. Amazon Nova models
361
- * have automatic caching and don't need explicit cache points.
362
- */
363
- function supportsPromptCaching(model) {
364
- const id = model.id.toLowerCase();
365
- if (!id.includes("claude")) {
366
- // Application inference profiles don't contain the model name in the ARN.
367
- // Allow users to force cache points via environment variable.
368
- if (typeof process !== "undefined" && process.env.AWS_BEDROCK_FORCE_CACHE === "1")
369
- return true;
370
- return false;
371
- }
372
- // Claude 4.x models (opus-4, sonnet-4, haiku-4)
373
- if (id.includes("-4-") || id.includes("-4."))
374
- return true;
375
- // Claude 3.7 Sonnet
376
- if (id.includes("claude-3-7-sonnet"))
377
- return true;
378
- // Claude 3.5 Haiku
379
- if (id.includes("claude-3-5-haiku"))
380
- return true;
381
- return false;
382
- }
383
- /**
384
- * Check if the model supports thinking signatures in reasoningContent.
385
- * Only Anthropic Claude models support the signature field.
386
- * Other models (OpenAI, Qwen, Minimax, Moonshot, etc.) reject it with:
387
- * "This model doesn't support the reasoningContent.reasoningText.signature field"
388
- */
389
- function supportsThinkingSignature(model) {
390
- const id = model.id.toLowerCase();
391
- return id.includes("anthropic.claude") || id.includes("anthropic/claude");
392
- }
393
- function buildSystemPrompt(systemPrompt, model, cacheRetention) {
394
- if (!systemPrompt)
395
- return undefined;
396
- const blocks = [{ text: sanitizeSurrogates(systemPrompt) }];
397
- // Add cache point for supported Claude models when caching is enabled
398
- if (cacheRetention !== "none" && supportsPromptCaching(model)) {
399
- blocks.push({
400
- cachePoint: { type: CachePointType.DEFAULT, ...(cacheRetention === "long" ? { ttl: CacheTTL.ONE_HOUR } : {}) },
401
- });
402
- }
403
- return blocks;
404
- }
405
- function normalizeToolCallId(id) {
406
- const sanitized = id.replace(/[^a-zA-Z0-9_-]/g, "_");
407
- return sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;
408
- }
409
- function convertMessages(context, model, cacheRetention) {
410
- const result = [];
411
- const transformedMessages = transformMessages(context.messages, model, normalizeToolCallId);
412
- for (let i = 0; i < transformedMessages.length; i++) {
413
- const m = transformedMessages[i];
414
- switch (m.role) {
415
- case "user":
416
- result.push({
417
- role: ConversationRole.USER,
418
- content: typeof m.content === "string"
419
- ? [{ text: sanitizeSurrogates(m.content) }]
420
- : m.content.map((c) => {
421
- switch (c.type) {
422
- case "text":
423
- return { text: sanitizeSurrogates(c.text) };
424
- case "image":
425
- return { image: createImageBlock(c.mimeType, c.data) };
426
- default:
427
- throw new Error("Unknown user content type");
428
- }
429
- }),
430
- });
431
- break;
432
- case "assistant": {
433
- // Skip assistant messages with empty content (e.g., from aborted requests)
434
- // Bedrock rejects messages with empty content arrays
435
- if (m.content.length === 0) {
436
- continue;
437
- }
438
- const contentBlocks = [];
439
- for (const c of m.content) {
440
- switch (c.type) {
441
- case "text":
442
- // Skip empty text blocks
443
- if (c.text.trim().length === 0)
444
- continue;
445
- contentBlocks.push({ text: sanitizeSurrogates(c.text) });
446
- break;
447
- case "toolCall":
448
- contentBlocks.push({
449
- toolUse: { toolUseId: c.id, name: c.name, input: c.arguments },
450
- });
451
- break;
452
- case "thinking":
453
- // Skip empty thinking blocks
454
- if (c.thinking.trim().length === 0)
455
- continue;
456
- // Only Anthropic models support the signature field in reasoningText.
457
- // For other models, we omit the signature to avoid errors like:
458
- // "This model doesn't support the reasoningContent.reasoningText.signature field"
459
- if (supportsThinkingSignature(model)) {
460
- // Signatures arrive after thinking deltas. If a partial or externally
461
- // persisted message lacks a signature, Bedrock rejects the replayed
462
- // reasoning block. Fall back to plain text, matching Anthropic.
463
- if (!c.thinkingSignature || c.thinkingSignature.trim().length === 0) {
464
- contentBlocks.push({ text: sanitizeSurrogates(c.thinking) });
465
- }
466
- else {
467
- contentBlocks.push({
468
- reasoningContent: {
469
- reasoningText: {
470
- text: sanitizeSurrogates(c.thinking),
471
- signature: c.thinkingSignature,
472
- },
473
- },
474
- });
475
- }
476
- }
477
- else {
478
- contentBlocks.push({
479
- reasoningContent: {
480
- reasoningText: { text: sanitizeSurrogates(c.thinking) },
481
- },
482
- });
483
- }
484
- break;
485
- default:
486
- throw new Error("Unknown assistant content type");
487
- }
488
- }
489
- // Skip if all content blocks were filtered out
490
- if (contentBlocks.length === 0) {
491
- continue;
492
- }
493
- result.push({
494
- role: ConversationRole.ASSISTANT,
495
- content: contentBlocks,
496
- });
497
- break;
498
- }
499
- case "toolResult": {
500
- // Collect all consecutive toolResult messages into a single user message
501
- // Bedrock requires all tool results to be in one message
502
- const toolResults = [];
503
- // Add current tool result with all content blocks combined
504
- toolResults.push({
505
- toolResult: {
506
- toolUseId: m.toolCallId,
507
- content: m.content.map((c) => c.type === "image"
508
- ? { image: createImageBlock(c.mimeType, c.data) }
509
- : { text: sanitizeSurrogates(c.text) }),
510
- status: m.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,
511
- },
512
- });
513
- // Look ahead for consecutive toolResult messages
514
- let j = i + 1;
515
- while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") {
516
- const nextMsg = transformedMessages[j];
517
- toolResults.push({
518
- toolResult: {
519
- toolUseId: nextMsg.toolCallId,
520
- content: nextMsg.content.map((c) => c.type === "image"
521
- ? { image: createImageBlock(c.mimeType, c.data) }
522
- : { text: sanitizeSurrogates(c.text) }),
523
- status: nextMsg.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,
524
- },
525
- });
526
- j++;
527
- }
528
- // Skip the messages we've already processed
529
- i = j - 1;
530
- result.push({
531
- role: ConversationRole.USER,
532
- content: toolResults,
533
- });
534
- break;
535
- }
536
- default:
537
- throw new Error("Unknown message role");
538
- }
539
- }
540
- // Add cache point to the last user message for supported Claude models when caching is enabled
541
- if (cacheRetention !== "none" && supportsPromptCaching(model) && result.length > 0) {
542
- const lastMessage = result[result.length - 1];
543
- if (lastMessage.role === ConversationRole.USER && lastMessage.content) {
544
- lastMessage.content.push({
545
- cachePoint: {
546
- type: CachePointType.DEFAULT,
547
- ...(cacheRetention === "long" ? { ttl: CacheTTL.ONE_HOUR } : {}),
548
- },
549
- });
550
- }
551
- }
552
- return result;
553
- }
554
- function convertToolConfig(tools, toolChoice) {
555
- if (!tools?.length || toolChoice === "none")
556
- return undefined;
557
- const bedrockTools = tools.map((tool) => ({
558
- toolSpec: {
559
- name: tool.name,
560
- description: tool.description,
561
- inputSchema: { json: tool.parameters },
562
- },
563
- }));
564
- let bedrockToolChoice;
565
- switch (toolChoice) {
566
- case "auto":
567
- bedrockToolChoice = { auto: {} };
568
- break;
569
- case "any":
570
- bedrockToolChoice = { any: {} };
571
- break;
572
- default:
573
- if (toolChoice?.type === "tool") {
574
- bedrockToolChoice = { tool: { name: toolChoice.name } };
575
- }
576
- }
577
- return { tools: bedrockTools, toolChoice: bedrockToolChoice };
578
- }
579
- function mapStopReason(reason) {
580
- switch (reason) {
581
- case BedrockStopReason.END_TURN:
582
- case BedrockStopReason.STOP_SEQUENCE:
583
- return "stop";
584
- case BedrockStopReason.MAX_TOKENS:
585
- case BedrockStopReason.MODEL_CONTEXT_WINDOW_EXCEEDED:
586
- return "length";
587
- case BedrockStopReason.TOOL_USE:
588
- return "toolUse";
589
- default:
590
- return "error";
591
- }
592
- }
593
- function buildAdditionalModelRequestFields(model, options) {
594
- if (!options.reasoning || !model.reasoning) {
595
- return undefined;
596
- }
597
- if (model.id.includes("anthropic.claude") || model.id.includes("anthropic/claude")) {
598
- const result = supportsAdaptiveThinking(model.id)
599
- ? {
600
- thinking: { type: "adaptive" },
601
- output_config: { effort: mapThinkingLevelToEffort(options.reasoning, model.id) },
602
- }
603
- : (() => {
604
- const defaultBudgets = {
605
- minimal: 1024,
606
- low: 2048,
607
- medium: 8192,
608
- high: 16384,
609
- xhigh: 16384, // Older Claude models don't support xhigh, clamp to high budget
610
- max: 16384, // Older Claude models don't support max, clamp to high budget
611
- };
612
- // Custom budgets override defaults (xhigh/max not in ThinkingBudgets, use high)
613
- const level = options.reasoning === "xhigh" || options.reasoning === "max" ? "high" : options.reasoning;
614
- const budget = options.thinkingBudgets?.[level] ?? defaultBudgets[options.reasoning];
615
- return {
616
- thinking: {
617
- type: "enabled",
618
- budget_tokens: budget,
619
- },
620
- };
621
- })();
622
- if (!supportsAdaptiveThinking(model.id) && (options.interleavedThinking ?? true)) {
623
- result.anthropic_beta = ["interleaved-thinking-2025-05-14"];
624
- }
625
- return result;
626
- }
627
- return undefined;
628
- }
629
- function createImageBlock(mimeType, data) {
630
- let format;
631
- switch (mimeType) {
632
- case "image/jpeg":
633
- case "image/jpg":
634
- format = ImageFormat.JPEG;
635
- break;
636
- case "image/png":
637
- format = ImageFormat.PNG;
638
- break;
639
- case "image/gif":
640
- format = ImageFormat.GIF;
641
- break;
642
- case "image/webp":
643
- format = ImageFormat.WEBP;
644
- break;
645
- default:
646
- throw new Error(`Unknown image type: ${mimeType}`);
647
- }
648
- const binaryString = atob(data);
649
- const bytes = new Uint8Array(binaryString.length);
650
- for (let i = 0; i < binaryString.length; i++) {
651
- bytes[i] = binaryString.charCodeAt(i);
652
- }
653
- return { source: { bytes }, format };
654
38
  }
655
39
  //# sourceMappingURL=amazon-bedrock.js.map