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,16 +1,19 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
|
|
2
|
+
const require_logger = require("./logger-cfNpzI4o.cjs");
|
|
3
|
+
const require_invariant = require("./invariant-QtnLD03y.cjs");
|
|
4
|
+
const require_version = require("./version-BWCSaByA.cjs");
|
|
3
5
|
let fs = require("fs");
|
|
4
|
-
fs =
|
|
6
|
+
fs = require_rolldown_runtime.__toESM(fs, 1);
|
|
5
7
|
let path = require("path");
|
|
6
|
-
path =
|
|
8
|
+
path = require_rolldown_runtime.__toESM(path, 1);
|
|
7
9
|
let js_yaml = require("js-yaml");
|
|
8
|
-
js_yaml =
|
|
9
|
-
let
|
|
10
|
+
js_yaml = require_rolldown_runtime.__toESM(js_yaml, 1);
|
|
11
|
+
let node_async_hooks = require("node:async_hooks");
|
|
10
12
|
let fs_promises = require("fs/promises");
|
|
11
|
-
fs_promises =
|
|
13
|
+
fs_promises = require_rolldown_runtime.__toESM(fs_promises, 1);
|
|
12
14
|
let proxy_from_env = require("proxy-from-env");
|
|
13
15
|
let undici = require("undici");
|
|
16
|
+
let util = require("util");
|
|
14
17
|
let zlib = require("zlib");
|
|
15
18
|
//#region src/providers/constants.ts
|
|
16
19
|
const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
@@ -19,19 +22,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
19
22
|
* Used to distinguish human ratings from automated assertions.
|
|
20
23
|
*/
|
|
21
24
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
22
|
-
//#endregion
|
|
23
|
-
//#region src/version.ts
|
|
24
|
-
/**
|
|
25
|
-
* Application version from package.json.
|
|
26
|
-
* Injected at build time, or read from npm environment in development.
|
|
27
|
-
*/
|
|
28
|
-
const VERSION = "0.121.4";
|
|
29
|
-
/**
|
|
30
|
-
* PostHog analytics key.
|
|
31
|
-
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
32
|
-
* Empty string in development/test.
|
|
33
|
-
*/
|
|
34
|
-
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
35
25
|
function getShareApiBaseUrl() {
|
|
36
26
|
return require_logger.getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
37
27
|
}
|
|
@@ -47,6 +37,223 @@ const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
|
|
|
47
37
|
const EVENTS_ENDPOINT = "https://a.promptfoo.app";
|
|
48
38
|
const R_ENDPOINT = "https://r.promptfoo.app/";
|
|
49
39
|
//#endregion
|
|
40
|
+
//#region src/globalConfig/globalConfig.ts
|
|
41
|
+
/**
|
|
42
|
+
* Functions for manipulating the global configuration file, which lives at
|
|
43
|
+
* ~/.promptfoo/promptfoo.yaml by default.
|
|
44
|
+
*/
|
|
45
|
+
function writeGlobalConfig(config) {
|
|
46
|
+
fs.writeFileSync(path.join(require_logger.getConfigDirectoryPath(true), "promptfoo.yaml"), js_yaml.default.dump(config));
|
|
47
|
+
}
|
|
48
|
+
function readGlobalConfig() {
|
|
49
|
+
const configDir = require_logger.getConfigDirectoryPath();
|
|
50
|
+
const configFilePath = path.join(configDir, "promptfoo.yaml");
|
|
51
|
+
let globalConfig = { id: crypto.randomUUID() };
|
|
52
|
+
if (fs.existsSync(configFilePath)) {
|
|
53
|
+
globalConfig = js_yaml.default.load(fs.readFileSync(configFilePath, "utf-8")) || {};
|
|
54
|
+
if (!globalConfig?.id) {
|
|
55
|
+
globalConfig = {
|
|
56
|
+
...globalConfig,
|
|
57
|
+
id: crypto.randomUUID()
|
|
58
|
+
};
|
|
59
|
+
writeGlobalConfig(globalConfig);
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
if (!fs.existsSync(configDir)) fs.mkdirSync(configDir, { recursive: true });
|
|
63
|
+
fs.writeFileSync(configFilePath, js_yaml.default.dump(globalConfig));
|
|
64
|
+
}
|
|
65
|
+
return globalConfig;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Merges the top-level keys into existing config.
|
|
69
|
+
* @param partialConfig New keys to merge into the existing config.
|
|
70
|
+
*/
|
|
71
|
+
function writeGlobalConfigPartial(partialConfig) {
|
|
72
|
+
const updatedConfig = { ...readGlobalConfig() };
|
|
73
|
+
Object.entries(partialConfig).forEach(([key, value]) => {
|
|
74
|
+
if (value !== void 0 && value !== null) updatedConfig[key] = value;
|
|
75
|
+
else delete updatedConfig[key];
|
|
76
|
+
});
|
|
77
|
+
writeGlobalConfig(updatedConfig);
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/globalConfig/cloud.ts
|
|
81
|
+
const CLOUD_API_HOST = "https://api.promptfoo.app";
|
|
82
|
+
const API_HOST = require_logger.getEnvString("API_HOST", CLOUD_API_HOST);
|
|
83
|
+
const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
|
|
84
|
+
var CloudConfig = class {
|
|
85
|
+
config;
|
|
86
|
+
constructor() {
|
|
87
|
+
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
88
|
+
this.config = {
|
|
89
|
+
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
90
|
+
apiHost: savedConfig.apiHost,
|
|
91
|
+
apiKey: savedConfig.apiKey,
|
|
92
|
+
sharing: savedConfig.sharing,
|
|
93
|
+
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
94
|
+
currentTeamId: savedConfig.currentTeamId,
|
|
95
|
+
teams: savedConfig.teams
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
|
|
100
|
+
* Config file takes precedence over environment variable.
|
|
101
|
+
*/
|
|
102
|
+
resolveApiKey() {
|
|
103
|
+
return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
|
|
107
|
+
* or defaults to the standard cloud API host.
|
|
108
|
+
* Config file takes precedence over environment variable.
|
|
109
|
+
*/
|
|
110
|
+
resolveApiHost() {
|
|
111
|
+
return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
|
|
112
|
+
}
|
|
113
|
+
isEnabled() {
|
|
114
|
+
return !!this.resolveApiKey();
|
|
115
|
+
}
|
|
116
|
+
setApiHost(apiHost) {
|
|
117
|
+
this.config.apiHost = apiHost;
|
|
118
|
+
this.saveConfig();
|
|
119
|
+
}
|
|
120
|
+
setApiKey(apiKey) {
|
|
121
|
+
this.config.apiKey = apiKey;
|
|
122
|
+
this.saveConfig();
|
|
123
|
+
}
|
|
124
|
+
getApiKey() {
|
|
125
|
+
return this.resolveApiKey();
|
|
126
|
+
}
|
|
127
|
+
getApiHost() {
|
|
128
|
+
return this.resolveApiHost();
|
|
129
|
+
}
|
|
130
|
+
setAppUrl(appUrl) {
|
|
131
|
+
this.config.appUrl = appUrl;
|
|
132
|
+
this.saveConfig();
|
|
133
|
+
}
|
|
134
|
+
getAppUrl() {
|
|
135
|
+
return this.config.appUrl;
|
|
136
|
+
}
|
|
137
|
+
getSharing() {
|
|
138
|
+
return this.config.sharing;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Sets the sharing preference. Note: this value is only updated at authentication time
|
|
142
|
+
* (via `validateAndSetApiToken`) and may become stale if the user's license status
|
|
143
|
+
* changes between re-authentications.
|
|
144
|
+
*/
|
|
145
|
+
setSharing(sharing) {
|
|
146
|
+
this.config.sharing = sharing;
|
|
147
|
+
this.saveConfig();
|
|
148
|
+
}
|
|
149
|
+
delete() {
|
|
150
|
+
writeGlobalConfigPartial({ cloud: {} });
|
|
151
|
+
this.reload();
|
|
152
|
+
}
|
|
153
|
+
saveConfig() {
|
|
154
|
+
writeGlobalConfigPartial({ cloud: this.config });
|
|
155
|
+
this.reload();
|
|
156
|
+
}
|
|
157
|
+
reload() {
|
|
158
|
+
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
159
|
+
this.config = {
|
|
160
|
+
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
161
|
+
apiHost: savedConfig.apiHost,
|
|
162
|
+
apiKey: savedConfig.apiKey,
|
|
163
|
+
sharing: savedConfig.sharing,
|
|
164
|
+
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
165
|
+
currentTeamId: savedConfig.currentTeamId,
|
|
166
|
+
teams: savedConfig.teams
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
|
|
170
|
+
this.setApiKey(token);
|
|
171
|
+
this.setApiHost(apiHost);
|
|
172
|
+
this.setAppUrl(app.url);
|
|
173
|
+
if (typeof hasActiveLicense === "boolean") {
|
|
174
|
+
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
175
|
+
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
176
|
+
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async validateApiToken(token, apiHost) {
|
|
180
|
+
try {
|
|
181
|
+
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
182
|
+
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
183
|
+
if (!response.ok) {
|
|
184
|
+
const errorMessage = await response.text();
|
|
185
|
+
require_logger.logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
|
|
186
|
+
throw new Error("Failed to validate API token: " + response.statusText);
|
|
187
|
+
}
|
|
188
|
+
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
189
|
+
return {
|
|
190
|
+
user,
|
|
191
|
+
organization,
|
|
192
|
+
app,
|
|
193
|
+
...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
|
|
194
|
+
};
|
|
195
|
+
} catch (err) {
|
|
196
|
+
const error = err;
|
|
197
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
198
|
+
require_logger.logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
|
|
199
|
+
if (error.cause) require_logger.logger.error(`Cause: ${error.cause}`);
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async validateAndSetApiToken(token, apiHost) {
|
|
204
|
+
const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
|
|
205
|
+
this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
|
|
206
|
+
return {
|
|
207
|
+
user,
|
|
208
|
+
organization,
|
|
209
|
+
app,
|
|
210
|
+
hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
getCurrentOrganizationId() {
|
|
214
|
+
return this.config.currentOrganizationId;
|
|
215
|
+
}
|
|
216
|
+
setCurrentOrganization(organizationId) {
|
|
217
|
+
this.config.currentOrganizationId = organizationId;
|
|
218
|
+
this.saveConfig();
|
|
219
|
+
}
|
|
220
|
+
getCurrentTeamId(organizationId) {
|
|
221
|
+
if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
|
|
222
|
+
return this.config.currentTeamId;
|
|
223
|
+
}
|
|
224
|
+
setCurrentTeamId(teamId, organizationId) {
|
|
225
|
+
if (organizationId) {
|
|
226
|
+
if (!this.config.teams) this.config.teams = {};
|
|
227
|
+
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
228
|
+
this.config.teams[organizationId].currentTeamId = teamId;
|
|
229
|
+
} else this.config.currentTeamId = teamId;
|
|
230
|
+
this.saveConfig();
|
|
231
|
+
}
|
|
232
|
+
clearCurrentTeamId(organizationId) {
|
|
233
|
+
if (organizationId) {
|
|
234
|
+
if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
|
|
235
|
+
} else delete this.config.currentTeamId;
|
|
236
|
+
this.saveConfig();
|
|
237
|
+
}
|
|
238
|
+
cacheTeams(teams, organizationId) {
|
|
239
|
+
if (organizationId) {
|
|
240
|
+
if (!this.config.teams) this.config.teams = {};
|
|
241
|
+
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
242
|
+
this.config.teams[organizationId].cache = teams.map((t) => ({
|
|
243
|
+
id: t.id,
|
|
244
|
+
name: t.name,
|
|
245
|
+
slug: t.slug,
|
|
246
|
+
lastFetched: (/* @__PURE__ */ new Date()).toISOString()
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
this.saveConfig();
|
|
250
|
+
}
|
|
251
|
+
getCachedTeams(organizationId) {
|
|
252
|
+
if (organizationId) return this.config.teams?.[organizationId]?.cache;
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
const cloudConfig = new CloudConfig();
|
|
256
|
+
//#endregion
|
|
50
257
|
//#region src/providers/shared.ts
|
|
51
258
|
/**
|
|
52
259
|
* The default timeout for API requests in milliseconds.
|
|
@@ -71,8 +278,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
|
|
|
71
278
|
if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
|
|
72
279
|
const model = models.find((m) => m.id === modelName);
|
|
73
280
|
if (!model || !model.cost) return;
|
|
74
|
-
const
|
|
75
|
-
const
|
|
281
|
+
const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
|
|
282
|
+
const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
|
|
283
|
+
const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
|
|
76
284
|
return inputCost * promptTokens + outputCost * completionTokens;
|
|
77
285
|
}
|
|
78
286
|
/**
|
|
@@ -440,220 +648,6 @@ function getCurrentTimestamp() {
|
|
|
440
648
|
}
|
|
441
649
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
442
650
|
//#endregion
|
|
443
|
-
//#region src/globalConfig/globalConfig.ts
|
|
444
|
-
/**
|
|
445
|
-
* Functions for manipulating the global configuration file, which lives at
|
|
446
|
-
* ~/.promptfoo/promptfoo.yaml by default.
|
|
447
|
-
*/
|
|
448
|
-
function writeGlobalConfig(config) {
|
|
449
|
-
fs.writeFileSync(path.join(require_logger.getConfigDirectoryPath(true), "promptfoo.yaml"), js_yaml.default.dump(config));
|
|
450
|
-
}
|
|
451
|
-
function readGlobalConfig() {
|
|
452
|
-
const configDir = require_logger.getConfigDirectoryPath();
|
|
453
|
-
const configFilePath = path.join(configDir, "promptfoo.yaml");
|
|
454
|
-
let globalConfig = { id: crypto.randomUUID() };
|
|
455
|
-
if (fs.existsSync(configFilePath)) {
|
|
456
|
-
globalConfig = js_yaml.default.load(fs.readFileSync(configFilePath, "utf-8")) || {};
|
|
457
|
-
if (!globalConfig?.id) {
|
|
458
|
-
globalConfig = {
|
|
459
|
-
...globalConfig,
|
|
460
|
-
id: crypto.randomUUID()
|
|
461
|
-
};
|
|
462
|
-
writeGlobalConfig(globalConfig);
|
|
463
|
-
}
|
|
464
|
-
} else {
|
|
465
|
-
if (!fs.existsSync(configDir)) fs.mkdirSync(configDir, { recursive: true });
|
|
466
|
-
fs.writeFileSync(configFilePath, js_yaml.default.dump(globalConfig));
|
|
467
|
-
}
|
|
468
|
-
return globalConfig;
|
|
469
|
-
}
|
|
470
|
-
/**
|
|
471
|
-
* Merges the top-level keys into existing config.
|
|
472
|
-
* @param partialConfig New keys to merge into the existing config.
|
|
473
|
-
*/
|
|
474
|
-
function writeGlobalConfigPartial(partialConfig) {
|
|
475
|
-
const updatedConfig = { ...readGlobalConfig() };
|
|
476
|
-
Object.entries(partialConfig).forEach(([key, value]) => {
|
|
477
|
-
if (value !== void 0 && value !== null) updatedConfig[key] = value;
|
|
478
|
-
else delete updatedConfig[key];
|
|
479
|
-
});
|
|
480
|
-
writeGlobalConfig(updatedConfig);
|
|
481
|
-
}
|
|
482
|
-
const API_HOST = require_logger.getEnvString("API_HOST", "https://api.promptfoo.app");
|
|
483
|
-
const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
|
|
484
|
-
var CloudConfig = class {
|
|
485
|
-
config;
|
|
486
|
-
constructor() {
|
|
487
|
-
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
488
|
-
this.config = {
|
|
489
|
-
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
490
|
-
apiHost: savedConfig.apiHost,
|
|
491
|
-
apiKey: savedConfig.apiKey,
|
|
492
|
-
sharing: savedConfig.sharing,
|
|
493
|
-
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
494
|
-
currentTeamId: savedConfig.currentTeamId,
|
|
495
|
-
teams: savedConfig.teams
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
|
|
500
|
-
* Config file takes precedence over environment variable.
|
|
501
|
-
*/
|
|
502
|
-
resolveApiKey() {
|
|
503
|
-
return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
|
|
504
|
-
}
|
|
505
|
-
/**
|
|
506
|
-
* Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
|
|
507
|
-
* or defaults to the standard cloud API host.
|
|
508
|
-
* Config file takes precedence over environment variable.
|
|
509
|
-
*/
|
|
510
|
-
resolveApiHost() {
|
|
511
|
-
return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
|
|
512
|
-
}
|
|
513
|
-
isEnabled() {
|
|
514
|
-
return !!this.resolveApiKey();
|
|
515
|
-
}
|
|
516
|
-
setApiHost(apiHost) {
|
|
517
|
-
this.config.apiHost = apiHost;
|
|
518
|
-
this.saveConfig();
|
|
519
|
-
}
|
|
520
|
-
setApiKey(apiKey) {
|
|
521
|
-
this.config.apiKey = apiKey;
|
|
522
|
-
this.saveConfig();
|
|
523
|
-
}
|
|
524
|
-
getApiKey() {
|
|
525
|
-
return this.resolveApiKey();
|
|
526
|
-
}
|
|
527
|
-
getApiHost() {
|
|
528
|
-
return this.resolveApiHost();
|
|
529
|
-
}
|
|
530
|
-
setAppUrl(appUrl) {
|
|
531
|
-
this.config.appUrl = appUrl;
|
|
532
|
-
this.saveConfig();
|
|
533
|
-
}
|
|
534
|
-
getAppUrl() {
|
|
535
|
-
return this.config.appUrl;
|
|
536
|
-
}
|
|
537
|
-
getSharing() {
|
|
538
|
-
return this.config.sharing;
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* Sets the sharing preference. Note: this value is only updated at authentication time
|
|
542
|
-
* (via `validateAndSetApiToken`) and may become stale if the user's license status
|
|
543
|
-
* changes between re-authentications.
|
|
544
|
-
*/
|
|
545
|
-
setSharing(sharing) {
|
|
546
|
-
this.config.sharing = sharing;
|
|
547
|
-
this.saveConfig();
|
|
548
|
-
}
|
|
549
|
-
delete() {
|
|
550
|
-
writeGlobalConfigPartial({ cloud: {} });
|
|
551
|
-
this.reload();
|
|
552
|
-
}
|
|
553
|
-
saveConfig() {
|
|
554
|
-
writeGlobalConfigPartial({ cloud: this.config });
|
|
555
|
-
this.reload();
|
|
556
|
-
}
|
|
557
|
-
reload() {
|
|
558
|
-
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
559
|
-
this.config = {
|
|
560
|
-
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
561
|
-
apiHost: savedConfig.apiHost,
|
|
562
|
-
apiKey: savedConfig.apiKey,
|
|
563
|
-
sharing: savedConfig.sharing,
|
|
564
|
-
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
565
|
-
currentTeamId: savedConfig.currentTeamId,
|
|
566
|
-
teams: savedConfig.teams
|
|
567
|
-
};
|
|
568
|
-
}
|
|
569
|
-
saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
|
|
570
|
-
this.setApiKey(token);
|
|
571
|
-
this.setApiHost(apiHost);
|
|
572
|
-
this.setAppUrl(app.url);
|
|
573
|
-
if (typeof hasActiveLicense === "boolean") {
|
|
574
|
-
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
575
|
-
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
576
|
-
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
async validateApiToken(token, apiHost) {
|
|
580
|
-
try {
|
|
581
|
-
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
582
|
-
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
583
|
-
if (!response.ok) {
|
|
584
|
-
const errorMessage = await response.text();
|
|
585
|
-
require_logger.logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
|
|
586
|
-
throw new Error("Failed to validate API token: " + response.statusText);
|
|
587
|
-
}
|
|
588
|
-
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
589
|
-
return {
|
|
590
|
-
user,
|
|
591
|
-
organization,
|
|
592
|
-
app,
|
|
593
|
-
...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
|
|
594
|
-
};
|
|
595
|
-
} catch (err) {
|
|
596
|
-
const error = err;
|
|
597
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
598
|
-
require_logger.logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
|
|
599
|
-
if (error.cause) require_logger.logger.error(`Cause: ${error.cause}`);
|
|
600
|
-
throw error;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
async validateAndSetApiToken(token, apiHost) {
|
|
604
|
-
const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
|
|
605
|
-
this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
|
|
606
|
-
return {
|
|
607
|
-
user,
|
|
608
|
-
organization,
|
|
609
|
-
app,
|
|
610
|
-
hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
|
|
611
|
-
};
|
|
612
|
-
}
|
|
613
|
-
getCurrentOrganizationId() {
|
|
614
|
-
return this.config.currentOrganizationId;
|
|
615
|
-
}
|
|
616
|
-
setCurrentOrganization(organizationId) {
|
|
617
|
-
this.config.currentOrganizationId = organizationId;
|
|
618
|
-
this.saveConfig();
|
|
619
|
-
}
|
|
620
|
-
getCurrentTeamId(organizationId) {
|
|
621
|
-
if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
|
|
622
|
-
return this.config.currentTeamId;
|
|
623
|
-
}
|
|
624
|
-
setCurrentTeamId(teamId, organizationId) {
|
|
625
|
-
if (organizationId) {
|
|
626
|
-
if (!this.config.teams) this.config.teams = {};
|
|
627
|
-
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
628
|
-
this.config.teams[organizationId].currentTeamId = teamId;
|
|
629
|
-
} else this.config.currentTeamId = teamId;
|
|
630
|
-
this.saveConfig();
|
|
631
|
-
}
|
|
632
|
-
clearCurrentTeamId(organizationId) {
|
|
633
|
-
if (organizationId) {
|
|
634
|
-
if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
|
|
635
|
-
} else delete this.config.currentTeamId;
|
|
636
|
-
this.saveConfig();
|
|
637
|
-
}
|
|
638
|
-
cacheTeams(teams, organizationId) {
|
|
639
|
-
if (organizationId) {
|
|
640
|
-
if (!this.config.teams) this.config.teams = {};
|
|
641
|
-
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
642
|
-
this.config.teams[organizationId].cache = teams.map((t) => ({
|
|
643
|
-
id: t.id,
|
|
644
|
-
name: t.name,
|
|
645
|
-
slug: t.slug,
|
|
646
|
-
lastFetched: (/* @__PURE__ */ new Date()).toISOString()
|
|
647
|
-
}));
|
|
648
|
-
}
|
|
649
|
-
this.saveConfig();
|
|
650
|
-
}
|
|
651
|
-
getCachedTeams(organizationId) {
|
|
652
|
-
if (organizationId) return this.config.teams?.[organizationId]?.cache;
|
|
653
|
-
}
|
|
654
|
-
};
|
|
655
|
-
const cloudConfig = new CloudConfig();
|
|
656
|
-
//#endregion
|
|
657
651
|
//#region src/util/fetch/monkeyPatchFetch.ts
|
|
658
652
|
const gzipAsync = (0, util.promisify)(zlib.gzip);
|
|
659
653
|
function isConnectionError(error) {
|
|
@@ -662,6 +656,14 @@ function isConnectionError(error) {
|
|
|
662
656
|
/**
|
|
663
657
|
* Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
|
|
664
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
|
+
}
|
|
665
667
|
async function monkeyPatchFetch(url, options) {
|
|
666
668
|
const NO_LOG_URLS = [
|
|
667
669
|
R_ENDPOINT,
|
|
@@ -681,7 +683,7 @@ async function monkeyPatchFetch(url, options) {
|
|
|
681
683
|
} catch (e) {
|
|
682
684
|
require_logger.logger.warn(`Failed to compress request body: ${e}`);
|
|
683
685
|
}
|
|
684
|
-
if (
|
|
686
|
+
if (isPromptfooCloudApiHost(url)) {
|
|
685
687
|
const token = cloudConfig.getApiKey();
|
|
686
688
|
opts.headers = {
|
|
687
689
|
...opts.headers || {},
|
|
@@ -715,11 +717,31 @@ async function monkeyPatchFetch(url, options) {
|
|
|
715
717
|
}
|
|
716
718
|
}
|
|
717
719
|
//#endregion
|
|
720
|
+
//#region src/util/fetch/retryContext.ts
|
|
721
|
+
const fetchRetryContext = new node_async_hooks.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
|
|
718
739
|
//#region src/util/fetch/index.ts
|
|
719
|
-
var fetch_exports = /* @__PURE__ */
|
|
740
|
+
var fetch_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
720
741
|
fetchWithProxy: () => fetchWithProxy,
|
|
721
742
|
fetchWithRetries: () => fetchWithRetries,
|
|
722
743
|
fetchWithTimeout: () => fetchWithTimeout,
|
|
744
|
+
getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
|
|
723
745
|
handleRateLimit: () => handleRateLimit,
|
|
724
746
|
isRateLimited: () => isRateLimited,
|
|
725
747
|
isTransientError: () => isTransientError
|
|
@@ -774,20 +796,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
|
|
|
774
796
|
cachedProxyAgents.set(cacheKey, agent);
|
|
775
797
|
return agent;
|
|
776
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": require_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
|
+
}
|
|
777
829
|
async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
778
830
|
let finalUrl = url;
|
|
779
|
-
let finalUrlString;
|
|
780
|
-
if (typeof url === "string") finalUrlString = url;
|
|
781
|
-
else if (url instanceof URL) finalUrlString = url.toString();
|
|
782
|
-
else if (url instanceof Request) finalUrlString = url.url;
|
|
831
|
+
let finalUrlString = getFetchUrlString(url);
|
|
783
832
|
if (!finalUrlString) throw new Error("Invalid URL");
|
|
784
833
|
const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
|
|
785
834
|
const finalOptions = {
|
|
786
835
|
...options,
|
|
787
|
-
headers:
|
|
788
|
-
...options.headers,
|
|
789
|
-
"x-promptfoo-version": VERSION
|
|
790
|
-
},
|
|
836
|
+
headers: getFetchWithProxyHeaders(url, options),
|
|
791
837
|
signal: combinedSignal
|
|
792
838
|
};
|
|
793
839
|
if (typeof url === "string") try {
|
|
@@ -825,10 +871,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
825
871
|
require_logger.logger.debug(`Using proxy: ${require_logger.sanitizeUrl(proxyUrl)}`);
|
|
826
872
|
finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
|
|
827
873
|
} else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
|
|
828
|
-
const
|
|
874
|
+
const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
|
|
875
|
+
const maxTransientRetries = disableTransientRetries ? 0 : 3;
|
|
829
876
|
for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
|
|
830
877
|
const response = await monkeyPatchFetch(finalUrl, finalOptions);
|
|
831
|
-
if (!
|
|
878
|
+
if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
|
|
832
879
|
const backoffMs = Math.pow(2, attempt) * 1e3;
|
|
833
880
|
require_logger.logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
|
|
834
881
|
await sleep(backoffMs);
|
|
@@ -901,8 +948,17 @@ function isTransientError(response) {
|
|
|
901
948
|
default: return false;
|
|
902
949
|
}
|
|
903
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
|
+
}
|
|
904
959
|
async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
905
|
-
|
|
960
|
+
const contextMaxRetries = getFetchRetryContextMaxRetries();
|
|
961
|
+
maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
|
|
906
962
|
let lastErrorMessage;
|
|
907
963
|
const backoff = require_logger.getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
|
|
908
964
|
for (let i = 0; i <= maxRetries; i++) {
|
|
@@ -914,21 +970,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
914
970
|
}, timeout);
|
|
915
971
|
if (require_logger.getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
|
|
916
972
|
if (response && isRateLimited(response)) {
|
|
917
|
-
require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
918
973
|
lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
|
|
974
|
+
if (i >= maxRetries) {
|
|
975
|
+
require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
|
|
976
|
+
break;
|
|
977
|
+
}
|
|
978
|
+
require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
919
979
|
await handleRateLimit(response);
|
|
920
980
|
continue;
|
|
921
981
|
}
|
|
922
982
|
return response;
|
|
923
983
|
} catch (error) {
|
|
924
984
|
if (error instanceof Error && error.name === "AbortError") throw error;
|
|
925
|
-
|
|
926
|
-
if (error instanceof Error) {
|
|
927
|
-
const typedError = error;
|
|
928
|
-
errorMessage = `${typedError.name}: ${typedError.message}`;
|
|
929
|
-
if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
|
|
930
|
-
if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
|
|
931
|
-
} else errorMessage = String(error);
|
|
985
|
+
const errorMessage = formatFetchErrorMessage(error);
|
|
932
986
|
require_logger.logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
|
|
933
987
|
if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
|
|
934
988
|
lastErrorMessage = errorMessage;
|
|
@@ -979,12 +1033,6 @@ Object.defineProperty(exports, "LONG_RUNNING_MODEL_TIMEOUT_MS", {
|
|
|
979
1033
|
return LONG_RUNNING_MODEL_TIMEOUT_MS;
|
|
980
1034
|
}
|
|
981
1035
|
});
|
|
982
|
-
Object.defineProperty(exports, "POSTHOG_KEY", {
|
|
983
|
-
enumerable: true,
|
|
984
|
-
get: function() {
|
|
985
|
-
return POSTHOG_KEY;
|
|
986
|
-
}
|
|
987
|
-
});
|
|
988
1036
|
Object.defineProperty(exports, "REQUEST_TIMEOUT_MS", {
|
|
989
1037
|
enumerable: true,
|
|
990
1038
|
get: function() {
|
|
@@ -1003,12 +1051,6 @@ Object.defineProperty(exports, "TERMINAL_MAX_WIDTH", {
|
|
|
1003
1051
|
return TERMINAL_MAX_WIDTH;
|
|
1004
1052
|
}
|
|
1005
1053
|
});
|
|
1006
|
-
Object.defineProperty(exports, "VERSION", {
|
|
1007
|
-
enumerable: true,
|
|
1008
|
-
get: function() {
|
|
1009
|
-
return VERSION;
|
|
1010
|
-
}
|
|
1011
|
-
});
|
|
1012
1054
|
Object.defineProperty(exports, "calculateCost", {
|
|
1013
1055
|
enumerable: true,
|
|
1014
1056
|
get: function() {
|
|
@@ -1057,6 +1099,12 @@ Object.defineProperty(exports, "getDefaultShareViewBaseUrl", {
|
|
|
1057
1099
|
return getDefaultShareViewBaseUrl;
|
|
1058
1100
|
}
|
|
1059
1101
|
});
|
|
1102
|
+
Object.defineProperty(exports, "getFetchWithProxyHeaders", {
|
|
1103
|
+
enumerable: true,
|
|
1104
|
+
get: function() {
|
|
1105
|
+
return getFetchWithProxyHeaders;
|
|
1106
|
+
}
|
|
1107
|
+
});
|
|
1060
1108
|
Object.defineProperty(exports, "getShareApiBaseUrl", {
|
|
1061
1109
|
enumerable: true,
|
|
1062
1110
|
get: function() {
|
|
@@ -1081,6 +1129,12 @@ Object.defineProperty(exports, "isOpenAIToolChoice", {
|
|
|
1081
1129
|
return isOpenAIToolChoice;
|
|
1082
1130
|
}
|
|
1083
1131
|
});
|
|
1132
|
+
Object.defineProperty(exports, "isPromptfooCloudApiHost", {
|
|
1133
|
+
enumerable: true,
|
|
1134
|
+
get: function() {
|
|
1135
|
+
return isPromptfooCloudApiHost;
|
|
1136
|
+
}
|
|
1137
|
+
});
|
|
1084
1138
|
Object.defineProperty(exports, "isPromptfooSampleTarget", {
|
|
1085
1139
|
enumerable: true,
|
|
1086
1140
|
get: function() {
|
|
@@ -1147,6 +1201,12 @@ Object.defineProperty(exports, "transformTools", {
|
|
|
1147
1201
|
return transformTools;
|
|
1148
1202
|
}
|
|
1149
1203
|
});
|
|
1204
|
+
Object.defineProperty(exports, "withFetchRetryContext", {
|
|
1205
|
+
enumerable: true,
|
|
1206
|
+
get: function() {
|
|
1207
|
+
return withFetchRetryContext;
|
|
1208
|
+
}
|
|
1209
|
+
});
|
|
1150
1210
|
Object.defineProperty(exports, "writeGlobalConfig", {
|
|
1151
1211
|
enumerable: true,
|
|
1152
1212
|
get: function() {
|
|
@@ -1160,4 +1220,4 @@ Object.defineProperty(exports, "writeGlobalConfigPartial", {
|
|
|
1160
1220
|
}
|
|
1161
1221
|
});
|
|
1162
1222
|
|
|
1163
|
-
//# sourceMappingURL=fetch-
|
|
1223
|
+
//# sourceMappingURL=fetch-Dw4XZHjj.cjs.map
|