promptfoo 0.120.27 → 0.121.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/src/{ListApp-8WOe2nT6.js → ListApp-Du7YVwj5.js} +2 -4
- package/dist/src/accounts-B0pgC1oV.js +206 -0
- package/dist/src/{accounts-DVINui-2.js → accounts-Bm2D8Db9.js} +39 -34
- package/dist/src/{accounts-CPDRAMND.js → accounts-CiBLOnA7.js} +38 -33
- package/dist/src/{accounts-Fl2J3_Fu.cjs → accounts-gtkH-5KX.cjs} +77 -78
- package/dist/src/{agentic-utils-D922n6mm.js → agentic-utils-DS1g3GLF.js} +9 -10
- package/dist/src/{agents-BcsN_BgB.js → agents-9qiOy0ho.js} +16 -12
- package/dist/src/{agents-BXLmVsxR.js → agents-CBr9A01V.js} +37 -37
- package/dist/src/{agents-pMfppv9Z.js → agents-CmvBq8LV.js} +16 -18
- package/dist/src/{agents-hqgSV-3o.js → agents-D__IdAlg.js} +39 -40
- package/dist/src/{agents-BO2n8Z0d.cjs → agents-DbRtpYxR.cjs} +37 -40
- package/dist/src/{agents-BdUTAwi-.js → agents-DgF2zDag.js} +37 -42
- package/dist/src/{agents-DgJf2-ez.cjs → agents-Di9DKPzn.cjs} +16 -17
- package/dist/src/{agents-DNvSH78i.js → agents-cLXA8a_8.js} +17 -19
- package/dist/src/{aimlapi-DtgPI0nE.js → aimlapi-B4rcnZgv.js} +15 -17
- package/dist/src/{aimlapi-BE_Tg9Fl.cjs → aimlapi-BvlNH0gr.cjs} +15 -16
- package/dist/src/{aimlapi-DOib86oE.js → aimlapi-CnkC2HqE.js} +16 -18
- package/dist/src/{aimlapi-DTPACCB1.js → aimlapi-DHJU_kcV.js} +15 -4
- package/dist/src/app/assets/index-4LKxG2CG.js +439 -0
- package/dist/src/app/assets/{index-NCn4eVBv.css → index-C3zcsZFQ.css} +1 -1
- package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +36 -0
- package/dist/src/app/index.html +3 -3
- package/dist/src/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/{audio-BnRUGAm_.js → audio-Bkv46et0.js} +6 -5
- package/dist/src/{audio-Cwo68yZS.cjs → audio-CGMyULza.cjs} +6 -7
- package/dist/src/{audio-MSRki4JU.js → audio-ClI_AFre.js} +6 -8
- package/dist/src/{audio-BRYU0BFo.js → audio-Dz3z7s3J.js} +7 -9
- package/dist/src/{base-pGVmXNl4.cjs → base-CGrhspbK.cjs} +36 -38
- package/dist/src/{base-h961VXYk.js → base-CpjcHe4e.js} +11 -13
- package/dist/src/base-DLKtKMFh.js +193 -0
- package/dist/src/{base-XB2tDJrB.js → base-Dy1V8--Z.js} +11 -13
- package/dist/src/blobs-BDbfYdrJ.js +236 -0
- package/dist/src/{blobs-CR5C4Ihh.js → blobs-CBO20krR.js} +9 -12
- package/dist/src/{blobs-BM_e6hCa.js → blobs-CMHN0Qcz.js} +9 -12
- package/dist/src/{blobs-B-KQAFhX.cjs → blobs-D23XLin-.cjs} +34 -37
- package/dist/src/{cache-jsiwsAJv.js → cache-BVeDlD87.js} +132 -117
- package/dist/src/{cache-CIpsoBZR.js → cache-C4Nxf52C.js} +132 -118
- package/dist/src/cache-CeUpFm3M.cjs +5 -0
- package/dist/src/{cache-BTVYfbka.cjs → cache-Dh5WtQps.cjs} +182 -168
- package/dist/src/cache-i1P6crbO.js +756 -0
- package/dist/src/cache-n-RCJ-hL.js +6 -0
- package/dist/src/{chat-BcPjZXIp.js → chat-BiKyneZl.js} +45 -46
- package/dist/src/{chat-D31K7C4u.cjs → chat-C1Qst7jL.cjs} +20 -21
- package/dist/src/{chat-B84t99NW.js → chat-C2jrdPMx.js} +20 -9
- package/dist/src/{chat-BE44YOc6.cjs → chat-CgF-J-Jj.cjs} +65 -66
- package/dist/src/{chat-DwWifjxi.js → chat-CzkrVDfz.js} +20 -22
- package/dist/src/chat-DJIw17u0.js +766 -0
- package/dist/src/{chat-CcUCysjU.js → chat-DqxYYtWA.js} +45 -46
- package/dist/src/{chat-DZM2GUHO.js → chat-qmatte1u.js} +21 -23
- package/dist/src/{chatkit-D67HS_0b.js → chatkit-65VXf5SR.js} +58 -58
- package/dist/src/{chatkit-DAB_qfzI.js → chatkit-Be-Q-a9F.js} +58 -60
- package/dist/src/{chatkit-Biqb_wsD.js → chatkit-BxFvW8KY.js} +58 -60
- package/dist/src/{chatkit-PGG4ZYIn.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
- package/dist/src/chunk-DEq-mXcV.js +15 -0
- package/dist/src/chunk-DRamLcfz.js +16 -0
- package/dist/src/{claude-agent-sdk-SVM6AdBu.js → claude-agent-sdk-Apiy0iaz.js} +31 -31
- package/dist/src/{claude-agent-sdk-C-IOTPfo.js → claude-agent-sdk-D2bJee9S.js} +31 -29
- package/dist/src/{claude-agent-sdk-C9SiaQub.cjs → claude-agent-sdk-D9Z5Pr9X.cjs} +31 -28
- package/dist/src/{claude-agent-sdk-CiluSyW1.js → claude-agent-sdk-DfCoW0E6.js} +33 -20
- package/dist/src/cloud-BBh91EUK.js +4 -0
- package/dist/src/{cloud-CZ-q9Ier.js → cloud-C0dlstV_.js} +7 -9
- package/dist/src/{cloudflare-ai-BahKHyhh.js → cloudflare-ai-8TDxHR0x.js} +16 -18
- package/dist/src/{cloudflare-ai-v_qZD6_q.js → cloudflare-ai-BxAGvfju.js} +17 -19
- package/dist/src/{cloudflare-ai-Dfahv5SY.cjs → cloudflare-ai-CknbZ5LJ.cjs} +16 -17
- package/dist/src/{cloudflare-ai-Dxyt50Nl.js → cloudflare-ai-g7PB6VHR.js} +16 -4
- package/dist/src/{cloudflare-gateway-Bi_FpOFy.js → cloudflare-gateway-B9HWA5wf.js} +23 -23
- package/dist/src/{cloudflare-gateway-BPWoZIzJ.cjs → cloudflare-gateway-BSnDmHYo.cjs} +21 -22
- package/dist/src/{cloudflare-gateway-C0guUNwk.js → cloudflare-gateway-CKDb4dJ8.js} +26 -14
- package/dist/src/{cloudflare-gateway-btS7h1OZ.js → cloudflare-gateway-CP9QEWYS.js} +21 -25
- package/dist/src/{codex-sdk-DSxAnbfT.js → codex-sdk-C6UMlxwV.js} +28 -29
- package/dist/src/{codex-sdk-IYVi9fuM.js → codex-sdk-DUwKWezN.js} +28 -27
- package/dist/src/{codex-sdk-DulY0ZRq.js → codex-sdk-GGAw0qbD.js} +28 -29
- package/dist/src/{codex-sdk-DFKMtAyf.cjs → codex-sdk-fAO0c3yA.cjs} +28 -29
- package/dist/src/{cometapi-DzrR3SR_.js → cometapi-BL9yvj_f.js} +16 -4
- package/dist/src/{cometapi-DIO64tf4.cjs → cometapi-C4xSqeID.cjs} +21 -22
- package/dist/src/{cometapi-C9EEpJzT.js → cometapi-CUQq3H_a.js} +21 -24
- package/dist/src/{cometapi-DkNBMk0G.js → cometapi-DFNiKmSz.js} +17 -19
- package/dist/src/{completion-CG29bfKX.js → completion-5MzrpJxT.js} +11 -13
- package/dist/src/{completion-CCRT4kX1.cjs → completion-CM6oK8PS.cjs} +21 -23
- package/dist/src/{completion-Bgf1VJoq.js → completion-DZ083F31.js} +11 -13
- package/dist/src/completion-qRoZAYRB.js +120 -0
- package/dist/src/{createHash-Dw_iLu31.js → createHash-CTQmL3G2.js} +2 -3
- package/dist/src/{createHash-CYQy4YeL.cjs → createHash-CfZSc0b4.cjs} +13 -14
- package/dist/src/{createHash-CJcfskIZ.js → createHash-Da8fMwqB.js} +2 -3
- package/dist/src/createHash-DmPQkvBh.js +15 -0
- package/dist/src/{docker-D-ayp2FW.js → docker-Bb5dcxr8.js} +18 -20
- package/dist/src/{docker-B81N0t4e.js → docker-BvfL2BrW.js} +19 -21
- package/dist/src/{docker-DNcLR4Ig.cjs → docker-DcF2pRrj.cjs} +18 -19
- package/dist/src/{docker-egERKxCF.js → docker-ExVyLp0S.js} +18 -7
- package/dist/src/entrypoint.js +2 -3
- package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
- package/dist/src/{esm-B9dPm_BF.js → esm-C03C-mv3.js} +17 -20
- package/dist/src/{esm-D2pZ87fL.js → esm-CaIwzWR5.js} +18 -21
- package/dist/src/esm-Cd1AjG1D.js +379 -0
- package/dist/src/{esm-Ct-Joyue.cjs → esm-CnNt7sI4.cjs} +47 -49
- package/dist/src/eval-B3r2CVXr.js +15 -0
- package/dist/src/{eval-C-Nr6wX_.js → eval-Dg2nG4v2.js} +47 -54
- package/dist/src/evalResult-5xwYnECe.js +12 -0
- package/dist/src/evalResult-71lY93Kj.cjs +10 -0
- package/dist/src/{evalResult-DXMWJ3sx.js → evalResult-BBRNtX4I.js} +10 -11
- package/dist/src/{evalResult-4BzI2tmj.js → evalResult-BDMqrapS.js} +16 -12
- package/dist/src/evalResult-Dx5P5cIv.js +10 -0
- package/dist/src/{evalResult-CX8wQecI.cjs → evalResult-fuaI8HkH.cjs} +20 -21
- package/dist/src/{evaluator-8aGyV12L.js → evaluator-BhoWwp5b.js} +211 -235
- package/dist/src/evaluator-Jx6bRZV6.js +36 -0
- package/dist/src/{extractor-V5x_m1i0.js → extractor-C0EVHewb.js} +22 -24
- package/dist/src/extractor-D25qpmGX.js +374 -0
- package/dist/src/{extractor-CD5yKL-G.js → extractor-DReVID0K.js} +22 -24
- package/dist/src/{extractor-C031XmTA.cjs → extractor-pYLLi3wS.cjs} +37 -39
- package/dist/src/{fetch-BmbD-v1L.cjs → fetch-BPkYtG8K.cjs} +244 -277
- package/dist/src/fetch-BxNb_Lp3.js +5 -0
- package/dist/src/{fetch-D3OHf-lV.js → fetch-Cwxnd8zz.js} +36 -44
- package/dist/src/{fetch-CXZI9RRr.js → fetch-Dxpd4_sr.js} +23 -35
- package/dist/src/fetch-HaqdX7U1.js +780 -0
- package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
- package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
- package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
- package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
- package/dist/src/{formatDuration-CdevI3An.js → formatDuration-DgBVMN65.js} +2 -2
- package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
- package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
- package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
- package/dist/src/{genaiTracer-Dres3qrN.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
- package/dist/src/{graders--1y2u9HO.js → graders-BTeBGqjJ.js} +349 -397
- package/dist/src/graders-B_pgMLS2.js +34 -0
- package/dist/src/{graders-DTeBrzWp.js → graders-Bj_Odv7c.js} +349 -397
- package/dist/src/graders-DErokPDO.cjs +32 -0
- package/dist/src/graders-DP7KFFo-.js +13466 -0
- package/dist/src/graders-DR_uNe54.js +32 -0
- package/dist/src/{graders-DohM2dir.cjs → graders-DU49_J8Y.cjs} +684 -732
- package/dist/src/graders-w3176Wz-.js +32 -0
- package/dist/src/{image-B0U4Hqll.js → image-B02ogr_b.js} +7 -9
- package/dist/src/{image-DmE-niFE.js → image-B0h9VEMc.js} +6 -5
- package/dist/src/{image-CuKHuccK.cjs → image-BLmROtN3.cjs} +29 -30
- package/dist/src/{image-DNEIf_aI.js → image-Bb4vWQLM.js} +6 -8
- package/dist/src/{image-DpKl2F15.cjs → image-C1madmKh.cjs} +6 -7
- package/dist/src/{image-C3wHC9_h.js → image-CHfWvljl.js} +9 -10
- package/dist/src/{image-O1u4bCFg.js → image-DS-o-0ph.js} +9 -10
- package/dist/src/image-Dpxa1Jt6.js +257 -0
- package/dist/src/index.cjs +615 -695
- package/dist/src/index.d.cts +271 -7
- package/dist/src/index.d.ts +271 -3
- package/dist/src/index.js +580 -664
- package/dist/src/{interactiveCheck-Bxj1Swex.js → interactiveCheck-BgLZUIt3.js} +7 -8
- package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
- package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
- package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
- package/dist/src/invariant-vgHWClmd.js +25 -0
- package/dist/src/{knowledgeBase-CEzQobWX.js → knowledgeBase-B3OoKIej.js} +14 -9
- package/dist/src/{knowledgeBase-Be_zyW4L.js → knowledgeBase-CYTLHOt1.js} +16 -16
- package/dist/src/{knowledgeBase-BZ41IFwq.js → knowledgeBase-D33Ty2l6.js} +14 -18
- package/dist/src/{knowledgeBase-D-5BMXlr.cjs → knowledgeBase-DOO_BM9b.cjs} +14 -15
- package/dist/src/{litellm-DnbRJ2if.js → litellm-AaeZcZQF.js} +18 -19
- package/dist/src/{litellm-hUSNM_M2.cjs → litellm-I_hbp_dc.cjs} +17 -17
- package/dist/src/{litellm-CRDqPhNI.js → litellm-NbjknEh6.js} +17 -18
- package/dist/src/{litellm-9vR8zpfU.js → litellm-TrljxD9G.js} +17 -5
- package/dist/src/{logger-CG1uZPbQ.js → logger-CT3IKMKA.js} +10 -29
- package/dist/src/{logger-B7sBeGa0.cjs → logger-Cp1GPUjj.cjs} +152 -180
- package/dist/src/logger-DLcq4dWf.js +713 -0
- package/dist/src/{logger-LSBxlt7a.js → logger-KkObSCzq.js} +13 -31
- package/dist/src/{luma-ray-4blv9iZ2.js → luma-ray-BS2_tY8L.js} +22 -21
- package/dist/src/{luma-ray-drvgdpP9.js → luma-ray-DDsjcgZZ.js} +20 -13
- package/dist/src/{luma-ray-Hm3d6VJE.cjs → luma-ray-Due0n7di.cjs} +20 -21
- package/dist/src/{luma-ray-B2__8lYH.js → luma-ray-f6I2fft-.js} +20 -23
- package/dist/src/main.js +1170 -1321
- package/dist/src/{messages-Uee41Mj5.js → messages-BS17jdMx.js} +22 -24
- package/dist/src/{messages-XhiwCbi4.cjs → messages-Bs1kC7P4.cjs} +32 -34
- package/dist/src/{messages-CGPPidQr.js → messages-D0lx5qK7.js} +22 -24
- package/dist/src/messages-ZJk778GH.js +240 -0
- package/dist/src/{meteor-BYykdXrV.js → meteor-44VjEACX.js} +3 -4
- package/dist/src/{meteor-CsopaHrH.js → meteor-D-SotUw9.js} +3 -4
- package/dist/src/{meteor-e-E-2vVl.cjs → meteor-DLZZ3osF.cjs} +3 -4
- package/dist/src/{meteor-C8lGP6P4.js → meteor-DUiCJRC-.js} +3 -4
- package/dist/src/{modelslab-yKz-ZNB4.js → modelslab-Bmni6skY.js} +17 -10
- package/dist/src/{modelslab-E9gO-bYd.js → modelslab-Bx9IrZfS.js} +18 -20
- package/dist/src/{modelslab-lUVW0cmB.cjs → modelslab-CoUX6Jc_.cjs} +17 -18
- package/dist/src/{modelslab-ClBkr8_9.js → modelslab-DRb74SP4.js} +17 -19
- package/dist/src/{nova-reel-Dk8jNpId.js → nova-reel-BfPq-0Yk.js} +20 -13
- package/dist/src/{nova-reel-D8CuO6QH.cjs → nova-reel-C_QM18Xn.cjs} +20 -21
- package/dist/src/{nova-reel-u2eF2Cxm.js → nova-reel-D_W1tjMH.js} +22 -21
- package/dist/src/{nova-reel-P9bwvtYX.js → nova-reel-bgjxilYW.js} +20 -23
- package/dist/src/{nova-sonic-CK2rAiKi.js → nova-sonic-CFb5GYhg.js} +30 -26
- package/dist/src/{nova-sonic-BaqWlkds.js → nova-sonic-DIGQNR07.js} +30 -31
- package/dist/src/{nova-sonic-yZapPLv7.js → nova-sonic-De1HW5fD.js} +31 -32
- package/dist/src/{nova-sonic-Ds1C-dpm.cjs → nova-sonic-zfcljeRp.cjs} +30 -31
- package/dist/src/{openai-DUFopMrH.cjs → openai-Cuif0GEt.cjs} +8 -9
- package/dist/src/{openai-PblZ3jUE.js → openai-DElQ-fPX.js} +3 -4
- package/dist/src/{openai-CcN1B8Sb.js → openai-DhbB7eWK.js} +3 -4
- package/dist/src/openai-j-sE2O7r.js +44 -0
- package/dist/src/{openclaw-B6qqDr_u.cjs → openclaw-CSugPYAr.cjs} +188 -130
- package/dist/src/{openclaw-A-3_loM7.js → openclaw-DiSz3I5L.js} +180 -109
- package/dist/src/{openclaw-a3lylB-V.js → openclaw-DuvJKEW5.js} +178 -124
- package/dist/src/{openclaw-COn6QzDi.js → openclaw-tiVYRtr-.js} +178 -122
- package/dist/src/opencode-sdk-0j6rTWNb.js +562 -0
- package/dist/src/opencode-sdk-B3CWY9h_.js +560 -0
- package/dist/src/opencode-sdk-BL764Jdi.cjs +564 -0
- package/dist/src/opencode-sdk-C2y6UkP2.js +560 -0
- package/dist/src/{otlpReceiver-oyf5wLGC.js → otlpReceiver-C99PPb48.js} +53 -51
- package/dist/src/{otlpReceiver-lXsYVbpj.cjs → otlpReceiver-CGq6LspY.cjs} +53 -55
- package/dist/src/{otlpReceiver-94URx7UW.js → otlpReceiver-CdNBdbsk.js} +53 -55
- package/dist/src/{otlpReceiver-BmmTiMjA.js → otlpReceiver-D89fR-rC.js} +53 -55
- package/dist/src/{providerRegistry-Cq_JK_CJ.js → providerRegistry-B0RUOLI_.js} +7 -8
- package/dist/src/{providerRegistry-DSSHjMKf.js → providerRegistry-CD8MEar9.js} +7 -8
- package/dist/src/{providerRegistry-CvHEVJad.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
- package/dist/src/providerRegistry-DM8rZYol.js +45 -0
- package/dist/src/providers-B7V0njNs.js +32 -0
- package/dist/src/providers-BEwbhv0X.js +30 -0
- package/dist/src/{providers-Iil64vk9.js → providers-BlqUifFg.js} +1543 -1676
- package/dist/src/providers-CH3C7zf7.js +30 -0
- package/dist/src/{providers-DHbjzW2e.cjs → providers-CgKOSgTR.cjs} +1896 -2029
- package/dist/src/providers-D8lF1sqW.js +33246 -0
- package/dist/src/{providers-BnFpbY_s.js → providers-Dk_6ocUX.js} +1536 -1669
- package/dist/src/providers-zyB6k_38.cjs +31 -0
- package/dist/src/{pythonUtils-CcT5LH1M.js → pythonUtils-C3py6GC1.js} +18 -19
- package/dist/src/{pythonUtils-DBbuI3QJ.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
- package/dist/src/{pythonUtils-hZ8LeQLv.js → pythonUtils-D5nxkQ0P.js} +18 -19
- package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
- package/dist/src/{quiverai-BuI0tE39.js → quiverai-BbOUOn2L.js} +8 -7
- package/dist/src/{quiverai-DCGSZt4U.js → quiverai-CIaELU_m.js} +8 -10
- package/dist/src/{quiverai-DiMVJQDz.cjs → quiverai-PdShCPox.cjs} +8 -9
- package/dist/src/{quiverai-fQNkExW4.js → quiverai-uH-dcTIr.js} +9 -11
- package/dist/src/{render-Dj1smHEb.js → render-Drod8m7K.js} +4 -5
- package/dist/src/responses-CB2jwoAr.js +660 -0
- package/dist/src/{responses-ghR3IOfy.cjs → responses-D8SBTL64.cjs} +39 -42
- package/dist/src/{responses-DOAFFENS.js → responses-DIR9Ud3j.js} +24 -27
- package/dist/src/{responses-CxzoQoBe.js → responses-WNGNYe3K.js} +24 -27
- package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
- package/dist/src/{rubyUtils-CwbGmgYN.js → rubyUtils-BUVePouc.js} +27 -20
- package/dist/src/rubyUtils-BcuGX77l.js +222 -0
- package/dist/src/{rubyUtils-DudlFZed.js → rubyUtils-Boc4HZzX.js} +18 -19
- package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
- package/dist/src/{rubyUtils-C8MhKGHb.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
- package/dist/src/{sagemaker-gmskuyre.js → sagemaker-CNBxx5CJ.js} +75 -70
- package/dist/src/{sagemaker-CcxhlOAR.js → sagemaker-CemTFp2h.js} +75 -79
- package/dist/src/{sagemaker-77zbJ2Q2.cjs → sagemaker-Cl28mZU2.cjs} +75 -76
- package/dist/src/{sagemaker-DuM71dVU.js → sagemaker-YSyBXQQh.js} +77 -77
- package/dist/src/{scanner-DJYiSXQj.js → scanner-BsBlNXNn.js} +100 -121
- package/dist/src/server/index.js +5520 -67427
- package/dist/src/{server-B5v33lvE.cjs → server-C_7Ax-hA.cjs} +57 -67
- package/dist/src/{server-BJ4m4f1D.js → server-CqzrVGpF.js} +26 -29
- package/dist/src/server-CuxBbeSY.js +229 -0
- package/dist/src/server-DA4Cyrrq.js +7 -0
- package/dist/src/server-Dulb-4-K.cjs +5 -0
- package/dist/src/{server-RV_i_YX5.js → server-VWgWb00X.js} +19 -24
- package/dist/src/{signal-BW33JuId.js → signal-4U3mfRvL.js} +9 -11
- package/dist/src/{slack-DEURelTy.cjs → slack-BmVAVGaK.cjs} +7 -8
- package/dist/src/{slack-BQYeW9L3.js → slack-DCUPTzS2.js} +8 -8
- package/dist/src/{slack-BB6yuZzp.js → slack-DOdy_kyv.js} +7 -8
- package/dist/src/{slack-2pRrhhgJ.js → slack-DXMKtA-f.js} +7 -9
- package/dist/src/store-CXGFv4aR.js +228 -0
- package/dist/src/store-CXS-Q_91.js +6 -0
- package/dist/src/{store-D7CgQzAR.cjs → store-DLlFCC4h.cjs} +44 -45
- package/dist/src/{store-DJNsD1iC.js → store-DXilxTl-.js} +40 -36
- package/dist/src/{store-s3SftUwF.js → store-Dim__MDd.js} +34 -35
- package/dist/src/store-eYkaKMwq.cjs +5 -0
- package/dist/src/{tables-DfTsNN7X.js → tables-6YKwjN9-.js} +19 -21
- package/dist/src/tables-DLJPUdUE.js +288 -0
- package/dist/src/{tables-BKTmd6u7.cjs → tables-DPi7wKeM.cjs} +89 -91
- package/dist/src/{tables-DMegD0Xf.js → tables-gftXzE9I.js} +21 -23
- package/dist/src/telemetry-BpMfhthR.cjs +5 -0
- package/dist/src/{telemetry--WAdAfVi.js → telemetry-CMrFgtPB.js} +11 -13
- package/dist/src/telemetry-Cps3mIU-.js +171 -0
- package/dist/src/{telemetry-DQgVBCAb.cjs → telemetry-DaX14Chu.cjs} +21 -24
- package/dist/src/{telemetry-BedSm-bZ.js → telemetry-Dthj_BbD.js} +17 -14
- package/dist/src/telemetry-Dw38hanS.js +7 -0
- package/dist/src/{text-oiSbwSOI.js → text-B_UCRPp2.js} +2 -2
- package/dist/src/{text-oKzCBnK6.cjs → text-CW1cyrwj.cjs} +12 -13
- package/dist/src/{text-B_IrO4GZ.js → text-Db-Wt2u2.js} +2 -2
- package/dist/src/text-TIv0QYnd.js +22 -0
- package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
- package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
- package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
- package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
- package/dist/src/{transcription-mYS9vd5v.js → transcription-BNYURcXg.js} +14 -7
- package/dist/src/{transcription-X2-B4vkX.js → transcription-B_OdaHp7.js} +14 -16
- package/dist/src/{transcription-BO1AHegO.cjs → transcription-NLVG9MT1.cjs} +14 -15
- package/dist/src/{transcription-lzBLiTFJ.js → transcription-s6A-bNrZ.js} +15 -17
- package/dist/src/{transform-B1Hi5lWS.cjs → transform-CzK1Q0zl.cjs} +24 -26
- package/dist/src/{transform-DeGlxb0D.js → transform-D5HsjduX.js} +39 -47
- package/dist/src/{transform-CYDILYDe.js → transform-DECvGmzp.js} +15 -13
- package/dist/src/transform-DTGDnAzW.js +6 -0
- package/dist/src/{transform-BEgStbHK.js → transform-DilY9wbS.js} +10 -12
- package/dist/src/{transform-D5PjiWiZ.cjs → transform-DuHvhZpj.cjs} +179 -187
- package/dist/src/transform-aa6tmVpZ.js +216 -0
- package/dist/src/transform-m3qNw4KP.cjs +5 -0
- package/dist/src/transform-uAytVuyX.js +1506 -0
- package/dist/src/{transform-Dfl89yi4.js → transform-vNucnNr0.js} +39 -47
- package/dist/src/{transformersAvailability-SZnTS3pJ.js → transformersAvailability-CEVM2GNQ.js} +2 -2
- package/dist/src/{transformersAvailability-D-glmEy7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
- package/dist/src/{transformersAvailability-CjeFXhuJ.js → transformersAvailability-D6c6ROpT.js} +2 -2
- package/dist/src/{types-DWNf48sT.cjs → types-C_7nyzr1.cjs} +538 -574
- package/dist/src/{types-CXQduE9o.js → types-Cbd8uOMq.js} +68 -100
- package/dist/src/types-CzW2QFyi.js +3288 -0
- package/dist/src/{types-C5hEkb-x.js → types-DmyIJ-sR.js} +63 -99
- package/dist/src/{util-CoQjmE3u.js → util-B3xGByQh.js} +4 -5
- package/dist/src/{util-aLhtl3fe.cjs → util-B9vlHIIh.cjs} +208 -223
- package/dist/src/{util-Du96oyYS.js → util-BHGHw5G1.js} +4 -5
- package/dist/src/{util-DQ984syk.js → util-BRYkYPTd.js} +36 -51
- package/dist/src/{util-D9eLdGfa.js → util-BV4XUC0n.js} +5 -6
- package/dist/src/util-Bv6uGDfH.js +293 -0
- package/dist/src/{util-1wWM599Z.cjs → util-BzMcevZc.cjs} +50 -51
- package/dist/src/{util-_h4pVqrz.js → util-C1CeHl-P.js} +36 -51
- package/dist/src/{util-Bm_-UMD_.js → util-CMy69ZgQ.js} +5 -6
- package/dist/src/{util-CyUdMzV0.cjs → util-DGNOS1db.cjs} +34 -35
- package/dist/src/util-Dnmk2mBQ.js +599 -0
- package/dist/src/util-ZzmqNPlg.js +1426 -0
- package/dist/src/{utils-BjLy-Q72.cjs → utils-Cz9qXqII.cjs} +29 -32
- package/dist/src/{utils-CFMn2yHW.js → utils-XiOAgly5.js} +4 -7
- package/dist/src/utils-dLokC-eR.js +94 -0
- package/dist/src/{utils-DvWMzuMx.js → utils-f2-Moju7.js} +4 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -38
- package/dist/src/app/assets/index-B2D0bCSI.js +0 -439
- package/dist/src/app/assets/vendor-charts-CCl15Imd.js +0 -36
- package/dist/src/cache-ChPcurj7.js +0 -6
- package/dist/src/cache-VVu_W-yg.js +0 -8
- package/dist/src/cache-YLNCFEM2.cjs +0 -6
- package/dist/src/chunk-DHDDz29n.js +0 -22
- package/dist/src/chunk-FhC4c-0y.js +0 -21
- package/dist/src/cloud-BndfXy4H.js +0 -5
- package/dist/src/eval-BhHvMY82.js +0 -17
- package/dist/src/evalResult-Dq2gFNQY.js +0 -12
- package/dist/src/evalResult-nmcP5VKH.cjs +0 -12
- package/dist/src/evalResult-trqZjVYh.js +0 -14
- package/dist/src/evaluator-CnfPstzT.js +0 -39
- package/dist/src/fetch-IDPDue6F.cjs +0 -4
- package/dist/src/fetch-hKJ-It8q.js +0 -6
- package/dist/src/fetch-ouKnrWK-.js +0 -4
- package/dist/src/graders-CQn7WUsd.cjs +0 -34
- package/dist/src/graders-DC6QAbpW.js +0 -35
- package/dist/src/graders-DUWz3Y7j.js +0 -37
- package/dist/src/opencode-sdk-4bL9n-Gk.js +0 -382
- package/dist/src/opencode-sdk-BfC2zWcR.js +0 -376
- package/dist/src/opencode-sdk-DMJyuwMg.js +0 -380
- package/dist/src/opencode-sdk-Da-9adza.cjs +0 -383
- package/dist/src/providers-CsXB2Ix-.js +0 -35
- package/dist/src/providers-DO8ltjLC.js +0 -33
- package/dist/src/providers-Dtq-xnXd.cjs +0 -33
- package/dist/src/rubyUtils-BUbcND2f.js +0 -6
- package/dist/src/rubyUtils-Cr55X_KE.js +0 -5
- package/dist/src/rubyUtils-DlIiqoYo.cjs +0 -5
- package/dist/src/server-C2eQH4Gu.js +0 -6
- package/dist/src/server-CXWycu7H.cjs +0 -6
- package/dist/src/server-Q6OGlxxT.js +0 -8
- package/dist/src/store-B3EDO9Q3.js +0 -7
- package/dist/src/store-Dl9F8aw5.js +0 -6
- package/dist/src/store-SnrGrlt9.cjs +0 -6
- package/dist/src/telemetry-BGhiPZtl.js +0 -8
- package/dist/src/telemetry-CFfiYan6.cjs +0 -6
- package/dist/src/telemetry-DHzEduxX.js +0 -6
- package/dist/src/transform-C1x1ZlMQ.cjs +0 -6
- package/dist/src/transform-DYHjFmQu.js +0 -8
- package/dist/src/transform-rmwJT5JQ.js +0 -7
- package/dist/src/transformersAvailability-eJooj0gX.js +0 -35
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
+
import { _ as getEnvBool, b as getEnvString, c as sanitizeUrl, g as getConfigDirectoryPath, i as logger, r as logRequestResponse, w as state, y as getEnvInt } from "./logger-CT3IKMKA.js";
|
|
3
|
+
import { t as invariant } from "./invariant-Ddh24eXh.js";
|
|
3
4
|
import * as fs$1 from "fs";
|
|
4
5
|
import * as path$1 from "path";
|
|
5
6
|
import path from "path";
|
|
@@ -9,7 +10,6 @@ import * as fsPromises from "fs/promises";
|
|
|
9
10
|
import { getProxyForUrl } from "proxy-from-env";
|
|
10
11
|
import { Agent, ProxyAgent } from "undici";
|
|
11
12
|
import { gzip } from "zlib";
|
|
12
|
-
|
|
13
13
|
//#region src/providers/constants.ts
|
|
14
14
|
const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
15
15
|
/**
|
|
@@ -17,28 +17,21 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
17
17
|
* Used to distinguish human ratings from automated assertions.
|
|
18
18
|
*/
|
|
19
19
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
20
|
-
|
|
21
20
|
//#endregion
|
|
22
21
|
//#region src/version.ts
|
|
23
22
|
/**
|
|
24
23
|
* Application version from package.json.
|
|
25
24
|
* Injected at build time, or read from npm environment in development.
|
|
26
25
|
*/
|
|
27
|
-
const VERSION = "0.
|
|
26
|
+
const VERSION = "0.121.2";
|
|
28
27
|
/**
|
|
29
28
|
* PostHog analytics key.
|
|
30
29
|
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
31
30
|
* Empty string in development/test.
|
|
32
31
|
*/
|
|
33
32
|
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
34
|
-
|
|
35
|
-
//#endregion
|
|
36
|
-
//#region src/constants.ts
|
|
37
|
-
const DEFAULT_QUERY_LIMIT = 100;
|
|
38
|
-
const DEFAULT_MAX_CONCURRENCY = 4;
|
|
39
|
-
const DEFAULT_API_BASE_URL = "https://api.promptfoo.app";
|
|
40
33
|
function getShareApiBaseUrl() {
|
|
41
|
-
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") ||
|
|
34
|
+
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
42
35
|
}
|
|
43
36
|
function getDefaultShareViewBaseUrl() {
|
|
44
37
|
return getEnvString("PROMPTFOO_SHARING_APP_BASE_URL", `https://promptfoo.app`);
|
|
@@ -51,7 +44,6 @@ const CLOUD_PROVIDER_PREFIX = "promptfoo://provider/";
|
|
|
51
44
|
const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
|
|
52
45
|
const EVENTS_ENDPOINT = "https://a.promptfoo.app";
|
|
53
46
|
const R_ENDPOINT = "https://r.promptfoo.app/";
|
|
54
|
-
|
|
55
47
|
//#endregion
|
|
56
48
|
//#region src/providers/shared.ts
|
|
57
49
|
/**
|
|
@@ -290,14 +282,12 @@ function transformTools(tools, format) {
|
|
|
290
282
|
default: return tools;
|
|
291
283
|
}
|
|
292
284
|
}
|
|
293
|
-
|
|
294
285
|
//#endregion
|
|
295
286
|
//#region src/util/time.ts
|
|
296
287
|
function getCurrentTimestamp() {
|
|
297
288
|
return Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3);
|
|
298
289
|
}
|
|
299
290
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
300
|
-
|
|
301
291
|
//#endregion
|
|
302
292
|
//#region src/globalConfig/globalConfig.ts
|
|
303
293
|
/**
|
|
@@ -338,11 +328,7 @@ function writeGlobalConfigPartial(partialConfig) {
|
|
|
338
328
|
});
|
|
339
329
|
writeGlobalConfig(updatedConfig);
|
|
340
330
|
}
|
|
341
|
-
|
|
342
|
-
//#endregion
|
|
343
|
-
//#region src/globalConfig/cloud.ts
|
|
344
|
-
const CLOUD_API_HOST = "https://api.promptfoo.app";
|
|
345
|
-
const API_HOST = getEnvString("API_HOST", CLOUD_API_HOST);
|
|
331
|
+
const API_HOST = getEnvString("API_HOST", "https://api.promptfoo.app");
|
|
346
332
|
const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
|
|
347
333
|
var CloudConfig = class {
|
|
348
334
|
config;
|
|
@@ -431,11 +417,11 @@ var CloudConfig = class {
|
|
|
431
417
|
}
|
|
432
418
|
async validateAndSetApiToken(token, apiHost) {
|
|
433
419
|
try {
|
|
434
|
-
const { fetchWithProxy } = await
|
|
420
|
+
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
435
421
|
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
436
422
|
if (!response.ok) {
|
|
437
423
|
const errorMessage = await response.text();
|
|
438
|
-
|
|
424
|
+
logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
|
|
439
425
|
throw new Error("Failed to validate API token: " + response.statusText);
|
|
440
426
|
}
|
|
441
427
|
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
@@ -456,8 +442,8 @@ var CloudConfig = class {
|
|
|
456
442
|
} catch (err) {
|
|
457
443
|
const error = err;
|
|
458
444
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
459
|
-
|
|
460
|
-
if (error.cause)
|
|
445
|
+
logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
|
|
446
|
+
if (error.cause) logger.error(`Cause: ${error.cause}`);
|
|
461
447
|
throw error;
|
|
462
448
|
}
|
|
463
449
|
}
|
|
@@ -504,7 +490,6 @@ var CloudConfig = class {
|
|
|
504
490
|
}
|
|
505
491
|
};
|
|
506
492
|
const cloudConfig = new CloudConfig();
|
|
507
|
-
|
|
508
493
|
//#endregion
|
|
509
494
|
//#region src/util/fetch/monkeyPatchFetch.ts
|
|
510
495
|
const gzipAsync = promisify(gzip);
|
|
@@ -531,9 +516,9 @@ async function monkeyPatchFetch(url, options) {
|
|
|
531
516
|
"Content-Encoding": "gzip"
|
|
532
517
|
};
|
|
533
518
|
} catch (e) {
|
|
534
|
-
|
|
519
|
+
logger.warn(`Failed to compress request body: ${e}`);
|
|
535
520
|
}
|
|
536
|
-
if (typeof url === "string" && url.startsWith(
|
|
521
|
+
if (typeof url === "string" && url.startsWith("https://api.promptfoo.app") || url instanceof URL && url.host === "https://api.promptfoo.app".replace(/^https?:\/\//, "")) {
|
|
537
522
|
const token = cloudConfig.getApiKey();
|
|
538
523
|
opts.headers = {
|
|
539
524
|
...opts.headers || {},
|
|
@@ -558,17 +543,24 @@ async function monkeyPatchFetch(url, options) {
|
|
|
558
543
|
response: null
|
|
559
544
|
});
|
|
560
545
|
if (isConnectionError(e)) {
|
|
561
|
-
|
|
546
|
+
logger.debug(`Connection error, please check your network connectivity to the host: ${url} ${process.env.HTTP_PROXY || process.env.HTTPS_PROXY ? `or Proxy: ${process.env.HTTP_PROXY || process.env.HTTPS_PROXY}` : ""}`);
|
|
562
547
|
throw e;
|
|
563
548
|
}
|
|
564
|
-
|
|
549
|
+
logger.debug(`Error in fetch: ${JSON.stringify(e, Object.getOwnPropertyNames(e), 2)} ${e instanceof Error ? e.stack : ""}`);
|
|
565
550
|
}
|
|
566
551
|
throw e;
|
|
567
552
|
}
|
|
568
553
|
}
|
|
569
|
-
|
|
570
554
|
//#endregion
|
|
571
555
|
//#region src/util/fetch/index.ts
|
|
556
|
+
var fetch_exports = /* @__PURE__ */ __exportAll({
|
|
557
|
+
fetchWithProxy: () => fetchWithProxy,
|
|
558
|
+
fetchWithRetries: () => fetchWithRetries,
|
|
559
|
+
fetchWithTimeout: () => fetchWithTimeout,
|
|
560
|
+
handleRateLimit: () => handleRateLimit,
|
|
561
|
+
isRateLimited: () => isRateLimited,
|
|
562
|
+
isTransientError: () => isTransientError
|
|
563
|
+
});
|
|
572
564
|
let cachedAgent = null;
|
|
573
565
|
let cachedAgentConcurrency;
|
|
574
566
|
let cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
@@ -584,7 +576,7 @@ function getConnectionPoolSize() {
|
|
|
584
576
|
const parsed = parseInt(envConnections, 10);
|
|
585
577
|
if (!isNaN(parsed)) return parsed;
|
|
586
578
|
}
|
|
587
|
-
return
|
|
579
|
+
return state.maxConcurrency || 4;
|
|
588
580
|
}
|
|
589
581
|
function getOrCreateAgent(tlsOptions) {
|
|
590
582
|
const concurrency = getConnectionPoolSize();
|
|
@@ -638,7 +630,7 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
638
630
|
if (typeof url === "string") try {
|
|
639
631
|
const parsedUrl = new URL(url);
|
|
640
632
|
if (parsedUrl.username || parsedUrl.password) {
|
|
641
|
-
if (finalOptions.headers && "Authorization" in finalOptions.headers)
|
|
633
|
+
if (finalOptions.headers && "Authorization" in finalOptions.headers) logger.warn("Both URL credentials and Authorization header present - URL credentials will be ignored");
|
|
642
634
|
else {
|
|
643
635
|
const username = parsedUrl.username || "";
|
|
644
636
|
const password = parsedUrl.password || "";
|
|
@@ -654,20 +646,20 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
654
646
|
finalUrlString = finalUrl.toString();
|
|
655
647
|
}
|
|
656
648
|
} catch (e) {
|
|
657
|
-
|
|
649
|
+
logger.debug(`URL parsing failed in fetchWithProxy: ${e}`);
|
|
658
650
|
}
|
|
659
651
|
const tlsOptions = { rejectUnauthorized: !getEnvBool("PROMPTFOO_INSECURE_SSL", true) };
|
|
660
652
|
const caCertPath = getEnvString("PROMPTFOO_CA_CERT_PATH");
|
|
661
653
|
if (caCertPath) try {
|
|
662
|
-
const resolvedPath = path.resolve(
|
|
654
|
+
const resolvedPath = path.resolve(state.basePath || "", caCertPath);
|
|
663
655
|
tlsOptions.ca = await fsPromises.readFile(resolvedPath, "utf8");
|
|
664
|
-
|
|
656
|
+
logger.debug(`Using custom CA certificate from ${resolvedPath}`);
|
|
665
657
|
} catch (e) {
|
|
666
|
-
|
|
658
|
+
logger.warn(`Failed to read CA certificate from ${caCertPath}: ${e}`);
|
|
667
659
|
}
|
|
668
660
|
const proxyUrl = finalUrlString ? getProxyForUrl(finalUrlString) : "";
|
|
669
661
|
if (!finalOptions.dispatcher) if (proxyUrl) {
|
|
670
|
-
|
|
662
|
+
logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
|
|
671
663
|
finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
|
|
672
664
|
} else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
|
|
673
665
|
const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
|
|
@@ -675,7 +667,7 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
675
667
|
const response = await monkeyPatchFetch(finalUrl, finalOptions);
|
|
676
668
|
if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
|
|
677
669
|
const backoffMs = Math.pow(2, attempt) * 1e3;
|
|
678
|
-
|
|
670
|
+
logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
|
|
679
671
|
await sleep(backoffMs);
|
|
680
672
|
continue;
|
|
681
673
|
}
|
|
@@ -725,7 +717,7 @@ async function handleRateLimit(response) {
|
|
|
725
717
|
const now = /* @__PURE__ */ new Date();
|
|
726
718
|
waitTime = Math.max(resetTime.getTime() - now.getTime() + 1e3, 0);
|
|
727
719
|
} else if (retryAfter) waitTime = Number.parseInt(retryAfter) * 1e3;
|
|
728
|
-
|
|
720
|
+
logger.debug(`Rate limited, waiting ${waitTime}ms before retry`);
|
|
729
721
|
await sleep(waitTime);
|
|
730
722
|
}
|
|
731
723
|
/**
|
|
@@ -757,7 +749,7 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
757
749
|
}, timeout);
|
|
758
750
|
if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
|
|
759
751
|
if (response && isRateLimited(response)) {
|
|
760
|
-
|
|
752
|
+
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
761
753
|
lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
|
|
762
754
|
await handleRateLimit(response);
|
|
763
755
|
continue;
|
|
@@ -772,14 +764,14 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
772
764
|
if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
|
|
773
765
|
if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
|
|
774
766
|
} else errorMessage = String(error);
|
|
775
|
-
|
|
767
|
+
logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
|
|
776
768
|
if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
|
|
777
769
|
lastErrorMessage = errorMessage;
|
|
778
770
|
}
|
|
779
771
|
}
|
|
780
772
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
781
773
|
}
|
|
782
|
-
|
|
783
774
|
//#endregion
|
|
784
|
-
export {
|
|
785
|
-
|
|
775
|
+
export { getShareApiBaseUrl as A, transformTools as C, R_ENDPOINT as D, EVENTS_ENDPOINT as E, HUMAN_ASSERTION_TYPE as F, POSTHOG_KEY as M, VERSION as N, TERMINAL_MAX_WIDTH as O, FILE_METADATA_KEY as P, transformToolChoice as S, CONSENT_ENDPOINT as T, isPromptfooSampleTarget as _, CloudConfig as a, parseChatPrompt as b, writeGlobalConfig as c, sleep as d, LONG_RUNNING_MODEL_TIMEOUT_MS as f, isOpenAIToolChoice as g, isOpenAIToolArray as h, fetch_exports as i, getShareViewBaseUrl as j, getDefaultShareViewBaseUrl as k, writeGlobalConfigPartial as l, calculateCost as m, fetchWithRetries as n, cloudConfig as o, REQUEST_TIMEOUT_MS as p, fetchWithTimeout as r, readGlobalConfig as s, fetchWithProxy as t, getCurrentTimestamp as u, openaiToolChoiceToBedrock as v, CLOUD_PROVIDER_PREFIX as w, toTitleCase as x, openaiToolsToBedrock as y };
|
|
776
|
+
|
|
777
|
+
//# sourceMappingURL=fetch-Cwxnd8zz.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as getEnvString, O as
|
|
3
|
-
import { t as invariant } from "./invariant-
|
|
4
|
-
import { a as cloudConfig
|
|
2
|
+
import { C as getEnvString, O as state, S as getEnvInt, a as logRequestResponse, b as getEnvBool, o as logger, u as sanitizeUrl } from "./logger-KkObSCzq.js";
|
|
3
|
+
import { t as invariant } from "./invariant-BtWWVVhl.js";
|
|
4
|
+
import { a as cloudConfig } from "./cloud-C0dlstV_.js";
|
|
5
5
|
import { Agent, ProxyAgent } from "undici";
|
|
6
6
|
import path from "path";
|
|
7
7
|
import yaml from "js-yaml";
|
|
@@ -9,7 +9,6 @@ import * as fsPromises from "fs/promises";
|
|
|
9
9
|
import { getProxyForUrl } from "proxy-from-env";
|
|
10
10
|
import { promisify } from "util";
|
|
11
11
|
import { gzip } from "zlib";
|
|
12
|
-
|
|
13
12
|
//#region src/providers/constants.ts
|
|
14
13
|
const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
15
14
|
/**
|
|
@@ -17,28 +16,21 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
17
16
|
* Used to distinguish human ratings from automated assertions.
|
|
18
17
|
*/
|
|
19
18
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
20
|
-
|
|
21
19
|
//#endregion
|
|
22
20
|
//#region src/version.ts
|
|
23
21
|
/**
|
|
24
22
|
* Application version from package.json.
|
|
25
23
|
* Injected at build time, or read from npm environment in development.
|
|
26
24
|
*/
|
|
27
|
-
const VERSION = "0.
|
|
25
|
+
const VERSION = "0.121.2";
|
|
28
26
|
/**
|
|
29
27
|
* PostHog analytics key.
|
|
30
28
|
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
31
29
|
* Empty string in development/test.
|
|
32
30
|
*/
|
|
33
31
|
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
34
|
-
|
|
35
|
-
//#endregion
|
|
36
|
-
//#region src/constants.ts
|
|
37
|
-
const DEFAULT_QUERY_LIMIT = 100;
|
|
38
|
-
const DEFAULT_MAX_CONCURRENCY = 4;
|
|
39
|
-
const DEFAULT_API_BASE_URL = "https://api.promptfoo.app";
|
|
40
32
|
function getShareApiBaseUrl() {
|
|
41
|
-
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") ||
|
|
33
|
+
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
42
34
|
}
|
|
43
35
|
function getDefaultShareViewBaseUrl() {
|
|
44
36
|
return getEnvString("PROMPTFOO_SHARING_APP_BASE_URL", `https://promptfoo.app`);
|
|
@@ -54,7 +46,6 @@ const CLOUD_PROVIDER_PREFIX = "promptfoo://provider/";
|
|
|
54
46
|
const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
|
|
55
47
|
const EVENTS_ENDPOINT = "https://a.promptfoo.app";
|
|
56
48
|
const R_ENDPOINT = "https://r.promptfoo.app/";
|
|
57
|
-
|
|
58
49
|
//#endregion
|
|
59
50
|
//#region src/providers/shared.ts
|
|
60
51
|
/**
|
|
@@ -293,7 +284,6 @@ function transformTools(tools, format) {
|
|
|
293
284
|
default: return tools;
|
|
294
285
|
}
|
|
295
286
|
}
|
|
296
|
-
|
|
297
287
|
//#endregion
|
|
298
288
|
//#region src/util/time.ts
|
|
299
289
|
function getCurrentTimestamp() {
|
|
@@ -318,7 +308,6 @@ async function sleepWithAbort(ms, signal) {
|
|
|
318
308
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
319
309
|
});
|
|
320
310
|
}
|
|
321
|
-
|
|
322
311
|
//#endregion
|
|
323
312
|
//#region src/util/fetch/monkeyPatchFetch.ts
|
|
324
313
|
const gzipAsync = promisify(gzip);
|
|
@@ -345,9 +334,9 @@ async function monkeyPatchFetch(url, options) {
|
|
|
345
334
|
"Content-Encoding": "gzip"
|
|
346
335
|
};
|
|
347
336
|
} catch (e) {
|
|
348
|
-
|
|
337
|
+
logger.warn(`Failed to compress request body: ${e}`);
|
|
349
338
|
}
|
|
350
|
-
if (typeof url === "string" && url.startsWith(
|
|
339
|
+
if (typeof url === "string" && url.startsWith("https://api.promptfoo.app") || url instanceof URL && url.host === "https://api.promptfoo.app".replace(/^https?:\/\//, "")) {
|
|
351
340
|
const token = cloudConfig.getApiKey();
|
|
352
341
|
opts.headers = {
|
|
353
342
|
...opts.headers || {},
|
|
@@ -372,15 +361,14 @@ async function monkeyPatchFetch(url, options) {
|
|
|
372
361
|
response: null
|
|
373
362
|
});
|
|
374
363
|
if (isConnectionError(e)) {
|
|
375
|
-
|
|
364
|
+
logger.debug(`Connection error, please check your network connectivity to the host: ${url} ${process.env.HTTP_PROXY || process.env.HTTPS_PROXY ? `or Proxy: ${process.env.HTTP_PROXY || process.env.HTTPS_PROXY}` : ""}`);
|
|
376
365
|
throw e;
|
|
377
366
|
}
|
|
378
|
-
|
|
367
|
+
logger.debug(`Error in fetch: ${JSON.stringify(e, Object.getOwnPropertyNames(e), 2)} ${e instanceof Error ? e.stack : ""}`);
|
|
379
368
|
}
|
|
380
369
|
throw e;
|
|
381
370
|
}
|
|
382
371
|
}
|
|
383
|
-
|
|
384
372
|
//#endregion
|
|
385
373
|
//#region src/util/fetch/index.ts
|
|
386
374
|
let cachedAgent = null;
|
|
@@ -398,7 +386,7 @@ function getConnectionPoolSize() {
|
|
|
398
386
|
const parsed = parseInt(envConnections, 10);
|
|
399
387
|
if (!isNaN(parsed)) return parsed;
|
|
400
388
|
}
|
|
401
|
-
return
|
|
389
|
+
return state.maxConcurrency || 4;
|
|
402
390
|
}
|
|
403
391
|
/**
|
|
404
392
|
* Clear cached agents so the next request creates fresh ones.
|
|
@@ -463,7 +451,7 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
463
451
|
if (typeof url === "string") try {
|
|
464
452
|
const parsedUrl = new URL(url);
|
|
465
453
|
if (parsedUrl.username || parsedUrl.password) {
|
|
466
|
-
if (finalOptions.headers && "Authorization" in finalOptions.headers)
|
|
454
|
+
if (finalOptions.headers && "Authorization" in finalOptions.headers) logger.warn("Both URL credentials and Authorization header present - URL credentials will be ignored");
|
|
467
455
|
else {
|
|
468
456
|
const username = parsedUrl.username || "";
|
|
469
457
|
const password = parsedUrl.password || "";
|
|
@@ -479,20 +467,20 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
479
467
|
finalUrlString = finalUrl.toString();
|
|
480
468
|
}
|
|
481
469
|
} catch (e) {
|
|
482
|
-
|
|
470
|
+
logger.debug(`URL parsing failed in fetchWithProxy: ${e}`);
|
|
483
471
|
}
|
|
484
472
|
const tlsOptions = { rejectUnauthorized: !getEnvBool("PROMPTFOO_INSECURE_SSL", true) };
|
|
485
473
|
const caCertPath = getEnvString("PROMPTFOO_CA_CERT_PATH");
|
|
486
474
|
if (caCertPath) try {
|
|
487
|
-
const resolvedPath = path.resolve(
|
|
475
|
+
const resolvedPath = path.resolve(state.basePath || "", caCertPath);
|
|
488
476
|
tlsOptions.ca = await fsPromises.readFile(resolvedPath, "utf8");
|
|
489
|
-
|
|
477
|
+
logger.debug(`Using custom CA certificate from ${resolvedPath}`);
|
|
490
478
|
} catch (e) {
|
|
491
|
-
|
|
479
|
+
logger.warn(`Failed to read CA certificate from ${caCertPath}: ${e}`);
|
|
492
480
|
}
|
|
493
481
|
const proxyUrl = finalUrlString ? getProxyForUrl(finalUrlString) : "";
|
|
494
482
|
if (!finalOptions.dispatcher) if (proxyUrl) {
|
|
495
|
-
|
|
483
|
+
logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
|
|
496
484
|
finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
|
|
497
485
|
} else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
|
|
498
486
|
const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
|
|
@@ -500,7 +488,7 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
|
500
488
|
const response = await monkeyPatchFetch(finalUrl, finalOptions);
|
|
501
489
|
if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
|
|
502
490
|
const backoffMs = Math.pow(2, attempt) * 1e3;
|
|
503
|
-
|
|
491
|
+
logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
|
|
504
492
|
await sleep(backoffMs);
|
|
505
493
|
continue;
|
|
506
494
|
}
|
|
@@ -550,7 +538,7 @@ async function handleRateLimit(response) {
|
|
|
550
538
|
const now = /* @__PURE__ */ new Date();
|
|
551
539
|
waitTime = Math.max(resetTime.getTime() - now.getTime() + 1e3, 0);
|
|
552
540
|
} else if (retryAfter) waitTime = Number.parseInt(retryAfter) * 1e3;
|
|
553
|
-
|
|
541
|
+
logger.debug(`Rate limited, waiting ${waitTime}ms before retry`);
|
|
554
542
|
await sleep(waitTime);
|
|
555
543
|
}
|
|
556
544
|
/**
|
|
@@ -582,7 +570,7 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
582
570
|
}, timeout);
|
|
583
571
|
if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
|
|
584
572
|
if (response && isRateLimited(response)) {
|
|
585
|
-
|
|
573
|
+
logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
|
|
586
574
|
lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
|
|
587
575
|
await handleRateLimit(response);
|
|
588
576
|
continue;
|
|
@@ -597,14 +585,14 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
597
585
|
if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
|
|
598
586
|
if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
|
|
599
587
|
} else errorMessage = String(error);
|
|
600
|
-
|
|
588
|
+
logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
|
|
601
589
|
if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
|
|
602
590
|
lastErrorMessage = errorMessage;
|
|
603
591
|
}
|
|
604
592
|
}
|
|
605
593
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
606
594
|
}
|
|
607
|
-
|
|
608
595
|
//#endregion
|
|
609
|
-
export {
|
|
610
|
-
|
|
596
|
+
export { getShareApiBaseUrl as A, CLOUD_PROVIDER_PREFIX as C, TERMINAL_MAX_WIDTH as D, R_ENDPOINT as E, HUMAN_ASSERTION_TYPE as F, POSTHOG_KEY as M, VERSION as N, getDefaultPort as O, FILE_METADATA_KEY as P, transformTools as S, EVENTS_ENDPOINT as T, openaiToolChoiceToBedrock as _, handleRateLimit as a, toTitleCase as b, getCurrentTimestamp as c, LONG_RUNNING_MODEL_TIMEOUT_MS as d, REQUEST_TIMEOUT_MS as f, isPromptfooSampleTarget as g, isOpenAIToolChoice as h, fetchWithTimeout as i, getShareViewBaseUrl as j, getDefaultShareViewBaseUrl as k, sleep as l, isOpenAIToolArray as m, fetchWithProxy as n, isRateLimited as o, calculateCost as p, fetchWithRetries as r, isTransientError as s, clearAgentCache as t, sleepWithAbort as u, openaiToolsToBedrock as v, CONSENT_ENDPOINT as w, transformToolChoice as x, parseChatPrompt as y };
|
|
597
|
+
|
|
598
|
+
//# sourceMappingURL=fetch-Dxpd4_sr.js.map
|