promptfoo 0.120.25 → 0.120.26
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 +35 -22
- package/dist/src/{ListApp-CYTAaS6A.js → ListApp-D3DG0F8h.js} +1 -1
- package/dist/src/{accounts-CwqY22lU.cjs → accounts-BzEY8H3v.cjs} +4 -4
- package/dist/src/{accounts-Bzx8GnL6.js → accounts-DHHiXsy6.js} +5 -5
- package/dist/src/{accounts-BSwMxhY3.js → accounts-R3gfCR_g.js} +4 -4
- package/dist/src/{agentic-utils-5K7LzooV.js → agentic-utils-D6_gzOUF.js} +2 -2
- package/dist/src/{agents-B8RWrA68.cjs → agents-C7BiinFI.cjs} +6 -6
- package/dist/src/{agents-zHyWnnQ2.js → agents-Cao4i7AX.js} +7 -7
- package/dist/src/{agents-KZxXwlyn.cjs → agents-CwM7re15.cjs} +2 -2
- package/dist/src/{agents-DleC7rb4.js → agents-DETIQHqF.js} +6 -6
- package/dist/src/{agents-CkA9l77-.js → agents-DYIT-hQy.js} +5 -5
- package/dist/src/{agents-B20gl7hH.js → agents-GiUianme.js} +2 -2
- package/dist/src/{aimlapi-DgbFGPTX.js → aimlapi-CMJpKK-B.js} +9 -9
- package/dist/src/{aimlapi-DILJovhN.js → aimlapi-DMF6v_vb.js} +14 -14
- package/dist/src/{aimlapi-DIdWBHtH.cjs → aimlapi-DoGLcQW_.cjs} +9 -9
- package/dist/src/app/assets/index-BOgkICuY.css +1 -0
- package/dist/src/app/assets/index-CSgqn_Vd.js +428 -0
- package/dist/src/app/assets/{vendor-charts-DnwydkkY.js → vendor-charts-CYyo8R8v.js} +1 -1
- package/dist/src/app/assets/{vendor-markdown-DjKAU15k.js → vendor-markdown-DSmzq4Jh.js} +1 -1
- package/dist/src/app/assets/vendor-react-AtKqiNEf.js +4 -0
- package/dist/src/app/assets/{vendor-syntax-Dc86c4Bu.js → vendor-syntax-D06x6TQF.js} +1 -1
- package/dist/src/app/index.html +6 -6
- package/dist/src/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/{audio-BoR9KZV8.cjs → audio-BWjyvHn9.cjs} +3 -3
- package/dist/src/{audio-nUSOpXY7.js → audio-BrJBFN2b.js} +3 -3
- package/dist/src/{audio-BDrAkpVc.js → audio-DUH4q0Xq.js} +4 -4
- package/dist/src/{base-DumUXbOH.js → base-BaXmtXYp.js} +2 -2
- package/dist/src/{base-CwCV0t8r.js → base-Dtp8b4_N.js} +2 -2
- package/dist/src/{base-D8VQYhNQ.cjs → base-f71xxWai.cjs} +2 -2
- package/dist/src/{blobs-_kNRY6vU.cjs → blobs-673H0jCl.cjs} +2 -2
- package/dist/src/{blobs-Dnt2rxpc.js → blobs-C9J2mVgo.js} +2 -2
- package/dist/src/{blobs-DlB5fwyF.js → blobs-kt8v3UyH.js} +2 -2
- package/dist/src/{cache-S9MAoF9H.cjs → cache-7xULbvt3.cjs} +34 -7
- package/dist/src/{cache-C4A4H4Xb.js → cache-BLLayYEN.js} +23 -8
- package/dist/src/{cache-B2oIvf92.js → cache-BUPcq0Ad.js} +2 -2
- package/dist/src/cache-CVfRb-HD.cjs +6 -0
- package/dist/src/{cache-DofebEnH.js → cache-O4EuX2JV.js} +3 -3
- package/dist/src/{cache-Bg1Wpvzq.js → cache-mIszOnuz.js} +4 -21
- package/dist/src/{chat-DTCPbuld.cjs → chat-C4zqjObh.cjs} +6 -6
- package/dist/src/{chat-noXtEAh5.js → chat-C8Ei4f87.js} +6 -6
- package/dist/src/{chat-BiImdLJf.js → chat-CgyGj2hC.js} +8 -8
- package/dist/src/{chat-DQ6Z5Cbn.js → chat-Cpz3O-Xl.js} +13 -13
- package/dist/src/{chat-D_cro0wd.js → chat-DIywASPG.js} +10 -10
- package/dist/src/{chat-BR2x1dG_.cjs → chat-Fl6TZJRS.cjs} +8 -8
- package/dist/src/{chatkit-TnC1YoVi.js → chatkit-DEls11hE.js} +3 -3
- package/dist/src/{claude-agent-sdk-CBpAZV5h.js → claude-agent-sdk-6-xTaLwM.js} +45 -16
- package/dist/src/{claude-agent-sdk-uHLgAUZj.cjs → claude-agent-sdk-BzxF6NIJ.cjs} +45 -16
- package/dist/src/{claude-agent-sdk-qxE5mGVi.js → claude-agent-sdk-CmkTnKGH.js} +48 -19
- package/dist/src/{claude-agent-sdk-DyPvrj-1.js → claude-agent-sdk-rXCBLK_o.js} +38 -9
- package/dist/src/{cloud-lRosK6Nk.js → cloud-BMbRVJFw.js} +2 -2
- package/dist/src/{cloud-DHWE-9nj.js → cloud-CZ4hytdm.js} +1 -1
- package/dist/src/{cloudflare-ai-D0OtFY6g.cjs → cloudflare-ai-BAQ0u_dg.cjs} +9 -9
- package/dist/src/{cloudflare-ai-BprwSD6d.js → cloudflare-ai-CUg4BTcj.js} +9 -9
- package/dist/src/{cloudflare-ai-CB7OWRAP.js → cloudflare-ai-CobxMTR4.js} +14 -14
- package/dist/src/{cloudflare-gateway-C29gWj5O.cjs → cloudflare-gateway-C0sgfr_z.cjs} +10 -10
- package/dist/src/{cloudflare-gateway-BaVwoBjE.js → cloudflare-gateway-D2_yi-Fh.js} +15 -15
- package/dist/src/{cloudflare-gateway-BjoxwqUw.js → cloudflare-gateway-_itGuXry.js} +10 -10
- package/dist/src/{codex-sdk-DNkCbb7c.js → codex-sdk-dSnGdgIp.js} +3 -3
- package/dist/src/{cometapi-BGxGZ7VA.js → cometapi-B01btbfb.js} +15 -15
- package/dist/src/{cometapi-xiTQZp8R.js → cometapi-ChAaRjg5.js} +10 -10
- package/dist/src/{cometapi-DalITP94.cjs → cometapi-JbvOJSCO.cjs} +10 -10
- package/dist/src/{completion-BTbouQDz.js → completion-BBJ6zmG3.js} +5 -5
- package/dist/src/{completion-HYrX5gEL.js → completion-D9_MDlnd.js} +4 -4
- package/dist/src/{completion-DV0Ys99K.cjs → completion-DDyL3Cb2.cjs} +4 -4
- package/dist/src/{docker-Dx_FN1ag.js → docker-BuButc4D.js} +14 -14
- package/dist/src/{docker-zUAnbYTM.cjs → docker-Ckw-j7Rr.cjs} +9 -9
- package/dist/src/{docker-BAYnlbAW.js → docker-JAAubMw3.js} +9 -9
- package/dist/src/errors-DnGCbnx8.js +36 -0
- package/dist/src/{esm-79BpbQzg.js → esm-CYhseqj4.js} +1 -1
- package/dist/src/eval-CKHWqG9f.js +16 -0
- package/dist/src/{eval-Cxb9alW8.js → eval-CYrbG57o.js} +45 -13
- package/dist/src/{evalResult-B8LbgWMA.js → evalResult-6JaUIStC.js} +6 -6
- package/dist/src/{evalResult-CJNSpa3q.js → evalResult-COsVttMA.js} +6 -6
- package/dist/src/evalResult-CxTP-LMm.cjs +11 -0
- package/dist/src/evalResult-CzLURDcP.js +13 -0
- package/dist/src/{evalResult-hI1mhi_g.cjs → evalResult-DlRfu_Rq.cjs} +6 -6
- package/dist/src/evalResult-DyttNQ_G.js +11 -0
- package/dist/src/evaluator-0PvfeBYh.js +38 -0
- package/dist/src/{evaluator-1Tkdu8MK.js → evaluator-3EJCMTs0.js} +74 -48
- package/dist/src/{extractor-BPBlLyOn.cjs → extractor-DbhlYEeo.cjs} +22 -5
- package/dist/src/{extractor-CuUWqwrE.js → extractor-Hs7la_19.js} +22 -5
- package/dist/src/{extractor-BFoThUOa.js → extractor-LSYjrhK0.js} +22 -5
- package/dist/src/{fetch-zJuFPxN1.js → fetch-18MuNu9i.js} +4 -4
- package/dist/src/{fetch-BdiCecAv.js → fetch-Bi0o-fdp.js} +1 -1
- package/dist/src/fetch-CMptBDVg.cjs +4 -0
- package/dist/src/{fetch-BQgz6x7S.js → fetch-DAZkv3gV.js} +2 -2
- package/dist/src/{fetch-BuP-gm0E.js → fetch-SRsE6Ctl.js} +4 -4
- package/dist/src/{fetch-Dy2YML9G.cjs → fetch-ZMn_oemb.cjs} +4 -4
- package/dist/src/{fileExtensions-CzcPkiKZ.js → fileExtensions-BpuMmaFL.js} +1 -1
- package/dist/src/{formatDuration-CGa0ZDQ8.js → formatDuration-Doo0xq-z.js} +1 -1
- package/dist/src/{genaiTracer-foKtbVa2.js → genaiTracer-CqNnnXrE.js} +1 -1
- package/dist/src/graders-BCytzXrb.js +34 -0
- package/dist/src/{graders-DMAzEgEF.js → graders-BaMCwIKp.js} +211 -91
- package/dist/src/graders-CGZQShfJ.cjs +33 -0
- package/dist/src/{graders-NBsuYeMx.cjs → graders-DzUUnUjC.cjs} +206 -86
- package/dist/src/{graders-CtvuaC8D.js → graders-QsALpIdy.js} +206 -86
- package/dist/src/graders-spkuVC-E.js +36 -0
- package/dist/src/{image-Bf8RiJ2g.js → image-BXt_7u0v.js} +3 -3
- package/dist/src/{image-LhLO5KCW.js → image-BiEVdpdP.js} +4 -4
- package/dist/src/{image-CaVWfZub.cjs → image-C3BjJUAU.cjs} +4 -4
- package/dist/src/{image-BnF25Osq.cjs → image-D10zEe1f.cjs} +3 -3
- package/dist/src/{image-DIn_AW1Z.js → image-DB4sHxdJ.js} +4 -4
- package/dist/src/{image-DFwp1aAV.js → image-mhAGP07h.js} +6 -6
- package/dist/src/index.cjs +152 -69
- package/dist/src/index.d.cts +20 -3
- package/dist/src/index.d.ts +20 -3
- package/dist/src/index.js +152 -69
- package/dist/src/{interactiveCheck-Dmm9vjpx.js → interactiveCheck-DU-MAhp5.js} +1 -1
- package/dist/src/{knowledgeBase-Bf57PI7g.cjs → knowledgeBase-Bnb00xKs.cjs} +6 -6
- package/dist/src/{knowledgeBase-DZw2L9kf.js → knowledgeBase-CMvMlLZR.js} +8 -8
- package/dist/src/{knowledgeBase-CfOvyF2s.js → knowledgeBase-XJQ0Qyez.js} +6 -6
- package/dist/src/{litellm-Ds8YmO1b.js → litellm-BECdjOTx.js} +3 -3
- package/dist/src/{litellm-ByNRN2Vh.cjs → litellm-BrnZhMcL.cjs} +11 -11
- package/dist/src/{litellm-fU-xV6T4.js → litellm-CHrRmPAe.js} +16 -16
- package/dist/src/{litellm-DexU8FFp.js → litellm-CrLJrPIm.js} +11 -11
- package/dist/src/{luma-ray-y26EHFO8.js → luma-ray-BOeX-h0M.js} +8 -8
- package/dist/src/{luma-ray-BIe5ctI4.cjs → luma-ray-C0RkI3lt.cjs} +8 -8
- package/dist/src/{luma-ray-vvE-O9EA.js → luma-ray-DgKLS0BF.js} +10 -10
- package/dist/src/main.js +1011 -404
- package/dist/src/{messages-Bg2ekFPc.js → messages-CDZYGNlS.js} +7 -7
- package/dist/src/{messages-DpoCLD_8.js → messages-D61tPFQo.js} +9 -9
- package/dist/src/{messages-16jb9LP7.cjs → messages-DXV3Qh8_.cjs} +7 -7
- package/dist/src/{meteor-DLCdreag.js → meteor-P2rUE-Uz.js} +1 -1
- package/dist/src/{nova-reel-BM0snD2m.js → nova-reel-Bk5npr2q.js} +10 -10
- package/dist/src/{nova-reel-CvXCVn3f.cjs → nova-reel-D9FXq3Mt.cjs} +8 -8
- package/dist/src/{nova-reel-CJLpBKSI.js → nova-reel-DtCjbD5O.js} +8 -8
- package/dist/src/{nova-sonic-CklvraBd.js → nova-sonic-BXRfQyF-.js} +7 -7
- package/dist/src/{nova-sonic-DEx_FdFW.cjs → nova-sonic-BoRSY_U6.cjs} +5 -5
- package/dist/src/{nova-sonic-Cjh_qopr.js → nova-sonic-CgaWLDM1.js} +5 -5
- package/dist/src/{openai-jNIREoAW.js → openai-CT5fwbve.js} +1 -1
- package/dist/src/{openclaw-CnAwBfPO.js → openclaw-B6XY2kUf.js} +14 -14
- package/dist/src/{openclaw-DBSSY4SP.js → openclaw-CpPrXwf6.js} +9 -9
- package/dist/src/{openclaw-CbHtt3B8.cjs → openclaw-DDSfq5fp.cjs} +9 -9
- package/dist/src/{opencode-sdk-CqxTHrk0.js → opencode-sdk-CImWVqy9.js} +6 -6
- package/dist/src/{opencode-sdk-xUrRk5Jx.js → opencode-sdk-CuCztr4P.js} +4 -4
- package/dist/src/{opencode-sdk-DdmtRB6D.cjs → opencode-sdk-mqF-Oj3f.cjs} +4 -4
- package/dist/src/{otlpReceiver-th2zHwjZ.cjs → otlpReceiver-B6Xo4KZM.cjs} +4 -4
- package/dist/src/{otlpReceiver-uytrRKdo.js → otlpReceiver-BO0rbDzh.js} +4 -4
- package/dist/src/{otlpReceiver-C-1cdVDr.js → otlpReceiver-Dg817agV.js} +5 -5
- package/dist/src/{providerRegistry-DAZoFmGv.js → providerRegistry-Xf0qdqGQ.js} +1 -1
- package/dist/src/providers-BMZZmPBJ.cjs +32 -0
- package/dist/src/{providers-CpUrPa8s.cjs → providers-BNKVY53V.cjs} +94 -64
- package/dist/src/{providers-D3lk_R7Q.js → providers-BiNq_Iyc.js} +94 -64
- package/dist/src/{providers-BOvl9qv5.js → providers-BlEhY5mi.js} +110 -79
- package/dist/src/providers-CQQrNaJk.js +32 -0
- package/dist/src/providers-Ck8HyrC-.js +34 -0
- package/dist/src/{pythonUtils-CUPlf1H0.js → pythonUtils-r1uBuA0n.js} +2 -2
- package/dist/src/{quiverai-BNGJOQym.cjs → quiverai-BNfIwKCO.cjs} +8 -8
- package/dist/src/{quiverai-Y7Is4wah.js → quiverai-BQigKdIH.js} +13 -13
- package/dist/src/{quiverai-DthRqZs9.js → quiverai-Bfy2WnE2.js} +8 -8
- package/dist/src/{render-kFatbqG6.js → render-CAZvKKkB.js} +3 -3
- package/dist/src/{responses-BtU_i-R0.js → responses-DLLjADw5.js} +5 -5
- package/dist/src/{responses-B85halqh.js → responses-TsdODUpm.js} +8 -8
- package/dist/src/{responses-CXJACENh.cjs → responses-zOtKtnY_.cjs} +5 -5
- package/dist/src/{rubyUtils-DYKoa7Ze.js → rubyUtils-BtjlqyXt.js} +2 -2
- package/dist/src/{rubyUtils-BA4D4gMX.js → rubyUtils-D7--T12C.js} +2 -2
- package/dist/src/{sagemaker-hRS_Jj3-.js → sagemaker-BcgLu0U4.js} +17 -17
- package/dist/src/{sagemaker-DI6IOTjT.js → sagemaker-CLdUAv5z.js} +11 -11
- package/dist/src/{sagemaker-BUagsrJ-.cjs → sagemaker-DwNnEVYt.cjs} +11 -11
- package/dist/src/{scanner-C6QXA9Pn.js → scanner-Dyw21Wg_.js} +10 -10
- package/dist/src/server/index.js +1376 -486
- package/dist/src/server-BUbS0Qfh.js +6 -0
- package/dist/src/{server-BPC37wlX.js → server-CbMTRQkg.js} +3 -3
- package/dist/src/{server-C_O6-VE4.cjs → server-CgUQ25qW.cjs} +3 -3
- package/dist/src/{server-HQtz_gUy.js → server-DWmZLfCy.js} +4 -4
- package/dist/src/server-XpGXFHkS.cjs +6 -0
- package/dist/src/server-gfOx5Zrk.js +8 -0
- package/dist/src/{signal-D4VhSJOY.js → signal-Bl32q42d.js} +2 -2
- package/dist/src/{slack-DTUSadx4.js → slack-BfdBx2tO.js} +1 -1
- package/dist/src/{store-BTdkdmK9.js → store-2ocbYY9D.js} +2 -2
- package/dist/src/store-5u2yriTV.js +7 -0
- package/dist/src/{store-F-KTiqfb.cjs → store-BqwfFEyF.cjs} +2 -2
- package/dist/src/{store-rueRdzcm.js → store-D4gdn9ih.js} +2 -2
- package/dist/src/store-D_lq_8oQ.js +6 -0
- package/dist/src/store-m5KT6Ly7.cjs +6 -0
- package/dist/src/{tables-w-r-abWq.cjs → tables-B9E1kRp-.cjs} +2 -2
- package/dist/src/{tables-ChjAuVAR.js → tables-C7TT2XVn.js} +2 -2
- package/dist/src/{tables-dNaVPyDr.js → tables-D-NSwNIb.js} +2 -2
- package/dist/src/telemetry-5RHFoCJh.js +6 -0
- package/dist/src/{telemetry-wXyCQ1Nz.js → telemetry-BXyVqyAg.js} +3 -3
- package/dist/src/{telemetry-Y1esJM0v.cjs → telemetry-D0_yFdtU.cjs} +3 -3
- package/dist/src/{telemetry-Dai7PdlR.js → telemetry-DZ_7PaVq.js} +3 -3
- package/dist/src/telemetry-Do8wMnA-.js +8 -0
- package/dist/src/telemetry-LojxPoFq.cjs +6 -0
- package/dist/src/{text-C1cXk9ij.js → text-DgMr_tiM.js} +1 -1
- package/dist/src/{tokenUsageUtils-D2ko2eFQ.js → tokenUsageUtils-DmZSD2eU.js} +1 -1
- package/dist/src/{transcription-i6EfSMie.js → transcription-CYuY5sFO.js} +6 -6
- package/dist/src/{transcription-CcYTL4wi.js → transcription-Ch7S-LWw.js} +10 -10
- package/dist/src/{transcription-C-K2hDJX.cjs → transcription-FNIz3YOe.cjs} +6 -6
- package/dist/src/{transform-gpzlPrwG.js → transform-CoP2bJ7P.js} +43 -4
- package/dist/src/{transform-B86_0IIb.js → transform-CqTFr7KR.js} +4 -4
- package/dist/src/{transform-DosdxVdh.js → transform-DMaxQwDx.js} +43 -4
- package/dist/src/{transform-DwsntMEQ.js → transform-GybT0X0u.js} +3 -3
- package/dist/src/{transform-CCSNqTI-.cjs → transform-ivxEY4f7.cjs} +54 -3
- package/dist/src/{transformersAvailability-DM54tWzt.js → transformersAvailability-DwmezkVe.js} +1 -1
- package/dist/src/{types-Brw5kggg.cjs → types-BIfttHrT.cjs} +13 -1
- package/dist/src/{types-CslP2TyG.js → types-DMVjYLpx.js} +13 -1
- package/dist/src/{types-CMDs7Kzu.js → types-t52w-XsS.js} +16 -2
- package/dist/src/{util-BECSJ0T_.js → util-BSh4a_Q8.js} +6 -6
- package/dist/src/{util-D8z5QOy8.cjs → util-C08Kns6-.cjs} +3 -3
- package/dist/src/{util-CttPoePn.js → util-CUEt0Vum.js} +3 -3
- package/dist/src/{util-CfPdWQJX.js → util-Cl0zfT3V.js} +3 -3
- package/dist/src/{util-Dab5xp2E.cjs → util-DUYOvxAy.cjs} +3 -3
- package/dist/src/{util-CY_XguB9.js → util-DiCePfDu.js} +3 -3
- package/dist/src/{util-CBAXTxfy.cjs → util-DkFTvieG.cjs} +3 -3
- package/dist/src/{util-Dft1RxsL.js → util-mJ58qbbw.js} +3 -3
- package/dist/src/{util-Ba18wQ8e.js → util-vjscpUzy.js} +3 -3
- package/dist/src/{utils-BTeLHwiH.js → utils-CVzb4YiI.js} +2 -2
- package/dist/src/{utils-Db5KwiXp.cjs → utils-DFaZa6Rf.cjs} +2 -2
- package/dist/src/{utils-ICP7kLcY.js → utils-JaY9veb5.js} +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -42
- package/dist/src/app/assets/index-COIipVf1.css +0 -1
- package/dist/src/app/assets/index-ClD64gUa.js +0 -428
- package/dist/src/app/assets/vendor-react-DHoaNLma.js +0 -4
- package/dist/src/cache-BJ31KhNT.cjs +0 -6
- package/dist/src/eval-DgiEH2xe.js +0 -16
- package/dist/src/evalResult-Boel8xoS.js +0 -13
- package/dist/src/evalResult-DGx1-Ela.js +0 -11
- package/dist/src/evalResult-DzRxYLDH.cjs +0 -11
- package/dist/src/evaluator-B4qKt437.js +0 -38
- package/dist/src/fetch-DwhKew9e.cjs +0 -4
- package/dist/src/graders-BpEqZT2Q.js +0 -34
- package/dist/src/graders-DTGI-hHE.cjs +0 -33
- package/dist/src/graders-DgMr-E4I.js +0 -36
- package/dist/src/providers-DVsoSup2.js +0 -34
- package/dist/src/providers-D_tJatIk.js +0 -32
- package/dist/src/providers-wpMPsMZ7.cjs +0 -32
- package/dist/src/server-BeqUuSvj.js +0 -6
- package/dist/src/server-CwQsQ6dl.cjs +0 -6
- package/dist/src/server-Dhbq83-d.js +0 -8
- package/dist/src/store-C7U17qcu.js +0 -6
- package/dist/src/store-CuDU_jDN.js +0 -7
- package/dist/src/store-awdDxuiD.cjs +0 -6
- package/dist/src/telemetry-ClcYTCOG.js +0 -8
- package/dist/src/telemetry-DEWuLu_s.js +0 -6
- package/dist/src/telemetry-tADmeX6E.cjs +0 -6
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./chunk-DHDDz29n.js";
|
|
3
|
+
import "./logger-BotXmWKW.js";
|
|
4
|
+
import "./fetch-SRsE6Ctl.js";
|
|
5
|
+
import "./accounts-DHHiXsy6.js";
|
|
6
|
+
import "./cloud-BMbRVJFw.js";
|
|
7
|
+
import "./telemetry-BXyVqyAg.js";
|
|
8
|
+
import "./types-t52w-XsS.js";
|
|
9
|
+
import "./server-DWmZLfCy.js";
|
|
10
|
+
import "./providers-BlEhY5mi.js";
|
|
11
|
+
import "./cache-mIszOnuz.js";
|
|
12
|
+
import "./util-BSh4a_Q8.js";
|
|
13
|
+
import "./esm-CYhseqj4.js";
|
|
14
|
+
import "./pythonUtils-r1uBuA0n.js";
|
|
15
|
+
import "./transform-CqTFr7KR.js";
|
|
16
|
+
import { n as getGraderById, t as GRADERS } from "./graders-BaMCwIKp.js";
|
|
17
|
+
import "./utils-JaY9veb5.js";
|
|
18
|
+
import "./extractor-LSYjrhK0.js";
|
|
19
|
+
import "./genaiTracer-CqNnnXrE.js";
|
|
20
|
+
import "./chat-DIywASPG.js";
|
|
21
|
+
import "./transform-CoP2bJ7P.js";
|
|
22
|
+
import "./messages-D61tPFQo.js";
|
|
23
|
+
import "./util-vjscpUzy.js";
|
|
24
|
+
import "./responses-TsdODUpm.js";
|
|
25
|
+
import "./openai-CT5fwbve.js";
|
|
26
|
+
import "./util-CUEt0Vum.js";
|
|
27
|
+
import "./completion-BBJ6zmG3.js";
|
|
28
|
+
import "./blobs-kt8v3UyH.js";
|
|
29
|
+
import "./tables-C7TT2XVn.js";
|
|
30
|
+
import "./store-D4gdn9ih.js";
|
|
31
|
+
import "./base-BaXmtXYp.js";
|
|
32
|
+
import "./image-mhAGP07h.js";
|
|
33
|
+
import "./providerRegistry-Xf0qdqGQ.js";
|
|
34
|
+
import "./rubyUtils-BtjlqyXt.js";
|
|
35
|
+
|
|
36
|
+
export { getGraderById };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-FhC4c-0y.js";
|
|
2
2
|
import { b as getEnvString, i as logger_default } from "./logger-w8Ozp0Td.js";
|
|
3
|
-
import { h as REQUEST_TIMEOUT_MS } from "./fetch-
|
|
4
|
-
import { a as fetchWithCache } from "./cache-
|
|
3
|
+
import { h as REQUEST_TIMEOUT_MS } from "./fetch-18MuNu9i.js";
|
|
4
|
+
import { a as fetchWithCache } from "./cache-BLLayYEN.js";
|
|
5
5
|
|
|
6
6
|
//#region src/providers/hyperbolic/image.ts
|
|
7
7
|
const HYPERBOLIC_IMAGE_MODELS = [
|
|
@@ -162,4 +162,4 @@ function createHyperbolicImageProvider(providerPath, options = {}) {
|
|
|
162
162
|
|
|
163
163
|
//#endregion
|
|
164
164
|
export { createHyperbolicImageProvider };
|
|
165
|
-
//# sourceMappingURL=image-
|
|
165
|
+
//# sourceMappingURL=image-BXt_7u0v.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { i as logger_default } from "./logger-w8Ozp0Td.js";
|
|
2
|
-
import { h as REQUEST_TIMEOUT_MS } from "./fetch-
|
|
3
|
-
import { a as fetchWithCache } from "./cache-
|
|
2
|
+
import { h as REQUEST_TIMEOUT_MS } from "./fetch-18MuNu9i.js";
|
|
3
|
+
import { a as fetchWithCache } from "./cache-BLLayYEN.js";
|
|
4
4
|
import { t as OpenAiGenericProvider } from "./openai-Dz3surb_.js";
|
|
5
|
-
import { s as formatOpenAiError } from "./util-
|
|
5
|
+
import { s as formatOpenAiError } from "./util-Cl0zfT3V.js";
|
|
6
6
|
import { t as ellipsize } from "./text-Dm78AVGG.js";
|
|
7
7
|
|
|
8
8
|
//#region src/providers/openai/image.ts
|
|
@@ -215,4 +215,4 @@ var OpenAiImageProvider = class extends OpenAiGenericProvider {
|
|
|
215
215
|
|
|
216
216
|
//#endregion
|
|
217
217
|
export { callOpenAiImageApi as n, formatOutput as r, OpenAiImageProvider as t };
|
|
218
|
-
//# sourceMappingURL=image-
|
|
218
|
+
//# sourceMappingURL=image-BiEVdpdP.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const require_logger = require('./logger-BdZ-IqBc.cjs');
|
|
2
|
-
const require_fetch = require('./fetch-
|
|
3
|
-
const require_cache = require('./cache-
|
|
2
|
+
const require_fetch = require('./fetch-ZMn_oemb.cjs');
|
|
3
|
+
const require_cache = require('./cache-7xULbvt3.cjs');
|
|
4
4
|
const require_openai = require('./openai-Bigwjgo1.cjs');
|
|
5
|
-
const require_util = require('./util-
|
|
5
|
+
const require_util = require('./util-C08Kns6-.cjs');
|
|
6
6
|
const require_text = require('./text-DF2hMKdg.cjs');
|
|
7
7
|
|
|
8
8
|
//#region src/providers/openai/image.ts
|
|
@@ -232,4 +232,4 @@ Object.defineProperty(exports, 'formatOutput', {
|
|
|
232
232
|
return formatOutput;
|
|
233
233
|
}
|
|
234
234
|
});
|
|
235
|
-
//# sourceMappingURL=image-
|
|
235
|
+
//# sourceMappingURL=image-C3BjJUAU.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_logger = require('./logger-BdZ-IqBc.cjs');
|
|
2
|
-
const require_fetch = require('./fetch-
|
|
3
|
-
const require_cache = require('./cache-
|
|
2
|
+
const require_fetch = require('./fetch-ZMn_oemb.cjs');
|
|
3
|
+
const require_cache = require('./cache-7xULbvt3.cjs');
|
|
4
4
|
|
|
5
5
|
//#region src/providers/hyperbolic/image.ts
|
|
6
6
|
const HYPERBOLIC_IMAGE_MODELS = [
|
|
@@ -161,4 +161,4 @@ function createHyperbolicImageProvider(providerPath, options = {}) {
|
|
|
161
161
|
|
|
162
162
|
//#endregion
|
|
163
163
|
exports.createHyperbolicImageProvider = createHyperbolicImageProvider;
|
|
164
|
-
//# sourceMappingURL=image-
|
|
164
|
+
//# sourceMappingURL=image-D10zEe1f.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./chunk-DHDDz29n.js";
|
|
3
3
|
import { C as getEnvString, o as logger_default } from "./logger-BotXmWKW.js";
|
|
4
|
-
import { d as REQUEST_TIMEOUT_MS } from "./fetch-
|
|
5
|
-
import "./cloud-
|
|
6
|
-
import { a as fetchWithCache } from "./cache-
|
|
4
|
+
import { d as REQUEST_TIMEOUT_MS } from "./fetch-SRsE6Ctl.js";
|
|
5
|
+
import "./cloud-BMbRVJFw.js";
|
|
6
|
+
import { a as fetchWithCache } from "./cache-mIszOnuz.js";
|
|
7
7
|
|
|
8
8
|
//#region src/providers/hyperbolic/image.ts
|
|
9
9
|
const HYPERBOLIC_IMAGE_MODELS = [
|
|
@@ -164,4 +164,4 @@ function createHyperbolicImageProvider(providerPath, options = {}) {
|
|
|
164
164
|
|
|
165
165
|
//#endregion
|
|
166
166
|
export { createHyperbolicImageProvider };
|
|
167
|
-
//# sourceMappingURL=image-
|
|
167
|
+
//# sourceMappingURL=image-DB4sHxdJ.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { o as logger_default } from "./logger-BotXmWKW.js";
|
|
3
|
-
import { d as REQUEST_TIMEOUT_MS } from "./fetch-
|
|
4
|
-
import { a as fetchWithCache } from "./cache-
|
|
5
|
-
import { t as OpenAiGenericProvider } from "./openai-
|
|
6
|
-
import { s as formatOpenAiError } from "./util-
|
|
7
|
-
import { t as ellipsize } from "./text-
|
|
3
|
+
import { d as REQUEST_TIMEOUT_MS } from "./fetch-SRsE6Ctl.js";
|
|
4
|
+
import { a as fetchWithCache } from "./cache-mIszOnuz.js";
|
|
5
|
+
import { t as OpenAiGenericProvider } from "./openai-CT5fwbve.js";
|
|
6
|
+
import { s as formatOpenAiError } from "./util-CUEt0Vum.js";
|
|
7
|
+
import { t as ellipsize } from "./text-DgMr_tiM.js";
|
|
8
8
|
|
|
9
9
|
//#region src/providers/openai/image.ts
|
|
10
10
|
const DALLE2_VALID_SIZES = [
|
|
@@ -216,4 +216,4 @@ var OpenAiImageProvider = class extends OpenAiGenericProvider {
|
|
|
216
216
|
|
|
217
217
|
//#endregion
|
|
218
218
|
export { callOpenAiImageApi as n, formatOutput as r, OpenAiImageProvider as t };
|
|
219
|
-
//# sourceMappingURL=image-
|
|
219
|
+
//# sourceMappingURL=image-mhAGP07h.js.map
|
package/dist/src/index.cjs
CHANGED
|
@@ -5,36 +5,36 @@ const require_esm = require('./esm-BQkx5roy.cjs');
|
|
|
5
5
|
const require_pythonUtils = require('./pythonUtils-DZ6EbdY4.cjs');
|
|
6
6
|
const require_fileExtensions = require('./fileExtensions-DkJYkWUy.cjs');
|
|
7
7
|
const require_transform = require('./transform-Kd6u-oNm.cjs');
|
|
8
|
-
const require_graders = require('./graders-
|
|
9
|
-
const require_types = require('./types-
|
|
10
|
-
const require_util = require('./util-
|
|
11
|
-
const require_fetch = require('./fetch-
|
|
12
|
-
const require_cache = require('./cache-
|
|
13
|
-
const require_providers = require('./providers-
|
|
14
|
-
const require_utils = require('./utils-
|
|
15
|
-
const require_extractor = require('./extractor-
|
|
8
|
+
const require_graders = require('./graders-DzUUnUjC.cjs');
|
|
9
|
+
const require_types = require('./types-BIfttHrT.cjs');
|
|
10
|
+
const require_util = require('./util-DUYOvxAy.cjs');
|
|
11
|
+
const require_fetch = require('./fetch-ZMn_oemb.cjs');
|
|
12
|
+
const require_cache = require('./cache-7xULbvt3.cjs');
|
|
13
|
+
const require_providers = require('./providers-BNKVY53V.cjs');
|
|
14
|
+
const require_utils = require('./utils-DFaZa6Rf.cjs');
|
|
15
|
+
const require_extractor = require('./extractor-DbhlYEeo.cjs');
|
|
16
16
|
require('./genaiTracer-CQlpZkrp.cjs');
|
|
17
|
-
const require_chat = require('./chat-
|
|
17
|
+
const require_chat = require('./chat-C4zqjObh.cjs');
|
|
18
18
|
const require_tokenUsageUtils = require('./tokenUsageUtils-CXhxVj72.cjs');
|
|
19
|
-
const require_transform$1 = require('./transform-
|
|
20
|
-
require('./messages-
|
|
21
|
-
require('./util-
|
|
22
|
-
require('./responses-
|
|
19
|
+
const require_transform$1 = require('./transform-ivxEY4f7.cjs');
|
|
20
|
+
require('./messages-DXV3Qh8_.cjs');
|
|
21
|
+
require('./util-DkFTvieG.cjs');
|
|
22
|
+
require('./responses-zOtKtnY_.cjs');
|
|
23
23
|
require('./openai-Bigwjgo1.cjs');
|
|
24
|
-
const require_util$2 = require('./util-
|
|
25
|
-
require('./completion-
|
|
26
|
-
const require_accounts = require('./accounts-
|
|
27
|
-
const require_server = require('./server-
|
|
28
|
-
const require_blobs = require('./blobs-
|
|
29
|
-
const require_tables = require('./tables-
|
|
30
|
-
const require_telemetry = require('./telemetry-
|
|
24
|
+
const require_util$2 = require('./util-C08Kns6-.cjs');
|
|
25
|
+
require('./completion-DDyL3Cb2.cjs');
|
|
26
|
+
const require_accounts = require('./accounts-BzEY8H3v.cjs');
|
|
27
|
+
const require_server = require('./server-CgUQ25qW.cjs');
|
|
28
|
+
const require_blobs = require('./blobs-673H0jCl.cjs');
|
|
29
|
+
const require_tables = require('./tables-B9E1kRp-.cjs');
|
|
30
|
+
const require_telemetry = require('./telemetry-D0_yFdtU.cjs');
|
|
31
31
|
const require_text = require('./text-DF2hMKdg.cjs');
|
|
32
|
-
const require_store = require('./store-
|
|
33
|
-
require('./base-
|
|
34
|
-
require('./image-
|
|
32
|
+
const require_store = require('./store-BqwfFEyF.cjs');
|
|
33
|
+
require('./base-f71xxWai.cjs');
|
|
34
|
+
require('./image-C3BjJUAU.cjs');
|
|
35
35
|
const require_providerRegistry = require('./providerRegistry-lc7a7utN.cjs');
|
|
36
36
|
const require_rubyUtils = require('./rubyUtils-DCVaJ3mc.cjs');
|
|
37
|
-
const require_evalResult = require('./evalResult-
|
|
37
|
+
const require_evalResult = require('./evalResult-DlRfu_Rq.cjs');
|
|
38
38
|
let fs = require("fs");
|
|
39
39
|
fs = require_logger.__toESM(fs);
|
|
40
40
|
let path = require("path");
|
|
@@ -307,7 +307,7 @@ async function startOtlpReceiverIfNeeded(testSuite) {
|
|
|
307
307
|
require_telemetry.telemetry_default.record("feature_used", { feature: "tracing" });
|
|
308
308
|
try {
|
|
309
309
|
require_logger.logger_default.debug("[EvaluatorTracing] Tracing configuration detected, starting OTLP receiver");
|
|
310
|
-
const { startOTLPReceiver } = await Promise.resolve().then(() => require("./otlpReceiver-
|
|
310
|
+
const { startOTLPReceiver } = await Promise.resolve().then(() => require("./otlpReceiver-B6Xo4KZM.cjs"));
|
|
311
311
|
const port = testSuite.tracing.otlp.http.port || 4318;
|
|
312
312
|
const host = testSuite.tracing.otlp.http.host || "127.0.0.1";
|
|
313
313
|
require_logger.logger_default.debug(`[EvaluatorTracing] Starting OTLP receiver on ${host}:${port}`);
|
|
@@ -330,7 +330,7 @@ async function startOtlpReceiverIfNeeded(testSuite) {
|
|
|
330
330
|
async function stopOtlpReceiverIfNeeded() {
|
|
331
331
|
if (otlpReceiverStarted) try {
|
|
332
332
|
require_logger.logger_default.debug("[EvaluatorTracing] Stopping OTLP receiver");
|
|
333
|
-
const { stopOTLPReceiver } = await Promise.resolve().then(() => require("./otlpReceiver-
|
|
333
|
+
const { stopOTLPReceiver } = await Promise.resolve().then(() => require("./otlpReceiver-B6Xo4KZM.cjs"));
|
|
334
334
|
await stopOTLPReceiver();
|
|
335
335
|
otlpReceiverStarted = false;
|
|
336
336
|
require_logger.logger_default.info("[EvaluatorTracing] OTLP receiver stopped successfully");
|
|
@@ -365,7 +365,7 @@ async function generateTraceContextIfNeeded(test, evaluateOptions, testIdx, prom
|
|
|
365
365
|
}
|
|
366
366
|
if (!tracingEnabled) return null;
|
|
367
367
|
require_logger.logger_default.debug("[EvaluatorTracing] Importing trace store");
|
|
368
|
-
const { getTraceStore } = await Promise.resolve().then(() => require("./store-
|
|
368
|
+
const { getTraceStore } = await Promise.resolve().then(() => require("./store-m5KT6Ly7.cjs"));
|
|
369
369
|
const traceStore = getTraceStore();
|
|
370
370
|
const traceId = generateTraceId();
|
|
371
371
|
const spanId = generateSpanId();
|
|
@@ -2886,9 +2886,9 @@ async function runAssertion({ prompt, provider, assertion, test, vars, latencyMs
|
|
|
2886
2886
|
let filePath = fileRef;
|
|
2887
2887
|
let functionName;
|
|
2888
2888
|
if (fileRef.includes(":")) {
|
|
2889
|
-
const
|
|
2890
|
-
filePath =
|
|
2891
|
-
functionName =
|
|
2889
|
+
const colonIndex = fileRef.indexOf(":");
|
|
2890
|
+
filePath = fileRef.slice(0, colonIndex);
|
|
2891
|
+
functionName = fileRef.slice(colonIndex + 1);
|
|
2892
2892
|
}
|
|
2893
2893
|
filePath = path.default.resolve(basePath, filePath);
|
|
2894
2894
|
if (require_fileExtensions.isJavascriptFile(filePath)) {
|
|
@@ -3914,7 +3914,7 @@ async function runEval({ provider, prompt, test, testSuite, delay, nunjucksFilte
|
|
|
3914
3914
|
promptIdx,
|
|
3915
3915
|
testIdx
|
|
3916
3916
|
});
|
|
3917
|
-
require_logger.logger_default.error("Provider call failed during eval", logContext);
|
|
3917
|
+
if (!(err instanceof Error && err.name === "AbortError")) require_logger.logger_default.error("Provider call failed during eval", logContext);
|
|
3918
3918
|
return [{
|
|
3919
3919
|
...setup,
|
|
3920
3920
|
error: errorWithStack,
|
|
@@ -4095,11 +4095,17 @@ var Evaluator = class {
|
|
|
4095
4095
|
let globalTimeout;
|
|
4096
4096
|
let globalAbortController;
|
|
4097
4097
|
const processedIndices = /* @__PURE__ */ new Set();
|
|
4098
|
+
let targetUnavailable = false;
|
|
4099
|
+
let targetErrorStatus;
|
|
4100
|
+
const targetErrorAbortController = new AbortController();
|
|
4098
4101
|
let ciProgressReporter = null;
|
|
4099
4102
|
let progressBarManager = null;
|
|
4103
|
+
let providerAbortSignal = options.abortSignal;
|
|
4104
|
+
let combinedAbortSignal = options.abortSignal ? AbortSignal.any([options.abortSignal, targetErrorAbortController.signal]) : targetErrorAbortController.signal;
|
|
4100
4105
|
if (maxEvalTimeMs > 0) {
|
|
4101
4106
|
globalAbortController = new AbortController();
|
|
4102
|
-
|
|
4107
|
+
providerAbortSignal = providerAbortSignal ? AbortSignal.any([providerAbortSignal, globalAbortController.signal]) : globalAbortController.signal;
|
|
4108
|
+
combinedAbortSignal = AbortSignal.any([combinedAbortSignal, globalAbortController.signal]);
|
|
4103
4109
|
globalTimeout = setTimeout(() => {
|
|
4104
4110
|
evalTimedOut = true;
|
|
4105
4111
|
globalAbortController?.abort();
|
|
@@ -4107,7 +4113,7 @@ var Evaluator = class {
|
|
|
4107
4113
|
}
|
|
4108
4114
|
const vars = /* @__PURE__ */ new Set();
|
|
4109
4115
|
const checkAbort = () => {
|
|
4110
|
-
if (
|
|
4116
|
+
if (combinedAbortSignal.aborted) throw new Error("Operation cancelled");
|
|
4111
4117
|
};
|
|
4112
4118
|
if (!options.silent) require_logger.logger_default.info(`Starting evaluation ${this.evalRecord.id}`);
|
|
4113
4119
|
checkAbort();
|
|
@@ -4268,7 +4274,7 @@ var Evaluator = class {
|
|
|
4268
4274
|
const defaultProvider = testSuite.defaultTest.provider;
|
|
4269
4275
|
if (require_types.isApiProvider(defaultProvider)) testCase.provider = defaultProvider;
|
|
4270
4276
|
else if (typeof defaultProvider === "object" && defaultProvider.id) {
|
|
4271
|
-
const { loadApiProvider } = await Promise.resolve().then(() => require("./providers-
|
|
4277
|
+
const { loadApiProvider } = await Promise.resolve().then(() => require("./providers-BMZZmPBJ.cjs"));
|
|
4272
4278
|
testCase.provider = await loadApiProvider(typeof defaultProvider.id === "function" ? defaultProvider.id() : defaultProvider.id, { options: defaultProvider });
|
|
4273
4279
|
} else testCase.provider = defaultProvider;
|
|
4274
4280
|
}
|
|
@@ -4338,7 +4344,7 @@ var Evaluator = class {
|
|
|
4338
4344
|
registers: this.registers,
|
|
4339
4345
|
isRedteam: testSuite.redteam != null,
|
|
4340
4346
|
concurrency,
|
|
4341
|
-
abortSignal:
|
|
4347
|
+
abortSignal: providerAbortSignal,
|
|
4342
4348
|
evalId: this.evalRecord.id,
|
|
4343
4349
|
rateLimitRegistry: this.rateLimitRegistry
|
|
4344
4350
|
});
|
|
@@ -4352,7 +4358,7 @@ var Evaluator = class {
|
|
|
4352
4358
|
if (evalOption.test.assert?.some((a) => a.type === "max-score")) rowsWithMaxScoreAssertion.add(evalOption.testIdx);
|
|
4353
4359
|
}
|
|
4354
4360
|
if (require_logger.cliState_default.resume && this.evalRecord.persisted) try {
|
|
4355
|
-
const { default: EvalResult } = await Promise.resolve().then(() => require("./evalResult-
|
|
4361
|
+
const { default: EvalResult } = await Promise.resolve().then(() => require("./evalResult-CxTP-LMm.cjs"));
|
|
4356
4362
|
const completedPairs = await EvalResult.getCompletedIndexPairs(this.evalRecord.id, { excludeErrors: require_logger.cliState_default.retryMode });
|
|
4357
4363
|
const originalCount = runEvalOptions.length;
|
|
4358
4364
|
for (let i = runEvalOptions.length - 1; i >= 0; i--) {
|
|
@@ -4405,6 +4411,14 @@ var Evaluator = class {
|
|
|
4405
4411
|
require_logger.logger_default.error(`Error saving result: ${error} ${require_logger.safeJsonStringify(resultSummary)}`);
|
|
4406
4412
|
}
|
|
4407
4413
|
for (const writer of this.fileWriters) await writer.write(row);
|
|
4414
|
+
const httpStatus = row.response?.metadata?.http?.status;
|
|
4415
|
+
if (typeof httpStatus === "number" && require_cache.isNonTransientHttpStatus(httpStatus)) {
|
|
4416
|
+
targetUnavailable = true;
|
|
4417
|
+
targetErrorStatus = httpStatus;
|
|
4418
|
+
require_logger.logger_default.error(`Target returned HTTP ${httpStatus}. Aborting scan - this error will not resolve on retry.`);
|
|
4419
|
+
targetErrorAbortController.abort();
|
|
4420
|
+
break;
|
|
4421
|
+
}
|
|
4408
4422
|
const { promptIdx } = row;
|
|
4409
4423
|
const metrics = prompts[promptIdx].metrics;
|
|
4410
4424
|
require_invariant.invariant(metrics, "Expected prompt.metrics to be set");
|
|
@@ -4568,6 +4582,7 @@ var Evaluator = class {
|
|
|
4568
4582
|
if (this.options.showProgressBar && progressBarManager) await progressBarManager.initialize(runEvalOptions, concurrency, 0);
|
|
4569
4583
|
try {
|
|
4570
4584
|
if (serialRunEvalOptions.length > 0) for (const evalStep of serialRunEvalOptions) {
|
|
4585
|
+
checkAbort();
|
|
4571
4586
|
if (isWebUI) {
|
|
4572
4587
|
const provider = evalStep.provider.label || evalStep.provider.id();
|
|
4573
4588
|
const vars = formatVarsForDisplay(evalStep.test.vars || {}, 50);
|
|
@@ -4585,22 +4600,32 @@ var Evaluator = class {
|
|
|
4585
4600
|
await this.evalRecord.addPrompts(prompts);
|
|
4586
4601
|
});
|
|
4587
4602
|
} catch (err) {
|
|
4588
|
-
if (
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4603
|
+
if (combinedAbortSignal.aborted) {
|
|
4604
|
+
if (evalTimedOut) require_logger.logger_default.warn(`Evaluation stopped after reaching max duration (${maxEvalTimeMs}ms)`);
|
|
4605
|
+
else if (!targetUnavailable) {
|
|
4606
|
+
require_logger.logger_default.info("Evaluation interrupted, saving progress...");
|
|
4607
|
+
if (globalTimeout) clearTimeout(globalTimeout);
|
|
4608
|
+
if (progressBarManager) progressBarManager.stop();
|
|
4609
|
+
if (ciProgressReporter) ciProgressReporter.finish();
|
|
4610
|
+
this.evalRecord.setVars(Array.from(vars));
|
|
4611
|
+
await this.evalRecord.addPrompts(prompts);
|
|
4612
|
+
updateSignalFile(this.evalRecord.id);
|
|
4613
|
+
return this.evalRecord;
|
|
4614
|
+
}
|
|
4615
|
+
} else {
|
|
4600
4616
|
if (ciProgressReporter) ciProgressReporter.error(`Evaluation failed: ${String(err)}`);
|
|
4601
4617
|
throw err;
|
|
4602
4618
|
}
|
|
4603
4619
|
}
|
|
4620
|
+
if (targetUnavailable) {
|
|
4621
|
+
if (globalTimeout) clearTimeout(globalTimeout);
|
|
4622
|
+
if (progressBarManager) progressBarManager.stop();
|
|
4623
|
+
if (ciProgressReporter) ciProgressReporter.error(`Target unavailable (HTTP ${targetErrorStatus})`);
|
|
4624
|
+
this.evalRecord.setVars(Array.from(vars));
|
|
4625
|
+
await this.evalRecord.addPrompts(prompts);
|
|
4626
|
+
updateSignalFile(this.evalRecord.id);
|
|
4627
|
+
return this.evalRecord;
|
|
4628
|
+
}
|
|
4604
4629
|
const compareRowsCount = rowsWithSelectBestAssertion.size + rowsWithMaxScoreAssertion.size;
|
|
4605
4630
|
if (progressBarManager) {
|
|
4606
4631
|
if (compareRowsCount > 0) progressBarManager.updateTotalCount(compareRowsCount);
|
|
@@ -5373,7 +5398,12 @@ function convertResultsToTable(eval_) {
|
|
|
5373
5398
|
model: result.response.video.model,
|
|
5374
5399
|
aspectRatio: result.response.video.aspectRatio,
|
|
5375
5400
|
resolution: result.response.video.resolution
|
|
5376
|
-
} : void 0
|
|
5401
|
+
} : void 0,
|
|
5402
|
+
images: result.response?.images?.map((img) => ({
|
|
5403
|
+
data: img.data,
|
|
5404
|
+
blobRef: img.blobRef,
|
|
5405
|
+
mimeType: img.mimeType
|
|
5406
|
+
}))
|
|
5377
5407
|
};
|
|
5378
5408
|
require_invariant.invariant(result.promptId, "Prompt ID is required");
|
|
5379
5409
|
row.testIdx = result.testIdx;
|
|
@@ -5439,7 +5469,12 @@ function convertEvalResultToTableCell(result) {
|
|
|
5439
5469
|
model: result.response.video.model,
|
|
5440
5470
|
aspectRatio: result.response.video.aspectRatio,
|
|
5441
5471
|
resolution: result.response.video.resolution
|
|
5442
|
-
} : void 0
|
|
5472
|
+
} : void 0,
|
|
5473
|
+
images: result.response?.images?.map((img) => ({
|
|
5474
|
+
data: img.data,
|
|
5475
|
+
blobRef: img.blobRef,
|
|
5476
|
+
mimeType: img.mimeType
|
|
5477
|
+
}))
|
|
5443
5478
|
};
|
|
5444
5479
|
}
|
|
5445
5480
|
function convertTestResultsToTableRow(results, varsForHeader) {
|
|
@@ -5997,6 +6032,27 @@ var Eval = class Eval {
|
|
|
5997
6032
|
async getTotalResultRowCount() {
|
|
5998
6033
|
return getTotalResultRowCount(this.id);
|
|
5999
6034
|
}
|
|
6035
|
+
/**
|
|
6036
|
+
* Find a non-transient HTTP error status from evaluation results.
|
|
6037
|
+
* Returns the first non-transient status (401, 403, 404, 500, 501) found, or undefined.
|
|
6038
|
+
*
|
|
6039
|
+
* For persisted evals: Uses efficient O(1) database query with LIMIT 1.
|
|
6040
|
+
* For non-persisted evals: Falls back to scanning in-memory results.
|
|
6041
|
+
*/
|
|
6042
|
+
async findTargetErrorStatus() {
|
|
6043
|
+
const scanInMemory = () => {
|
|
6044
|
+
for (const result of this.results) {
|
|
6045
|
+
const status = result.response?.metadata?.http?.status;
|
|
6046
|
+
if (typeof status === "number" && require_cache.isNonTransientHttpStatus(status)) return status;
|
|
6047
|
+
}
|
|
6048
|
+
};
|
|
6049
|
+
if (!this.persisted) return scanInMemory();
|
|
6050
|
+
try {
|
|
6051
|
+
return require_tables.getDb().select({ httpStatus: drizzle_orm.sql`CAST(json_extract(${require_tables.evalResultsTable.response}, '$.metadata.http.status') AS INTEGER)` }).from(require_tables.evalResultsTable).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_tables.evalResultsTable.evalId, this.id), drizzle_orm.sql`json_extract(${require_tables.evalResultsTable.response}, '$.metadata.http.status') IN (${drizzle_orm.sql.join(require_cache.NON_TRANSIENT_HTTP_STATUSES.map((s) => drizzle_orm.sql`${s}`), drizzle_orm.sql`, `)})`)).limit(1).get()?.httpStatus ?? void 0;
|
|
6052
|
+
} catch {
|
|
6053
|
+
return scanInMemory();
|
|
6054
|
+
}
|
|
6055
|
+
}
|
|
6000
6056
|
async fetchResultsByTestIdx(testIdx) {
|
|
6001
6057
|
return await require_evalResult.EvalResult.findManyByEvalId(this.id, { testIdx });
|
|
6002
6058
|
}
|
|
@@ -9677,6 +9733,7 @@ async function synthesize({ abortSignal, delay, entities: entitiesOverride, inje
|
|
|
9677
9733
|
seen.add(key);
|
|
9678
9734
|
return true;
|
|
9679
9735
|
});
|
|
9736
|
+
const needsGoalExtraction = strategies.some((s) => require_providers.Strategies.find((def) => def.id === s.id)?.requiresGoalExtraction);
|
|
9680
9737
|
await require_providers.validateStrategies(strategies);
|
|
9681
9738
|
await validateSharpDependency(strategies, plugins);
|
|
9682
9739
|
const redteamProvider = await require_providers.redteamProviderManager.getProvider({ provider });
|
|
@@ -9868,13 +9925,15 @@ async function synthesize({ abortSignal, delay, entities: entitiesOverride, inje
|
|
|
9868
9925
|
if (!Array.isArray(allPluginTests) || allPluginTests.length === 0) require_logger.logger_default.warn(`Failed to generate tests for ${plugin.id}`);
|
|
9869
9926
|
else {
|
|
9870
9927
|
const testCasesWithMetadata = allPluginTests;
|
|
9871
|
-
|
|
9872
|
-
|
|
9873
|
-
const
|
|
9874
|
-
|
|
9875
|
-
|
|
9876
|
-
|
|
9877
|
-
|
|
9928
|
+
if (needsGoalExtraction) {
|
|
9929
|
+
require_logger.logger_default.debug(`Extracting goal for ${testCasesWithMetadata.length} tests from ${plugin.id}...`);
|
|
9930
|
+
for (const testCase of testCasesWithMetadata) {
|
|
9931
|
+
const promptVar = testCase.vars?.[injectVar];
|
|
9932
|
+
const prompt = Array.isArray(promptVar) ? promptVar[0] : String(promptVar);
|
|
9933
|
+
const policy = getPolicyText(testCase.metadata);
|
|
9934
|
+
const extractedGoal = await require_providers.extractGoalFromPrompt(prompt, purpose, plugin.id, policy);
|
|
9935
|
+
testCase.metadata.goal = extractedGoal;
|
|
9936
|
+
}
|
|
9878
9937
|
}
|
|
9879
9938
|
testCases.push(...testCasesWithMetadata);
|
|
9880
9939
|
}
|
|
@@ -9909,13 +9968,15 @@ async function synthesize({ abortSignal, delay, entities: entitiesOverride, inje
|
|
|
9909
9968
|
...t.metadata || {}
|
|
9910
9969
|
}
|
|
9911
9970
|
}));
|
|
9912
|
-
|
|
9913
|
-
|
|
9914
|
-
const
|
|
9915
|
-
|
|
9916
|
-
|
|
9917
|
-
|
|
9918
|
-
|
|
9971
|
+
if (needsGoalExtraction) {
|
|
9972
|
+
require_logger.logger_default.debug(`Extracting goal for ${testCasesWithMetadata.length} custom tests from ${plugin.id}...`);
|
|
9973
|
+
for (const testCase of testCasesWithMetadata) {
|
|
9974
|
+
const promptVar = testCase.vars?.[injectVar];
|
|
9975
|
+
const prompt = Array.isArray(promptVar) ? promptVar[0] : String(promptVar);
|
|
9976
|
+
const policy = getPolicyText(testCase.metadata);
|
|
9977
|
+
const extractedGoal = await require_providers.extractGoalFromPrompt(prompt, purpose, plugin.id, policy);
|
|
9978
|
+
testCase.metadata.goal = extractedGoal;
|
|
9979
|
+
}
|
|
9919
9980
|
}
|
|
9920
9981
|
testCases.push(...testCasesWithMetadata);
|
|
9921
9982
|
require_logger.logger_default.debug(`Added ${customTests.length} custom test cases from ${plugin.id}`);
|
|
@@ -11044,11 +11105,31 @@ function formatDuration(seconds) {
|
|
|
11044
11105
|
* ```
|
|
11045
11106
|
*/
|
|
11046
11107
|
function generateEvalSummary(params) {
|
|
11047
|
-
const { evalId, isRedteam, writeToDatabase, shareableUrl, wantsToShare, hasExplicitDisable, cloudEnabled, activelySharing = false, tokenUsage, successes, failures, errors, duration, maxConcurrency, tracker } = params;
|
|
11108
|
+
const { evalId, isRedteam, writeToDatabase, shareableUrl, wantsToShare, hasExplicitDisable, cloudEnabled, activelySharing = false, tokenUsage, successes, failures, errors, duration, maxConcurrency, tracker, targetErrorStatus } = params;
|
|
11048
11109
|
const lines = [];
|
|
11049
11110
|
const completionType = isRedteam ? "Red team" : "Eval";
|
|
11050
|
-
const
|
|
11111
|
+
const wasAborted = targetErrorStatus != null;
|
|
11112
|
+
let completionMessage;
|
|
11113
|
+
if (wasAborted) {
|
|
11114
|
+
completionMessage = `${chalk.default.red("✗")} ${completionType} aborted`;
|
|
11115
|
+
if (writeToDatabase) completionMessage += ` (ID: ${chalk.default.cyan(evalId)})`;
|
|
11116
|
+
} else if (writeToDatabase && shareableUrl) completionMessage = `${chalk.default.green("✓")} ${completionType} complete: ${shareableUrl}`;
|
|
11117
|
+
else if (writeToDatabase && activelySharing) completionMessage = `${chalk.default.green("✓")} ${completionType} complete`;
|
|
11118
|
+
else if (writeToDatabase) completionMessage = `${chalk.default.green("✓")} ${completionType} complete (ID: ${chalk.default.cyan(evalId)})`;
|
|
11119
|
+
else completionMessage = `${chalk.default.green("✓")} ${completionType} complete`;
|
|
11051
11120
|
lines.push(completionMessage);
|
|
11121
|
+
if (wasAborted && targetErrorStatus != null) {
|
|
11122
|
+
lines.push("");
|
|
11123
|
+
lines.push(chalk.default.red.bold("Scan stopped: Target is unavailable and will not recover on retry."));
|
|
11124
|
+
lines.push(chalk.default.red(` Target returned HTTP ${targetErrorStatus}`));
|
|
11125
|
+
lines.push("");
|
|
11126
|
+
lines.push(chalk.default.yellow("Possible causes:"));
|
|
11127
|
+
lines.push(chalk.default.yellow(" • Invalid API key or authentication (401/403)"));
|
|
11128
|
+
lines.push(chalk.default.yellow(" • Target endpoint does not exist (404)"));
|
|
11129
|
+
lines.push(chalk.default.yellow(" • Server does not support the request (501)"));
|
|
11130
|
+
lines.push("");
|
|
11131
|
+
lines.push(chalk.default.cyan("To fix: Check your target configuration and credentials."));
|
|
11132
|
+
}
|
|
11052
11133
|
if (writeToDatabase && !shareableUrl && !wantsToShare && !activelySharing) {
|
|
11053
11134
|
lines.push("");
|
|
11054
11135
|
lines.push(`» View results: ${chalk.default.green.bold("promptfoo view")}`);
|
|
@@ -11609,6 +11690,7 @@ async function doEval(cmdObj, defaultConfig, defaultConfigPath, evaluateOptions)
|
|
|
11609
11690
|
const isRedteam = Boolean(config.redteam);
|
|
11610
11691
|
const duration = Math.round((Date.now() - startTime) / 1e3);
|
|
11611
11692
|
const tracker = require_providers.TokenUsageTracker.getInstance();
|
|
11693
|
+
const targetErrorStatus = await evalRecord.findTargetErrorStatus();
|
|
11612
11694
|
const summaryLines = generateEvalSummary({
|
|
11613
11695
|
evalId: evalRecord.id,
|
|
11614
11696
|
isRedteam,
|
|
@@ -11624,7 +11706,8 @@ async function doEval(cmdObj, defaultConfig, defaultConfigPath, evaluateOptions)
|
|
|
11624
11706
|
errors,
|
|
11625
11707
|
duration,
|
|
11626
11708
|
maxConcurrency,
|
|
11627
|
-
tracker
|
|
11709
|
+
tracker,
|
|
11710
|
+
targetErrorStatus
|
|
11628
11711
|
});
|
|
11629
11712
|
if (cmdObj.write && wantsToShare && !canShareEval) {
|
|
11630
11713
|
require_logger.logger_default.info(summaryLines[0]);
|
|
@@ -11679,7 +11762,7 @@ async function doEval(cmdObj, defaultConfig, defaultConfigPath, evaluateOptions)
|
|
|
11679
11762
|
if (initialization) {
|
|
11680
11763
|
const configPaths = (cmdObj.config || [defaultConfigPath]).filter(Boolean);
|
|
11681
11764
|
if (!configPaths.length) {
|
|
11682
|
-
require_logger.logger_default.error(
|
|
11765
|
+
require_logger.logger_default.error(`Could not locate config file(s) to watch. Pass --config path/to/promptfooconfig.yaml or run from a directory containing promptfooconfig.{${DEFAULT_CONFIG_EXTENSIONS.join(",")}}.`);
|
|
11683
11766
|
process.exitCode = 1;
|
|
11684
11767
|
return ret;
|
|
11685
11768
|
}
|
|
@@ -11891,7 +11974,7 @@ async function doRedteamRun(options) {
|
|
|
11891
11974
|
const evalMs = evalResult.evaluationDurationMs ?? 0;
|
|
11892
11975
|
require_logger.logger_default.info(chalk.default.gray(`Total scan time: ${formatDuration(totalMs / 1e3)} (generation: ${formatDuration(generationDurationMs / 1e3)}, evaluation: ${formatDuration(evalMs / 1e3)})`));
|
|
11893
11976
|
}
|
|
11894
|
-
require_logger.logger_default.info(chalk.default.green("\nRed team scan complete!"));
|
|
11977
|
+
if (evalResult ? await evalResult.findTargetErrorStatus() != null : false) {} else require_logger.logger_default.info(chalk.default.green("\nRed team scan complete!"));
|
|
11895
11978
|
if (!evalResult?.shared) if (options.liveRedteamConfig) require_logger.logger_default.info(chalk.default.blue(`To view the results, click the ${chalk.default.bold("View Report")} button or run ${chalk.default.bold(promptfooCommand("redteam report"))} on the command line.`));
|
|
11896
11979
|
else require_logger.logger_default.info(chalk.default.blue(`To view the results, run ${chalk.default.bold(promptfooCommand("redteam report"))}`));
|
|
11897
11980
|
require_logger.setLogCallback(null);
|