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,12 +1,11 @@
|
|
|
1
|
-
const require_logger = require(
|
|
2
|
-
const require_fetch = require(
|
|
3
|
-
const require_accounts = require(
|
|
1
|
+
const require_logger = require("./logger-Cp1GPUjj.cjs");
|
|
2
|
+
const require_fetch = require("./fetch-BPkYtG8K.cjs");
|
|
3
|
+
const require_accounts = require("./accounts-gtkH-5KX.cjs");
|
|
4
4
|
let chalk = require("chalk");
|
|
5
5
|
chalk = require_logger.__toESM(chalk);
|
|
6
6
|
require("opener");
|
|
7
7
|
let readline = require("readline");
|
|
8
8
|
readline = require_logger.__toESM(readline);
|
|
9
|
-
|
|
10
9
|
//#region src/redteam/remoteGeneration.ts
|
|
11
10
|
/**
|
|
12
11
|
* Gets the remote generation API endpoint URL.
|
|
@@ -76,7 +75,7 @@ function getRemoteVersionUrl() {
|
|
|
76
75
|
function shouldGenerateRemote() {
|
|
77
76
|
if (neverGenerateRemote()) return false;
|
|
78
77
|
if (require_accounts.isLoggedIntoCloud()) return true;
|
|
79
|
-
return !require_logger.getEnvString("OPENAI_API_KEY") || (require_logger.
|
|
78
|
+
return !require_logger.getEnvString("OPENAI_API_KEY") || (require_logger.state.remote ?? false);
|
|
80
79
|
}
|
|
81
80
|
/**
|
|
82
81
|
* Gets the URL for unaligned model inference (harmful content generation).
|
|
@@ -90,7 +89,6 @@ function getRemoteGenerationUrlForUnaligned() {
|
|
|
90
89
|
if (cloudConfig.isEnabled()) return cloudConfig.getApiHost() + "/api/v1/task/harmful";
|
|
91
90
|
return "https://api.promptfoo.app/api/v1/task/harmful";
|
|
92
91
|
}
|
|
93
|
-
|
|
94
92
|
//#endregion
|
|
95
93
|
//#region src/util/readline.ts
|
|
96
94
|
/**
|
|
@@ -136,7 +134,6 @@ async function promptYesNo(question, defaultYes = false) {
|
|
|
136
134
|
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
137
135
|
return answer.trim().toLowerCase().startsWith("y");
|
|
138
136
|
}
|
|
139
|
-
|
|
140
137
|
//#endregion
|
|
141
138
|
//#region src/util/server.ts
|
|
142
139
|
const BrowserBehavior = {
|
|
@@ -147,14 +144,7 @@ const BrowserBehavior = {
|
|
|
147
144
|
OPEN_TO_REDTEAM_CREATE: 4,
|
|
148
145
|
OPEN_TO_EVAL_SETUP: 5
|
|
149
146
|
};
|
|
150
|
-
|
|
151
|
-
[BrowserBehavior.ASK]: "ASK",
|
|
152
|
-
[BrowserBehavior.OPEN]: "OPEN",
|
|
153
|
-
[BrowserBehavior.SKIP]: "SKIP",
|
|
154
|
-
[BrowserBehavior.OPEN_TO_REPORT]: "OPEN_TO_REPORT",
|
|
155
|
-
[BrowserBehavior.OPEN_TO_REDTEAM_CREATE]: "OPEN_TO_REDTEAM_CREATE",
|
|
156
|
-
[BrowserBehavior.OPEN_TO_EVAL_SETUP]: "OPEN_TO_EVAL_SETUP"
|
|
157
|
-
};
|
|
147
|
+
BrowserBehavior.ASK, BrowserBehavior.OPEN, BrowserBehavior.SKIP, BrowserBehavior.OPEN_TO_REPORT, BrowserBehavior.OPEN_TO_REDTEAM_CREATE, BrowserBehavior.OPEN_TO_EVAL_SETUP;
|
|
158
148
|
const featureCache = /* @__PURE__ */ new Map();
|
|
159
149
|
/**
|
|
160
150
|
* Checks if a server supports a specific feature based on build date
|
|
@@ -167,7 +157,7 @@ async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
|
167
157
|
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
168
158
|
let supported = false;
|
|
169
159
|
try {
|
|
170
|
-
require_logger.
|
|
160
|
+
require_logger.logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
171
161
|
const versionUrl = getRemoteVersionUrl();
|
|
172
162
|
if (versionUrl) {
|
|
173
163
|
const data = await (await require_fetch.fetchWithProxy(versionUrl, {
|
|
@@ -176,76 +166,76 @@ async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
|
176
166
|
})).json();
|
|
177
167
|
if (data.buildDate) {
|
|
178
168
|
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
179
|
-
require_logger.
|
|
169
|
+
require_logger.logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
180
170
|
} else {
|
|
181
|
-
require_logger.
|
|
171
|
+
require_logger.logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
182
172
|
supported = false;
|
|
183
173
|
}
|
|
184
174
|
} else {
|
|
185
|
-
require_logger.
|
|
175
|
+
require_logger.logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
186
176
|
supported = true;
|
|
187
177
|
}
|
|
188
178
|
} catch (error) {
|
|
189
|
-
require_logger.
|
|
179
|
+
require_logger.logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
190
180
|
supported = false;
|
|
191
181
|
}
|
|
192
182
|
featureCache.set(cacheKey, supported);
|
|
193
183
|
return supported;
|
|
194
184
|
}
|
|
195
|
-
|
|
196
185
|
//#endregion
|
|
197
|
-
Object.defineProperty(exports,
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
186
|
+
Object.defineProperty(exports, "BrowserBehavior", {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function() {
|
|
189
|
+
return BrowserBehavior;
|
|
190
|
+
}
|
|
202
191
|
});
|
|
203
|
-
Object.defineProperty(exports,
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
192
|
+
Object.defineProperty(exports, "checkServerFeatureSupport", {
|
|
193
|
+
enumerable: true,
|
|
194
|
+
get: function() {
|
|
195
|
+
return checkServerFeatureSupport;
|
|
196
|
+
}
|
|
208
197
|
});
|
|
209
|
-
Object.defineProperty(exports,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
198
|
+
Object.defineProperty(exports, "getRemoteGenerationUrl", {
|
|
199
|
+
enumerable: true,
|
|
200
|
+
get: function() {
|
|
201
|
+
return getRemoteGenerationUrl;
|
|
202
|
+
}
|
|
214
203
|
});
|
|
215
|
-
Object.defineProperty(exports,
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
204
|
+
Object.defineProperty(exports, "getRemoteGenerationUrlForUnaligned", {
|
|
205
|
+
enumerable: true,
|
|
206
|
+
get: function() {
|
|
207
|
+
return getRemoteGenerationUrlForUnaligned;
|
|
208
|
+
}
|
|
220
209
|
});
|
|
221
|
-
Object.defineProperty(exports,
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
210
|
+
Object.defineProperty(exports, "getRemoteHealthUrl", {
|
|
211
|
+
enumerable: true,
|
|
212
|
+
get: function() {
|
|
213
|
+
return getRemoteHealthUrl;
|
|
214
|
+
}
|
|
226
215
|
});
|
|
227
|
-
Object.defineProperty(exports,
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
216
|
+
Object.defineProperty(exports, "neverGenerateRemote", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function() {
|
|
219
|
+
return neverGenerateRemote;
|
|
220
|
+
}
|
|
232
221
|
});
|
|
233
|
-
Object.defineProperty(exports,
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
222
|
+
Object.defineProperty(exports, "neverGenerateRemoteForRegularEvals", {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
get: function() {
|
|
225
|
+
return neverGenerateRemoteForRegularEvals;
|
|
226
|
+
}
|
|
238
227
|
});
|
|
239
|
-
Object.defineProperty(exports,
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
228
|
+
Object.defineProperty(exports, "promptYesNo", {
|
|
229
|
+
enumerable: true,
|
|
230
|
+
get: function() {
|
|
231
|
+
return promptYesNo;
|
|
232
|
+
}
|
|
244
233
|
});
|
|
245
|
-
Object.defineProperty(exports,
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
234
|
+
Object.defineProperty(exports, "shouldGenerateRemote", {
|
|
235
|
+
enumerable: true,
|
|
236
|
+
get: function() {
|
|
237
|
+
return shouldGenerateRemote;
|
|
238
|
+
}
|
|
250
239
|
});
|
|
251
|
-
|
|
240
|
+
|
|
241
|
+
//# sourceMappingURL=server-C_7Ax-hA.cjs.map
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as getEnvString, O as
|
|
3
|
-
import {
|
|
4
|
-
import { c as isLoggedIntoCloud } from "./accounts-
|
|
5
|
-
import { r as CloudConfig } from "./cloud-
|
|
2
|
+
import { C as getEnvString, O as state, b as getEnvBool, o as logger } from "./logger-KkObSCzq.js";
|
|
3
|
+
import { O as getDefaultPort, n as fetchWithProxy } from "./fetch-Dxpd4_sr.js";
|
|
4
|
+
import { c as isLoggedIntoCloud } from "./accounts-Bm2D8Db9.js";
|
|
5
|
+
import { r as CloudConfig } from "./cloud-C0dlstV_.js";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import opener from "opener";
|
|
8
8
|
import readline from "readline";
|
|
9
|
-
|
|
10
9
|
//#region src/redteam/remoteGeneration.ts
|
|
11
10
|
/**
|
|
12
11
|
* Gets the remote generation API endpoint URL.
|
|
@@ -76,7 +75,7 @@ function getRemoteVersionUrl() {
|
|
|
76
75
|
function shouldGenerateRemote() {
|
|
77
76
|
if (neverGenerateRemote()) return false;
|
|
78
77
|
if (isLoggedIntoCloud()) return true;
|
|
79
|
-
return !getEnvString("OPENAI_API_KEY") || (
|
|
78
|
+
return !getEnvString("OPENAI_API_KEY") || (state.remote ?? false);
|
|
80
79
|
}
|
|
81
80
|
/**
|
|
82
81
|
* Gets the URL for unaligned model inference (harmful content generation).
|
|
@@ -90,7 +89,6 @@ function getRemoteGenerationUrlForUnaligned() {
|
|
|
90
89
|
if (cloudConfig.isEnabled()) return cloudConfig.getApiHost() + "/api/v1/task/harmful";
|
|
91
90
|
return "https://api.promptfoo.app/api/v1/task/harmful";
|
|
92
91
|
}
|
|
93
|
-
|
|
94
92
|
//#endregion
|
|
95
93
|
//#region src/util/readline.ts
|
|
96
94
|
/**
|
|
@@ -136,7 +134,6 @@ async function promptYesNo(question, defaultYes = false) {
|
|
|
136
134
|
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
137
135
|
return answer.trim().toLowerCase().startsWith("y");
|
|
138
136
|
}
|
|
139
|
-
|
|
140
137
|
//#endregion
|
|
141
138
|
//#region src/util/server.ts
|
|
142
139
|
const BrowserBehavior = {
|
|
@@ -167,7 +164,7 @@ async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
|
167
164
|
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
168
165
|
let supported = false;
|
|
169
166
|
try {
|
|
170
|
-
|
|
167
|
+
logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
171
168
|
const versionUrl = getRemoteVersionUrl();
|
|
172
169
|
if (versionUrl) {
|
|
173
170
|
const data = await (await fetchWithProxy(versionUrl, {
|
|
@@ -176,29 +173,29 @@ async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
|
176
173
|
})).json();
|
|
177
174
|
if (data.buildDate) {
|
|
178
175
|
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
179
|
-
|
|
176
|
+
logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
180
177
|
} else {
|
|
181
|
-
|
|
178
|
+
logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
182
179
|
supported = false;
|
|
183
180
|
}
|
|
184
181
|
} else {
|
|
185
|
-
|
|
182
|
+
logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
186
183
|
supported = true;
|
|
187
184
|
}
|
|
188
185
|
} catch (error) {
|
|
189
|
-
|
|
186
|
+
logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
190
187
|
supported = false;
|
|
191
188
|
}
|
|
192
189
|
featureCache.set(cacheKey, supported);
|
|
193
190
|
return supported;
|
|
194
191
|
}
|
|
195
192
|
async function checkServerRunning(port = getDefaultPort()) {
|
|
196
|
-
|
|
193
|
+
logger.debug(`Checking for existing server on port ${port}...`);
|
|
197
194
|
try {
|
|
198
195
|
const data = await (await fetchWithProxy(`http://localhost:${port}/health`, { headers: { "x-promptfoo-silent": "true" } })).json();
|
|
199
|
-
return data.status === "OK" && data.version ===
|
|
196
|
+
return data.status === "OK" && data.version === "0.121.2";
|
|
200
197
|
} catch (err) {
|
|
201
|
-
|
|
198
|
+
logger.debug(`No existing server found - this is expected on first startup. ${String(err)}`);
|
|
202
199
|
return false;
|
|
203
200
|
}
|
|
204
201
|
}
|
|
@@ -210,10 +207,10 @@ async function openBrowser(browserBehavior, port = getDefaultPort()) {
|
|
|
210
207
|
else if (browserBehavior === BrowserBehavior.OPEN_TO_EVAL_SETUP) url = `${baseUrl}/setup`;
|
|
211
208
|
const doOpen = async () => {
|
|
212
209
|
try {
|
|
213
|
-
|
|
210
|
+
logger.info("Press Ctrl+C to stop the server");
|
|
214
211
|
await opener(url);
|
|
215
212
|
} catch (err) {
|
|
216
|
-
|
|
213
|
+
logger.error(`Failed to open browser: ${String(err)}`);
|
|
217
214
|
}
|
|
218
215
|
};
|
|
219
216
|
if (browserBehavior === BrowserBehavior.ASK) {
|
|
@@ -244,26 +241,26 @@ async function openBrowser(browserBehavior, port = getDefaultPort()) {
|
|
|
244
241
|
async function openAuthBrowser(authUrl, welcomeUrl, browserBehavior) {
|
|
245
242
|
const doOpen = async () => {
|
|
246
243
|
try {
|
|
247
|
-
|
|
244
|
+
logger.info(`Opening ${authUrl} in your browser...`);
|
|
248
245
|
await opener(authUrl);
|
|
249
|
-
|
|
246
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
250
247
|
} catch (err) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
248
|
+
logger.error(`Failed to open browser: ${String(err)}`);
|
|
249
|
+
logger.info(`Please visit: ${chalk.green(authUrl)}`);
|
|
250
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
254
251
|
}
|
|
255
252
|
};
|
|
256
253
|
if (browserBehavior === BrowserBehavior.ASK) if (await promptYesNo("Open login page in browser?", true)) await doOpen();
|
|
257
254
|
else {
|
|
258
|
-
|
|
259
|
-
|
|
255
|
+
logger.info(`Please visit: ${chalk.green(authUrl)}`);
|
|
256
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
260
257
|
}
|
|
261
258
|
else if (browserBehavior === BrowserBehavior.SKIP) {
|
|
262
|
-
|
|
263
|
-
|
|
259
|
+
logger.info(`Please visit: ${chalk.green(authUrl)}`);
|
|
260
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
264
261
|
} else await doOpen();
|
|
265
262
|
}
|
|
266
|
-
|
|
267
263
|
//#endregion
|
|
268
264
|
export { openAuthBrowser as a, promptYesNo as c, getRemoteHealthUrl as d, neverGenerateRemote as f, checkServerRunning as i, getRemoteGenerationUrl as l, shouldGenerateRemote as m, BrowserBehaviorNames as n, openBrowser as o, neverGenerateRemoteForRegularEvals as p, checkServerFeatureSupport as r, promptUser as s, BrowserBehavior as t, getRemoteGenerationUrlForUnaligned as u };
|
|
269
|
-
|
|
265
|
+
|
|
266
|
+
//# sourceMappingURL=server-CqzrVGpF.js.map
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
+
import { _ as getEnvBool, b as getEnvString, i as logger, w as state } from "./logger-DLcq4dWf.js";
|
|
3
|
+
import { a as CloudConfig, k as getDefaultPort, t as fetchWithProxy } from "./fetch-HaqdX7U1.js";
|
|
4
|
+
import { c as isLoggedIntoCloud } from "./accounts-B0pgC1oV.js";
|
|
5
|
+
import "chalk";
|
|
6
|
+
import opener from "opener";
|
|
7
|
+
import readline from "readline";
|
|
8
|
+
//#region src/redteam/remoteGeneration.ts
|
|
9
|
+
/**
|
|
10
|
+
* Gets the remote generation API endpoint URL.
|
|
11
|
+
* Prioritizes: env var > cloud config > default endpoint.
|
|
12
|
+
* @returns The remote generation URL
|
|
13
|
+
*/
|
|
14
|
+
function getRemoteGenerationUrl() {
|
|
15
|
+
const envUrl = getEnvString("PROMPTFOO_REMOTE_GENERATION_URL");
|
|
16
|
+
if (envUrl) return envUrl;
|
|
17
|
+
const cloudConfig = new CloudConfig();
|
|
18
|
+
if (cloudConfig.isEnabled()) return cloudConfig.getApiHost() + "/api/v1/task";
|
|
19
|
+
return "https://api.promptfoo.app/api/v1/task";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if remote generation should never be used.
|
|
23
|
+
* Respects both the general and redteam-specific disable flags.
|
|
24
|
+
* @returns true if remote generation is disabled
|
|
25
|
+
*/
|
|
26
|
+
function neverGenerateRemote() {
|
|
27
|
+
if (getEnvBool("PROMPTFOO_DISABLE_REMOTE_GENERATION")) return true;
|
|
28
|
+
return getEnvBool("PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if remote generation should never be used for non-redteam features.
|
|
32
|
+
* This allows granular control: disable redteam remote generation while allowing
|
|
33
|
+
* regular SimulatedUser to use remote generation.
|
|
34
|
+
* @returns true if ALL remote generation is disabled
|
|
35
|
+
*/
|
|
36
|
+
function neverGenerateRemoteForRegularEvals() {
|
|
37
|
+
return getEnvBool("PROMPTFOO_DISABLE_REMOTE_GENERATION");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Builds a remote URL with a substituted pathname, honoring env vars / cloud config.
|
|
41
|
+
*/
|
|
42
|
+
function buildRemoteUrl(pathname, fallback) {
|
|
43
|
+
if (neverGenerateRemote()) return null;
|
|
44
|
+
const envUrl = getEnvString("PROMPTFOO_REMOTE_GENERATION_URL");
|
|
45
|
+
if (envUrl) try {
|
|
46
|
+
const url = new URL(envUrl);
|
|
47
|
+
url.pathname = pathname;
|
|
48
|
+
return url.toString();
|
|
49
|
+
} catch {
|
|
50
|
+
return fallback;
|
|
51
|
+
}
|
|
52
|
+
const cloudConfig = new CloudConfig();
|
|
53
|
+
if (cloudConfig.isEnabled()) return `${cloudConfig.getApiHost()}${pathname}`;
|
|
54
|
+
return fallback;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Gets the URL for checking remote API health based on configuration.
|
|
58
|
+
* @returns The health check URL, or null if remote generation is disabled.
|
|
59
|
+
*/
|
|
60
|
+
function getRemoteHealthUrl() {
|
|
61
|
+
return buildRemoteUrl("/health", "https://api.promptfoo.app/health");
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gets the URL for checking remote API version based on configuration.
|
|
65
|
+
* @returns The version check URL, or null if remote generation is disabled.
|
|
66
|
+
*/
|
|
67
|
+
function getRemoteVersionUrl() {
|
|
68
|
+
return buildRemoteUrl("/version", "https://api.promptfoo.app/version");
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Determines if remote generation should be used based on configuration.
|
|
72
|
+
* @returns true if remote generation should be used
|
|
73
|
+
*/
|
|
74
|
+
function shouldGenerateRemote() {
|
|
75
|
+
if (neverGenerateRemote()) return false;
|
|
76
|
+
if (isLoggedIntoCloud()) return true;
|
|
77
|
+
return !getEnvString("OPENAI_API_KEY") || (state.remote ?? false);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Gets the URL for unaligned model inference (harmful content generation).
|
|
81
|
+
* Prioritizes: env var > cloud config > default endpoint.
|
|
82
|
+
* @returns The unaligned inference URL
|
|
83
|
+
*/
|
|
84
|
+
function getRemoteGenerationUrlForUnaligned() {
|
|
85
|
+
const envUrl = getEnvString("PROMPTFOO_UNALIGNED_INFERENCE_ENDPOINT");
|
|
86
|
+
if (envUrl) return envUrl;
|
|
87
|
+
const cloudConfig = new CloudConfig();
|
|
88
|
+
if (cloudConfig.isEnabled()) return cloudConfig.getApiHost() + "/api/v1/task/harmful";
|
|
89
|
+
return "https://api.promptfoo.app/api/v1/task/harmful";
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region src/util/readline.ts
|
|
93
|
+
/**
|
|
94
|
+
* Factory function for creating readline interface.
|
|
95
|
+
* This abstraction makes it easier to mock in tests and prevents open handles.
|
|
96
|
+
*/
|
|
97
|
+
function createReadlineInterface() {
|
|
98
|
+
return readline.createInterface({
|
|
99
|
+
input: process.stdin,
|
|
100
|
+
output: process.stdout
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Prompts the user with a question and returns their answer.
|
|
105
|
+
* Automatically handles cleanup of the readline interface.
|
|
106
|
+
*/
|
|
107
|
+
async function promptUser(question) {
|
|
108
|
+
return new Promise((resolve, reject) => {
|
|
109
|
+
let rl = null;
|
|
110
|
+
try {
|
|
111
|
+
rl = createReadlineInterface();
|
|
112
|
+
rl.on("error", (err) => {
|
|
113
|
+
if (rl) rl.close();
|
|
114
|
+
reject(err);
|
|
115
|
+
});
|
|
116
|
+
rl.question(question, (answer) => {
|
|
117
|
+
if (rl) rl.close();
|
|
118
|
+
resolve(answer);
|
|
119
|
+
});
|
|
120
|
+
} catch (err) {
|
|
121
|
+
if (rl) rl.close();
|
|
122
|
+
reject(err);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Prompts the user with a yes/no question and returns a boolean.
|
|
128
|
+
* @param question The question to ask
|
|
129
|
+
* @param defaultYes If true, empty response defaults to yes. If false, defaults to no.
|
|
130
|
+
*/
|
|
131
|
+
async function promptYesNo(question, defaultYes = false) {
|
|
132
|
+
const answer = await promptUser(`${question} ${defaultYes ? "(Y/n): " : "(y/N): "}`);
|
|
133
|
+
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
134
|
+
return answer.trim().toLowerCase().startsWith("y");
|
|
135
|
+
}
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region src/util/server.ts
|
|
138
|
+
var server_exports = /* @__PURE__ */ __exportAll({
|
|
139
|
+
BrowserBehavior: () => BrowserBehavior,
|
|
140
|
+
BrowserBehaviorNames: () => BrowserBehaviorNames,
|
|
141
|
+
checkServerFeatureSupport: () => checkServerFeatureSupport,
|
|
142
|
+
checkServerRunning: () => checkServerRunning,
|
|
143
|
+
openBrowser: () => openBrowser
|
|
144
|
+
});
|
|
145
|
+
const BrowserBehavior = {
|
|
146
|
+
ASK: 0,
|
|
147
|
+
OPEN: 1,
|
|
148
|
+
SKIP: 2,
|
|
149
|
+
OPEN_TO_REPORT: 3,
|
|
150
|
+
OPEN_TO_REDTEAM_CREATE: 4,
|
|
151
|
+
OPEN_TO_EVAL_SETUP: 5
|
|
152
|
+
};
|
|
153
|
+
const BrowserBehaviorNames = {
|
|
154
|
+
[BrowserBehavior.ASK]: "ASK",
|
|
155
|
+
[BrowserBehavior.OPEN]: "OPEN",
|
|
156
|
+
[BrowserBehavior.SKIP]: "SKIP",
|
|
157
|
+
[BrowserBehavior.OPEN_TO_REPORT]: "OPEN_TO_REPORT",
|
|
158
|
+
[BrowserBehavior.OPEN_TO_REDTEAM_CREATE]: "OPEN_TO_REDTEAM_CREATE",
|
|
159
|
+
[BrowserBehavior.OPEN_TO_EVAL_SETUP]: "OPEN_TO_EVAL_SETUP"
|
|
160
|
+
};
|
|
161
|
+
const featureCache = /* @__PURE__ */ new Map();
|
|
162
|
+
/**
|
|
163
|
+
* Checks if a server supports a specific feature based on build date
|
|
164
|
+
* @param featureName - Name of the feature (for caching and logging)
|
|
165
|
+
* @param requiredBuildDate - Minimum build date when feature was added (ISO string)
|
|
166
|
+
* @returns Promise<boolean> - true if server supports the feature
|
|
167
|
+
*/
|
|
168
|
+
async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
169
|
+
const cacheKey = `${featureName}`;
|
|
170
|
+
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
171
|
+
let supported = false;
|
|
172
|
+
try {
|
|
173
|
+
logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
174
|
+
const versionUrl = getRemoteVersionUrl();
|
|
175
|
+
if (versionUrl) {
|
|
176
|
+
const data = await (await fetchWithProxy(versionUrl, {
|
|
177
|
+
method: "GET",
|
|
178
|
+
headers: { "Content-Type": "application/json" }
|
|
179
|
+
})).json();
|
|
180
|
+
if (data.buildDate) {
|
|
181
|
+
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
182
|
+
logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
183
|
+
} else {
|
|
184
|
+
logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
185
|
+
supported = false;
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
189
|
+
supported = true;
|
|
190
|
+
}
|
|
191
|
+
} catch (error) {
|
|
192
|
+
logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
193
|
+
supported = false;
|
|
194
|
+
}
|
|
195
|
+
featureCache.set(cacheKey, supported);
|
|
196
|
+
return supported;
|
|
197
|
+
}
|
|
198
|
+
async function checkServerRunning(port = getDefaultPort()) {
|
|
199
|
+
logger.debug(`Checking for existing server on port ${port}...`);
|
|
200
|
+
try {
|
|
201
|
+
const data = await (await fetchWithProxy(`http://localhost:${port}/health`, { headers: { "x-promptfoo-silent": "true" } })).json();
|
|
202
|
+
return data.status === "OK" && data.version === "0.121.2";
|
|
203
|
+
} catch (err) {
|
|
204
|
+
logger.debug(`No existing server found - this is expected on first startup. ${String(err)}`);
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async function openBrowser(browserBehavior, port = getDefaultPort()) {
|
|
209
|
+
const baseUrl = `http://localhost:${port}`;
|
|
210
|
+
let url = baseUrl;
|
|
211
|
+
if (browserBehavior === BrowserBehavior.OPEN_TO_REPORT) url = `${baseUrl}/report`;
|
|
212
|
+
else if (browserBehavior === BrowserBehavior.OPEN_TO_REDTEAM_CREATE) url = `${baseUrl}/redteam/setup`;
|
|
213
|
+
else if (browserBehavior === BrowserBehavior.OPEN_TO_EVAL_SETUP) url = `${baseUrl}/setup`;
|
|
214
|
+
const doOpen = async () => {
|
|
215
|
+
try {
|
|
216
|
+
logger.info("Press Ctrl+C to stop the server");
|
|
217
|
+
await opener(url);
|
|
218
|
+
} catch (err) {
|
|
219
|
+
logger.error(`Failed to open browser: ${String(err)}`);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
if (browserBehavior === BrowserBehavior.ASK) {
|
|
223
|
+
if (await promptYesNo("Open URL in browser?", false)) await doOpen();
|
|
224
|
+
} else if (browserBehavior !== BrowserBehavior.SKIP) await doOpen();
|
|
225
|
+
}
|
|
226
|
+
//#endregion
|
|
227
|
+
export { openBrowser as a, getRemoteGenerationUrl as c, neverGenerateRemote as d, neverGenerateRemoteForRegularEvals as f, checkServerRunning as i, getRemoteGenerationUrlForUnaligned as l, BrowserBehaviorNames as n, server_exports as o, shouldGenerateRemote as p, checkServerFeatureSupport as r, promptYesNo as s, BrowserBehavior as t, getRemoteHealthUrl as u };
|
|
228
|
+
|
|
229
|
+
//# sourceMappingURL=server-CuxBbeSY.js.map
|