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