promptfoo 0.125.0 → 0.125.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (869) hide show
  1. package/README.md +3 -3
  2. package/dist/src/accounts-BOxNYxVN.js +229 -0
  3. package/dist/src/accounts-BezXLdAW.cjs +276 -0
  4. package/dist/src/accounts-CPISMNlh.js +227 -0
  5. package/dist/src/accounts-vJBPs89d.js +222 -0
  6. package/dist/src/agentWorkspace-Bom7SpF2.js +592 -0
  7. package/dist/src/agentWorkspace-CEomAcws.cjs +619 -0
  8. package/dist/src/agentWorkspace-DPtMLrlI.js +593 -0
  9. package/dist/src/agentWorkspace-DkAeEYLz.js +592 -0
  10. package/dist/src/agentic-utils-121v7mJo.js +197 -0
  11. package/dist/src/agentic-utils-CBWD_rcd.cjs +237 -0
  12. package/dist/src/agentic-utils-D8wyQwPG.js +198 -0
  13. package/dist/src/agentic-utils-EP1QkQCs.js +197 -0
  14. package/dist/src/agents-Br3ah8iA.js +778 -0
  15. package/dist/src/agents-C5wj_UTv.js +777 -0
  16. package/dist/src/agents-C9Efp4mC.js +266 -0
  17. package/dist/src/agents-CQYwaVCO.js +267 -0
  18. package/dist/src/agents-CjCd4Vo8.js +777 -0
  19. package/dist/src/agents-DRWiCHYz.js +266 -0
  20. package/dist/src/agents-F2rhx0iL.cjs +266 -0
  21. package/dist/src/agents-RTYyy69h.cjs +777 -0
  22. package/dist/src/agents-api-CY72O86e.js +711 -0
  23. package/dist/src/agents-api-CsSsC21b.js +710 -0
  24. package/dist/src/agents-api-DN-ibDc8.js +710 -0
  25. package/dist/src/agents-api-cNDsCCv1.cjs +710 -0
  26. package/dist/src/ai.studio-Bj6Dyi6o.js +2 -0
  27. package/dist/src/ai.studio-C-e0LzyW.js +369 -0
  28. package/dist/src/ai.studio-CR8M6Aqf.cjs +391 -0
  29. package/dist/src/ai.studio-YKk7F0tv.js +374 -0
  30. package/dist/src/aimlapi-BGunsuTu.js +30 -0
  31. package/dist/src/aimlapi-BkzcfBsL.js +29 -0
  32. package/dist/src/aimlapi-DXFcEdP8.js +28 -0
  33. package/dist/src/aimlapi-r-8iCcAw.cjs +29 -0
  34. package/dist/src/anthropicMessages-7-YNRgQR.js +114 -0
  35. package/dist/src/anthropicMessages-C8m9Whrd.cjs +114 -0
  36. package/dist/src/anthropicMessages-DS1vXD0f.js +115 -0
  37. package/dist/src/anthropicMessages-DmvGkz-0.js +114 -0
  38. package/dist/src/app/assets/index-CrdXWTXm.js +392 -0
  39. package/dist/src/app/browser-inventory.json +4 -4
  40. package/dist/src/app/index.html +1 -1
  41. package/dist/src/audio-BLgFgyw-.cjs +104 -0
  42. package/dist/src/audio-C2sibT7Q.js +104 -0
  43. package/dist/src/audio-DXEXb03H.js +104 -0
  44. package/dist/src/audio-TkvojpwO.js +105 -0
  45. package/dist/src/authoritativeMarkupInjection-BAT9B-Wj.js +79 -0
  46. package/dist/src/authoritativeMarkupInjection-B_yHETKT.js +78 -0
  47. package/dist/src/authoritativeMarkupInjection-BfjecQ3Q.cjs +78 -0
  48. package/dist/src/authoritativeMarkupInjection-D-hDKrhD.js +78 -0
  49. package/dist/src/aws-B_9unI_-.js +1149 -0
  50. package/dist/src/aws-D0FY3qkc.js +2433 -0
  51. package/dist/src/aws-Dh1-a90n.js +2433 -0
  52. package/dist/src/aws-qskKGczY.cjs +2454 -0
  53. package/dist/src/base-CaWlBkVz.js +462 -0
  54. package/dist/src/base-CcViNwVs.js +255 -0
  55. package/dist/src/base-CsVbPJkU.cjs +467 -0
  56. package/dist/src/base-DNK9py25.js +255 -0
  57. package/dist/src/base-DlH5tjEZ.js +463 -0
  58. package/dist/src/base-DyLOZ_iX.js +256 -0
  59. package/dist/src/base-RRYXfG7l.cjs +305 -0
  60. package/dist/src/base-oXVgvtVn.js +462 -0
  61. package/dist/src/bedrock-BP17ZXbR.cjs +2 -0
  62. package/dist/src/bedrock-CsjM1dOt.js +1300 -0
  63. package/dist/src/bedrock-CzPwj8GO.js +1 -0
  64. package/dist/src/bedrock-eGXZw8oh.js +1 -0
  65. package/dist/src/bedrock-tSWjmXdj.js +2 -0
  66. package/dist/src/bestOfN-BQ93nUKV.js +160 -0
  67. package/dist/src/bestOfN-ByGGwlcb.cjs +161 -0
  68. package/dist/src/bestOfN-CbP7csHr.js +159 -0
  69. package/dist/src/bestOfN-xn6i2Xs2.js +159 -0
  70. package/dist/src/cache-CHq9hPz9.js +2 -0
  71. package/dist/src/cache-D-9eZN3I.js +754 -0
  72. package/dist/src/cache-DSm6t1MZ.js +741 -0
  73. package/dist/src/cache-DeF5zIEN.js +782 -0
  74. package/dist/src/cache-iG87oYan.cjs +856 -0
  75. package/dist/src/cerebras-CTtM4yMH.js +98 -0
  76. package/dist/src/cerebras-CogcJ3ce.cjs +97 -0
  77. package/dist/src/cerebras-DmkRypTh.js +97 -0
  78. package/dist/src/cerebras-GUp0B8JY.js +97 -0
  79. package/dist/src/chat-B4ihd3fw.js +226 -0
  80. package/dist/src/chat-B9cAQ_rS.js +227 -0
  81. package/dist/src/chat-BU7EB4R-.cjs +76 -0
  82. package/dist/src/chat-C8yxJ2-s.cjs +226 -0
  83. package/dist/src/chat-ClTFM3qq.js +934 -0
  84. package/dist/src/chat-Cnq0Is68.js +123 -0
  85. package/dist/src/chat-CwrurR57.cjs +987 -0
  86. package/dist/src/chat-D0lsojPv.js +124 -0
  87. package/dist/src/chat-D7_8yFIx.js +76 -0
  88. package/dist/src/chat-DCoETlLG.js +226 -0
  89. package/dist/src/chat-DHE7xaTR.js +76 -0
  90. package/dist/src/chat-DmhT6rz2.cjs +123 -0
  91. package/dist/src/chat-DvfMe8KI.js +123 -0
  92. package/dist/src/chat-DwP5kVnl.js +935 -0
  93. package/dist/src/chat-MB7U-QE2.js +77 -0
  94. package/dist/src/chat-zCWuBKAj.js +934 -0
  95. package/dist/src/claude-agent-sdk-23bIVI75.js +999 -0
  96. package/dist/src/claude-agent-sdk-BACpnIJi.cjs +1005 -0
  97. package/dist/src/claude-agent-sdk-BlYlmcEr.js +999 -0
  98. package/dist/src/claude-agent-sdk-Cr-jqJZl.js +1000 -0
  99. package/dist/src/client-BktbiPx9.cjs +357 -0
  100. package/dist/src/client-CjztEBmW.js +351 -0
  101. package/dist/src/client-mRs2UvH9.js +351 -0
  102. package/dist/src/client-uCz0ydjC.js +352 -0
  103. package/dist/src/cloud-BtYF555L.js +2 -0
  104. package/dist/src/cloud-CVSUEmAy.js +287 -0
  105. package/dist/src/cloud-D7Ifb-Fl.js +599 -0
  106. package/dist/src/cloud-DB5oK5NX.cjs +666 -0
  107. package/dist/src/cloud-ecu989Em.js +657 -0
  108. package/dist/src/cloud-ramjGURF.js +599 -0
  109. package/dist/src/cloudflare-ai-BfDkIjO8.js +133 -0
  110. package/dist/src/cloudflare-ai-D9HaXz1M.js +134 -0
  111. package/dist/src/cloudflare-ai-HrD5WUK8.js +132 -0
  112. package/dist/src/cloudflare-ai-Qdj8aKP2.cjs +133 -0
  113. package/dist/src/cloudflare-gateway-C81uKETQ.js +276 -0
  114. package/dist/src/cloudflare-gateway-CX5Z9X0k.js +276 -0
  115. package/dist/src/cloudflare-gateway-DW-og8gb.js +277 -0
  116. package/dist/src/cloudflare-gateway-iRyXo9n2.cjs +276 -0
  117. package/dist/src/codex-app-server-BFIrSgdy.js +2155 -0
  118. package/dist/src/codex-app-server-By1eDVD4.js +2 -0
  119. package/dist/src/codex-app-server-DKsF4qmY.js +2156 -0
  120. package/dist/src/codex-app-server-n7n4uZzC.cjs +2162 -0
  121. package/dist/src/codex-app-server-xAoELVxu.js +2155 -0
  122. package/dist/src/codex-sdk-C2ZLxa6r.js +1552 -0
  123. package/dist/src/codex-sdk-CzG02tQt.cjs +1588 -0
  124. package/dist/src/codex-sdk-DNxAOhiV.js +2 -0
  125. package/dist/src/codex-sdk-DT3aQezK.js +1557 -0
  126. package/dist/src/codex-sdk-pw9DpcJP.js +1557 -0
  127. package/dist/src/codex-security-B0bLmXJF.js +406 -0
  128. package/dist/src/codex-security-BhYs-3iY.js +406 -0
  129. package/dist/src/codex-security-DQcOfxYW.js +407 -0
  130. package/dist/src/codex-security-DsCWr6GZ.cjs +411 -0
  131. package/dist/src/cometapi-B16asPLX.cjs +55 -0
  132. package/dist/src/cometapi-MgTbZA_H.js +53 -0
  133. package/dist/src/cometapi-i33vKzPV.js +55 -0
  134. package/dist/src/cometapi-wK2UWK0X.js +56 -0
  135. package/dist/src/compatible-COj8ZCy9.js +24 -0
  136. package/dist/src/compatible-CRSsIUGb.cjs +24 -0
  137. package/dist/src/compatible-Dy1vCcNF.js +25 -0
  138. package/dist/src/compatible-aUItQrpk.js +24 -0
  139. package/dist/src/completion-Bn7COFMk.js +119 -0
  140. package/dist/src/completion-Bub2N48b.js +118 -0
  141. package/dist/src/completion-Cf2G9OlM.cjs +123 -0
  142. package/dist/src/conversationScoring-BiTYJ9MD.js +374 -0
  143. package/dist/src/conversationScoring-CKL47uIu.js +373 -0
  144. package/dist/src/conversationScoring-DCvQKp6k.cjs +398 -0
  145. package/dist/src/conversationScoring-DLNJtDZI.js +373 -0
  146. package/dist/src/crescendo-5iLk9WiJ.cjs +734 -0
  147. package/dist/src/crescendo-B5ylG7kW.js +733 -0
  148. package/dist/src/crescendo-BD7k6TIx.js +730 -0
  149. package/dist/src/crescendo-DqO2Ch0P.js +732 -0
  150. package/dist/src/custom-8rv_aG2K.js +617 -0
  151. package/dist/src/custom-BOtrIHFN.js +619 -0
  152. package/dist/src/custom-BvN8seCs.cjs +620 -0
  153. package/dist/src/custom-Cld9v_Y4.js +618 -0
  154. package/dist/src/dataUrl-BdHUey2l.cjs +3187 -0
  155. package/dist/src/dataUrl-DBMifX6C.js +3133 -0
  156. package/dist/src/dataUrl-DUSr-ZvI.js +2868 -0
  157. package/dist/src/decisions-CLazADTw.js +516 -0
  158. package/dist/src/decisions-D5X93awq.js +515 -0
  159. package/dist/src/decisions-DmaeArEn.js +515 -0
  160. package/dist/src/decisions-DyQJyHJz.cjs +514 -0
  161. package/dist/src/docker-C9NYQFeu.js +94 -0
  162. package/dist/src/docker-CGq3mMol.cjs +94 -0
  163. package/dist/src/docker-DOm7nmpl.js +95 -0
  164. package/dist/src/docker-skFN-Kfo.js +93 -0
  165. package/dist/src/embedding-0UbzkTk9.js +82 -0
  166. package/dist/src/embedding-DTrSDt7k.cjs +86 -0
  167. package/dist/src/embedding-j2ORNl5H.js +81 -0
  168. package/dist/src/envoy-BvS8XTQO.js +60 -0
  169. package/dist/src/envoy-Cn6Hzw0e.js +60 -0
  170. package/dist/src/envoy-DC3KWcUY.cjs +60 -0
  171. package/dist/src/envoy-DetHjo5B.js +61 -0
  172. package/dist/src/eval-Cer9dPe9.js +1920 -0
  173. package/dist/src/eval-CytYmI2Z.js +2 -0
  174. package/dist/src/evalResult-DzOq5wt9.js +1300 -0
  175. package/dist/src/evaluator-BxCmvGtv.js +10578 -0
  176. package/dist/src/evaluator-Ct7YDELm.js +2 -0
  177. package/dist/src/evaluatorHelpers-B_AwIrsl.js +600 -0
  178. package/dist/src/evaluatorHelpers-D1Tpc7gd.js +601 -0
  179. package/dist/src/evaluatorHelpers-DRR3rLq0.cjs +622 -0
  180. package/dist/src/fetch-B5KxZuKu.js +1559 -0
  181. package/dist/src/fetch-BG_Jl7ty.js +1556 -0
  182. package/dist/src/fetch-BKlgUg08.cjs +1853 -0
  183. package/dist/src/fetch-C9Fsja0R.js +2 -0
  184. package/dist/src/fetch-CM7P8KWA.cjs +14 -0
  185. package/dist/src/fetch-D0FkIB3G.js +9 -0
  186. package/dist/src/fetch-RXHsZF-J.js +1280 -0
  187. package/dist/src/fetch-rSECy8jR.js +10 -0
  188. package/dist/src/functionCallbackUtils-BB9tmf6a.cjs +262 -0
  189. package/dist/src/functionCallbackUtils-BXk2iY01.js +246 -0
  190. package/dist/src/functionCallbackUtils-B_cYp7P5.js +245 -0
  191. package/dist/src/functionCallbackUtils-BfXnPo0o.js +245 -0
  192. package/dist/src/gemini-image-BXLMADDz.js +471 -0
  193. package/dist/src/gemini-image-BYUZyEUx.js +472 -0
  194. package/dist/src/gemini-image-DSt1QubZ.cjs +471 -0
  195. package/dist/src/gemini-image-DdNDMiZ_.js +471 -0
  196. package/dist/src/goat-9b-uU_k6.js +514 -0
  197. package/dist/src/goat-BCJuiDd0.js +515 -0
  198. package/dist/src/goat-CmAHbemm.js +512 -0
  199. package/dist/src/goat-DdOTdyoS.cjs +515 -0
  200. package/dist/src/goblin-Bp5C5lyb.js +22 -0
  201. package/dist/src/goblin-Dmr7GItI.js +23 -0
  202. package/dist/src/goblin-DpM8wxlf.cjs +22 -0
  203. package/dist/src/goblin-cJyH6Pq-.js +22 -0
  204. package/dist/src/google-B6eaPAbE.js +142 -0
  205. package/dist/src/google-D-FStdN6.cjs +142 -0
  206. package/dist/src/google-DAC7BsCW.js +142 -0
  207. package/dist/src/google-Id18H0Va.js +143 -0
  208. package/dist/src/graders-BjNQWkaB.js +2 -0
  209. package/dist/src/graders-CqdIp_vl.js +15470 -0
  210. package/dist/src/hydra-6Ouh74DE.js +610 -0
  211. package/dist/src/hydra-BHjhZnLB.cjs +612 -0
  212. package/dist/src/hydra-BL6k2REV.js +2 -0
  213. package/dist/src/hydra-BWUc0o67.js +613 -0
  214. package/dist/src/hydra-CUkEOLKw.js +612 -0
  215. package/dist/src/image-B6hG_xhb.js +481 -0
  216. package/dist/src/image-BFaq7Krd.cjs +209 -0
  217. package/dist/src/image-Bql5C0N9.cjs +504 -0
  218. package/dist/src/image-BtZfI2pT.js +163 -0
  219. package/dist/src/image-CIM4oN7Z.cjs +163 -0
  220. package/dist/src/image-CbAl7Jpu.js +209 -0
  221. package/dist/src/image-CiYm_yFw.js +209 -0
  222. package/dist/src/image-DCMNvBiV.js +163 -0
  223. package/dist/src/image-DL7pIuUZ.js +210 -0
  224. package/dist/src/image-ey0kxF8o.js +164 -0
  225. package/dist/src/image-smgIk3rE.js +482 -0
  226. package/dist/src/index.cjs +27 -27
  227. package/dist/src/index.d.cts +8 -8
  228. package/dist/src/index.js +27 -27
  229. package/dist/src/indirectWebPwn-B_-UpWY5.js +285 -0
  230. package/dist/src/indirectWebPwn-Cz3SLiEq.js +434 -0
  231. package/dist/src/indirectWebPwn-D2s8zGiM.cjs +463 -0
  232. package/dist/src/indirectWebPwn-DXbj2wGu.cjs +285 -0
  233. package/dist/src/indirectWebPwn-D_4H44E6.js +285 -0
  234. package/dist/src/indirectWebPwn-L044SrpV.js +434 -0
  235. package/dist/src/indirectWebPwn-cnmvdavH.js +435 -0
  236. package/dist/src/indirectWebPwn-zUBzsqTt.js +286 -0
  237. package/dist/src/interactions-Bu3oVQ-j.js +850 -0
  238. package/dist/src/interactions-CND010Lh.cjs +850 -0
  239. package/dist/src/interactions-DAx7tqUz.js +851 -0
  240. package/dist/src/interactions-DPkIumeh.js +850 -0
  241. package/dist/src/iterative-BO4JRnpG.js +545 -0
  242. package/dist/src/iterative-CAK-k9rz.js +548 -0
  243. package/dist/src/iterative-CDgHc0xO.cjs +549 -0
  244. package/dist/src/iterative-CXJlHLl9.js +547 -0
  245. package/dist/src/iterativeImage-BEdGKSmh.cjs +419 -0
  246. package/dist/src/iterativeImage-BfL0QZw5.js +417 -0
  247. package/dist/src/iterativeImage-C9KhnibC.js +417 -0
  248. package/dist/src/iterativeImage-btjkOfWG.js +418 -0
  249. package/dist/src/iterativeMeta-B5Bdw6QA.js +437 -0
  250. package/dist/src/iterativeMeta-C3mI4gpT.js +440 -0
  251. package/dist/src/iterativeMeta-Co2BKyqS.cjs +439 -0
  252. package/dist/src/iterativeMeta-DD8ihRWD.js +439 -0
  253. package/dist/src/iterativeTree-AMi4GV2O.js +878 -0
  254. package/dist/src/iterativeTree-C8FJOEje.cjs +879 -0
  255. package/dist/src/iterativeTree-CvrY1f2Z.js +877 -0
  256. package/dist/src/iterativeTree-bPtESmaD.js +876 -0
  257. package/dist/src/knowledgeBase-Cf5871e3.js +163 -0
  258. package/dist/src/knowledgeBase-D2PQhqLH.js +164 -0
  259. package/dist/src/knowledgeBase-DpoMw1IH.cjs +163 -0
  260. package/dist/src/knowledgeBase-npGFl763.js +163 -0
  261. package/dist/src/litellm-BBB5DQdt.cjs +146 -0
  262. package/dist/src/litellm-Bo43ow7r.js +145 -0
  263. package/dist/src/litellm-CaU8CMLS.js +146 -0
  264. package/dist/src/litellm-wY7Unh8o.js +147 -0
  265. package/dist/src/live-5g2w-M-E.js +891 -0
  266. package/dist/src/live-BfaXsDyD.cjs +891 -0
  267. package/dist/src/live-C1xewnGD.js +2 -0
  268. package/dist/src/live-DaF7nYy5.js +892 -0
  269. package/dist/src/live-lp3urLUw.js +891 -0
  270. package/dist/src/luma-ray-B7zvKGVG.js +309 -0
  271. package/dist/src/luma-ray-DCf5fnrz.cjs +309 -0
  272. package/dist/src/luma-ray-DepBcn6z.js +309 -0
  273. package/dist/src/luma-ray-XQC4M1pt.js +310 -0
  274. package/dist/src/main.js +26 -26
  275. package/dist/src/mantleChat-7xm95vSV.js +154 -0
  276. package/dist/src/mantleChat-CXhAs5RD.js +155 -0
  277. package/dist/src/mantleChat-CcE-zjfj.cjs +154 -0
  278. package/dist/src/mantleChat-Cpefl7Zm.js +154 -0
  279. package/dist/src/mcp-B0V0ikdM.js +84 -0
  280. package/dist/src/mcp-CV2k2gwj.js +85 -0
  281. package/dist/src/memoryPoisoning-BC5FQQWZ.js +111 -0
  282. package/dist/src/memoryPoisoning-BDwrtZKX.js +111 -0
  283. package/dist/src/memoryPoisoning-BFemS_FF.js +112 -0
  284. package/dist/src/memoryPoisoning-DRs2rbVV.cjs +111 -0
  285. package/dist/src/messages-Bc5oZoAJ.js +1128 -0
  286. package/dist/src/messages-BkaH8fRW.js +1127 -0
  287. package/dist/src/messages-CoHlziS5.js +1127 -0
  288. package/dist/src/messages-Cv_m6kYs.cjs +1161 -0
  289. package/dist/src/mischievousUser-BcyFxrqJ.js +51 -0
  290. package/dist/src/mischievousUser-BlhOQSd2.js +52 -0
  291. package/dist/src/mischievousUser-BuQiKE8D.js +51 -0
  292. package/dist/src/mischievousUser-ChIOk6cT.cjs +51 -0
  293. package/dist/src/modelslab-BXIWBTgX.js +171 -0
  294. package/dist/src/modelslab-ChVsUiaJ.js +170 -0
  295. package/dist/src/modelslab-DZ6BFlDv.js +170 -0
  296. package/dist/src/modelslab-DhRr-vyo.cjs +170 -0
  297. package/dist/src/nova-reel-BL8DrN4_.js +272 -0
  298. package/dist/src/nova-reel-BiOMUm5q.cjs +272 -0
  299. package/dist/src/nova-reel-CTsya1hV.js +273 -0
  300. package/dist/src/nova-reel-kgBY4Svd.js +272 -0
  301. package/dist/src/nova-sonic-CaSSA3Jq.cjs +374 -0
  302. package/dist/src/nova-sonic-DLpmoGsR.js +375 -0
  303. package/dist/src/nova-sonic-DwWc4SoN.js +374 -0
  304. package/dist/src/nova-sonic-qnReTaXm.js +374 -0
  305. package/dist/src/novita-B5mAt3Ui.js +114 -0
  306. package/dist/src/novita-D57vCjDD.js +116 -0
  307. package/dist/src/novita-ITRtG8IJ.js +115 -0
  308. package/dist/src/novita-Rh3T13YO.cjs +115 -0
  309. package/dist/src/nscale-8V7iZ_pI.js +210 -0
  310. package/dist/src/nscale-BQnMv4pH.cjs +209 -0
  311. package/dist/src/nscale-BWZXHZVF.js +209 -0
  312. package/dist/src/nscale-BqrHiUqU.js +207 -0
  313. package/dist/src/openaiResponses-BMtGTu8R.js +317 -0
  314. package/dist/src/openaiResponses-CvcI_viE.js +318 -0
  315. package/dist/src/openaiResponses-DYPZEMX1.cjs +318 -0
  316. package/dist/src/openaiResponses-DZTg1-kb.js +319 -0
  317. package/dist/src/openclaw-BeKuig4g.js +1338 -0
  318. package/dist/src/openclaw-COkdQ83y.js +1337 -0
  319. package/dist/src/openclaw-CSoX_HQ5.cjs +1344 -0
  320. package/dist/src/openclaw-DJlhPGCb.js +1336 -0
  321. package/dist/src/opencode-sdk-BEJftEs6.cjs +1018 -0
  322. package/dist/src/opencode-sdk-DMvBB3V7.js +1013 -0
  323. package/dist/src/opencode-sdk-Df7hMjLO.js +1012 -0
  324. package/dist/src/opencode-sdk-bQp5Xf3W.js +1012 -0
  325. package/dist/src/openinterpreter-B3GgVZjK.js +431 -0
  326. package/dist/src/openinterpreter-BiGcU-HN.cjs +435 -0
  327. package/dist/src/openinterpreter-Buj2l3Eh.js +432 -0
  328. package/dist/src/openinterpreter-C3_Cg5b_.js +431 -0
  329. package/dist/src/pricing-0Pampf0q.cjs +999 -0
  330. package/dist/src/pricing-B8VdhEhY.js +976 -0
  331. package/dist/src/pricing-CtLA-rKA.js +976 -0
  332. package/dist/src/promptfoo-4OkHtH9P.cjs +341 -0
  333. package/dist/src/promptfoo-Bhpm7sH6.js +286 -0
  334. package/dist/src/promptfoo-BqV8ogVA.js +285 -0
  335. package/dist/src/promptfoo-S1Q9OHk_.js +286 -0
  336. package/dist/src/providers-B5zs1ZRv.js +24437 -0
  337. package/dist/src/providers-Cd6CJh6m.js +2 -0
  338. package/dist/src/providers-CpJlgHET.js +24039 -0
  339. package/dist/src/providers-CzvLvK6G.cjs +24180 -0
  340. package/dist/src/quiverai-1E_IvLHn.js +325 -0
  341. package/dist/src/quiverai-BXH004Vv.js +325 -0
  342. package/dist/src/quiverai-Ccya2z8Y.cjs +325 -0
  343. package/dist/src/quiverai-Cez57oe-.js +326 -0
  344. package/dist/src/registry-3zX_M9Ik.js +131 -0
  345. package/dist/src/registry-AuCrKTvS.js +132 -0
  346. package/dist/src/registry-CxXWKtQG.js +131 -0
  347. package/dist/src/registry-DG3o66JQ.cjs +131 -0
  348. package/dist/src/remoteGeneration-CAtvamG6.js +370 -0
  349. package/dist/src/remoteGeneration-CF225pDl.cjs +482 -0
  350. package/dist/src/remoteGeneration-DtnqocnL.js +370 -0
  351. package/dist/src/remoteGeneration-g3KvW-sP.js +371 -0
  352. package/dist/src/responses-BMbaUXQI.js +1098 -0
  353. package/dist/src/responses-B_TOSof-.js +1099 -0
  354. package/dist/src/responses-v-yANwTA.cjs +1109 -0
  355. package/dist/src/runtimeTransform-BBZv-oUZ.js +156 -0
  356. package/dist/src/runtimeTransform-DT2v5ovW.js +156 -0
  357. package/dist/src/runtimeTransform-GXXEIXdS.cjs +161 -0
  358. package/dist/src/runtimeTransform-JTwBQc-P.js +157 -0
  359. package/dist/src/sagemaker-B8D0L4rj.cjs +716 -0
  360. package/dist/src/sagemaker-CR2_AGdB.js +713 -0
  361. package/dist/src/sagemaker-Cd9qSQUV.js +714 -0
  362. package/dist/src/sagemaker-mKlltN4p.js +713 -0
  363. package/dist/src/scanner-PG_8lh8r.js +1971 -0
  364. package/dist/src/server/index.js +55 -55
  365. package/dist/src/server-Bmh7sd9F.js +155 -0
  366. package/dist/src/server-C7b8z6aC.js +63 -0
  367. package/dist/src/server-CAcovgtL.js +2 -0
  368. package/dist/src/server-CuuMfKlh.cjs +74 -0
  369. package/dist/src/server-DMPCj9jy.js +189 -0
  370. package/dist/src/session-BksXvRH_.cjs +69 -0
  371. package/dist/src/session-DOxUjqGQ.js +63 -0
  372. package/dist/src/session-Dujsc-b9.js +62 -0
  373. package/dist/src/session-VjtIxREd.js +62 -0
  374. package/dist/src/shared-Bkyz_7e5.cjs +2185 -0
  375. package/dist/src/shared-DDJg8ycC.js +1929 -0
  376. package/dist/src/shared-Dh3yfRBd.js +1927 -0
  377. package/dist/src/shared-tfPT8Tna.js +1928 -0
  378. package/dist/src/simulatedUser-6JdkyL3k.cjs +252 -0
  379. package/dist/src/simulatedUser-CFr2mr3M.js +248 -0
  380. package/dist/src/simulatedUser-DjwwUqx-.js +247 -0
  381. package/dist/src/slack-C_gIYiUs.js +144 -0
  382. package/dist/src/slack-DhNbz9CM.cjs +144 -0
  383. package/dist/src/slack-Dm2iI1zu.js +145 -0
  384. package/dist/src/strategies-BIY-bNul.js +2248 -0
  385. package/dist/src/strategies-C1KQQj9G.cjs +2420 -0
  386. package/dist/src/strategies-DM_3mReG.js +2385 -0
  387. package/dist/src/telemetry-BhMTibZO.js +2 -0
  388. package/dist/src/telemetry-C04d25BM.cjs +216 -0
  389. package/dist/src/telemetry-CIqy4fSC.js +201 -0
  390. package/dist/src/telemetry-CXozp_6C.js +205 -0
  391. package/dist/src/telemetry-g7PkBxmY.js +205 -0
  392. package/dist/src/togetherai-BvCim68-.js +50 -0
  393. package/dist/src/togetherai-CWyDCA9m.cjs +49 -0
  394. package/dist/src/togetherai-CeSE31vK.js +49 -0
  395. package/dist/src/togetherai-_2W0URf8.js +48 -0
  396. package/dist/src/traceContext-Brw3Oe41.js +1016 -0
  397. package/dist/src/traceContext-DpAYv27G.js +1015 -0
  398. package/dist/src/traceContext-KSqhzZI2.cjs +1032 -0
  399. package/dist/src/transcription-BySopazW.js +175 -0
  400. package/dist/src/transcription-DO4UPkRI.cjs +178 -0
  401. package/dist/src/transcription-RJGBa-pC.js +176 -0
  402. package/dist/src/transcription-fZenF3G5.js +175 -0
  403. package/dist/src/transform-BzhRc5z2.js +125 -0
  404. package/dist/src/transform-CPQu05u6.cjs +154 -0
  405. package/dist/src/transform-DAED8imp.js +126 -0
  406. package/dist/src/transform-DIOIQDmM.js +125 -0
  407. package/dist/src/typesafe-ByE0Kxfg.js +253 -0
  408. package/dist/src/typesafe-CFqGFY34.js +253 -0
  409. package/dist/src/typesafe-DCWIw-CP.cjs +253 -0
  410. package/dist/src/typesafe-DyHFV5Qk.js +254 -0
  411. package/dist/src/util-BHkj9joz.js +2049 -0
  412. package/dist/src/util-CICwIpmu.cjs +934 -0
  413. package/dist/src/util-CePiY2xZ.js +286 -0
  414. package/dist/src/util-CgT3uf4p.js +743 -0
  415. package/dist/src/util-Cj9drvOY.js +1770 -0
  416. package/dist/src/util-ClJRjlQA.cjs +357 -0
  417. package/dist/src/util-Cxf8VF2M.js +395 -0
  418. package/dist/src/util-D7RdV7rS.js +395 -0
  419. package/dist/src/util-DMNFhk47.js +351 -0
  420. package/dist/src/util-DNzh3M0z.js +396 -0
  421. package/dist/src/util-Df7rfMGb.cjs +2305 -0
  422. package/dist/src/util-Kf0KnG_6.js +2051 -0
  423. package/dist/src/util-LEbeiYw_.js +743 -0
  424. package/dist/src/util-WH8CgVs4.js +352 -0
  425. package/dist/src/util-cx6Xw8Lw.cjs +478 -0
  426. package/dist/src/util-qzBqirBH.js +2050 -0
  427. package/dist/src/vertex-CBAMfRz3.js +854 -0
  428. package/dist/src/vertex-CMP2IpN9.js +2 -0
  429. package/dist/src/vertex-CZ5YOotT.js +848 -0
  430. package/dist/src/vertex-DNsh1F1M.cjs +871 -0
  431. package/dist/src/vertexLive-BTXYj3-F.js +55 -0
  432. package/dist/src/vertexLive-Ba_LAqEF.cjs +55 -0
  433. package/dist/src/vertexLive-DM4sFaaj.js +56 -0
  434. package/dist/src/vertexLive-JqZOw7HC.js +55 -0
  435. package/dist/src/video-BY7Q2Gii.cjs +706 -0
  436. package/dist/src/video-CYElP-CK.js +703 -0
  437. package/dist/src/video-C_AdEDH0.js +702 -0
  438. package/dist/src/video-DGvjQ_4j.js +702 -0
  439. package/package.json +1 -1
  440. package/dist/src/accounts-Dpb43yde.cjs +0 -276
  441. package/dist/src/accounts-GKrO1olH.js +0 -229
  442. package/dist/src/accounts-e4FGOsji.js +0 -227
  443. package/dist/src/accounts-sUiEJfkB.js +0 -222
  444. package/dist/src/agentWorkspace-B8A_wuMR.cjs +0 -619
  445. package/dist/src/agentWorkspace-DSPIscXR.js +0 -593
  446. package/dist/src/agentWorkspace-DxUqd-XK.js +0 -592
  447. package/dist/src/agentWorkspace-n0uOJXhD.js +0 -592
  448. package/dist/src/agentic-utils-9bCj4twQ.js +0 -197
  449. package/dist/src/agentic-utils-CyCLuLoj.js +0 -197
  450. package/dist/src/agentic-utils-D23qtOlx.cjs +0 -237
  451. package/dist/src/agentic-utils-DuBMMNCw.js +0 -198
  452. package/dist/src/agents-6hDRNoYD.js +0 -777
  453. package/dist/src/agents-B8w2o7Sc.cjs +0 -777
  454. package/dist/src/agents-Ck0NXl7v.js +0 -777
  455. package/dist/src/agents-CwT3B1qB.js +0 -778
  456. package/dist/src/agents-DOLjfOEq.js +0 -266
  457. package/dist/src/agents-OcF9hq--.js +0 -267
  458. package/dist/src/agents-api-CnZZt8bn.cjs +0 -710
  459. package/dist/src/agents-api-D04u3bmL.js +0 -711
  460. package/dist/src/agents-api-DWw0_Vio.js +0 -710
  461. package/dist/src/agents-api-IWHEwp8i.js +0 -710
  462. package/dist/src/agents-mHt2Mh9O.cjs +0 -266
  463. package/dist/src/agents-sICccZCA.js +0 -266
  464. package/dist/src/ai.studio-Ci4rypDT.js +0 -2
  465. package/dist/src/ai.studio-KkQ6KaHa.js +0 -369
  466. package/dist/src/ai.studio-gSXK2cGI.js +0 -374
  467. package/dist/src/ai.studio-nQF_B4DH.cjs +0 -391
  468. package/dist/src/aimlapi-BeSk5BDV.js +0 -30
  469. package/dist/src/aimlapi-CzNUhdKu.cjs +0 -29
  470. package/dist/src/aimlapi-DCkazDPI.js +0 -29
  471. package/dist/src/aimlapi-WeH5B6K1.js +0 -28
  472. package/dist/src/anthropicMessages-AcNWTpYO.js +0 -115
  473. package/dist/src/anthropicMessages-BUtvzbpL.js +0 -114
  474. package/dist/src/anthropicMessages-DTWhZDCd.js +0 -114
  475. package/dist/src/anthropicMessages-lGVnSgyx.cjs +0 -114
  476. package/dist/src/app/assets/index-CyEI5aDN.js +0 -392
  477. package/dist/src/audio-BE_Duiu1.js +0 -104
  478. package/dist/src/audio-CiUd00k2.cjs +0 -104
  479. package/dist/src/audio-Dop6omna.js +0 -105
  480. package/dist/src/audio-EZNTInr_.js +0 -104
  481. package/dist/src/authoritativeMarkupInjection-BUqH6hNk.js +0 -78
  482. package/dist/src/authoritativeMarkupInjection-BmbJdJO0.cjs +0 -78
  483. package/dist/src/authoritativeMarkupInjection-Cpz12Y3w.js +0 -78
  484. package/dist/src/authoritativeMarkupInjection-W4XfcH91.js +0 -79
  485. package/dist/src/aws-B2Jqbnet.js +0 -2433
  486. package/dist/src/aws-DHtuUIzQ.js +0 -1149
  487. package/dist/src/aws-DLqXP6wY.js +0 -2433
  488. package/dist/src/aws-DfduhmwL.cjs +0 -2454
  489. package/dist/src/base-B9L2Xvpc.js +0 -255
  490. package/dist/src/base-BTZnIsuH.cjs +0 -305
  491. package/dist/src/base-BhaWNQPJ.js +0 -462
  492. package/dist/src/base-Br-G_Xou.js +0 -256
  493. package/dist/src/base-Bzo8hiUS.cjs +0 -467
  494. package/dist/src/base-C82fd2jq.js +0 -463
  495. package/dist/src/base-CRdQwC1W.js +0 -462
  496. package/dist/src/base-CjGwZNOQ.js +0 -255
  497. package/dist/src/bedrock-BdMru_ro.js +0 -1300
  498. package/dist/src/bedrock-CBUmfLX1.cjs +0 -2
  499. package/dist/src/bedrock-DBDxBaF9.js +0 -2
  500. package/dist/src/bedrock-DDrECM21.js +0 -1
  501. package/dist/src/bedrock-DVwkgvRS.js +0 -1
  502. package/dist/src/bestOfN-AKF5beq4.js +0 -159
  503. package/dist/src/bestOfN-C1UIVGJV.js +0 -160
  504. package/dist/src/bestOfN-DlkETbXy.cjs +0 -161
  505. package/dist/src/bestOfN-XIfEgU-g.js +0 -159
  506. package/dist/src/cache-BZaVoKaA.js +0 -2
  507. package/dist/src/cache-CEYhFUsH.js +0 -741
  508. package/dist/src/cache-Cbw1zH6q.js +0 -782
  509. package/dist/src/cache-CdaZNb75.js +0 -754
  510. package/dist/src/cache-DpuIzPxh.cjs +0 -856
  511. package/dist/src/cerebras-Bpn6FPkJ.js +0 -97
  512. package/dist/src/cerebras-CqJ0BRCJ.cjs +0 -97
  513. package/dist/src/cerebras-D4ILa_TY.js +0 -97
  514. package/dist/src/cerebras-DR8uc7ee.js +0 -98
  515. package/dist/src/chat-B7PZfaYp.cjs +0 -987
  516. package/dist/src/chat-BVuSjdEb.js +0 -227
  517. package/dist/src/chat-BsaZRjXN.js +0 -76
  518. package/dist/src/chat-C5liqe3Y.js +0 -226
  519. package/dist/src/chat-C9hyHf5B.js +0 -124
  520. package/dist/src/chat-CFLalAck.js +0 -226
  521. package/dist/src/chat-CN8JGrHu.js +0 -76
  522. package/dist/src/chat-CaHBBpCb.js +0 -123
  523. package/dist/src/chat-CcbLSghx.js +0 -123
  524. package/dist/src/chat-CoSN6sr2.js +0 -934
  525. package/dist/src/chat-CsJRFX8a.cjs +0 -226
  526. package/dist/src/chat-DFoZLvO_.js +0 -934
  527. package/dist/src/chat-DiLQvL7r.js +0 -77
  528. package/dist/src/chat-F6qVSDk3.cjs +0 -123
  529. package/dist/src/chat-Oq4FaJgI.cjs +0 -76
  530. package/dist/src/chat-knMfQUKz.js +0 -935
  531. package/dist/src/claude-agent-sdk-CJkOLpnI.js +0 -999
  532. package/dist/src/claude-agent-sdk-Ckn76PRD.js +0 -999
  533. package/dist/src/claude-agent-sdk-DX0gTr11.cjs +0 -1005
  534. package/dist/src/claude-agent-sdk-LMeikxoR.js +0 -1000
  535. package/dist/src/client-BFf1r6Z8.js +0 -352
  536. package/dist/src/client-CdXyDdDi.js +0 -351
  537. package/dist/src/client-DV8XMu7i.js +0 -351
  538. package/dist/src/client-iEXtOBKW.cjs +0 -357
  539. package/dist/src/cloud-B02qcpjf.js +0 -2
  540. package/dist/src/cloud-BlHP-g1v.cjs +0 -666
  541. package/dist/src/cloud-C9BI4isF.js +0 -287
  542. package/dist/src/cloud-CTTLNdvj.js +0 -657
  543. package/dist/src/cloud-D5X5yQ_d.js +0 -599
  544. package/dist/src/cloud-QxPkpsHA.js +0 -599
  545. package/dist/src/cloudflare-ai-DRTRT1fc.js +0 -132
  546. package/dist/src/cloudflare-ai-DgaXapAV.cjs +0 -133
  547. package/dist/src/cloudflare-ai-DkuJXijS.js +0 -134
  548. package/dist/src/cloudflare-ai-wy9QCHku.js +0 -133
  549. package/dist/src/cloudflare-gateway-9cAN8g29.cjs +0 -276
  550. package/dist/src/cloudflare-gateway-BVFMD292.js +0 -277
  551. package/dist/src/cloudflare-gateway-BuUI4p6I.js +0 -276
  552. package/dist/src/cloudflare-gateway-TlYHizbW.js +0 -276
  553. package/dist/src/codex-app-server-BPz_feug.cjs +0 -2162
  554. package/dist/src/codex-app-server-C9noXM9C.js +0 -2155
  555. package/dist/src/codex-app-server-CEmD-Y5U.js +0 -2
  556. package/dist/src/codex-app-server-DZolc18r.js +0 -2156
  557. package/dist/src/codex-app-server-Dd0A37nO.js +0 -2155
  558. package/dist/src/codex-sdk-BbxjBvBk.cjs +0 -1588
  559. package/dist/src/codex-sdk-BpXeIs-_.js +0 -1557
  560. package/dist/src/codex-sdk-BtQp5X0f.js +0 -1552
  561. package/dist/src/codex-sdk-CH0v9Bk1.js +0 -2
  562. package/dist/src/codex-sdk-CgrN7JB8.js +0 -1557
  563. package/dist/src/codex-security-B5fENNUr.js +0 -406
  564. package/dist/src/codex-security-C6uuJx-y.cjs +0 -411
  565. package/dist/src/codex-security-CifWtZR_.js +0 -407
  566. package/dist/src/codex-security-Kg2bOEKy.js +0 -406
  567. package/dist/src/cometapi-BFpIDLIx.js +0 -55
  568. package/dist/src/cometapi-C6O2PIrN.js +0 -56
  569. package/dist/src/cometapi-D5Yupc6F.js +0 -53
  570. package/dist/src/cometapi-DzgIwJzJ.cjs +0 -55
  571. package/dist/src/compatible-0jhmVfOp.js +0 -25
  572. package/dist/src/compatible-DdtwWdJi.cjs +0 -24
  573. package/dist/src/compatible-Di4nR3sU.js +0 -24
  574. package/dist/src/compatible-iJKLWdnf.js +0 -24
  575. package/dist/src/completion-B0_hVUDG.js +0 -119
  576. package/dist/src/completion-BdI6v0-Q.cjs +0 -123
  577. package/dist/src/completion-CWcJscwv.js +0 -118
  578. package/dist/src/conversationScoring-99EOPJRa.js +0 -373
  579. package/dist/src/conversationScoring-BIq4J0Cq.js +0 -374
  580. package/dist/src/conversationScoring-DARyeATr.cjs +0 -398
  581. package/dist/src/conversationScoring-DS48t4Hb.js +0 -373
  582. package/dist/src/crescendo-CebvXIu4.js +0 -730
  583. package/dist/src/crescendo-CxrLS0oo.js +0 -732
  584. package/dist/src/crescendo-DZQXBSkj.js +0 -733
  585. package/dist/src/crescendo-wjEx68uD.cjs +0 -734
  586. package/dist/src/custom-BiQ-aUNw.cjs +0 -620
  587. package/dist/src/custom-ByyB5Z93.js +0 -619
  588. package/dist/src/custom-C5jOevNb.js +0 -617
  589. package/dist/src/custom-CCrsCz8o.js +0 -618
  590. package/dist/src/dataUrl-C9J7wz9H.js +0 -3133
  591. package/dist/src/dataUrl-CGsBT7UZ.cjs +0 -3187
  592. package/dist/src/dataUrl-CzKvvWNO.js +0 -2868
  593. package/dist/src/decisions-BTusXCUx.cjs +0 -514
  594. package/dist/src/decisions-BYtL9edD.js +0 -515
  595. package/dist/src/decisions-jYix_gCF.js +0 -515
  596. package/dist/src/decisions-nxxfHRAN.js +0 -516
  597. package/dist/src/docker-DDIv4zkg.js +0 -93
  598. package/dist/src/docker-DVLp_5OG.js +0 -94
  599. package/dist/src/docker-INm9w0SY.cjs +0 -94
  600. package/dist/src/docker-sGuoCul_.js +0 -95
  601. package/dist/src/embedding-CAhqLLrR.js +0 -82
  602. package/dist/src/embedding-D94GAsti.cjs +0 -86
  603. package/dist/src/embedding-zb4MAzQy.js +0 -81
  604. package/dist/src/envoy-BMPszwEa.cjs +0 -60
  605. package/dist/src/envoy-Bp-s39_8.js +0 -60
  606. package/dist/src/envoy-BswDt-Ou.js +0 -61
  607. package/dist/src/envoy-rVbYcV80.js +0 -60
  608. package/dist/src/eval-B1-XfrC7.js +0 -2
  609. package/dist/src/eval-pC4qCvLw.js +0 -1920
  610. package/dist/src/evalResult-CzjCb5bd.js +0 -1300
  611. package/dist/src/evaluator-CNq2K7J_.js +0 -10578
  612. package/dist/src/evaluator-LtfxdxEu.js +0 -2
  613. package/dist/src/evaluatorHelpers-C5J0NYpQ.js +0 -601
  614. package/dist/src/evaluatorHelpers-DcdCglCs.cjs +0 -622
  615. package/dist/src/evaluatorHelpers-Rvb88W6B.js +0 -600
  616. package/dist/src/fetch-5HtnNhHg.js +0 -1556
  617. package/dist/src/fetch-BCwjoIFd.js +0 -1559
  618. package/dist/src/fetch-BhfUnKen.js +0 -1280
  619. package/dist/src/fetch-C08w4vVl.js +0 -9
  620. package/dist/src/fetch-DBxy8Tlb.cjs +0 -14
  621. package/dist/src/fetch-DYte6oQX.cjs +0 -1853
  622. package/dist/src/fetch-ElpfcAVG.js +0 -10
  623. package/dist/src/fetch-lM1OIaSt.js +0 -2
  624. package/dist/src/functionCallbackUtils-BCAdWfHO.js +0 -246
  625. package/dist/src/functionCallbackUtils-BYq9qOhG.js +0 -245
  626. package/dist/src/functionCallbackUtils-ByWkmVud.cjs +0 -262
  627. package/dist/src/functionCallbackUtils-D_C_JaFd.js +0 -245
  628. package/dist/src/gemini-image-CAlwaJhZ.js +0 -471
  629. package/dist/src/gemini-image-DJoVoOnZ.cjs +0 -471
  630. package/dist/src/gemini-image-Waio-9Xx.js +0 -472
  631. package/dist/src/gemini-image-vbY6Ftbf.js +0 -471
  632. package/dist/src/goat-BWbtyY9c.js +0 -512
  633. package/dist/src/goat-CXzzeCOQ.cjs +0 -515
  634. package/dist/src/goat-CfgvzSgZ.js +0 -514
  635. package/dist/src/goat-DLeoIHBp.js +0 -515
  636. package/dist/src/goblin-CmfCfwqk.cjs +0 -22
  637. package/dist/src/goblin-CtcaORRH.js +0 -22
  638. package/dist/src/goblin-DF6DDhM-.js +0 -22
  639. package/dist/src/goblin-Nai0xxBV.js +0 -23
  640. package/dist/src/google-ClpkLtKL.cjs +0 -142
  641. package/dist/src/google-CrFgKu9k.js +0 -143
  642. package/dist/src/google-Dj_EIBqS.js +0 -142
  643. package/dist/src/google-e4-vARv6.js +0 -142
  644. package/dist/src/graders-BN1IIa71.js +0 -15470
  645. package/dist/src/graders-C5sCfSP5.js +0 -2
  646. package/dist/src/hydra-B7RfXVBK.js +0 -2
  647. package/dist/src/hydra-C1cFN-Jg.js +0 -613
  648. package/dist/src/hydra-CK6Uc1ia.js +0 -612
  649. package/dist/src/hydra-Dg65rAP_.js +0 -610
  650. package/dist/src/hydra-Fqx8l_Xu.cjs +0 -612
  651. package/dist/src/image-BdlUDAtp.js +0 -163
  652. package/dist/src/image-C-KwEhwt.cjs +0 -163
  653. package/dist/src/image-C76fp6NK.cjs +0 -209
  654. package/dist/src/image-D75ehv3D.js +0 -482
  655. package/dist/src/image-DKtc5v5W.js +0 -209
  656. package/dist/src/image-DT_xOkJY.js +0 -163
  657. package/dist/src/image-DVpdllEE.js +0 -209
  658. package/dist/src/image-DXZ8AzMf.js +0 -481
  659. package/dist/src/image-DZl_1mvy.js +0 -164
  660. package/dist/src/image-DcTD7Ak0.cjs +0 -504
  661. package/dist/src/image-ndxEvBKB.js +0 -210
  662. package/dist/src/indirectWebPwn-70WA5x_q.js +0 -435
  663. package/dist/src/indirectWebPwn-BRVyd3qV.cjs +0 -463
  664. package/dist/src/indirectWebPwn-BsJVsu0q.js +0 -285
  665. package/dist/src/indirectWebPwn-Cw6yJu0i.js +0 -285
  666. package/dist/src/indirectWebPwn-D-PhJzo4.js +0 -286
  667. package/dist/src/indirectWebPwn-DRPHt2I8.js +0 -434
  668. package/dist/src/indirectWebPwn-DXtfFhd9.cjs +0 -285
  669. package/dist/src/indirectWebPwn-DvpNouzc.js +0 -434
  670. package/dist/src/interactions-5ixfW7Cl.js +0 -850
  671. package/dist/src/interactions-BOUzfmg1.cjs +0 -850
  672. package/dist/src/interactions-CSSXcGNc.js +0 -851
  673. package/dist/src/interactions-WB_sgkN0.js +0 -850
  674. package/dist/src/iterative-BShRNqjC.cjs +0 -549
  675. package/dist/src/iterative-BcW_ELtB.js +0 -548
  676. package/dist/src/iterative-BpHbHz8B.js +0 -547
  677. package/dist/src/iterative-YcchP12d.js +0 -545
  678. package/dist/src/iterativeImage-BMFE5Hl7.cjs +0 -419
  679. package/dist/src/iterativeImage-CkSaYLMY.js +0 -417
  680. package/dist/src/iterativeImage-DAEUlQX_.js +0 -418
  681. package/dist/src/iterativeImage-DeUSkEnj.js +0 -417
  682. package/dist/src/iterativeMeta-DbdaKdEO.cjs +0 -439
  683. package/dist/src/iterativeMeta-DcF9JWEK.js +0 -437
  684. package/dist/src/iterativeMeta-DkfPqWIC.js +0 -439
  685. package/dist/src/iterativeMeta-DkrpnVSs.js +0 -440
  686. package/dist/src/iterativeTree-CEMY1FhE.cjs +0 -879
  687. package/dist/src/iterativeTree-Cv5W4tX9.js +0 -877
  688. package/dist/src/iterativeTree-DGvomd3M.js +0 -876
  689. package/dist/src/iterativeTree-KbtC2Mkz.js +0 -878
  690. package/dist/src/knowledgeBase-AYRXn4wO.js +0 -163
  691. package/dist/src/knowledgeBase-BNqQfx01.js +0 -163
  692. package/dist/src/knowledgeBase-C0IaCCVs.js +0 -164
  693. package/dist/src/knowledgeBase-C2uj6wK4.cjs +0 -163
  694. package/dist/src/litellm-CN1ScAwZ.js +0 -147
  695. package/dist/src/litellm-CTjwiKSa.js +0 -146
  696. package/dist/src/litellm-Cd4Nj5ue.js +0 -145
  697. package/dist/src/litellm-DMqLpEBg.cjs +0 -146
  698. package/dist/src/live-Bt50-InO.cjs +0 -891
  699. package/dist/src/live-Bu2ujadG.js +0 -2
  700. package/dist/src/live-C3M52i3p.js +0 -891
  701. package/dist/src/live-CRfHMO3B.js +0 -892
  702. package/dist/src/live-iCIpO14m.js +0 -891
  703. package/dist/src/luma-ray-B8eHC4c8.cjs +0 -309
  704. package/dist/src/luma-ray-BIvkPw0s.js +0 -309
  705. package/dist/src/luma-ray-ChsiBxMA.js +0 -309
  706. package/dist/src/luma-ray-DAvKrInz.js +0 -310
  707. package/dist/src/mantleChat-5YeEXAZI.js +0 -154
  708. package/dist/src/mantleChat-D--mW3hl.js +0 -154
  709. package/dist/src/mantleChat-DHP3siNg.cjs +0 -154
  710. package/dist/src/mantleChat-wBfAX46o.js +0 -155
  711. package/dist/src/mcp-49jlEcTQ.js +0 -85
  712. package/dist/src/mcp-__PIz81I.js +0 -84
  713. package/dist/src/memoryPoisoning-Chxge74M.js +0 -111
  714. package/dist/src/memoryPoisoning-QH6NCUVE.js +0 -112
  715. package/dist/src/memoryPoisoning-tCxZt8Nz.js +0 -111
  716. package/dist/src/memoryPoisoning-ymrRItRR.cjs +0 -111
  717. package/dist/src/messages-BE_eZ7NA.js +0 -1127
  718. package/dist/src/messages-Bo638ShI.js +0 -1127
  719. package/dist/src/messages-BzR0-NQ1.js +0 -1128
  720. package/dist/src/messages-Cbg5Pfd0.cjs +0 -1161
  721. package/dist/src/mischievousUser-BtED2Z5Z.cjs +0 -51
  722. package/dist/src/mischievousUser-KqSOjrDJ.js +0 -51
  723. package/dist/src/mischievousUser-YMD41YNZ.js +0 -51
  724. package/dist/src/mischievousUser-zBxlNdCu.js +0 -52
  725. package/dist/src/modelslab-B8gZxtfE.js +0 -171
  726. package/dist/src/modelslab-C7bmVpTB.js +0 -170
  727. package/dist/src/modelslab-CCeQCTZg.js +0 -170
  728. package/dist/src/modelslab-CvBJGv7y.cjs +0 -170
  729. package/dist/src/nova-reel-BOEWsEKA.cjs +0 -272
  730. package/dist/src/nova-reel-BtyBXq5M.js +0 -273
  731. package/dist/src/nova-reel-C1eF3-EE.js +0 -272
  732. package/dist/src/nova-reel-YhgrxEKT.js +0 -272
  733. package/dist/src/nova-sonic-BaERP20w.js +0 -374
  734. package/dist/src/nova-sonic-CxgM3O-P.cjs +0 -374
  735. package/dist/src/nova-sonic-DJS22fC3.js +0 -375
  736. package/dist/src/nova-sonic-DwvwHyRX.js +0 -374
  737. package/dist/src/novita-D1l2tG0O.js +0 -116
  738. package/dist/src/novita-D84VM3v0.cjs +0 -115
  739. package/dist/src/novita-DGInvwfR.js +0 -115
  740. package/dist/src/novita-vXHkXhTg.js +0 -114
  741. package/dist/src/nscale-CU0Ldr00.js +0 -209
  742. package/dist/src/nscale-ClfKlQeM.cjs +0 -209
  743. package/dist/src/nscale-DxaVnF0x.js +0 -210
  744. package/dist/src/nscale-_poVxIrO.js +0 -207
  745. package/dist/src/openaiResponses-CJGsneNj.js +0 -317
  746. package/dist/src/openaiResponses-CKSl5Sdg.js +0 -319
  747. package/dist/src/openaiResponses-DC8rzFUc.js +0 -318
  748. package/dist/src/openaiResponses-rMHIA3dV.cjs +0 -318
  749. package/dist/src/openclaw-CCbvsNFW.cjs +0 -1344
  750. package/dist/src/openclaw-CZw1lCDZ.js +0 -1336
  751. package/dist/src/openclaw-ChFLgC-a.js +0 -1338
  752. package/dist/src/openclaw-DrPMoRrH.js +0 -1337
  753. package/dist/src/opencode-sdk-2EfIDhFp.cjs +0 -1018
  754. package/dist/src/opencode-sdk-CHw3F845.js +0 -1013
  755. package/dist/src/opencode-sdk-D0EGGxvy.js +0 -1012
  756. package/dist/src/opencode-sdk-jSS7NI2Q.js +0 -1012
  757. package/dist/src/openinterpreter-CY622xHC.js +0 -431
  758. package/dist/src/openinterpreter-DATyhuhP.js +0 -432
  759. package/dist/src/openinterpreter-DDUMyIf1.js +0 -431
  760. package/dist/src/openinterpreter-s5Tz6Lid.cjs +0 -435
  761. package/dist/src/pricing-C498twd2.js +0 -976
  762. package/dist/src/pricing-DBd_bMIh.cjs +0 -999
  763. package/dist/src/pricing-ISrMCskv.js +0 -976
  764. package/dist/src/promptfoo-6p0WG2ih.js +0 -286
  765. package/dist/src/promptfoo-BQRfgNs_.js +0 -285
  766. package/dist/src/promptfoo-Bqo88z20.cjs +0 -341
  767. package/dist/src/promptfoo-Cq5AVI3I.js +0 -286
  768. package/dist/src/providers-ATbeMX5E.cjs +0 -24180
  769. package/dist/src/providers-B7F1FiNI.js +0 -2
  770. package/dist/src/providers-DazIw8mI.js +0 -24039
  771. package/dist/src/providers-QvGlNAD0.js +0 -24437
  772. package/dist/src/quiverai-BPlNcLkV.cjs +0 -325
  773. package/dist/src/quiverai-By99-YmJ.js +0 -325
  774. package/dist/src/quiverai-CmmByDqo.js +0 -325
  775. package/dist/src/quiverai-HZkoJJqw.js +0 -326
  776. package/dist/src/registry-BLTnTfjT.cjs +0 -131
  777. package/dist/src/registry-BMC-COHT.js +0 -132
  778. package/dist/src/registry-C8UZtmBp.js +0 -131
  779. package/dist/src/registry-CfwEUYXG.js +0 -131
  780. package/dist/src/remoteGeneration-Bgg6kC5V.js +0 -370
  781. package/dist/src/remoteGeneration-CKJFE960.cjs +0 -482
  782. package/dist/src/remoteGeneration-DaxwJDKv.js +0 -370
  783. package/dist/src/remoteGeneration-vHMGVKr1.js +0 -371
  784. package/dist/src/responses-BvnyIHrq.js +0 -1099
  785. package/dist/src/responses-CERAgvf-.js +0 -1098
  786. package/dist/src/responses-CwgjeuOg.cjs +0 -1109
  787. package/dist/src/runtimeTransform-3RF9Avyg.cjs +0 -161
  788. package/dist/src/runtimeTransform-C51Z5j4H.js +0 -156
  789. package/dist/src/runtimeTransform-CKE_Iyv8.js +0 -157
  790. package/dist/src/runtimeTransform-Cs11xJpj.js +0 -156
  791. package/dist/src/sagemaker-BJ4dOCxE.js +0 -713
  792. package/dist/src/sagemaker-Bt3JUAWq.js +0 -714
  793. package/dist/src/sagemaker-QVKyLgLF.cjs +0 -716
  794. package/dist/src/sagemaker-l3IB8iTs.js +0 -713
  795. package/dist/src/scanner-DGjIiTZ1.js +0 -1971
  796. package/dist/src/server-BNaLZH6u.js +0 -63
  797. package/dist/src/server-CBMuQul3.js +0 -189
  798. package/dist/src/server-CMKKIzKv.cjs +0 -74
  799. package/dist/src/server-CN2IS9Cs.js +0 -155
  800. package/dist/src/server-ua4cqbjC.js +0 -2
  801. package/dist/src/session-CQIjq_HZ.cjs +0 -69
  802. package/dist/src/session-FTlg8sEu.js +0 -62
  803. package/dist/src/session-GBQXtPWp.js +0 -63
  804. package/dist/src/session-_0-rTdwY.js +0 -62
  805. package/dist/src/shared-BtuO-OAM.js +0 -1927
  806. package/dist/src/shared-Ci78wTZX.js +0 -1928
  807. package/dist/src/shared-Dd3rimdM.js +0 -1929
  808. package/dist/src/shared-KAjFxRre.cjs +0 -2185
  809. package/dist/src/simulatedUser--OjW6xCx.js +0 -247
  810. package/dist/src/simulatedUser-D0-slRye.cjs +0 -252
  811. package/dist/src/simulatedUser-D1Kh_cwA.js +0 -248
  812. package/dist/src/slack-BX0FUevO.js +0 -144
  813. package/dist/src/slack-CcwXFiJE.cjs +0 -144
  814. package/dist/src/slack-CnfqKfXp.js +0 -145
  815. package/dist/src/strategies-2ntcK4tN.js +0 -2248
  816. package/dist/src/strategies-DZIW7Zcs.js +0 -2385
  817. package/dist/src/strategies-YRDF2j-N.cjs +0 -2420
  818. package/dist/src/telemetry-CL8CVA4p.js +0 -205
  819. package/dist/src/telemetry-Cix90qqz.js +0 -201
  820. package/dist/src/telemetry-CkmlqTjV.js +0 -205
  821. package/dist/src/telemetry-DQH7l5bb.js +0 -2
  822. package/dist/src/telemetry-DUCXc1-r.cjs +0 -216
  823. package/dist/src/togetherai-3yUt5Ck7.js +0 -49
  824. package/dist/src/togetherai-BJUByLwt.cjs +0 -49
  825. package/dist/src/togetherai-Bh6KZkmd.js +0 -50
  826. package/dist/src/togetherai-DDl9yk3b.js +0 -48
  827. package/dist/src/traceContext-BiJVppjT.cjs +0 -1032
  828. package/dist/src/traceContext-CKKluULP.js +0 -1016
  829. package/dist/src/traceContext-D3Sk8fO-.js +0 -1015
  830. package/dist/src/transcription-BoVQKIVz.js +0 -175
  831. package/dist/src/transcription-Bs5u8780.js +0 -175
  832. package/dist/src/transcription-Dl654d1p.cjs +0 -178
  833. package/dist/src/transcription-VEvhM1Fu.js +0 -176
  834. package/dist/src/transform-BAbkGpvl.js +0 -125
  835. package/dist/src/transform-C_j4hUH8.js +0 -126
  836. package/dist/src/transform-Da86hs4M.cjs +0 -154
  837. package/dist/src/transform-_i1raQNo.js +0 -125
  838. package/dist/src/typesafe-CKXBeh82.cjs +0 -253
  839. package/dist/src/typesafe-D3VaGeNm.js +0 -253
  840. package/dist/src/typesafe-DYM-SFNH.js +0 -253
  841. package/dist/src/typesafe-LXmSbw8F.js +0 -254
  842. package/dist/src/util-41rb0XHX.js +0 -743
  843. package/dist/src/util-B0WlHYFM.js +0 -2049
  844. package/dist/src/util-BD1R_PsR.js +0 -1770
  845. package/dist/src/util-BLbM_ItC.js +0 -395
  846. package/dist/src/util-C72P0iIa.js +0 -352
  847. package/dist/src/util-C7MpGlJ6.cjs +0 -2305
  848. package/dist/src/util-CCtqagKc.js +0 -286
  849. package/dist/src/util-CM2Ec_uY.js +0 -2051
  850. package/dist/src/util-CSSAWO8v.js +0 -351
  851. package/dist/src/util-CkQc-fx3.cjs +0 -934
  852. package/dist/src/util-DcOlFTFa.cjs +0 -478
  853. package/dist/src/util-DluGTGVB.js +0 -395
  854. package/dist/src/util-PfQ60chz.js +0 -743
  855. package/dist/src/util-f14-CPij.js +0 -396
  856. package/dist/src/util-l9pXX3Eu.cjs +0 -357
  857. package/dist/src/util-o_BnlYqS.js +0 -2050
  858. package/dist/src/vertex-B_-gQgzc.js +0 -2
  859. package/dist/src/vertex-CU4gqoYa.js +0 -854
  860. package/dist/src/vertex-DZ42UHb3.js +0 -848
  861. package/dist/src/vertex-DsYQJA0T.cjs +0 -871
  862. package/dist/src/vertexLive-BvIaHKGB.js +0 -55
  863. package/dist/src/vertexLive-CTULqNx7.js +0 -56
  864. package/dist/src/vertexLive-DjJ_YQBe.cjs +0 -55
  865. package/dist/src/vertexLive-STUGcteB.js +0 -55
  866. package/dist/src/video-CAQGmtEV.js +0 -703
  867. package/dist/src/video-_FSTWlwX.js +0 -702
  868. package/dist/src/video-aBPJPWdt.js +0 -702
  869. package/dist/src/video-gDjkWv5m.cjs +0 -706
@@ -1,2433 +0,0 @@
1
- import { G as getEnvInt, W as getEnvFloat, o as logger, q as getEnvString } from "./logger-CNHLbG5Y.js";
2
- import "./dataUrl-CzKvvWNO.js";
3
- import { d as openaiToolsToBedrock, f as parseChatPrompt, o as isOpenAIToolArray, s as isOpenAIToolChoice, u as openaiToolChoiceToBedrock } from "./shared-BnN4RWgk.js";
4
- import { c as maybeLoadToolsFromExternalFile } from "./file-BPc_9IQ5.js";
5
- import { t as providerRegistry } from "./providerRegistry-BfOvxmGI.js";
6
- import { h as withGenAISpan } from "./genaiTracer-QTyx3Q-T.js";
7
- import { o as getCache, u as isCacheEnabled } from "./cache-Cbw1zH6q.js";
8
- import { c as normalizeMcpToolContent, i as getMcpErrorMessage, o as isMcpErrorResult } from "./util-CCtqagKc.js";
9
- import { d as createEmptyTokenUsage } from "./tokenUsageUtils-C51DmahQ.js";
10
- import { n as executeProviderFunctionCallback, r as loadProviderCallbackFromFileUrl } from "./functionCallbackUtils-BYq9qOhG.js";
11
- import { t as MCPClient } from "./client-CdXyDdDi.js";
12
- import { A as parseMessages, C as isForcedToolChoiceUnsupportedClaudeModel, M as resolveClaudeSamplingParams, O as normalizeClaudeThinkingConfig, T as isThinkingOnByDefaultClaudeModel, f as getTokenUsage, k as outputFromMessage, l as getClaudeModelWarningName, p as isAlwaysOnAdaptiveThinkingClaudeModel, s as clampMaxTokensForThinkingBudget, w as isSamplingParamsDeprecatedClaudeModel, x as isClaudeThinkingEnabled } from "./util-41rb0XHX.js";
13
- import { c as isRejectedPrefixedGrokId, l as isRejectedPrefixedMythosId, n as isBedrockAnthropicMessagesModel, t as getBedrockTextRoute, u as requiresBedrockAnthropicMessagesModel } from "./routing-JymeTqiF.js";
14
- import { t as telemetry } from "./telemetry-CkmlqTjV.js";
15
- import { c as novaParseMessages, i as INFERENCE_PROFILE_PREFIX, n as createBedrockCacheKeyHash, s as novaOutputFromMessage, t as AwsBedrockGenericProvider } from "./base-CjGwZNOQ.js";
16
- import { i as isBedrockGrok46Profile, n as calculateBedrockInvokeModelCost, t as calculateBedrockCost } from "./pricing-C498twd2.js";
17
- import dedent from "dedent";
18
- import Anthropic from "@anthropic-ai/sdk";
19
- //#region src/providers/bedrock/index.ts
20
- const coerceStrToNum = (value) => value === void 0 ? void 0 : typeof value === "string" ? Number(value) : value;
21
- function getNovaTokenUsage(responseJson) {
22
- const usage = responseJson?.usage;
23
- if (!usage) return missingBedrockTokenUsage();
24
- return {
25
- prompt: coerceStrToNum(usage.inputTokens),
26
- completion: coerceStrToNum(usage.outputTokens),
27
- total: coerceStrToNum(usage.totalTokens),
28
- numRequests: 1
29
- };
30
- }
31
- function getCohereTokenUsage(responseJson) {
32
- if (responseJson?.meta?.billed_units) {
33
- const inputTokens = coerceStrToNum(responseJson.meta.billed_units.input_tokens);
34
- const outputTokens = coerceStrToNum(responseJson.meta.billed_units.output_tokens);
35
- return {
36
- prompt: inputTokens,
37
- completion: outputTokens,
38
- total: (inputTokens ?? 0) + (outputTokens ?? 0),
39
- numRequests: 1
40
- };
41
- }
42
- return missingBedrockTokenUsage();
43
- }
44
- function missingBedrockTokenUsage() {
45
- return {
46
- prompt: void 0,
47
- completion: void 0,
48
- total: void 0,
49
- numRequests: 1
50
- };
51
- }
52
- function parseValue(value, defaultValue) {
53
- if (typeof defaultValue === "number") {
54
- if (typeof value === "string") return Number.isNaN(Number.parseFloat(value)) ? defaultValue : Number.parseFloat(value);
55
- return value;
56
- }
57
- return value;
58
- }
59
- function addConfigParam(params, key, configValue, envValue, defaultValue) {
60
- if (configValue !== void 0 || envValue !== void 0 || defaultValue !== void 0) params[key] = configValue ?? (envValue === void 0 ? defaultValue : parseValue(envValue, defaultValue));
61
- }
62
- function getOpenAiCompatibleTokenUsage(responseJson, _promptText) {
63
- const usage = responseJson?.usage;
64
- return {
65
- prompt: coerceStrToNum(usage?.prompt_tokens),
66
- completion: coerceStrToNum(usage?.completion_tokens),
67
- total: coerceStrToNum(usage?.total_tokens),
68
- numRequests: 1
69
- };
70
- }
71
- const BEDROCK_MISTRAL_CHAT_MODEL = {
72
- params: async (config, prompt, stop, _modelName) => {
73
- const params = { messages: parseChatPrompt(prompt, [{
74
- role: "user",
75
- content: prompt
76
- }]) };
77
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("MISTRAL_MAX_TOKENS"), 1024);
78
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("MISTRAL_TEMPERATURE"), 0);
79
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("MISTRAL_TOP_P"), 1);
80
- if (stop && stop.length > 0) addConfigParam(params, "stop", stop);
81
- return params;
82
- },
83
- output: (_config, responseJson) => {
84
- if (responseJson?.choices && Array.isArray(responseJson.choices)) return responseJson.choices[0]?.message?.content;
85
- },
86
- tokenUsage: (responseJson, _promptText) => {
87
- if (responseJson?.prompt_tokens !== void 0 && responseJson?.completion_tokens !== void 0) {
88
- const promptTokens = coerceStrToNum(responseJson.prompt_tokens);
89
- const completionTokens = coerceStrToNum(responseJson.completion_tokens);
90
- return {
91
- prompt: promptTokens,
92
- completion: completionTokens,
93
- total: (promptTokens ?? 0) + (completionTokens ?? 0),
94
- numRequests: 1
95
- };
96
- }
97
- if (responseJson?.usage?.prompt_tokens !== void 0 && responseJson?.usage?.completion_tokens !== void 0) {
98
- const promptTokens = coerceStrToNum(responseJson.usage.prompt_tokens);
99
- const completionTokens = coerceStrToNum(responseJson.usage.completion_tokens);
100
- return {
101
- prompt: promptTokens,
102
- completion: completionTokens,
103
- total: coerceStrToNum(responseJson.usage.total_tokens) ?? (promptTokens !== void 0 && completionTokens !== void 0 ? promptTokens + completionTokens : void 0),
104
- numRequests: 1
105
- };
106
- }
107
- return missingBedrockTokenUsage();
108
- }
109
- };
110
- const BEDROCK_DEEPSEEK_CHAT_MODEL = {
111
- params: async (config, prompt, stop, _modelName) => {
112
- const params = { messages: parseChatPrompt(prompt, [{
113
- role: "user",
114
- content: prompt
115
- }]) };
116
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
117
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
118
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
119
- if (stop && stop.length > 0) addConfigParam(params, "stop", stop);
120
- return params;
121
- },
122
- output: (_config, responseJson) => {
123
- if (responseJson.error) throw new Error(`DeepSeek API error: ${responseJson.error}`);
124
- return responseJson.choices?.[0]?.message?.content;
125
- },
126
- tokenUsage: getOpenAiCompatibleTokenUsage
127
- };
128
- const LlamaVersion = {
129
- V2: 2,
130
- V3: 3,
131
- V3_1: 3.1,
132
- V3_2: 3.2,
133
- V3_3: 3.3,
134
- V4: 4
135
- };
136
- /**
137
- * Extracts base64 image data from an image block.
138
- * Handles multiple formats: data URL, source.bytes, source.data, image_url.url
139
- */
140
- function extractImageData(block) {
141
- const imageUrl = block.image_url?.url || block.type === "image_url" && block.url;
142
- if (typeof imageUrl === "string" && imageUrl.startsWith("data:")) {
143
- const matches = imageUrl.match(/^data:image\/[^;]+;base64,(.+)$/);
144
- if (matches) return matches[1];
145
- }
146
- const imageData = block.image || block;
147
- if (imageData.source?.bytes) {
148
- const rawBytes = imageData.source.bytes;
149
- if (typeof rawBytes === "string") {
150
- if (rawBytes.startsWith("data:")) {
151
- const matches = rawBytes.match(/^data:image\/[^;]+;base64,(.+)$/);
152
- if (matches) return matches[1];
153
- }
154
- return rawBytes;
155
- } else if (Buffer.isBuffer(rawBytes)) return rawBytes.toString("base64");
156
- }
157
- if (imageData.source?.data) {
158
- const data = imageData.source.data;
159
- if (data.startsWith("data:")) {
160
- const matches = data.match(/^data:image\/[^;]+;base64,(.+)$/);
161
- if (matches) return matches[1];
162
- }
163
- return data;
164
- }
165
- return null;
166
- }
167
- /**
168
- * Extracts text and images from message content for Llama 3.2 Vision.
169
- * Returns text with <|image|> tokens at image positions, plus base64 images array.
170
- *
171
- * @param content - The message content (string or array of content blocks)
172
- * @returns ExtractedContent with text (including image tokens) and images array
173
- */
174
- function extractTextAndImages(content) {
175
- if (typeof content === "string") return {
176
- text: content.trim(),
177
- images: []
178
- };
179
- if (Array.isArray(content)) {
180
- const parts = [];
181
- const images = [];
182
- for (const block of content) if (typeof block === "string") parts.push(block);
183
- else if (block.type === "text" && block.text) parts.push(block.text);
184
- else if (block.text && !block.type) parts.push(block.text);
185
- else if (block.type === "image" || block.type === "image_url" || block.image || block.image_url) {
186
- const imageData = extractImageData(block);
187
- if (imageData) {
188
- images.push(imageData);
189
- parts.push("<|image|>");
190
- }
191
- }
192
- return {
193
- text: parts.join("").trim(),
194
- images
195
- };
196
- }
197
- return {
198
- text: String(content).trim(),
199
- images: []
200
- };
201
- }
202
- /**
203
- * Extracts text content from a message, handling both string and array formats.
204
- * Throws an error if the content contains non-text items (images, etc.) since
205
- * the legacy InvokeModel API doesn't support multimodal content.
206
- *
207
- * @param content - The message content (string or array of content blocks)
208
- * @param modelName - The model name for error messaging
209
- * @returns The extracted text content as a string
210
- * @throws Error if multimodal content is detected
211
- */
212
- function extractTextContent(content, modelName) {
213
- if (typeof content === "string") return content.trim();
214
- if (Array.isArray(content)) {
215
- const textParts = [];
216
- let hasNonTextContent = false;
217
- for (const block of content) if (typeof block === "string") textParts.push(block);
218
- else if (block.type === "text" && block.text) textParts.push(block.text);
219
- else if (block.text && !block.type) textParts.push(block.text);
220
- else if (block.type === "image" || block.type === "image_url" || block.image || block.image_url) hasNonTextContent = true;
221
- if (hasNonTextContent) {
222
- const modelInfo = modelName ? ` (${modelName})` : "";
223
- throw new Error(`Multimodal content (images) detected but the legacy Bedrock Llama provider${modelInfo} does not support images. Please use the Converse API provider instead:\n\n Change: bedrock:${modelName || "<model-id>"}\n To: bedrock:converse:${modelName || "<model-id>"}\n\nThe Converse API supports multimodal content for vision-capable models like Llama 3.2 11B/90B.`);
224
- }
225
- return textParts.join(" ").trim();
226
- }
227
- return String(content).trim();
228
- }
229
- const formatPromptLlama2Chat = (messages, modelName) => {
230
- if (messages.length === 0) return "";
231
- let formattedPrompt = "<s>";
232
- let systemMessageIncluded = false;
233
- for (let i = 0; i < messages.length; i++) {
234
- const message = messages[i];
235
- const textContent = extractTextContent(message.content, modelName);
236
- switch (message.role) {
237
- case "system":
238
- if (!systemMessageIncluded) {
239
- formattedPrompt += `[INST] <<SYS>>\n${textContent}\n<</SYS>>\n\n`;
240
- systemMessageIncluded = true;
241
- }
242
- break;
243
- case "user":
244
- if (i === 0 && !systemMessageIncluded) formattedPrompt += `[INST] ${textContent} [/INST]`;
245
- else if (i === 0 && systemMessageIncluded) formattedPrompt += `${textContent} [/INST]`;
246
- else if (i > 0 && messages[i - 1].role === "assistant") formattedPrompt += `<s>[INST] ${textContent} [/INST]`;
247
- else formattedPrompt += `${textContent} [/INST]`;
248
- break;
249
- case "assistant":
250
- formattedPrompt += ` ${textContent} </s>`;
251
- break;
252
- default: throw new Error(`Unexpected role: ${message.role}`);
253
- }
254
- }
255
- return formattedPrompt;
256
- };
257
- const formatPromptLlama3Instruct = (messages, modelName) => {
258
- let formattedPrompt = "<|begin_of_text|>";
259
- for (const message of messages) {
260
- const textContent = extractTextContent(message.content, modelName);
261
- formattedPrompt += dedent`
262
- <|start_header_id|>${message.role}<|end_header_id|>
263
-
264
- ${textContent}<|eot_id|>`;
265
- }
266
- formattedPrompt += "<|start_header_id|>assistant<|end_header_id|>";
267
- return formattedPrompt;
268
- };
269
- /**
270
- * Formats a Llama 3.2 Vision prompt with images.
271
- * Extracts images from messages and inserts <|image|> tokens at appropriate positions.
272
- *
273
- * @param messages - Array of chat messages
274
- * @returns Object containing the formatted prompt and array of base64 images
275
- */
276
- const formatPromptLlama32Vision = (messages) => {
277
- let formattedPrompt = "<|begin_of_text|>";
278
- const allImages = [];
279
- for (const message of messages) {
280
- const { text, images } = extractTextAndImages(message.content);
281
- allImages.push(...images);
282
- formattedPrompt += dedent`
283
- <|start_header_id|>${message.role}<|end_header_id|>
284
-
285
- ${text}<|eot_id|>`;
286
- }
287
- formattedPrompt += "<|start_header_id|>assistant<|end_header_id|>";
288
- return {
289
- prompt: formattedPrompt,
290
- images: allImages
291
- };
292
- };
293
- const formatPromptLlama4 = (messages, modelName) => {
294
- let formattedPrompt = "<|begin_of_text|>";
295
- for (const message of messages) {
296
- const textContent = extractTextContent(message.content, modelName);
297
- formattedPrompt += dedent`<|header_start|>${message.role}<|header_end|>
298
-
299
- ${textContent}<|eot|>`;
300
- }
301
- formattedPrompt += "<|header_start|>assistant<|header_end|>";
302
- return formattedPrompt;
303
- };
304
- const getLlamaModelHandler = (version) => {
305
- if (![
306
- LlamaVersion.V2,
307
- LlamaVersion.V3,
308
- LlamaVersion.V3_1,
309
- LlamaVersion.V3_2,
310
- LlamaVersion.V3_3,
311
- LlamaVersion.V4
312
- ].includes(version)) throw new Error(`Unsupported LLAMA version: ${version}`);
313
- return {
314
- params: async (config, prompt, _stop, modelName) => {
315
- const messages = parseChatPrompt(prompt, [{
316
- role: "user",
317
- content: prompt
318
- }]);
319
- let finalPrompt;
320
- let images = [];
321
- switch (version) {
322
- case LlamaVersion.V2:
323
- finalPrompt = formatPromptLlama2Chat(messages, modelName);
324
- break;
325
- case LlamaVersion.V3:
326
- case LlamaVersion.V3_1:
327
- case LlamaVersion.V3_3:
328
- finalPrompt = formatPromptLlama3Instruct(messages, modelName);
329
- break;
330
- case LlamaVersion.V3_2:
331
- if (modelName && (/11b/i.test(modelName) || /90b/i.test(modelName))) {
332
- const result = formatPromptLlama32Vision(messages);
333
- finalPrompt = result.prompt;
334
- images = result.images;
335
- } else finalPrompt = formatPromptLlama3Instruct(messages, modelName);
336
- break;
337
- case LlamaVersion.V4:
338
- finalPrompt = formatPromptLlama4(messages, modelName);
339
- break;
340
- default: throw new Error(`Unsupported LLAMA version: ${version}`);
341
- }
342
- const params = { prompt: finalPrompt };
343
- if (images.length > 0) params.images = images;
344
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
345
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
346
- addConfigParam(params, "max_gen_len", config?.max_gen_len, getEnvInt("AWS_BEDROCK_MAX_GEN_LEN"), 1024);
347
- return params;
348
- },
349
- output: (_config, responseJson) => responseJson?.generation,
350
- tokenUsage: (responseJson, _promptText) => {
351
- if (responseJson?.usage) return {
352
- prompt: coerceStrToNum(responseJson.usage.prompt_tokens),
353
- completion: coerceStrToNum(responseJson.usage.completion_tokens),
354
- total: coerceStrToNum(responseJson.usage.total_tokens),
355
- numRequests: 1
356
- };
357
- const promptTokens = responseJson?.prompt_token_count;
358
- const completionTokens = responseJson?.generation_token_count;
359
- if (promptTokens !== void 0 && completionTokens !== void 0) {
360
- const promptTokensNum = coerceStrToNum(promptTokens);
361
- const completionTokensNum = coerceStrToNum(completionTokens);
362
- return {
363
- prompt: promptTokensNum,
364
- completion: completionTokensNum,
365
- total: (promptTokensNum ?? 0) + (completionTokensNum ?? 0),
366
- numRequests: 1
367
- };
368
- }
369
- return missingBedrockTokenUsage();
370
- }
371
- };
372
- };
373
- const BEDROCK_MODEL = {
374
- AI21: {
375
- params: async (config, prompt, _stop, _modelName) => {
376
- const params = { messages: parseChatPrompt(prompt, [{
377
- role: "user",
378
- content: prompt
379
- }]) };
380
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
381
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
382
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
383
- addConfigParam(params, "stop", config?.stop, getEnvString("AWS_BEDROCK_STOP"));
384
- addConfigParam(params, "frequency_penalty", config?.frequency_penalty, getEnvFloat("AWS_BEDROCK_FREQUENCY_PENALTY"));
385
- addConfigParam(params, "presence_penalty", config?.presence_penalty, getEnvFloat("AWS_BEDROCK_PRESENCE_PENALTY"));
386
- return params;
387
- },
388
- output: (_config, responseJson) => {
389
- if (responseJson.error) throw new Error(`AI21 API error: ${responseJson.error}`);
390
- return responseJson.choices?.[0]?.message?.content;
391
- },
392
- tokenUsage: getOpenAiCompatibleTokenUsage
393
- },
394
- AMAZON_NOVA: {
395
- params: async (config, prompt, _stop, _modelName) => {
396
- let messages;
397
- let systemPrompt;
398
- try {
399
- const parsed = JSON.parse(prompt);
400
- if (Array.isArray(parsed)) {
401
- messages = parsed.map((msg) => ({
402
- role: msg.role,
403
- content: Array.isArray(msg.content) ? msg.content : [{ text: msg.content }]
404
- })).filter((msg) => msg.role !== "system");
405
- const systemMessage = parsed.find((msg) => msg.role === "system");
406
- if (systemMessage) systemPrompt = [{ text: systemMessage.content }];
407
- } else {
408
- const { system, extractedMessages } = novaParseMessages(prompt);
409
- messages = extractedMessages;
410
- if (system) systemPrompt = [{ text: system }];
411
- }
412
- } catch {
413
- const { system, extractedMessages } = novaParseMessages(prompt);
414
- messages = extractedMessages;
415
- if (system) systemPrompt = [{ text: system }];
416
- }
417
- const params = { messages };
418
- if (systemPrompt) addConfigParam(params, "system", systemPrompt, void 0, void 0);
419
- const inferenceConfig = config.interfaceConfig ? { ...config.interfaceConfig } : {};
420
- addConfigParam(inferenceConfig, "max_new_tokens", config?.interfaceConfig?.max_new_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
421
- addConfigParam(inferenceConfig, "temperature", config?.interfaceConfig?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
422
- addConfigParam(params, "inferenceConfig", inferenceConfig, void 0, void 0);
423
- addConfigParam(params, "toolConfig", config.toolConfig, void 0, void 0);
424
- return params;
425
- },
426
- output: (_config, responseJson) => novaOutputFromMessage(responseJson),
427
- tokenUsage: (responseJson, _promptText) => getNovaTokenUsage(responseJson)
428
- },
429
- /**
430
- * Amazon Nova 2 model handler with extended thinking (reasoning) support.
431
- * Supports reasoningConfig with maxReasoningEffort levels: low, medium, high.
432
- */
433
- AMAZON_NOVA_2: {
434
- params: async (config, prompt, _stop, _modelName) => {
435
- let messages;
436
- let systemPrompt;
437
- try {
438
- const parsed = JSON.parse(prompt);
439
- if (Array.isArray(parsed)) {
440
- messages = parsed.map((msg) => ({
441
- role: msg.role,
442
- content: Array.isArray(msg.content) ? msg.content : [{ text: msg.content }]
443
- })).filter((msg) => msg.role !== "system");
444
- const systemMessage = parsed.find((msg) => msg.role === "system");
445
- if (systemMessage) systemPrompt = [{ text: systemMessage.content }];
446
- } else {
447
- const { system, extractedMessages } = novaParseMessages(prompt);
448
- messages = extractedMessages;
449
- if (system) systemPrompt = [{ text: system }];
450
- }
451
- } catch {
452
- const { system, extractedMessages } = novaParseMessages(prompt);
453
- messages = extractedMessages;
454
- if (system) systemPrompt = [{ text: system }];
455
- }
456
- const params = { messages };
457
- if (systemPrompt) addConfigParam(params, "system", systemPrompt, void 0, void 0);
458
- const reasoningEnabled = config.reasoningConfig?.type === "enabled";
459
- const isHighEffort = config.reasoningConfig?.maxReasoningEffort === "high";
460
- const inferenceConfig = {};
461
- if (config.interfaceConfig) {
462
- const { max_new_tokens: _maxTokens, temperature: _temp, ...otherParams } = config.interfaceConfig;
463
- Object.assign(inferenceConfig, otherParams);
464
- }
465
- if (!(reasoningEnabled && isHighEffort)) addConfigParam(inferenceConfig, "max_new_tokens", config?.interfaceConfig?.max_new_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
466
- if (!reasoningEnabled) addConfigParam(inferenceConfig, "temperature", config?.interfaceConfig?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
467
- addConfigParam(params, "inferenceConfig", inferenceConfig, void 0, void 0);
468
- addConfigParam(params, "toolConfig", config.toolConfig, void 0, void 0);
469
- if (config.reasoningConfig) addConfigParam(params, "reasoningConfig", config.reasoningConfig, void 0, void 0);
470
- return params;
471
- },
472
- output: (config, responseJson) => {
473
- const content = responseJson.output?.message?.content;
474
- if (!content || !Array.isArray(content)) return novaOutputFromMessage(responseJson);
475
- if (content.some((block) => block.toolUse?.toolUseId)) return content.map((block) => {
476
- if (block.text) return null;
477
- return JSON.stringify(block.toolUse);
478
- }).filter((block) => block).join("\n\n");
479
- const parts = [];
480
- const showThinking = config.showThinking !== false;
481
- for (const block of content) if (block.reasoningContent && showThinking) {
482
- const reasoningText = block.reasoningContent?.reasoningText?.text;
483
- if (reasoningText) parts.push(`<thinking>\n${reasoningText}\n</thinking>`);
484
- } else if (block.text) parts.push(block.text);
485
- return parts.join("\n\n");
486
- },
487
- tokenUsage: (responseJson, _promptText) => getNovaTokenUsage(responseJson)
488
- },
489
- CLAUDE_COMPLETION: {
490
- params: async (config, prompt, stop, _modelName) => {
491
- const params = {
492
- prompt: `${Anthropic.HUMAN_PROMPT} ${prompt} ${Anthropic.AI_PROMPT}`,
493
- stop_sequences: stop
494
- };
495
- addConfigParam(params, "max_tokens_to_sample", config?.max_tokens_to_sample, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), 1024);
496
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
497
- return params;
498
- },
499
- output: (_config, responseJson) => responseJson?.completion,
500
- tokenUsage: (responseJson, _promptText) => {
501
- if (!responseJson?.usage) return missingBedrockTokenUsage();
502
- const usage = responseJson.usage;
503
- const inputTokens = usage.input_tokens || usage.prompt_tokens;
504
- const inputTokensNum = coerceStrToNum(inputTokens);
505
- const outputTokens = usage.output_tokens || usage.completion_tokens;
506
- const outputTokensNum = coerceStrToNum(outputTokens);
507
- let totalTokens = usage.totalTokens || usage.total_tokens;
508
- if (totalTokens == null && inputTokensNum !== void 0 && outputTokensNum !== void 0) totalTokens = inputTokensNum + outputTokensNum;
509
- return {
510
- prompt: inputTokensNum,
511
- completion: outputTokensNum,
512
- total: coerceStrToNum(totalTokens),
513
- numRequests: 1
514
- };
515
- }
516
- },
517
- CLAUDE_MESSAGES: {
518
- params: async (config, prompt, _stop, modelName, vars) => {
519
- let messages;
520
- let systemPrompt;
521
- try {
522
- const parsed = JSON.parse(prompt);
523
- if (Array.isArray(parsed)) {
524
- const systemMessages = parsed.filter((msg) => msg.role === "system");
525
- const nonSystemMessages = parsed.filter((msg) => msg.role !== "system");
526
- if (systemMessages.length === 1 && nonSystemMessages.length === 0) {
527
- messages = [{
528
- role: "user",
529
- content: Array.isArray(systemMessages[0].content) ? systemMessages[0].content : [{
530
- type: "text",
531
- text: systemMessages[0].content
532
- }]
533
- }];
534
- systemPrompt = void 0;
535
- } else {
536
- messages = nonSystemMessages.map((msg) => ({
537
- role: msg.role,
538
- content: Array.isArray(msg.content) ? msg.content : [{
539
- type: "text",
540
- text: msg.content
541
- }]
542
- }));
543
- systemPrompt = systemMessages[0]?.content;
544
- }
545
- } else {
546
- const { system, extractedMessages } = parseMessages(prompt);
547
- messages = extractedMessages;
548
- systemPrompt = system;
549
- }
550
- } catch {
551
- const { system, extractedMessages } = parseMessages(prompt);
552
- messages = extractedMessages;
553
- systemPrompt = system;
554
- }
555
- const params = { messages };
556
- addConfigParam(params, "anthropic_version", config?.anthropic_version, void 0, "bedrock-2023-05-31");
557
- const alwaysOnAdaptiveThinking = !!modelName && isAlwaysOnAdaptiveThinkingClaudeModel(modelName);
558
- const thinksByDefault = alwaysOnAdaptiveThinking || !!modelName && isThinkingOnByDefaultClaudeModel(modelName) && config?.thinking?.type !== "disabled" && config?.thinking?.type !== "between_tools";
559
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), thinksByDefault ? 2048 : 1024);
560
- const thinking = modelName ? normalizeClaudeThinkingConfig(modelName, config?.thinking, void 0) : config?.thinking;
561
- const { sampling, warnings: samplingWarnings } = resolveClaudeSamplingParams({ temperature: config?.temperature }, {
562
- thinkingEnabled: alwaysOnAdaptiveThinking || isClaudeThinkingEnabled(thinking),
563
- samplingParamsDeprecated: modelName ? isSamplingParamsDeprecatedClaudeModel(modelName) : false,
564
- defaultTemperature: 0
565
- });
566
- for (const warning of samplingWarnings) logger.warn(warning);
567
- addConfigParam(params, "temperature", sampling.temperature, void 0, void 0);
568
- addConfigParam(params, "tools", await maybeLoadToolsFromExternalFile(config?.tools, vars), void 0, void 0);
569
- addConfigParam(params, "tool_choice", (alwaysOnAdaptiveThinking || !!modelName && isForcedToolChoiceUnsupportedClaudeModel(modelName)) && (config?.tool_choice?.type === "any" || config?.tool_choice?.type === "tool") ? void 0 : config?.tool_choice, void 0, void 0);
570
- addConfigParam(params, "thinking", thinking, void 0, void 0);
571
- if (typeof params.max_tokens === "number") params.max_tokens = clampMaxTokensForThinkingBudget(params.max_tokens, thinking);
572
- if (systemPrompt) addConfigParam(params, "system", systemPrompt, void 0, void 0);
573
- return params;
574
- },
575
- output: (config, responseJson) => {
576
- return outputFromMessage(responseJson, config?.showThinking ?? true);
577
- },
578
- tokenUsage: (responseJson, _promptText) => {
579
- if (!responseJson?.usage) return missingBedrockTokenUsage();
580
- const usage = responseJson.usage;
581
- const normalizedUsage = {
582
- ...usage,
583
- input_tokens: usage.input_tokens ?? usage.prompt_tokens,
584
- output_tokens: usage.output_tokens ?? usage.completion_tokens
585
- };
586
- return {
587
- ...getTokenUsage({ usage: normalizedUsage }, false),
588
- numRequests: 1
589
- };
590
- }
591
- },
592
- TITAN_TEXT: {
593
- params: async (config, prompt, stop, _modelName) => {
594
- const textGenerationConfig = {};
595
- addConfigParam(textGenerationConfig, "maxTokenCount", config?.textGenerationConfig?.maxTokenCount, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), 1024);
596
- addConfigParam(textGenerationConfig, "temperature", config?.textGenerationConfig?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
597
- addConfigParam(textGenerationConfig, "topP", config?.textGenerationConfig?.topP, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
598
- addConfigParam(textGenerationConfig, "stopSequences", config?.textGenerationConfig?.stopSequences, void 0, stop);
599
- return {
600
- inputText: prompt,
601
- textGenerationConfig
602
- };
603
- },
604
- output: (_config, responseJson) => responseJson?.results?.[0]?.outputText,
605
- tokenUsage: getOpenAiCompatibleTokenUsage
606
- },
607
- LLAMA2: getLlamaModelHandler(LlamaVersion.V2),
608
- LLAMA3: getLlamaModelHandler(LlamaVersion.V3),
609
- LLAMA3_1: getLlamaModelHandler(LlamaVersion.V3_1),
610
- LLAMA3_2: getLlamaModelHandler(LlamaVersion.V3_2),
611
- LLAMA3_3: getLlamaModelHandler(LlamaVersion.V3_3),
612
- LLAMA4: getLlamaModelHandler(LlamaVersion.V4),
613
- COHERE_COMMAND: {
614
- params: async (config, prompt, stop, _modelName) => {
615
- const params = { prompt };
616
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("COHERE_TEMPERATURE"), 0);
617
- addConfigParam(params, "p", config?.p, getEnvFloat("COHERE_P"), 1);
618
- addConfigParam(params, "k", config?.k, getEnvInt("COHERE_K"), 0);
619
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("COHERE_MAX_TOKENS"), 1024);
620
- addConfigParam(params, "return_likelihoods", config?.return_likelihoods, void 0, "NONE");
621
- addConfigParam(params, "stream", config?.stream, void 0, false);
622
- addConfigParam(params, "num_generations", config?.num_generations, void 0, 1);
623
- addConfigParam(params, "logit_bias", config?.logit_bias, void 0, {});
624
- addConfigParam(params, "truncate", config?.truncate, void 0, "NONE");
625
- addConfigParam(params, "stop_sequences", stop, void 0, void 0);
626
- return params;
627
- },
628
- output: (_config, responseJson) => responseJson?.generations?.[0]?.text,
629
- tokenUsage: (responseJson, _promptText) => getCohereTokenUsage(responseJson)
630
- },
631
- COHERE_COMMAND_R: {
632
- params: async (config, prompt, stop, _modelName, vars) => {
633
- const messages = parseChatPrompt(prompt, [{
634
- role: "user",
635
- content: prompt
636
- }]);
637
- const lastMessage = messages[messages.length - 1].content;
638
- if (!messages.every((m) => typeof m.content === "string")) throw new Error(`Message content must be a string, but got: ${JSON.stringify(messages)}`);
639
- const params = {
640
- message: lastMessage,
641
- chat_history: messages.slice(0, messages.length - 1).map((m) => ({
642
- role: m.role === "assistant" ? "CHATBOT" : "USER",
643
- message: m.content
644
- }))
645
- };
646
- addConfigParam(params, "documents", config?.documents);
647
- addConfigParam(params, "search_queries_only", config?.search_queries_only);
648
- addConfigParam(params, "preamble", config?.preamble);
649
- addConfigParam(params, "max_tokens", config?.max_tokens);
650
- addConfigParam(params, "temperature", config?.temperature);
651
- addConfigParam(params, "p", config?.p);
652
- addConfigParam(params, "k", config?.k);
653
- addConfigParam(params, "prompt_truncation", config?.prompt_truncation);
654
- addConfigParam(params, "frequency_penalty", config?.frequency_penalty);
655
- addConfigParam(params, "presence_penalty", config?.presence_penalty);
656
- addConfigParam(params, "seed", config?.seed);
657
- addConfigParam(params, "return_prompt", config?.return_prompt);
658
- addConfigParam(params, "tools", await maybeLoadToolsFromExternalFile(config?.tools, vars));
659
- addConfigParam(params, "tool_results", config?.tool_results);
660
- addConfigParam(params, "stop_sequences", stop);
661
- addConfigParam(params, "raw_prompting", config?.raw_prompting);
662
- return params;
663
- },
664
- output: (_config, responseJson) => responseJson?.text,
665
- tokenUsage: (responseJson, _promptText) => getCohereTokenUsage(responseJson)
666
- },
667
- DEEPSEEK: {
668
- params: async (config, prompt, _stop, _modelName) => {
669
- const params = { prompt: `
670
- ${prompt}
671
- <think>\n` };
672
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
673
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), 0);
674
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
675
- return params;
676
- },
677
- output: (config, responseJson) => {
678
- if (responseJson.error) throw new Error(`DeepSeek API error: ${responseJson.error}`);
679
- if (responseJson.choices && Array.isArray(responseJson.choices)) {
680
- const choice = responseJson.choices[0];
681
- if (choice && choice.text) {
682
- const fullResponse = choice.text;
683
- const [thinking, finalResponse] = fullResponse.split("</think>");
684
- if (!thinking || !finalResponse) return fullResponse;
685
- if (config.showThinking !== false) return fullResponse;
686
- return finalResponse.trim();
687
- }
688
- }
689
- },
690
- tokenUsage: getOpenAiCompatibleTokenUsage
691
- },
692
- MISTRAL: {
693
- params: async (config, prompt, stop, _modelName) => {
694
- const params = {
695
- prompt,
696
- stop
697
- };
698
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("MISTRAL_MAX_TOKENS"), 1024);
699
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("MISTRAL_TEMPERATURE"), 0);
700
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("MISTRAL_TOP_P"), 1);
701
- addConfigParam(params, "top_k", config?.top_k, getEnvFloat("MISTRAL_TOP_K"));
702
- return params;
703
- },
704
- output: (_config, responseJson) => {
705
- if (!responseJson?.outputs || !Array.isArray(responseJson.outputs)) return;
706
- return responseJson.outputs[0]?.text;
707
- },
708
- tokenUsage: (responseJson, _promptText) => {
709
- if (responseJson?.usage) return {
710
- prompt: coerceStrToNum(responseJson.usage.prompt_tokens),
711
- completion: coerceStrToNum(responseJson.usage.completion_tokens),
712
- total: coerceStrToNum(responseJson.usage.total_tokens),
713
- numRequests: 1
714
- };
715
- if (responseJson?.prompt_tokens !== void 0 && responseJson?.completion_tokens !== void 0) {
716
- const promptTokens = coerceStrToNum(responseJson.prompt_tokens);
717
- const completionTokens = coerceStrToNum(responseJson.completion_tokens);
718
- return {
719
- prompt: promptTokens,
720
- completion: completionTokens,
721
- total: coerceStrToNum(responseJson.total_tokens) ?? (promptTokens !== void 0 && completionTokens !== void 0 ? promptTokens + completionTokens : void 0),
722
- numRequests: 1
723
- };
724
- }
725
- return missingBedrockTokenUsage();
726
- }
727
- },
728
- MISTRAL_CHAT: BEDROCK_MISTRAL_CHAT_MODEL,
729
- MISTRAL_LARGE_2407: BEDROCK_MISTRAL_CHAT_MODEL,
730
- DEEPSEEK_CHAT: BEDROCK_DEEPSEEK_CHAT_MODEL,
731
- OPENAI: {
732
- params: async (config, prompt, stop, _modelName) => {
733
- const params = { messages: parseChatPrompt(prompt, [{
734
- role: "user",
735
- content: prompt
736
- }]) };
737
- addConfigParam(params, "max_completion_tokens", config?.max_completion_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
738
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), .1);
739
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
740
- addConfigParam(params, "reasoning_effort", config?.reasoning_effort);
741
- if (stop && stop.length > 0 || config?.stop) addConfigParam(params, "stop", stop || config?.stop, getEnvString("AWS_BEDROCK_STOP"));
742
- addConfigParam(params, "frequency_penalty", config?.frequency_penalty, getEnvFloat("AWS_BEDROCK_FREQUENCY_PENALTY"));
743
- addConfigParam(params, "presence_penalty", config?.presence_penalty, getEnvFloat("AWS_BEDROCK_PRESENCE_PENALTY"));
744
- return params;
745
- },
746
- output: (config, responseJson) => {
747
- if (responseJson.error) throw new Error(`OpenAI API error: ${responseJson.error}`);
748
- const content = responseJson.choices?.[0]?.message?.content;
749
- const showThinking = config?.showThinking;
750
- if (typeof content !== "string" || showThinking === void 0) return content;
751
- const reasoningMatch = content.match(/^\s*<reasoning>([\s\S]*?)<\/reasoning>\s*([\s\S]*)$/);
752
- if (!reasoningMatch) return content;
753
- const [, reasoning, answer] = reasoningMatch;
754
- if (showThinking) return `Thinking: ${reasoning.trim()}\n\n${answer}`;
755
- return answer.trim() === "" ? content : answer;
756
- },
757
- tokenUsage: (responseJson, _promptText) => {
758
- if (responseJson?.usage) {
759
- const usage = responseJson.usage;
760
- const reasoningTokens = coerceStrToNum(usage.completion_tokens_details?.reasoning_tokens);
761
- const cachedInputTokens = coerceStrToNum(usage.prompt_tokens_details?.cached_tokens);
762
- const completionDetails = {};
763
- if (reasoningTokens !== void 0) completionDetails.reasoning = reasoningTokens;
764
- if ((cachedInputTokens ?? 0) > 0) completionDetails.cacheReadInputTokens = cachedInputTokens;
765
- return {
766
- prompt: coerceStrToNum(usage.prompt_tokens),
767
- completion: coerceStrToNum(usage.completion_tokens),
768
- total: coerceStrToNum(usage.total_tokens),
769
- numRequests: 1,
770
- ...Object.keys(completionDetails).length > 0 ? { completionDetails } : {}
771
- };
772
- }
773
- return missingBedrockTokenUsage();
774
- }
775
- },
776
- QWEN: {
777
- params: async (config, prompt, stop, _modelName, vars) => {
778
- const params = { messages: parseChatPrompt(prompt, [{
779
- role: "user",
780
- content: prompt
781
- }]) };
782
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"), void 0);
783
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"), .7);
784
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"), 1);
785
- if (stop && stop.length > 0 || config?.stop) addConfigParam(params, "stop", stop || config?.stop, getEnvString("AWS_BEDROCK_STOP"));
786
- addConfigParam(params, "frequency_penalty", config?.frequency_penalty, getEnvFloat("AWS_BEDROCK_FREQUENCY_PENALTY"));
787
- addConfigParam(params, "presence_penalty", config?.presence_penalty, getEnvFloat("AWS_BEDROCK_PRESENCE_PENALTY"));
788
- addConfigParam(params, "tools", await maybeLoadToolsFromExternalFile(config?.tools, vars), void 0, void 0);
789
- addConfigParam(params, "tool_choice", config?.tool_choice, void 0, void 0);
790
- return params;
791
- },
792
- output: (config, responseJson) => {
793
- if (responseJson.error) throw new Error(`Qwen API error: ${responseJson.error}`);
794
- if (responseJson.choices && Array.isArray(responseJson.choices)) {
795
- const choice = responseJson.choices[0];
796
- if (choice?.message?.tool_calls && Array.isArray(choice.message.tool_calls)) {
797
- const toolCalls = choice.message.tool_calls.map((toolCall) => {
798
- return `Called function ${toolCall.function.name} with arguments: ${toolCall.function.arguments}`;
799
- }).join("\n");
800
- if (choice.message.content) return `${choice.message.content}\n\n${toolCalls}`;
801
- return toolCalls;
802
- }
803
- if (choice?.message?.content) {
804
- const content = choice.message.content;
805
- if (content.includes("<think>") && content.includes("</think>")) {
806
- if (config.showThinking === false) {
807
- const parts = content.split("</think>");
808
- return parts.length > 1 ? parts[1].trim() : content;
809
- }
810
- }
811
- return content;
812
- }
813
- }
814
- return responseJson.choices?.[0]?.message?.content;
815
- },
816
- tokenUsage: getOpenAiCompatibleTokenUsage
817
- },
818
- /**
819
- * Shared handler for newer Bedrock model families that speak the OpenAI Chat Completions
820
- * wire format over InvokeModel: Z.AI (GLM), MiniMax, Moonshot (Kimi), NVIDIA (Nemotron),
821
- * Google (Gemma), and Writer (Palmyra). Request body is `{ messages, max_tokens, ... }`
822
- * and the response is `{ choices: [{ message: { content } }], usage }`.
823
- *
824
- * Differs from the gpt-oss `OPENAI` handler by sending `max_tokens` (not
825
- * `max_completion_tokens`, which Writer Palmyra rejects) and by not forcing a
826
- * `temperature`/`top_p` default, so each model uses its provider-recommended sampling
827
- * defaults unless the user overrides them.
828
- */
829
- OPENAI_COMPAT: {
830
- params: async (config, prompt, stop, _modelName, vars) => {
831
- const params = { messages: parseChatPrompt(prompt, [{
832
- role: "user",
833
- content: prompt
834
- }]) };
835
- addConfigParam(params, "max_tokens", config?.max_tokens, getEnvInt("AWS_BEDROCK_MAX_TOKENS"));
836
- addConfigParam(params, "temperature", config?.temperature, getEnvFloat("AWS_BEDROCK_TEMPERATURE"));
837
- addConfigParam(params, "top_p", config?.top_p, getEnvFloat("AWS_BEDROCK_TOP_P"));
838
- const effectiveStop = config?.stop && config.stop.length > 0 ? config.stop : stop && stop.length > 0 ? stop : void 0;
839
- if (effectiveStop) addConfigParam(params, "stop", effectiveStop);
840
- addConfigParam(params, "frequency_penalty", config?.frequency_penalty, getEnvFloat("AWS_BEDROCK_FREQUENCY_PENALTY"));
841
- addConfigParam(params, "presence_penalty", config?.presence_penalty, getEnvFloat("AWS_BEDROCK_PRESENCE_PENALTY"));
842
- addConfigParam(params, "reasoning_effort", config?.reasoning_effort);
843
- addConfigParam(params, "tools", await maybeLoadToolsFromExternalFile(config?.tools, vars));
844
- addConfigParam(params, "tool_choice", config?.tool_choice);
845
- return params;
846
- },
847
- output: (config, responseJson) => {
848
- if (responseJson.error) throw new Error(`Bedrock API error: ${responseJson.error}`);
849
- const choice = responseJson.choices?.[0];
850
- if (Array.isArray(choice?.message?.tool_calls) && choice.message.tool_calls.length > 0) {
851
- const content = typeof choice.message.content === "string" && config?.showThinking === false ? choice.message.content.replace(/^\s*<(think|reasoning)>[\s\S]*?<\/\1>\s*/i, "") : choice.message.content;
852
- const toolCalls = choice.message.tool_calls.map((toolCall) => `Called function ${toolCall.function?.name} with arguments: ${toolCall.function?.arguments}`).join("\n");
853
- return content ? `${content}\n\n${toolCalls}` : toolCalls;
854
- }
855
- const content = choice?.message?.content;
856
- if (typeof content !== "string") return content;
857
- if (config.showThinking === false) {
858
- const leadingBlock = content.match(/^\s*<(think|reasoning)>[\s\S]*?<\/\1>/);
859
- if (leadingBlock) {
860
- const stripped = content.slice(leadingBlock[0].length).trim();
861
- return stripped === "" ? content : stripped;
862
- }
863
- }
864
- return content;
865
- },
866
- tokenUsage: getOpenAiCompatibleTokenUsage
867
- }
868
- };
869
- const AWS_BEDROCK_MODELS = {
870
- "ai21.jamba-1-5-large-v1:0": BEDROCK_MODEL.AI21,
871
- "ai21.jamba-1-5-mini-v1:0": BEDROCK_MODEL.AI21,
872
- "amazon.nova-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
873
- "amazon.nova-micro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
874
- "amazon.nova-pro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
875
- "amazon.nova-premier-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
876
- "amazon.nova-2-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA_2,
877
- "anthropic.claude-3-5-sonnet-20240620-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
878
- "anthropic.claude-3-5-sonnet-20241022-v2:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
879
- "anthropic.claude-3-7-sonnet-20250219-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
880
- "anthropic.claude-3-haiku-20240307-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
881
- "anthropic.claude-fable-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
882
- "anthropic.claude-fable-5-1": BEDROCK_MODEL.CLAUDE_MESSAGES,
883
- "anthropic.claude-mythos-5-1": BEDROCK_MODEL.CLAUDE_MESSAGES,
884
- "anthropic.claude-opus-4-1-20250805-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
885
- "anthropic.claude-opus-4-6-v1": BEDROCK_MODEL.CLAUDE_MESSAGES,
886
- "anthropic.claude-opus-4-7": BEDROCK_MODEL.CLAUDE_MESSAGES,
887
- "anthropic.claude-opus-4-8": BEDROCK_MODEL.CLAUDE_MESSAGES,
888
- "anthropic.claude-opus-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
889
- "anthropic.claude-opus-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
890
- "anthropic.claude-opus-4-5-20251101-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
891
- "anthropic.claude-sonnet-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
892
- "anthropic.claude-sonnet-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
893
- "anthropic.claude-sonnet-4-6": BEDROCK_MODEL.CLAUDE_MESSAGES,
894
- "anthropic.claude-sonnet-4-5-20250929-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
895
- "anthropic.claude-haiku-4-5-20251001-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
896
- "anthropic.claude-sonnet-4-20250514-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
897
- "cohere.command-r-plus-v1:0": BEDROCK_MODEL.COHERE_COMMAND_R,
898
- "cohere.command-r-v1:0": BEDROCK_MODEL.COHERE_COMMAND_R,
899
- "deepseek.r1-v1:0": BEDROCK_MODEL.DEEPSEEK,
900
- "deepseek.v3-v1:0": BEDROCK_MODEL.DEEPSEEK_CHAT,
901
- "deepseek.v3.2": BEDROCK_MODEL.DEEPSEEK_CHAT,
902
- "meta.llama3-1-405b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_1,
903
- "meta.llama3-1-70b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_1,
904
- "meta.llama3-1-8b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_1,
905
- "meta.llama3-2-3b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
906
- "meta.llama3-3-70b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_3,
907
- "meta.llama3-70b-instruct-v1:0": BEDROCK_MODEL.LLAMA3,
908
- "meta.llama3-8b-instruct-v1:0": BEDROCK_MODEL.LLAMA3,
909
- "meta.llama4-scout-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
910
- "meta.llama4-maverick-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
911
- "mistral.mistral-7b-instruct-v0:2": BEDROCK_MODEL.MISTRAL,
912
- "mistral.devstral-2-123b": BEDROCK_MODEL.MISTRAL_CHAT,
913
- "mistral.magistral-small-2509": BEDROCK_MODEL.MISTRAL_CHAT,
914
- "mistral.ministral-3-14b-instruct": BEDROCK_MODEL.MISTRAL_CHAT,
915
- "mistral.ministral-3-8b-instruct": BEDROCK_MODEL.MISTRAL_CHAT,
916
- "mistral.ministral-3-3b-instruct": BEDROCK_MODEL.MISTRAL_CHAT,
917
- "mistral.mistral-large-2402-v1:0": BEDROCK_MODEL.MISTRAL,
918
- "mistral.mistral-large-2407-v1:0": BEDROCK_MODEL.MISTRAL_LARGE_2407,
919
- "mistral.mistral-large-3-675b-instruct": BEDROCK_MODEL.MISTRAL_CHAT,
920
- "mistral.mistral-small-2402-v1:0": BEDROCK_MODEL.MISTRAL,
921
- "mistral.mixtral-8x7b-instruct-v0:1": BEDROCK_MODEL.MISTRAL,
922
- "mistral.pixtral-large-2502-v1:0": BEDROCK_MODEL.MISTRAL_CHAT,
923
- "mistral.voxtral-mini-3b-2507": BEDROCK_MODEL.MISTRAL_CHAT,
924
- "mistral.voxtral-small-24b-2507": BEDROCK_MODEL.MISTRAL_CHAT,
925
- "apac.amazon.nova-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
926
- "apac.amazon.nova-micro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
927
- "apac.amazon.nova-pro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
928
- "apac.amazon.nova-premier-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
929
- "apac.amazon.nova-2-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA_2,
930
- "apac.anthropic.claude-3-5-sonnet-20240620-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
931
- "apac.anthropic.claude-3-haiku-20240307-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
932
- "apac.anthropic.claude-opus-4-1-20250805-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
933
- "apac.anthropic.claude-opus-4-6-v1": BEDROCK_MODEL.CLAUDE_MESSAGES,
934
- "apac.anthropic.claude-opus-4-5-20251101-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
935
- "apac.anthropic.claude-sonnet-4-6": BEDROCK_MODEL.CLAUDE_MESSAGES,
936
- "apac.anthropic.claude-sonnet-4-5-20250929-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
937
- "apac.anthropic.claude-haiku-4-5-20251001-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
938
- "apac.anthropic.claude-sonnet-4-20250514-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
939
- "apac.meta.llama4-scout-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
940
- "apac.meta.llama4-maverick-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
941
- "au.anthropic.claude-opus-4-7": BEDROCK_MODEL.CLAUDE_MESSAGES,
942
- "au.anthropic.claude-opus-4-8": BEDROCK_MODEL.CLAUDE_MESSAGES,
943
- "au.anthropic.claude-opus-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
944
- "au.anthropic.claude-sonnet-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
945
- "eu.amazon.nova-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
946
- "eu.amazon.nova-micro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
947
- "eu.amazon.nova-pro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
948
- "eu.amazon.nova-premier-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
949
- "eu.amazon.nova-2-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA_2,
950
- "eu.anthropic.claude-3-5-sonnet-20240620-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
951
- "eu.anthropic.claude-3-7-sonnet-20250219-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
952
- "eu.anthropic.claude-3-haiku-20240307-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
953
- "eu.anthropic.claude-opus-4-1-20250805-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
954
- "eu.anthropic.claude-opus-4-6-v1": BEDROCK_MODEL.CLAUDE_MESSAGES,
955
- "eu.anthropic.claude-opus-4-7": BEDROCK_MODEL.CLAUDE_MESSAGES,
956
- "eu.anthropic.claude-opus-4-8": BEDROCK_MODEL.CLAUDE_MESSAGES,
957
- "eu.anthropic.claude-opus-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
958
- "eu.anthropic.claude-opus-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
959
- "eu.anthropic.claude-opus-4-5-20251101-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
960
- "eu.anthropic.claude-sonnet-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
961
- "eu.anthropic.claude-sonnet-4-6": BEDROCK_MODEL.CLAUDE_MESSAGES,
962
- "eu.anthropic.claude-sonnet-4-5-20250929-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
963
- "eu.anthropic.claude-haiku-4-5-20251001-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
964
- "eu.anthropic.claude-sonnet-4-20250514-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
965
- "eu.meta.llama3-2-1b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
966
- "eu.meta.llama3-2-3b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
967
- "eu.meta.llama4-scout-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
968
- "eu.meta.llama4-maverick-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
969
- "eu.mistral.pixtral-large-2502-v1:0": BEDROCK_MODEL.MISTRAL_CHAT,
970
- "us-gov.anthropic.claude-3-5-sonnet-20240620-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
971
- "us-gov.anthropic.claude-3-haiku-20240307-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
972
- "us.amazon.nova-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
973
- "us.amazon.nova-micro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
974
- "us.amazon.nova-pro-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
975
- "us.amazon.nova-premier-v1:0": BEDROCK_MODEL.AMAZON_NOVA,
976
- "us.amazon.nova-2-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA_2,
977
- "us.anthropic.claude-3-5-sonnet-20240620-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
978
- "us.anthropic.claude-3-5-sonnet-20241022-v2:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
979
- "us.anthropic.claude-3-7-sonnet-20250219-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
980
- "us.anthropic.claude-3-haiku-20240307-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
981
- "us.anthropic.claude-fable-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
982
- "us.anthropic.claude-fable-5-1": BEDROCK_MODEL.CLAUDE_MESSAGES,
983
- "us.anthropic.claude-mythos-5-1": BEDROCK_MODEL.CLAUDE_MESSAGES,
984
- "us.anthropic.claude-opus-4-1-20250805-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
985
- "us.anthropic.claude-opus-4-6-v1": BEDROCK_MODEL.CLAUDE_MESSAGES,
986
- "us.anthropic.claude-opus-4-7": BEDROCK_MODEL.CLAUDE_MESSAGES,
987
- "us.anthropic.claude-opus-4-8": BEDROCK_MODEL.CLAUDE_MESSAGES,
988
- "us.anthropic.claude-opus-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
989
- "us.anthropic.claude-opus-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
990
- "us.anthropic.claude-opus-4-5-20251101-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
991
- "us.anthropic.claude-sonnet-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
992
- "us.anthropic.claude-sonnet-4-6": BEDROCK_MODEL.CLAUDE_MESSAGES,
993
- "us.anthropic.claude-sonnet-4-5-20250929-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
994
- "us.anthropic.claude-haiku-4-5-20251001-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
995
- "us.anthropic.claude-sonnet-4-20250514-v1:0": BEDROCK_MODEL.CLAUDE_MESSAGES,
996
- "us.deepseek.r1-v1:0": BEDROCK_MODEL.DEEPSEEK,
997
- "us.meta.llama3-1-405b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_1,
998
- "us.meta.llama3-1-70b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_1,
999
- "us.meta.llama3-1-8b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_1,
1000
- "us.meta.llama3-2-11b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
1001
- "us.meta.llama3-2-1b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
1002
- "us.meta.llama3-2-3b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
1003
- "us.meta.llama3-2-90b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_2,
1004
- "us.meta.llama3-3-70b-instruct-v1:0": BEDROCK_MODEL.LLAMA3_3,
1005
- "us.meta.llama4-scout-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
1006
- "us.meta.llama4-maverick-17b-instruct-v1:0": BEDROCK_MODEL.LLAMA4,
1007
- "us.mistral.pixtral-large-2502-v1:0": BEDROCK_MODEL.MISTRAL_CHAT,
1008
- "openai.gpt-oss-120b-1:0": BEDROCK_MODEL.OPENAI,
1009
- "openai.gpt-oss-20b-1:0": BEDROCK_MODEL.OPENAI,
1010
- "openai.gpt-oss-safeguard-120b": BEDROCK_MODEL.OPENAI,
1011
- "openai.gpt-oss-safeguard-20b": BEDROCK_MODEL.OPENAI,
1012
- "us.xai.grok-4.6": BEDROCK_MODEL.OPENAI_COMPAT,
1013
- "global.xai.grok-4.6": BEDROCK_MODEL.OPENAI_COMPAT,
1014
- "qwen.qwen3-coder-next": BEDROCK_MODEL.QWEN,
1015
- "qwen.qwen3-coder-480b-a35b-v1:0": BEDROCK_MODEL.QWEN,
1016
- "qwen.qwen3-coder-30b-a3b-v1:0": BEDROCK_MODEL.QWEN,
1017
- "qwen.qwen3-next-80b-a3b": BEDROCK_MODEL.QWEN,
1018
- "qwen.qwen3-vl-235b-a22b": BEDROCK_MODEL.QWEN,
1019
- "qwen.qwen3-235b-a22b-2507-v1:0": BEDROCK_MODEL.QWEN,
1020
- "qwen.qwen3-32b-v1:0": BEDROCK_MODEL.QWEN,
1021
- "zai.glm-5": BEDROCK_MODEL.OPENAI_COMPAT,
1022
- "zai.glm-4.7": BEDROCK_MODEL.OPENAI_COMPAT,
1023
- "zai.glm-4.7-flash": BEDROCK_MODEL.OPENAI_COMPAT,
1024
- "minimax.minimax-m2": BEDROCK_MODEL.OPENAI_COMPAT,
1025
- "minimax.minimax-m2.1": BEDROCK_MODEL.OPENAI_COMPAT,
1026
- "minimax.minimax-m2.5": BEDROCK_MODEL.OPENAI_COMPAT,
1027
- "moonshotai.kimi-k2.5": BEDROCK_MODEL.OPENAI_COMPAT,
1028
- "moonshot.kimi-k2-thinking": BEDROCK_MODEL.OPENAI_COMPAT,
1029
- "nvidia.nemotron-nano-9b-v2": BEDROCK_MODEL.OPENAI_COMPAT,
1030
- "nvidia.nemotron-nano-12b-v2": BEDROCK_MODEL.OPENAI_COMPAT,
1031
- "nvidia.nemotron-nano-3-30b": BEDROCK_MODEL.OPENAI_COMPAT,
1032
- "nvidia.nemotron-super-3-120b": BEDROCK_MODEL.OPENAI_COMPAT,
1033
- "us-gov.nvidia.nemotron-nano-9b-v2": BEDROCK_MODEL.OPENAI_COMPAT,
1034
- "us-gov.nvidia.nemotron-nano-12b-v2": BEDROCK_MODEL.OPENAI_COMPAT,
1035
- "us-gov.nvidia.nemotron-nano-3-30b": BEDROCK_MODEL.OPENAI_COMPAT,
1036
- "us-gov.nvidia.nemotron-super-3-120b": BEDROCK_MODEL.OPENAI_COMPAT,
1037
- "google.gemma-3-4b-it": BEDROCK_MODEL.OPENAI_COMPAT,
1038
- "google.gemma-3-12b-it": BEDROCK_MODEL.OPENAI_COMPAT,
1039
- "google.gemma-3-27b-it": BEDROCK_MODEL.OPENAI_COMPAT,
1040
- "us.writer.palmyra-x5-v1:0": BEDROCK_MODEL.OPENAI_COMPAT,
1041
- "us.writer.palmyra-x4-v1:0": BEDROCK_MODEL.OPENAI_COMPAT,
1042
- "writer.palmyra-vision-7b": BEDROCK_MODEL.OPENAI_COMPAT,
1043
- "global.amazon.nova-2-lite-v1:0": BEDROCK_MODEL.AMAZON_NOVA_2,
1044
- "global.anthropic.claude-opus-4-7": BEDROCK_MODEL.CLAUDE_MESSAGES,
1045
- "jp.anthropic.claude-opus-4-7": BEDROCK_MODEL.CLAUDE_MESSAGES,
1046
- "global.anthropic.claude-opus-4-8": BEDROCK_MODEL.CLAUDE_MESSAGES,
1047
- "jp.anthropic.claude-opus-4-8": BEDROCK_MODEL.CLAUDE_MESSAGES,
1048
- "global.anthropic.claude-opus-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
1049
- "global.anthropic.claude-opus-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
1050
- "jp.anthropic.claude-opus-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
1051
- "au.anthropic.claude-opus-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
1052
- "global.anthropic.claude-fable-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
1053
- "global.anthropic.claude-fable-5-1": BEDROCK_MODEL.CLAUDE_MESSAGES,
1054
- "global.anthropic.claude-mythos-5-1": BEDROCK_MODEL.CLAUDE_MESSAGES,
1055
- "global.anthropic.claude-sonnet-5": BEDROCK_MODEL.CLAUDE_MESSAGES,
1056
- "global.anthropic.claude-sonnet-5-5": BEDROCK_MODEL.CLAUDE_MESSAGES
1057
- };
1058
- function getCanonicalMessagesOnlyModel(modelName) {
1059
- const mythosMatch = /^(?:[^.]+\.)?(anthropic\.claude-mythos-(?:5|preview))$/.exec(modelName);
1060
- if (mythosMatch) return mythosMatch[1];
1061
- if (requiresBedrockAnthropicMessagesModel(modelName)) return modelName;
1062
- }
1063
- /**
1064
- * Model IDs AWS no longer serves. Kept so a config pinned to one fails with a clear local
1065
- * error instead of reaching the `anthropic.claude` catch-all below (or, on the Converse
1066
- * route, the remote API) and failing with something less obvious.
1067
- *
1068
- * The Claude entries were verified absent from `list-foundation-models` in all 17 commercial
1069
- * regions on 2026-09-04. Note this is Bedrock's lifecycle, not Anthropic's: several models
1070
- * retired on the Anthropic API are still served here and must NOT be listed.
1071
- *
1072
- * Use bare IDs; the availability check removes inference-profile prefixes.
1073
- */
1074
- const RETIRED_BEDROCK_MODELS = /* @__PURE__ */ new Set([
1075
- "anthropic.claude-3-opus-20240229-v1:0",
1076
- "anthropic.claude-opus-4-20250514-v1:0",
1077
- "anthropic.claude-3-5-haiku-20241022-v1:0",
1078
- "anthropic.claude-instant-v1",
1079
- "anthropic.claude-v1",
1080
- "anthropic.claude-v2",
1081
- "anthropic.claude-v2:1",
1082
- "cohere.command-text-v14",
1083
- "cohere.command-light-text-v14",
1084
- "meta.llama2-13b-chat-v1",
1085
- "meta.llama2-70b-chat-v1"
1086
- ]);
1087
- /** Reject withdrawn models before InvokeModel, Converse, or Knowledge Base requests. */
1088
- function assertBedrockModelIsAvailable(modelName) {
1089
- const modelId = modelName.startsWith("arn:") ? /:(?:inference-profile|foundation-model)\/([^/]+)$/.exec(modelName)?.[1] ?? modelName : modelName;
1090
- if (RETIRED_BEDROCK_MODELS.has(modelId.replace(INFERENCE_PROFILE_PREFIX, ""))) throw new Error(`Unknown Amazon Bedrock model: ${modelName}`);
1091
- }
1092
- function getHandlerForModel(modelName, config) {
1093
- assertBedrockModelIsAvailable(modelName);
1094
- const messagesOnlyModel = getCanonicalMessagesOnlyModel(modelName);
1095
- if (messagesOnlyModel) throw new Error(`Amazon Bedrock model "${modelName}" uses Bedrock's Anthropic Messages API, not InvokeModel. Load it as "bedrock:${messagesOnlyModel}" instead.`);
1096
- if (modelName.includes("arn:") && modelName.includes("inference-profile")) {
1097
- const inferenceModelType = config?.inferenceModelType;
1098
- if (!inferenceModelType) throw new Error("Inference profile requires inferenceModelType to be specified in config. Options: claude, nova, nova2, llama (defaults to v4), llama2, llama3, llama3.1, llama3.2, llama3.3, llama4, mistral, cohere, ai21, titan, deepseek, openai, qwen, zai, minimax, moonshot, nvidia, writer, gemma");
1099
- switch (inferenceModelType) {
1100
- case "claude": return BEDROCK_MODEL.CLAUDE_MESSAGES;
1101
- case "nova": return BEDROCK_MODEL.AMAZON_NOVA;
1102
- case "llama": return BEDROCK_MODEL.LLAMA4;
1103
- case "llama2": return BEDROCK_MODEL.LLAMA2;
1104
- case "llama3": return BEDROCK_MODEL.LLAMA3;
1105
- case "llama3.1":
1106
- case "llama3_1": return BEDROCK_MODEL.LLAMA3_1;
1107
- case "llama3.2":
1108
- case "llama3_2": return BEDROCK_MODEL.LLAMA3_2;
1109
- case "llama3.3":
1110
- case "llama3_3": return BEDROCK_MODEL.LLAMA3_3;
1111
- case "llama4": return BEDROCK_MODEL.LLAMA4;
1112
- case "mistral": return BEDROCK_MODEL.MISTRAL;
1113
- case "cohere": return BEDROCK_MODEL.COHERE_COMMAND_R;
1114
- case "ai21": return BEDROCK_MODEL.AI21;
1115
- case "titan": return BEDROCK_MODEL.TITAN_TEXT;
1116
- case "deepseek": return BEDROCK_MODEL.DEEPSEEK;
1117
- case "openai": return BEDROCK_MODEL.OPENAI;
1118
- case "qwen": return BEDROCK_MODEL.QWEN;
1119
- case "nova2": return BEDROCK_MODEL.AMAZON_NOVA_2;
1120
- case "zai":
1121
- case "minimax":
1122
- case "moonshot":
1123
- case "nvidia":
1124
- case "writer":
1125
- case "gemma": return BEDROCK_MODEL.OPENAI_COMPAT;
1126
- default: throw new Error(`Unknown inference model type: ${inferenceModelType}`);
1127
- }
1128
- }
1129
- const ret = AWS_BEDROCK_MODELS[modelName];
1130
- if (ret) return ret;
1131
- if (modelName.startsWith("ai21.")) return BEDROCK_MODEL.AI21;
1132
- if (modelName.includes("amazon.nova-2")) return BEDROCK_MODEL.AMAZON_NOVA_2;
1133
- if (modelName.includes("amazon.nova")) return BEDROCK_MODEL.AMAZON_NOVA;
1134
- if (modelName.includes("anthropic.claude")) return BEDROCK_MODEL.CLAUDE_MESSAGES;
1135
- if (modelName.startsWith("meta.llama2")) return BEDROCK_MODEL.LLAMA2;
1136
- if (modelName.includes("meta.llama3-1")) return BEDROCK_MODEL.LLAMA3_1;
1137
- if (modelName.includes("meta.llama3-2")) return BEDROCK_MODEL.LLAMA3_2;
1138
- if (modelName.includes("meta.llama3-3")) return BEDROCK_MODEL.LLAMA3_3;
1139
- if (modelName.includes("meta.llama4")) return BEDROCK_MODEL.LLAMA4;
1140
- if (modelName.includes("meta.llama3")) return BEDROCK_MODEL.LLAMA3;
1141
- if (modelName.startsWith("cohere.command-r")) return BEDROCK_MODEL.COHERE_COMMAND_R;
1142
- if (modelName.startsWith("cohere.command")) return BEDROCK_MODEL.COHERE_COMMAND;
1143
- if (modelName.startsWith("mistral.")) return BEDROCK_MODEL.MISTRAL;
1144
- if (modelName.startsWith("deepseek.")) return BEDROCK_MODEL.DEEPSEEK;
1145
- if (modelName.startsWith("qwen.")) return BEDROCK_MODEL.QWEN;
1146
- if (modelName.includes("openai.gpt-oss")) {
1147
- if (/-\d+:\d+$/.test(modelName)) return BEDROCK_MODEL.OPENAI;
1148
- throw new Error(`Amazon Bedrock model "${modelName}" looks like the Bedrock Mantle id for an open-weight gpt-oss model. promptfoo's bedrock: provider calls the InvokeModel (bedrock-runtime) API, which uses the versioned runtime id — e.g. "bedrock:openai.gpt-oss-120b-1:0". See https://www.promptfoo.dev/docs/providers/aws-bedrock/#openai-models`);
1149
- }
1150
- if (modelName.includes("openai.")) {
1151
- const bareFrontierId = modelName.replace(/^[a-z]+\.(?=openai\.)/, "");
1152
- if (/^[a-z]+\.openai\.gpt-5\.6-(?:sol|terra|luna)$/.test(modelName)) throw new Error(`OpenAI model "${modelName}" is not served by Bedrock's InvokeModel API. For a supported Runtime inference profile, use "bedrock:converse:${modelName}" with AWS credentials, or "bedrock:${bareFrontierId}" with AWS_BEARER_TOKEN_BEDROCK for Mantle Responses.`);
1153
- throw new Error(`OpenAI model "${modelName}" is not served by Bedrock's InvokeModel API. Frontier models (gpt-5.x) use the OpenAI-compatible Responses API — use "bedrock:${bareFrontierId}" and set AWS_BEARER_TOKEN_BEDROCK. See https://www.promptfoo.dev/docs/providers/aws-bedrock/#openai-models`);
1154
- }
1155
- if (modelName.includes("xai.") || modelName.includes("grok")) throw new Error(`xAI model "${modelName}" is not served by Bedrock's InvokeModel API under that id. Grok 4.6 supports Runtime Converse through an inference profile — use "bedrock:converse:us.xai.grok-4.6" or "bedrock:converse:global.xai.grok-4.6" with ordinary AWS credentials. Other Grok models run on the OpenAI-compatible Responses API (mantle endpoint) — use the bare id such as "bedrock:xai.grok-4.3" and set AWS_BEARER_TOKEN_BEDROCK. See https://www.promptfoo.dev/docs/providers/aws-bedrock/#xai-grok-models`);
1156
- throw new Error(`Unknown Amazon Bedrock model: ${modelName}`);
1157
- }
1158
- var AwsBedrockCompletionProvider = class extends AwsBedrockGenericProvider {
1159
- static AWS_BEDROCK_COMPLETION_MODELS = Object.keys(AWS_BEDROCK_MODELS);
1160
- async callApi(prompt, context) {
1161
- let stop;
1162
- try {
1163
- stop = getEnvString("AWS_BEDROCK_STOP") ? JSON.parse(getEnvString("AWS_BEDROCK_STOP")) : [];
1164
- } catch (err) {
1165
- throw new Error(`BEDROCK_STOP is not a valid JSON string: ${err}`);
1166
- }
1167
- const mergedConfig = {
1168
- ...this.config,
1169
- ...context?.prompt.config
1170
- };
1171
- let model = getHandlerForModel(this.modelName, mergedConfig);
1172
- if (!model) {
1173
- logger.warn(`Unknown Amazon Bedrock model: ${this.modelName}. Assuming its API is Claude-like.`);
1174
- model = BEDROCK_MODEL.CLAUDE_MESSAGES;
1175
- }
1176
- const params = await model.params(mergedConfig, prompt, stop, this.modelName, context?.vars);
1177
- logger.debug("Calling Amazon Bedrock API", { params });
1178
- const cache = await getCache();
1179
- const region = this.getRegion();
1180
- const cacheKey = `bedrock:${this.modelName}:${region}:${createBedrockCacheKeyHash({
1181
- config: this.config,
1182
- params,
1183
- region
1184
- })}`;
1185
- if (isCacheEnabled()) {
1186
- const cachedResponse = await cache.get(cacheKey);
1187
- if (cachedResponse) {
1188
- logger.debug(`Returning cached response for ${prompt}: ${cachedResponse}`);
1189
- return {
1190
- output: model.output(mergedConfig, JSON.parse(cachedResponse)),
1191
- tokenUsage: createEmptyTokenUsage(),
1192
- cached: true
1193
- };
1194
- }
1195
- }
1196
- let response;
1197
- try {
1198
- const bedrockInstance = await this.getBedrockInstance();
1199
- try {
1200
- const testCredentials = await bedrockInstance.config.credentials?.();
1201
- logger.debug(`Actual credentials being used: ${testCredentials?.accessKeyId ? `accessKeyId starts with: ${testCredentials.accessKeyId.substring(0, 4)}...` : "no explicit credentials (using instance metadata)"}`);
1202
- } catch (credErr) {
1203
- logger.debug(`Error getting credentials: ${credErr}`);
1204
- }
1205
- response = await bedrockInstance.invokeModel({
1206
- modelId: this.modelName,
1207
- ...this.config.guardrailIdentifier ? { guardrailIdentifier: String(this.config.guardrailIdentifier) } : {},
1208
- ...this.config.guardrailVersion ? { guardrailVersion: String(this.config.guardrailVersion) } : {},
1209
- ...this.config.trace ? { trace: this.config.trace } : {},
1210
- accept: "application/json",
1211
- contentType: "application/json",
1212
- body: JSON.stringify(params)
1213
- });
1214
- } catch (err) {
1215
- return { error: `Bedrock API invoke model error: ${String(err)}` };
1216
- }
1217
- logger.debug(`Amazon Bedrock API response: ${response.body.transformToString()}`);
1218
- if (isCacheEnabled()) try {
1219
- await cache.set(cacheKey, new TextDecoder().decode(response.body));
1220
- } catch (err) {
1221
- logger.error(`Failed to cache response: ${String(err)}`);
1222
- }
1223
- try {
1224
- const output = JSON.parse(new TextDecoder().decode(response.body));
1225
- let tokenUsage = {};
1226
- if (model.tokenUsage) {
1227
- tokenUsage = model.tokenUsage(output, prompt);
1228
- logger.debug(`Token usage from model handler: ${JSON.stringify(tokenUsage)}`);
1229
- } else {
1230
- const promptTokens = output.usage?.inputTokens ?? output.usage?.input_tokens ?? output.usage?.prompt_tokens ?? output.prompt_tokens ?? output.prompt_token_count;
1231
- const completionTokens = output.usage?.outputTokens ?? output.usage?.output_tokens ?? output.usage?.completion_tokens ?? output.completion_tokens ?? output.generation_token_count;
1232
- const promptTokensNum = coerceStrToNum(promptTokens);
1233
- const completionTokensNum = coerceStrToNum(completionTokens);
1234
- tokenUsage = {
1235
- prompt: promptTokensNum,
1236
- completion: completionTokensNum,
1237
- total: coerceStrToNum(output.usage?.totalTokens ?? output.usage?.total_tokens ?? output.total_tokens) ?? (promptTokensNum !== void 0 && completionTokensNum !== void 0 ? promptTokensNum + completionTokensNum : void 0),
1238
- numRequests: 1
1239
- };
1240
- if (tokenUsage.prompt === void 0 && tokenUsage.completion === void 0 && tokenUsage.total === void 0 && output) logger.debug(`No explicit token counts found for ${this.modelName}, tracking request count only`);
1241
- else logger.debug(`Extracted token usage: ${JSON.stringify(tokenUsage)}`);
1242
- }
1243
- if (!tokenUsage.numRequests) tokenUsage.numRequests = 1;
1244
- const cacheReadInputTokens = tokenUsage.completionDetails?.cacheReadInputTokens ?? (isBedrockGrok46Profile(this.modelName) ? coerceStrToNum(output.usage?.prompt_tokens_details?.cached_tokens) : coerceStrToNum(output.usage?.cache_read_input_tokens));
1245
- const billablePromptTokens = model === BEDROCK_MODEL.CLAUDE_MESSAGES ? coerceStrToNum(output.usage?.input_tokens ?? output.usage?.prompt_tokens) : isBedrockGrok46Profile(this.modelName) && tokenUsage.prompt !== void 0 ? Math.max(tokenUsage.prompt - (cacheReadInputTokens ?? 0), 0) : tokenUsage.prompt;
1246
- const cost = calculateBedrockInvokeModelCost(this.modelName, billablePromptTokens, tokenUsage.completion, cacheReadInputTokens, tokenUsage.completionDetails?.cacheCreationInputTokens ?? coerceStrToNum(output.usage?.cache_creation_input_tokens), region, coerceStrToNum(output.usage?.cache_creation?.ephemeral_1h_input_tokens));
1247
- return {
1248
- output: model.output(mergedConfig, output),
1249
- tokenUsage,
1250
- cost,
1251
- ...output["amazon-bedrock-guardrailAction"] ? { guardrails: { flagged: output["amazon-bedrock-guardrailAction"] === "INTERVENED" } } : {}
1252
- };
1253
- } catch (err) {
1254
- logger.error("Bedrock API response error", {
1255
- error: String(err),
1256
- response
1257
- });
1258
- return { error: `API response error: ${String(err)}: ${JSON.stringify(response)}` };
1259
- }
1260
- }
1261
- };
1262
- var AwsBedrockEmbeddingProvider = class extends AwsBedrockGenericProvider {
1263
- supportsEmbeddingCancellation = true;
1264
- constructor(modelName, options = {}) {
1265
- super(modelName, options);
1266
- }
1267
- async callApi() {
1268
- throw new Error("callApi is not implemented for embedding provider");
1269
- }
1270
- async callEmbeddingApi(text, _context, options) {
1271
- const params = this.modelName.includes("cohere.embed") ? {
1272
- texts: [text],
1273
- input_type: this.config.input_type ?? "search_document"
1274
- } : { inputText: text };
1275
- logger.debug("Calling AWS Bedrock API for embeddings", { params });
1276
- let response;
1277
- try {
1278
- const bedrockInstance = await this.getBedrockInstance();
1279
- const command = {
1280
- modelId: this.modelName,
1281
- accept: "application/json",
1282
- contentType: "application/json",
1283
- body: JSON.stringify(params)
1284
- };
1285
- response = options?.abortSignal ? await bedrockInstance.invokeModel(command, { abortSignal: options.abortSignal }) : await bedrockInstance.invokeModel(command);
1286
- } catch (err) {
1287
- options?.abortSignal?.throwIfAborted();
1288
- return { error: `API call error: ${String(err)}` };
1289
- }
1290
- logger.debug(`AWS Bedrock API response (embeddings): ${JSON.stringify(response.body.transformToString())}`);
1291
- try {
1292
- const data = JSON.parse(response.body.transformToString());
1293
- const embeddings = data?.embeddings?.float ?? data?.embeddings;
1294
- const embedding = data?.embedding ?? (Array.isArray(embeddings) && embeddings.length === 1 ? embeddings[0] : void 0);
1295
- if (!Array.isArray(embedding) || embedding.length === 0 || !embedding.every((value) => typeof value === "number" && Number.isFinite(value))) throw new Error("No valid embedding found in AWS Bedrock API response");
1296
- return { embedding };
1297
- } catch (err) {
1298
- return { error: `API response error: ${String(err)}: ${JSON.stringify(response.body.transformToString())}` };
1299
- }
1300
- }
1301
- };
1302
- //#endregion
1303
- //#region src/providers/bedrock/converse.ts
1304
- /**
1305
- * AWS Bedrock Converse API Provider
1306
- *
1307
- * This provider implements the AWS Bedrock Converse API, which provides a unified
1308
- * interface for all Bedrock models. It supports:
1309
- * - Extended thinking (reasoning/ultrathink) for Claude models
1310
- * - Tool calling with standardized format
1311
- * - Streaming responses via ConverseStream
1312
- * - Performance configuration (latency optimization, service tiers)
1313
- * - Guardrails integration
1314
- * - Cache token tracking
1315
- */
1316
- function getOneHourCacheWriteTokens(cacheDetails) {
1317
- return cacheDetails?.reduce((total, detail) => total + (detail.ttl === "1h" ? detail.inputTokens ?? 0 : 0), 0) ?? 0;
1318
- }
1319
- /**
1320
- * Convert various tool formats to Converse API format.
1321
- * Supports OpenAI, Anthropic, and native Bedrock formats.
1322
- */
1323
- function convertToolsToConverseFormat(tools) {
1324
- if (isOpenAIToolArray(tools)) return openaiToolsToBedrock(tools);
1325
- return tools.map((tool) => {
1326
- if (tool.toolSpec) return { toolSpec: tool.toolSpec };
1327
- if (tool.type === "function" && tool.function) return { toolSpec: {
1328
- name: tool.function.name,
1329
- description: tool.function.description,
1330
- inputSchema: { json: tool.function.parameters || {} }
1331
- } };
1332
- if (tool.name && "parameters" in tool && !("input_schema" in tool)) return { toolSpec: {
1333
- name: tool.name,
1334
- description: tool.description,
1335
- inputSchema: { json: tool.parameters || {
1336
- type: "object",
1337
- properties: {}
1338
- } }
1339
- } };
1340
- if (tool.name) return { toolSpec: {
1341
- name: tool.name,
1342
- description: tool.description,
1343
- inputSchema: { json: tool.input_schema || {} }
1344
- } };
1345
- throw new Error(`Invalid tool configuration: ${JSON.stringify(tool)}`);
1346
- });
1347
- }
1348
- function transformMCPToolsToBedrockConverse(tools) {
1349
- const seen = /* @__PURE__ */ new Set();
1350
- const result = [];
1351
- for (const tool of tools) {
1352
- if (seen.has(tool.name)) {
1353
- logger.warn(`[Bedrock Converse] Duplicate MCP tool name '${tool.name}' detected; using the first server's definition.`);
1354
- continue;
1355
- }
1356
- seen.add(tool.name);
1357
- const { $schema: _$schema, ...cleanSchema } = tool.inputSchema || {};
1358
- result.push({ toolSpec: {
1359
- name: tool.name,
1360
- description: tool.description,
1361
- inputSchema: { json: {
1362
- type: "object",
1363
- ...cleanSchema
1364
- } }
1365
- } });
1366
- }
1367
- return result;
1368
- }
1369
- /**
1370
- * Extract a printable message from an unknown thrown value without losing
1371
- * non-`Error` payloads to `[object Object]`.
1372
- */
1373
- function errorMessage(err) {
1374
- return err instanceof Error ? err.message : String(err);
1375
- }
1376
- /**
1377
- * Coerces a tool_use input value into a plain object suitable for `MCPClient.callTool`.
1378
- * Total: never throws. Malformed JSON strings yield `{}` so an MCP call still happens with
1379
- * empty args rather than crashing the whole eval row.
1380
- */
1381
- function parseToolInput(input) {
1382
- if (typeof input === "string") {
1383
- if (!input) return {};
1384
- try {
1385
- const parsed = JSON.parse(input);
1386
- return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
1387
- } catch (err) {
1388
- logger.warn(`[Bedrock Converse] Failed to parse tool_use input as JSON: ${err}`);
1389
- return {};
1390
- }
1391
- }
1392
- return input && typeof input === "object" && !Array.isArray(input) ? input : {};
1393
- }
1394
- /**
1395
- * True when an MCP server config has at least one transport (command+args, path, or url).
1396
- * Empty strings count as unset.
1397
- */
1398
- function isMCPServerConfigured(server) {
1399
- if (!server) return false;
1400
- return Boolean(server.command || server.path || server.url);
1401
- }
1402
- function hasUsableMCPServer(mcp) {
1403
- if (!mcp) return false;
1404
- if (mcp.server && isMCPServerConfigured(mcp.server)) return true;
1405
- return Boolean(mcp.servers?.some(isMCPServerConfigured));
1406
- }
1407
- function joinMcpErrors(errors) {
1408
- return errors.length > 0 ? errors.join("; ") : void 0;
1409
- }
1410
- function formatMcpToolResult(name, content) {
1411
- return `MCP Tool Result (${name}): ${normalizeMcpToolContent(content, (part) => {
1412
- logger.debug("[Bedrock Converse] Unknown MCP content shape, serializing as JSON", { keys: Object.keys(part) });
1413
- })}`;
1414
- }
1415
- function formatMcpToolError(name, message) {
1416
- return `MCP Tool Error (${name}): ${message}`;
1417
- }
1418
- /**
1419
- * Parses streaming tool_use input that arrived as concatenated JSON deltas.
1420
- * Always returns a plain object (the only shape `MCPClient.callTool` accepts);
1421
- * `failed` is `true` when the raw text was non-empty but not valid JSON, so
1422
- * callers can surface the parse error rather than silently calling MCP with
1423
- * `{}`.
1424
- */
1425
- function parseStreamingToolInput(raw) {
1426
- if (!raw) return {
1427
- value: {},
1428
- failed: false
1429
- };
1430
- try {
1431
- return {
1432
- value: parseToolInput(JSON.parse(raw)),
1433
- failed: false
1434
- };
1435
- } catch (err) {
1436
- logger.warn(`[Bedrock Converse] Streaming tool_use input was not valid JSON: ${errorMessage(err)}`);
1437
- return {
1438
- value: {},
1439
- failed: true
1440
- };
1441
- }
1442
- }
1443
- /**
1444
- * Convert tool choice to Converse API format.
1445
- * Supports OpenAI tool choice format and native Bedrock format.
1446
- */
1447
- function isNamedConverseToolChoice(toolChoice) {
1448
- if (!toolChoice || typeof toolChoice !== "object" || !("tool" in toolChoice)) return false;
1449
- const tool = toolChoice.tool;
1450
- return Boolean(tool && typeof tool === "object" && typeof tool.name === "string");
1451
- }
1452
- function convertToolChoiceToConverseFormat(toolChoice) {
1453
- if (isOpenAIToolChoice(toolChoice)) return openaiToolChoiceToBedrock(toolChoice);
1454
- if (toolChoice === "any") return { any: {} };
1455
- if (isNamedConverseToolChoice(toolChoice)) return { tool: { name: toolChoice.tool.name } };
1456
- return { auto: {} };
1457
- }
1458
- function isDisabledToolChoice(toolChoice) {
1459
- return toolChoice === "none";
1460
- }
1461
- /**
1462
- * Parse prompt into Converse API message format
1463
- */
1464
- function parseConverseMessages(prompt) {
1465
- try {
1466
- const parsed = JSON.parse(prompt);
1467
- if (Array.isArray(parsed)) {
1468
- const systemMessages = [];
1469
- const messages = [];
1470
- for (const msg of parsed) if (msg.role === "system") {
1471
- const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
1472
- systemMessages.push({ text: content });
1473
- } else if (msg.role === "user" || msg.role === "assistant") {
1474
- const contentBlocks = [];
1475
- if (typeof msg.content === "string") contentBlocks.push({ text: msg.content });
1476
- else if (Array.isArray(msg.content)) for (const block of msg.content) if (typeof block === "string") contentBlocks.push({ text: block });
1477
- else if (block.type === "text") contentBlocks.push({ text: block.text });
1478
- else if (block.type === "image" || block.image) {
1479
- const imageData = block.image || block;
1480
- let bytes;
1481
- let format = "png";
1482
- if (imageData.format) format = imageData.format;
1483
- else if (imageData.source?.media_type) format = imageData.source.media_type.split("/")[1] || "png";
1484
- if (imageData.source?.bytes) {
1485
- const rawBytes = imageData.source.bytes;
1486
- if (typeof rawBytes === "string") {
1487
- if (rawBytes.startsWith("data:")) {
1488
- const matches = rawBytes.match(/^data:image\/([^;]+);base64,(.+)$/);
1489
- if (matches) {
1490
- format = matches[1] === "jpg" ? "jpeg" : matches[1];
1491
- bytes = Buffer.from(matches[2], "base64");
1492
- }
1493
- } else bytes = Buffer.from(rawBytes, "base64");
1494
- } else if (Buffer.isBuffer(rawBytes)) bytes = rawBytes;
1495
- } else if (imageData.source?.data) bytes = Buffer.from(imageData.source.data, "base64");
1496
- if (bytes) {
1497
- if (format === "jpg") format = "jpeg";
1498
- contentBlocks.push({ image: {
1499
- format,
1500
- source: { bytes }
1501
- } });
1502
- } else logger.warn("Could not parse image content block", { block });
1503
- } else if (block.type === "image_url" || block.image_url) {
1504
- const imageUrl = block.image_url?.url || block.url;
1505
- if (typeof imageUrl === "string" && imageUrl.startsWith("data:")) {
1506
- const matches = imageUrl.match(/^data:image\/([^;]+);base64,(.+)$/);
1507
- if (matches) {
1508
- const format = matches[1] === "jpg" ? "jpeg" : matches[1];
1509
- const bytes = Buffer.from(matches[2], "base64");
1510
- contentBlocks.push({ image: {
1511
- format,
1512
- source: { bytes }
1513
- } });
1514
- }
1515
- } else logger.warn("Unsupported image_url format (only data URLs supported)", { imageUrl });
1516
- } else if (block.type === "document" || block.document) {
1517
- const docData = block.document || block;
1518
- let bytes;
1519
- const format = docData.format || "txt";
1520
- const name = docData.name || "document";
1521
- if (docData.source?.bytes) {
1522
- const rawBytes = docData.source.bytes;
1523
- if (typeof rawBytes === "string") {
1524
- if (rawBytes.startsWith("data:")) {
1525
- const matches = rawBytes.match(/^data:[^;]+;base64,(.+)$/);
1526
- if (matches) bytes = Buffer.from(matches[1], "base64");
1527
- } else bytes = Buffer.from(rawBytes, "base64");
1528
- } else if (Buffer.isBuffer(rawBytes)) bytes = rawBytes;
1529
- }
1530
- if (bytes) contentBlocks.push({ document: {
1531
- format,
1532
- name,
1533
- source: { bytes }
1534
- } });
1535
- else logger.warn("Could not parse document content block", { block });
1536
- } else if (block.type === "tool_use" || block.toolUse) {
1537
- const toolUseData = block.toolUse || block;
1538
- contentBlocks.push({ toolUse: {
1539
- toolUseId: toolUseData.toolUseId || toolUseData.id,
1540
- name: toolUseData.name,
1541
- input: toolUseData.input
1542
- } });
1543
- } else if (block.type === "tool_result" || block.toolResult) {
1544
- const toolResultData = block.toolResult || block;
1545
- contentBlocks.push({ toolResult: {
1546
- toolUseId: toolResultData.toolUseId || toolResultData.tool_use_id,
1547
- content: Array.isArray(toolResultData.content) ? toolResultData.content.map((c) => typeof c === "string" ? { text: c } : c) : [{ text: String(toolResultData.content) }],
1548
- status: toolResultData.status
1549
- } });
1550
- } else contentBlocks.push({ text: JSON.stringify(block) });
1551
- else contentBlocks.push({ text: JSON.stringify(msg.content) });
1552
- messages.push({
1553
- role: msg.role,
1554
- content: contentBlocks
1555
- });
1556
- }
1557
- return {
1558
- messages,
1559
- system: systemMessages.length > 0 ? systemMessages : void 0
1560
- };
1561
- }
1562
- } catch {}
1563
- const lines = prompt.split("\n");
1564
- const messages = [];
1565
- let system;
1566
- let currentRole = null;
1567
- let currentContent = [];
1568
- const pushMessage = () => {
1569
- if (currentRole && currentContent.length > 0) {
1570
- messages.push({
1571
- role: currentRole,
1572
- content: [{ text: currentContent.join("\n") }]
1573
- });
1574
- currentContent = [];
1575
- }
1576
- };
1577
- for (const line of lines) {
1578
- const trimmedLine = line.trim();
1579
- if (trimmedLine.toLowerCase().startsWith("system:")) {
1580
- pushMessage();
1581
- system = [{ text: trimmedLine.slice(7).trim() }];
1582
- currentRole = null;
1583
- } else if (trimmedLine.toLowerCase().startsWith("user:")) {
1584
- pushMessage();
1585
- currentRole = "user";
1586
- const content = trimmedLine.slice(5).trim();
1587
- if (content) currentContent.push(content);
1588
- } else if (trimmedLine.toLowerCase().startsWith("assistant:")) {
1589
- pushMessage();
1590
- currentRole = "assistant";
1591
- const content = trimmedLine.slice(10).trim();
1592
- if (content) currentContent.push(content);
1593
- } else if (currentRole) currentContent.push(line);
1594
- else {
1595
- currentRole = "user";
1596
- currentContent.push(line);
1597
- }
1598
- }
1599
- pushMessage();
1600
- if (messages.length === 0) messages.push({
1601
- role: "user",
1602
- content: [{ text: prompt }]
1603
- });
1604
- return {
1605
- messages,
1606
- system
1607
- };
1608
- }
1609
- /**
1610
- * Extract text output from Converse API response content blocks
1611
- */
1612
- function extractTextFromContentBlocks(content, showThinking = true) {
1613
- const parts = [];
1614
- for (const block of content) if ("text" in block && block.text) parts.push(block.text);
1615
- else if ("reasoningContent" in block && block.reasoningContent) {
1616
- const reasoning = block.reasoningContent;
1617
- if (showThinking) {
1618
- if ("reasoningText" in reasoning && reasoning.reasoningText) {
1619
- const thinkingText = reasoning.reasoningText.text || "";
1620
- const signature = reasoning.reasoningText.signature || "";
1621
- if (thinkingText.trim() !== "") {
1622
- parts.push(`<thinking>\n${thinkingText}\n</thinking>`);
1623
- if (signature) parts.push(`Signature: ${signature}`);
1624
- }
1625
- } else if ("redactedContent" in reasoning && reasoning.redactedContent) parts.push("<thinking>[Redacted]</thinking>");
1626
- }
1627
- } else if ("toolUse" in block && block.toolUse) parts.push(JSON.stringify({
1628
- type: "tool_use",
1629
- id: block.toolUse.toolUseId,
1630
- name: block.toolUse.name,
1631
- input: block.toolUse.input
1632
- }));
1633
- return parts.join("\n\n");
1634
- }
1635
- /**
1636
- * AWS Bedrock Converse API Provider
1637
- */
1638
- var AwsBedrockConverseProvider = class extends AwsBedrockGenericProvider {
1639
- mcpClient = null;
1640
- initializationPromise = null;
1641
- mcpInitError = null;
1642
- registeredForShutdown = false;
1643
- loadedFunctionCallbacks = {};
1644
- forcedToolChoiceRemovalWarned = false;
1645
- constructor(modelName, options = {}) {
1646
- super(modelName, options);
1647
- this.config = options.config || {};
1648
- if (this.config.thinking) telemetry.record("feature_used", {
1649
- feature: "extended_thinking",
1650
- provider: "bedrock_converse"
1651
- });
1652
- if (this.config.reasoningConfig?.type === "enabled") telemetry.record("feature_used", {
1653
- feature: "nova2_reasoning",
1654
- provider: "bedrock_converse"
1655
- });
1656
- if (this.config.tools) telemetry.record("feature_used", {
1657
- feature: "tool_use",
1658
- provider: "bedrock_converse"
1659
- });
1660
- if (this.config.mcp?.enabled && hasUsableMCPServer(this.config.mcp)) this.initializationPromise = this.initializeMCP().catch((err) => {
1661
- this.mcpInitError = err instanceof Error ? err : new Error(String(err));
1662
- logger.error(`[Bedrock Converse] MCP initialization failed: ${this.mcpInitError.message}`);
1663
- });
1664
- }
1665
- id() {
1666
- return `bedrock:converse:${this.modelName}`;
1667
- }
1668
- toString() {
1669
- return `[AWS Bedrock Converse Provider ${this.modelName}]`;
1670
- }
1671
- async initializeMCP() {
1672
- if (!this.config.mcp) return;
1673
- this.mcpClient = new MCPClient(this.config.mcp);
1674
- if (!this.registeredForShutdown) {
1675
- providerRegistry.register(this);
1676
- this.registeredForShutdown = true;
1677
- }
1678
- await this.mcpClient.initialize();
1679
- }
1680
- /**
1681
- * Called by `providerRegistry.shutdownAll()` from the evaluator. Delegates
1682
- * to `cleanup()` so external callers can use either name.
1683
- */
1684
- async shutdown() {
1685
- await this.cleanup();
1686
- }
1687
- /**
1688
- * Releases the MCP client and any spawned transport (e.g. stdio child
1689
- * processes). Safe to call multiple times and resilient to a failed init —
1690
- * partially-initialized state is still attempted to be torn down so we don't
1691
- * leak resources.
1692
- */
1693
- async cleanup() {
1694
- if (!this.mcpClient && this.initializationPromise == null) return;
1695
- if (this.initializationPromise != null) try {
1696
- await this.initializationPromise;
1697
- } catch (err) {
1698
- logger.warn(`[Bedrock Converse] MCP init had failed; cleaning up anyway: ${errorMessage(err)}`);
1699
- }
1700
- if (this.mcpClient) {
1701
- try {
1702
- await this.mcpClient.cleanup();
1703
- } catch (err) {
1704
- logger.error(`[Bedrock Converse] MCP client cleanup failed: ${errorMessage(err)}`);
1705
- }
1706
- this.mcpClient = null;
1707
- }
1708
- this.initializationPromise = null;
1709
- if (this.registeredForShutdown) {
1710
- providerRegistry.unregister(this);
1711
- this.registeredForShutdown = false;
1712
- }
1713
- }
1714
- /**
1715
- * Loads a function from an external file
1716
- * @param fileRef The file reference in the format 'file://path/to/file:functionName'
1717
- * @returns The loaded function
1718
- */
1719
- async loadExternalFunction(fileRef) {
1720
- return loadProviderCallbackFromFileUrl(fileRef, "[Bedrock Converse]");
1721
- }
1722
- /**
1723
- * Executes a function callback with proper error handling
1724
- */
1725
- async executeFunctionCallback(functionName, args, callId) {
1726
- return executeProviderFunctionCallback({
1727
- functionName,
1728
- args,
1729
- callId,
1730
- callbacks: this.config.functionToolCallbacks,
1731
- cache: this.loadedFunctionCallbacks,
1732
- logPrefix: "[Bedrock Converse]"
1733
- });
1734
- }
1735
- /**
1736
- * Build the inference configuration from options
1737
- *
1738
- * Handles Amazon Nova 2 reasoning constraints:
1739
- * - When reasoningConfig.type === 'enabled': temperature/topP must NOT be set
1740
- * - When maxReasoningEffort === 'high': maxTokens must also NOT be set
1741
- */
1742
- buildInferenceConfig() {
1743
- const reasoningEnabled = this.config.reasoningConfig?.type === "enabled";
1744
- const isHighEffort = this.config.reasoningConfig?.maxReasoningEffort === "high";
1745
- const maxTokensValue = this.config.maxTokens ?? this.config.max_tokens ?? getEnvInt("AWS_BEDROCK_MAX_TOKENS") ?? void 0;
1746
- const temperatureValue = this.config.temperature ?? getEnvFloat("AWS_BEDROCK_TEMPERATURE") ?? void 0;
1747
- const topPValue = this.config.topP ?? this.config.top_p ?? getEnvFloat("AWS_BEDROCK_TOP_P");
1748
- let stopSequences = this.config.stopSequences || this.config.stop;
1749
- if (!stopSequences) {
1750
- const envStop = getEnvString("AWS_BEDROCK_STOP");
1751
- if (envStop) try {
1752
- stopSequences = JSON.parse(envStop);
1753
- } catch {}
1754
- }
1755
- const maxTokens = reasoningEnabled && isHighEffort ? void 0 : maxTokensValue;
1756
- const samplingParamsDeprecated = isSamplingParamsDeprecatedClaudeModel(this.modelName);
1757
- let temperature = reasoningEnabled || samplingParamsDeprecated ? void 0 : temperatureValue;
1758
- let topP = reasoningEnabled || samplingParamsDeprecated ? void 0 : topPValue;
1759
- if (this.modelName.includes("anthropic.claude")) {
1760
- const rawThinking = this.config.additionalModelRequestFields?.thinking;
1761
- const { sampling, warnings } = resolveClaudeSamplingParams({
1762
- temperature,
1763
- top_p: topP
1764
- }, {
1765
- thinkingEnabled: isClaudeThinkingEnabled(this.config.thinking ?? rawThinking),
1766
- samplingParamsDeprecated
1767
- });
1768
- for (const warning of warnings) logger.warn(warning);
1769
- temperature = sampling.temperature;
1770
- topP = sampling.top_p;
1771
- }
1772
- if (maxTokens !== void 0 || temperature !== void 0 || topP !== void 0 || stopSequences) return {
1773
- ...maxTokens === void 0 ? {} : { maxTokens },
1774
- ...temperature === void 0 ? {} : { temperature },
1775
- ...topP === void 0 ? {} : { topP },
1776
- ...stopSequences ? { stopSequences } : {}
1777
- };
1778
- }
1779
- /**
1780
- * Build the tool configuration from options
1781
- * Merges prompt.config with provider config, with prompt.config taking precedence
1782
- */
1783
- async buildToolConfig(vars, promptConfig) {
1784
- const configToolChoice = this.getEffectiveToolChoice(promptConfig);
1785
- if (isDisabledToolChoice(configToolChoice)) return;
1786
- const mcpTools = this.mcpClient ? transformMCPToolsToBedrockConverse(this.mcpClient.getAllTools()) : [];
1787
- const configTools = promptConfig?.tools ?? this.config.tools;
1788
- if (mcpTools.length === 0 && (!configTools || configTools.length === 0)) return;
1789
- const tools = configTools ? await maybeLoadToolsFromExternalFile(configTools, vars) : [];
1790
- if (mcpTools.length === 0 && (!tools || tools.length === 0)) return;
1791
- const mcpToolNames = new Set(mcpTools.map((tool) => tool.toolSpec?.name).filter((name) => typeof name === "string"));
1792
- const dedupedConfigTools = (tools || []).filter((tool) => {
1793
- const name = tool.toolSpec?.name ?? tool.function?.name ?? tool.name;
1794
- if (typeof name === "string" && mcpToolNames.has(name)) {
1795
- logger.warn(`[Bedrock Converse] Tool name '${name}' is defined in both config.tools and an MCP server; using the MCP-provided tool.`);
1796
- return false;
1797
- }
1798
- return true;
1799
- });
1800
- const converseTools = convertToolsToConverseFormat([...mcpTools, ...dedupedConfigTools]);
1801
- const requestedToolChoice = configToolChoice ? convertToolChoiceToConverseFormat(configToolChoice) : void 0;
1802
- const modelRejectsForcedToolChoice = isForcedToolChoiceUnsupportedClaudeModel(this.modelName);
1803
- const dropForcedToolChoice = (modelRejectsForcedToolChoice || isAlwaysOnAdaptiveThinkingClaudeModel(this.modelName)) && requestedToolChoice !== void 0 && ("any" in requestedToolChoice || "tool" in requestedToolChoice);
1804
- if (dropForcedToolChoice && !this.forcedToolChoiceRemovalWarned) {
1805
- const modelName = getClaudeModelWarningName(this.modelName) ?? "this Claude model";
1806
- logger.warn(modelRejectsForcedToolChoice ? `Forced tool choice (any/tool) is not supported on ${modelName} and has been omitted. The model decides when to call tools; remove toolChoice to silence this warning.` : `Forced tool choice (any/tool) is incompatible with the always-on adaptive thinking of ${modelName} and has been omitted. The model decides when to call tools; remove toolChoice to silence this warning.`);
1807
- this.forcedToolChoiceRemovalWarned = true;
1808
- }
1809
- const toolChoice = dropForcedToolChoice ? void 0 : requestedToolChoice;
1810
- return {
1811
- tools: converseTools,
1812
- ...toolChoice ? { toolChoice } : {}
1813
- };
1814
- }
1815
- getEffectiveToolChoice(promptConfig) {
1816
- return promptConfig?.tool_choice ?? promptConfig?.toolChoice ?? this.config.tool_choice ?? this.config.toolChoice;
1817
- }
1818
- /**
1819
- * Build the guardrail configuration
1820
- */
1821
- buildGuardrailConfig() {
1822
- if (!this.config.guardrailIdentifier) return;
1823
- return {
1824
- guardrailIdentifier: String(this.config.guardrailIdentifier),
1825
- guardrailVersion: String(this.config.guardrailVersion || "DRAFT"),
1826
- ...this.config.trace ? { trace: this.config.trace } : {}
1827
- };
1828
- }
1829
- /**
1830
- * Build additional model request fields (including thinking config and reasoningConfig)
1831
- */
1832
- buildAdditionalModelRequestFields() {
1833
- const fields = { ...this.config.additionalModelRequestFields || {} };
1834
- const effort = fields.output_config?.effort;
1835
- if (isSamplingParamsDeprecatedClaudeModel(this.modelName)) {
1836
- delete fields.temperature;
1837
- delete fields.top_p;
1838
- delete fields.top_k;
1839
- const additionalThinking = fields.thinking;
1840
- const normalizedThinking = normalizeClaudeThinkingConfig(this.modelName, additionalThinking, effort);
1841
- if (normalizedThinking === void 0) delete fields.thinking;
1842
- else fields.thinking = normalizedThinking;
1843
- }
1844
- if (this.config.thinking) {
1845
- const normalizedThinking = normalizeClaudeThinkingConfig(this.modelName, this.config.thinking, effort);
1846
- if (normalizedThinking !== void 0) fields.thinking = normalizedThinking;
1847
- }
1848
- if (this.config.reasoningConfig) fields.reasoningConfig = this.config.reasoningConfig;
1849
- return Object.keys(fields).length > 0 ? fields : void 0;
1850
- }
1851
- /**
1852
- * Build performance configuration
1853
- */
1854
- buildPerformanceConfig() {
1855
- if (!this.config.performanceConfig) return;
1856
- return { latency: this.config.performanceConfig.latency };
1857
- }
1858
- /**
1859
- * Build service tier configuration
1860
- */
1861
- buildServiceTier() {
1862
- if (!this.config.serviceTier) return;
1863
- return { type: this.config.serviceTier.type };
1864
- }
1865
- /**
1866
- * Main API call using Converse API
1867
- */
1868
- async callApi(prompt, context) {
1869
- const initErrorResponse = await this.awaitMcpReadyForRequest(context);
1870
- if (initErrorResponse) return initErrorResponse;
1871
- const inferenceConfig = this.buildInferenceConfig();
1872
- const spanContext = {
1873
- system: "bedrock",
1874
- operationName: "chat",
1875
- model: this.modelName,
1876
- providerId: this.id(),
1877
- maxTokens: inferenceConfig?.maxTokens,
1878
- temperature: inferenceConfig?.temperature,
1879
- topP: inferenceConfig?.topP,
1880
- stopSequences: inferenceConfig?.stopSequences,
1881
- testIndex: context?.testIdx ?? context?.test?.vars?.__testIdx,
1882
- promptLabel: context?.prompt?.label,
1883
- traceparent: context?.traceparent
1884
- };
1885
- const resultExtractor = (response) => {
1886
- const result = {};
1887
- if (response.tokenUsage) result.tokenUsage = {
1888
- prompt: response.tokenUsage.prompt,
1889
- completion: response.tokenUsage.completion,
1890
- total: response.tokenUsage.total
1891
- };
1892
- const stopReason = response.metadata?.stopReason;
1893
- if (stopReason) result.finishReasons = [stopReason];
1894
- return result;
1895
- };
1896
- return withGenAISpan(spanContext, () => this.callApiInternal(prompt, context), resultExtractor);
1897
- }
1898
- /**
1899
- * Internal implementation of callApi without tracing wrapper.
1900
- */
1901
- async callApiInternal(prompt, context) {
1902
- const { messages, system } = parseConverseMessages(prompt);
1903
- const inferenceConfig = this.buildInferenceConfig();
1904
- const toolConfig = await this.buildToolConfig(context?.vars, context?.prompt?.config);
1905
- const toolsDisabled = this.isRequestToolsDisabled(context);
1906
- const guardrailConfig = this.buildGuardrailConfig();
1907
- const additionalModelRequestFields = this.buildAdditionalModelRequestFields();
1908
- const betweenToolsThinking = additionalModelRequestFields?.thinking?.type === "between_tools";
1909
- const performanceConfig = this.buildPerformanceConfig();
1910
- const serviceTier = this.buildServiceTier();
1911
- const converseInput = {
1912
- modelId: this.modelName,
1913
- messages,
1914
- ...system ? { system } : {},
1915
- ...inferenceConfig ? { inferenceConfig } : {},
1916
- ...toolConfig ? { toolConfig } : {},
1917
- ...guardrailConfig ? { guardrailConfig } : {},
1918
- ...additionalModelRequestFields ? { additionalModelRequestFields } : {},
1919
- ...this.config.additionalModelResponseFieldPaths ? { additionalModelResponseFieldPaths: this.config.additionalModelResponseFieldPaths } : {},
1920
- ...performanceConfig ? { performanceConfig } : {},
1921
- ...serviceTier ? { serviceTier } : {}
1922
- };
1923
- logger.debug("Calling AWS Bedrock Converse API", {
1924
- modelId: this.modelName,
1925
- messageCount: messages.length,
1926
- hasSystem: !!system,
1927
- hasTools: !!toolConfig,
1928
- hasThinking: !!this.config.thinking
1929
- });
1930
- const cache = await getCache();
1931
- const region = this.getRegion();
1932
- const cacheKey = `bedrock:converse:${this.modelName}:${region}:${createBedrockCacheKeyHash({
1933
- config: this.config,
1934
- params: converseInput,
1935
- region
1936
- })}`;
1937
- if (isCacheEnabled()) {
1938
- const cachedResponse = await cache.get(cacheKey);
1939
- if (cachedResponse) {
1940
- logger.debug("Returning cached response");
1941
- const parsed = JSON.parse(cachedResponse);
1942
- return {
1943
- ...await this.parseResponse(parsed, toolsDisabled, betweenToolsThinking),
1944
- cached: true
1945
- };
1946
- }
1947
- }
1948
- let response;
1949
- try {
1950
- const bedrockInstance = await this.getBedrockInstance();
1951
- const { ConverseCommand } = await import("@aws-sdk/client-bedrock-runtime");
1952
- const command = new ConverseCommand(converseInput);
1953
- response = await bedrockInstance.send(command);
1954
- } catch (err) {
1955
- const errorMessage = err?.message || String(err);
1956
- logger.error("Bedrock Converse API error", { error: errorMessage });
1957
- if (errorMessage.includes("ValidationException")) return { error: `Bedrock Converse API validation error: ${errorMessage}. Check that your model supports the Converse API and all parameters are valid.` };
1958
- if (errorMessage.includes("AccessDeniedException")) return { error: `Bedrock access denied: ${errorMessage}. Ensure you have bedrock:InvokeModel permission and model access is enabled.` };
1959
- return { error: `Bedrock Converse API error: ${errorMessage}` };
1960
- }
1961
- if (isCacheEnabled()) try {
1962
- await cache.set(cacheKey, JSON.stringify(response));
1963
- } catch (err) {
1964
- logger.error(`Failed to cache response: ${String(err)}`);
1965
- }
1966
- logger.debug("Bedrock Converse API response received", {
1967
- stopReason: response.stopReason,
1968
- hasUsage: !!response.usage,
1969
- hasMetrics: !!response.metrics
1970
- });
1971
- return await this.parseResponse(response, toolsDisabled, betweenToolsThinking);
1972
- }
1973
- /**
1974
- * Resolves the effective tool choice for a request without touching the MCP
1975
- * client. Used by `callApi`/`callApiStreaming` to short-circuit MCP init for
1976
- * tool-disabled requests so a hung MCP transport never stalls them, and to supply
1977
- * the `toolsDisabled` flag those methods pass on to `parseResponse`.
1978
- */
1979
- isRequestToolsDisabled(context) {
1980
- return isDisabledToolChoice(this.getEffectiveToolChoice(context?.prompt?.config));
1981
- }
1982
- /**
1983
- * Awaits MCP init only when this request actually needs MCP, then returns an
1984
- * error response if init failed. Tool-disabled requests skip both the wait
1985
- * and the error check entirely so they can proceed even with MCP offline.
1986
- * Returns `undefined` when the request can proceed.
1987
- */
1988
- async awaitMcpReadyForRequest(context) {
1989
- if (this.isRequestToolsDisabled(context)) return;
1990
- if (this.initializationPromise != null) await this.initializationPromise;
1991
- if (!this.mcpInitError) return;
1992
- return { error: `Bedrock Converse MCP initialization failed: ${this.mcpInitError.message}` };
1993
- }
1994
- /**
1995
- * Invoke a single MCP tool and return a formatted result string plus the
1996
- * error string (if any). Centralizes the try/catch + error-message wrapping
1997
- * shared by streaming and non-streaming dispatch paths. Caller is
1998
- * responsible for ensuring `this.mcpClient` is non-null and that `name`
1999
- * matches a discovered MCP tool.
2000
- */
2001
- async dispatchMcpToolCall(name, input) {
2002
- try {
2003
- const mcpResult = await this.mcpClient.callTool(name, parseToolInput(input));
2004
- if (isMcpErrorResult(mcpResult)) {
2005
- const msg = formatMcpToolError(name, getMcpErrorMessage(mcpResult));
2006
- return {
2007
- output: msg,
2008
- error: msg
2009
- };
2010
- }
2011
- return { output: formatMcpToolResult(name, mcpResult?.content) };
2012
- } catch (err) {
2013
- logger.error(`[Bedrock Converse] MCP tool execution failed for ${name}: ${err}`);
2014
- const msg = formatMcpToolError(name, errorMessage(err));
2015
- return {
2016
- output: msg,
2017
- error: msg
2018
- };
2019
- }
2020
- }
2021
- /**
2022
- * Format streaming tool_use blocks for output. Routes blocks to MCP when
2023
- * MCP is enabled and a matching tool exists; otherwise falls back to
2024
- * default tool_use JSON serialization.
2025
- */
2026
- async formatStreamingToolUseBlocks(blocks, toolsDisabled) {
2027
- const toolUseParts = [];
2028
- const mcpErrors = [];
2029
- const mcpTools = this.mcpClient?.getAllTools() ?? [];
2030
- for (const toolBlock of blocks) {
2031
- if (!toolBlock.name) continue;
2032
- const { value: parsedInput, failed: parseFailed } = parseStreamingToolInput(toolBlock.input);
2033
- const matchedMcpTool = mcpTools.find((tool) => tool.name === toolBlock.name);
2034
- if (toolsDisabled || !this.mcpClient || !matchedMcpTool) {
2035
- toolUseParts.push(JSON.stringify({
2036
- type: "tool_use",
2037
- id: toolBlock.toolUseId,
2038
- name: toolBlock.name,
2039
- input: parsedInput
2040
- }));
2041
- continue;
2042
- }
2043
- if (parseFailed) {
2044
- const msg = formatMcpToolError(toolBlock.name, "model emitted invalid JSON arguments");
2045
- toolUseParts.push(msg);
2046
- mcpErrors.push(msg);
2047
- continue;
2048
- }
2049
- const { output, error } = await this.dispatchMcpToolCall(toolBlock.name, parsedInput);
2050
- toolUseParts.push(output);
2051
- if (error) mcpErrors.push(error);
2052
- }
2053
- return {
2054
- toolUseParts,
2055
- mcpErrors
2056
- };
2057
- }
2058
- /**
2059
- * Execute MCP tool calls for the given tool_use blocks. Blocks whose name
2060
- * doesn't match a discovered MCP tool are skipped silently; the caller is
2061
- * responsible for deciding what to do with them. Returns formatted result
2062
- * strings and any errors encountered.
2063
- */
2064
- async executeMcpToolCalls(blocks) {
2065
- const results = [];
2066
- const errors = [];
2067
- if (!this.mcpClient) return {
2068
- results,
2069
- errors
2070
- };
2071
- const tools = this.mcpClient.getAllTools();
2072
- for (const { name, input } of blocks) {
2073
- if (!name || !tools.find((tool) => tool.name === name)) continue;
2074
- const { output, error } = await this.dispatchMcpToolCall(name, input);
2075
- results.push(output);
2076
- if (error) errors.push(error);
2077
- }
2078
- return {
2079
- results,
2080
- errors
2081
- };
2082
- }
2083
- /**
2084
- * Parse the Converse API response into ProviderResponse format
2085
- */
2086
- async parseResponse(response, toolsDisabled = false, betweenToolsThinking = false) {
2087
- const content = (response.output?.message)?.content || [];
2088
- const showThinking = this.config.showThinking !== false;
2089
- const usage = response.usage;
2090
- const promptTokens = usage?.inputTokens;
2091
- const completionTokens = usage?.outputTokens;
2092
- const totalTokens = usage?.totalTokens;
2093
- const cacheReadTokens = usage?.cacheReadInputTokens;
2094
- const cacheWriteTokens = usage?.cacheWriteInputTokens;
2095
- const cacheWrite1hTokens = getOneHourCacheWriteTokens(usage?.cacheDetails);
2096
- const tokenUsage = {
2097
- prompt: promptTokens,
2098
- completion: completionTokens,
2099
- total: totalTokens || (promptTokens || 0) + (completionTokens || 0),
2100
- numRequests: 1
2101
- };
2102
- const cost = calculateBedrockCost(this.modelName, promptTokens, completionTokens, cacheReadTokens, cacheWriteTokens, this.getRegion(), this.config.serviceTier, cacheWrite1hTokens);
2103
- const metadata = {};
2104
- if (response.metrics?.latencyMs) metadata.latencyMs = response.metrics.latencyMs;
2105
- if (response.stopReason) metadata.stopReason = response.stopReason;
2106
- if (cacheReadTokens !== void 0 || cacheWriteTokens !== void 0) metadata.cacheTokens = {
2107
- read: cacheReadTokens,
2108
- write: cacheWriteTokens
2109
- };
2110
- if (response.performanceConfig) metadata.performanceConfig = response.performanceConfig;
2111
- if (response.serviceTier) metadata.serviceTier = response.serviceTier;
2112
- if (response.additionalModelResponseFields) metadata.additionalModelResponseFields = response.additionalModelResponseFields;
2113
- if (response.trace) metadata.trace = response.trace;
2114
- const guardrails = response.stopReason === "guardrail_intervened" ? {
2115
- flagged: true,
2116
- reason: "guardrail_intervened"
2117
- } : void 0;
2118
- let malformedError;
2119
- if (response.stopReason === "malformed_model_output") {
2120
- malformedError = "Model produced invalid output. The response could not be parsed correctly.";
2121
- metadata.isModelError = true;
2122
- } else if (response.stopReason === "malformed_tool_use") {
2123
- malformedError = "Model produced a malformed tool use request. Check tool configuration and input schema.";
2124
- metadata.isModelError = true;
2125
- }
2126
- const toolUseBlocks = content.filter((block) => "toolUse" in block && block.toolUse !== void 0);
2127
- const mcpToolNames = new Set(this.mcpClient ? this.mcpClient.getAllTools().map((tool) => tool.name) : []);
2128
- const dispatchResults = [];
2129
- const mcpErrors = [];
2130
- const handledIndexes = /* @__PURE__ */ new Set();
2131
- if (!toolsDisabled && toolUseBlocks.length > 0) {
2132
- const mcpEligible = [];
2133
- toolUseBlocks.forEach((block, idx) => {
2134
- const name = block.toolUse.name;
2135
- if (this.mcpClient && name && mcpToolNames.has(name)) mcpEligible.push({
2136
- idx,
2137
- name,
2138
- input: block.toolUse.input
2139
- });
2140
- });
2141
- if (mcpEligible.length > 0) {
2142
- const mcpResult = await this.executeMcpToolCalls(mcpEligible);
2143
- for (const { idx } of mcpEligible) handledIndexes.add(idx);
2144
- dispatchResults.push(...mcpResult.results);
2145
- mcpErrors.push(...mcpResult.errors);
2146
- }
2147
- if (this.config.functionToolCallbacks) for (let idx = 0; idx < toolUseBlocks.length; idx++) {
2148
- if (handledIndexes.has(idx)) continue;
2149
- const block = toolUseBlocks[idx];
2150
- const functionName = block.toolUse.name;
2151
- if (!functionName || !this.config.functionToolCallbacks[functionName]) continue;
2152
- try {
2153
- const args = typeof block.toolUse.input === "string" ? block.toolUse.input : JSON.stringify(block.toolUse.input || {});
2154
- const result = await this.executeFunctionCallback(functionName, args, block.toolUse.toolUseId);
2155
- dispatchResults.push(result);
2156
- handledIndexes.add(idx);
2157
- } catch (err) {
2158
- logger.warn(`[Bedrock Converse] Function callback failed for ${functionName}: ${errorMessage(err)}; falling back to tool_use output`);
2159
- }
2160
- }
2161
- }
2162
- if (!toolsDisabled && toolUseBlocks.length > 0 && handledIndexes.size < toolUseBlocks.length) {
2163
- const fallbackText = extractTextFromContentBlocks(toolUseBlocks.filter((_, idx) => !handledIndexes.has(idx)).map((block) => ({ toolUse: block.toolUse })), showThinking);
2164
- if (fallbackText) dispatchResults.push(fallbackText);
2165
- }
2166
- if (dispatchResults.length > 0) {
2167
- if (betweenToolsThinking) {
2168
- const progress = extractTextFromContentBlocks(content.filter((block) => block.reasoningContent), showThinking);
2169
- if (progress) dispatchResults.unshift(progress);
2170
- }
2171
- const error = malformedError ?? joinMcpErrors(mcpErrors);
2172
- return {
2173
- output: dispatchResults.join("\n"),
2174
- tokenUsage,
2175
- ...cost === void 0 ? {} : { cost },
2176
- ...Object.keys(metadata).length > 0 ? { metadata } : {},
2177
- ...guardrails ? { guardrails } : {},
2178
- ...error ? { error } : {}
2179
- };
2180
- }
2181
- return {
2182
- output: extractTextFromContentBlocks(content, showThinking),
2183
- tokenUsage,
2184
- ...cost === void 0 ? {} : { cost },
2185
- ...Object.keys(metadata).length > 0 ? { metadata } : {},
2186
- ...guardrails ? { guardrails } : {},
2187
- ...malformedError ? { error: malformedError } : {}
2188
- };
2189
- }
2190
- /**
2191
- * Streaming API call using ConverseStream.
2192
- *
2193
- * Tool handling in streaming mode:
2194
- * - **MCP tools** ARE executed automatically when an MCP server is
2195
- * configured and the model emits a `tool_use` block matching a discovered
2196
- * MCP tool. Results (or error strings) are inlined in the response output.
2197
- * - **`functionToolCallbacks`** are NOT executed in streaming mode. Local
2198
- * callback dispatch only runs in non-streaming `callApi`. Streaming
2199
- * `tool_use` blocks for non-MCP tools fall through to the default
2200
- * `{ "type": "tool_use", ... }` JSON serialization.
2201
- *
2202
- * Use non-streaming mode if you need automatic local callback execution.
2203
- */
2204
- async callApiStreaming(prompt, context) {
2205
- const initErrorResponse = await this.awaitMcpReadyForRequest(context);
2206
- if (initErrorResponse) return initErrorResponse;
2207
- const { messages, system } = parseConverseMessages(prompt);
2208
- const inferenceConfig = this.buildInferenceConfig();
2209
- const toolConfig = await this.buildToolConfig(context?.vars, context?.prompt?.config);
2210
- const toolsDisabled = this.isRequestToolsDisabled(context);
2211
- const guardrailConfig = this.buildGuardrailConfig();
2212
- const additionalModelRequestFields = this.buildAdditionalModelRequestFields();
2213
- const performanceConfig = this.buildPerformanceConfig();
2214
- const serviceTier = this.buildServiceTier();
2215
- const converseStreamInput = {
2216
- modelId: this.modelName,
2217
- messages,
2218
- ...system ? { system } : {},
2219
- ...inferenceConfig ? { inferenceConfig } : {},
2220
- ...toolConfig ? { toolConfig } : {},
2221
- ...guardrailConfig ? { guardrailConfig } : {},
2222
- ...additionalModelRequestFields ? { additionalModelRequestFields } : {},
2223
- ...performanceConfig ? { performanceConfig } : {},
2224
- ...serviceTier ? { serviceTier } : {}
2225
- };
2226
- logger.debug("Calling AWS Bedrock ConverseStream API", {
2227
- modelId: this.modelName,
2228
- messageCount: messages.length
2229
- });
2230
- try {
2231
- const bedrockInstance = await this.getBedrockInstance();
2232
- const { ConverseStreamCommand } = await import("@aws-sdk/client-bedrock-runtime");
2233
- const command = new ConverseStreamCommand(converseStreamInput);
2234
- const response = await bedrockInstance.send(command);
2235
- let output = "";
2236
- let reasoning = "";
2237
- let stopReason;
2238
- let usage = {};
2239
- const toolUseBlocks = /* @__PURE__ */ new Map();
2240
- const showThinking = this.config.showThinking !== false;
2241
- if (response.stream) for await (const event of response.stream) {
2242
- if ("contentBlockStart" in event && event.contentBlockStart) {
2243
- const blockIndex = event.contentBlockStart.contentBlockIndex ?? 0;
2244
- const start = event.contentBlockStart.start;
2245
- if (start && "toolUse" in start && start.toolUse) toolUseBlocks.set(blockIndex, {
2246
- toolUseId: start.toolUse.toolUseId,
2247
- name: start.toolUse.name,
2248
- input: ""
2249
- });
2250
- }
2251
- if ("contentBlockDelta" in event && event.contentBlockDelta?.delta) {
2252
- const delta = event.contentBlockDelta.delta;
2253
- const blockIndex = event.contentBlockDelta.contentBlockIndex ?? 0;
2254
- if ("text" in delta && delta.text) output += delta.text;
2255
- if ("reasoningContent" in delta && delta.reasoningContent && showThinking) {
2256
- const rc = delta.reasoningContent;
2257
- if (rc.text) reasoning += rc.text;
2258
- }
2259
- if ("toolUse" in delta && delta.toolUse) {
2260
- const toolBlock = toolUseBlocks.get(blockIndex);
2261
- if (toolBlock && delta.toolUse.input) toolBlock.input += delta.toolUse.input;
2262
- }
2263
- }
2264
- if ("messageStop" in event && event.messageStop) stopReason = event.messageStop.stopReason;
2265
- if ("metadata" in event && event.metadata?.usage) usage = event.metadata.usage;
2266
- }
2267
- const { toolUseParts, mcpErrors } = await this.formatStreamingToolUseBlocks(Array.from(toolUseBlocks.values()), toolsDisabled);
2268
- const parts = [];
2269
- if (reasoning.trim()) parts.push(`<thinking>\n${reasoning}\n</thinking>`);
2270
- if (output) parts.push(output);
2271
- if (toolUseParts.length > 0) parts.push(...toolUseParts);
2272
- const finalOutput = parts.join("\n\n");
2273
- let malformedError;
2274
- const metadata = {};
2275
- if (stopReason) metadata.stopReason = stopReason;
2276
- if (stopReason === "malformed_model_output") {
2277
- malformedError = "Model produced invalid output. The response could not be parsed correctly.";
2278
- metadata.isModelError = true;
2279
- } else if (stopReason === "malformed_tool_use") {
2280
- malformedError = "Model produced a malformed tool use request. Check tool configuration and input schema.";
2281
- metadata.isModelError = true;
2282
- }
2283
- const tokenUsage = {
2284
- prompt: usage.inputTokens,
2285
- completion: usage.outputTokens,
2286
- total: usage.totalTokens || (usage.inputTokens || 0) + (usage.outputTokens || 0),
2287
- numRequests: 1
2288
- };
2289
- const cost = calculateBedrockCost(this.modelName, usage.inputTokens, usage.outputTokens, usage.cacheReadInputTokens, usage.cacheWriteInputTokens, this.getRegion(), this.config.serviceTier, getOneHourCacheWriteTokens(usage.cacheDetails));
2290
- const error = malformedError ?? joinMcpErrors(mcpErrors);
2291
- return {
2292
- output: finalOutput,
2293
- tokenUsage,
2294
- ...cost === void 0 ? {} : { cost },
2295
- ...Object.keys(metadata).length > 0 ? { metadata } : {},
2296
- ...error ? { error } : {}
2297
- };
2298
- } catch (err) {
2299
- return { error: `Bedrock ConverseStream API error: ${err?.message || String(err)}` };
2300
- }
2301
- }
2302
- };
2303
- //#endregion
2304
- //#region src/providers/families/aws.ts
2305
- const NOVA_SONIC_MODEL_IDS = /* @__PURE__ */ new Set(["amazon.nova-sonic-v1:0", "amazon.nova-2-sonic-v1:0"]);
2306
- function isUnsupportedNovaSonicGeoId(modelName) {
2307
- return /^[^.]+\.amazon\.nova(?:-2)?-sonic-v1:0$/.test(modelName);
2308
- }
2309
- const awsProviderFactories = [
2310
- {
2311
- test: (providerPath) => providerPath.startsWith("bedrock:"),
2312
- create: async (providerPath, providerOptions) => {
2313
- const splits = providerPath.split(":");
2314
- const modelType = splits[1];
2315
- const modelName = splits.slice(2).join(":");
2316
- const textRoute = getBedrockTextRoute(providerPath);
2317
- const isLegacyType = modelType === "converse" || modelType === "completion";
2318
- const bareModelName = splits.slice(1).join(":");
2319
- const novaSonicSubtype = modelType === "nova-sonic" ? {
2320
- expectedModel: "amazon.nova-sonic-v1:0",
2321
- name: "nova-sonic"
2322
- } : modelType === "nova-2-sonic" ? {
2323
- expectedModel: "amazon.nova-2-sonic-v1:0",
2324
- name: "nova-2-sonic"
2325
- } : void 0;
2326
- if (novaSonicSubtype && modelName) {
2327
- if (!NOVA_SONIC_MODEL_IDS.has(modelName)) throw new Error(`Amazon Bedrock model "${modelName}" is an unsupported Nova Sonic model ID. Use "bedrock:${novaSonicSubtype.name}:${novaSonicSubtype.expectedModel}".`);
2328
- if (modelName !== novaSonicSubtype.expectedModel) throw new Error(`Amazon Bedrock model "${modelName}" does not match provider subtype "${novaSonicSubtype.name}". Use "bedrock:${novaSonicSubtype.name}:${novaSonicSubtype.expectedModel}".`);
2329
- }
2330
- const requestedNovaSonicModel = novaSonicSubtype && !modelName ? novaSonicSubtype.expectedModel : NOVA_SONIC_MODEL_IDS.has(bareModelName) ? bareModelName : (modelType === "nova-sonic" || modelType === "nova-2-sonic") && NOVA_SONIC_MODEL_IDS.has(modelName) ? modelName : void 0;
2331
- if (isUnsupportedNovaSonicGeoId(bareModelName) || isUnsupportedNovaSonicGeoId(modelName)) {
2332
- const rejectedModel = isUnsupportedNovaSonicGeoId(bareModelName) ? bareModelName : modelName;
2333
- const unprefixedModel = rejectedModel.replace(/^[^.]+\./, "");
2334
- throw new Error(`Amazon Bedrock model "${rejectedModel}" does not support geo inference IDs. Use the bare "bedrock:${unprefixedModel}" model ID in a supported region.`);
2335
- }
2336
- if (isLegacyType && NOVA_SONIC_MODEL_IDS.has(modelName)) throw new Error(`Amazon Bedrock model "${modelName}" supports only InvokeModelWithBidirectionalStream, not Converse or InvokeModel. Use its bare bedrock model ID.`);
2337
- if (requestedNovaSonicModel) {
2338
- const { NovaSonicProvider } = await import("./nova-sonic-BaERP20w.js");
2339
- return new NovaSonicProvider(requestedNovaSonicModel, providerOptions);
2340
- }
2341
- const anthropicModel = modelType === "messages" ? modelName : splits.length === 2 ? splits[1] : isLegacyType ? modelName : void 0;
2342
- if (anthropicModel && isRejectedPrefixedMythosId(anthropicModel)) throw new Error(`Amazon Bedrock model "${anthropicModel}" is not a valid Mythos model ID. Use "bedrock:anthropic.claude-mythos-5"; Mythos does not support geo or global inference IDs.`);
2343
- if (anthropicModel && /^(?:(?:us|global)\.)?anthropic\.claude-/.test(anthropicModel)) {
2344
- const { createBedrockAnthropicMessagesProvider } = await import("./anthropicMessages-DTWhZDCd.js");
2345
- if (requiresBedrockAnthropicMessagesModel(anthropicModel) && isLegacyType) throw new Error(`Amazon Bedrock model "${anthropicModel}" uses the Anthropic Messages API, not ${modelType === "converse" ? "Converse" : "InvokeModel"}. Use "bedrock:${anthropicModel}" or "bedrock:messages:${anthropicModel}".`);
2346
- if (isBedrockAnthropicMessagesModel(anthropicModel) && textRoute?.apiMode === "messages") return createBedrockAnthropicMessagesProvider(anthropicModel, {
2347
- ...providerOptions,
2348
- id: providerOptions.id ?? providerPath
2349
- });
2350
- }
2351
- if (modelType === "messages") throw new Error(`Amazon Bedrock model "${modelName}" is not supported by the Anthropic Messages provider. Use a us. or global. inference profile for Fable/Mythos 5.1. Mantle supports anthropic.claude-fable-5, anthropic.claude-mythos-5, and anthropic.claude-fable-5-1 (GovCloud West).`);
2352
- if (modelType === "responses") {
2353
- if (!modelName) throw new Error("Amazon Bedrock Responses providers require a model id. Use bedrock:responses:<model-id>, for example bedrock:responses:openai.gpt-oss-120b.");
2354
- const { createBedrockOpenAiResponsesProvider } = await import("./openaiResponses-DC8rzFUc.js");
2355
- return createBedrockOpenAiResponsesProvider(modelName, {
2356
- ...providerOptions,
2357
- id: providerOptions.id ?? providerPath
2358
- });
2359
- }
2360
- const candidateResponsesModel = modelType === "converse" || modelType === "completion" ? modelName : splits.length === 2 ? splits[1] : void 0;
2361
- const routedGrokModel = modelType === "mantle" ? modelName : candidateResponsesModel;
2362
- if (routedGrokModel && isRejectedPrefixedGrokId(routedGrokModel, modelType === "mantle")) throw new Error(`Amazon Bedrock model "${routedGrokModel}" is not a valid Grok mantle id. Use the bare "bedrock:xai.grok-4.3" id for mantle-served Grok models, or an inference profile such as "bedrock:converse:us.xai.grok-4.6" for Grok models Bedrock serves natively.`);
2363
- if (textRoute?.apiMode === "responses") {
2364
- const { createBedrockOpenAiResponsesProvider } = await import("./openaiResponses-DC8rzFUc.js");
2365
- return createBedrockOpenAiResponsesProvider(textRoute.modelId, {
2366
- ...providerOptions,
2367
- id: providerOptions.id ?? providerPath
2368
- });
2369
- }
2370
- if (modelType === "mantle") {
2371
- const { createBedrockMantleChatProvider } = await import("./mantleChat-D--mW3hl.js");
2372
- return createBedrockMantleChatProvider(modelName, {
2373
- ...providerOptions,
2374
- id: providerOptions.id ?? providerPath
2375
- });
2376
- }
2377
- if (modelType === "converse") {
2378
- const { assertBedrockModelIsAvailable } = await import("./bedrock-DDrECM21.js");
2379
- assertBedrockModelIsAvailable(modelName);
2380
- return new AwsBedrockConverseProvider(modelName, providerOptions);
2381
- }
2382
- if (modelType.includes("luma.ray") || modelName.includes("luma.ray")) {
2383
- const { LumaRayVideoProvider } = await import("./luma-ray-BIvkPw0s.js");
2384
- return new LumaRayVideoProvider(modelName.includes("luma.ray") ? modelName : splits.slice(1).join(":"), providerOptions);
2385
- }
2386
- if (modelType.includes("amazon.nova-reel") || modelType === "video" && (modelName.includes("amazon.nova-reel") || modelName === "")) {
2387
- const { NovaReelVideoProvider } = await import("./nova-reel-YhgrxEKT.js");
2388
- return new NovaReelVideoProvider(modelType === "video" ? modelName || "amazon.nova-reel-v1:1" : splits.slice(1).join(":"), providerOptions);
2389
- }
2390
- if (modelType === "agents") {
2391
- const { AwsBedrockAgentsProvider } = await import("./agents-sICccZCA.js");
2392
- return new AwsBedrockAgentsProvider(modelName, providerOptions);
2393
- }
2394
- if (modelType === "completion") return new AwsBedrockCompletionProvider(modelName, providerOptions);
2395
- if (modelType === "embeddings" || modelType === "embedding") return new AwsBedrockEmbeddingProvider(modelName, providerOptions);
2396
- if (modelType === "kb" || modelType === "knowledge-base") {
2397
- const { AwsBedrockKnowledgeBaseProvider } = await import("./knowledgeBase-BNqQfx01.js");
2398
- return new AwsBedrockKnowledgeBaseProvider(modelName, providerOptions);
2399
- }
2400
- return new AwsBedrockCompletionProvider(splits.slice(1).join(":"), providerOptions);
2401
- }
2402
- },
2403
- {
2404
- test: (providerPath) => providerPath.startsWith("bedrock-agent:"),
2405
- create: async (providerPath, providerOptions) => {
2406
- const agentId = providerPath.substring(14);
2407
- const { AwsBedrockAgentsProvider } = await import("./agents-sICccZCA.js");
2408
- return new AwsBedrockAgentsProvider(agentId, providerOptions);
2409
- }
2410
- },
2411
- {
2412
- test: (providerPath) => providerPath.startsWith("sagemaker:"),
2413
- create: async (providerPath, providerOptions) => {
2414
- const splits = providerPath.split(":");
2415
- const modelType = splits[1];
2416
- const endpointName = splits.slice(2).join(":");
2417
- const { SageMakerCompletionProvider, SageMakerEmbeddingProvider } = await import("./sagemaker-l3IB8iTs.js");
2418
- if (modelType === "embedding" || modelType === "embeddings") return new SageMakerEmbeddingProvider(endpointName || modelType, providerOptions);
2419
- if (splits.length === 2) return new SageMakerCompletionProvider(modelType, providerOptions);
2420
- return new SageMakerCompletionProvider(endpointName, {
2421
- ...providerOptions,
2422
- config: {
2423
- ...providerOptions.config,
2424
- modelType
2425
- }
2426
- });
2427
- }
2428
- }
2429
- ];
2430
- //#endregion
2431
- export { getLlamaModelHandler as _, LlamaVersion as a, awsProviderFactories, assertBedrockModelIsAvailable as c, extractTextContent as d, formatPromptLlama2Chat as f, getHandlerForModel as g, formatPromptLlama4 as h, BEDROCK_MODEL as i, coerceStrToNum as l, formatPromptLlama3Instruct as m, AwsBedrockCompletionProvider as n, RETIRED_BEDROCK_MODELS as o, formatPromptLlama32Vision as p, AwsBedrockEmbeddingProvider as r, addConfigParam as s, AWS_BEDROCK_MODELS as t, extractTextAndImages as u, parseValue as v };
2432
-
2433
- //# sourceMappingURL=aws-B2Jqbnet.js.map