promptfoo 0.121.4 → 0.121.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/{ListApp-DQkFNqE9.js → ListApp-DLmM02JS.js} +1 -1
- package/dist/src/{accounts-DhMYUUbu.js → accounts-Ca7WIoPY.js} +12 -7
- package/dist/src/{accounts-F9d_5sMC.js → accounts-CjFnOPmb.js} +14 -9
- package/dist/src/{accounts-Dy17bs4D.cjs → accounts-CmWzeD2d.cjs} +16 -10
- package/dist/src/{accounts-DdJ2pHMI.js → accounts-DanM1wq_.js} +13 -8
- package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-CJ0j3fBi.js} +3 -3
- package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-DDEGRV9v.js} +3 -3
- package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
- package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-TxUEMPYS.js} +2 -2
- package/dist/src/{agents-BahDpe5G.cjs → agents-B4sRuXg3.cjs} +7 -6
- package/dist/src/{agents-pQeBEXMm.js → agents-B8q7h_ek.js} +5 -5
- package/dist/src/{agents-CgaMXvLM.js → agents-CBgJvRkB.js} +21 -10
- package/dist/src/{agents-C-R_jfzI.js → agents-CYn2n3QP.js} +4 -4
- package/dist/src/{agents-8FDnTriG.js → agents-D-vDNFx4.js} +21 -10
- package/dist/src/{agents-aYPQLf8W.js → agents-LrHuQqr1.js} +20 -9
- package/dist/src/{agents-DJ35I3Nt.js → agents-QGg76OF-.js} +5 -5
- package/dist/src/{agents-D7-HGxUj.cjs → agents-eHZ9nlgA.cjs} +21 -10
- package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-CJEbQ0o6.js} +7 -7
- package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-D5HXzZ0s.js} +6 -6
- package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
- package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-eYv3a_DK.js} +7 -7
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/app/assets/Report-BNHJKN35.js +1 -0
- package/dist/src/app/assets/index-BnT6P6sF.js +388 -0
- package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
- package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
- package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
- package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
- package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
- package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
- package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
- package/dist/src/app/index.html +31 -6
- package/dist/src/{audio-COrn8rM6.js → audio-BqnRvcWG.js} +3 -3
- package/dist/src/{audio-DcVKoInv.js → audio-CPMtV1yR.js} +4 -4
- package/dist/src/{audio-B7izf48x.js → audio-DyiebVB3.js} +4 -4
- package/dist/src/{audio-BQtNuYBj.cjs → audio-FnxbEnSE.cjs} +4 -4
- package/dist/src/authoritativeMarkupInjection-BZIywVjG.js +74 -0
- package/dist/src/authoritativeMarkupInjection-DyAXAsSr.js +75 -0
- package/dist/src/authoritativeMarkupInjection-F2gBw0lN.cjs +74 -0
- package/dist/src/authoritativeMarkupInjection-QEQmFS83.js +74 -0
- package/dist/src/{base-PYJvBE1i.js → base-CKLo890h.js} +4 -3
- package/dist/src/{base-fZ9wgg50.js → base-Co80MMCi.js} +5 -4
- package/dist/src/{base-D-670DX8.cjs → base-DGJW48uz.cjs} +5 -4
- package/dist/src/{base-yrI1Yal4.js → base-E9I8zXjz.js} +5 -4
- package/dist/src/bestOfN-B3wNzjSB.js +137 -0
- package/dist/src/bestOfN-BBsO41z4.js +136 -0
- package/dist/src/bestOfN-CAwmg5UL.cjs +140 -0
- package/dist/src/bestOfN-_kTi8Bxe.js +136 -0
- package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B0977K1O.cjs} +7 -6
- package/dist/src/{blobs-BCZavS8s.js → blobs-CeFdPn_T.js} +3 -3
- package/dist/src/{blobs-BQWqnnvL.js → blobs-DODuTK-a.js} +3 -3
- package/dist/src/{blobs-C-F78Kfn.js → blobs-Dwef1Ao1.js} +2 -2
- package/dist/src/{cache-BIyPcp5v.cjs → cache-CPGUA4Yl.cjs} +135 -25
- package/dist/src/cache-Cf7b4pWE.js +3 -0
- package/dist/src/{cache-D5NZmMiT.js → cache-DIXbtkNO.js} +125 -10
- package/dist/src/{cache-mb7c8hbp.js → cache-DpPWrkTE.js} +128 -12
- package/dist/src/{cache-C4Xb-hNb.js → cache-roFAE0cI.js} +126 -11
- package/dist/src/{chat-I9izLm49.js → chat-CUCorGiL.js} +12 -12
- package/dist/src/{chat-BPXSW8Bv.cjs → chat-DG1wG4w0.cjs} +6 -6
- package/dist/src/{chat-BfPaS15_.js → chat-Dabu84Br.js} +12 -12
- package/dist/src/{chat-Dr3DUQ0D.js → chat-DqUFcWI0.js} +12 -12
- package/dist/src/{chat-CclRbxGf.cjs → chat-DxTDQ83C.cjs} +14 -13
- package/dist/src/{chat-MKxMnZJZ.js → chat-GmlolEwo.js} +4 -4
- package/dist/src/{chat-0bwXjVP0.js → chat-TP8Qifkh.js} +6 -6
- package/dist/src/{chat-mW0ORo8G.js → chat-iwaM5UTQ.js} +6 -6
- package/dist/src/{chatkit-zUIVoDos.js → chatkit-B6DWi70Q.js} +4 -4
- package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-BYveR48_.cjs} +6 -5
- package/dist/src/{chatkit-Cv6AhukM.js → chatkit-fARZwEfV.js} +3 -3
- package/dist/src/{chatkit-CJnHRRMM.js → chatkit-lb6FK02w.js} +4 -4
- package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BQNp_y-F.js} +212 -67
- package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-D5Jl0SDh.js} +212 -67
- package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-DH416NBD.cjs} +218 -72
- package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-x1XJ1-pU.js} +212 -67
- package/dist/src/{cloud-DQZ5sVjW.js → cloud-D3DiFqH6.js} +3 -3
- package/dist/src/cloud-p96PA4MH.js +3 -0
- package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-B6NVI3ax.js} +4 -4
- package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
- package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-RFSojyXG.js} +6 -6
- package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-r4tbYmWU.js} +6 -6
- package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-BCkLouto.js} +5 -5
- package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-BaZ4insB.js} +3 -3
- package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-CF-Vb-2Z.js} +5 -5
- package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
- package/dist/src/codex-app-server-B8KHEiF4.js +1915 -0
- package/dist/src/codex-app-server-CnrLBCeA.cjs +1921 -0
- package/dist/src/codex-app-server-DIXZ230V.js +1915 -0
- package/dist/src/codex-app-server-Dd22dC_N.js +1916 -0
- package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-B6Wah8Pa.js} +6 -6
- package/dist/src/codex-sdk-BGjVAk23.js +3 -0
- package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
- package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-CmQABzV3.js} +6 -6
- package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-D2d54RL8.js} +5 -5
- package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-Bu9B8NUY.js} +8 -8
- package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CtzNCHKu.js} +7 -7
- package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-DHCDlQUI.cjs} +8 -8
- package/dist/src/{cometapi-BUlt_ELa.js → cometapi-OBILPLlu.js} +8 -8
- package/dist/src/{completion-HUe8wDhZ.js → completion-CO2e1_62.js} +6 -6
- package/dist/src/{completion-BozdoXba.cjs → completion-CSYfl2cd.cjs} +6 -6
- package/dist/src/{completion-x0a_c2y1.js → completion-DZNxcyfG.js} +6 -6
- package/dist/src/{completion-Dnxn7E-j.js → completion-sNvCLTAP.js} +5 -5
- package/dist/src/constants-BjJV0cRr.js +6 -0
- package/dist/src/constants-DH5XYLKZ.js +7 -0
- package/dist/src/constants-DZGEFLsu.js +6 -0
- package/dist/src/constants-a2kYssQk.cjs +11 -0
- package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
- package/dist/src/{createHash-CwDVU5xr.js → createHash-CGVzWdjj.js} +1 -1
- package/dist/src/{createHash-B7KvgoOD.cjs → createHash-CSiqnK5P.cjs} +2 -2
- package/dist/src/{createHash-ChI45QR1.js → createHash-CgRvs4Fn.js} +1 -1
- package/dist/src/crescendo-BXEJK_bi.cjs +704 -0
- package/dist/src/crescendo-CU_Y2i-m.js +702 -0
- package/dist/src/crescendo-J1Xx4_zb.js +703 -0
- package/dist/src/crescendo-QiaSLW0d.js +701 -0
- package/dist/src/custom-BJfP00Bh.js +619 -0
- package/dist/src/custom-CZVn-1-r.js +620 -0
- package/dist/src/custom-Cqia7M0D.cjs +621 -0
- package/dist/src/custom-notggYVl.js +618 -0
- package/dist/src/{docker-DCgsveLD.js → docker-4D1eL6Gq.js} +6 -6
- package/dist/src/{docker-ClnmCf1Z.js → docker-BBv1WUDu.js} +5 -5
- package/dist/src/{docker-DS4_Osau.cjs → docker-D06JUoe2.cjs} +6 -6
- package/dist/src/{docker-CQmlA2NU.js → docker-DdJQBxK9.js} +6 -6
- package/dist/src/{embedding-D3xTseo7.js → embedding--UZVe4_7.js} +6 -6
- package/dist/src/{embedding-I45KG3o7.cjs → embedding-BbrwopfX.cjs} +6 -6
- package/dist/src/{embedding-nFbumxcv.js → embedding-Bi3rxrZF.js} +5 -5
- package/dist/src/{embedding-DD9wa3ae.js → embedding-C251p1-8.js} +6 -6
- package/dist/src/{errors-Cw810C93.js → errors-9PcUL8BC.js} +1 -1
- package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
- package/dist/src/{esm-CtEPLdAj.cjs → esm-BIKakvNa.cjs} +8 -7
- package/dist/src/{esm-C7PnfdF8.js → esm-BTK1W7lG.js} +1 -1
- package/dist/src/{esm-tVgYPY-f.js → esm-Bexx2PFc.js} +2 -2
- package/dist/src/{eval-u4UVafl6.js → eval-0VRANImH.js} +21 -21
- package/dist/src/{eval-CzJFfFO9.js → eval-DscR5iOM.js} +1 -1
- package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-2RRJvFyB.js} +41 -16
- package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-CvtS8h8u.cjs} +51 -15
- package/dist/src/evalResult-DqzsS6_W.js +3 -0
- package/dist/src/{evalResult-D3hVYFis.js → evalResult-eUkJv9Ko.js} +40 -15
- package/dist/src/evaluator-DNdJF1Gv.js +3 -0
- package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-DRoiYB2q.js} +1060 -187
- package/dist/src/evaluatorHelpers-BsYP_muT.js +511 -0
- package/dist/src/evaluatorHelpers-CRqTvSux.cjs +537 -0
- package/dist/src/evaluatorHelpers-DuqFFfq7.js +510 -0
- package/dist/src/{extractor-CAfTSraf.js → extractor-BR7XAzAL.js} +6 -6
- package/dist/src/{extractor-WVPOrH43.cjs → extractor-BdxEtt3J.cjs} +6 -6
- package/dist/src/{extractor-DNSeBVOJ.js → extractor-CIW3iN-b.js} +6 -6
- package/dist/src/{extractor-Dk6bRWkv.js → extractor-CxRtnaHl.js} +5 -5
- package/dist/src/{fetch-B0Z3Oe4k.js → fetch-BufrQtvR.js} +93 -40
- package/dist/src/{fetch-BEWnXrrG.js → fetch-DXUnXkVU.js} +89 -40
- package/dist/src/{fetch-CJU5ELPa.cjs → fetch-Dw4XZHjj.cjs} +330 -270
- package/dist/src/{fetch-Di00EQrc.js → fetch-It34O8Ur.js} +305 -252
- package/dist/src/fetch-_YgGd2qv.js +3 -0
- package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
- package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-CXRfY3Ss.js} +12 -2
- package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-D4GCJ67J.js} +12 -2
- package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-CMVNrYvE.js} +1 -1
- package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-14nugQQx.cjs} +14 -2
- package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-BPVvltoW.js} +2 -2
- package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-D18lYzhB.js} +2 -2
- package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-jJKYsnjc.js} +2 -2
- package/dist/src/goat-Ckd3q3AY.js +467 -0
- package/dist/src/goat-Qgurm-NP.js +466 -0
- package/dist/src/goat-ghadEDdy.js +465 -0
- package/dist/src/goat-una6pZGP.cjs +469 -0
- package/dist/src/graders-BDT7dif6.js +3 -0
- package/dist/src/{graders-eIHhRqoC.js → graders-BGP99PdK.js} +2416 -2224
- package/dist/src/{graders-Zy3x0zqX.js → graders-BX0f2tvS.js} +2423 -2226
- package/dist/src/{graders-pvbReLLn.js → graders-C0nXU_ZP.js} +1806 -1609
- package/dist/src/{graders--zknU_uk.cjs → graders-ClrU2fnd.cjs} +2219 -1949
- package/dist/src/hydra-BSNZZm2M.js +543 -0
- package/dist/src/hydra-BxdG4nkg.js +541 -0
- package/dist/src/hydra-DE4xWwyc.js +542 -0
- package/dist/src/hydra-DrJttnvw.cjs +542 -0
- package/dist/src/image-B4oBtu6J.js +443 -0
- package/dist/src/{image-dnoUgPrC.js → image-BN-hjLL9.js} +4 -4
- package/dist/src/{image-9302QVqR.js → image-B_fPIwdg.js} +3 -3
- package/dist/src/image-BvUAW344.js +442 -0
- package/dist/src/image-Cvjwx1uY.js +442 -0
- package/dist/src/{image-De2FBmYV.cjs → image-DfVCGPbI.cjs} +4 -4
- package/dist/src/{image-u7-rKnYU.js → image-QzmydkiG.js} +4 -4
- package/dist/src/image-X0oY4350.cjs +465 -0
- package/dist/src/index.cjs +1689 -558
- package/dist/src/index.d.cts +3270 -1624
- package/dist/src/index.d.ts +3270 -1624
- package/dist/src/index.js +1553 -438
- package/dist/src/indirectWebPwn-02ZIghCS.js +259 -0
- package/dist/src/indirectWebPwn-BJ22AbQa.cjs +397 -0
- package/dist/src/indirectWebPwn-CbjUG0rh.js +385 -0
- package/dist/src/indirectWebPwn-CfQJt3gk.cjs +260 -0
- package/dist/src/indirectWebPwn-DBQhOjoD.js +260 -0
- package/dist/src/indirectWebPwn-OsXnKejv.js +259 -0
- package/dist/src/indirectWebPwn-tNx9OZ35.js +385 -0
- package/dist/src/indirectWebPwn-uyWdHx04.js +386 -0
- package/dist/src/inputVariables-B0qUChbV.js +467 -0
- package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
- package/dist/src/inputVariables-DXFdi7AI.js +468 -0
- package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
- package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-C4QlIuoR.js} +2 -2
- package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
- package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
- package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
- package/dist/src/iterative-CpU6i2As.js +490 -0
- package/dist/src/iterative-DJQEQpG3.js +491 -0
- package/dist/src/iterative-DQBuWM-j.cjs +493 -0
- package/dist/src/iterative-FTS4Bz67.js +492 -0
- package/dist/src/iterativeImage-BUABMVOA.js +413 -0
- package/dist/src/iterativeImage-ByFWkxax.cjs +415 -0
- package/dist/src/iterativeImage-BzUapOUi.js +414 -0
- package/dist/src/iterativeImage-Doz8mgxF.js +413 -0
- package/dist/src/iterativeMeta-B3YiAOc8.js +386 -0
- package/dist/src/iterativeMeta-C7APE_P1.js +385 -0
- package/dist/src/iterativeMeta-CSS8M6Ds.cjs +385 -0
- package/dist/src/iterativeMeta-DgoQ7bLh.js +384 -0
- package/dist/src/iterativeTree-B5zxBBSW.js +769 -0
- package/dist/src/iterativeTree-CNyIk0Yn.js +768 -0
- package/dist/src/iterativeTree-CPMF10ve.cjs +771 -0
- package/dist/src/iterativeTree-DvZ7GBwt.js +770 -0
- package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-BadkINlJ.js} +24 -10
- package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-Bi_8sV-H.js} +25 -11
- package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CkMljjdg.js} +25 -11
- package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
- package/dist/src/{litellm-DRjpcSa7.js → litellm-BKBo0jpC.js} +5 -5
- package/dist/src/{litellm-C2kqjxqp.js → litellm-BXyn5kZK.js} +5 -5
- package/dist/src/{litellm-p37R1dzQ.js → litellm-CNcfbCfa.js} +4 -4
- package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CtAr7bKG.cjs} +5 -5
- package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
- package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
- package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
- package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-BMX1iEB6.js} +5 -5
- package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CR5TSpp4.js} +5 -5
- package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
- package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-OEMmS1RB.js} +6 -6
- package/dist/src/main.js +909 -369
- package/dist/src/memoryPoisoning-CM83NWYl.js +107 -0
- package/dist/src/memoryPoisoning-D8h9gXJF.js +106 -0
- package/dist/src/memoryPoisoning-Dp-btinn.cjs +106 -0
- package/dist/src/memoryPoisoning-cLuCoTuJ.js +106 -0
- package/dist/src/{messages-BTQz42fn.js → messages-BabO-cX8.js} +273 -17
- package/dist/src/{messages-811uVVW5.cjs → messages-DBPir0TQ.cjs} +278 -18
- package/dist/src/{messages-zWbkLLHz.js → messages-DGUlSNU7.js} +273 -17
- package/dist/src/{messages-MYTQ2TWp.js → messages-vsE_-Lv0.js} +273 -17
- package/dist/src/{meteor-DHdzY1Ss.js → meteor--TZYICTI.js} +2 -2
- package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-CR226f7Z.cjs} +2 -2
- package/dist/src/{meteor-CU5UAE-H.js → meteor-Cl_yd7rJ.js} +2 -2
- package/dist/src/{meteor-DuAFv6gF.js → meteor-Dce-_zGQ.js} +1 -1
- package/dist/src/mischievousUser-0l8GD7Dp.js +46 -0
- package/dist/src/mischievousUser-BUOP9W5r.js +46 -0
- package/dist/src/mischievousUser-frFYKxu6.js +47 -0
- package/dist/src/mischievousUser-olGgHIVR.cjs +46 -0
- package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-CNV5bMSk.cjs} +7 -7
- package/dist/src/{modelslab-D0erNWKe.js → modelslab-Cogmu4mG.js} +6 -6
- package/dist/src/{modelslab-DIq-6y7x.js → modelslab-Dzst7VTU.js} +6 -6
- package/dist/src/{modelslab-wu9yi5GE.js → modelslab-EyDczZ5A.js} +7 -7
- package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-BGPNBOMS.js} +6 -6
- package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-B_5NKFu1.js} +5 -5
- package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-C4eUJGse.js} +5 -5
- package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
- package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BNGmgfFz.js} +4 -4
- package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-ChPlh5na.js} +4 -4
- package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CrV0iaY_.js} +3 -3
- package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
- package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
- package/dist/src/{openai-URNyItar.cjs → openai-C3uXv8wS.cjs} +2 -2
- package/dist/src/{openai-Qsvz25mV.js → openai-CJrsh9n4.js} +2 -2
- package/dist/src/{openai-iYtrXzOX.js → openai-zgwBb4Ff.js} +1 -1
- package/dist/src/{openclaw-CnQ363Wi.js → openclaw-BIHlu_36.js} +10 -8
- package/dist/src/{openclaw-CwzlQSQX.js → openclaw-CF7fMido.js} +9 -7
- package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-Dphc01BY.cjs} +18 -15
- package/dist/src/{openclaw-CLWrW03k.js → openclaw-zIJAsz3P.js} +10 -8
- package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-B3vlPLsp.js} +40 -5
- package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-D05JSgMQ.js} +40 -5
- package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-DoY6GbWw.cjs} +46 -10
- package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-sRKYHGoI.js} +39 -4
- package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver--gTpSagc.js} +120 -4
- package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-B2eaKC8C.js} +120 -4
- package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-BXjcRqAM.js} +119 -3
- package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
- package/dist/src/packageParser--MWTSrPW.js +36 -0
- package/dist/src/packageParser-CgE-ziRo.js +35 -0
- package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
- package/dist/src/packageParser-hwwSGnAZ.js +35 -0
- package/dist/src/processShim-BBxt7LKO.js +95 -0
- package/dist/src/processShim-BcGzU8fY.js +94 -0
- package/dist/src/processShim-C_z3aRvF.js +94 -0
- package/dist/src/processShim-DSY9BV2T.cjs +98 -0
- package/dist/src/promptLength-0qIHyhA5.js +71 -0
- package/dist/src/promptLength-4X-Wd8PG.js +72 -0
- package/dist/src/promptLength-B9nZEfO6.js +71 -0
- package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
- package/dist/src/promptfoo-BDrfT30-.js +180 -0
- package/dist/src/promptfoo-Cm4hiy1Y.js +180 -0
- package/dist/src/promptfoo-Rjp-MeBb.js +181 -0
- package/dist/src/promptfoo-b-baRMj-.cjs +205 -0
- package/dist/src/prompts-BYMtqPCw.js +259 -0
- package/dist/src/prompts-C-bqE1Yp.js +260 -0
- package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
- package/dist/src/prompts-DHhQsANy.js +259 -0
- package/dist/src/prompts-D_QpZ2Dm.js +271 -0
- package/dist/src/prompts-hNvWBD3z.cjs +284 -0
- package/dist/src/prompts-huDVH2CI.js +270 -0
- package/dist/src/prompts-p78Hul5i.cjs +289 -0
- package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
- package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
- package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DHcFiVWX.js} +1 -1
- package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-ReCd0sFa.js} +2 -2
- package/dist/src/{providers-BV_KMZje.js → providers-B9KzWxAX.js} +10558 -21587
- package/dist/src/{providers-DruaQfwu.js → providers-BCCz6_IX.js} +1228 -12196
- package/dist/src/{providers-1eKkXBKp.cjs → providers-BDVVIQM6.cjs} +10649 -21843
- package/dist/src/{providers-iUt5fbAN.js → providers-BYAn82cf.js} +1 -1
- package/dist/src/{providers-Domz_llv.js → providers-DVYRZP4E.js} +10589 -21570
- package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-CLCgQ9tt.js} +3 -3
- package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-CgYxeSmO.js} +3 -3
- package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-Cokhluq3.cjs} +8 -7
- package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-D0BYebvX.js} +3 -3
- package/dist/src/{quiverai-DFotyafY.cjs → quiverai-BAp6iTZD.cjs} +4 -4
- package/dist/src/{quiverai-aPPvXOgn.js → quiverai-BvIhI_0l.js} +4 -4
- package/dist/src/{quiverai-DR0SnIQV.js → quiverai-CdTWPe-A.js} +3 -3
- package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Cv7rJKDz.js} +4 -4
- package/dist/src/registry-BUJrgjwv.js +124 -0
- package/dist/src/registry-DXm1t_x0.js +125 -0
- package/dist/src/registry-Dp5EqoXc.js +124 -0
- package/dist/src/registry-KCVF1CFC.cjs +124 -0
- package/dist/src/{server-D6Il2Sob.js → remoteGeneration-B1_XsKXU.js} +16 -108
- package/dist/src/{server-BSB45Nt9.js → remoteGeneration-COpWcmWd.js} +15 -146
- package/dist/src/{server-Dx2TyCH2.cjs → remoteGeneration-DS9N3pgB.cjs} +30 -119
- package/dist/src/remoteGeneration-DsaSwmG2.js +217 -0
- package/dist/src/render-BNTrbmBw.cjs +384 -0
- package/dist/src/render-CSP99NLm.js +348 -0
- package/dist/src/render-DFfDeYUK.js +347 -0
- package/dist/src/{render-CgVDrJmM.js → render-DznWrxGO.js} +2 -2
- package/dist/src/render-_6ur1fhE.js +347 -0
- package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
- package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
- package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
- package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
- package/dist/src/{responses-Bi9vBuW_.cjs → responses-1UFFF9N_.cjs} +51 -16
- package/dist/src/{responses-DL9m8CyY.js → responses-B3W2JvOQ.js} +49 -15
- package/dist/src/{responses--OsX2aYW.js → responses-B6ktc3Ra.js} +49 -15
- package/dist/src/{responses-C-flexAY.js → responses-URRzV8qE.js} +49 -15
- package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
- package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
- package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CXlFM2rR.js} +3 -3
- package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-CnlW8AYb.js} +3 -3
- package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-CqUWBZAt.cjs} +18 -27
- package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DdGojpfv.js} +3 -3
- package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
- package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
- package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
- package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
- package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-CujrzP1a.js} +62 -51
- package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-DzffAqo_.cjs} +65 -53
- package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-vhtSV7JI.js} +62 -51
- package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-yr1QKeBs.js} +61 -50
- package/dist/src/{scanner-1DqWi1Ej.js → scanner-DS0109SS.js} +7 -7
- package/dist/src/server/index.js +5105 -605
- package/dist/src/server-B8rqV126.cjs +126 -0
- package/dist/src/server-BaLytskk.js +3 -0
- package/dist/src/server-CMJD10J4.js +107 -0
- package/dist/src/server-Ddp8GNMp.js +146 -0
- package/dist/src/server-DhMHosWj.js +182 -0
- package/dist/src/shared-7pmVZLNO.js +1334 -0
- package/dist/src/shared-9WHQ1oNE.js +1335 -0
- package/dist/src/{fileExtensions-BArZuxsI.js → shared-BoG7qLMv.js} +12 -2
- package/dist/src/shared-D6IjElRI.js +1334 -0
- package/dist/src/shared-WkgnDkcg.cjs +1436 -0
- package/dist/src/{signal-CE5G3a7x.js → signal-CSurUUyV.js} +3 -3
- package/dist/src/simulatedUser-C9aQObBI.js +222 -0
- package/dist/src/simulatedUser-Cu601Dd4.cjs +227 -0
- package/dist/src/simulatedUser-U_qAHnuB.js +222 -0
- package/dist/src/simulatedUser-p3tACcmw.js +223 -0
- package/dist/src/{slack-DDUe-5MC.js → slack-Bapo-7_8.js} +2 -2
- package/dist/src/{slack-1Rhq0EoV.cjs → slack-DMC1QVEg.cjs} +3 -2
- package/dist/src/{slack-D5Wpy8LM.js → slack-DTEFhrMn.js} +2 -2
- package/dist/src/{slack-acRb0IqQ.js → slack-k-_CP84Q.js} +1 -1
- package/dist/src/storage-BU4qcnOb.js +875 -0
- package/dist/src/storage-CA-v9V2v.cjs +911 -0
- package/dist/src/storage-CD-GWAdx.js +822 -0
- package/dist/src/storage-QdU-SmvD.js +834 -0
- package/dist/src/{store-DAAyxcy6.cjs → store-B2NDDooM.cjs} +60 -24
- package/dist/src/{store-CYEy5J2D.js → store-DKd5592Q.js} +51 -20
- package/dist/src/{store-M0b1WfYb.js → store-HpopRVzl.js} +50 -19
- package/dist/src/store-IbiRIF3k.js +3 -0
- package/dist/src/strategies-7CS3Alao.cjs +2360 -0
- package/dist/src/strategies-CiSeroPH.js +2331 -0
- package/dist/src/strategies-DRJjGTIY.js +2333 -0
- package/dist/src/{tables-DQ4WU5tX.js → tables-CRSXQ2Ke.js} +2 -2
- package/dist/src/{tables-CsWou1Bx.js → tables-CxjU7bBd.js} +3 -3
- package/dist/src/{tables-DUfh1F7Z.cjs → tables-DBIJU0WE.cjs} +6 -5
- package/dist/src/{tables-C4CH3zRr.js → tables-DafUHOeh.js} +3 -3
- package/dist/src/{telemetry-CQPez_Jp.js → telemetry-00ezXr_t.js} +5 -4
- package/dist/src/telemetry-ByPqDcKC.js +3 -0
- package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CJ7FnCsc.cjs} +18 -11
- package/dist/src/{telemetry-dbaJ0E98.js → telemetry-DmXYcJNV.js} +5 -4
- package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-DwX9XUN5.js} +4 -3
- package/dist/src/{text-KvuD2Iko.js → text-Db-Wt2u2.js} +1 -1
- package/dist/src/{text-DHxdyQqT.js → text-DwYK5EBn.js} +1 -1
- package/dist/src/{text-BVi-cLPJ.cjs → text-nywWsRBM.cjs} +1 -1
- package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-BjVkdk18.js} +1 -1
- package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-CDet74yk.js} +1 -1
- package/dist/src/tokenUsageUtils-CmnQ0G2m.js +142 -0
- package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
- package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
- package/dist/src/toolAttributes-COVgDrBG.js +87 -0
- package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
- package/dist/src/tracingOptions-BnwKCkSB.js +221 -0
- package/dist/src/tracingOptions-Chi74lOD.js +219 -0
- package/dist/src/tracingOptions-DrbSFaKy.cjs +249 -0
- package/dist/src/tracingOptions-ji2OuXbT.js +220 -0
- package/dist/src/{transcription-DuWDupG7.js → transcription-B8uIgCYX.js} +5 -5
- package/dist/src/{transcription-CJspiD2c.js → transcription-CfU5loSq.js} +6 -6
- package/dist/src/{transcription-V2HaAmy2.js → transcription-Dkd22_4K.js} +6 -6
- package/dist/src/{transcription-BvjmiYB1.cjs → transcription-mzuf18Mq.cjs} +9 -8
- package/dist/src/{transform-lQrDE1BQ.js → transform-BIMynQsA.js} +9 -9
- package/dist/src/transform-BnSTnFlp.js +187 -0
- package/dist/src/transform-BnSXWmU_2.cjs +221 -0
- package/dist/src/transform-CGt7Kt3y2.js +186 -0
- package/dist/src/transform-CrPGTsij.js +186 -0
- package/dist/src/{transform-CTeuTR3S.cjs → transform-DhNkAUs8.cjs} +13 -12
- package/dist/src/{transform-CG0ehZNG.js → transform-DmvYBRll.js} +9 -9
- package/dist/src/{transform-zDhMmzwX.js → transform-EtD4jAWi.js} +9 -9
- package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-0ThtPved.js} +1 -1
- package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
- package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-BvyU9vDD.js} +1 -1
- package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
- package/dist/src/{types-Dm9JM6Vb.js → types-BFevViUY.js} +115 -19
- package/dist/src/{types-Bgh5SOn6.js → types-BJQBBPTP.js} +115 -19
- package/dist/src/{types-CeaeaZdP.cjs → types-CxJvaY2S.cjs} +357 -172
- package/dist/src/{types-BGQDAP8i.js → types-D6glLbdF.js} +271 -170
- package/dist/src/{util-BYvQUPp7.js → util--WMgw7wM.js} +28 -8
- package/dist/src/{util-C9J8ahRn.js → util-5WnCSb0h.js} +72 -48
- package/dist/src/{util-CN3SrLT4.cjs → util-BSIuSLVK.cjs} +74 -49
- package/dist/src/{util-C8e5uydV.js → util-Bx677_k2.js} +154 -147
- package/dist/src/util-CN8om2rz.cjs +386 -0
- package/dist/src/{util-DDs-7g6-.js → util-CoQWM76y.js} +28 -8
- package/dist/src/util-DNl96nNs.js +327 -0
- package/dist/src/{util-DxWpWjhc.js → util-DURocbYR.js} +667 -507
- package/dist/src/util-Df8YMvS1.js +327 -0
- package/dist/src/{util-DvU2Pw8c.js → util-DiQ3QvBB.js} +28 -8
- package/dist/src/{util-oGMLA7vc.js → util-I-Rf-KaD.js} +862 -577
- package/dist/src/{util-olYL5C6N.cjs → util-IYzs5Y04.cjs} +33 -7
- package/dist/src/{util-D9TisOyk.js → util-LKTmNsMQ.js} +71 -47
- package/dist/src/{util-Bxn8emtE.cjs → util-SPsvFONY.cjs} +738 -582
- package/dist/src/{util-D3q0WQ-0.js → util-efByNxcr.js} +72 -48
- package/dist/src/util-kDURhgJW.js +328 -0
- package/dist/src/{utils-DJfvjyMj.js → utils-B0lzitHZ.js} +3 -3
- package/dist/src/{utils-BLJKfv0y.js → utils-BFOh20Gb.js} +3 -3
- package/dist/src/{utils-hXtCYanr.js → utils-BGY69tk_.js} +2 -2
- package/dist/src/{utils-B05gLxER.cjs → utils-Ve6kuJsa.cjs} +3 -3
- package/dist/src/version-BK20a4sw.js +16 -0
- package/dist/src/version-BWCSaByA.cjs +27 -0
- package/dist/src/version-eRkNuGv8.js +17 -0
- package/dist/src/version-lpHV_53E.js +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +56 -28
- package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
- package/dist/src/app/assets/index-BXGkeMwh.css +0 -1
- package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
- package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
- package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
- package/dist/src/cache-Cr9oLMUa.js +0 -3
- package/dist/src/cache-DbLsVWB2.cjs +0 -3
- package/dist/src/cloud-Hphvo8kr.js +0 -3
- package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
- package/dist/src/codex-sdk-CWEnH70W.cjs +0 -2
- package/dist/src/evalResult-D8MT9p0s.js +0 -3
- package/dist/src/evalResult-DElBuddX.js +0 -2
- package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
- package/dist/src/evaluator-CVessDWe.js +0 -3
- package/dist/src/fetch-C7bGKDlQ.js +0 -3
- package/dist/src/graders-BOAzQEUe.cjs +0 -2
- package/dist/src/graders-D4BTsZdG2.js +0 -3
- package/dist/src/graders-DOJK1XpV.js +0 -2
- package/dist/src/graders-NAv9LcBn.js +0 -2
- package/dist/src/image-B5Mv-Z3h.js +0 -257
- package/dist/src/image-DVz2RiMF.js +0 -258
- package/dist/src/image-qUpPvmNZ.js +0 -257
- package/dist/src/image-x6KqLQl4.cjs +0 -280
- package/dist/src/providers-Bp4S-FvO.js +0 -2
- package/dist/src/providers-DV3ax9e_.cjs +0 -3
- package/dist/src/providers-u9Enmfok.js +0 -2
- package/dist/src/render-CH-62LbA.js +0 -135
- package/dist/src/render-CMEpfLaO.js +0 -136
- package/dist/src/render-DHIZ6_k8.js +0 -135
- package/dist/src/render-DfQSFxGE.cjs +0 -165
- package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
- package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
- package/dist/src/server-BNYztJkh.js +0 -385
- package/dist/src/server-DCtHUqlp.js +0 -3
- package/dist/src/server-DaA2eR26.cjs +0 -2
- package/dist/src/store-CWOSz6D_.cjs +0 -2
- package/dist/src/store-DCDBhv7B.js +0 -3
- package/dist/src/store-Dn9HUkdW.js +0 -240
- package/dist/src/telemetry-C1IqxcdW.js +0 -3
- package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
- package/dist/src/transform-Bbg6A8Jk.js +0 -216
- package/dist/src/transform-CUnzlsbn.cjs +0 -228
- package/dist/src/transform-DYX1_Xnh.js +0 -216
- package/dist/src/transform-DgKlRr73.cjs +0 -2
- package/dist/src/transform-M6ITAESf.js +0 -3
- package/dist/src/transform-UN5UGu8U.js +0 -213
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
-
import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-
|
|
3
|
-
import {
|
|
2
|
+
import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-KD8JjCRJ.js";
|
|
3
|
+
import { n as VERSION } from "./version-BK20a4sw.js";
|
|
4
|
+
import { t as invariant } from "./invariant-DIYf9sP1.js";
|
|
5
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
6
|
import * as fs$2 from "fs";
|
|
5
7
|
import * as path$1 from "path";
|
|
6
8
|
import path from "path";
|
|
@@ -17,19 +19,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
17
19
|
* Used to distinguish human ratings from automated assertions.
|
|
18
20
|
*/
|
|
19
21
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
20
|
-
//#endregion
|
|
21
|
-
//#region src/version.ts
|
|
22
|
-
/**
|
|
23
|
-
* Application version from package.json.
|
|
24
|
-
* Injected at build time, or read from npm environment in development.
|
|
25
|
-
*/
|
|
26
|
-
const VERSION = "0.121.4";
|
|
27
|
-
/**
|
|
28
|
-
* PostHog analytics key.
|
|
29
|
-
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
30
|
-
* Empty string in development/test.
|
|
31
|
-
*/
|
|
32
|
-
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
33
22
|
function getShareApiBaseUrl() {
|
|
34
23
|
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
35
24
|
}
|
|
@@ -72,8 +61,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
|
|
|
72
61
|
if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
|
|
73
62
|
const model = models.find((m) => m.id === modelName);
|
|
74
63
|
if (!model || !model.cost) return;
|
|
75
|
-
const
|
|
76
|
-
const
|
|
64
|
+
const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
|
|
65
|
+
const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
|
|
66
|
+
const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
|
|
77
67
|
return inputCost * promptTokens + outputCost * completionTokens;
|
|
78
68
|
}
|
|
79
69
|
/**
|
|
@@ -480,7 +470,10 @@ function writeGlobalConfigPartial(partialConfig) {
|
|
|
480
470
|
});
|
|
481
471
|
writeGlobalConfig(updatedConfig);
|
|
482
472
|
}
|
|
483
|
-
|
|
473
|
+
//#endregion
|
|
474
|
+
//#region src/globalConfig/cloud.ts
|
|
475
|
+
const CLOUD_API_HOST = "https://api.promptfoo.app";
|
|
476
|
+
const API_HOST = getEnvString("API_HOST", CLOUD_API_HOST);
|
|
484
477
|
const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
|
|
485
478
|
var CloudConfig = class {
|
|
486
479
|
config;
|
|
@@ -663,6 +656,14 @@ function isConnectionError(error) {
|
|
|
663
656
|
/**
|
|
664
657
|
* Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
|
|
665
658
|
*/
|
|
659
|
+
function isPromptfooCloudApiHost(url) {
|
|
660
|
+
try {
|
|
661
|
+
const targetUrl = url instanceof Request ? url.url : url.toString();
|
|
662
|
+
return new URL(targetUrl).origin === CLOUD_API_HOST;
|
|
663
|
+
} catch {
|
|
664
|
+
return false;
|
|
665
|
+
}
|
|
666
|
+
}
|
|
666
667
|
async function monkeyPatchFetch(url, options) {
|
|
667
668
|
const NO_LOG_URLS = [
|
|
668
669
|
R_ENDPOINT,
|
|
@@ -682,7 +683,7 @@ async function monkeyPatchFetch(url, options) {
|
|
|
682
683
|
} catch (e) {
|
|
683
684
|
logger.warn(`Failed to compress request body: ${e}`);
|
|
684
685
|
}
|
|
685
|
-
if (
|
|
686
|
+
if (isPromptfooCloudApiHost(url)) {
|
|
686
687
|
const token = cloudConfig.getApiKey();
|
|
687
688
|
opts.headers = {
|
|
688
689
|
...opts.headers || {},
|
|
@@ -716,11 +717,31 @@ async function monkeyPatchFetch(url, options) {
|
|
|
716
717
|
}
|
|
717
718
|
}
|
|
718
719
|
//#endregion
|
|
720
|
+
//#region src/util/fetch/retryContext.ts
|
|
721
|
+
const fetchRetryContext = new AsyncLocalStorage();
|
|
722
|
+
/**
|
|
723
|
+
* Run `fn` with a fetch retry context so nested `fetchWithRetries` /
|
|
724
|
+
* `fetchWithProxy` calls inherit the provider's configured `maxRetries`.
|
|
725
|
+
*
|
|
726
|
+
* When `maxRetries` is `undefined`, the new scope deliberately shadows any
|
|
727
|
+
* outer provider context so providers without an override fall back to defaults.
|
|
728
|
+
*/
|
|
729
|
+
function withFetchRetryContext(maxRetries, fn) {
|
|
730
|
+
return fetchRetryContext.run({ maxRetries }, fn);
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* Read the active context's `maxRetries`, or `undefined` when none is set.
|
|
734
|
+
*/
|
|
735
|
+
function getFetchRetryContextMaxRetries() {
|
|
736
|
+
return fetchRetryContext.getStore()?.maxRetries;
|
|
737
|
+
}
|
|
738
|
+
//#endregion
|
|
719
739
|
//#region src/util/fetch/index.ts
|
|
720
740
|
var fetch_exports = /* @__PURE__ */ __exportAll({
|
|
721
741
|
fetchWithProxy: () => fetchWithProxy,
|
|
722
742
|
fetchWithRetries: () => fetchWithRetries,
|
|
723
743
|
fetchWithTimeout: () => fetchWithTimeout,
|
|
744
|
+
getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
|
|
724
745
|
handleRateLimit: () => handleRateLimit,
|
|
725
746
|
isRateLimited: () => isRateLimited,
|
|
726
747
|
isTransientError: () => isTransientError
|
|
@@ -775,20 +796,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
|
|
|
775
796
|
cachedProxyAgents.set(cacheKey, agent);
|
|
776
797
|
return agent;
|
|
777
798
|
}
|
|
799
|
+
/**
|
|
800
|
+
* Resolve whether to disable transient-error retries. An explicit caller flag
|
|
801
|
+
* always wins (a caller may opt back in even when the provider set
|
|
802
|
+
* `maxRetries: 0`); otherwise we disable only when the retry context carries
|
|
803
|
+
* `maxRetries === 0`.
|
|
804
|
+
*/
|
|
805
|
+
function resolveTransientRetryDisabled(explicit) {
|
|
806
|
+
if (explicit !== void 0) return explicit;
|
|
807
|
+
return getFetchRetryContextMaxRetries() === 0;
|
|
808
|
+
}
|
|
809
|
+
function headersInitToRecord(headers) {
|
|
810
|
+
if (!headers) return {};
|
|
811
|
+
if (headers instanceof Headers) return Object.fromEntries(headers.entries());
|
|
812
|
+
if (Array.isArray(headers)) return Object.fromEntries(new Headers(headers).entries());
|
|
813
|
+
return { ...headers };
|
|
814
|
+
}
|
|
815
|
+
function getFetchWithProxyHeaders(url, options) {
|
|
816
|
+
const requestHeaders = url instanceof Request && options.headers === void 0 ? headersInitToRecord(url.headers) : {};
|
|
817
|
+
const optionHeaders = headersInitToRecord(options.headers);
|
|
818
|
+
return {
|
|
819
|
+
...requestHeaders,
|
|
820
|
+
...optionHeaders,
|
|
821
|
+
"x-promptfoo-version": VERSION
|
|
822
|
+
};
|
|
823
|
+
}
|
|
824
|
+
function getFetchUrlString(url) {
|
|
825
|
+
if (typeof url === "string") return url;
|
|
826
|
+
if (url instanceof URL) return url.toString();
|
|
827
|
+
if (url instanceof Request) return url.url;
|
|
828
|
+
}
|
|
778
829
|
async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
779
830
|
let finalUrl = url;
|
|
780
|
-
let finalUrlString;
|
|
781
|
-
if (typeof url === "string") finalUrlString = url;
|
|
782
|
-
else if (url instanceof URL) finalUrlString = url.toString();
|
|
783
|
-
else if (url instanceof Request) finalUrlString = url.url;
|
|
831
|
+
let finalUrlString = getFetchUrlString(url);
|
|
784
832
|
if (!finalUrlString) throw new Error("Invalid URL");
|
|
785
833
|
const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
|
|
786
834
|
const finalOptions = {
|
|
787
835
|
...options,
|
|
788
|
-
headers:
|
|
789
|
-
...options.headers,
|
|
790
|
-
"x-promptfoo-version": VERSION
|
|
791
|
-
},
|
|
836
|
+
headers: getFetchWithProxyHeaders(url, options),
|
|
792
837
|
signal: combinedSignal
|
|
793
838
|
};
|
|
794
839
|
if (typeof url === "string") try {
|
|
@@ -826,10 +871,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
826
871
|
logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
|
|
827
872
|
finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
|
|
828
873
|
} else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
|
|
829
|
-
const
|
|
874
|
+
const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
|
|
875
|
+
const maxTransientRetries = disableTransientRetries ? 0 : 3;
|
|
830
876
|
for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
|
|
831
877
|
const response = await monkeyPatchFetch(finalUrl, finalOptions);
|
|
832
|
-
if (!
|
|
878
|
+
if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
|
|
833
879
|
const backoffMs = Math.pow(2, attempt) * 1e3;
|
|
834
880
|
logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
|
|
835
881
|
await sleep(backoffMs);
|
|
@@ -902,8 +948,17 @@ function isTransientError(response) {
|
|
|
902
948
|
default: return false;
|
|
903
949
|
}
|
|
904
950
|
}
|
|
951
|
+
function formatFetchErrorMessage(error) {
|
|
952
|
+
if (!(error instanceof Error)) return String(error);
|
|
953
|
+
const typedError = error;
|
|
954
|
+
let message = `${typedError.name}: ${typedError.message}`;
|
|
955
|
+
if (typedError.cause) message += ` (Cause: ${typedError.cause})`;
|
|
956
|
+
if (typedError.code) message += ` (Code: ${typedError.code})`;
|
|
957
|
+
return message;
|
|
958
|
+
}
|
|
905
959
|
async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
906
|
-
|
|
960
|
+
const contextMaxRetries = getFetchRetryContextMaxRetries();
|
|
961
|
+
maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
|
|
907
962
|
let lastErrorMessage;
|
|
908
963
|
const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
|
|
909
964
|
for (let i = 0; i <= maxRetries; i++) {
|
|
@@ -915,21 +970,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
915
970
|
}, timeout);
|
|
916
971
|
if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
|
|
917
972
|
if (response && isRateLimited(response)) {
|
|
918
|
-
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
919
973
|
lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
|
|
974
|
+
if (i >= maxRetries) {
|
|
975
|
+
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
|
|
976
|
+
break;
|
|
977
|
+
}
|
|
978
|
+
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
920
979
|
await handleRateLimit(response);
|
|
921
980
|
continue;
|
|
922
981
|
}
|
|
923
982
|
return response;
|
|
924
983
|
} catch (error) {
|
|
925
984
|
if (error instanceof Error && error.name === "AbortError") throw error;
|
|
926
|
-
|
|
927
|
-
if (error instanceof Error) {
|
|
928
|
-
const typedError = error;
|
|
929
|
-
errorMessage = `${typedError.name}: ${typedError.message}`;
|
|
930
|
-
if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
|
|
931
|
-
if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
|
|
932
|
-
} else errorMessage = String(error);
|
|
985
|
+
const errorMessage = formatFetchErrorMessage(error);
|
|
933
986
|
logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
|
|
934
987
|
if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
|
|
935
988
|
lastErrorMessage = errorMessage;
|
|
@@ -938,6 +991,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
938
991
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
939
992
|
}
|
|
940
993
|
//#endregion
|
|
941
|
-
export {
|
|
994
|
+
export { CONSENT_ENDPOINT as A, openaiToolChoiceToBedrock as C, transformToolChoice as D, toTitleCase as E, getDefaultShareViewBaseUrl as F, getShareApiBaseUrl as I, getShareViewBaseUrl as L, R_ENDPOINT as M, TERMINAL_MAX_WIDTH as N, transformTools as O, getDefaultPort as P, FILE_METADATA_KEY as R, isPromptfooSampleTarget as S, parseChatPrompt as T, LONG_RUNNING_MODEL_TIMEOUT_MS as _, getFetchWithProxyHeaders as a, isOpenAIToolArray as b, CloudConfig as c, writeGlobalConfig as d, writeGlobalConfigPartial as f, parseRetryAfter as g, parseRateLimitHeaders as h, fetch_exports as i, EVENTS_ENDPOINT as j, CLOUD_PROVIDER_PREFIX as k, cloudConfig as l, sleep as m, fetchWithRetries as n, withFetchRetryContext as o, getCurrentTimestamp as p, fetchWithTimeout as r, isPromptfooCloudApiHost as s, fetchWithProxy as t, readGlobalConfig as u, REQUEST_TIMEOUT_MS as v, openaiToolsToBedrock as w, isOpenAIToolChoice as x, calculateCost as y, HUMAN_ASSERTION_TYPE as z };
|
|
942
995
|
|
|
943
|
-
//# sourceMappingURL=fetch-
|
|
996
|
+
//# sourceMappingURL=fetch-BufrQtvR.js.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-BbY6ypFL.js";
|
|
3
|
+
import { n as VERSION } from "./version-eRkNuGv8.js";
|
|
4
|
+
import { t as invariant } from "./invariant-B2Rf6avk.js";
|
|
5
|
+
import { a as cloudConfig, n as CLOUD_API_HOST } from "./cloud-D3DiFqH6.js";
|
|
6
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
7
|
import path from "path";
|
|
6
8
|
import yaml from "js-yaml";
|
|
7
9
|
import * as fsPromises from "fs/promises";
|
|
@@ -16,19 +18,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
16
18
|
* Used to distinguish human ratings from automated assertions.
|
|
17
19
|
*/
|
|
18
20
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
19
|
-
//#endregion
|
|
20
|
-
//#region src/version.ts
|
|
21
|
-
/**
|
|
22
|
-
* Application version from package.json.
|
|
23
|
-
* Injected at build time, or read from npm environment in development.
|
|
24
|
-
*/
|
|
25
|
-
const VERSION = "0.121.4";
|
|
26
|
-
/**
|
|
27
|
-
* PostHog analytics key.
|
|
28
|
-
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
29
|
-
* Empty string in development/test.
|
|
30
|
-
*/
|
|
31
|
-
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
32
21
|
function getShareApiBaseUrl() {
|
|
33
22
|
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
34
23
|
}
|
|
@@ -71,8 +60,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
|
|
|
71
60
|
if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
|
|
72
61
|
const model = models.find((m) => m.id === modelName);
|
|
73
62
|
if (!model || !model.cost) return;
|
|
74
|
-
const
|
|
75
|
-
const
|
|
63
|
+
const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
|
|
64
|
+
const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
|
|
65
|
+
const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
|
|
76
66
|
return inputCost * promptTokens + outputCost * completionTokens;
|
|
77
67
|
}
|
|
78
68
|
/**
|
|
@@ -466,6 +456,14 @@ function isConnectionError(error) {
|
|
|
466
456
|
/**
|
|
467
457
|
* Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
|
|
468
458
|
*/
|
|
459
|
+
function isPromptfooCloudApiHost(url) {
|
|
460
|
+
try {
|
|
461
|
+
const targetUrl = url instanceof Request ? url.url : url.toString();
|
|
462
|
+
return new URL(targetUrl).origin === CLOUD_API_HOST;
|
|
463
|
+
} catch {
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
469
467
|
async function monkeyPatchFetch(url, options) {
|
|
470
468
|
const NO_LOG_URLS = [
|
|
471
469
|
R_ENDPOINT,
|
|
@@ -485,7 +483,7 @@ async function monkeyPatchFetch(url, options) {
|
|
|
485
483
|
} catch (e) {
|
|
486
484
|
logger.warn(`Failed to compress request body: ${e}`);
|
|
487
485
|
}
|
|
488
|
-
if (
|
|
486
|
+
if (isPromptfooCloudApiHost(url)) {
|
|
489
487
|
const token = cloudConfig.getApiKey();
|
|
490
488
|
opts.headers = {
|
|
491
489
|
...opts.headers || {},
|
|
@@ -519,6 +517,25 @@ async function monkeyPatchFetch(url, options) {
|
|
|
519
517
|
}
|
|
520
518
|
}
|
|
521
519
|
//#endregion
|
|
520
|
+
//#region src/util/fetch/retryContext.ts
|
|
521
|
+
const fetchRetryContext = new AsyncLocalStorage();
|
|
522
|
+
/**
|
|
523
|
+
* Run `fn` with a fetch retry context so nested `fetchWithRetries` /
|
|
524
|
+
* `fetchWithProxy` calls inherit the provider's configured `maxRetries`.
|
|
525
|
+
*
|
|
526
|
+
* When `maxRetries` is `undefined`, the new scope deliberately shadows any
|
|
527
|
+
* outer provider context so providers without an override fall back to defaults.
|
|
528
|
+
*/
|
|
529
|
+
function withFetchRetryContext(maxRetries, fn) {
|
|
530
|
+
return fetchRetryContext.run({ maxRetries }, fn);
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Read the active context's `maxRetries`, or `undefined` when none is set.
|
|
534
|
+
*/
|
|
535
|
+
function getFetchRetryContextMaxRetries() {
|
|
536
|
+
return fetchRetryContext.getStore()?.maxRetries;
|
|
537
|
+
}
|
|
538
|
+
//#endregion
|
|
522
539
|
//#region src/util/fetch/index.ts
|
|
523
540
|
const cachedAgents = /* @__PURE__ */ new Map();
|
|
524
541
|
const cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
@@ -580,20 +597,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
|
|
|
580
597
|
cachedProxyAgents.set(cacheKey, agent);
|
|
581
598
|
return agent;
|
|
582
599
|
}
|
|
600
|
+
/**
|
|
601
|
+
* Resolve whether to disable transient-error retries. An explicit caller flag
|
|
602
|
+
* always wins (a caller may opt back in even when the provider set
|
|
603
|
+
* `maxRetries: 0`); otherwise we disable only when the retry context carries
|
|
604
|
+
* `maxRetries === 0`.
|
|
605
|
+
*/
|
|
606
|
+
function resolveTransientRetryDisabled(explicit) {
|
|
607
|
+
if (explicit !== void 0) return explicit;
|
|
608
|
+
return getFetchRetryContextMaxRetries() === 0;
|
|
609
|
+
}
|
|
610
|
+
function headersInitToRecord(headers) {
|
|
611
|
+
if (!headers) return {};
|
|
612
|
+
if (headers instanceof Headers) return Object.fromEntries(headers.entries());
|
|
613
|
+
if (Array.isArray(headers)) return Object.fromEntries(new Headers(headers).entries());
|
|
614
|
+
return { ...headers };
|
|
615
|
+
}
|
|
616
|
+
function getFetchWithProxyHeaders(url, options) {
|
|
617
|
+
const requestHeaders = url instanceof Request && options.headers === void 0 ? headersInitToRecord(url.headers) : {};
|
|
618
|
+
const optionHeaders = headersInitToRecord(options.headers);
|
|
619
|
+
return {
|
|
620
|
+
...requestHeaders,
|
|
621
|
+
...optionHeaders,
|
|
622
|
+
"x-promptfoo-version": VERSION
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
function getFetchUrlString(url) {
|
|
626
|
+
if (typeof url === "string") return url;
|
|
627
|
+
if (url instanceof URL) return url.toString();
|
|
628
|
+
if (url instanceof Request) return url.url;
|
|
629
|
+
}
|
|
583
630
|
async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
584
631
|
let finalUrl = url;
|
|
585
|
-
let finalUrlString;
|
|
586
|
-
if (typeof url === "string") finalUrlString = url;
|
|
587
|
-
else if (url instanceof URL) finalUrlString = url.toString();
|
|
588
|
-
else if (url instanceof Request) finalUrlString = url.url;
|
|
632
|
+
let finalUrlString = getFetchUrlString(url);
|
|
589
633
|
if (!finalUrlString) throw new Error("Invalid URL");
|
|
590
634
|
const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
|
|
591
635
|
const finalOptions = {
|
|
592
636
|
...options,
|
|
593
|
-
headers:
|
|
594
|
-
...options.headers,
|
|
595
|
-
"x-promptfoo-version": VERSION
|
|
596
|
-
},
|
|
637
|
+
headers: getFetchWithProxyHeaders(url, options),
|
|
597
638
|
signal: combinedSignal
|
|
598
639
|
};
|
|
599
640
|
if (typeof url === "string") try {
|
|
@@ -631,10 +672,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
631
672
|
logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
|
|
632
673
|
finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
|
|
633
674
|
} else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
|
|
634
|
-
const
|
|
675
|
+
const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
|
|
676
|
+
const maxTransientRetries = disableTransientRetries ? 0 : 3;
|
|
635
677
|
for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
|
|
636
678
|
const response = await monkeyPatchFetch(finalUrl, finalOptions);
|
|
637
|
-
if (!
|
|
679
|
+
if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
|
|
638
680
|
const backoffMs = Math.pow(2, attempt) * 1e3;
|
|
639
681
|
logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
|
|
640
682
|
await sleep(backoffMs);
|
|
@@ -707,8 +749,17 @@ function isTransientError(response) {
|
|
|
707
749
|
default: return false;
|
|
708
750
|
}
|
|
709
751
|
}
|
|
752
|
+
function formatFetchErrorMessage(error) {
|
|
753
|
+
if (!(error instanceof Error)) return String(error);
|
|
754
|
+
const typedError = error;
|
|
755
|
+
let message = `${typedError.name}: ${typedError.message}`;
|
|
756
|
+
if (typedError.cause) message += ` (Cause: ${typedError.cause})`;
|
|
757
|
+
if (typedError.code) message += ` (Code: ${typedError.code})`;
|
|
758
|
+
return message;
|
|
759
|
+
}
|
|
710
760
|
async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
711
|
-
|
|
761
|
+
const contextMaxRetries = getFetchRetryContextMaxRetries();
|
|
762
|
+
maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
|
|
712
763
|
let lastErrorMessage;
|
|
713
764
|
const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
|
|
714
765
|
for (let i = 0; i <= maxRetries; i++) {
|
|
@@ -720,21 +771,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
720
771
|
}, timeout);
|
|
721
772
|
if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
|
|
722
773
|
if (response && isRateLimited(response)) {
|
|
723
|
-
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
724
774
|
lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
|
|
775
|
+
if (i >= maxRetries) {
|
|
776
|
+
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
|
|
777
|
+
break;
|
|
778
|
+
}
|
|
779
|
+
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
725
780
|
await handleRateLimit(response);
|
|
726
781
|
continue;
|
|
727
782
|
}
|
|
728
783
|
return response;
|
|
729
784
|
} catch (error) {
|
|
730
785
|
if (error instanceof Error && error.name === "AbortError") throw error;
|
|
731
|
-
|
|
732
|
-
if (error instanceof Error) {
|
|
733
|
-
const typedError = error;
|
|
734
|
-
errorMessage = `${typedError.name}: ${typedError.message}`;
|
|
735
|
-
if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
|
|
736
|
-
if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
|
|
737
|
-
} else errorMessage = String(error);
|
|
786
|
+
const errorMessage = formatFetchErrorMessage(error);
|
|
738
787
|
logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
|
|
739
788
|
if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
|
|
740
789
|
lastErrorMessage = errorMessage;
|
|
@@ -743,6 +792,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
743
792
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
744
793
|
}
|
|
745
794
|
//#endregion
|
|
746
|
-
export {
|
|
795
|
+
export { EVENTS_ENDPOINT as A, openaiToolsToBedrock as C, transformTools as D, transformToolChoice as E, getShareApiBaseUrl as F, getShareViewBaseUrl as I, FILE_METADATA_KEY as L, TERMINAL_MAX_WIDTH as M, getDefaultPort as N, CLOUD_PROVIDER_PREFIX as O, getDefaultShareViewBaseUrl as P, HUMAN_ASSERTION_TYPE as R, openaiToolChoiceToBedrock as S, toTitleCase as T, REQUEST_TIMEOUT_MS as _, getFetchWithProxyHeaders as a, isOpenAIToolChoice as b, isTransientError as c, getCurrentTimestamp as d, sleep as f, LONG_RUNNING_MODEL_TIMEOUT_MS as g, parseRetryAfter as h, fetchWithTimeout as i, R_ENDPOINT as j, CONSENT_ENDPOINT as k, withFetchRetryContext as l, parseRateLimitHeaders as m, fetchWithProxy as n, handleRateLimit as o, sleepWithAbort as p, fetchWithRetries as r, isRateLimited as s, clearAgentCache as t, isPromptfooCloudApiHost as u, calculateCost as v, parseChatPrompt as w, isPromptfooSampleTarget as x, isOpenAIToolArray as y };
|
|
747
796
|
|
|
748
|
-
//# sourceMappingURL=fetch-
|
|
797
|
+
//# sourceMappingURL=fetch-DXUnXkVU.js.map
|