@ny4n/ai 0.0.0-stage → 1.0.0

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 (821) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1940 -2
  3. package/dist/api/anthropic-messages.d.ts +71 -0
  4. package/dist/api/anthropic-messages.d.ts.map +1 -0
  5. package/dist/api/anthropic-messages.js +1310 -0
  6. package/dist/api/anthropic-messages.js.map +1 -0
  7. package/dist/api/anthropic-messages.lazy.d.ts +3 -0
  8. package/dist/api/anthropic-messages.lazy.d.ts.map +1 -0
  9. package/dist/api/anthropic-messages.lazy.js +3 -0
  10. package/dist/api/anthropic-messages.lazy.js.map +1 -0
  11. package/dist/api/azure-openai-config.d.ts +15 -0
  12. package/dist/api/azure-openai-config.d.ts.map +1 -0
  13. package/dist/api/azure-openai-config.js +76 -0
  14. package/dist/api/azure-openai-config.js.map +1 -0
  15. package/dist/api/azure-openai-responses.d.ts +14 -0
  16. package/dist/api/azure-openai-responses.d.ts.map +1 -0
  17. package/dist/api/azure-openai-responses.js +194 -0
  18. package/dist/api/azure-openai-responses.js.map +1 -0
  19. package/dist/api/azure-openai-responses.lazy.d.ts +3 -0
  20. package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -0
  21. package/dist/api/azure-openai-responses.lazy.js +3 -0
  22. package/dist/api/azure-openai-responses.lazy.js.map +1 -0
  23. package/dist/api/bedrock-converse-stream.d.ts +38 -0
  24. package/dist/api/bedrock-converse-stream.d.ts.map +1 -0
  25. package/dist/api/bedrock-converse-stream.js +1147 -0
  26. package/dist/api/bedrock-converse-stream.js.map +1 -0
  27. package/dist/api/bedrock-converse-stream.lazy.d.ts +9 -0
  28. package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -0
  29. package/dist/api/bedrock-converse-stream.lazy.js +30 -0
  30. package/dist/api/bedrock-converse-stream.lazy.js.map +1 -0
  31. package/dist/api/classifier-shared.d.ts +21 -0
  32. package/dist/api/classifier-shared.d.ts.map +1 -0
  33. package/dist/api/classifier-shared.js +98 -0
  34. package/dist/api/classifier-shared.js.map +1 -0
  35. package/dist/api/cloudflare-ai-binding.d.ts +77 -0
  36. package/dist/api/cloudflare-ai-binding.d.ts.map +1 -0
  37. package/dist/api/cloudflare-ai-binding.js +72 -0
  38. package/dist/api/cloudflare-ai-binding.js.map +1 -0
  39. package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
  40. package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
  41. package/dist/api/cloudflare-workers-ai-system-one.js +49 -0
  42. package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
  43. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
  44. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
  45. package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
  46. package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
  47. package/dist/api/cloudflare.d.ts +11 -0
  48. package/dist/api/cloudflare.d.ts.map +1 -0
  49. package/dist/api/cloudflare.js +11 -0
  50. package/dist/api/cloudflare.js.map +1 -0
  51. package/dist/api/constrained-sampling.d.ts +26 -0
  52. package/dist/api/constrained-sampling.d.ts.map +1 -0
  53. package/dist/api/constrained-sampling.js +233 -0
  54. package/dist/api/constrained-sampling.js.map +1 -0
  55. package/dist/api/github-copilot-headers.d.ts +8 -0
  56. package/dist/api/github-copilot-headers.d.ts.map +1 -0
  57. package/dist/api/github-copilot-headers.js +29 -0
  58. package/dist/api/github-copilot-headers.js.map +1 -0
  59. package/dist/api/google-generative-ai.d.ts +13 -0
  60. package/dist/api/google-generative-ai.d.ts.map +1 -0
  61. package/dist/api/google-generative-ai.js +370 -0
  62. package/dist/api/google-generative-ai.js.map +1 -0
  63. package/dist/api/google-generative-ai.lazy.d.ts +3 -0
  64. package/dist/api/google-generative-ai.lazy.d.ts.map +1 -0
  65. package/dist/api/google-generative-ai.lazy.js +3 -0
  66. package/dist/api/google-generative-ai.lazy.js.map +1 -0
  67. package/dist/api/google-shared.d.ts +93 -0
  68. package/dist/api/google-shared.d.ts.map +1 -0
  69. package/dist/api/google-shared.js +451 -0
  70. package/dist/api/google-shared.js.map +1 -0
  71. package/dist/api/google-vertex.d.ts +15 -0
  72. package/dist/api/google-vertex.d.ts.map +1 -0
  73. package/dist/api/google-vertex.js +431 -0
  74. package/dist/api/google-vertex.js.map +1 -0
  75. package/dist/api/google-vertex.lazy.d.ts +3 -0
  76. package/dist/api/google-vertex.lazy.d.ts.map +1 -0
  77. package/dist/api/google-vertex.lazy.js +3 -0
  78. package/dist/api/google-vertex.lazy.js.map +1 -0
  79. package/dist/api/lazy.d.ts +19 -0
  80. package/dist/api/lazy.d.ts.map +1 -0
  81. package/dist/api/lazy.js +71 -0
  82. package/dist/api/lazy.js.map +1 -0
  83. package/dist/api/llama-cpp-classify.d.ts +33 -0
  84. package/dist/api/llama-cpp-classify.d.ts.map +1 -0
  85. package/dist/api/llama-cpp-classify.js +367 -0
  86. package/dist/api/llama-cpp-classify.js.map +1 -0
  87. package/dist/api/llama-cpp-classify.lazy.d.ts +3 -0
  88. package/dist/api/llama-cpp-classify.lazy.d.ts.map +1 -0
  89. package/dist/api/llama-cpp-classify.lazy.js +4 -0
  90. package/dist/api/llama-cpp-classify.lazy.js.map +1 -0
  91. package/dist/api/mistral-conversations.d.ts +25 -0
  92. package/dist/api/mistral-conversations.d.ts.map +1 -0
  93. package/dist/api/mistral-conversations.js +766 -0
  94. package/dist/api/mistral-conversations.js.map +1 -0
  95. package/dist/api/mistral-conversations.lazy.d.ts +3 -0
  96. package/dist/api/mistral-conversations.lazy.d.ts.map +1 -0
  97. package/dist/api/mistral-conversations.lazy.js +3 -0
  98. package/dist/api/mistral-conversations.lazy.js.map +1 -0
  99. package/dist/api/openai-codex-responses.d.ts +31 -0
  100. package/dist/api/openai-codex-responses.d.ts.map +1 -0
  101. package/dist/api/openai-codex-responses.js +1321 -0
  102. package/dist/api/openai-codex-responses.js.map +1 -0
  103. package/dist/api/openai-codex-responses.lazy.d.ts +3 -0
  104. package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -0
  105. package/dist/api/openai-codex-responses.lazy.js +3 -0
  106. package/dist/api/openai-codex-responses.lazy.js.map +1 -0
  107. package/dist/api/openai-completions.d.ts +26 -0
  108. package/dist/api/openai-completions.d.ts.map +1 -0
  109. package/dist/api/openai-completions.js +1345 -0
  110. package/dist/api/openai-completions.js.map +1 -0
  111. package/dist/api/openai-completions.lazy.d.ts +3 -0
  112. package/dist/api/openai-completions.lazy.d.ts.map +1 -0
  113. package/dist/api/openai-completions.lazy.js +3 -0
  114. package/dist/api/openai-completions.lazy.js.map +1 -0
  115. package/dist/api/openai-decisions.d.ts +4 -0
  116. package/dist/api/openai-decisions.d.ts.map +1 -0
  117. package/dist/api/openai-decisions.js +162 -0
  118. package/dist/api/openai-decisions.js.map +1 -0
  119. package/dist/api/openai-decisions.lazy.d.ts +3 -0
  120. package/dist/api/openai-decisions.lazy.d.ts.map +1 -0
  121. package/dist/api/openai-decisions.lazy.js +4 -0
  122. package/dist/api/openai-decisions.lazy.js.map +1 -0
  123. package/dist/api/openai-prompt-cache.d.ts +3 -0
  124. package/dist/api/openai-prompt-cache.d.ts.map +1 -0
  125. package/dist/api/openai-prompt-cache.js +10 -0
  126. package/dist/api/openai-prompt-cache.js.map +1 -0
  127. package/dist/api/openai-responses-shared.d.ts +29 -0
  128. package/dist/api/openai-responses-shared.d.ts.map +1 -0
  129. package/dist/api/openai-responses-shared.js +704 -0
  130. package/dist/api/openai-responses-shared.js.map +1 -0
  131. package/dist/api/openai-responses.d.ts +14 -0
  132. package/dist/api/openai-responses.d.ts.map +1 -0
  133. package/dist/api/openai-responses.js +314 -0
  134. package/dist/api/openai-responses.js.map +1 -0
  135. package/dist/api/openai-responses.lazy.d.ts +3 -0
  136. package/dist/api/openai-responses.lazy.d.ts.map +1 -0
  137. package/dist/api/openai-responses.lazy.js +3 -0
  138. package/dist/api/openai-responses.lazy.js.map +1 -0
  139. package/dist/api/openrouter-images.d.ts +4 -0
  140. package/dist/api/openrouter-images.d.ts.map +1 -0
  141. package/dist/api/openrouter-images.js +133 -0
  142. package/dist/api/openrouter-images.js.map +1 -0
  143. package/dist/api/openrouter-images.lazy.d.ts +3 -0
  144. package/dist/api/openrouter-images.lazy.d.ts.map +1 -0
  145. package/dist/api/openrouter-images.lazy.js +4 -0
  146. package/dist/api/openrouter-images.lazy.js.map +1 -0
  147. package/dist/api/simple-options.d.ts +16 -0
  148. package/dist/api/simple-options.d.ts.map +1 -0
  149. package/dist/api/simple-options.js +73 -0
  150. package/dist/api/simple-options.js.map +1 -0
  151. package/dist/api/system-one-shared.d.ts +22 -0
  152. package/dist/api/system-one-shared.d.ts.map +1 -0
  153. package/dist/api/system-one-shared.js +99 -0
  154. package/dist/api/system-one-shared.js.map +1 -0
  155. package/dist/api/transform-messages.d.ts +8 -0
  156. package/dist/api/transform-messages.d.ts.map +1 -0
  157. package/dist/api/transform-messages.js +201 -0
  158. package/dist/api/transform-messages.js.map +1 -0
  159. package/dist/api/typesafe-system-one.d.ts +4 -0
  160. package/dist/api/typesafe-system-one.d.ts.map +1 -0
  161. package/dist/api/typesafe-system-one.js +20 -0
  162. package/dist/api/typesafe-system-one.js.map +1 -0
  163. package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
  164. package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
  165. package/dist/api/typesafe-system-one.lazy.js +4 -0
  166. package/dist/api/typesafe-system-one.lazy.js.map +1 -0
  167. package/dist/api-options.d.ts +39 -0
  168. package/dist/api-options.d.ts.map +1 -0
  169. package/dist/api-options.js +9 -0
  170. package/dist/api-options.js.map +1 -0
  171. package/dist/auth/context.d.ts +7 -0
  172. package/dist/auth/context.d.ts.map +1 -0
  173. package/dist/auth/context.js +42 -0
  174. package/dist/auth/context.js.map +1 -0
  175. package/dist/auth/credential-store.d.ts +17 -0
  176. package/dist/auth/credential-store.d.ts.map +1 -0
  177. package/dist/auth/credential-store.js +51 -0
  178. package/dist/auth/credential-store.js.map +1 -0
  179. package/dist/auth/helpers.d.ts +22 -0
  180. package/dist/auth/helpers.d.ts.map +1 -0
  181. package/dist/auth/helpers.js +53 -0
  182. package/dist/auth/helpers.js.map +1 -0
  183. package/dist/auth/oauth/anthropic.d.ts +9 -0
  184. package/dist/auth/oauth/anthropic.d.ts.map +1 -0
  185. package/dist/auth/oauth/anthropic.js +257 -0
  186. package/dist/auth/oauth/anthropic.js.map +1 -0
  187. package/dist/auth/oauth/callback-server.d.ts +55 -0
  188. package/dist/auth/oauth/callback-server.d.ts.map +1 -0
  189. package/dist/auth/oauth/callback-server.js +146 -0
  190. package/dist/auth/oauth/callback-server.js.map +1 -0
  191. package/dist/auth/oauth/device-code.d.ts +24 -0
  192. package/dist/auth/oauth/device-code.d.ts.map +1 -0
  193. package/dist/auth/oauth/device-code.js +69 -0
  194. package/dist/auth/oauth/device-code.js.map +1 -0
  195. package/dist/auth/oauth/github-copilot.d.ts +6 -0
  196. package/dist/auth/oauth/github-copilot.d.ts.map +1 -0
  197. package/dist/auth/oauth/github-copilot.js +392 -0
  198. package/dist/auth/oauth/github-copilot.js.map +1 -0
  199. package/dist/auth/oauth/kimi-coding.d.ts +10 -0
  200. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
  201. package/dist/auth/oauth/kimi-coding.js +248 -0
  202. package/dist/auth/oauth/kimi-coding.js.map +1 -0
  203. package/dist/auth/oauth/load.d.ts +23 -0
  204. package/dist/auth/oauth/load.d.ts.map +1 -0
  205. package/dist/auth/oauth/load.js +64 -0
  206. package/dist/auth/oauth/load.js.map +1 -0
  207. package/dist/auth/oauth/meta.d.ts +17 -0
  208. package/dist/auth/oauth/meta.d.ts.map +1 -0
  209. package/dist/auth/oauth/meta.js +190 -0
  210. package/dist/auth/oauth/meta.js.map +1 -0
  211. package/dist/auth/oauth/openai-chatgpt.d.ts +9 -0
  212. package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -0
  213. package/dist/auth/oauth/openai-chatgpt.js +263 -0
  214. package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
  215. package/dist/auth/oauth/openai-codex.d.ts +9 -0
  216. package/dist/auth/oauth/openai-codex.d.ts.map +1 -0
  217. package/dist/auth/oauth/openai-codex.js +346 -0
  218. package/dist/auth/oauth/openai-codex.js.map +1 -0
  219. package/dist/auth/oauth/openrouter.d.ts +15 -0
  220. package/dist/auth/oauth/openrouter.d.ts.map +1 -0
  221. package/dist/auth/oauth/openrouter.js +158 -0
  222. package/dist/auth/oauth/openrouter.js.map +1 -0
  223. package/dist/auth/oauth/pkce.d.ts +13 -0
  224. package/dist/auth/oauth/pkce.d.ts.map +1 -0
  225. package/dist/auth/oauth/pkce.js +31 -0
  226. package/dist/auth/oauth/pkce.js.map +1 -0
  227. package/dist/auth/oauth/xai.d.ts +6 -0
  228. package/dist/auth/oauth/xai.d.ts.map +1 -0
  229. package/dist/auth/oauth/xai.js +190 -0
  230. package/dist/auth/oauth/xai.js.map +1 -0
  231. package/dist/auth/resolve.d.ts +36 -0
  232. package/dist/auth/resolve.d.ts.map +1 -0
  233. package/dist/auth/resolve.js +140 -0
  234. package/dist/auth/resolve.js.map +1 -0
  235. package/dist/auth/types.d.ts +245 -0
  236. package/dist/auth/types.d.ts.map +1 -0
  237. package/dist/auth/types.js +2 -0
  238. package/dist/auth/types.js.map +1 -0
  239. package/dist/bedrock-provider.d.ts +5 -0
  240. package/dist/bedrock-provider.d.ts.map +1 -0
  241. package/dist/bedrock-provider.js +6 -0
  242. package/dist/bedrock-provider.js.map +1 -0
  243. package/dist/bun-oauth.d.ts +3 -0
  244. package/dist/bun-oauth.d.ts.map +1 -0
  245. package/dist/bun-oauth.js +23 -0
  246. package/dist/bun-oauth.js.map +1 -0
  247. package/dist/cli.d.ts +3 -0
  248. package/dist/cli.d.ts.map +1 -0
  249. package/dist/cli.js +115 -0
  250. package/dist/cli.js.map +1 -0
  251. package/dist/compat/extension-oauth-types.d.ts +39 -0
  252. package/dist/compat/extension-oauth-types.d.ts.map +1 -0
  253. package/dist/compat/extension-oauth-types.js +2 -0
  254. package/dist/compat/extension-oauth-types.js.map +1 -0
  255. package/dist/compat.d.ts +66 -0
  256. package/dist/compat.d.ts.map +1 -0
  257. package/dist/compat.js +199 -0
  258. package/dist/compat.js.map +1 -0
  259. package/dist/contracts/index.d.ts +30 -0
  260. package/dist/contracts/index.d.ts.map +1 -0
  261. package/dist/contracts/index.js +12 -0
  262. package/dist/contracts/index.js.map +1 -0
  263. package/dist/env-api-keys.d.ts +26 -0
  264. package/dist/env-api-keys.d.ts.map +1 -0
  265. package/dist/env-api-keys.js +162 -0
  266. package/dist/env-api-keys.js.map +1 -0
  267. package/dist/image-models.d.ts +21 -0
  268. package/dist/image-models.d.ts.map +1 -0
  269. package/dist/image-models.js +24 -0
  270. package/dist/image-models.js.map +1 -0
  271. package/dist/images-api-registry.d.ts +14 -0
  272. package/dist/images-api-registry.d.ts.map +1 -0
  273. package/dist/images-api-registry.js +22 -0
  274. package/dist/images-api-registry.js.map +1 -0
  275. package/dist/images.d.ts +9 -0
  276. package/dist/images.d.ts.map +1 -0
  277. package/dist/images.js +19 -0
  278. package/dist/images.js.map +1 -0
  279. package/dist/index.d.ts +36 -0
  280. package/dist/index.d.ts.map +1 -0
  281. package/dist/index.js +24 -0
  282. package/dist/index.js.map +1 -0
  283. package/dist/legacy-api-aliases.d.ts +42 -0
  284. package/dist/legacy-api-aliases.d.ts.map +1 -0
  285. package/dist/legacy-api-aliases.js +49 -0
  286. package/dist/legacy-api-aliases.js.map +1 -0
  287. package/dist/model-catalog.d.ts +33 -0
  288. package/dist/model-catalog.d.ts.map +1 -0
  289. package/dist/model-catalog.js +16 -0
  290. package/dist/model-catalog.js.map +1 -0
  291. package/dist/models-store.d.ts +30 -0
  292. package/dist/models-store.d.ts.map +1 -0
  293. package/dist/models-store.js +17 -0
  294. package/dist/models-store.js.map +1 -0
  295. package/dist/models.d.ts +250 -0
  296. package/dist/models.d.ts.map +1 -0
  297. package/dist/models.generated.d.ts +171 -0
  298. package/dist/models.generated.d.ts.map +1 -0
  299. package/dist/models.generated.js +173 -0
  300. package/dist/models.generated.js.map +1 -0
  301. package/dist/models.js +644 -0
  302. package/dist/models.js.map +1 -0
  303. package/dist/oauth.d.ts +3 -0
  304. package/dist/oauth.d.ts.map +1 -0
  305. package/dist/oauth.js +2 -0
  306. package/dist/oauth.js.map +1 -0
  307. package/dist/providers/all.d.ts +31 -0
  308. package/dist/providers/all.d.ts.map +1 -0
  309. package/dist/providers/all.js +134 -0
  310. package/dist/providers/all.js.map +1 -0
  311. package/dist/providers/amazon-bedrock.d.ts +3 -0
  312. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  313. package/dist/providers/amazon-bedrock.js +93 -0
  314. package/dist/providers/amazon-bedrock.js.map +1 -0
  315. package/dist/providers/amazon-bedrock.models.d.ts +6 -0
  316. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -0
  317. package/dist/providers/amazon-bedrock.models.js +8 -0
  318. package/dist/providers/amazon-bedrock.models.js.map +1 -0
  319. package/dist/providers/ant-ling.d.ts +3 -0
  320. package/dist/providers/ant-ling.d.ts.map +1 -0
  321. package/dist/providers/ant-ling.js +15 -0
  322. package/dist/providers/ant-ling.js.map +1 -0
  323. package/dist/providers/ant-ling.models.d.ts +6 -0
  324. package/dist/providers/ant-ling.models.d.ts.map +1 -0
  325. package/dist/providers/ant-ling.models.js +8 -0
  326. package/dist/providers/ant-ling.models.js.map +1 -0
  327. package/dist/providers/anthropic.d.ts +3 -0
  328. package/dist/providers/anthropic.d.ts.map +1 -0
  329. package/dist/providers/anthropic.js +78 -0
  330. package/dist/providers/anthropic.js.map +1 -0
  331. package/dist/providers/anthropic.models.d.ts +6 -0
  332. package/dist/providers/anthropic.models.d.ts.map +1 -0
  333. package/dist/providers/anthropic.models.js +8 -0
  334. package/dist/providers/anthropic.models.js.map +1 -0
  335. package/dist/providers/azure.d.ts +3 -0
  336. package/dist/providers/azure.d.ts.map +1 -0
  337. package/dist/providers/azure.js +46 -0
  338. package/dist/providers/azure.js.map +1 -0
  339. package/dist/providers/azure.models.d.ts +6 -0
  340. package/dist/providers/azure.models.d.ts.map +1 -0
  341. package/dist/providers/azure.models.js +8 -0
  342. package/dist/providers/azure.models.js.map +1 -0
  343. package/dist/providers/baseten.d.ts +3 -0
  344. package/dist/providers/baseten.d.ts.map +1 -0
  345. package/dist/providers/baseten.js +15 -0
  346. package/dist/providers/baseten.js.map +1 -0
  347. package/dist/providers/baseten.models.d.ts +6 -0
  348. package/dist/providers/baseten.models.d.ts.map +1 -0
  349. package/dist/providers/baseten.models.js +8 -0
  350. package/dist/providers/baseten.models.js.map +1 -0
  351. package/dist/providers/cerebras.d.ts +3 -0
  352. package/dist/providers/cerebras.d.ts.map +1 -0
  353. package/dist/providers/cerebras.js +15 -0
  354. package/dist/providers/cerebras.js.map +1 -0
  355. package/dist/providers/cerebras.models.d.ts +6 -0
  356. package/dist/providers/cerebras.models.d.ts.map +1 -0
  357. package/dist/providers/cerebras.models.js +8 -0
  358. package/dist/providers/cerebras.models.js.map +1 -0
  359. package/dist/providers/cloudflare-ai-gateway.d.ts +5 -0
  360. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -0
  361. package/dist/providers/cloudflare-ai-gateway.js +25 -0
  362. package/dist/providers/cloudflare-ai-gateway.js.map +1 -0
  363. package/dist/providers/cloudflare-ai-gateway.models.d.ts +6 -0
  364. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -0
  365. package/dist/providers/cloudflare-ai-gateway.models.js +8 -0
  366. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -0
  367. package/dist/providers/cloudflare-auth.d.ts +4 -0
  368. package/dist/providers/cloudflare-auth.d.ts.map +1 -0
  369. package/dist/providers/cloudflare-auth.js +86 -0
  370. package/dist/providers/cloudflare-auth.js.map +1 -0
  371. package/dist/providers/cloudflare-stream.d.ts +12 -0
  372. package/dist/providers/cloudflare-stream.d.ts.map +1 -0
  373. package/dist/providers/cloudflare-stream.js +27 -0
  374. package/dist/providers/cloudflare-stream.js.map +1 -0
  375. package/dist/providers/cloudflare-workers-ai.d.ts +3 -0
  376. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -0
  377. package/dist/providers/cloudflare-workers-ai.js +22 -0
  378. package/dist/providers/cloudflare-workers-ai.js.map +1 -0
  379. package/dist/providers/cloudflare-workers-ai.models.d.ts +6 -0
  380. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -0
  381. package/dist/providers/cloudflare-workers-ai.models.js +8 -0
  382. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -0
  383. package/dist/providers/data/.manifest.json +1 -0
  384. package/dist/providers/data/amazon-bedrock.json +1 -0
  385. package/dist/providers/data/ant-ling.json +1 -0
  386. package/dist/providers/data/anthropic.json +1 -0
  387. package/dist/providers/data/azure.json +1 -0
  388. package/dist/providers/data/baseten.json +1 -0
  389. package/dist/providers/data/cerebras.json +1 -0
  390. package/dist/providers/data/cloudflare-ai-gateway.json +1 -0
  391. package/dist/providers/data/cloudflare-workers-ai.json +1 -0
  392. package/dist/providers/data/deepseek.json +1 -0
  393. package/dist/providers/data/fireworks.json +1 -0
  394. package/dist/providers/data/github-copilot.json +1 -0
  395. package/dist/providers/data/google-vertex.json +1 -0
  396. package/dist/providers/data/google.json +1 -0
  397. package/dist/providers/data/groq.json +1 -0
  398. package/dist/providers/data/huggingface.json +1 -0
  399. package/dist/providers/data/kimi-coding.json +1 -0
  400. package/dist/providers/data/meta.json +1 -0
  401. package/dist/providers/data/minimax-cn.json +1 -0
  402. package/dist/providers/data/minimax.json +1 -0
  403. package/dist/providers/data/mistral.json +1 -0
  404. package/dist/providers/data/moonshotai-cn.json +1 -0
  405. package/dist/providers/data/moonshotai.json +1 -0
  406. package/dist/providers/data/nvidia.json +1 -0
  407. package/dist/providers/data/openai-codex.json +1 -0
  408. package/dist/providers/data/openai.json +1 -0
  409. package/dist/providers/data/opencode-go.json +1 -0
  410. package/dist/providers/data/opencode.json +1 -0
  411. package/dist/providers/data/openrouter.json +1 -0
  412. package/dist/providers/data/qwen-token-plan-cn.json +1 -0
  413. package/dist/providers/data/qwen-token-plan-individual.json +1 -0
  414. package/dist/providers/data/qwen-token-plan.json +1 -0
  415. package/dist/providers/data/together.json +1 -0
  416. package/dist/providers/data/typesafe.json +1 -0
  417. package/dist/providers/data/vercel-ai-gateway.json +1 -0
  418. package/dist/providers/data/xai.json +1 -0
  419. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -0
  420. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -0
  421. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -0
  422. package/dist/providers/data/xiaomi.json +1 -0
  423. package/dist/providers/data/zai-coding-cn.json +1 -0
  424. package/dist/providers/data/zai.json +1 -0
  425. package/dist/providers/deepseek.d.ts +3 -0
  426. package/dist/providers/deepseek.d.ts.map +1 -0
  427. package/dist/providers/deepseek.js +15 -0
  428. package/dist/providers/deepseek.js.map +1 -0
  429. package/dist/providers/deepseek.models.d.ts +6 -0
  430. package/dist/providers/deepseek.models.d.ts.map +1 -0
  431. package/dist/providers/deepseek.models.js +8 -0
  432. package/dist/providers/deepseek.models.js.map +1 -0
  433. package/dist/providers/faux.d.ts +103 -0
  434. package/dist/providers/faux.d.ts.map +1 -0
  435. package/dist/providers/faux.js +506 -0
  436. package/dist/providers/faux.js.map +1 -0
  437. package/dist/providers/fireworks.d.ts +3 -0
  438. package/dist/providers/fireworks.d.ts.map +1 -0
  439. package/dist/providers/fireworks.js +19 -0
  440. package/dist/providers/fireworks.js.map +1 -0
  441. package/dist/providers/fireworks.models.d.ts +6 -0
  442. package/dist/providers/fireworks.models.d.ts.map +1 -0
  443. package/dist/providers/fireworks.models.js +8 -0
  444. package/dist/providers/fireworks.models.js.map +1 -0
  445. package/dist/providers/github-copilot.d.ts +3 -0
  446. package/dist/providers/github-copilot.d.ts.map +1 -0
  447. package/dist/providers/github-copilot.js +35 -0
  448. package/dist/providers/github-copilot.js.map +1 -0
  449. package/dist/providers/github-copilot.models.d.ts +6 -0
  450. package/dist/providers/github-copilot.models.d.ts.map +1 -0
  451. package/dist/providers/github-copilot.models.js +8 -0
  452. package/dist/providers/github-copilot.models.js.map +1 -0
  453. package/dist/providers/google-vertex.d.ts +3 -0
  454. package/dist/providers/google-vertex.d.ts.map +1 -0
  455. package/dist/providers/google-vertex.js +94 -0
  456. package/dist/providers/google-vertex.js.map +1 -0
  457. package/dist/providers/google-vertex.models.d.ts +6 -0
  458. package/dist/providers/google-vertex.models.d.ts.map +1 -0
  459. package/dist/providers/google-vertex.models.js +8 -0
  460. package/dist/providers/google-vertex.models.js.map +1 -0
  461. package/dist/providers/google.d.ts +3 -0
  462. package/dist/providers/google.d.ts.map +1 -0
  463. package/dist/providers/google.js +15 -0
  464. package/dist/providers/google.js.map +1 -0
  465. package/dist/providers/google.models.d.ts +6 -0
  466. package/dist/providers/google.models.d.ts.map +1 -0
  467. package/dist/providers/google.models.js +8 -0
  468. package/dist/providers/google.models.js.map +1 -0
  469. package/dist/providers/groq.d.ts +3 -0
  470. package/dist/providers/groq.d.ts.map +1 -0
  471. package/dist/providers/groq.js +15 -0
  472. package/dist/providers/groq.js.map +1 -0
  473. package/dist/providers/groq.models.d.ts +6 -0
  474. package/dist/providers/groq.models.d.ts.map +1 -0
  475. package/dist/providers/groq.models.js +8 -0
  476. package/dist/providers/groq.models.js.map +1 -0
  477. package/dist/providers/huggingface.d.ts +3 -0
  478. package/dist/providers/huggingface.d.ts.map +1 -0
  479. package/dist/providers/huggingface.js +15 -0
  480. package/dist/providers/huggingface.js.map +1 -0
  481. package/dist/providers/huggingface.models.d.ts +6 -0
  482. package/dist/providers/huggingface.models.d.ts.map +1 -0
  483. package/dist/providers/huggingface.models.js +8 -0
  484. package/dist/providers/huggingface.models.js.map +1 -0
  485. package/dist/providers/images/register-builtins.d.ts +4 -0
  486. package/dist/providers/images/register-builtins.d.ts.map +1 -0
  487. package/dist/providers/images/register-builtins.js +34 -0
  488. package/dist/providers/images/register-builtins.js.map +1 -0
  489. package/dist/providers/kimi-coding.d.ts +3 -0
  490. package/dist/providers/kimi-coding.d.ts.map +1 -0
  491. package/dist/providers/kimi-coding.js +24 -0
  492. package/dist/providers/kimi-coding.js.map +1 -0
  493. package/dist/providers/kimi-coding.models.d.ts +6 -0
  494. package/dist/providers/kimi-coding.models.d.ts.map +1 -0
  495. package/dist/providers/kimi-coding.models.js +8 -0
  496. package/dist/providers/kimi-coding.models.js.map +1 -0
  497. package/dist/providers/meta.d.ts +3 -0
  498. package/dist/providers/meta.d.ts.map +1 -0
  499. package/dist/providers/meta.js +24 -0
  500. package/dist/providers/meta.js.map +1 -0
  501. package/dist/providers/meta.models.d.ts +6 -0
  502. package/dist/providers/meta.models.d.ts.map +1 -0
  503. package/dist/providers/meta.models.js +8 -0
  504. package/dist/providers/meta.models.js.map +1 -0
  505. package/dist/providers/minimax-cn.d.ts +3 -0
  506. package/dist/providers/minimax-cn.d.ts.map +1 -0
  507. package/dist/providers/minimax-cn.js +15 -0
  508. package/dist/providers/minimax-cn.js.map +1 -0
  509. package/dist/providers/minimax-cn.models.d.ts +6 -0
  510. package/dist/providers/minimax-cn.models.d.ts.map +1 -0
  511. package/dist/providers/minimax-cn.models.js +8 -0
  512. package/dist/providers/minimax-cn.models.js.map +1 -0
  513. package/dist/providers/minimax.d.ts +3 -0
  514. package/dist/providers/minimax.d.ts.map +1 -0
  515. package/dist/providers/minimax.js +15 -0
  516. package/dist/providers/minimax.js.map +1 -0
  517. package/dist/providers/minimax.models.d.ts +6 -0
  518. package/dist/providers/minimax.models.d.ts.map +1 -0
  519. package/dist/providers/minimax.models.js +8 -0
  520. package/dist/providers/minimax.models.js.map +1 -0
  521. package/dist/providers/mistral.d.ts +3 -0
  522. package/dist/providers/mistral.d.ts.map +1 -0
  523. package/dist/providers/mistral.js +15 -0
  524. package/dist/providers/mistral.js.map +1 -0
  525. package/dist/providers/mistral.models.d.ts +6 -0
  526. package/dist/providers/mistral.models.d.ts.map +1 -0
  527. package/dist/providers/mistral.models.js +8 -0
  528. package/dist/providers/mistral.models.js.map +1 -0
  529. package/dist/providers/moonshotai-cn.d.ts +3 -0
  530. package/dist/providers/moonshotai-cn.d.ts.map +1 -0
  531. package/dist/providers/moonshotai-cn.js +15 -0
  532. package/dist/providers/moonshotai-cn.js.map +1 -0
  533. package/dist/providers/moonshotai-cn.models.d.ts +6 -0
  534. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -0
  535. package/dist/providers/moonshotai-cn.models.js +8 -0
  536. package/dist/providers/moonshotai-cn.models.js.map +1 -0
  537. package/dist/providers/moonshotai.d.ts +3 -0
  538. package/dist/providers/moonshotai.d.ts.map +1 -0
  539. package/dist/providers/moonshotai.js +15 -0
  540. package/dist/providers/moonshotai.js.map +1 -0
  541. package/dist/providers/moonshotai.models.d.ts +6 -0
  542. package/dist/providers/moonshotai.models.d.ts.map +1 -0
  543. package/dist/providers/moonshotai.models.js +8 -0
  544. package/dist/providers/moonshotai.models.js.map +1 -0
  545. package/dist/providers/nvidia.d.ts +3 -0
  546. package/dist/providers/nvidia.d.ts.map +1 -0
  547. package/dist/providers/nvidia.js +15 -0
  548. package/dist/providers/nvidia.js.map +1 -0
  549. package/dist/providers/nvidia.models.d.ts +6 -0
  550. package/dist/providers/nvidia.models.d.ts.map +1 -0
  551. package/dist/providers/nvidia.models.js +8 -0
  552. package/dist/providers/nvidia.models.js.map +1 -0
  553. package/dist/providers/openai-codex.d.ts +3 -0
  554. package/dist/providers/openai-codex.d.ts.map +1 -0
  555. package/dist/providers/openai-codex.js +22 -0
  556. package/dist/providers/openai-codex.js.map +1 -0
  557. package/dist/providers/openai-codex.models.d.ts +6 -0
  558. package/dist/providers/openai-codex.models.d.ts.map +1 -0
  559. package/dist/providers/openai-codex.models.js +8 -0
  560. package/dist/providers/openai-codex.models.js.map +1 -0
  561. package/dist/providers/openai.d.ts +3 -0
  562. package/dist/providers/openai.d.ts.map +1 -0
  563. package/dist/providers/openai.js +33 -0
  564. package/dist/providers/openai.js.map +1 -0
  565. package/dist/providers/openai.models.d.ts +6 -0
  566. package/dist/providers/openai.models.d.ts.map +1 -0
  567. package/dist/providers/openai.models.js +8 -0
  568. package/dist/providers/openai.models.js.map +1 -0
  569. package/dist/providers/opencode-go.d.ts +3 -0
  570. package/dist/providers/opencode-go.d.ts.map +1 -0
  571. package/dist/providers/opencode-go.js +21 -0
  572. package/dist/providers/opencode-go.js.map +1 -0
  573. package/dist/providers/opencode-go.models.d.ts +6 -0
  574. package/dist/providers/opencode-go.models.d.ts.map +1 -0
  575. package/dist/providers/opencode-go.models.js +8 -0
  576. package/dist/providers/opencode-go.models.js.map +1 -0
  577. package/dist/providers/opencode-headers.d.ts +4 -0
  578. package/dist/providers/opencode-headers.d.ts.map +1 -0
  579. package/dist/providers/opencode-headers.js +22 -0
  580. package/dist/providers/opencode-headers.js.map +1 -0
  581. package/dist/providers/opencode.d.ts +5 -0
  582. package/dist/providers/opencode.d.ts.map +1 -0
  583. package/dist/providers/opencode.js +26 -0
  584. package/dist/providers/opencode.js.map +1 -0
  585. package/dist/providers/opencode.models.d.ts +6 -0
  586. package/dist/providers/opencode.models.d.ts.map +1 -0
  587. package/dist/providers/opencode.models.js +8 -0
  588. package/dist/providers/opencode.models.js.map +1 -0
  589. package/dist/providers/openrouter.d.ts +3 -0
  590. package/dist/providers/openrouter.d.ts.map +1 -0
  591. package/dist/providers/openrouter.js +36 -0
  592. package/dist/providers/openrouter.js.map +1 -0
  593. package/dist/providers/openrouter.models.d.ts +6 -0
  594. package/dist/providers/openrouter.models.d.ts.map +1 -0
  595. package/dist/providers/openrouter.models.js +8 -0
  596. package/dist/providers/openrouter.models.js.map +1 -0
  597. package/dist/providers/qwen-token-plan-cn.d.ts +3 -0
  598. package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
  599. package/dist/providers/qwen-token-plan-cn.js +15 -0
  600. package/dist/providers/qwen-token-plan-cn.js.map +1 -0
  601. package/dist/providers/qwen-token-plan-cn.models.d.ts +6 -0
  602. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
  603. package/dist/providers/qwen-token-plan-cn.models.js +8 -0
  604. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
  605. package/dist/providers/qwen-token-plan-individual.d.ts +3 -0
  606. package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -0
  607. package/dist/providers/qwen-token-plan-individual.js +15 -0
  608. package/dist/providers/qwen-token-plan-individual.js.map +1 -0
  609. package/dist/providers/qwen-token-plan-individual.models.d.ts +6 -0
  610. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -0
  611. package/dist/providers/qwen-token-plan-individual.models.js +8 -0
  612. package/dist/providers/qwen-token-plan-individual.models.js.map +1 -0
  613. package/dist/providers/qwen-token-plan.d.ts +3 -0
  614. package/dist/providers/qwen-token-plan.d.ts.map +1 -0
  615. package/dist/providers/qwen-token-plan.js +15 -0
  616. package/dist/providers/qwen-token-plan.js.map +1 -0
  617. package/dist/providers/qwen-token-plan.models.d.ts +6 -0
  618. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
  619. package/dist/providers/qwen-token-plan.models.js +8 -0
  620. package/dist/providers/qwen-token-plan.models.js.map +1 -0
  621. package/dist/providers/together.d.ts +3 -0
  622. package/dist/providers/together.d.ts.map +1 -0
  623. package/dist/providers/together.js +15 -0
  624. package/dist/providers/together.js.map +1 -0
  625. package/dist/providers/together.models.d.ts +6 -0
  626. package/dist/providers/together.models.d.ts.map +1 -0
  627. package/dist/providers/together.models.js +8 -0
  628. package/dist/providers/together.models.js.map +1 -0
  629. package/dist/providers/typesafe.d.ts +3 -0
  630. package/dist/providers/typesafe.d.ts.map +1 -0
  631. package/dist/providers/typesafe.js +18 -0
  632. package/dist/providers/typesafe.js.map +1 -0
  633. package/dist/providers/typesafe.models.d.ts +6 -0
  634. package/dist/providers/typesafe.models.d.ts.map +1 -0
  635. package/dist/providers/typesafe.models.js +8 -0
  636. package/dist/providers/typesafe.models.js.map +1 -0
  637. package/dist/providers/vercel-ai-gateway.d.ts +3 -0
  638. package/dist/providers/vercel-ai-gateway.d.ts.map +1 -0
  639. package/dist/providers/vercel-ai-gateway.js +18 -0
  640. package/dist/providers/vercel-ai-gateway.js.map +1 -0
  641. package/dist/providers/vercel-ai-gateway.models.d.ts +6 -0
  642. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -0
  643. package/dist/providers/vercel-ai-gateway.models.js +8 -0
  644. package/dist/providers/vercel-ai-gateway.models.js.map +1 -0
  645. package/dist/providers/xai.d.ts +3 -0
  646. package/dist/providers/xai.d.ts.map +1 -0
  647. package/dist/providers/xai.js +24 -0
  648. package/dist/providers/xai.js.map +1 -0
  649. package/dist/providers/xai.models.d.ts +6 -0
  650. package/dist/providers/xai.models.d.ts.map +1 -0
  651. package/dist/providers/xai.models.js +8 -0
  652. package/dist/providers/xai.models.js.map +1 -0
  653. package/dist/providers/xiaomi-token-plan-ams.d.ts +3 -0
  654. package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -0
  655. package/dist/providers/xiaomi-token-plan-ams.js +15 -0
  656. package/dist/providers/xiaomi-token-plan-ams.js.map +1 -0
  657. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +6 -0
  658. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -0
  659. package/dist/providers/xiaomi-token-plan-ams.models.js +8 -0
  660. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -0
  661. package/dist/providers/xiaomi-token-plan-cn.d.ts +3 -0
  662. package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -0
  663. package/dist/providers/xiaomi-token-plan-cn.js +15 -0
  664. package/dist/providers/xiaomi-token-plan-cn.js.map +1 -0
  665. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +6 -0
  666. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -0
  667. package/dist/providers/xiaomi-token-plan-cn.models.js +8 -0
  668. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -0
  669. package/dist/providers/xiaomi-token-plan-sgp.d.ts +3 -0
  670. package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -0
  671. package/dist/providers/xiaomi-token-plan-sgp.js +15 -0
  672. package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -0
  673. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +6 -0
  674. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -0
  675. package/dist/providers/xiaomi-token-plan-sgp.models.js +8 -0
  676. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -0
  677. package/dist/providers/xiaomi.d.ts +3 -0
  678. package/dist/providers/xiaomi.d.ts.map +1 -0
  679. package/dist/providers/xiaomi.js +15 -0
  680. package/dist/providers/xiaomi.js.map +1 -0
  681. package/dist/providers/xiaomi.models.d.ts +6 -0
  682. package/dist/providers/xiaomi.models.d.ts.map +1 -0
  683. package/dist/providers/xiaomi.models.js +8 -0
  684. package/dist/providers/xiaomi.models.js.map +1 -0
  685. package/dist/providers/zai-coding-cn.d.ts +3 -0
  686. package/dist/providers/zai-coding-cn.d.ts.map +1 -0
  687. package/dist/providers/zai-coding-cn.js +15 -0
  688. package/dist/providers/zai-coding-cn.js.map +1 -0
  689. package/dist/providers/zai-coding-cn.models.d.ts +6 -0
  690. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -0
  691. package/dist/providers/zai-coding-cn.models.js +8 -0
  692. package/dist/providers/zai-coding-cn.models.js.map +1 -0
  693. package/dist/providers/zai.d.ts +3 -0
  694. package/dist/providers/zai.d.ts.map +1 -0
  695. package/dist/providers/zai.js +15 -0
  696. package/dist/providers/zai.js.map +1 -0
  697. package/dist/providers/zai.models.d.ts +6 -0
  698. package/dist/providers/zai.models.d.ts.map +1 -0
  699. package/dist/providers/zai.models.js +8 -0
  700. package/dist/providers/zai.models.js.map +1 -0
  701. package/dist/schemas/compat-schema.d.ts +338 -0
  702. package/dist/schemas/compat-schema.d.ts.map +1 -0
  703. package/dist/schemas/compat-schema.js +375 -0
  704. package/dist/schemas/compat-schema.js.map +1 -0
  705. package/dist/schemas/model-schema.d.ts +91 -0
  706. package/dist/schemas/model-schema.d.ts.map +1 -0
  707. package/dist/schemas/model-schema.js +55 -0
  708. package/dist/schemas/model-schema.js.map +1 -0
  709. package/dist/session-resources.d.ts +4 -0
  710. package/dist/session-resources.d.ts.map +1 -0
  711. package/dist/session-resources.js +22 -0
  712. package/dist/session-resources.js.map +1 -0
  713. package/dist/types.d.ts +645 -0
  714. package/dist/types.d.ts.map +1 -0
  715. package/dist/types.js +2 -0
  716. package/dist/types.js.map +1 -0
  717. package/dist/utils/abort-signals.d.ts +6 -0
  718. package/dist/utils/abort-signals.d.ts.map +1 -0
  719. package/dist/utils/abort-signals.js +34 -0
  720. package/dist/utils/abort-signals.js.map +1 -0
  721. package/dist/utils/abort.d.ts +8 -0
  722. package/dist/utils/abort.d.ts.map +1 -0
  723. package/dist/utils/abort.js +49 -0
  724. package/dist/utils/abort.js.map +1 -0
  725. package/dist/utils/assistant-message-frame.d.ts +77 -0
  726. package/dist/utils/assistant-message-frame.d.ts.map +1 -0
  727. package/dist/utils/assistant-message-frame.js +425 -0
  728. package/dist/utils/assistant-message-frame.js.map +1 -0
  729. package/dist/utils/diagnostics.d.ts +20 -0
  730. package/dist/utils/diagnostics.d.ts.map +1 -0
  731. package/dist/utils/diagnostics.js +25 -0
  732. package/dist/utils/diagnostics.js.map +1 -0
  733. package/dist/utils/error-body.d.ts +25 -0
  734. package/dist/utils/error-body.d.ts.map +1 -0
  735. package/dist/utils/error-body.js +133 -0
  736. package/dist/utils/error-body.js.map +1 -0
  737. package/dist/utils/estimate.d.ts +17 -0
  738. package/dist/utils/estimate.d.ts.map +1 -0
  739. package/dist/utils/estimate.js +95 -0
  740. package/dist/utils/estimate.js.map +1 -0
  741. package/dist/utils/event-stream.d.ts +30 -0
  742. package/dist/utils/event-stream.d.ts.map +1 -0
  743. package/dist/utils/event-stream.js +124 -0
  744. package/dist/utils/event-stream.js.map +1 -0
  745. package/dist/utils/hash.d.ts +3 -0
  746. package/dist/utils/hash.d.ts.map +1 -0
  747. package/dist/utils/hash.js +14 -0
  748. package/dist/utils/hash.js.map +1 -0
  749. package/dist/utils/headers.d.ts +4 -0
  750. package/dist/utils/headers.d.ts.map +1 -0
  751. package/dist/utils/headers.js +20 -0
  752. package/dist/utils/headers.js.map +1 -0
  753. package/dist/utils/json-parse.d.ts +16 -0
  754. package/dist/utils/json-parse.d.ts.map +1 -0
  755. package/dist/utils/json-parse.js +113 -0
  756. package/dist/utils/json-parse.js.map +1 -0
  757. package/dist/utils/model-operations.d.ts +34 -0
  758. package/dist/utils/model-operations.d.ts.map +1 -0
  759. package/dist/utils/model-operations.js +129 -0
  760. package/dist/utils/model-operations.js.map +1 -0
  761. package/dist/utils/models-error.d.ts +8 -0
  762. package/dist/utils/models-error.d.ts.map +1 -0
  763. package/dist/utils/models-error.js +19 -0
  764. package/dist/utils/models-error.js.map +1 -0
  765. package/dist/utils/node-http-proxy.d.ts +4 -0
  766. package/dist/utils/node-http-proxy.d.ts.map +1 -0
  767. package/dist/utils/node-http-proxy.js +133 -0
  768. package/dist/utils/node-http-proxy.js.map +1 -0
  769. package/dist/utils/nyan-user-agent.d.ts +2 -0
  770. package/dist/utils/nyan-user-agent.d.ts.map +1 -0
  771. package/dist/utils/nyan-user-agent.js +12 -0
  772. package/dist/utils/nyan-user-agent.js.map +1 -0
  773. package/dist/utils/oauth-page.d.ts +3 -0
  774. package/dist/utils/oauth-page.d.ts.map +1 -0
  775. package/dist/utils/oauth-page.js +105 -0
  776. package/dist/utils/oauth-page.js.map +1 -0
  777. package/dist/utils/overflow.d.ts +69 -0
  778. package/dist/utils/overflow.d.ts.map +1 -0
  779. package/dist/utils/overflow.js +179 -0
  780. package/dist/utils/overflow.js.map +1 -0
  781. package/dist/utils/provider-env.d.ts +7 -0
  782. package/dist/utils/provider-env.d.ts.map +1 -0
  783. package/dist/utils/provider-env.js +44 -0
  784. package/dist/utils/provider-env.js.map +1 -0
  785. package/dist/utils/provider-retry.d.ts +18 -0
  786. package/dist/utils/provider-retry.d.ts.map +1 -0
  787. package/dist/utils/provider-retry.js +97 -0
  788. package/dist/utils/provider-retry.js.map +1 -0
  789. package/dist/utils/retry.d.ts +58 -0
  790. package/dist/utils/retry.d.ts.map +1 -0
  791. package/dist/utils/retry.js +196 -0
  792. package/dist/utils/retry.js.map +1 -0
  793. package/dist/utils/sanitize-unicode.d.ts +22 -0
  794. package/dist/utils/sanitize-unicode.d.ts.map +1 -0
  795. package/dist/utils/sanitize-unicode.js +26 -0
  796. package/dist/utils/sanitize-unicode.js.map +1 -0
  797. package/dist/utils/sleep.d.ts +2 -0
  798. package/dist/utils/sleep.d.ts.map +1 -0
  799. package/dist/utils/sleep.js +15 -0
  800. package/dist/utils/sleep.js.map +1 -0
  801. package/dist/utils/text.d.ts +14 -0
  802. package/dist/utils/text.d.ts.map +1 -0
  803. package/dist/utils/text.js +36 -0
  804. package/dist/utils/text.js.map +1 -0
  805. package/dist/utils/transcript.d.ts +87 -0
  806. package/dist/utils/transcript.d.ts.map +1 -0
  807. package/dist/utils/transcript.js +207 -0
  808. package/dist/utils/transcript.js.map +1 -0
  809. package/dist/utils/typebox-helpers.d.ts +17 -0
  810. package/dist/utils/typebox-helpers.d.ts.map +1 -0
  811. package/dist/utils/typebox-helpers.js +21 -0
  812. package/dist/utils/typebox-helpers.js.map +1 -0
  813. package/dist/utils/uuid.d.ts +3 -0
  814. package/dist/utils/uuid.d.ts.map +1 -0
  815. package/dist/utils/uuid.js +42 -0
  816. package/dist/utils/uuid.js.map +1 -0
  817. package/dist/utils/validation.d.ts +18 -0
  818. package/dist/utils/validation.d.ts.map +1 -0
  819. package/dist/utils/validation.js +309 -0
  820. package/dist/utils/validation.js.map +1 -0
  821. package/package.json +113 -5
@@ -0,0 +1,1147 @@
1
+ import { BedrockRuntimeClient, BedrockRuntimeServiceException, StopReason as BedrockStopReason, CachePointType, CacheTTL, ConversationRole, ConverseStreamCommand, ImageFormat, ToolResultStatus, } from "@aws-sdk/client-bedrock-runtime";
2
+ import { NodeHttpHandler } from "@smithy/node-http-handler";
3
+ import { HttpProxyAgent } from "http-proxy-agent";
4
+ import { HttpsProxyAgent } from "https-proxy-agent";
5
+ import { appendAssistantMessageDiagnostic } from "../utils/diagnostics.js";
6
+ import { normalizeProviderError } from "../utils/error-body.js";
7
+ import { AssistantMessageEventStream } from "../utils/event-stream.js";
8
+ import { providerHeadersToRecord } from "../utils/headers.js";
9
+ import { parseStreamingJson } from "../utils/json-parse.js";
10
+ import { calculateCost } from "../utils/model-operations.js";
11
+ import { resolveHttpProxyUrlForTarget } from "../utils/node-http-proxy.js";
12
+ import { getProviderEnvValue } from "../utils/provider-env.js";
13
+ import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
14
+ import { getSystemMessageText } from "../utils/text.js";
15
+ import { collapseSystemMessages, getCurrentTools, getInitialSystemMessage, withoutInitialSystemMessage, } from "../utils/transcript.js";
16
+ import { getJsonSchemaToolParameters, resolveJsonSchemaStrictSampling } from "./constrained-sampling.js";
17
+ import { adjustMaxTokensForThinking, buildBaseOptions, clampMaxTokensToContext, clampReasoning, } from "./simple-options.js";
18
+ import { transformMessages } from "./transform-messages.js";
19
+ const EMPTY_TEXT_PLACEHOLDER = "<empty>";
20
+ const THINKING_BINDING_CONTROLS_BETA = "thinking-binding-controls-2026-08-01";
21
+ /** Matches the placeholder the Anthropic API path uses for redacted thinking. */
22
+ const REDACTED_THINKING_PLACEHOLDER = "[Reasoning redacted]";
23
+ export const stream = (model, context, options = {}) => {
24
+ const stream = new AssistantMessageEventStream();
25
+ // Bedrock has no mid-conversation system messages; fold them into the leading prompt.
26
+ const normalizedContext = collapseSystemMessages(context);
27
+ (async () => {
28
+ const output = {
29
+ role: "assistant",
30
+ content: [],
31
+ api: "bedrock-converse-stream",
32
+ provider: model.provider,
33
+ model: model.id,
34
+ usage: {
35
+ input: 0,
36
+ output: 0,
37
+ cacheRead: 0,
38
+ cacheWrite: 0,
39
+ totalTokens: 0,
40
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
41
+ },
42
+ stopReason: "pending",
43
+ timestamp: Date.now(),
44
+ };
45
+ const blocks = output.content;
46
+ // A profile explicitly configured through nyan's auth flow (the `profile`
47
+ // option or scoped `AWS_PROFILE` on the stored credential's env) must win
48
+ // over ambient AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY. The SDK default
49
+ // chain already prefers a configured profile over env keys, but only when
50
+ // `credentials` is not set on the client config.
51
+ const optionsProfile = options.profile || options.env?.AWS_PROFILE;
52
+ const config = {
53
+ profile: optionsProfile || getProviderEnvValue("AWS_PROFILE", options.env),
54
+ };
55
+ const configuredRegion = getConfiguredBedrockRegion(options);
56
+ const hasAmbientConfiguredProfile = Boolean(getProviderEnvValue("AWS_PROFILE"));
57
+ const endpointRegion = getStandardBedrockEndpointRegion(model.baseUrl);
58
+ const useExplicitEndpoint = shouldUseExplicitBedrockEndpoint(model.baseUrl, configuredRegion, hasAmbientConfiguredProfile);
59
+ // Only pin standard AWS Bedrock runtime endpoints when no region or ambient AWS_PROFILE is configured.
60
+ // This preserves custom endpoints (VPC/proxy) without forcing built-in
61
+ // catalog defaults such as us-east-1 to override AWS_REGION/AWS_PROFILE.
62
+ if (useExplicitEndpoint) {
63
+ config.endpoint = model.baseUrl;
64
+ }
65
+ // Resolve bearer token for Bedrock API key auth.
66
+ const skipAuth = getProviderEnvValue("AWS_BEDROCK_SKIP_AUTH", options.env) === "1";
67
+ const bearerToken = options.bearerToken ||
68
+ options.apiKey ||
69
+ getProviderEnvValue("AWS_BEARER_TOKEN_BEDROCK", options.env) ||
70
+ undefined;
71
+ const useBearerToken = bearerToken !== undefined && !skipAuth;
72
+ // in Node.js/Bun environment only
73
+ if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) {
74
+ // Region resolution: ARN-embedded > explicit option > env vars > SDK default chain.
75
+ // When the model ID is an inference profile ARN, extract the region from it.
76
+ // This avoids conflicts with AWS_REGION set for other services.
77
+ const arnRegionMatch = model.id.match(/^arn:aws(?:-[a-z0-9-]+)?:bedrock:([a-z0-9-]+):/);
78
+ if (arnRegionMatch) {
79
+ config.region = arnRegionMatch[1];
80
+ }
81
+ else if (configuredRegion) {
82
+ config.region = configuredRegion;
83
+ }
84
+ else if (endpointRegion && useExplicitEndpoint) {
85
+ config.region = endpointRegion;
86
+ }
87
+ else if (!hasAmbientConfiguredProfile) {
88
+ config.region = "us-east-1";
89
+ }
90
+ // Support proxies that don't need authentication
91
+ if (skipAuth) {
92
+ config.credentials = {
93
+ accessKeyId: "dummy-access-key",
94
+ secretAccessKey: "dummy-secret-key",
95
+ };
96
+ }
97
+ const credentials = getConfiguredBedrockCredentials(options.env);
98
+ if (!skipAuth && credentials && !optionsProfile) {
99
+ config.credentials = credentials;
100
+ }
101
+ const proxyUrl = resolveHttpProxyUrlForTarget(model.baseUrl, options.env);
102
+ if (proxyUrl) {
103
+ // Bedrock runtime uses NodeHttp2Handler by default since v3.798.0, which is based
104
+ // on `http2` module and has no support for http agent.
105
+ // Use NodeHttpHandler to support HTTP(S) proxy agents.
106
+ config.requestHandler = new NodeHttpHandler({
107
+ httpAgent: new HttpProxyAgent(proxyUrl),
108
+ httpsAgent: new HttpsProxyAgent(proxyUrl),
109
+ });
110
+ }
111
+ else if (getProviderEnvValue("AWS_BEDROCK_FORCE_HTTP1", options.env) === "1") {
112
+ // Some custom endpoints require HTTP/1.1 instead of HTTP/2
113
+ config.requestHandler = new NodeHttpHandler();
114
+ }
115
+ }
116
+ else {
117
+ // Non-Node environment (browser): fall back to us-east-1 since
118
+ // there's no config file resolution available.
119
+ config.region =
120
+ configuredRegion || (endpointRegion && useExplicitEndpoint ? endpointRegion : undefined) || "us-east-1";
121
+ }
122
+ if (useBearerToken) {
123
+ config.token = { token: bearerToken };
124
+ config.authSchemePreference = ["httpBearerAuth"];
125
+ }
126
+ // Kept outside the try so the catch can still correlate a mid-stream failure:
127
+ // exceptions delivered as stream events carry no HTTP metadata of their own.
128
+ let responseRequestId;
129
+ try {
130
+ const supportsStrictMode = model.compat?.supportsStrictMode ?? false;
131
+ const client = new BedrockRuntimeClient(config);
132
+ let observedRawResponse = false;
133
+ if (options.onResponse) {
134
+ addResponseHeadersMiddleware(client, options.onResponse, model, () => {
135
+ observedRawResponse = true;
136
+ });
137
+ }
138
+ const customHeaders = providerHeadersToRecord(options.headers);
139
+ if (customHeaders) {
140
+ addCustomHeadersMiddleware(client, customHeaders);
141
+ }
142
+ const cacheRetention = resolveCacheRetention(options.cacheRetention, options.env);
143
+ const inferenceMaxTokens = options.maxTokens ?? (isAnthropicClaudeModel(model) ? model.maxTokens : undefined);
144
+ const initialSystemMessage = getInitialSystemMessage(normalizedContext.messages);
145
+ const initialSystemPrompt = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : undefined;
146
+ let commandInput = {
147
+ modelId: model.id,
148
+ messages: convertMessages(normalizedContext, model, cacheRetention, options.env),
149
+ system: buildSystemPrompt(initialSystemPrompt, model, cacheRetention, options.env),
150
+ inferenceConfig: {
151
+ ...(inferenceMaxTokens !== undefined && { maxTokens: inferenceMaxTokens }),
152
+ ...(options.temperature !== undefined && { temperature: options.temperature }),
153
+ },
154
+ toolConfig: convertToolConfig(getCurrentTools(normalizedContext.messages), options.toolChoice, supportsStrictMode),
155
+ additionalModelRequestFields: buildAdditionalModelRequestFields(model, options),
156
+ ...(options.requestMetadata !== undefined && { requestMetadata: options.requestMetadata }),
157
+ };
158
+ const nextCommandInput = await options?.onPayload?.(commandInput, model);
159
+ if (nextCommandInput !== undefined) {
160
+ commandInput = nextCommandInput;
161
+ }
162
+ const command = new ConverseStreamCommand(commandInput);
163
+ const response = await client.send(command, { abortSignal: options.signal });
164
+ responseRequestId = normalizeDiagnosticValue(response.$metadata.requestId);
165
+ if (!observedRawResponse && response.$metadata.httpStatusCode !== undefined) {
166
+ const responseHeaders = {};
167
+ if (response.$metadata.requestId) {
168
+ responseHeaders["x-amzn-requestid"] = response.$metadata.requestId;
169
+ }
170
+ await options?.onResponse?.({ status: response.$metadata.httpStatusCode, headers: responseHeaders }, model);
171
+ }
172
+ for await (const item of response.stream) {
173
+ await options.onProviderStreamEvent?.(item, model);
174
+ if (item.messageStart) {
175
+ if (item.messageStart.role !== ConversationRole.ASSISTANT) {
176
+ throw new Error("Unexpected assistant message start but got user message start instead");
177
+ }
178
+ stream.push({ type: "start", partial: output });
179
+ }
180
+ else if (item.contentBlockStart) {
181
+ handleContentBlockStart(item.contentBlockStart, blocks, output, stream);
182
+ }
183
+ else if (item.contentBlockDelta) {
184
+ handleContentBlockDelta(item.contentBlockDelta, blocks, output, stream);
185
+ }
186
+ else if (item.contentBlockStop) {
187
+ handleContentBlockStop(item.contentBlockStop, blocks, output, stream);
188
+ }
189
+ else if (item.messageStop) {
190
+ output.rawStopReason = item.messageStop.stopReason;
191
+ const { stopReason, errorMessage } = mapStopReason(item.messageStop.stopReason);
192
+ output.stopReason = stopReason;
193
+ if (errorMessage) {
194
+ output.errorMessage = errorMessage;
195
+ }
196
+ }
197
+ else if (item.metadata) {
198
+ handleMetadata(item.metadata, model, output);
199
+ }
200
+ else if (item.internalServerException) {
201
+ throw item.internalServerException;
202
+ }
203
+ else if (item.modelStreamErrorException) {
204
+ throw item.modelStreamErrorException;
205
+ }
206
+ else if (item.validationException) {
207
+ throw item.validationException;
208
+ }
209
+ else if (item.throttlingException) {
210
+ throw item.throttlingException;
211
+ }
212
+ else if (item.serviceUnavailableException) {
213
+ throw item.serviceUnavailableException;
214
+ }
215
+ }
216
+ if (options.signal?.aborted) {
217
+ throw new Error("Request was aborted");
218
+ }
219
+ if (output.stopReason === "pending") {
220
+ throw new Error("Bedrock stream ended without a stop reason");
221
+ }
222
+ if (output.stopReason === "error" || output.stopReason === "aborted") {
223
+ throw new Error(output.errorMessage || "An unknown error occurred");
224
+ }
225
+ // A stream can settle without stopping every block, so finalize here too.
226
+ for (const block of output.content)
227
+ finalizeStreamingBlock(block);
228
+ stream.push({ type: "done", reason: output.stopReason, message: output });
229
+ stream.end();
230
+ }
231
+ catch (error) {
232
+ for (const block of output.content) {
233
+ finalizeStreamingBlock(block);
234
+ }
235
+ output.stopReason = options.signal?.aborted ? "aborted" : "error";
236
+ output.errorMessage = formatBedrockError(error);
237
+ if (output.stopReason === "error") {
238
+ appendBedrockFailureDiagnostic(output, error, responseRequestId);
239
+ }
240
+ stream.push({ type: "error", reason: output.stopReason, error: output });
241
+ stream.end();
242
+ }
243
+ })();
244
+ return stream;
245
+ };
246
+ /**
247
+ * Human-readable prefixes for Bedrock SDK exception names.
248
+ * The downstream retry logic in agent-session matches patterns like
249
+ * `server.?error` and `service.?unavailable`, so we preserve the legacy
250
+ * prefix format rather than using the raw SDK exception name.
251
+ */
252
+ const BEDROCK_ERROR_PREFIXES = {
253
+ InternalServerException: "Internal server error",
254
+ ModelStreamErrorException: "Model stream error",
255
+ ValidationException: "Validation error",
256
+ ThrottlingException: "Throttling error",
257
+ ServiceUnavailableException: "Service unavailable",
258
+ };
259
+ /**
260
+ * Some models reject the account/profile's configured Bedrock data retention mode
261
+ * (e.g. "data retention mode 'default' is not available for this model"). Point
262
+ * users at the AWS docs explaining how to configure a supported mode.
263
+ */
264
+ const BEDROCK_DATA_RETENTION_DOCS_URL = "https://docs.aws.amazon.com/bedrock/latest/userguide/data-retention.html";
265
+ /**
266
+ * Format a Bedrock error with a human-readable prefix.
267
+ * AWS SDK exceptions (both from `client.send()` and from stream event items)
268
+ * extend BedrockRuntimeServiceException. We map the `.name` to a stable
269
+ * human-readable prefix so downstream consumers (retry logic, context-overflow
270
+ * detection) can distinguish error categories via simple string matching.
271
+ */
272
+ function formatBedrockError(error) {
273
+ const norm = normalizeProviderError(error);
274
+ // Surface the raw HTTP body (with status) when the SDK did not fold it into
275
+ // the message; otherwise fall back to the message. This is what stops a
276
+ // gateway 403 from collapsing to `Unknown: UnknownError`.
277
+ const core = !norm.messageCarriesBody && norm.status !== undefined && norm.body !== undefined
278
+ ? `${norm.status}: ${norm.body}`
279
+ : norm.message;
280
+ const dataRetentionHint = /data retention mode/i.test(core)
281
+ ? ` See ${BEDROCK_DATA_RETENTION_DOCS_URL} for supported data retention modes.`
282
+ : "";
283
+ if (error instanceof BedrockRuntimeServiceException) {
284
+ const prefix = BEDROCK_ERROR_PREFIXES[error.name] ?? error.name;
285
+ return `${prefix}: ${core}${dataRetentionHint}`;
286
+ }
287
+ return `${core}${dataRetentionHint}`;
288
+ }
289
+ /** Over-long header values are dropped rather than truncated: a truncated request id is not a request id. */
290
+ const MAX_BEDROCK_DIAGNOSTIC_VALUE_CHARS = 200;
291
+ function normalizeDiagnosticValue(value) {
292
+ if (typeof value !== "string")
293
+ return undefined;
294
+ const trimmed = value.trim();
295
+ if (trimmed.length === 0 || trimmed.length > MAX_BEDROCK_DIAGNOSTIC_VALUE_CHARS)
296
+ return undefined;
297
+ return trimmed;
298
+ }
299
+ /**
300
+ * The SDK puts the modeled code on `error.name` for service exceptions and unmodeled stream errors alike, so
301
+ * do not narrow to `BedrockRuntimeServiceException`. Modeled Bedrock errors all end in `Exception`, unlike
302
+ * transport names such as `TimeoutError`.
303
+ */
304
+ function extractBedrockErrorCode(error) {
305
+ if (!(error instanceof Error) || !error.name.endsWith("Exception"))
306
+ return undefined;
307
+ return normalizeDiagnosticValue(error.name);
308
+ }
309
+ /**
310
+ * Structured metadata alongside `errorMessage`, which stays byte-identical because `isRetryableAssistantError`
311
+ * matches against it. Unknown fields are omitted, never guessed: a modeled mid-stream exception reaches us as
312
+ * a bare object literal, leaving only `fallbackRequestId`. `details` only, as the throw is not always `Error`.
313
+ */
314
+ function appendBedrockFailureDiagnostic(output, error, fallbackRequestId) {
315
+ const metadata = error?.$metadata;
316
+ const details = {};
317
+ if (typeof metadata?.httpStatusCode === "number")
318
+ details.status = metadata.httpStatusCode;
319
+ const errorCode = extractBedrockErrorCode(error);
320
+ if (errorCode !== undefined)
321
+ details.errorCode = errorCode;
322
+ const requestId = normalizeDiagnosticValue(metadata?.requestId) ?? fallbackRequestId;
323
+ if (requestId !== undefined)
324
+ details.requestId = requestId;
325
+ if (Object.keys(details).length === 0)
326
+ return;
327
+ appendAssistantMessageDiagnostic(output, { type: "bedrock_response_failure", timestamp: Date.now(), details });
328
+ }
329
+ /**
330
+ * Header keys that must never be overwritten by caller-supplied headers.
331
+ * `host` and `x-amz-*` participate in the SigV4 canonical request; `authorization`
332
+ * is owned by SigV4 or the bearer-token path (config.token + authSchemePreference).
333
+ * Compared case-insensitively (caller key is lower-cased before lookup).
334
+ */
335
+ const RESERVED_HEADER_EXACT = new Set(["authorization", "host"]);
336
+ function isReservedHeader(key) {
337
+ const lower = key.toLowerCase();
338
+ return lower.startsWith("x-amz-") || RESERVED_HEADER_EXACT.has(lower);
339
+ }
340
+ /**
341
+ * Attach caller-supplied headers to the outgoing Bedrock request via a Smithy
342
+ * `build`-step middleware. The `build` step runs after request serialisation but
343
+ * before SigV4 signing, so injected headers are covered by the signature. Reserved
344
+ * SigV4 / auth headers (`x-amz-*`, `authorization`, `host`) are silently skipped;
345
+ * all other caller headers override any existing same-named header on the request.
346
+ */
347
+ function addCustomHeadersMiddleware(client, headers) {
348
+ const middleware = (next) => async (args) => {
349
+ const request = args.request;
350
+ if (request && typeof request === "object" && "headers" in request) {
351
+ const requestHeaders = request.headers;
352
+ for (const [key, value] of Object.entries(headers)) {
353
+ if (!isReservedHeader(key)) {
354
+ requestHeaders[key] = value;
355
+ }
356
+ }
357
+ }
358
+ return next(args);
359
+ };
360
+ client.middlewareStack.add(middleware, { step: "build", name: "nyan-ai-custom-headers", priority: "low" });
361
+ }
362
+ function isSmithyHttpResponse(response) {
363
+ if (!response || typeof response !== "object")
364
+ return false;
365
+ const candidate = response;
366
+ return typeof candidate.statusCode === "number" && !!candidate.headers && typeof candidate.headers === "object";
367
+ }
368
+ function toProviderResponse(response) {
369
+ if (!isSmithyHttpResponse(response))
370
+ return undefined;
371
+ return { status: response.statusCode, headers: { ...response.headers } };
372
+ }
373
+ /**
374
+ * Bedrock's modeled `$metadata` only preserves selected HTTP metadata (for example
375
+ * requestId), so custom gateway headers are otherwise lost before callers see
376
+ * `onResponse`. Capture the raw Smithy HTTP response at the deserialize step,
377
+ * after the SDK receives the response but before the event stream is consumed.
378
+ */
379
+ function addResponseHeadersMiddleware(client, onResponse, model, onObserved) {
380
+ const middleware = (next) => async (args) => {
381
+ const result = await next(args);
382
+ const providerResponse = toProviderResponse(result.response);
383
+ if (providerResponse) {
384
+ onObserved();
385
+ await onResponse(providerResponse, model);
386
+ }
387
+ return result;
388
+ };
389
+ client.middlewareStack.add(middleware, { step: "deserialize", name: "nyan-ai-response-headers" });
390
+ }
391
+ export const streamSimple = (model, context, options) => {
392
+ const base = {
393
+ ...buildBaseOptions(model, context, options, undefined),
394
+ toolChoice: options?.toolChoice,
395
+ };
396
+ if (!options?.reasoning) {
397
+ return stream(model, context, { ...base, reasoning: undefined });
398
+ }
399
+ if (isAnthropicClaudeModel(model)) {
400
+ if (supportsAdaptiveThinking(model.id, model.name)) {
401
+ return stream(model, context, {
402
+ ...base,
403
+ reasoning: options.reasoning,
404
+ thinkingBudgets: options.thinkingBudgets,
405
+ });
406
+ }
407
+ // Undefined means the caller did not request an output cap; let the helper use the model cap.
408
+ // Do not coerce to 0 here, or the thinking budget would become the entire maxTokens value.
409
+ const adjusted = adjustMaxTokensForThinking(base.maxTokens, model.maxTokens, options.reasoning, options.thinkingBudgets);
410
+ const maxTokens = clampMaxTokensToContext(model, context, adjusted.maxTokens);
411
+ return stream(model, context, {
412
+ ...base,
413
+ maxTokens,
414
+ reasoning: options.reasoning,
415
+ thinkingBudgets: {
416
+ ...(options.thinkingBudgets || {}),
417
+ [clampReasoning(options.reasoning)]: Math.min(adjusted.thinkingBudget, Math.max(0, maxTokens - 1024)),
418
+ },
419
+ });
420
+ }
421
+ return stream(model, context, {
422
+ ...base,
423
+ reasoning: options.reasoning,
424
+ thinkingBudgets: options.thinkingBudgets,
425
+ });
426
+ };
427
+ function handleContentBlockStart(event, blocks, output, stream) {
428
+ const index = event.contentBlockIndex;
429
+ const start = event.start;
430
+ if (start?.toolUse) {
431
+ const block = {
432
+ type: "toolCall",
433
+ id: start.toolUse.toolUseId || "",
434
+ name: start.toolUse.name || "",
435
+ arguments: {},
436
+ partialJson: "",
437
+ index,
438
+ };
439
+ output.content.push(block);
440
+ stream.push({ type: "toolcall_start", contentIndex: blocks.length - 1, partial: output });
441
+ }
442
+ }
443
+ function handleContentBlockDelta(event, blocks, output, stream) {
444
+ const contentBlockIndex = event.contentBlockIndex;
445
+ const delta = event.delta;
446
+ let index = blocks.findIndex((b) => b.index === contentBlockIndex);
447
+ let block = blocks[index];
448
+ if (delta?.text !== undefined) {
449
+ // If no text block exists yet, create one, as `handleContentBlockStart` is not sent for text blocks
450
+ if (!block) {
451
+ const newBlock = { type: "text", text: "", index: contentBlockIndex };
452
+ output.content.push(newBlock);
453
+ index = blocks.length - 1;
454
+ block = blocks[index];
455
+ stream.push({ type: "text_start", contentIndex: index, partial: output });
456
+ }
457
+ if (block.type === "text") {
458
+ block.text += delta.text;
459
+ stream.push({ type: "text_delta", contentIndex: index, delta: delta.text, partial: output });
460
+ }
461
+ }
462
+ else if (delta?.toolUse && block?.type === "toolCall") {
463
+ block.partialJson = (block.partialJson || "") + (delta.toolUse.input || "");
464
+ block.arguments = parseStreamingJson(block.partialJson);
465
+ stream.push({ type: "toolcall_delta", contentIndex: index, delta: delta.toolUse.input || "", partial: output });
466
+ }
467
+ else if (delta?.reasoningContent) {
468
+ let thinkingBlock = block;
469
+ let thinkingIndex = index;
470
+ if (!thinkingBlock) {
471
+ const newBlock = { type: "thinking", thinking: "", thinkingSignature: "", index: contentBlockIndex };
472
+ output.content.push(newBlock);
473
+ thinkingIndex = blocks.length - 1;
474
+ thinkingBlock = blocks[thinkingIndex];
475
+ stream.push({ type: "thinking_start", contentIndex: thinkingIndex, partial: output });
476
+ }
477
+ if (thinkingBlock?.type === "thinking") {
478
+ if (delta.reasoningContent.text) {
479
+ thinkingBlock.thinking += delta.reasoningContent.text;
480
+ stream.push({
481
+ type: "thinking_delta",
482
+ contentIndex: thinkingIndex,
483
+ delta: delta.reasoningContent.text,
484
+ partial: output,
485
+ });
486
+ }
487
+ // `thinkingSignature` holds either an Anthropic signature or an opaque redacted
488
+ // payload, never both: mixing them would corrupt whichever arrived first.
489
+ if (delta.reasoningContent.signature && !thinkingBlock.redacted) {
490
+ thinkingBlock.thinkingSignature =
491
+ (thinkingBlock.thinkingSignature || "") + delta.reasoningContent.signature;
492
+ }
493
+ if (delta.reasoningContent.redactedContent?.length) {
494
+ // Encrypted reasoning from non-Anthropic models on Bedrock (e.g. OpenAI GPT-5.6).
495
+ // The payload is opaque, so keep it verbatim in `thinkingSignature` the way the
496
+ // Anthropic path stores redacted thinking, and replay it on the next turn.
497
+ if (!thinkingBlock.redacted) {
498
+ thinkingBlock.redacted = true;
499
+ thinkingBlock.thinkingSignature = "";
500
+ thinkingBlock.thinking += REDACTED_THINKING_PLACEHOLDER;
501
+ stream.push({
502
+ type: "thinking_delta",
503
+ contentIndex: thinkingIndex,
504
+ delta: REDACTED_THINKING_PLACEHOLDER,
505
+ partial: output,
506
+ });
507
+ }
508
+ thinkingBlock.redactedChunks ??= [];
509
+ thinkingBlock.redactedChunks.push(delta.reasoningContent.redactedContent);
510
+ }
511
+ }
512
+ }
513
+ }
514
+ /**
515
+ * Encodes buffered encrypted reasoning into `thinkingSignature` and drops the scratch
516
+ * buffer, which must never reach a persisted message: `Uint8Array` serializes to an
517
+ * index-keyed object roughly ten times the size of the base64 payload.
518
+ */
519
+ function flushRedactedContent(block) {
520
+ if (block.type !== "thinking" || !block.redactedChunks)
521
+ return;
522
+ block.thinkingSignature = bytesToBase64(block.redactedChunks);
523
+ delete block.redactedChunks;
524
+ }
525
+ /**
526
+ * Strips every streaming scratch field. Runs from the terminal paths as well as
527
+ * `contentBlockStop`, because a stream can settle without stopping each block.
528
+ */
529
+ function finalizeStreamingBlock(block) {
530
+ delete block.index;
531
+ // partialJson is only a streaming scratch buffer; never persist it.
532
+ delete block.partialJson;
533
+ flushRedactedContent(block);
534
+ }
535
+ function handleMetadata(event, model, output) {
536
+ if (event.usage) {
537
+ output.usage.input = event.usage.inputTokens || 0;
538
+ output.usage.output = event.usage.outputTokens || 0;
539
+ output.usage.cacheRead = event.usage.cacheReadInputTokens || 0;
540
+ output.usage.cacheWrite = event.usage.cacheWriteInputTokens || 0;
541
+ output.usage.cacheWrite1h = event.usage.cacheDetails?.reduce((total, detail) => total + (detail.ttl === CacheTTL.ONE_HOUR ? (detail.inputTokens ?? 0) : 0), 0);
542
+ output.usage.totalTokens = event.usage.totalTokens || output.usage.input + output.usage.output;
543
+ calculateCost(model, output.usage);
544
+ }
545
+ }
546
+ function handleContentBlockStop(event, blocks, output, stream) {
547
+ const index = blocks.findIndex((b) => b.index === event.contentBlockIndex);
548
+ const block = blocks[index];
549
+ if (!block)
550
+ return;
551
+ delete block.index;
552
+ switch (block.type) {
553
+ case "text":
554
+ stream.push({ type: "text_end", contentIndex: index, content: block.text, partial: output });
555
+ break;
556
+ case "thinking":
557
+ flushRedactedContent(block);
558
+ stream.push({ type: "thinking_end", contentIndex: index, content: block.thinking, partial: output });
559
+ break;
560
+ case "toolCall":
561
+ block.arguments = parseStreamingJson(block.partialJson);
562
+ // Finalize in-place and strip the scratch buffer so replay only
563
+ // carries parsed arguments.
564
+ delete block.partialJson;
565
+ stream.push({ type: "toolcall_end", contentIndex: index, toolCall: block, partial: output });
566
+ break;
567
+ }
568
+ }
569
+ /**
570
+ * Check if the model supports adaptive thinking (Opus 4.6+, Sonnet 4.6).
571
+ * Checks both model ID and model name to support application inference profiles
572
+ * whose ARNs don't contain the model name.
573
+ */
574
+ function getModelMatchCandidates(modelId, modelName) {
575
+ const values = modelName ? [modelId, modelName] : [modelId];
576
+ return values.flatMap((value) => {
577
+ const lower = value.toLowerCase();
578
+ return [lower, lower.replace(/[\s_.:]+/g, "-")];
579
+ });
580
+ }
581
+ function supportsAdaptiveThinking(modelId, modelName) {
582
+ const candidates = getModelMatchCandidates(modelId, modelName);
583
+ return candidates.some((s) => s.includes("opus-4-6") ||
584
+ s.includes("opus-4-7") ||
585
+ s.includes("opus-4-8") ||
586
+ s.includes("opus-5") ||
587
+ s.includes("sonnet-4-6") ||
588
+ s.includes("sonnet-5") ||
589
+ s.includes("haiku-5") ||
590
+ s.includes("fable-5"));
591
+ }
592
+ function supportsNativeXhighEffort(model) {
593
+ const candidates = getModelMatchCandidates(model.id, model.name);
594
+ return candidates.some((s) => s.includes("opus-4-7") ||
595
+ s.includes("opus-4-8") ||
596
+ s.includes("opus-5") ||
597
+ s.includes("sonnet-5") ||
598
+ s.includes("haiku-5") ||
599
+ s.includes("fable-5"));
600
+ }
601
+ /**
602
+ * Check if the model accepts `thinking.block_binding`. Opus 4.6 and Sonnet 4.6 reject it with
603
+ * "thinking.adaptive.block_binding: Extra inputs are not permitted".
604
+ */
605
+ function supportsThinkingBlockBinding(model) {
606
+ const candidates = getModelMatchCandidates(model.id, model.name);
607
+ return candidates.some((s) => s.includes("opus-4-7") ||
608
+ s.includes("opus-4-8") ||
609
+ s.includes("opus-5") ||
610
+ s.includes("sonnet-5") ||
611
+ s.includes("haiku-5") ||
612
+ s.includes("fable-5"));
613
+ }
614
+ function mapThinkingLevelToEffort(model, level) {
615
+ if (level === "xhigh" && supportsNativeXhighEffort(model))
616
+ return "xhigh";
617
+ const mapped = level ? model.thinkingLevelMap?.[level] : undefined;
618
+ if (typeof mapped === "string")
619
+ return mapped;
620
+ switch (level) {
621
+ case "minimal":
622
+ case "low":
623
+ return "low";
624
+ case "medium":
625
+ return "medium";
626
+ case "high":
627
+ return "high";
628
+ default:
629
+ return "high";
630
+ }
631
+ }
632
+ /**
633
+ * Resolve cache retention preference.
634
+ * Defaults to "short" and uses NYAN_CACHE_RETENTION for backward compatibility.
635
+ */
636
+ function resolveCacheRetention(cacheRetention, env) {
637
+ if (cacheRetention) {
638
+ return cacheRetention;
639
+ }
640
+ if (getProviderEnvValue("NYAN_CACHE_RETENTION", env) === "long") {
641
+ return "long";
642
+ }
643
+ return "short";
644
+ }
645
+ /**
646
+ * Check if the model is an Anthropic Claude model on Bedrock.
647
+ * Checks both model ID and model name to support application inference profiles
648
+ * whose ARNs don't contain the model name.
649
+ */
650
+ function isAnthropicClaudeModel(model) {
651
+ const id = model.id.toLowerCase();
652
+ const name = model.name?.toLowerCase() ?? "";
653
+ return (id.includes("anthropic.claude") ||
654
+ id.includes("anthropic/claude") ||
655
+ name.includes("anthropic.claude") ||
656
+ name.includes("anthropic/claude") ||
657
+ name.includes("claude"));
658
+ }
659
+ /**
660
+ * Check if the model supports prompt caching.
661
+ * Supported: Claude 3.5 Haiku, Claude 3.7 Sonnet, Claude 4.x models, Claude 5 models
662
+ *
663
+ * For base models and system-defined inference profiles the model ID / ARN
664
+ * contains the model name, so we can decide locally.
665
+ *
666
+ * For application inference profiles (whose ARNs don't contain the model name),
667
+ * also checks model.name which is user-controlled via models.json or registerProvider.
668
+ * As a last resort, set AWS_BEDROCK_FORCE_CACHE=1 to enable cache points.
669
+ * Amazon Nova models have automatic caching and don't need explicit cache points.
670
+ */
671
+ function supportsPromptCaching(model, env) {
672
+ const candidates = getModelMatchCandidates(model.id, model.name);
673
+ const hasClaudeRef = candidates.some((s) => s.includes("claude"));
674
+ if (!hasClaudeRef) {
675
+ // Application inference profiles don't contain the model name in the ARN.
676
+ // Allow users to force cache points via environment variable.
677
+ if (getProviderEnvValue("AWS_BEDROCK_FORCE_CACHE", env) === "1")
678
+ return true;
679
+ return false;
680
+ }
681
+ // Claude 5 models (fable-5, opus-5, sonnet-5, haiku-5)
682
+ if (candidates.some((s) => s.includes("fable-5") || s.includes("opus-5") || s.includes("sonnet-5") || s.includes("haiku-5")))
683
+ return true;
684
+ // Claude 4.x models (opus-4, sonnet-4, haiku-4)
685
+ if (candidates.some((s) => s.includes("-4-")))
686
+ return true;
687
+ // Claude 3.7 Sonnet
688
+ if (candidates.some((s) => s.includes("claude-3-7-sonnet")))
689
+ return true;
690
+ // Claude 3.5 Haiku
691
+ if (candidates.some((s) => s.includes("claude-3-5-haiku")))
692
+ return true;
693
+ return false;
694
+ }
695
+ /**
696
+ * Check if the model supports thinking signatures in reasoningContent.
697
+ * Only Anthropic Claude models support the signature field.
698
+ * Other models (OpenAI, Qwen, Minimax, Moonshot, etc.) reject it with:
699
+ * "This model doesn't support the reasoningContent.reasoningText.signature field"
700
+ *
701
+ * Checks both model ID and model name to support application inference profiles.
702
+ */
703
+ function supportsThinkingSignature(model) {
704
+ return isAnthropicClaudeModel(model);
705
+ }
706
+ function buildSystemPrompt(systemPrompt, model, cacheRetention, env) {
707
+ if (!systemPrompt)
708
+ return undefined;
709
+ const blocks = [{ text: sanitizeSurrogates(systemPrompt) }];
710
+ // Add cache point for supported Claude models when caching is enabled
711
+ if (cacheRetention !== "none" && supportsPromptCaching(model, env)) {
712
+ blocks.push({
713
+ cachePoint: { type: CachePointType.DEFAULT, ...(cacheRetention === "long" ? { ttl: CacheTTL.ONE_HOUR } : {}) },
714
+ });
715
+ }
716
+ return blocks;
717
+ }
718
+ function normalizeToolCallId(id) {
719
+ const sanitized = id.replace(/[^a-zA-Z0-9_-]/g, "_");
720
+ return sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;
721
+ }
722
+ function createNonBlankTextBlock(text) {
723
+ const sanitized = sanitizeSurrogates(text);
724
+ return sanitized.trim().length === 0 ? undefined : { text: sanitized };
725
+ }
726
+ function createRequiredTextBlock(text) {
727
+ return createNonBlankTextBlock(text) ?? { text: EMPTY_TEXT_PLACEHOLDER };
728
+ }
729
+ function sanitizeBedrockDocument(value) {
730
+ if (Array.isArray(value)) {
731
+ return value.map(sanitizeBedrockDocument);
732
+ }
733
+ if (value !== null && typeof value === "object") {
734
+ return Object.fromEntries(Object.entries(value)
735
+ .filter(([key]) => key.length > 0)
736
+ .map(([key, nestedValue]) => [key, sanitizeBedrockDocument(nestedValue)]));
737
+ }
738
+ return value;
739
+ }
740
+ function convertToolResultContent(content) {
741
+ const result = [];
742
+ for (const c of content) {
743
+ if (c.type === "image") {
744
+ result.push({ image: createImageBlock(c.mimeType, c.data) });
745
+ }
746
+ else {
747
+ const textBlock = createNonBlankTextBlock(c.text);
748
+ if (textBlock)
749
+ result.push(textBlock);
750
+ }
751
+ }
752
+ if (result.length === 0)
753
+ result.push({ text: EMPTY_TEXT_PLACEHOLDER });
754
+ return result;
755
+ }
756
+ function convertMessages(context, model, cacheRetention, env) {
757
+ const result = [];
758
+ const transformedMessages = transformMessages(withoutInitialSystemMessage(context.messages), model, normalizeToolCallId);
759
+ for (let i = 0; i < transformedMessages.length; i++) {
760
+ const m = transformedMessages[i];
761
+ switch (m.role) {
762
+ case "user": {
763
+ const content = [];
764
+ if (typeof m.content === "string") {
765
+ content.push(createRequiredTextBlock(m.content));
766
+ }
767
+ else {
768
+ for (const c of m.content) {
769
+ switch (c.type) {
770
+ case "text": {
771
+ const textBlock = createNonBlankTextBlock(c.text);
772
+ if (textBlock)
773
+ content.push(textBlock);
774
+ break;
775
+ }
776
+ case "image":
777
+ content.push({ image: createImageBlock(c.mimeType, c.data) });
778
+ break;
779
+ default:
780
+ continue;
781
+ }
782
+ }
783
+ if (content.length === 0)
784
+ content.push({ text: EMPTY_TEXT_PLACEHOLDER });
785
+ }
786
+ result.push({ role: ConversationRole.USER, content });
787
+ break;
788
+ }
789
+ case "assistant": {
790
+ // Skip assistant messages with empty content (e.g., from aborted requests)
791
+ // Bedrock rejects messages with empty content arrays
792
+ if (m.content.length === 0) {
793
+ continue;
794
+ }
795
+ const contentBlocks = [];
796
+ for (const c of m.content) {
797
+ switch (c.type) {
798
+ case "text": {
799
+ // Skip empty text blocks
800
+ const textBlock = createNonBlankTextBlock(c.text);
801
+ if (!textBlock)
802
+ continue;
803
+ contentBlocks.push(textBlock);
804
+ break;
805
+ }
806
+ case "toolCall":
807
+ contentBlocks.push({
808
+ toolUse: { toolUseId: c.id, name: c.name, input: sanitizeBedrockDocument(c.arguments) },
809
+ });
810
+ break;
811
+ case "thinking": {
812
+ // Encrypted reasoning is opaque: replay the stored payload as the
813
+ // `redactedContent` member instead of lowering it to reasoning text.
814
+ if (c.redacted) {
815
+ const redactedContent = decodeRedactedContent(c.thinkingSignature);
816
+ if (redactedContent?.length) {
817
+ contentBlocks.push({ reasoningContent: { redactedContent } });
818
+ }
819
+ continue;
820
+ }
821
+ // Skip empty thinking blocks
822
+ const thinking = sanitizeSurrogates(c.thinking);
823
+ if (thinking.trim().length === 0)
824
+ continue;
825
+ // Only Anthropic models support the signature field in reasoningText.
826
+ // For other models, we omit the signature to avoid errors like:
827
+ // "This model doesn't support the reasoningContent.reasoningText.signature field"
828
+ if (supportsThinkingSignature(model)) {
829
+ // Signatures arrive after thinking deltas. If a partial or externally
830
+ // persisted message lacks a signature, Bedrock rejects the replayed
831
+ // reasoning block. Fall back to plain text, matching Anthropic.
832
+ if (!c.thinkingSignature || c.thinkingSignature.trim().length === 0) {
833
+ contentBlocks.push({ text: thinking });
834
+ }
835
+ else {
836
+ contentBlocks.push({
837
+ reasoningContent: {
838
+ reasoningText: {
839
+ text: thinking,
840
+ signature: c.thinkingSignature,
841
+ },
842
+ },
843
+ });
844
+ }
845
+ }
846
+ else {
847
+ contentBlocks.push({
848
+ reasoningContent: {
849
+ reasoningText: { text: thinking },
850
+ },
851
+ });
852
+ }
853
+ break;
854
+ }
855
+ default:
856
+ continue;
857
+ }
858
+ }
859
+ // Skip if all content blocks were filtered out
860
+ if (contentBlocks.length === 0) {
861
+ continue;
862
+ }
863
+ result.push({
864
+ role: ConversationRole.ASSISTANT,
865
+ content: contentBlocks,
866
+ });
867
+ break;
868
+ }
869
+ case "toolResult": {
870
+ // Collect all consecutive toolResult messages into a single user message
871
+ // Bedrock requires all tool results to be in one message
872
+ const toolResults = [];
873
+ // Add current tool result with all content blocks combined
874
+ toolResults.push({
875
+ toolResult: {
876
+ toolUseId: m.toolCallId,
877
+ content: convertToolResultContent(m.content),
878
+ status: m.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,
879
+ },
880
+ });
881
+ // Look ahead for consecutive toolResult messages
882
+ let j = i + 1;
883
+ while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") {
884
+ const nextMsg = transformedMessages[j];
885
+ toolResults.push({
886
+ toolResult: {
887
+ toolUseId: nextMsg.toolCallId,
888
+ content: convertToolResultContent(nextMsg.content),
889
+ status: nextMsg.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,
890
+ },
891
+ });
892
+ j++;
893
+ }
894
+ // Skip the messages we've already processed
895
+ i = j - 1;
896
+ result.push({ role: ConversationRole.USER, content: toolResults });
897
+ break;
898
+ }
899
+ default:
900
+ continue;
901
+ }
902
+ }
903
+ // Add cache point to the last user message for supported Claude models when caching is enabled
904
+ if (cacheRetention !== "none" && supportsPromptCaching(model, env) && result.length > 0) {
905
+ const lastMessage = result[result.length - 1];
906
+ if (lastMessage.role === ConversationRole.USER && lastMessage.content) {
907
+ lastMessage.content.push({
908
+ cachePoint: {
909
+ type: CachePointType.DEFAULT,
910
+ ...(cacheRetention === "long" ? { ttl: CacheTTL.ONE_HOUR } : {}),
911
+ },
912
+ });
913
+ }
914
+ }
915
+ return result;
916
+ }
917
+ function convertToolConfig(tools, toolChoice, supportsStrictMode) {
918
+ if (!tools?.length)
919
+ return undefined;
920
+ if (toolChoice === "none")
921
+ return undefined;
922
+ const bedrockTools = tools.map((tool) => {
923
+ const strict = resolveJsonSchemaStrictSampling(tool, supportsStrictMode);
924
+ return {
925
+ toolSpec: {
926
+ name: tool.name,
927
+ description: tool.description,
928
+ inputSchema: { json: getJsonSchemaToolParameters(tool, strict) },
929
+ ...(strict === true ? { strict: true } : {}),
930
+ },
931
+ };
932
+ });
933
+ let bedrockToolChoice;
934
+ switch (toolChoice) {
935
+ case "auto":
936
+ bedrockToolChoice = { auto: {} };
937
+ break;
938
+ case "any":
939
+ bedrockToolChoice = { any: {} };
940
+ break;
941
+ default:
942
+ if (toolChoice?.type === "tool") {
943
+ bedrockToolChoice = { tool: { name: toolChoice.name } };
944
+ }
945
+ }
946
+ return { tools: bedrockTools, toolChoice: bedrockToolChoice };
947
+ }
948
+ function mapStopReason(reason) {
949
+ switch (reason) {
950
+ case BedrockStopReason.END_TURN:
951
+ case BedrockStopReason.STOP_SEQUENCE:
952
+ return { stopReason: "stop" };
953
+ case BedrockStopReason.MAX_TOKENS:
954
+ case BedrockStopReason.MODEL_CONTEXT_WINDOW_EXCEEDED:
955
+ return { stopReason: "length" };
956
+ case BedrockStopReason.TOOL_USE:
957
+ return { stopReason: "toolUse" };
958
+ default:
959
+ return reason
960
+ ? { stopReason: "error", errorMessage: `Provider stopped with: ${reason}` }
961
+ : { stopReason: "error" };
962
+ }
963
+ }
964
+ function getConfiguredBedrockRegion(options) {
965
+ return (options.region ||
966
+ getProviderEnvValue("AWS_REGION", options.env) ||
967
+ getProviderEnvValue("AWS_DEFAULT_REGION", options.env) ||
968
+ undefined);
969
+ }
970
+ function getConfiguredBedrockCredentials(env) {
971
+ const accessKeyId = getProviderEnvValue("AWS_ACCESS_KEY_ID", env);
972
+ const secretAccessKey = getProviderEnvValue("AWS_SECRET_ACCESS_KEY", env);
973
+ if (!accessKeyId || !secretAccessKey) {
974
+ return undefined;
975
+ }
976
+ const sessionToken = getProviderEnvValue("AWS_SESSION_TOKEN", env);
977
+ return {
978
+ accessKeyId,
979
+ secretAccessKey,
980
+ ...(sessionToken ? { sessionToken } : {}),
981
+ };
982
+ }
983
+ function getStandardBedrockEndpointRegion(baseUrl) {
984
+ if (!baseUrl) {
985
+ return undefined;
986
+ }
987
+ try {
988
+ const { hostname } = new URL(baseUrl);
989
+ const match = hostname.toLowerCase().match(/^bedrock-runtime(?:-fips)?\.([a-z0-9-]+)\.amazonaws\.com(?:\.cn)?$/);
990
+ return match?.[1];
991
+ }
992
+ catch {
993
+ return undefined;
994
+ }
995
+ }
996
+ function shouldUseExplicitBedrockEndpoint(baseUrl, configuredRegion, hasAmbientConfiguredProfile) {
997
+ const endpointRegion = getStandardBedrockEndpointRegion(baseUrl);
998
+ if (!endpointRegion) {
999
+ return true;
1000
+ }
1001
+ return !configuredRegion && !hasAmbientConfiguredProfile;
1002
+ }
1003
+ function isGovCloudBedrockTarget(model, options) {
1004
+ const region = getConfiguredBedrockRegion(options);
1005
+ if (region?.toLowerCase().startsWith("us-gov-")) {
1006
+ return true;
1007
+ }
1008
+ const modelId = model.id.toLowerCase();
1009
+ return modelId.startsWith("us-gov.") || modelId.startsWith("arn:aws-us-gov:");
1010
+ }
1011
+ function buildAdditionalModelRequestFields(model, options) {
1012
+ if (!options.reasoning || !model.reasoning) {
1013
+ return undefined;
1014
+ }
1015
+ if (isAnthropicClaudeModel(model)) {
1016
+ // GovCloud Bedrock currently rejects the Claude thinking.display field.
1017
+ // Omit it there until the GovCloud Converse schema catches up.
1018
+ const isGovCloud = isGovCloudBedrockTarget(model, options);
1019
+ const display = isGovCloud ? undefined : (options.thinkingDisplay ?? "summarized");
1020
+ // Replayed signed thinking blocks are bound to the system prompt and tools they were
1021
+ // created with. Bedrock 400s on replay after either changes unless stale blocks are
1022
+ // dropped, matching the Anthropic provider. Skipped on GovCloud like display.
1023
+ const useBlockBinding = !isGovCloud && supportsThinkingBlockBinding(model);
1024
+ const result = supportsAdaptiveThinking(model.id, model.name)
1025
+ ? {
1026
+ thinking: {
1027
+ type: "adaptive",
1028
+ ...(display !== undefined ? { display } : {}),
1029
+ ...(useBlockBinding ? { block_binding: { prefix_mismatch_behavior: "drop_block" } } : {}),
1030
+ },
1031
+ output_config: { effort: mapThinkingLevelToEffort(model, options.reasoning) },
1032
+ ...(useBlockBinding ? { anthropic_beta: [THINKING_BINDING_CONTROLS_BETA] } : {}),
1033
+ }
1034
+ : (() => {
1035
+ const defaultBudgets = {
1036
+ minimal: 1024,
1037
+ low: 2048,
1038
+ medium: 8192,
1039
+ high: 16384,
1040
+ xhigh: 16384, // Budget-based Claude clamps extended levels to high
1041
+ max: 16384,
1042
+ };
1043
+ // Custom budgets only cover token-based levels through high.
1044
+ const level = options.reasoning === "xhigh" || options.reasoning === "max" ? "high" : options.reasoning;
1045
+ const budget = options.thinkingBudgets?.[level] ?? defaultBudgets[options.reasoning];
1046
+ return {
1047
+ thinking: {
1048
+ type: "enabled",
1049
+ budget_tokens: budget,
1050
+ ...(display !== undefined ? { display } : {}),
1051
+ },
1052
+ };
1053
+ })();
1054
+ if (!supportsAdaptiveThinking(model.id, model.name) && (options.interleavedThinking ?? true)) {
1055
+ result.anthropic_beta = ["interleaved-thinking-2025-05-14"];
1056
+ }
1057
+ return result;
1058
+ }
1059
+ const candidates = getModelMatchCandidates(model.id, model.name);
1060
+ if (candidates.some((s) => s.includes("gpt-oss"))) {
1061
+ return { reasoning_effort: OPENAI_GPT_OSS_EFFORT[options.reasoning] };
1062
+ }
1063
+ if (candidates.some((s) => s.includes("gpt-"))) {
1064
+ const mapped = model.thinkingLevelMap?.[options.reasoning];
1065
+ return {
1066
+ reasoning: { effort: typeof mapped === "string" ? mapped : OPENAI_GPT_EFFORT[options.reasoning] },
1067
+ };
1068
+ }
1069
+ return undefined;
1070
+ }
1071
+ /** OpenAI GPT models (GPT-5.x, GPT-6) take a nested `reasoning.effort` and reject `minimal`. */
1072
+ const OPENAI_GPT_EFFORT = {
1073
+ minimal: "low",
1074
+ low: "low",
1075
+ medium: "medium",
1076
+ high: "high",
1077
+ xhigh: "xhigh",
1078
+ max: "max",
1079
+ };
1080
+ /** gpt-oss takes a flat `reasoning_effort` and only accepts low, medium and high. */
1081
+ const OPENAI_GPT_OSS_EFFORT = {
1082
+ minimal: "low",
1083
+ low: "low",
1084
+ medium: "medium",
1085
+ high: "high",
1086
+ xhigh: "high",
1087
+ max: "high",
1088
+ };
1089
+ function createImageBlock(mimeType, data) {
1090
+ let format;
1091
+ switch (mimeType) {
1092
+ case "image/jpeg":
1093
+ case "image/jpg":
1094
+ format = ImageFormat.JPEG;
1095
+ break;
1096
+ case "image/png":
1097
+ format = ImageFormat.PNG;
1098
+ break;
1099
+ case "image/gif":
1100
+ format = ImageFormat.GIF;
1101
+ break;
1102
+ case "image/webp":
1103
+ format = ImageFormat.WEBP;
1104
+ break;
1105
+ default:
1106
+ throw new Error(`Unknown image type: ${mimeType}`);
1107
+ }
1108
+ return { source: { bytes: base64ToBytes(data) }, format };
1109
+ }
1110
+ function base64ToBytes(data) {
1111
+ const binaryString = atob(data);
1112
+ const bytes = new Uint8Array(binaryString.length);
1113
+ for (let i = 0; i < binaryString.length; i++) {
1114
+ bytes[i] = binaryString.charCodeAt(i);
1115
+ }
1116
+ return bytes;
1117
+ }
1118
+ /**
1119
+ * Decodes a stored redacted payload. The AWS SDK hands the blob over as bytes, but a
1120
+ * persisted session carries it as base64. A hand-edited or externally produced session
1121
+ * can hold a signature that is not base64; drop that block instead of failing the
1122
+ * whole request.
1123
+ */
1124
+ function decodeRedactedContent(signature) {
1125
+ if (!signature)
1126
+ return undefined;
1127
+ try {
1128
+ return base64ToBytes(signature);
1129
+ }
1130
+ catch {
1131
+ return undefined;
1132
+ }
1133
+ }
1134
+ function bytesToBase64(chunks) {
1135
+ // Encrypted reasoning runs to tens of KB, so build the binary string in slices
1136
+ // rather than one concatenation per byte. The window stays under the engine's
1137
+ // argument-count limit for spread calls.
1138
+ const WINDOW = 0x8000;
1139
+ let binary = "";
1140
+ for (const chunk of chunks) {
1141
+ for (let i = 0; i < chunk.length; i += WINDOW) {
1142
+ binary += String.fromCharCode(...chunk.subarray(i, i + WINDOW));
1143
+ }
1144
+ }
1145
+ return btoa(binary);
1146
+ }
1147
+ //# sourceMappingURL=bedrock-converse-stream.js.map