promptfoo 0.121.5 → 0.121.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/{ListApp-BRUsT43Y.js → ListApp-DLmM02JS.js} +1 -1
- package/dist/src/{accounts-BIFntVWB.cjs → accounts-BVz5gHLK.cjs} +16 -10
- package/dist/src/{accounts-bnyHT7Ju.js → accounts-BWjqwsrf.js} +12 -7
- package/dist/src/{accounts-CLJHCDDb.js → accounts-D6IBfEE0.js} +13 -8
- package/dist/src/{accounts-CaLNYnf7.js → accounts-DAv_0iE7.js} +12 -7
- package/dist/src/{agentic-utils-B5krlibj.js → agentic-utils-BJKAkz2e.js} +2 -2
- package/dist/src/{agentic-utils-D2x0wGhB.cjs → agentic-utils-C-A92xhn.cjs} +8 -7
- package/dist/src/{agentic-utils-Ba67xmgs.js → agentic-utils-DmoS_S4B.js} +2 -2
- package/dist/src/{agentic-utils-BclbiXiq.js → agentic-utils-GdToujHu.js} +2 -2
- package/dist/src/{agents-BGqaTDnr.js → agents-2C8NN6I1.js} +20 -9
- package/dist/src/{agents-n6vPqV3i.js → agents-BMAiSR2o.js} +4 -4
- package/dist/src/{agents-BYdMl1UE.js → agents-C-PGaxwj.js} +20 -9
- package/dist/src/{agents-BV9yFpXX.js → agents-C98cz5pl.js} +20 -9
- package/dist/src/{agents-WULPVjbH.cjs → agents-DB8Ub2Ld.cjs} +7 -6
- package/dist/src/{agents-DhxWMCtH.js → agents-Dwshy2H8.js} +4 -4
- package/dist/src/{agents-emVcx3yh.js → agents-mlKjx-cK.js} +2 -2
- package/dist/src/{agents-DiWmQYH9.cjs → agents-n2ej-c4H.cjs} +21 -10
- package/dist/src/{aimlapi-DR4pgeiC.js → aimlapi-Bi-laUlp.js} +6 -6
- package/dist/src/{aimlapi-BzLjZI_m.cjs → aimlapi-D0OFV4Vj.cjs} +7 -7
- package/dist/src/{aimlapi-BxqK9HF_.js → aimlapi-WyUK0wYy.js} +6 -6
- package/dist/src/{aimlapi-uPGp0Zdo.js → aimlapi-v-63ZjEI.js} +6 -6
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/app/assets/Report-sCXUfaWo.js +1 -0
- package/dist/src/app/assets/index-BopgkZEh.js +388 -0
- package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
- package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
- package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
- package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
- package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
- package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
- package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
- package/dist/src/app/index.html +6 -6
- package/dist/src/{audio-CScmnmEB.js → audio-DnEIHWZR.js} +3 -3
- package/dist/src/{audio-Da8U9IS5.js → audio-heR0mu0n.js} +3 -3
- package/dist/src/{audio-BvpTOArF.js → audio-wafFO1wn.js} +3 -3
- package/dist/src/{audio-C0vDeS0j.cjs → audio-x44tsxIo.cjs} +4 -4
- package/dist/src/authoritativeMarkupInjection-2G3Be6oL.cjs +74 -0
- package/dist/src/authoritativeMarkupInjection-81PPynHR.js +75 -0
- package/dist/src/authoritativeMarkupInjection-D9O70HPi.js +74 -0
- package/dist/src/authoritativeMarkupInjection-PxSf3Rh8.js +74 -0
- package/dist/src/{base-dYsl2hmL.js → base-0Gzzue9Z.js} +4 -3
- package/dist/src/{base-BOMaNEes.js → base-Bp4c52YZ.js} +4 -3
- package/dist/src/{base-BTux96b1.js → base-BuNn-YBX.js} +4 -3
- package/dist/src/{base-Tw6uhH8K.cjs → base-BzdS8tod.cjs} +5 -4
- package/dist/src/bestOfN-BHiOjeaq.js +136 -0
- package/dist/src/bestOfN-CdkNPPbX.js +136 -0
- package/dist/src/bestOfN-ClUSOhN0.js +137 -0
- package/dist/src/bestOfN-DWwXEg1h.cjs +140 -0
- package/dist/src/{blobs-B95F_7vE.cjs → blobs-B0977K1O.cjs} +7 -6
- package/dist/src/{blobs-D_gg8nbm.js → blobs-CeFdPn_T.js} +2 -2
- package/dist/src/{blobs-DjLby-uP.js → blobs-DODuTK-a.js} +2 -2
- package/dist/src/{blobs-BW4U31ue.js → blobs-Dwef1Ao1.js} +2 -2
- package/dist/src/cache-BKYi3kAA.js +3 -0
- package/dist/src/{cache-BI5BY7ey.js → cache-BR77mdIR.js} +127 -11
- package/dist/src/{cache-Cr-qWIbP.js → cache-CrioYnaa.js} +125 -10
- package/dist/src/{cache-Bzttsk0X.js → cache-DdriHsNX.js} +125 -10
- package/dist/src/{cache-DGg-yTZG.cjs → cache-h5MWOBZI.cjs} +135 -25
- package/dist/src/{chat-Cx_LkwvZ.js → chat-BBEnnpQk.js} +11 -11
- package/dist/src/{chat-DChSH_Es.js → chat-BSos6PvZ.js} +9 -9
- package/dist/src/{chat-aMQZw6R7.js → chat-Bnt7ieO0.js} +4 -4
- package/dist/src/{chat-vYqqv1gP.cjs → chat-DSyYuTYT.cjs} +14 -13
- package/dist/src/{chat-BLOdH60v.js → chat-DTdf-J5Q.js} +11 -11
- package/dist/src/{chat-DH97tVV9.cjs → chat-Dq3DomYU.cjs} +6 -6
- package/dist/src/{chat-DG2LkwLq.js → chat-g5QLeLOo.js} +4 -4
- package/dist/src/{chat-D9nudO9b.js → chat-mTTuUAYb.js} +4 -4
- package/dist/src/{chatkit-B8X34dQc.js → chatkit-B6DWi70Q.js} +3 -3
- package/dist/src/{chatkit-D44VyUyB.cjs → chatkit-BYveR48_.cjs} +6 -5
- package/dist/src/{chatkit-BXu42Qwt.js → chatkit-fARZwEfV.js} +3 -3
- package/dist/src/{chatkit-CbMRoeYw.js → chatkit-lb6FK02w.js} +1 -1
- package/dist/src/{claude-agent-sdk-DYv_AJ8u.js → claude-agent-sdk-BGUac_kS.js} +213 -66
- package/dist/src/{claude-agent-sdk-BjriSVRZ.js → claude-agent-sdk-BP__YGfK.js} +213 -66
- package/dist/src/{claude-agent-sdk-BzNZeZ0N.js → claude-agent-sdk-Ddgx5BIQ.js} +212 -65
- package/dist/src/{claude-agent-sdk-BRq0bbIK.cjs → claude-agent-sdk-n2XcEclh.cjs} +219 -71
- package/dist/src/cloud-DiWbUiVP.js +3 -0
- package/dist/src/{cloud-Da0bofJd.js → cloud-DqF5N1aJ.js} +2 -2
- package/dist/src/{cloudflare-ai-CXC4b1EU.js → cloudflare-ai-BGamMotN.js} +4 -4
- package/dist/src/{cloudflare-ai-DGOwgexC.js → cloudflare-ai-BwW8W-w7.js} +4 -4
- package/dist/src/{cloudflare-ai-DJv5qnyb.cjs → cloudflare-ai-DCRGnsyL.cjs} +6 -6
- package/dist/src/{cloudflare-ai-CyBoIs1Q.js → cloudflare-ai-sD26nP6V.js} +4 -4
- package/dist/src/{cloudflare-gateway-TJkVrZlB.js → cloudflare-gateway-2lnOT4qM.js} +3 -3
- package/dist/src/{cloudflare-gateway-D-dnkzCF.js → cloudflare-gateway-B1-8KNCt.js} +3 -3
- package/dist/src/{cloudflare-gateway-DKVjkDav.cjs → cloudflare-gateway-CCC1DFrC.cjs} +5 -5
- package/dist/src/{cloudflare-gateway-1sAoOyft.js → cloudflare-gateway-DOghiU6r.js} +3 -3
- package/dist/src/{codex-app-server-CCLjqCh9.js → codex-app-server-BWeWamEb.js} +19 -4
- package/dist/src/{codex-app-server-CCe0TiDc.js → codex-app-server-DyQB1P0p.js} +20 -5
- package/dist/src/{codex-app-server-VMRnjZ68.cjs → codex-app-server-R9u_G7W9.cjs} +27 -11
- package/dist/src/{codex-app-server-CPW1LFwh.js → codex-app-server-ZQRJSJjU.js} +20 -5
- package/dist/src/{codex-sdk-Bzb_TqX9.js → codex-sdk-B62H0fe7.js} +16 -5
- package/dist/src/{codex-sdk-Bd8UbO9q.cjs → codex-sdk-BRPUvJG8.cjs} +31 -12
- package/dist/src/{codex-sdk-BgEFQ70r.js → codex-sdk-Dio1zJBS.js} +18 -7
- package/dist/src/codex-sdk-DxukZs_K.js +3 -0
- package/dist/src/{codex-sdk-DfvDTN33.js → codex-sdk-iEmW1eS2.js} +18 -7
- package/dist/src/{cometapi-B5ImDlSm.js → cometapi--hh7dESS.js} +7 -7
- package/dist/src/{cometapi-CC7hWxmX.js → cometapi-C7yWNGqt.js} +7 -7
- package/dist/src/{cometapi-CCbpHkuF.js → cometapi-CSIi16a0.js} +7 -7
- package/dist/src/{cometapi-BgAkuYCw.cjs → cometapi-sZgBZtbU.cjs} +8 -8
- package/dist/src/{completion-DtQ72Bm3.cjs → completion-CWtqdn3z.cjs} +6 -6
- package/dist/src/{completion-Vq_ad618.js → completion-DT8cxo9T.js} +4 -4
- package/dist/src/{completion-2iuYVxwi.js → completion-DUScduXp.js} +5 -5
- package/dist/src/{completion-CrD6MQ93.js → completion-D_2IOAoS.js} +5 -5
- package/dist/src/constants-BjJV0cRr.js +6 -0
- package/dist/src/constants-DH5XYLKZ.js +7 -0
- package/dist/src/constants-DZGEFLsu.js +6 -0
- package/dist/src/constants-a2kYssQk.cjs +11 -0
- package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
- package/dist/src/{createHash-Un4Q_huE.js → createHash-CGVzWdjj.js} +1 -1
- package/dist/src/{createHash-VvBIc-AW.cjs → createHash-CSiqnK5P.cjs} +2 -2
- package/dist/src/{createHash-DPpsZgFF.js → createHash-CgRvs4Fn.js} +1 -1
- package/dist/src/crescendo-B41TwUHM.js +722 -0
- package/dist/src/crescendo-Bfic7KC4.js +724 -0
- package/dist/src/crescendo-DXFB7rHP.cjs +725 -0
- package/dist/src/crescendo-DvvYxMLA.js +723 -0
- package/dist/src/custom-BdzuqFTN.js +619 -0
- package/dist/src/custom-Cf5Q6r-P.js +618 -0
- package/dist/src/custom-DLgufezC.js +620 -0
- package/dist/src/custom-LEXHCRe3.cjs +621 -0
- package/dist/src/{docker--3qzPa-6.js → docker-BOSO_6hK.js} +5 -5
- package/dist/src/{docker-D3AY-5F5.cjs → docker-D0h2vFrc.cjs} +6 -6
- package/dist/src/{docker-DCsCDvwM.js → docker-D2TWGyTP.js} +5 -5
- package/dist/src/{docker-Dorv4_Dg.js → docker-Vj_4_cPg.js} +5 -5
- package/dist/src/{embedding-BXhN5lCH.cjs → embedding-BQIApR18.cjs} +6 -6
- package/dist/src/{embedding-ChS1ivFS.js → embedding-CStK0TV6.js} +5 -5
- package/dist/src/{embedding-DNRvZwRN.js → embedding-CU78FMnw.js} +5 -5
- package/dist/src/{embedding-D_bI4NDq.js → embedding-CV8lmCnU.js} +4 -4
- package/dist/src/{errors-DFHe4L-n.js → errors-9PcUL8BC.js} +1 -1
- package/dist/src/{esm-B_rGuPTo.cjs → esm-BIKakvNa.cjs} +8 -7
- package/dist/src/{esm-BRkfNsYs.js → esm-BTK1W7lG.js} +1 -1
- package/dist/src/{esm-BX8fwlAO.js → esm-Bexx2PFc.js} +1 -1
- package/dist/src/{eval-DJ_4A-tr.js → eval-B3BaNBbO.js} +19 -19
- package/dist/src/{eval-BQPLBJbw.js → eval-DfR9885C.js} +1 -1
- package/dist/src/evalResult-BtZSUgQv.js +3 -0
- package/dist/src/{evalResult-D6P5I5il.js → evalResult-CcSqNl_Y.js} +17 -10
- package/dist/src/{evalResult-Cx-8OWkb.cjs → evalResult-DHXs-9TL.cjs} +29 -11
- package/dist/src/{evalResult-pSvGWFMo.js → evalResult-PGqEbasb.js} +18 -11
- package/dist/src/evaluator-B9LGbKI8.js +3 -0
- package/dist/src/{evaluator-D-UIbbYq.js → evaluator-n_dEb00o.js} +258 -132
- package/dist/src/evaluatorHelpers-CrRObe2z.js +510 -0
- package/dist/src/evaluatorHelpers-D06I9WFL.cjs +537 -0
- package/dist/src/evaluatorHelpers-D1_kwvyp.js +511 -0
- package/dist/src/{extractor-DxyiFhPk.js → extractor-BVkZtk4R.js} +5 -5
- package/dist/src/{extractor-BM3jRERL.js → extractor-D3Fv_Tdh.js} +5 -5
- package/dist/src/{extractor-YlZbUMsL.js → extractor-Jp53vs-6.js} +5 -5
- package/dist/src/{extractor-Dxr2J_wK.cjs → extractor-bV_NOoaz.cjs} +6 -6
- package/dist/src/{fetch-Y5qX_kST.js → fetch-BSSAcMxf.js} +90 -26
- package/dist/src/fetch-BodQTrMU.js +3 -0
- package/dist/src/{fetch-NuqXW1Xb.cjs → fetch-Cfm4EuOB.cjs} +115 -32
- package/dist/src/{fetch-B6ch2nU2.js → fetch-Cpf1U1nO.js} +86 -26
- package/dist/src/{fetch-D9xxyC1p.js → fetch-Doks14zQ.js} +90 -26
- package/dist/src/{fileExtensions-D9h-8Wxg.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
- package/dist/src/{fileExtensions-BGh-W-HT.js → fileExtensions-CXRfY3Ss.js} +12 -2
- package/dist/src/{fileExtensions-DysCsxNG.js → fileExtensions-D4GCJ67J.js} +12 -2
- package/dist/src/{formatDuration-Ch4A7G3o.js → formatDuration-CMVNrYvE.js} +1 -1
- package/dist/src/{genaiTracer-BokHC-MW.cjs → genaiTracer-14nugQQx.cjs} +14 -2
- package/dist/src/{genaiTracer-C3ZPQU60.js → genaiTracer-BPVvltoW.js} +2 -2
- package/dist/src/{genaiTracer-DxODqT9e.js → genaiTracer-D18lYzhB.js} +2 -2
- package/dist/src/{genaiTracer-CFny3gOy.js → genaiTracer-jJKYsnjc.js} +2 -2
- package/dist/src/goat-Ba7Gznzq.js +467 -0
- package/dist/src/goat-CJngS-WU.js +468 -0
- package/dist/src/goat-CwsbfQeu.js +466 -0
- package/dist/src/goat-DOMbozoX.cjs +470 -0
- package/dist/src/graders-B3D7kCcD.js +3 -0
- package/dist/src/{graders-CgPn32yp.js → graders-BQt1BaQe.js} +1019 -86
- package/dist/src/{graders-Bw1wk_21.cjs → graders-CBQ2s6gz.cjs} +1087 -130
- package/dist/src/{graders-CwrbifOo.js → graders-DaRU98zs.js} +1022 -84
- package/dist/src/{graders-BoUqsCEm.js → graders-KXzjnIim.js} +1024 -86
- package/dist/src/hydra-BU6GjYoQ.js +560 -0
- package/dist/src/hydra-BmXHxlyl.js +559 -0
- package/dist/src/hydra-CR0KyYDb.js +561 -0
- package/dist/src/hydra-RO9jBks7.cjs +560 -0
- package/dist/src/{image-BeWaInPF.js → image-BBmZdKO3.js} +3 -3
- package/dist/src/{image-qjO6FWPs.js → image-B_PFG7IG.js} +3 -3
- package/dist/src/image-BtODOZjh.js +442 -0
- package/dist/src/image-CYuNJIqd.js +442 -0
- package/dist/src/{image-D10dNAav.cjs → image-E00WFZkq.cjs} +4 -4
- package/dist/src/image-HK2Cfqb1.cjs +465 -0
- package/dist/src/{image-Dr_3I3nK.js → image-LGj8dTcr.js} +3 -3
- package/dist/src/image-YMKejC0r.js +443 -0
- package/dist/src/index.cjs +711 -339
- package/dist/src/index.d.cts +3159 -1611
- package/dist/src/index.d.ts +3158 -1610
- package/dist/src/index.js +605 -249
- package/dist/src/indirectWebPwn-B80dLlFC.js +260 -0
- package/dist/src/indirectWebPwn-BMTXXznx.js +386 -0
- package/dist/src/indirectWebPwn-BZFPV7Q9.js +385 -0
- package/dist/src/indirectWebPwn-BaEQEOIO.cjs +260 -0
- package/dist/src/indirectWebPwn-BzpyMnFS.js +259 -0
- package/dist/src/indirectWebPwn-CiWB-vVH.js +385 -0
- package/dist/src/indirectWebPwn-D7NA9Nsv.cjs +397 -0
- package/dist/src/indirectWebPwn-o_bEFMjP.js +259 -0
- package/dist/src/inputVariables-B0qUChbV.js +467 -0
- package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
- package/dist/src/inputVariables-DXFdi7AI.js +468 -0
- package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
- package/dist/src/{interactiveCheck-CCICw2cy.js → interactiveCheck-C4QlIuoR.js} +1 -1
- package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
- package/dist/src/iterative-B-l0syBV.js +501 -0
- package/dist/src/iterative-BACUeCCz.cjs +503 -0
- package/dist/src/iterative-CVwoExo8.js +502 -0
- package/dist/src/iterative-QDrGSyss.js +500 -0
- package/dist/src/iterativeImage-BQg2OwA6.js +413 -0
- package/dist/src/iterativeImage-Bwn0fM75.js +413 -0
- package/dist/src/iterativeImage-CcgVyASo.cjs +415 -0
- package/dist/src/iterativeImage-D_UbQXg4.js +414 -0
- package/dist/src/iterativeMeta-CIu-CHRS.js +405 -0
- package/dist/src/iterativeMeta-CN8CNjFA.js +406 -0
- package/dist/src/iterativeMeta-DN6BTjpq.js +404 -0
- package/dist/src/iterativeMeta-DlqY3BsS.cjs +405 -0
- package/dist/src/iterativeTree-CJ8a8G9T.js +820 -0
- package/dist/src/iterativeTree-DcuFXnjL.js +819 -0
- package/dist/src/iterativeTree-FrDDYAN0.js +818 -0
- package/dist/src/iterativeTree-LOgAi0nU.cjs +821 -0
- package/dist/src/{knowledgeBase-C8qOo26M.cjs → knowledgeBase-CdbcGBZF.cjs} +25 -11
- package/dist/src/{knowledgeBase-BBETc5-S.js → knowledgeBase-CjOXp6Lr.js} +23 -9
- package/dist/src/{knowledgeBase-Dr3Kib7F.js → knowledgeBase-DxAq4n4z.js} +24 -10
- package/dist/src/{knowledgeBase-CzAi2rUI.js → knowledgeBase-o_wTLzrt.js} +24 -10
- package/dist/src/{litellm-DRc4qWfc.js → litellm-B2gHwya_.js} +4 -4
- package/dist/src/{litellm-CaUmV7Mk.cjs → litellm-CPpdlO7n.cjs} +5 -5
- package/dist/src/{litellm-BLSiANhk.js → litellm-CYfgxLrM.js} +4 -4
- package/dist/src/{litellm-DQGo_juI.js → litellm-ojWBKU3C.js} +4 -4
- package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
- package/dist/src/{luma-ray-if-Ml4R9.cjs → luma-ray-BCCO9XXG.cjs} +9 -8
- package/dist/src/{luma-ray-B-tNZzqW.js → luma-ray-BPrdihAb.js} +5 -5
- package/dist/src/{luma-ray-CtS3OlGq.js → luma-ray-DP5N79lB.js} +5 -5
- package/dist/src/{luma-ray-PJJgUjOc.js → luma-ray-DTDyoAlM.js} +5 -5
- package/dist/src/main.js +727 -234
- package/dist/src/memoryPoisoning-B6N3us35.cjs +106 -0
- package/dist/src/memoryPoisoning-Bc_BK_k2.js +106 -0
- package/dist/src/memoryPoisoning-D375zwSX.js +107 -0
- package/dist/src/memoryPoisoning-DJA0YjJT.js +106 -0
- package/dist/src/{messages-CewuNcNS.js → messages-Bg29Nbit.js} +17 -9
- package/dist/src/{messages-BnsVHUnm.cjs → messages-BrZEnHsV.cjs} +24 -15
- package/dist/src/{messages-CI69Lasb.js → messages-CBulRaud.js} +18 -10
- package/dist/src/{messages-B9dSjrNf.js → messages-K9A8RxBM.js} +18 -10
- package/dist/src/{meteor-CeGo0Lu2.js → meteor--TZYICTI.js} +1 -1
- package/dist/src/{meteor-BBGcGeCa.cjs → meteor-CR226f7Z.cjs} +2 -2
- package/dist/src/{meteor-Wc_aUVvu.js → meteor-Cl_yd7rJ.js} +1 -1
- package/dist/src/{meteor-BKTM-7KS.js → meteor-Dce-_zGQ.js} +1 -1
- package/dist/src/mischievousUser-BDLwSGN0.js +46 -0
- package/dist/src/mischievousUser-Blx-OtT3.js +47 -0
- package/dist/src/mischievousUser-CHuTTvBg.js +46 -0
- package/dist/src/mischievousUser-CSUrH3fq.cjs +46 -0
- package/dist/src/{modelslab-zpz9JcK0.js → modelslab-BjEk7yCP.js} +6 -6
- package/dist/src/{modelslab-BCLOtfek.js → modelslab-CBCrdIBc.js} +6 -6
- package/dist/src/{modelslab-D73OnKSx.js → modelslab-CrGpXuhv.js} +6 -6
- package/dist/src/{modelslab-BkapYJhh.cjs → modelslab-Cvh0klQx.cjs} +7 -7
- package/dist/src/{nova-reel-B8F_TK5w.js → nova-reel-CUDDZcSA.js} +5 -5
- package/dist/src/{nova-reel-Bx0NFV2f.js → nova-reel-CyDESu5J.js} +5 -5
- package/dist/src/{nova-reel-DkT7tnoB.cjs → nova-reel-DH_Ksu6X.cjs} +9 -8
- package/dist/src/{nova-reel-CNGJTLtG.js → nova-reel-YQAqUYJY.js} +5 -5
- package/dist/src/{nova-sonic-BeTRaFOh.js → nova-sonic-BVFFB7JZ.js} +2 -2
- package/dist/src/{nova-sonic-YT426juD.cjs → nova-sonic-Bg3cxMMu.cjs} +5 -4
- package/dist/src/{nova-sonic-CL7Zqv0G.js → nova-sonic-BhmnRGyh.js} +3 -3
- package/dist/src/{nova-sonic-BaXRN1cr.js → nova-sonic-DxmK95c1.js} +3 -3
- package/dist/src/{openai-Cy1XLs0c.cjs → openai-C3uXv8wS.cjs} +2 -2
- package/dist/src/{openai-BT-JvDse.js → openai-CJrsh9n4.js} +1 -1
- package/dist/src/{openai-D4fxGvRx.js → openai-zgwBb4Ff.js} +1 -1
- package/dist/src/{openclaw-DUBZP3GL.cjs → openclaw-CHQaZi_-.cjs} +17 -15
- package/dist/src/{openclaw-DA8U4DsD.js → openclaw-CWOm2eOr.js} +9 -8
- package/dist/src/{openclaw-DObVgpjC.js → openclaw-Cdk9JKfY.js} +9 -8
- package/dist/src/{openclaw-Bq7RVR3k.js → openclaw-DhF8rUpI.js} +9 -8
- package/dist/src/{opencode-sdk-BB40Wir1.js → opencode-sdk-BRjiPV-g.js} +38 -3
- package/dist/src/{opencode-sdk-CeqiOcOU.cjs → opencode-sdk-CPFMw0ed.cjs} +45 -9
- package/dist/src/{opencode-sdk-BM1UAIv1.js → opencode-sdk-CaSOCsBA.js} +39 -4
- package/dist/src/{opencode-sdk-ChdK7F7z.js → opencode-sdk-CqkyG8De.js} +39 -4
- package/dist/src/{otlpReceiver-UYMQx3sy.js → otlpReceiver--gTpSagc.js} +119 -3
- package/dist/src/{otlpReceiver-C6thJRXi.js → otlpReceiver-B2eaKC8C.js} +118 -2
- package/dist/src/{otlpReceiver-CcdIikOu.js → otlpReceiver-BXjcRqAM.js} +119 -3
- package/dist/src/{otlpReceiver-DNSQj6bf.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
- package/dist/src/packageParser--MWTSrPW.js +36 -0
- package/dist/src/packageParser-CgE-ziRo.js +35 -0
- package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
- package/dist/src/packageParser-hwwSGnAZ.js +35 -0
- package/dist/src/processShim-BBxt7LKO.js +95 -0
- package/dist/src/processShim-BcGzU8fY.js +94 -0
- package/dist/src/processShim-C_z3aRvF.js +94 -0
- package/dist/src/processShim-DSY9BV2T.cjs +98 -0
- package/dist/src/promptLength-0qIHyhA5.js +71 -0
- package/dist/src/promptLength-4X-Wd8PG.js +72 -0
- package/dist/src/promptLength-B9nZEfO6.js +71 -0
- package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
- package/dist/src/promptfoo-BU4_0J85.js +238 -0
- package/dist/src/promptfoo-CReYAtfb.js +237 -0
- package/dist/src/promptfoo-ClChwT74.cjs +292 -0
- package/dist/src/promptfoo-CqEpj6Sr.js +237 -0
- package/dist/src/prompts-BYMtqPCw.js +259 -0
- package/dist/src/prompts-C-bqE1Yp.js +260 -0
- package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
- package/dist/src/prompts-DHhQsANy.js +259 -0
- package/dist/src/prompts-D_QpZ2Dm.js +271 -0
- package/dist/src/prompts-hNvWBD3z.cjs +284 -0
- package/dist/src/prompts-huDVH2CI.js +270 -0
- package/dist/src/prompts-p78Hul5i.cjs +289 -0
- package/dist/src/{providerRegistry-BESeALrr.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
- package/dist/src/{providerRegistry-DoACwqhD.js → providerRegistry-DHcFiVWX.js} +1 -1
- package/dist/src/{providerRegistry-PMsleEzs.js → providerRegistry-ReCd0sFa.js} +1 -1
- package/dist/src/{providers-DT-GtF2t.js → providers-B7TyByfj.js} +789 -11925
- package/dist/src/{providers-CJh7iriU.js → providers-BGc7tDtQ.js} +796 -11872
- package/dist/src/{providers-Ctcc592x.js → providers-CSOp-bCm.js} +1 -1
- package/dist/src/{providers-eDShy16E.cjs → providers-V6RBuieY.cjs} +837 -12138
- package/dist/src/{providers-DRrerKra.js → providers-iH3Sw1yo.js} +851 -11938
- package/dist/src/{pythonUtils-C4tltmIn.js → pythonUtils-CLCgQ9tt.js} +1 -1
- package/dist/src/{pythonUtils-DNqbnRdx.js → pythonUtils-CgYxeSmO.js} +2 -2
- package/dist/src/{pythonUtils-CoLaCwNY.cjs → pythonUtils-Cokhluq3.cjs} +7 -6
- package/dist/src/{pythonUtils-DMO68Jg7.js → pythonUtils-D0BYebvX.js} +2 -2
- package/dist/src/{quiverai-CPKhWgaT.js → quiverai-58BtRRet.js} +3 -3
- package/dist/src/{quiverai-Bk1KrvL6.js → quiverai-C1dYu5MW.js} +3 -3
- package/dist/src/{quiverai-BSS9a7wV.js → quiverai-CNMIpZQg.js} +3 -3
- package/dist/src/{quiverai-Bpx6MZ7T.cjs → quiverai-fmSfU43k.cjs} +4 -4
- package/dist/src/registry-6Jw6ebor.cjs +124 -0
- package/dist/src/registry-BTGk2ZkB.js +124 -0
- package/dist/src/registry-BTNqmP5o.js +125 -0
- package/dist/src/registry-NGnOG2xa.js +124 -0
- package/dist/src/{server-gyd6d4Hc.js → remoteGeneration--D6WjzUm.js} +15 -108
- package/dist/src/{server-BEECpeGG.cjs → remoteGeneration-BpIYlb_O.cjs} +30 -119
- package/dist/src/{server-ByxbqAcQ.js → remoteGeneration-CJC3E0aW.js} +15 -147
- package/dist/src/remoteGeneration-D6UjE2JT.js +218 -0
- package/dist/src/render-BNTrbmBw.cjs +384 -0
- package/dist/src/render-CSP99NLm.js +348 -0
- package/dist/src/render-DFfDeYUK.js +347 -0
- package/dist/src/{render-nj-UaPdn.js → render-DznWrxGO.js} +2 -2
- package/dist/src/render-_6ur1fhE.js +347 -0
- package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
- package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
- package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
- package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
- package/dist/src/{responses-1ztiVYsx.js → responses-5Gf5HNOi.js} +11 -7
- package/dist/src/{responses-BiaBguAu.js → responses-BVi7xIdv.js} +13 -9
- package/dist/src/{responses-CF-ayauu.cjs → responses-CUARGrhY.cjs} +16 -11
- package/dist/src/{responses-B8haB-mD.js → responses-CrmWv6iz.js} +13 -9
- package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
- package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
- package/dist/src/{rubyUtils-CIQFnVz4.js → rubyUtils-CXlFM2rR.js} +2 -2
- package/dist/src/{rubyUtils-BI0p46eZ.js → rubyUtils-CnlW8AYb.js} +2 -2
- package/dist/src/{rubyUtils-DoifqkiA.cjs → rubyUtils-CqUWBZAt.cjs} +16 -26
- package/dist/src/{rubyUtils-DGnoCYL2.js → rubyUtils-DdGojpfv.js} +1 -1
- package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
- package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
- package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
- package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
- package/dist/src/{sagemaker-ljtY12VM.cjs → sagemaker-BeVTKfrv.cjs} +65 -53
- package/dist/src/{sagemaker-BDLeW29y.js → sagemaker-BwbV5U7_.js} +61 -50
- package/dist/src/{sagemaker-C5T60MKf.js → sagemaker-ClAZ6Qwc.js} +61 -50
- package/dist/src/{sagemaker-ClS_NB07.js → sagemaker-DY2qrOpq.js} +61 -50
- package/dist/src/{scanner-nOCWNIXa.js → scanner-BS-iFIp3.js} +6 -6
- package/dist/src/server/index.js +4115 -420
- package/dist/src/server-BHOEL8p8.cjs +126 -0
- package/dist/src/server-CbiJppij.js +107 -0
- package/dist/src/server-D18AAlAc.js +3 -0
- package/dist/src/server-DLYjSFm2.js +182 -0
- package/dist/src/server-JQYD_Nws.js +146 -0
- package/dist/src/{fileExtensions-8CjoL7vB.js → shared-BoG7qLMv.js} +12 -2
- package/dist/src/shared-CRq0gGVf.js +1334 -0
- package/dist/src/shared-CSIGeGLl.js +1334 -0
- package/dist/src/shared-DNvim54U.js +1335 -0
- package/dist/src/shared-aHWko3P1.cjs +1436 -0
- package/dist/src/{signal-DTtUuU3l.js → signal-CSurUUyV.js} +2 -2
- package/dist/src/simulatedUser-C7sOFSF6.js +222 -0
- package/dist/src/simulatedUser-DH_7RzEQ.js +222 -0
- package/dist/src/simulatedUser-lgMMmniD.js +223 -0
- package/dist/src/simulatedUser-mnCUS9Bm.cjs +227 -0
- package/dist/src/{slack-Bamy_7te.js → slack-Bapo-7_8.js} +1 -1
- package/dist/src/{slack-BLlsDpfG.cjs → slack-DMC1QVEg.cjs} +3 -2
- package/dist/src/{slack-BPYLQLgb.js → slack-DTEFhrMn.js} +1 -1
- package/dist/src/{slack-4zZX1OKP.js → slack-k-_CP84Q.js} +1 -1
- package/dist/src/storage-95htjpLs.js +834 -0
- package/dist/src/storage-A4WnAeN3.cjs +911 -0
- package/dist/src/storage-B2Ql_oq4.js +822 -0
- package/dist/src/storage-EKVWZBNY.js +875 -0
- package/dist/src/{store-2K0kDi80.cjs → store-B2NDDooM.cjs} +60 -24
- package/dist/src/{store-CPh25336.js → store-DKd5592Q.js} +50 -19
- package/dist/src/{store-BPkzEyFM.js → store-HpopRVzl.js} +50 -19
- package/dist/src/store-IbiRIF3k.js +3 -0
- package/dist/src/strategies-CBI1brSy.js +2333 -0
- package/dist/src/strategies-CCcnEbFO.cjs +2360 -0
- package/dist/src/strategies-CD1gHeeQ.js +2331 -0
- package/dist/src/{tables-WgdUZ8Ck.js → tables-CRSXQ2Ke.js} +2 -2
- package/dist/src/{tables-BMSOS2Gg.js → tables-CxjU7bBd.js} +2 -2
- package/dist/src/{tables-CXbaZ9y1.cjs → tables-DBIJU0WE.cjs} +6 -5
- package/dist/src/{tables-NlvH23ky.js → tables-DafUHOeh.js} +2 -2
- package/dist/src/telemetry-BUm_krVX.js +3 -0
- package/dist/src/{telemetry--iqaGyaS.js → telemetry-BbpmrenM.js} +4 -4
- package/dist/src/{telemetry-CgdVGV8N.js → telemetry-C4bX-6Sr.js} +4 -4
- package/dist/src/{telemetry-CEQxGnMZ.cjs → telemetry-C_ImlCOk.cjs} +15 -9
- package/dist/src/{telemetry-DWdGHvEf.js → telemetry-DOE567Wj.js} +4 -4
- package/dist/src/{text-DDQP0tuQ.js → text-CZr46tp_.js} +1 -1
- package/dist/src/{text-D4lz-Jg_.js → text-Db-Wt2u2.js} +1 -1
- package/dist/src/{text-NWvfMfkF.js → text-DwYK5EBn.js} +1 -1
- package/dist/src/{text-BiNME7QG.cjs → text-nywWsRBM.cjs} +1 -1
- package/dist/src/{tokenUsageUtils-2wIvAhB3.js → tokenUsageUtils-CDet74yk.js} +1 -1
- package/dist/src/{tokenUsageUtils-4c780gFd.js → tokenUsageUtils-CmnQ0G2m.js} +1 -1
- package/dist/src/{tokenUsageUtils-C9odhsbW.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
- package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
- package/dist/src/toolAttributes-COVgDrBG.js +87 -0
- package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
- package/dist/src/tracingOptions-BOP1FsRt.js +220 -0
- package/dist/src/tracingOptions-BvmDa_jH.js +219 -0
- package/dist/src/tracingOptions-DFBoE8O0.cjs +249 -0
- package/dist/src/tracingOptions-xhjOg2b1.js +221 -0
- package/dist/src/{transcription-D7Q0vJsh.js → transcription-BOXDoehT.js} +4 -4
- package/dist/src/{transcription-Bm2emLmJ.js → transcription-CpVdKc4P.js} +5 -5
- package/dist/src/{transcription-CZ4LG5hQ.cjs → transcription-D8kkPXg_.cjs} +9 -8
- package/dist/src/{transcription-84t4ALo2.js → transcription-Z94eV9LR.js} +5 -5
- package/dist/src/transform-BnSTnFlp.js +187 -0
- package/dist/src/transform-BnSXWmU_2.cjs +221 -0
- package/dist/src/{transform-DtooZqYY.js → transform-BufxPIQL.js} +8 -8
- package/dist/src/transform-CGt7Kt3y2.js +186 -0
- package/dist/src/transform-CrPGTsij.js +186 -0
- package/dist/src/{transform-Dg4LcO1Y.cjs → transform-DJkt81VY.cjs} +12 -11
- package/dist/src/{transform-B-b6Cq-q.js → transform-DtTfiGoh.js} +8 -8
- package/dist/src/{transform-_DpNB4qp.js → transform-Wp6s_5QE.js} +8 -8
- package/dist/src/{transformersAvailability-lvCCvuPT.js → transformersAvailability-0ThtPved.js} +1 -1
- package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
- package/dist/src/{transformersAvailability-rJGPccjr.js → transformersAvailability-BvyU9vDD.js} +1 -1
- package/dist/src/{transformersAvailability-B22swDxr.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
- package/dist/src/{types-BVH9hjgW.js → types-BFevViUY.js} +113 -19
- package/dist/src/{types-BDjGOq4E.js → types-BJQBBPTP.js} +113 -19
- package/dist/src/{types-CgG2rKiW.cjs → types-CxJvaY2S.cjs} +211 -28
- package/dist/src/{types-DNRZVOue.js → types-D6glLbdF.js} +125 -26
- package/dist/src/{util-Dpmm_dAI.cjs → util-BHCAeuXx.cjs} +33 -7
- package/dist/src/{util-DFPeFkiV.js → util-CMrHV35u.js} +28 -8
- package/dist/src/{util-DvpHnLt0.cjs → util-COnzevXE.cjs} +29 -21
- package/dist/src/{util-BlFVL0UF.js → util-CYev3d-r.js} +22 -7
- package/dist/src/util-DGqkTb2-.js +327 -0
- package/dist/src/util-DNtUsus_.cjs +386 -0
- package/dist/src/{util-Dub0f_ej.js → util-DRfqa4xz.js} +17 -10
- package/dist/src/{util-BVXcTwXu.js → util-DTq3jq2z.js} +28 -8
- package/dist/src/{util-C-kmRosx.js → util-DeY58psG.js} +22 -7
- package/dist/src/util-DpV6KT5i.js +327 -0
- package/dist/src/{util-3pBZZb_H.js → util-DwNJzqOV.js} +45 -10
- package/dist/src/util-ETfU_sS9.js +328 -0
- package/dist/src/{util-A5_ZsQUn.cjs → util-NYQvo1C7.cjs} +25 -9
- package/dist/src/{util-DN0-b81k.js → util-X4KQgyVD.js} +28 -8
- package/dist/src/{util-BQOCAHQC.js → util-jZRrXe1P.js} +46 -11
- package/dist/src/{util-B9CNhyac.js → util-o2Qg5rZv.js} +22 -7
- package/dist/src/{utils-BUMN8orw.js → utils-B0lzitHZ.js} +2 -2
- package/dist/src/{utils-kt7lv30R.js → utils-BFOh20Gb.js} +2 -2
- package/dist/src/{utils-o8S5huU2.js → utils-BGY69tk_.js} +2 -2
- package/dist/src/{utils-DkVeShIB.cjs → utils-Ve6kuJsa.cjs} +3 -3
- package/dist/src/{version-CbuBKu2U.js → version-CHR-EFec.js} +2 -2
- package/dist/src/{version-CbpiUINz.js → version-F0YDgb7J.js} +2 -2
- package/dist/src/{version-D9zu9FWB.cjs → version-VzUqOBZk.cjs} +2 -2
- package/dist/src/{version-0frU0UTr.js → version-qVEN5qCm.js} +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +49 -23
- package/dist/src/app/assets/Report-vjzrbgce.js +0 -1
- package/dist/src/app/assets/index-B3NQ8HTd.js +0 -385
- package/dist/src/app/assets/index-Cli2yAXv.css +0 -1
- package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
- package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
- package/dist/src/cache-BRkhlH3k.cjs +0 -3
- package/dist/src/cache-BlC6aeJ0.js +0 -3
- package/dist/src/cloud-CoD5OacT.js +0 -3
- package/dist/src/codex-sdk-1jm_qPHf.js +0 -3
- package/dist/src/codex-sdk-Danroptg.cjs +0 -2
- package/dist/src/evalResult-BBJAHAtw.cjs +0 -2
- package/dist/src/evalResult-BBK58h2B.js +0 -3
- package/dist/src/evalResult-spPqh1G_.js +0 -2
- package/dist/src/evaluator-DgLKaZk8.js +0 -3
- package/dist/src/fetch-8viavNv8.js +0 -3
- package/dist/src/graders-C84JI-m5.js +0 -2
- package/dist/src/graders-CBbd0K0Q.cjs +0 -2
- package/dist/src/graders-CbQqpHSN.js +0 -3
- package/dist/src/graders-DS42d3ZG.js +0 -2
- package/dist/src/image-BmilRNqO.js +0 -258
- package/dist/src/image-CxJoa3aW.cjs +0 -280
- package/dist/src/image-DsGRlkh7.js +0 -257
- package/dist/src/image-a_SGUobh.js +0 -257
- package/dist/src/providers-BuyzKt7C.js +0 -2
- package/dist/src/providers-C7lNVBjX.cjs +0 -3
- package/dist/src/providers-CCE2COJi2.js +0 -2
- package/dist/src/render-7uNJ2V14.js +0 -135
- package/dist/src/render-DlscvAUJ.js +0 -135
- package/dist/src/render-eui5p5mL.js +0 -136
- package/dist/src/render-tG6ir9_g.cjs +0 -165
- package/dist/src/rubyUtils-4hjGxvju.js +0 -3
- package/dist/src/rubyUtils-CO-tuszQ.cjs +0 -2
- package/dist/src/server-ByiF3qlg.js +0 -386
- package/dist/src/server-C0XKRNB_.cjs +0 -2
- package/dist/src/server-C_15p79-.js +0 -3
- package/dist/src/store-2OXm_eBY.js +0 -240
- package/dist/src/store-BELqNwvz.js +0 -3
- package/dist/src/store-uQZ4AjPe.cjs +0 -2
- package/dist/src/telemetry-DjNoC_n3.cjs +0 -2
- package/dist/src/telemetry-ZdPZc0fm.js +0 -3
- package/dist/src/transform-BQt0BeAW.js +0 -3
- package/dist/src/transform-Bq5oqC0s.cjs +0 -2
- package/dist/src/transform-C9izGX54.cjs +0 -228
- package/dist/src/transform-CwbAZ84V.js +0 -216
- package/dist/src/transform-DzCF-wqV.js +0 -213
- package/dist/src/transform-eGiUAv86.js +0 -216
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const require_logger = require("./logger-cfNpzI4o.cjs");
|
|
2
|
+
//#region src/redteam/shared/promptLength.ts
|
|
3
|
+
const MAX_CHARS_PER_MESSAGE_MODIFIER_KEY = "maxCharsPerMessage";
|
|
4
|
+
function isRecord(value) {
|
|
5
|
+
return typeof value === "object" && value !== null;
|
|
6
|
+
}
|
|
7
|
+
function getMaxCharsPerMessage(limit) {
|
|
8
|
+
const maxCharsPerMessage = limit ?? require_logger.state.config?.redteam?.maxCharsPerMessage;
|
|
9
|
+
if (typeof maxCharsPerMessage !== "number" || !Number.isInteger(maxCharsPerMessage) || maxCharsPerMessage <= 0) return;
|
|
10
|
+
return maxCharsPerMessage;
|
|
11
|
+
}
|
|
12
|
+
function parseChatMessages(prompt) {
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(prompt);
|
|
15
|
+
if (Array.isArray(parsed) && parsed.every((item) => isRecord(item) && typeof item.role === "string" && typeof item.content === "string")) return parsed.map((message, index) => ({
|
|
16
|
+
content: message.content,
|
|
17
|
+
path: `[${index}].content`,
|
|
18
|
+
role: message.role
|
|
19
|
+
}));
|
|
20
|
+
if (isRecord(parsed) && parsed._promptfoo_audio_hybrid === true && (parsed.history === void 0 || Array.isArray(parsed.history)) && isRecord(parsed.currentTurn) && typeof parsed.currentTurn.role === "string" && typeof parsed.currentTurn.transcript === "string" && (parsed.history === void 0 || parsed.history.every((item) => isRecord(item) && typeof item.role === "string" && typeof item.content === "string"))) return [...(parsed.history ?? []).map((message, index) => ({
|
|
21
|
+
content: message.content,
|
|
22
|
+
path: `history[${index}].content`,
|
|
23
|
+
role: message.role
|
|
24
|
+
})), {
|
|
25
|
+
content: parsed.currentTurn.transcript,
|
|
26
|
+
path: "currentTurn.transcript",
|
|
27
|
+
role: parsed.currentTurn.role
|
|
28
|
+
}];
|
|
29
|
+
} catch {}
|
|
30
|
+
}
|
|
31
|
+
function getPromptLengthViolation(prompt, limit) {
|
|
32
|
+
const maxCharsPerMessage = getMaxCharsPerMessage(limit);
|
|
33
|
+
if (!maxCharsPerMessage) return;
|
|
34
|
+
const messages = parseChatMessages(prompt);
|
|
35
|
+
if (messages) {
|
|
36
|
+
const oversizedMessage = messages.find((message) => message.role === "user" && message.content.length > maxCharsPerMessage);
|
|
37
|
+
return oversizedMessage ? {
|
|
38
|
+
length: oversizedMessage.content.length,
|
|
39
|
+
limit: maxCharsPerMessage,
|
|
40
|
+
path: oversizedMessage.path
|
|
41
|
+
} : void 0;
|
|
42
|
+
}
|
|
43
|
+
if (prompt.length <= maxCharsPerMessage) return;
|
|
44
|
+
return {
|
|
45
|
+
length: prompt.length,
|
|
46
|
+
limit: maxCharsPerMessage,
|
|
47
|
+
path: "prompt"
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function getMaxCharsPerMessageModifierValue(limit) {
|
|
51
|
+
const maxCharsPerMessage = getMaxCharsPerMessage(limit);
|
|
52
|
+
if (!maxCharsPerMessage) return;
|
|
53
|
+
return `Each generated user message must be ${maxCharsPerMessage} characters or fewer.`;
|
|
54
|
+
}
|
|
55
|
+
function getGeneratedPromptOverLimit(prompt, limit) {
|
|
56
|
+
const violation = getPromptLengthViolation(prompt, limit);
|
|
57
|
+
if (!violation) return;
|
|
58
|
+
return {
|
|
59
|
+
length: violation.length,
|
|
60
|
+
limit: violation.limit
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function throwIfTargetPromptExceedsMaxChars(prompt, limit) {
|
|
64
|
+
const violation = getPromptLengthViolation(prompt, limit);
|
|
65
|
+
if (!violation) return;
|
|
66
|
+
throw new Error(`Target prompt message at ${violation.path} exceeds maxCharsPerMessage=${violation.limit}: ${violation.length} characters.`);
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
Object.defineProperty(exports, "MAX_CHARS_PER_MESSAGE_MODIFIER_KEY", {
|
|
70
|
+
enumerable: true,
|
|
71
|
+
get: function() {
|
|
72
|
+
return MAX_CHARS_PER_MESSAGE_MODIFIER_KEY;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(exports, "getGeneratedPromptOverLimit", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
get: function() {
|
|
78
|
+
return getGeneratedPromptOverLimit;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
Object.defineProperty(exports, "getMaxCharsPerMessageModifierValue", {
|
|
82
|
+
enumerable: true,
|
|
83
|
+
get: function() {
|
|
84
|
+
return getMaxCharsPerMessageModifierValue;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(exports, "throwIfTargetPromptExceedsMaxChars", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function() {
|
|
90
|
+
return throwIfTargetPromptExceedsMaxChars;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=promptLength-BbBbDHNj.cjs.map
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { s as logger } from "./logger-BbY6ypFL.js";
|
|
3
|
+
import { _ as REQUEST_TIMEOUT_MS, r as fetchWithRetries } from "./fetch-Cpf1U1nO.js";
|
|
4
|
+
import { n as VERSION } from "./version-F0YDgb7J.js";
|
|
5
|
+
import { o as getUserEmail } from "./accounts-D6IBfEE0.js";
|
|
6
|
+
import { wt as getInputType } from "./types-BFevViUY.js";
|
|
7
|
+
import { c as neverGenerateRemoteForRegularEvals, i as getRemoteGenerationUrlForUnaligned, r as getRemoteGenerationUrl, s as neverGenerateRemote } from "./remoteGeneration-D6UjE2JT.js";
|
|
8
|
+
import dedent from "dedent";
|
|
9
|
+
//#region src/redteam/remoteMaterialization.ts
|
|
10
|
+
const REMOTE_MATERIALIZATION_CONTEXT_VAR = "__promptfooRemoteMaterialization";
|
|
11
|
+
function filterMaterializedVarsToInputs(vars, inputs, options) {
|
|
12
|
+
if (!inputs || Object.keys(inputs).length === 0) return vars;
|
|
13
|
+
return Object.fromEntries(Object.entries(vars).filter(([key]) => {
|
|
14
|
+
if (!Object.prototype.hasOwnProperty.call(inputs, key)) return false;
|
|
15
|
+
if (!options?.textOnly) return true;
|
|
16
|
+
return getInputType(inputs[key]) === "text";
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
function buildRemoteMaterializedInputVariables(response, fallbackVars, inputs) {
|
|
20
|
+
const filteredFallbackVars = filterMaterializedVarsToInputs(fallbackVars, inputs, { textOnly: true });
|
|
21
|
+
const filteredMaterializedVars = filterMaterializedVarsToInputs(response.materializedVars ?? {}, inputs);
|
|
22
|
+
return {
|
|
23
|
+
...response.inputMaterialization ? { metadata: response.inputMaterialization } : {},
|
|
24
|
+
vars: {
|
|
25
|
+
...filteredFallbackVars,
|
|
26
|
+
...filteredMaterializedVars
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function getRemoteMaterializationHost() {
|
|
31
|
+
const remoteUrl = getRemoteGenerationUrl();
|
|
32
|
+
try {
|
|
33
|
+
return new URL(remoteUrl).origin;
|
|
34
|
+
} catch {
|
|
35
|
+
return remoteUrl;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function buildRemoteMaterializationContextVars(context) {
|
|
39
|
+
return { [REMOTE_MATERIALIZATION_CONTEXT_VAR]: context };
|
|
40
|
+
}
|
|
41
|
+
function getRemoteMaterializationContextFromVars(vars) {
|
|
42
|
+
const raw = vars?.[REMOTE_MATERIALIZATION_CONTEXT_VAR];
|
|
43
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return;
|
|
44
|
+
return raw;
|
|
45
|
+
}
|
|
46
|
+
function requiresRemoteMaterialization(inputs) {
|
|
47
|
+
return Boolean(inputs && Object.keys(inputs).length > 0);
|
|
48
|
+
}
|
|
49
|
+
function getRemoteMaterializationUpgradeError(operation) {
|
|
50
|
+
return `${operation} requires remote multi-input materialization support from a newer Promptfoo server. Current remote endpoint: ${getRemoteMaterializationHost()}. Upgrade the Promptfoo server you are connected to and try again.`;
|
|
51
|
+
}
|
|
52
|
+
function isRemoteMaterializationUpgradeError(error) {
|
|
53
|
+
return error instanceof Error && error.message.includes("requires remote multi-input materialization support from a newer");
|
|
54
|
+
}
|
|
55
|
+
function assertRemoteMaterializationHandled(response, operation) {
|
|
56
|
+
if (response?.materializationHandled === true) return;
|
|
57
|
+
throw new Error(getRemoteMaterializationUpgradeError(operation));
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/providers/promptfoo.ts
|
|
61
|
+
/**
|
|
62
|
+
* Provider for generating harmful/adversarial content using Promptfoo's unaligned models.
|
|
63
|
+
* Used by red team plugins to generate test cases for harmful content categories.
|
|
64
|
+
*/
|
|
65
|
+
var PromptfooHarmfulCompletionProvider = class {
|
|
66
|
+
harmCategory;
|
|
67
|
+
n;
|
|
68
|
+
purpose;
|
|
69
|
+
config;
|
|
70
|
+
constructor(options) {
|
|
71
|
+
this.harmCategory = options.harmCategory;
|
|
72
|
+
this.n = options.n;
|
|
73
|
+
this.purpose = options.purpose;
|
|
74
|
+
this.config = options.config;
|
|
75
|
+
}
|
|
76
|
+
id() {
|
|
77
|
+
return `promptfoo:redteam:${this.harmCategory}`;
|
|
78
|
+
}
|
|
79
|
+
toString() {
|
|
80
|
+
return `[Promptfoo Harmful Completion Provider ${this.purpose} - ${this.harmCategory}]`;
|
|
81
|
+
}
|
|
82
|
+
async callApi(_prompt, _context, callApiOptions) {
|
|
83
|
+
if (neverGenerateRemote()) return { error: dedent`
|
|
84
|
+
Remote generation is disabled. Harmful content generation requires Promptfoo's unaligned models.
|
|
85
|
+
|
|
86
|
+
To enable:
|
|
87
|
+
- Remove PROMPTFOO_DISABLE_REMOTE_GENERATION (or PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION)
|
|
88
|
+
- Or configure an alternative unaligned model provider
|
|
89
|
+
|
|
90
|
+
Learn more: https://www.promptfoo.dev/docs/red-team/configuration#remote-generation
|
|
91
|
+
` };
|
|
92
|
+
const body = {
|
|
93
|
+
email: getUserEmail(),
|
|
94
|
+
harmCategory: this.harmCategory,
|
|
95
|
+
n: this.n,
|
|
96
|
+
purpose: this.purpose,
|
|
97
|
+
version: VERSION,
|
|
98
|
+
config: this.config
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
logger.debug(`[HarmfulCompletionProvider] Calling generate harmful API (${getRemoteGenerationUrlForUnaligned()}) with body: ${JSON.stringify(body)}`);
|
|
102
|
+
const response = await fetchWithRetries(getRemoteGenerationUrlForUnaligned(), {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: { "Content-Type": "application/json" },
|
|
105
|
+
body: JSON.stringify(body),
|
|
106
|
+
...callApiOptions?.abortSignal && { signal: callApiOptions.abortSignal }
|
|
107
|
+
}, 58e4, 2);
|
|
108
|
+
if (!response.ok) throw new Error(`API call failed with status ${response.status}: ${await response.text()}`);
|
|
109
|
+
const data = await response.json();
|
|
110
|
+
return { output: (Array.isArray(data.output) ? data.output : [data.output]).filter((item) => typeof item === "string" && item.length > 0) };
|
|
111
|
+
} catch (err) {
|
|
112
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
113
|
+
logger.info(`[HarmfulCompletionProvider] ${err}`);
|
|
114
|
+
return { error: `[HarmfulCompletionProvider] ${err}` };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Provider for red team adversarial strategies using Promptfoo's task-specific models.
|
|
120
|
+
* Supports multi-turn attack strategies like crescendo, goat, and iterative attacks.
|
|
121
|
+
*/
|
|
122
|
+
var PromptfooChatCompletionProvider = class {
|
|
123
|
+
options;
|
|
124
|
+
constructor(options) {
|
|
125
|
+
this.options = options;
|
|
126
|
+
}
|
|
127
|
+
id() {
|
|
128
|
+
return this.options.id || "promptfoo:chatcompletion";
|
|
129
|
+
}
|
|
130
|
+
toString() {
|
|
131
|
+
return `[Promptfoo Chat Completion Provider]`;
|
|
132
|
+
}
|
|
133
|
+
async callApi(prompt, context, callApiOptions) {
|
|
134
|
+
if (neverGenerateRemote()) return { error: dedent`
|
|
135
|
+
Remote generation is disabled. This red team strategy requires Promptfoo's task-specific models.
|
|
136
|
+
|
|
137
|
+
To enable:
|
|
138
|
+
- Remove PROMPTFOO_DISABLE_REMOTE_GENERATION (or PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION)
|
|
139
|
+
- Or provide OPENAI_API_KEY for local generation (may have lower quality)
|
|
140
|
+
|
|
141
|
+
Learn more: https://www.promptfoo.dev/docs/red-team/configuration#remote-generation
|
|
142
|
+
` };
|
|
143
|
+
const materializationContext = getRemoteMaterializationContextFromVars(context?.vars);
|
|
144
|
+
const body = {
|
|
145
|
+
jsonOnly: this.options.jsonOnly,
|
|
146
|
+
preferSmallModel: this.options.preferSmallModel,
|
|
147
|
+
prompt,
|
|
148
|
+
step: context?.prompt.label,
|
|
149
|
+
task: this.options.task,
|
|
150
|
+
email: getUserEmail(),
|
|
151
|
+
...this.options.inputs && { inputs: this.options.inputs },
|
|
152
|
+
...materializationContext ? { materializationContext } : {}
|
|
153
|
+
};
|
|
154
|
+
try {
|
|
155
|
+
const response = await fetchWithRetries(getRemoteGenerationUrl(), {
|
|
156
|
+
method: "POST",
|
|
157
|
+
headers: { "Content-Type": "application/json" },
|
|
158
|
+
body: JSON.stringify(body),
|
|
159
|
+
...callApiOptions?.abortSignal && { signal: callApiOptions.abortSignal }
|
|
160
|
+
}, REQUEST_TIMEOUT_MS);
|
|
161
|
+
const data = await response.json();
|
|
162
|
+
if (!data.result) {
|
|
163
|
+
logger.debug(`Error from promptfoo completion provider. Status: ${response.status} ${response.statusText} ${JSON.stringify(data)} `);
|
|
164
|
+
return { error: "LLM did not return a result, likely refusal" };
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
inputMaterialization: data.inputMaterialization,
|
|
168
|
+
materializationHandled: data.materializationHandled,
|
|
169
|
+
materializedVars: data.materializedVars,
|
|
170
|
+
output: data.result,
|
|
171
|
+
tokenUsage: data.tokenUsage
|
|
172
|
+
};
|
|
173
|
+
} catch (err) {
|
|
174
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
175
|
+
return { error: `API call error: ${String(err)}` };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const REDTEAM_SIMULATED_USER_TASK_ID = "mischievous-user-redteam";
|
|
180
|
+
/**
|
|
181
|
+
* Provider for simulating realistic user conversations using Promptfoo's conversation models.
|
|
182
|
+
* Supports both regular simulated users and adversarial red team users.
|
|
183
|
+
*/
|
|
184
|
+
var PromptfooSimulatedUserProvider = class {
|
|
185
|
+
options;
|
|
186
|
+
taskId;
|
|
187
|
+
constructor(options = {}, taskId) {
|
|
188
|
+
this.options = options;
|
|
189
|
+
this.taskId = taskId;
|
|
190
|
+
}
|
|
191
|
+
id() {
|
|
192
|
+
return this.options.id || "promptfoo:agent";
|
|
193
|
+
}
|
|
194
|
+
toString() {
|
|
195
|
+
return "[Promptfoo Agent Provider]";
|
|
196
|
+
}
|
|
197
|
+
async callApi(prompt, _context, callApiOptions) {
|
|
198
|
+
const isRedteamTask = this.taskId === REDTEAM_SIMULATED_USER_TASK_ID;
|
|
199
|
+
if (isRedteamTask ? neverGenerateRemote() : neverGenerateRemoteForRegularEvals()) return { error: dedent`
|
|
200
|
+
Remote generation is disabled.
|
|
201
|
+
|
|
202
|
+
SimulatedUser requires Promptfoo's conversation simulation models.
|
|
203
|
+
|
|
204
|
+
To enable, remove ${isRedteamTask ? "PROMPTFOO_DISABLE_REMOTE_GENERATION or PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION" : "PROMPTFOO_DISABLE_REMOTE_GENERATION"}
|
|
205
|
+
|
|
206
|
+
Learn more: ${isRedteamTask ? "https://www.promptfoo.dev/docs/red-team/configuration#remote-generation" : "https://www.promptfoo.dev/docs/providers/simulated-user#remote-generation"}
|
|
207
|
+
` };
|
|
208
|
+
const messages = JSON.parse(prompt);
|
|
209
|
+
const body = {
|
|
210
|
+
task: this.taskId,
|
|
211
|
+
instructions: this.options.instructions,
|
|
212
|
+
history: messages,
|
|
213
|
+
email: getUserEmail(),
|
|
214
|
+
version: VERSION
|
|
215
|
+
};
|
|
216
|
+
try {
|
|
217
|
+
const response = await fetchWithRetries(getRemoteGenerationUrl(), {
|
|
218
|
+
method: "POST",
|
|
219
|
+
headers: { "Content-Type": "application/json" },
|
|
220
|
+
body: JSON.stringify(body),
|
|
221
|
+
...callApiOptions?.abortSignal && { signal: callApiOptions.abortSignal }
|
|
222
|
+
}, REQUEST_TIMEOUT_MS);
|
|
223
|
+
if (!response.ok) throw new Error(`API call failed with status ${response.status}: ${await response.text()}`);
|
|
224
|
+
const data = await response.json();
|
|
225
|
+
return {
|
|
226
|
+
output: data.result,
|
|
227
|
+
tokenUsage: data.tokenUsage
|
|
228
|
+
};
|
|
229
|
+
} catch (err) {
|
|
230
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
231
|
+
return { error: `API call error: ${String(err)}` };
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
//#endregion
|
|
236
|
+
export { assertRemoteMaterializationHandled as a, isRemoteMaterializationUpgradeError as c, REDTEAM_SIMULATED_USER_TASK_ID as i, requiresRemoteMaterialization as l, PromptfooHarmfulCompletionProvider as n, buildRemoteMaterializationContextVars as o, PromptfooSimulatedUserProvider as r, buildRemoteMaterializedInputVariables as s, PromptfooChatCompletionProvider as t };
|
|
237
|
+
|
|
238
|
+
//# sourceMappingURL=promptfoo-BU4_0J85.js.map
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { a as logger } from "./logger-KD8JjCRJ.js";
|
|
2
|
+
import { n as fetchWithRetries, v as REQUEST_TIMEOUT_MS } from "./fetch-BSSAcMxf.js";
|
|
3
|
+
import { n as VERSION } from "./version-CHR-EFec.js";
|
|
4
|
+
import { o as getUserEmail } from "./accounts-BWjqwsrf.js";
|
|
5
|
+
import { c as neverGenerateRemoteForRegularEvals, i as getRemoteGenerationUrlForUnaligned, r as getRemoteGenerationUrl, s as neverGenerateRemote } from "./remoteGeneration--D6WjzUm.js";
|
|
6
|
+
import { bt as getInputType } from "./types-BJQBBPTP.js";
|
|
7
|
+
import dedent from "dedent";
|
|
8
|
+
//#region src/redteam/remoteMaterialization.ts
|
|
9
|
+
const REMOTE_MATERIALIZATION_CONTEXT_VAR = "__promptfooRemoteMaterialization";
|
|
10
|
+
function filterMaterializedVarsToInputs(vars, inputs, options) {
|
|
11
|
+
if (!inputs || Object.keys(inputs).length === 0) return vars;
|
|
12
|
+
return Object.fromEntries(Object.entries(vars).filter(([key]) => {
|
|
13
|
+
if (!Object.prototype.hasOwnProperty.call(inputs, key)) return false;
|
|
14
|
+
if (!options?.textOnly) return true;
|
|
15
|
+
return getInputType(inputs[key]) === "text";
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
function buildRemoteMaterializedInputVariables(response, fallbackVars, inputs) {
|
|
19
|
+
const filteredFallbackVars = filterMaterializedVarsToInputs(fallbackVars, inputs, { textOnly: true });
|
|
20
|
+
const filteredMaterializedVars = filterMaterializedVarsToInputs(response.materializedVars ?? {}, inputs);
|
|
21
|
+
return {
|
|
22
|
+
...response.inputMaterialization ? { metadata: response.inputMaterialization } : {},
|
|
23
|
+
vars: {
|
|
24
|
+
...filteredFallbackVars,
|
|
25
|
+
...filteredMaterializedVars
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function getRemoteMaterializationHost() {
|
|
30
|
+
const remoteUrl = getRemoteGenerationUrl();
|
|
31
|
+
try {
|
|
32
|
+
return new URL(remoteUrl).origin;
|
|
33
|
+
} catch {
|
|
34
|
+
return remoteUrl;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function buildRemoteMaterializationContextVars(context) {
|
|
38
|
+
return { [REMOTE_MATERIALIZATION_CONTEXT_VAR]: context };
|
|
39
|
+
}
|
|
40
|
+
function getRemoteMaterializationContextFromVars(vars) {
|
|
41
|
+
const raw = vars?.[REMOTE_MATERIALIZATION_CONTEXT_VAR];
|
|
42
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return;
|
|
43
|
+
return raw;
|
|
44
|
+
}
|
|
45
|
+
function requiresRemoteMaterialization(inputs) {
|
|
46
|
+
return Boolean(inputs && Object.keys(inputs).length > 0);
|
|
47
|
+
}
|
|
48
|
+
function getRemoteMaterializationUpgradeError(operation) {
|
|
49
|
+
return `${operation} requires remote multi-input materialization support from a newer Promptfoo server. Current remote endpoint: ${getRemoteMaterializationHost()}. Upgrade the Promptfoo server you are connected to and try again.`;
|
|
50
|
+
}
|
|
51
|
+
function isRemoteMaterializationUpgradeError(error) {
|
|
52
|
+
return error instanceof Error && error.message.includes("requires remote multi-input materialization support from a newer");
|
|
53
|
+
}
|
|
54
|
+
function assertRemoteMaterializationHandled(response, operation) {
|
|
55
|
+
if (response?.materializationHandled === true) return;
|
|
56
|
+
throw new Error(getRemoteMaterializationUpgradeError(operation));
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/providers/promptfoo.ts
|
|
60
|
+
/**
|
|
61
|
+
* Provider for generating harmful/adversarial content using Promptfoo's unaligned models.
|
|
62
|
+
* Used by red team plugins to generate test cases for harmful content categories.
|
|
63
|
+
*/
|
|
64
|
+
var PromptfooHarmfulCompletionProvider = class {
|
|
65
|
+
harmCategory;
|
|
66
|
+
n;
|
|
67
|
+
purpose;
|
|
68
|
+
config;
|
|
69
|
+
constructor(options) {
|
|
70
|
+
this.harmCategory = options.harmCategory;
|
|
71
|
+
this.n = options.n;
|
|
72
|
+
this.purpose = options.purpose;
|
|
73
|
+
this.config = options.config;
|
|
74
|
+
}
|
|
75
|
+
id() {
|
|
76
|
+
return `promptfoo:redteam:${this.harmCategory}`;
|
|
77
|
+
}
|
|
78
|
+
toString() {
|
|
79
|
+
return `[Promptfoo Harmful Completion Provider ${this.purpose} - ${this.harmCategory}]`;
|
|
80
|
+
}
|
|
81
|
+
async callApi(_prompt, _context, callApiOptions) {
|
|
82
|
+
if (neverGenerateRemote()) return { error: dedent`
|
|
83
|
+
Remote generation is disabled. Harmful content generation requires Promptfoo's unaligned models.
|
|
84
|
+
|
|
85
|
+
To enable:
|
|
86
|
+
- Remove PROMPTFOO_DISABLE_REMOTE_GENERATION (or PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION)
|
|
87
|
+
- Or configure an alternative unaligned model provider
|
|
88
|
+
|
|
89
|
+
Learn more: https://www.promptfoo.dev/docs/red-team/configuration#remote-generation
|
|
90
|
+
` };
|
|
91
|
+
const body = {
|
|
92
|
+
email: getUserEmail(),
|
|
93
|
+
harmCategory: this.harmCategory,
|
|
94
|
+
n: this.n,
|
|
95
|
+
purpose: this.purpose,
|
|
96
|
+
version: VERSION,
|
|
97
|
+
config: this.config
|
|
98
|
+
};
|
|
99
|
+
try {
|
|
100
|
+
logger.debug(`[HarmfulCompletionProvider] Calling generate harmful API (${getRemoteGenerationUrlForUnaligned()}) with body: ${JSON.stringify(body)}`);
|
|
101
|
+
const response = await fetchWithRetries(getRemoteGenerationUrlForUnaligned(), {
|
|
102
|
+
method: "POST",
|
|
103
|
+
headers: { "Content-Type": "application/json" },
|
|
104
|
+
body: JSON.stringify(body),
|
|
105
|
+
...callApiOptions?.abortSignal && { signal: callApiOptions.abortSignal }
|
|
106
|
+
}, 58e4, 2);
|
|
107
|
+
if (!response.ok) throw new Error(`API call failed with status ${response.status}: ${await response.text()}`);
|
|
108
|
+
const data = await response.json();
|
|
109
|
+
return { output: (Array.isArray(data.output) ? data.output : [data.output]).filter((item) => typeof item === "string" && item.length > 0) };
|
|
110
|
+
} catch (err) {
|
|
111
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
112
|
+
logger.info(`[HarmfulCompletionProvider] ${err}`);
|
|
113
|
+
return { error: `[HarmfulCompletionProvider] ${err}` };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Provider for red team adversarial strategies using Promptfoo's task-specific models.
|
|
119
|
+
* Supports multi-turn attack strategies like crescendo, goat, and iterative attacks.
|
|
120
|
+
*/
|
|
121
|
+
var PromptfooChatCompletionProvider = class {
|
|
122
|
+
options;
|
|
123
|
+
constructor(options) {
|
|
124
|
+
this.options = options;
|
|
125
|
+
}
|
|
126
|
+
id() {
|
|
127
|
+
return this.options.id || "promptfoo:chatcompletion";
|
|
128
|
+
}
|
|
129
|
+
toString() {
|
|
130
|
+
return `[Promptfoo Chat Completion Provider]`;
|
|
131
|
+
}
|
|
132
|
+
async callApi(prompt, context, callApiOptions) {
|
|
133
|
+
if (neverGenerateRemote()) return { error: dedent`
|
|
134
|
+
Remote generation is disabled. This red team strategy requires Promptfoo's task-specific models.
|
|
135
|
+
|
|
136
|
+
To enable:
|
|
137
|
+
- Remove PROMPTFOO_DISABLE_REMOTE_GENERATION (or PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION)
|
|
138
|
+
- Or provide OPENAI_API_KEY for local generation (may have lower quality)
|
|
139
|
+
|
|
140
|
+
Learn more: https://www.promptfoo.dev/docs/red-team/configuration#remote-generation
|
|
141
|
+
` };
|
|
142
|
+
const materializationContext = getRemoteMaterializationContextFromVars(context?.vars);
|
|
143
|
+
const body = {
|
|
144
|
+
jsonOnly: this.options.jsonOnly,
|
|
145
|
+
preferSmallModel: this.options.preferSmallModel,
|
|
146
|
+
prompt,
|
|
147
|
+
step: context?.prompt.label,
|
|
148
|
+
task: this.options.task,
|
|
149
|
+
email: getUserEmail(),
|
|
150
|
+
...this.options.inputs && { inputs: this.options.inputs },
|
|
151
|
+
...materializationContext ? { materializationContext } : {}
|
|
152
|
+
};
|
|
153
|
+
try {
|
|
154
|
+
const response = await fetchWithRetries(getRemoteGenerationUrl(), {
|
|
155
|
+
method: "POST",
|
|
156
|
+
headers: { "Content-Type": "application/json" },
|
|
157
|
+
body: JSON.stringify(body),
|
|
158
|
+
...callApiOptions?.abortSignal && { signal: callApiOptions.abortSignal }
|
|
159
|
+
}, REQUEST_TIMEOUT_MS);
|
|
160
|
+
const data = await response.json();
|
|
161
|
+
if (!data.result) {
|
|
162
|
+
logger.debug(`Error from promptfoo completion provider. Status: ${response.status} ${response.statusText} ${JSON.stringify(data)} `);
|
|
163
|
+
return { error: "LLM did not return a result, likely refusal" };
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
inputMaterialization: data.inputMaterialization,
|
|
167
|
+
materializationHandled: data.materializationHandled,
|
|
168
|
+
materializedVars: data.materializedVars,
|
|
169
|
+
output: data.result,
|
|
170
|
+
tokenUsage: data.tokenUsage
|
|
171
|
+
};
|
|
172
|
+
} catch (err) {
|
|
173
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
174
|
+
return { error: `API call error: ${String(err)}` };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const REDTEAM_SIMULATED_USER_TASK_ID = "mischievous-user-redteam";
|
|
179
|
+
/**
|
|
180
|
+
* Provider for simulating realistic user conversations using Promptfoo's conversation models.
|
|
181
|
+
* Supports both regular simulated users and adversarial red team users.
|
|
182
|
+
*/
|
|
183
|
+
var PromptfooSimulatedUserProvider = class {
|
|
184
|
+
options;
|
|
185
|
+
taskId;
|
|
186
|
+
constructor(options = {}, taskId) {
|
|
187
|
+
this.options = options;
|
|
188
|
+
this.taskId = taskId;
|
|
189
|
+
}
|
|
190
|
+
id() {
|
|
191
|
+
return this.options.id || "promptfoo:agent";
|
|
192
|
+
}
|
|
193
|
+
toString() {
|
|
194
|
+
return "[Promptfoo Agent Provider]";
|
|
195
|
+
}
|
|
196
|
+
async callApi(prompt, _context, callApiOptions) {
|
|
197
|
+
const isRedteamTask = this.taskId === REDTEAM_SIMULATED_USER_TASK_ID;
|
|
198
|
+
if (isRedteamTask ? neverGenerateRemote() : neverGenerateRemoteForRegularEvals()) return { error: dedent`
|
|
199
|
+
Remote generation is disabled.
|
|
200
|
+
|
|
201
|
+
SimulatedUser requires Promptfoo's conversation simulation models.
|
|
202
|
+
|
|
203
|
+
To enable, remove ${isRedteamTask ? "PROMPTFOO_DISABLE_REMOTE_GENERATION or PROMPTFOO_DISABLE_REDTEAM_REMOTE_GENERATION" : "PROMPTFOO_DISABLE_REMOTE_GENERATION"}
|
|
204
|
+
|
|
205
|
+
Learn more: ${isRedteamTask ? "https://www.promptfoo.dev/docs/red-team/configuration#remote-generation" : "https://www.promptfoo.dev/docs/providers/simulated-user#remote-generation"}
|
|
206
|
+
` };
|
|
207
|
+
const messages = JSON.parse(prompt);
|
|
208
|
+
const body = {
|
|
209
|
+
task: this.taskId,
|
|
210
|
+
instructions: this.options.instructions,
|
|
211
|
+
history: messages,
|
|
212
|
+
email: getUserEmail(),
|
|
213
|
+
version: VERSION
|
|
214
|
+
};
|
|
215
|
+
try {
|
|
216
|
+
const response = await fetchWithRetries(getRemoteGenerationUrl(), {
|
|
217
|
+
method: "POST",
|
|
218
|
+
headers: { "Content-Type": "application/json" },
|
|
219
|
+
body: JSON.stringify(body),
|
|
220
|
+
...callApiOptions?.abortSignal && { signal: callApiOptions.abortSignal }
|
|
221
|
+
}, REQUEST_TIMEOUT_MS);
|
|
222
|
+
if (!response.ok) throw new Error(`API call failed with status ${response.status}: ${await response.text()}`);
|
|
223
|
+
const data = await response.json();
|
|
224
|
+
return {
|
|
225
|
+
output: data.result,
|
|
226
|
+
tokenUsage: data.tokenUsage
|
|
227
|
+
};
|
|
228
|
+
} catch (err) {
|
|
229
|
+
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
230
|
+
return { error: `API call error: ${String(err)}` };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
//#endregion
|
|
235
|
+
export { assertRemoteMaterializationHandled as a, isRemoteMaterializationUpgradeError as c, REDTEAM_SIMULATED_USER_TASK_ID as i, requiresRemoteMaterialization as l, PromptfooHarmfulCompletionProvider as n, buildRemoteMaterializationContextVars as o, PromptfooSimulatedUserProvider as r, buildRemoteMaterializedInputVariables as s, PromptfooChatCompletionProvider as t };
|
|
236
|
+
|
|
237
|
+
//# sourceMappingURL=promptfoo-CReYAtfb.js.map
|