promptfoo 0.121.7 → 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.
Files changed (313) hide show
  1. package/dist/src/{accounts-CmWzeD2d.cjs → accounts-BVz5gHLK.cjs} +4 -4
  2. package/dist/src/{accounts-DanM1wq_.js → accounts-BWjqwsrf.js} +4 -4
  3. package/dist/src/{accounts-CjFnOPmb.js → accounts-D6IBfEE0.js} +5 -5
  4. package/dist/src/{accounts-Ca7WIoPY.js → accounts-DAv_0iE7.js} +4 -4
  5. package/dist/src/{agentic-utils-DDEGRV9v.js → agentic-utils-BJKAkz2e.js} +2 -2
  6. package/dist/src/{agentic-utils-DvPWSUpb.cjs → agentic-utils-C-A92xhn.cjs} +2 -2
  7. package/dist/src/{agentic-utils-TxUEMPYS.js → agentic-utils-DmoS_S4B.js} +2 -2
  8. package/dist/src/{agentic-utils-CJ0j3fBi.js → agentic-utils-GdToujHu.js} +2 -2
  9. package/dist/src/{agents-CBgJvRkB.js → agents-2C8NN6I1.js} +4 -4
  10. package/dist/src/{agents-CYn2n3QP.js → agents-BMAiSR2o.js} +2 -2
  11. package/dist/src/{agents-LrHuQqr1.js → agents-C-PGaxwj.js} +4 -4
  12. package/dist/src/{agents-D-vDNFx4.js → agents-C98cz5pl.js} +4 -4
  13. package/dist/src/{agents-B4sRuXg3.cjs → agents-DB8Ub2Ld.cjs} +2 -2
  14. package/dist/src/{agents-B8q7h_ek.js → agents-Dwshy2H8.js} +2 -2
  15. package/dist/src/{agents-QGg76OF-.js → agents-mlKjx-cK.js} +2 -2
  16. package/dist/src/{agents-eHZ9nlgA.cjs → agents-n2ej-c4H.cjs} +4 -4
  17. package/dist/src/{aimlapi-D5HXzZ0s.js → aimlapi-Bi-laUlp.js} +6 -6
  18. package/dist/src/{aimlapi-T6HGNxNe.cjs → aimlapi-D0OFV4Vj.cjs} +6 -6
  19. package/dist/src/{aimlapi-eYv3a_DK.js → aimlapi-WyUK0wYy.js} +6 -6
  20. package/dist/src/{aimlapi-CJEbQ0o6.js → aimlapi-v-63ZjEI.js} +6 -6
  21. package/dist/src/app/assets/Report-sCXUfaWo.js +1 -0
  22. package/dist/src/app/assets/{index-BnT6P6sF.js → index-BopgkZEh.js} +2 -2
  23. package/dist/src/app/index.html +1 -1
  24. package/dist/src/{audio-DyiebVB3.js → audio-DnEIHWZR.js} +3 -3
  25. package/dist/src/{audio-BqnRvcWG.js → audio-heR0mu0n.js} +3 -3
  26. package/dist/src/{audio-CPMtV1yR.js → audio-wafFO1wn.js} +3 -3
  27. package/dist/src/{audio-FnxbEnSE.cjs → audio-x44tsxIo.cjs} +3 -3
  28. package/dist/src/{authoritativeMarkupInjection-F2gBw0lN.cjs → authoritativeMarkupInjection-2G3Be6oL.cjs} +6 -6
  29. package/dist/src/{authoritativeMarkupInjection-DyAXAsSr.js → authoritativeMarkupInjection-81PPynHR.js} +6 -6
  30. package/dist/src/{authoritativeMarkupInjection-QEQmFS83.js → authoritativeMarkupInjection-D9O70HPi.js} +6 -6
  31. package/dist/src/{authoritativeMarkupInjection-BZIywVjG.js → authoritativeMarkupInjection-PxSf3Rh8.js} +5 -5
  32. package/dist/src/{base-E9I8zXjz.js → base-0Gzzue9Z.js} +2 -2
  33. package/dist/src/{base-Co80MMCi.js → base-Bp4c52YZ.js} +2 -2
  34. package/dist/src/{base-CKLo890h.js → base-BuNn-YBX.js} +2 -2
  35. package/dist/src/{base-DGJW48uz.cjs → base-BzdS8tod.cjs} +2 -2
  36. package/dist/src/{bestOfN-_kTi8Bxe.js → bestOfN-BHiOjeaq.js} +7 -7
  37. package/dist/src/{bestOfN-BBsO41z4.js → bestOfN-CdkNPPbX.js} +6 -6
  38. package/dist/src/{bestOfN-B3wNzjSB.js → bestOfN-ClUSOhN0.js} +7 -7
  39. package/dist/src/{bestOfN-CAwmg5UL.cjs → bestOfN-DWwXEg1h.cjs} +7 -7
  40. package/dist/src/cache-BKYi3kAA.js +3 -0
  41. package/dist/src/{cache-DpPWrkTE.js → cache-BR77mdIR.js} +3 -3
  42. package/dist/src/{cache-roFAE0cI.js → cache-CrioYnaa.js} +2 -2
  43. package/dist/src/{cache-DIXbtkNO.js → cache-DdriHsNX.js} +2 -2
  44. package/dist/src/{cache-CPGUA4Yl.cjs → cache-h5MWOBZI.cjs} +2 -2
  45. package/dist/src/{chat-Dabu84Br.js → chat-BBEnnpQk.js} +6 -6
  46. package/dist/src/{chat-CUCorGiL.js → chat-BSos6PvZ.js} +6 -6
  47. package/dist/src/{chat-TP8Qifkh.js → chat-Bnt7ieO0.js} +2 -2
  48. package/dist/src/{chat-DxTDQ83C.cjs → chat-DSyYuTYT.cjs} +6 -6
  49. package/dist/src/{chat-DqUFcWI0.js → chat-DTdf-J5Q.js} +6 -6
  50. package/dist/src/{chat-DG1wG4w0.cjs → chat-Dq3DomYU.cjs} +2 -2
  51. package/dist/src/{chat-GmlolEwo.js → chat-g5QLeLOo.js} +2 -2
  52. package/dist/src/{chat-iwaM5UTQ.js → chat-mTTuUAYb.js} +2 -2
  53. package/dist/src/{claude-agent-sdk-x1XJ1-pU.js → claude-agent-sdk-BGUac_kS.js} +7 -5
  54. package/dist/src/{claude-agent-sdk-D5Jl0SDh.js → claude-agent-sdk-BP__YGfK.js} +7 -5
  55. package/dist/src/{claude-agent-sdk-BQNp_y-F.js → claude-agent-sdk-Ddgx5BIQ.js} +7 -5
  56. package/dist/src/{claude-agent-sdk-DH416NBD.cjs → claude-agent-sdk-n2XcEclh.cjs} +7 -5
  57. package/dist/src/cloud-DiWbUiVP.js +3 -0
  58. package/dist/src/{cloud-D3DiFqH6.js → cloud-DqF5N1aJ.js} +2 -2
  59. package/dist/src/{cloudflare-ai-B6NVI3ax.js → cloudflare-ai-BGamMotN.js} +4 -4
  60. package/dist/src/{cloudflare-ai-r4tbYmWU.js → cloudflare-ai-BwW8W-w7.js} +4 -4
  61. package/dist/src/{cloudflare-ai-CEAW-xQa.cjs → cloudflare-ai-DCRGnsyL.cjs} +4 -4
  62. package/dist/src/{cloudflare-ai-RFSojyXG.js → cloudflare-ai-sD26nP6V.js} +4 -4
  63. package/dist/src/{cloudflare-gateway-BaZ4insB.js → cloudflare-gateway-2lnOT4qM.js} +3 -3
  64. package/dist/src/{cloudflare-gateway-BCkLouto.js → cloudflare-gateway-B1-8KNCt.js} +3 -3
  65. package/dist/src/{cloudflare-gateway-TJMLBj6I.cjs → cloudflare-gateway-CCC1DFrC.cjs} +3 -3
  66. package/dist/src/{cloudflare-gateway-CF-Vb-2Z.js → cloudflare-gateway-DOghiU6r.js} +3 -3
  67. package/dist/src/{codex-app-server-DIXZ230V.js → codex-app-server-BWeWamEb.js} +17 -2
  68. package/dist/src/{codex-app-server-B8KHEiF4.js → codex-app-server-DyQB1P0p.js} +17 -2
  69. package/dist/src/{codex-app-server-CnrLBCeA.cjs → codex-app-server-R9u_G7W9.cjs} +17 -2
  70. package/dist/src/{codex-app-server-Dd22dC_N.js → codex-app-server-ZQRJSJjU.js} +17 -2
  71. package/dist/src/{codex-sdk-CmQABzV3.js → codex-sdk-B62H0fe7.js} +14 -3
  72. package/dist/src/{codex-sdk-CFF6gUyi.cjs → codex-sdk-BRPUvJG8.cjs} +14 -3
  73. package/dist/src/{codex-sdk-B6Wah8Pa.js → codex-sdk-Dio1zJBS.js} +14 -3
  74. package/dist/src/codex-sdk-DxukZs_K.js +3 -0
  75. package/dist/src/{codex-sdk-D2d54RL8.js → codex-sdk-iEmW1eS2.js} +14 -3
  76. package/dist/src/{cometapi-Bu9B8NUY.js → cometapi--hh7dESS.js} +7 -7
  77. package/dist/src/{cometapi-OBILPLlu.js → cometapi-C7yWNGqt.js} +7 -7
  78. package/dist/src/{cometapi-CtzNCHKu.js → cometapi-CSIi16a0.js} +7 -7
  79. package/dist/src/{cometapi-DHCDlQUI.cjs → cometapi-sZgBZtbU.cjs} +7 -7
  80. package/dist/src/{completion-CSYfl2cd.cjs → completion-CWtqdn3z.cjs} +4 -4
  81. package/dist/src/{completion-CO2e1_62.js → completion-DT8cxo9T.js} +4 -4
  82. package/dist/src/{completion-DZNxcyfG.js → completion-DUScduXp.js} +4 -4
  83. package/dist/src/{completion-sNvCLTAP.js → completion-D_2IOAoS.js} +4 -4
  84. package/dist/src/{crescendo-QiaSLW0d.js → crescendo-B41TwUHM.js} +39 -18
  85. package/dist/src/{crescendo-J1Xx4_zb.js → crescendo-Bfic7KC4.js} +41 -20
  86. package/dist/src/{crescendo-BXEJK_bi.cjs → crescendo-DXFB7rHP.cjs} +41 -20
  87. package/dist/src/{crescendo-CU_Y2i-m.js → crescendo-DvvYxMLA.js} +41 -20
  88. package/dist/src/{custom-BJfP00Bh.js → custom-BdzuqFTN.js} +10 -10
  89. package/dist/src/{custom-notggYVl.js → custom-Cf5Q6r-P.js} +8 -8
  90. package/dist/src/{custom-CZVn-1-r.js → custom-DLgufezC.js} +10 -10
  91. package/dist/src/{custom-Cqia7M0D.cjs → custom-LEXHCRe3.cjs} +10 -10
  92. package/dist/src/{docker-4D1eL6Gq.js → docker-BOSO_6hK.js} +5 -5
  93. package/dist/src/{docker-D06JUoe2.cjs → docker-D0h2vFrc.cjs} +5 -5
  94. package/dist/src/{docker-DdJQBxK9.js → docker-D2TWGyTP.js} +5 -5
  95. package/dist/src/{docker-BBv1WUDu.js → docker-Vj_4_cPg.js} +5 -5
  96. package/dist/src/{embedding-BbrwopfX.cjs → embedding-BQIApR18.cjs} +4 -4
  97. package/dist/src/{embedding-Bi3rxrZF.js → embedding-CStK0TV6.js} +4 -4
  98. package/dist/src/{embedding--UZVe4_7.js → embedding-CU78FMnw.js} +4 -4
  99. package/dist/src/{embedding-C251p1-8.js → embedding-CV8lmCnU.js} +4 -4
  100. package/dist/src/{eval-0VRANImH.js → eval-B3BaNBbO.js} +4 -4
  101. package/dist/src/{eval-DscR5iOM.js → eval-DfR9885C.js} +1 -1
  102. package/dist/src/evalResult-BtZSUgQv.js +3 -0
  103. package/dist/src/{evalResult-eUkJv9Ko.js → evalResult-CcSqNl_Y.js} +3 -3
  104. package/dist/src/{evalResult-CvtS8h8u.cjs → evalResult-DHXs-9TL.cjs} +3 -3
  105. package/dist/src/{evalResult-2RRJvFyB.js → evalResult-PGqEbasb.js} +3 -3
  106. package/dist/src/evaluator-B9LGbKI8.js +3 -0
  107. package/dist/src/{evaluator-DRoiYB2q.js → evaluator-n_dEb00o.js} +20 -20
  108. package/dist/src/{evaluatorHelpers-DuqFFfq7.js → evaluatorHelpers-CrRObe2z.js} +4 -4
  109. package/dist/src/{evaluatorHelpers-CRqTvSux.cjs → evaluatorHelpers-D06I9WFL.cjs} +4 -4
  110. package/dist/src/{evaluatorHelpers-BsYP_muT.js → evaluatorHelpers-D1_kwvyp.js} +4 -4
  111. package/dist/src/{extractor-CIW3iN-b.js → extractor-BVkZtk4R.js} +4 -4
  112. package/dist/src/{extractor-CxRtnaHl.js → extractor-D3Fv_Tdh.js} +4 -4
  113. package/dist/src/{extractor-BR7XAzAL.js → extractor-Jp53vs-6.js} +4 -4
  114. package/dist/src/{extractor-BdxEtt3J.cjs → extractor-bV_NOoaz.cjs} +4 -4
  115. package/dist/src/{fetch-BufrQtvR.js → fetch-BSSAcMxf.js} +2 -2
  116. package/dist/src/fetch-BodQTrMU.js +3 -0
  117. package/dist/src/{fetch-Dw4XZHjj.cjs → fetch-Cfm4EuOB.cjs} +2 -2
  118. package/dist/src/{fetch-DXUnXkVU.js → fetch-Cpf1U1nO.js} +3 -3
  119. package/dist/src/{fetch-It34O8Ur.js → fetch-Doks14zQ.js} +2 -2
  120. package/dist/src/{goat-Qgurm-NP.js → goat-Ba7Gznzq.js} +18 -17
  121. package/dist/src/{goat-Ckd3q3AY.js → goat-CJngS-WU.js} +18 -17
  122. package/dist/src/{goat-ghadEDdy.js → goat-CwsbfQeu.js} +16 -15
  123. package/dist/src/{goat-una6pZGP.cjs → goat-DOMbozoX.cjs} +18 -17
  124. package/dist/src/graders-B3D7kCcD.js +3 -0
  125. package/dist/src/{graders-BGP99PdK.js → graders-BQt1BaQe.js} +18 -18
  126. package/dist/src/{graders-ClrU2fnd.cjs → graders-CBQ2s6gz.cjs} +18 -18
  127. package/dist/src/{graders-C0nXU_ZP.js → graders-DaRU98zs.js} +18 -18
  128. package/dist/src/{graders-BX0f2tvS.js → graders-KXzjnIim.js} +18 -18
  129. package/dist/src/{hydra-DE4xWwyc.js → hydra-BU6GjYoQ.js} +35 -17
  130. package/dist/src/{hydra-BxdG4nkg.js → hydra-BmXHxlyl.js} +33 -15
  131. package/dist/src/{hydra-BSNZZm2M.js → hydra-CR0KyYDb.js} +35 -17
  132. package/dist/src/{hydra-DrJttnvw.cjs → hydra-RO9jBks7.cjs} +35 -17
  133. package/dist/src/{image-B_fPIwdg.js → image-BBmZdKO3.js} +3 -3
  134. package/dist/src/{image-QzmydkiG.js → image-B_PFG7IG.js} +3 -3
  135. package/dist/src/{image-BvUAW344.js → image-BtODOZjh.js} +4 -4
  136. package/dist/src/{image-Cvjwx1uY.js → image-CYuNJIqd.js} +4 -4
  137. package/dist/src/{image-DfVCGPbI.cjs → image-E00WFZkq.cjs} +3 -3
  138. package/dist/src/{image-X0oY4350.cjs → image-HK2Cfqb1.cjs} +4 -4
  139. package/dist/src/{image-BN-hjLL9.js → image-LGj8dTcr.js} +3 -3
  140. package/dist/src/{image-B4oBtu6J.js → image-YMKejC0r.js} +4 -4
  141. package/dist/src/index.cjs +112 -115
  142. package/dist/src/index.d.cts +13 -0
  143. package/dist/src/index.d.ts +13 -0
  144. package/dist/src/index.js +113 -116
  145. package/dist/src/{indirectWebPwn-DBQhOjoD.js → indirectWebPwn-B80dLlFC.js} +5 -5
  146. package/dist/src/{indirectWebPwn-uyWdHx04.js → indirectWebPwn-BMTXXznx.js} +4 -4
  147. package/dist/src/{indirectWebPwn-tNx9OZ35.js → indirectWebPwn-BZFPV7Q9.js} +4 -4
  148. package/dist/src/{indirectWebPwn-CfQJt3gk.cjs → indirectWebPwn-BaEQEOIO.cjs} +5 -5
  149. package/dist/src/{indirectWebPwn-OsXnKejv.js → indirectWebPwn-BzpyMnFS.js} +5 -5
  150. package/dist/src/{indirectWebPwn-CbjUG0rh.js → indirectWebPwn-CiWB-vVH.js} +4 -4
  151. package/dist/src/{indirectWebPwn-BJ22AbQa.cjs → indirectWebPwn-D7NA9Nsv.cjs} +4 -4
  152. package/dist/src/{indirectWebPwn-02ZIghCS.js → indirectWebPwn-o_bEFMjP.js} +5 -5
  153. package/dist/src/{iterative-DJQEQpG3.js → iterative-B-l0syBV.js} +25 -15
  154. package/dist/src/{iterative-DQBuWM-j.cjs → iterative-BACUeCCz.cjs} +25 -15
  155. package/dist/src/{iterative-FTS4Bz67.js → iterative-CVwoExo8.js} +25 -15
  156. package/dist/src/{iterative-CpU6i2As.js → iterative-QDrGSyss.js} +23 -13
  157. package/dist/src/{iterativeImage-BUABMVOA.js → iterativeImage-BQg2OwA6.js} +3 -3
  158. package/dist/src/{iterativeImage-Doz8mgxF.js → iterativeImage-Bwn0fM75.js} +4 -4
  159. package/dist/src/{iterativeImage-ByFWkxax.cjs → iterativeImage-CcgVyASo.cjs} +4 -4
  160. package/dist/src/{iterativeImage-BzUapOUi.js → iterativeImage-D_UbQXg4.js} +4 -4
  161. package/dist/src/{iterativeMeta-C7APE_P1.js → iterativeMeta-CIu-CHRS.js} +36 -16
  162. package/dist/src/{iterativeMeta-B3YiAOc8.js → iterativeMeta-CN8CNjFA.js} +36 -16
  163. package/dist/src/{iterativeMeta-DgoQ7bLh.js → iterativeMeta-DN6BTjpq.js} +34 -14
  164. package/dist/src/{iterativeMeta-CSS8M6Ds.cjs → iterativeMeta-DlqY3BsS.cjs} +36 -16
  165. package/dist/src/{iterativeTree-DvZ7GBwt.js → iterativeTree-CJ8a8G9T.js} +78 -28
  166. package/dist/src/{iterativeTree-B5zxBBSW.js → iterativeTree-DcuFXnjL.js} +78 -28
  167. package/dist/src/{iterativeTree-CNyIk0Yn.js → iterativeTree-FrDDYAN0.js} +76 -26
  168. package/dist/src/{iterativeTree-CPMF10ve.cjs → iterativeTree-LOgAi0nU.cjs} +78 -28
  169. package/dist/src/{knowledgeBase-DUh34xba.cjs → knowledgeBase-CdbcGBZF.cjs} +4 -4
  170. package/dist/src/{knowledgeBase-Bi_8sV-H.js → knowledgeBase-CjOXp6Lr.js} +4 -4
  171. package/dist/src/{knowledgeBase-BadkINlJ.js → knowledgeBase-DxAq4n4z.js} +4 -4
  172. package/dist/src/{knowledgeBase-CkMljjdg.js → knowledgeBase-o_wTLzrt.js} +4 -4
  173. package/dist/src/{litellm-BKBo0jpC.js → litellm-B2gHwya_.js} +4 -4
  174. package/dist/src/{litellm-CtAr7bKG.cjs → litellm-CPpdlO7n.cjs} +4 -4
  175. package/dist/src/{litellm-BXyn5kZK.js → litellm-CYfgxLrM.js} +4 -4
  176. package/dist/src/{litellm-CNcfbCfa.js → litellm-ojWBKU3C.js} +4 -4
  177. package/dist/src/{luma-ray-D3FUc2K3.cjs → luma-ray-BCCO9XXG.cjs} +3 -3
  178. package/dist/src/{luma-ray-BMX1iEB6.js → luma-ray-BPrdihAb.js} +3 -3
  179. package/dist/src/{luma-ray-CR5TSpp4.js → luma-ray-DP5N79lB.js} +3 -3
  180. package/dist/src/{luma-ray-OEMmS1RB.js → luma-ray-DTDyoAlM.js} +3 -3
  181. package/dist/src/main.js +116 -119
  182. package/dist/src/{memoryPoisoning-Dp-btinn.cjs → memoryPoisoning-B6N3us35.cjs} +6 -6
  183. package/dist/src/{memoryPoisoning-D8h9gXJF.js → memoryPoisoning-Bc_BK_k2.js} +6 -6
  184. package/dist/src/{memoryPoisoning-CM83NWYl.js → memoryPoisoning-D375zwSX.js} +6 -6
  185. package/dist/src/{memoryPoisoning-cLuCoTuJ.js → memoryPoisoning-DJA0YjJT.js} +6 -6
  186. package/dist/src/{messages-BabO-cX8.js → messages-Bg29Nbit.js} +7 -7
  187. package/dist/src/{messages-DBPir0TQ.cjs → messages-BrZEnHsV.cjs} +7 -7
  188. package/dist/src/{messages-vsE_-Lv0.js → messages-CBulRaud.js} +7 -7
  189. package/dist/src/{messages-DGUlSNU7.js → messages-K9A8RxBM.js} +7 -7
  190. package/dist/src/{mischievousUser-0l8GD7Dp.js → mischievousUser-BDLwSGN0.js} +5 -5
  191. package/dist/src/{mischievousUser-frFYKxu6.js → mischievousUser-Blx-OtT3.js} +5 -5
  192. package/dist/src/{mischievousUser-BUOP9W5r.js → mischievousUser-CHuTTvBg.js} +5 -5
  193. package/dist/src/{mischievousUser-olGgHIVR.cjs → mischievousUser-CSUrH3fq.cjs} +5 -5
  194. package/dist/src/{modelslab-Cogmu4mG.js → modelslab-BjEk7yCP.js} +4 -4
  195. package/dist/src/{modelslab-EyDczZ5A.js → modelslab-CBCrdIBc.js} +4 -4
  196. package/dist/src/{modelslab-Dzst7VTU.js → modelslab-CrGpXuhv.js} +4 -4
  197. package/dist/src/{modelslab-CNV5bMSk.cjs → modelslab-Cvh0klQx.cjs} +4 -4
  198. package/dist/src/{nova-reel-BGPNBOMS.js → nova-reel-CUDDZcSA.js} +3 -3
  199. package/dist/src/{nova-reel-B_5NKFu1.js → nova-reel-CyDESu5J.js} +3 -3
  200. package/dist/src/{nova-reel-CjJRxI1X.cjs → nova-reel-DH_Ksu6X.cjs} +3 -3
  201. package/dist/src/{nova-reel-C4eUJGse.js → nova-reel-YQAqUYJY.js} +3 -3
  202. package/dist/src/{nova-sonic-ChPlh5na.js → nova-sonic-BVFFB7JZ.js} +2 -2
  203. package/dist/src/{nova-sonic-DuOG9Aun.cjs → nova-sonic-Bg3cxMMu.cjs} +2 -2
  204. package/dist/src/{nova-sonic-CrV0iaY_.js → nova-sonic-BhmnRGyh.js} +2 -2
  205. package/dist/src/{nova-sonic-BNGmgfFz.js → nova-sonic-DxmK95c1.js} +2 -2
  206. package/dist/src/{openclaw-Dphc01BY.cjs → openclaw-CHQaZi_-.cjs} +6 -6
  207. package/dist/src/{openclaw-zIJAsz3P.js → openclaw-CWOm2eOr.js} +6 -6
  208. package/dist/src/{openclaw-CF7fMido.js → openclaw-Cdk9JKfY.js} +6 -6
  209. package/dist/src/{openclaw-BIHlu_36.js → openclaw-DhF8rUpI.js} +6 -6
  210. package/dist/src/{opencode-sdk-B3vlPLsp.js → opencode-sdk-BRjiPV-g.js} +2 -2
  211. package/dist/src/{opencode-sdk-DoY6GbWw.cjs → opencode-sdk-CPFMw0ed.cjs} +2 -2
  212. package/dist/src/{opencode-sdk-sRKYHGoI.js → opencode-sdk-CaSOCsBA.js} +2 -2
  213. package/dist/src/{opencode-sdk-D05JSgMQ.js → opencode-sdk-CqkyG8De.js} +2 -2
  214. package/dist/src/{promptfoo-Rjp-MeBb.js → promptfoo-BU4_0J85.js} +64 -7
  215. package/dist/src/{promptfoo-BDrfT30-.js → promptfoo-CReYAtfb.js} +64 -7
  216. package/dist/src/{promptfoo-b-baRMj-.cjs → promptfoo-ClChwT74.cjs} +93 -6
  217. package/dist/src/{promptfoo-Cm4hiy1Y.js → promptfoo-CqEpj6Sr.js} +64 -7
  218. package/dist/src/{providers-B9KzWxAX.js → providers-B7TyByfj.js} +94 -50
  219. package/dist/src/{providers-DVYRZP4E.js → providers-BGc7tDtQ.js} +93 -49
  220. package/dist/src/{providers-BYAn82cf.js → providers-CSOp-bCm.js} +1 -1
  221. package/dist/src/{providers-BDVVIQM6.cjs → providers-V6RBuieY.cjs} +93 -49
  222. package/dist/src/{providers-BCCz6_IX.js → providers-iH3Sw1yo.js} +93 -49
  223. package/dist/src/{quiverai-BvIhI_0l.js → quiverai-58BtRRet.js} +3 -3
  224. package/dist/src/{quiverai-Cv7rJKDz.js → quiverai-C1dYu5MW.js} +3 -3
  225. package/dist/src/{quiverai-CdTWPe-A.js → quiverai-CNMIpZQg.js} +3 -3
  226. package/dist/src/{quiverai-BAp6iTZD.cjs → quiverai-fmSfU43k.cjs} +3 -3
  227. package/dist/src/{registry-KCVF1CFC.cjs → registry-6Jw6ebor.cjs} +14 -14
  228. package/dist/src/{registry-BUJrgjwv.js → registry-BTGk2ZkB.js} +14 -14
  229. package/dist/src/{registry-DXm1t_x0.js → registry-BTNqmP5o.js} +14 -14
  230. package/dist/src/{registry-Dp5EqoXc.js → registry-NGnOG2xa.js} +14 -14
  231. package/dist/src/{remoteGeneration-COpWcmWd.js → remoteGeneration--D6WjzUm.js} +4 -4
  232. package/dist/src/{remoteGeneration-DS9N3pgB.cjs → remoteGeneration-BpIYlb_O.cjs} +4 -4
  233. package/dist/src/{remoteGeneration-DsaSwmG2.js → remoteGeneration-CJC3E0aW.js} +4 -4
  234. package/dist/src/{remoteGeneration-B1_XsKXU.js → remoteGeneration-D6UjE2JT.js} +4 -4
  235. package/dist/src/{responses-B6ktc3Ra.js → responses-5Gf5HNOi.js} +9 -5
  236. package/dist/src/{responses-URRzV8qE.js → responses-BVi7xIdv.js} +9 -5
  237. package/dist/src/{responses-1UFFF9N_.cjs → responses-CUARGrhY.cjs} +9 -5
  238. package/dist/src/{responses-B3W2JvOQ.js → responses-CrmWv6iz.js} +9 -5
  239. package/dist/src/{sagemaker-DzffAqo_.cjs → sagemaker-BeVTKfrv.cjs} +9 -9
  240. package/dist/src/{sagemaker-yr1QKeBs.js → sagemaker-BwbV5U7_.js} +9 -9
  241. package/dist/src/{sagemaker-vhtSV7JI.js → sagemaker-ClAZ6Qwc.js} +9 -9
  242. package/dist/src/{sagemaker-CujrzP1a.js → sagemaker-DY2qrOpq.js} +9 -9
  243. package/dist/src/{scanner-DS0109SS.js → scanner-BS-iFIp3.js} +5 -5
  244. package/dist/src/server/index.js +111 -114
  245. package/dist/src/{server-B8rqV126.cjs → server-BHOEL8p8.cjs} +3 -3
  246. package/dist/src/{server-CMJD10J4.js → server-CbiJppij.js} +3 -3
  247. package/dist/src/server-D18AAlAc.js +3 -0
  248. package/dist/src/{server-DhMHosWj.js → server-DLYjSFm2.js} +5 -5
  249. package/dist/src/{server-Ddp8GNMp.js → server-JQYD_Nws.js} +5 -5
  250. package/dist/src/{shared-7pmVZLNO.js → shared-CRq0gGVf.js} +8 -8
  251. package/dist/src/{shared-D6IjElRI.js → shared-CSIGeGLl.js} +8 -8
  252. package/dist/src/{shared-9WHQ1oNE.js → shared-DNvim54U.js} +7 -7
  253. package/dist/src/{shared-WkgnDkcg.cjs → shared-aHWko3P1.cjs} +8 -8
  254. package/dist/src/{simulatedUser-U_qAHnuB.js → simulatedUser-C7sOFSF6.js} +5 -5
  255. package/dist/src/{simulatedUser-C9aQObBI.js → simulatedUser-DH_7RzEQ.js} +5 -5
  256. package/dist/src/{simulatedUser-p3tACcmw.js → simulatedUser-lgMMmniD.js} +5 -5
  257. package/dist/src/{simulatedUser-Cu601Dd4.cjs → simulatedUser-mnCUS9Bm.cjs} +5 -5
  258. package/dist/src/{storage-QdU-SmvD.js → storage-95htjpLs.js} +3 -3
  259. package/dist/src/{storage-CA-v9V2v.cjs → storage-A4WnAeN3.cjs} +3 -3
  260. package/dist/src/{storage-CD-GWAdx.js → storage-B2Ql_oq4.js} +3 -3
  261. package/dist/src/{storage-BU4qcnOb.js → storage-EKVWZBNY.js} +4 -4
  262. package/dist/src/{strategies-DRJjGTIY.js → strategies-CBI1brSy.js} +10 -10
  263. package/dist/src/{strategies-7CS3Alao.cjs → strategies-CCcnEbFO.cjs} +9 -9
  264. package/dist/src/{strategies-CiSeroPH.js → strategies-CD1gHeeQ.js} +9 -9
  265. package/dist/src/telemetry-BUm_krVX.js +3 -0
  266. package/dist/src/{telemetry-DmXYcJNV.js → telemetry-BbpmrenM.js} +4 -4
  267. package/dist/src/{telemetry-DwX9XUN5.js → telemetry-C4bX-6Sr.js} +4 -4
  268. package/dist/src/{telemetry-CJ7FnCsc.cjs → telemetry-C_ImlCOk.cjs} +4 -4
  269. package/dist/src/{telemetry-00ezXr_t.js → telemetry-DOE567Wj.js} +4 -4
  270. package/dist/src/{tracingOptions-ji2OuXbT.js → tracingOptions-BOP1FsRt.js} +2 -2
  271. package/dist/src/{tracingOptions-Chi74lOD.js → tracingOptions-BvmDa_jH.js} +2 -2
  272. package/dist/src/{tracingOptions-DrbSFaKy.cjs → tracingOptions-DFBoE8O0.cjs} +2 -2
  273. package/dist/src/{tracingOptions-BnwKCkSB.js → tracingOptions-xhjOg2b1.js} +2 -2
  274. package/dist/src/{transcription-Dkd22_4K.js → transcription-BOXDoehT.js} +4 -4
  275. package/dist/src/{transcription-CfU5loSq.js → transcription-CpVdKc4P.js} +4 -4
  276. package/dist/src/{transcription-mzuf18Mq.cjs → transcription-D8kkPXg_.cjs} +4 -4
  277. package/dist/src/{transcription-B8uIgCYX.js → transcription-Z94eV9LR.js} +4 -4
  278. package/dist/src/{transform-BIMynQsA.js → transform-BufxPIQL.js} +3 -3
  279. package/dist/src/{transform-DhNkAUs8.cjs → transform-DJkt81VY.cjs} +3 -3
  280. package/dist/src/{transform-EtD4jAWi.js → transform-DtTfiGoh.js} +3 -3
  281. package/dist/src/{transform-DmvYBRll.js → transform-Wp6s_5QE.js} +3 -3
  282. package/dist/src/{util-IYzs5Y04.cjs → util-BHCAeuXx.cjs} +3 -3
  283. package/dist/src/{util--WMgw7wM.js → util-CMrHV35u.js} +3 -3
  284. package/dist/src/{util-SPsvFONY.cjs → util-COnzevXE.cjs} +3 -3
  285. package/dist/src/{util-LKTmNsMQ.js → util-CYev3d-r.js} +16 -3
  286. package/dist/src/{util-Df8YMvS1.js → util-DGqkTb2-.js} +4 -4
  287. package/dist/src/{util-CN8om2rz.cjs → util-DNtUsus_.cjs} +4 -4
  288. package/dist/src/{util-Bx677_k2.js → util-DRfqa4xz.js} +3 -3
  289. package/dist/src/{util-DiQ3QvBB.js → util-DTq3jq2z.js} +3 -3
  290. package/dist/src/{util-5WnCSb0h.js → util-DeY58psG.js} +16 -3
  291. package/dist/src/{util-DNl96nNs.js → util-DpV6KT5i.js} +4 -4
  292. package/dist/src/{util-I-Rf-KaD.js → util-DwNJzqOV.js} +3 -3
  293. package/dist/src/{util-kDURhgJW.js → util-ETfU_sS9.js} +4 -4
  294. package/dist/src/{util-BSIuSLVK.cjs → util-NYQvo1C7.cjs} +16 -3
  295. package/dist/src/{util-CoQWM76y.js → util-X4KQgyVD.js} +3 -3
  296. package/dist/src/{util-DURocbYR.js → util-jZRrXe1P.js} +3 -3
  297. package/dist/src/{util-efByNxcr.js → util-o2Qg5rZv.js} +16 -3
  298. package/dist/src/{version-BK20a4sw.js → version-CHR-EFec.js} +2 -2
  299. package/dist/src/{version-eRkNuGv8.js → version-F0YDgb7J.js} +2 -2
  300. package/dist/src/{version-BWCSaByA.cjs → version-VzUqOBZk.cjs} +2 -2
  301. package/dist/src/{version-lpHV_53E.js → version-qVEN5qCm.js} +2 -2
  302. package/dist/tsconfig.tsbuildinfo +1 -1
  303. package/package.json +5 -5
  304. package/dist/src/app/assets/Report-BNHJKN35.js +0 -1
  305. package/dist/src/cache-Cf7b4pWE.js +0 -3
  306. package/dist/src/cloud-p96PA4MH.js +0 -3
  307. package/dist/src/codex-sdk-BGjVAk23.js +0 -3
  308. package/dist/src/evalResult-DqzsS6_W.js +0 -3
  309. package/dist/src/evaluator-DNdJF1Gv.js +0 -3
  310. package/dist/src/fetch-_YgGd2qv.js +0 -3
  311. package/dist/src/graders-BDT7dif6.js +0 -3
  312. package/dist/src/server-BaLytskk.js +0 -3
  313. package/dist/src/telemetry-ByPqDcKC.js +0 -3
@@ -1,43 +1,43 @@
1
1
  import { t as __exportAll } from "../chunk-DEq-mXcV.js";
2
2
  import { C as getEnvFloat, D as getMaxEvalTimeMs, E as getEvalTimeoutMs, O as isCI, S as getEnvBool, T as getEnvString, a as logger, b as summarizeEvaluateResultForLogging, f as sanitizeObject, g as getAjv, h as extractJsonObjects, k as state, m as extractFirstJsonObject, n as globalLogCallback, o as setLogCallback, r as isDebugEnabled, s as setLogLevel, t as getLogLevel, v as orderKeys, w as getEnvInt, y as safeJsonStringify } from "../logger-KD8JjCRJ.js";
3
- import { F as getDefaultShareViewBaseUrl, I as getShareApiBaseUrl, L as getShareViewBaseUrl, N as TERMINAL_MAX_WIDTH, P as getDefaultPort, R as FILE_METADATA_KEY, S as isPromptfooSampleTarget, T as parseChatPrompt, c as CloudConfig, l as cloudConfig, m as sleep, n as fetchWithRetries, p as getCurrentTimestamp, r as fetchWithTimeout, t as fetchWithProxy, v as REQUEST_TIMEOUT_MS, z as HUMAN_ASSERTION_TYPE } from "../fetch-BufrQtvR.js";
4
- import { n as VERSION } from "../version-BK20a4sw.js";
3
+ import { F as getDefaultShareViewBaseUrl, I as getShareApiBaseUrl, L as getShareViewBaseUrl, N as TERMINAL_MAX_WIDTH, P as getDefaultPort, R as FILE_METADATA_KEY, S as isPromptfooSampleTarget, T as parseChatPrompt, c as CloudConfig, l as cloudConfig, m as sleep, n as fetchWithRetries, p as getCurrentTimestamp, r as fetchWithTimeout, t as fetchWithProxy, v as REQUEST_TIMEOUT_MS, z as HUMAN_ASSERTION_TYPE } from "../fetch-BSSAcMxf.js";
4
+ import { n as VERSION } from "../version-CHR-EFec.js";
5
5
  import { t as invariant } from "../invariant-DIYf9sP1.js";
6
- import { a as getAuthor, c as isLoggedIntoCloud, l as promptForEmailUnverified, n as checkEmailStatusAndMaybeExit, o as getUserEmail, r as clearUserEmail, s as getUserId, t as checkEmailStatus, u as setUserEmail } from "../accounts-DanM1wq_.js";
6
+ import { a as getAuthor, c as isLoggedIntoCloud, l as promptForEmailUnverified, n as checkEmailStatusAndMaybeExit, o as getUserEmail, r as clearUserEmail, s as getUserId, t as checkEmailStatus, u as setUserEmail } from "../accounts-BWjqwsrf.js";
7
7
  import { a as safeJoin, r as importModule, t as getDirectory } from "../esm-B6whoAcf.js";
8
8
  import { a as extractVariablesFromTemplates, i as extractVariablesFromTemplate, n as renderVarsInObject, o as getNunjucksEngine, r as analyzeTemplateReference, t as renderEnvOnlyInObject } from "../render-_6ur1fhE.js";
9
9
  import { t as providerRegistry } from "../providerRegistry-1gB5vtzQ.js";
10
- import { a as getRemoteHealthUrl, l as shouldGenerateRemote, n as getRemoteGenerationExplicitlyDisabledError, r as getRemoteGenerationUrl, s as neverGenerateRemote } from "../remoteGeneration-COpWcmWd.js";
11
- import { a as openBrowser, i as checkServerRunning, n as BrowserBehaviorNames, s as promptYesNo, t as BrowserBehavior } from "../server-Ddp8GNMp.js";
10
+ import { a as getRemoteHealthUrl, l as shouldGenerateRemote, n as getRemoteGenerationExplicitlyDisabledError, r as getRemoteGenerationUrl, s as neverGenerateRemote } from "../remoteGeneration--D6WjzUm.js";
11
+ import { a as openBrowser, i as checkServerRunning, n as BrowserBehaviorNames, s as promptYesNo, t as BrowserBehavior } from "../server-JQYD_Nws.js";
12
12
  import { a as evalResultsTable, c as evalsToPromptsTable, d as promptsTable, f as spansTable, g as getDbSignalPath, h as getDb, i as datasetsTable, l as evalsToTagsTable, m as tracesTable, n as blobReferencesTable, o as evalsTable, p as tagsTable, r as configsTable, s as evalsToDatasetsTable, t as blobAssetsTable, u as modelAuditsTable } from "../tables-CxjU7bBd.js";
13
13
  import { $ as MULTI_INPUT_EXCLUDED_PLUGINS, A as STRATEGY_COLLECTIONS, B as ALIASED_PLUGIN_MAPPINGS, E as ALL_STRATEGIES, F as isMultiTurnStrategy, G as DEFAULT_PLUGINS, H as BIAS_PLUGINS, I as Severity, J as HARM_PLUGINS, K as FINANCIAL_PLUGINS, L as categoryAliases, M as getDefaultNFanout, N as isCustomStrategy, O as DEFAULT_STRATEGIES, P as isFanoutStrategy, Q as MEDICAL_PLUGINS, S as StrategyConfigSchema, T as AGENTIC_STRATEGIES, U as CANARY_BREAKING_STRATEGY_IDS, V as ALL_PLUGINS, W as DATASET_EXEMPT_PLUGINS, X as LLAMA_GUARD_ENABLED_CATEGORIES, Y as INSURANCE_PLUGINS, Z as LLAMA_GUARD_REPLICATE_PROVIDER, _ as ProvidersSchema, a as EvaluateOptionsSchema, at as REDTEAM_PROVIDER_HARM_PLUGINS, b as PluginConfigSchema, c as TestSuiteConfigSchema, ct as TEEN_SAFETY_PLUGINS, d as isGradingResult, dt as CODING_AGENT_CORE_PLUGINS, et as MULTI_INPUT_VAR, f as isResultFailureReason, ft as CODING_AGENT_PLUGINS, g as ProviderOptionsSchema, h as RedteamConfigSchema, ht as PromptSchema, i as EvalResultsFilterMode, it as REDTEAM_MODEL, j as STRATEGY_COLLECTION_MAPPINGS, k as MULTI_TURN_STRATEGIES, l as TestSuiteSchema, lt as TELECOM_PLUGINS, m as isProviderOptions, n as BaseAssertionTypesSchema, nt as PII_PLUGINS, ot as REMOTE_ONLY_PLUGIN_IDS, p as isApiProvider, q as FOUNDATION_PLUGINS, r as CommandLineOptionsSchema, rt as PLUGIN_CATEGORIES, s as ResultFailureReason, st as STRATEGY_EXEMPT_PLUGINS, t as AssertionOrSetSchema, tt as PHARMACY_PLUGINS, u as UnifiedConfigSchema, ut as UNALIGNED_PROVIDER_HARM_PLUGINS, v as ConversationMessageSchema, w as isUuid, y as PartialGenerationError, z as riskCategorySeverityMap } from "../types-BJQBBPTP.js";
14
14
  import { a as isImageFile, i as isAudioFile, o as isJavascriptFile, s as isVideoFile } from "../shared-BoG7qLMv.js";
15
15
  import { n as sha256, t as randomSequence } from "../createHash-CGVzWdjj.js";
16
16
  import { a as generateIdFromPrompt, t as hashPrompt } from "../utils-B0lzitHZ.js";
17
- import { c as NON_TRANSIENT_HTTP_STATUSES, i as getCache, l as isNonTransientHttpStatus, n as disableCache, r as fetchWithCache, s as withCacheNamespace, t as cache_exports } from "../cache-roFAE0cI.js";
17
+ import { c as NON_TRANSIENT_HTTP_STATUSES, i as getCache, l as isNonTransientHttpStatus, n as disableCache, r as fetchWithCache, s as withCacheNamespace, t as cache_exports } from "../cache-CrioYnaa.js";
18
18
  import { a as createEmptyTokenUsage, i as createEmptyAssertions, n as accumulateResponseTokenUsage, o as normalizeTokenUsage, r as accumulateTokenUsage, t as accumulateAssertionTokenUsage } from "../tokenUsageUtils-BjVkdk18.js";
19
19
  import { n as getBlobUrl, t as getBlobByHash } from "../blobs-CeFdPn_T.js";
20
- import { n as isBlobStorageEnabled, t as extractAndStoreBinaryData } from "../extractor-BR7XAzAL.js";
21
- import { a as storeMedia, c as getEvalConfigFromCloud, h as resolveTeamId, i as retrieveMedia, l as getOrgContext, m as makeRequest$1, n as isMediaStorageEnabled, o as checkCloudPermissions, p as isCloudProvider, r as mediaExists, s as getCloudDatabaseId, t as getMediaStorage, u as getPluginSeverityOverridesFromCloud } from "../storage-QdU-SmvD.js";
22
- import { n as telemetry, t as TelemetryEventSchema } from "../telemetry-DmXYcJNV.js";
20
+ import { n as isBlobStorageEnabled, t as extractAndStoreBinaryData } from "../extractor-Jp53vs-6.js";
21
+ import { a as storeMedia, c as getEvalConfigFromCloud, h as resolveTeamId, i as retrieveMedia, l as getOrgContext, m as makeRequest$1, n as isMediaStorageEnabled, o as checkCloudPermissions, p as isCloudProvider, r as mediaExists, s as getCloudDatabaseId, t as getMediaStorage, u as getPluginSeverityOverridesFromCloud } from "../storage-95htjpLs.js";
22
+ import { n as telemetry, t as TelemetryEventSchema } from "../telemetry-BbpmrenM.js";
23
23
  import { r as runPython } from "../pythonUtils-CLCgQ9tt.js";
24
- import { A as maybeLoadConfigFromExternalFile, C as isProviderAllowed, E as normalizeProviderRef, I as readFilters, L as readOutput, P as maybeLoadToolsFromExternalFile, R as loadFunction, S as isOpenAiProvider, _ as checkProviderApiKeys, a as evalTableToJson, b as isAnthropicProvider, c as getEvalTablePromptStrippedPayload, d as setupEnv, f as deduplicateTestCases, g as resultIsForTestCase, h as getTestCaseDeduplicationKey, i as ComparisonEvalNotFoundError, j as maybeLoadFromExternalFile, l as mergeComparisonTables, m as filterRuntimeVars, n as writeMultipleOutputs, o as generateEvalCsv, p as extractRuntimeVars, r as writeOutput, s as getEvalTableOutputPromptLocationsBySize, t as printBorder, u as fetchCsvFromGoogleSheet, v as doesProviderRefMatch, x as isGoogleProvider, y as getProviderDescription, z as parseFileUrl } from "../util-I-Rf-KaD.js";
25
- import { t as OpenAiChatCompletionProvider } from "../chat-CUCorGiL.js";
26
- import { h as validateFunctionCall } from "../transform-BIMynQsA.js";
27
- import { $ as SUGGEST_PROMPTS_SYSTEM_MESSAGE, A as ExcessiveAgencyPlugin, At as DEFAULT_ANTHROPIC_MODEL, B as isGraderFailure, C as PlinyPlugin, Ct as getGradingProvider, D as ImitationPlugin, Dt as retryWithDeduplication, E as IntentPlugin, Et as getCustomPolicies, F as BeavertailsPlugin, G as matchesPiScore, H as matchesFactuality, I as AegisPlugin, J as processPrompts, K as matchesTrajectoryGoalSuccess, L as RedteamGraderBase, M as DebugAccessPlugin, N as CrossSessionLeakPlugin, O as HarmbenchPlugin, Ot as sampleArray, P as ContractPlugin, Q as SELECT_BEST_PROMPT, R as RedteamPluginBase, S as makeInlinePolicyIdSync, St as getAndCheckProvider, T as OverreliancePlugin, Tt as withProviderCallExecutionContext, U as matchesGEval, V as matchesClosedQa, W as matchesLlmRubric, X as readProviderPromptMap, Y as readPrompts, Z as DEFAULT_WEB_SEARCH_PROMPT, _ as PromptExtractionPlugin, _t as coerceString, a as VLGuardPlugin, at as CONTEXT_RECALL_NOT_ATTRIBUTED_TOKEN, b as determinePolicyTypeFromId, bt as processFileReference, c as ToxicChatPlugin, ct as loadRubricPrompt, d as TeenSafetyDangerousRoleplayPlugin, dt as dotProduct, et as ANSWER_RELEVANCY_GENERATE, f as TeenSafetyDangerousContentPlugin, ft as euclideanDistance, g as RbacPlugin, gt as tryParse, h as ShellInjectionPlugin, ht as splitIntoSentences, i as VLSUPlugin, it as CONTEXT_RECALL_ATTRIBUTED_TOKEN, j as DivergentRepetitionPlugin, k as HallucinationPlugin, kt as getDefaultProviders, l as ToolDiscoveryPlugin, lt as renderLlmRubricPrompt, m as SqlInjectionPlugin, mt as normalizeMatcherTokenUsage, n as getGraderById, nt as CONTEXT_FAITHFULNESS_NLI_STATEMENTS, o as UnverifiableClaimsPlugin, ot as CONTEXT_RELEVANCE, p as TeenSafetyAgeRestrictedGoodsAndServicesPlugin, pt as fail, q as doRemoteGrading, rt as CONTEXT_RECALL, s as UnsafeBenchPlugin, st as CONTEXT_RELEVANCE_BAD, t as GRADERS, tt as CONTEXT_FAITHFULNESS_LONGFORM, u as TeenSafetyHarmfulBodyIdealsPlugin, ut as cosineSimilarity, v as PoliticsPlugin, vt as getFinalTest, w as getPiiLeakTestsForCategory, wt as getProviderCallExecutionContext, x as isValidPolicyObject, xt as callProviderWithContext, y as PolicyPlugin, yt as loadFromJavaScriptFile, z as fetchHuggingFaceDataset } from "../graders-C0nXU_ZP.js";
28
- import { a as resolveProvider, b as AIStudioChatProvider, d as createTransformRequest, f as createTransformResponse, l as MCPProvider, n as loadApiProvider, o as resolveProviderConfigs, p as GoogleLiveProvider, r as loadApiProviders, t as getProviderIds, u as HttpProvider, y as VertexChatProvider } from "../providers-BCCz6_IX.js";
29
- import { l as validateFunctionCall$1 } from "../util-efByNxcr.js";
24
+ import { A as maybeLoadConfigFromExternalFile, C as isProviderAllowed, E as normalizeProviderRef, I as readFilters, L as readOutput, P as maybeLoadToolsFromExternalFile, R as loadFunction, S as isOpenAiProvider, _ as checkProviderApiKeys, a as evalTableToJson, b as isAnthropicProvider, c as getEvalTablePromptStrippedPayload, d as setupEnv, f as deduplicateTestCases, g as resultIsForTestCase, h as getTestCaseDeduplicationKey, i as ComparisonEvalNotFoundError, j as maybeLoadFromExternalFile, l as mergeComparisonTables, m as filterRuntimeVars, n as writeMultipleOutputs, o as generateEvalCsv, p as extractRuntimeVars, r as writeOutput, s as getEvalTableOutputPromptLocationsBySize, t as printBorder, u as fetchCsvFromGoogleSheet, v as doesProviderRefMatch, x as isGoogleProvider, y as getProviderDescription, z as parseFileUrl } from "../util-DwNJzqOV.js";
25
+ import { t as OpenAiChatCompletionProvider } from "../chat-BSos6PvZ.js";
26
+ import { h as validateFunctionCall } from "../transform-BufxPIQL.js";
27
+ import { $ as SUGGEST_PROMPTS_SYSTEM_MESSAGE, A as ExcessiveAgencyPlugin, At as DEFAULT_ANTHROPIC_MODEL, B as isGraderFailure, C as PlinyPlugin, Ct as getGradingProvider, D as ImitationPlugin, Dt as retryWithDeduplication, E as IntentPlugin, Et as getCustomPolicies, F as BeavertailsPlugin, G as matchesPiScore, H as matchesFactuality, I as AegisPlugin, J as processPrompts, K as matchesTrajectoryGoalSuccess, L as RedteamGraderBase, M as DebugAccessPlugin, N as CrossSessionLeakPlugin, O as HarmbenchPlugin, Ot as sampleArray, P as ContractPlugin, Q as SELECT_BEST_PROMPT, R as RedteamPluginBase, S as makeInlinePolicyIdSync, St as getAndCheckProvider, T as OverreliancePlugin, Tt as withProviderCallExecutionContext, U as matchesGEval, V as matchesClosedQa, W as matchesLlmRubric, X as readProviderPromptMap, Y as readPrompts, Z as DEFAULT_WEB_SEARCH_PROMPT, _ as PromptExtractionPlugin, _t as coerceString, a as VLGuardPlugin, at as CONTEXT_RECALL_NOT_ATTRIBUTED_TOKEN, b as determinePolicyTypeFromId, bt as processFileReference, c as ToxicChatPlugin, ct as loadRubricPrompt, d as TeenSafetyDangerousRoleplayPlugin, dt as dotProduct, et as ANSWER_RELEVANCY_GENERATE, f as TeenSafetyDangerousContentPlugin, ft as euclideanDistance, g as RbacPlugin, gt as tryParse, h as ShellInjectionPlugin, ht as splitIntoSentences, i as VLSUPlugin, it as CONTEXT_RECALL_ATTRIBUTED_TOKEN, j as DivergentRepetitionPlugin, k as HallucinationPlugin, kt as getDefaultProviders, l as ToolDiscoveryPlugin, lt as renderLlmRubricPrompt, m as SqlInjectionPlugin, mt as normalizeMatcherTokenUsage, n as getGraderById, nt as CONTEXT_FAITHFULNESS_NLI_STATEMENTS, o as UnverifiableClaimsPlugin, ot as CONTEXT_RELEVANCE, p as TeenSafetyAgeRestrictedGoodsAndServicesPlugin, pt as fail, q as doRemoteGrading, rt as CONTEXT_RECALL, s as UnsafeBenchPlugin, st as CONTEXT_RELEVANCE_BAD, t as GRADERS, tt as CONTEXT_FAITHFULNESS_LONGFORM, u as TeenSafetyHarmfulBodyIdealsPlugin, ut as cosineSimilarity, v as PoliticsPlugin, vt as getFinalTest, w as getPiiLeakTestsForCategory, wt as getProviderCallExecutionContext, x as isValidPolicyObject, xt as callProviderWithContext, y as PolicyPlugin, yt as loadFromJavaScriptFile, z as fetchHuggingFaceDataset } from "../graders-DaRU98zs.js";
28
+ import { a as resolveProvider, b as AIStudioChatProvider, d as createTransformRequest, f as createTransformResponse, l as MCPProvider, n as loadApiProvider, o as resolveProviderConfigs, p as GoogleLiveProvider, r as loadApiProviders, t as getProviderIds, u as HttpProvider, y as VertexChatProvider } from "../providers-iH3Sw1yo.js";
29
+ import { l as validateFunctionCall$1 } from "../util-o2Qg5rZv.js";
30
30
  import { t as ellipsize } from "../text-CZr46tp_.js";
31
31
  import { t as getProcessShim } from "../processShim-C_z3aRvF.js";
32
32
  import { n as loadFromPackage, t as isPackagePath } from "../packageParser-hwwSGnAZ.js";
33
33
  import { n as runRuby } from "../rubyUtils-DdGojpfv.js";
34
- import { n as createPlaceholderInputValue, r as materializeInputVariablesWithMetadata, t as buildPromptInputDescriptions } from "../inputVariables-B0qUChbV.js";
35
- import { a as extractPromptFromTags, c as isBasicRefusal, i as extractMaterializedVariablesFromJsonWithMetadata, n as extractGoalFromPrompt, o as getSessionId, r as extractInputVarsFromPrompt, s as getShortPluginId } from "../util-Df8YMvS1.js";
36
- import { n as PromptfooHarmfulCompletionProvider } from "../promptfoo-BDrfT30-.js";
37
- import { f as redteamProviderManager, g as createProviderRateLimitOptions, h as createRateLimitRegistry, m as TokenUsageTracker } from "../shared-7pmVZLNO.js";
34
+ import { n as createPlaceholderInputValue, t as buildPromptInputDescriptions } from "../inputVariables-B0qUChbV.js";
35
+ import { a as extractPromptFromTags, c as isBasicRefusal, i as extractMaterializedVariablesFromJsonWithMetadata, n as extractGoalFromPrompt, o as getSessionId, s as getShortPluginId } from "../util-DGqkTb2-.js";
36
+ import { a as assertRemoteMaterializationHandled, l as requiresRemoteMaterialization, n as PromptfooHarmfulCompletionProvider } from "../promptfoo-CReYAtfb.js";
37
+ import { f as redteamProviderManager, g as createProviderRateLimitOptions, h as createRateLimitRegistry, m as TokenUsageTracker } from "../shared-CRq0gGVf.js";
38
38
  import { a as getTransformLabel, i as getTransformErrorMessage, n as TRANSFORM_KEYS, o as transform, r as TransformInputType, t as INLINE_FUNCTION_LABEL } from "../transform-CrPGTsij.js";
39
39
  import { i as throwIfTargetPromptExceedsMaxChars, n as getGeneratedPromptOverLimit, r as getMaxCharsPerMessageModifierValue, t as MAX_CHARS_PER_MESSAGE_MODIFIER_KEY } from "../promptLength-0qIHyhA5.js";
40
- import { n as checkExfilTracking, t as addIndirectWebPwnTestCases } from "../indirectWebPwn-tNx9OZ35.js";
40
+ import { n as checkExfilTracking, t as addIndirectWebPwnTestCases } from "../indirectWebPwn-BZFPV7Q9.js";
41
41
  import dotenv from "dotenv";
42
42
  import { AsyncResource } from "node:async_hooks";
43
43
  import * as fs$3 from "fs";
@@ -10722,7 +10722,7 @@ async function resolveDefaultTestProvider(defaultTest, testCase) {
10722
10722
  const defaultProvider = defaultTest.provider;
10723
10723
  if (isApiProvider(defaultProvider)) return defaultProvider;
10724
10724
  if (typeof defaultProvider === "object" && defaultProvider.id) {
10725
- const { loadApiProvider } = await import("../providers-BCCz6_IX.js").then((n) => n.i);
10725
+ const { loadApiProvider } = await import("../providers-iH3Sw1yo.js").then((n) => n.i);
10726
10726
  return loadApiProvider(typeof defaultProvider.id === "function" ? defaultProvider.id() : defaultProvider.id, { options: defaultProvider });
10727
10727
  }
10728
10728
  return defaultProvider;
@@ -14872,6 +14872,7 @@ async function fetchRemoteTestCases(key, purpose, injectVar, n, config) {
14872
14872
  logger.error(`Error generating test cases for ${key}: ${statusText} ${JSON.stringify(data)}`);
14873
14873
  return [];
14874
14874
  }
14875
+ if (requiresRemoteMaterialization(config?.inputs)) assertRemoteMaterializationHandled(data, `Remote plugin generation for ${key}`);
14875
14876
  const ret = data.result;
14876
14877
  logger.debug(`Received remote generation for ${key}:\n${JSON.stringify(ret)}`);
14877
14878
  return ret;
@@ -14880,31 +14881,6 @@ async function fetchRemoteTestCases(key, purpose, injectVar, n, config) {
14880
14881
  return [];
14881
14882
  }
14882
14883
  }
14883
- async function materializeRemoteTestCaseInputs({ config, injectVar, pluginId, provider, purpose, testCases }) {
14884
- const inputs = config.inputs;
14885
- if (!inputs || Object.keys(inputs).length === 0) return testCases;
14886
- return Promise.all(testCases.map(async (testCase, materializationIndex) => {
14887
- const inputVars = extractInputVarsFromPrompt(String(testCase.vars?.[injectVar] ?? ""), inputs);
14888
- if (!inputVars) return testCase;
14889
- const materializedVars = await materializeInputVariablesWithMetadata(inputVars, inputs, {
14890
- materializationIndex,
14891
- pluginId,
14892
- provider,
14893
- purpose
14894
- });
14895
- return {
14896
- ...testCase,
14897
- vars: {
14898
- ...testCase.vars || {},
14899
- ...materializedVars.vars
14900
- },
14901
- metadata: {
14902
- ...testCase.metadata || {},
14903
- ...materializedVars.metadata ? { inputMaterialization: materializedVars.metadata } : {}
14904
- }
14905
- };
14906
- }));
14907
- }
14908
14884
  function createPluginFactory(PluginClass, key, validate) {
14909
14885
  return {
14910
14886
  key,
@@ -14916,14 +14892,7 @@ function createPluginFactory(PluginClass, key, validate) {
14916
14892
  return new PluginClass(provider, purpose, injectVar, configWithDefaults).generateTests(n, delayMs);
14917
14893
  }
14918
14894
  const pluginId = getShortPluginId(key);
14919
- const testCases = await materializeRemoteTestCaseInputs({
14920
- config: configWithDefaults ?? {},
14921
- injectVar,
14922
- pluginId,
14923
- provider,
14924
- purpose,
14925
- testCases: await fetchRemoteTestCases(key, purpose, injectVar, n, configWithDefaults ?? {})
14926
- });
14895
+ const testCases = await fetchRemoteTestCases(key, purpose, injectVar, n, configWithDefaults ?? {});
14927
14896
  const computedModifiers = computeModifiersFromConfig(configWithDefaults);
14928
14897
  return testCases.map((testCase) => ({
14929
14898
  ...testCase,
@@ -15010,14 +14979,7 @@ const piiPlugins = PII_PLUGINS.map((category) => ({
15010
14979
  action: async (params) => {
15011
14980
  if (shouldGenerateRemote()) {
15012
14981
  const pluginId = getShortPluginId(category);
15013
- const testCases = await materializeRemoteTestCaseInputs({
15014
- config: params.config ?? {},
15015
- injectVar: params.injectVar,
15016
- pluginId,
15017
- provider: params.provider,
15018
- purpose: params.purpose,
15019
- testCases: await fetchRemoteTestCases(category, params.purpose, params.injectVar, params.n, params.config ?? {})
15020
- });
14982
+ const testCases = await fetchRemoteTestCases(category, params.purpose, params.injectVar, params.n, params.config ?? {});
15021
14983
  const computedModifiers = computeModifiersFromConfig(params.config);
15022
14984
  return testCases.map((testCase) => ({
15023
14985
  ...testCase,
@@ -15049,14 +15011,7 @@ const biasPlugins = BIAS_PLUGINS.map((category) => ({
15049
15011
  return [];
15050
15012
  }
15051
15013
  const pluginId = getShortPluginId(category);
15052
- const testCases = await materializeRemoteTestCaseInputs({
15053
- config: params.config ?? {},
15054
- injectVar: params.injectVar,
15055
- pluginId,
15056
- provider: params.provider,
15057
- purpose: params.purpose,
15058
- testCases: await fetchRemoteTestCases(category, params.purpose, params.injectVar, params.n, params.config ?? {})
15059
- });
15014
+ const testCases = await fetchRemoteTestCases(category, params.purpose, params.injectVar, params.n, params.config ?? {});
15060
15015
  const computedModifiers = computeModifiersFromConfig(params.config);
15061
15016
  return testCases.map((testCase) => ({
15062
15017
  ...testCase,
@@ -15075,21 +15030,14 @@ function createRemotePlugin(key, validate) {
15075
15030
  return {
15076
15031
  key,
15077
15032
  validate,
15078
- action: async ({ provider, purpose, injectVar, n, config }) => {
15033
+ action: async ({ purpose, injectVar, n, config }) => {
15079
15034
  const configWithDefaults = applyDefaultRemotePluginConfig(key, config);
15080
15035
  if (neverGenerateRemote()) {
15081
15036
  logger.error(getRemoteGenerationExplicitlyDisabledError(`${key} plugin`));
15082
15037
  return [];
15083
15038
  }
15084
15039
  const pluginId = getShortPluginId(key);
15085
- const testCases = await materializeRemoteTestCaseInputs({
15086
- config: configWithDefaults ?? {},
15087
- injectVar,
15088
- pluginId,
15089
- provider,
15090
- purpose,
15091
- testCases: await fetchRemoteTestCases(key, purpose, injectVar, n, configWithDefaults ?? {})
15092
- });
15040
+ const testCases = await fetchRemoteTestCases(key, purpose, injectVar, n, configWithDefaults ?? {});
15093
15041
  const computedModifiers = computeModifiersFromConfig(configWithDefaults);
15094
15042
  const testsWithMetadata = testCases.map((testCase) => ({
15095
15043
  ...testCase,
@@ -17462,6 +17410,15 @@ async function loadStrategy(strategyPath) {
17462
17410
  }
17463
17411
  //#endregion
17464
17412
  //#region src/redteam/index.ts
17413
+ const MATERIALIZED_MULTI_INPUT_PROMPT_METADATA_KEY = "__promptfooMaterializedMultiInputPrompt";
17414
+ function getMaterializedMultiInputPromptSnapshot(metadata) {
17415
+ const snapshot = metadata?.[MATERIALIZED_MULTI_INPUT_PROMPT_METADATA_KEY];
17416
+ return typeof snapshot === "string" ? snapshot : void 0;
17417
+ }
17418
+ function getMaterializedMultiInputPromptMetadata(vars) {
17419
+ const prompt = vars?.[MULTI_INPUT_VAR];
17420
+ return typeof prompt === "string" ? { [MATERIALIZED_MULTI_INPUT_PROMPT_METADATA_KEY]: prompt } : void 0;
17421
+ }
17465
17422
  function getPolicyText(metadata) {
17466
17423
  if (!metadata || metadata.policy === void 0 || metadata.policy === null) return;
17467
17424
  const policyValue = metadata.policy;
@@ -17474,12 +17431,19 @@ function getPolicyText(metadata) {
17474
17431
  async function rematerializeStrategyInputVars(testCase, injectVar, provider, purpose, materializationIndex) {
17475
17432
  const inputs = testCase.metadata?.pluginConfig?.inputs;
17476
17433
  const inputMaterialization = testCase.metadata?.inputMaterialization;
17477
- if (!inputs || Object.keys(inputs).length === 0 || !testCase.vars?.[injectVar]) return {
17434
+ const materializedPromptSnapshot = getMaterializedMultiInputPromptSnapshot(testCase.metadata);
17435
+ const currentInjectVar = testCase.vars?.[injectVar];
17436
+ if (!inputs || Object.keys(inputs).length === 0 || !currentInjectVar) return {
17437
+ inputMaterialization,
17438
+ vars: testCase.vars
17439
+ };
17440
+ const promptChangedSinceMaterialization = typeof currentInjectVar === "string" && typeof materializedPromptSnapshot === "string" && currentInjectVar !== materializedPromptSnapshot;
17441
+ if (Boolean(inputMaterialization) && Object.keys(inputs).every((key) => Object.prototype.hasOwnProperty.call(testCase.vars ?? {}, key)) && !promptChangedSinceMaterialization) return {
17478
17442
  inputMaterialization,
17479
17443
  vars: testCase.vars
17480
17444
  };
17481
17445
  try {
17482
- const materializedVars = await extractMaterializedVariablesFromJsonWithMetadata(JSON.parse(String(testCase.vars[injectVar])), inputs, {
17446
+ const materializedVars = await extractMaterializedVariablesFromJsonWithMetadata(JSON.parse(String(currentInjectVar)), inputs, {
17483
17447
  materializationIndex,
17484
17448
  pluginId: String(testCase.metadata?.pluginId || "unknown-plugin"),
17485
17449
  provider,
@@ -17711,7 +17675,8 @@ function addLanguageToPluginMetadata(test, lang, plugin, maxCharsPerMessage, tes
17711
17675
  ...test.metadata?.modifiers,
17712
17676
  ...languageToAdd
17713
17677
  },
17714
- ...languageToAdd
17678
+ ...languageToAdd,
17679
+ ...getMaterializedMultiInputPromptMetadata(test.vars)
17715
17680
  }
17716
17681
  };
17717
17682
  }
@@ -17810,7 +17775,8 @@ async function applyStrategies(testCases, strategies, injectVar, provider, purpo
17810
17775
  ...t?.metadata?.pluginId && { pluginId: t.metadata.pluginId },
17811
17776
  ...t?.metadata?.pluginConfig && { pluginConfig: t.metadata.pluginConfig },
17812
17777
  ...inputMaterialization && { inputMaterialization },
17813
- ...Object.keys(strategyConfig).length > 0 && { strategyConfig }
17778
+ ...Object.keys(strategyConfig).length > 0 && { strategyConfig },
17779
+ ...getMaterializedMultiInputPromptMetadata(vars)
17814
17780
  }
17815
17781
  };
17816
17782
  })));
@@ -18156,14 +18122,21 @@ async function synthesize({ abortSignal, delay, entities: entitiesOverride, inje
18156
18122
  }
18157
18123
  });
18158
18124
  const languageResults = await Promise.allSettled(languagePromises);
18159
- for (const result of languageResults) if (result.status === "fulfilled") {
18125
+ for (const [index, result] of languageResults.entries()) if (result.status === "fulfilled") {
18160
18126
  const { lang, tests, requested, generated } = result.value;
18161
18127
  allPluginTests.push(...tests);
18162
18128
  resultsPerLanguage[lang || "default"] = {
18163
18129
  requested,
18164
18130
  generated
18165
18131
  };
18166
- } else logger.warn(`[Language Processing] Error generating tests for ${plugin.id}: ${result.reason}`);
18132
+ } else {
18133
+ const lang = languages[index];
18134
+ logger.warn(`[Language Processing] Error generating tests for ${plugin.id}: ${result.reason}`);
18135
+ resultsPerLanguage[lang || "default"] = {
18136
+ requested: plugin.numTests,
18137
+ generated: 0
18138
+ };
18139
+ }
18167
18140
  logger.debug(`[Language Processing] Total tests generated for ${plugin.id}: ${allPluginTests.length} (across ${languages.length} language(s))`);
18168
18141
  if (!Array.isArray(allPluginTests) || allPluginTests.length === 0) logger.warn(`Failed to generate tests for ${plugin.id}`);
18169
18142
  else {
@@ -18197,35 +18170,51 @@ async function synthesize({ abortSignal, delay, entities: entitiesOverride, inje
18197
18170
  generated: allPluginTests.length
18198
18171
  };
18199
18172
  } else if (plugin.id.startsWith("file://")) try {
18200
- const customTests = await new CustomPlugin(redteamProvider, purpose, injectVar, plugin.id, resolvePluginConfigWithMaxChars(plugin.config, maxCharsPerMessage)).generateTests(plugin.numTests, delay);
18201
- const testCasesWithMetadata = filterOversizedTestCases(customTests.map((t) => {
18202
- const includePluginConfig = !(t.metadata && Object.hasOwn(t.metadata, "pluginConfig") && t.metadata.pluginConfig === void 0);
18203
- const pluginConfigWithMaxChars = {
18173
+ const languageConfig = plugin.config?.language ?? language;
18174
+ const languages = Array.isArray(languageConfig) ? languageConfig : languageConfig ? [languageConfig] : [void 0];
18175
+ const allCustomTests = [];
18176
+ const resultsPerLanguage = {};
18177
+ const languagePromises = languages.map(async (lang) => {
18178
+ const resolvedConfig = {
18204
18179
  ...resolvePluginConfigWithMaxChars(plugin.config, maxCharsPerMessage),
18205
- ...t.metadata?.pluginConfig ?? {}
18180
+ ...lang ? { language: lang } : {},
18181
+ ...hasMultipleInputs ? { inputs } : {}
18206
18182
  };
18207
- const modifiers = {
18208
- ...buildRedteamModifiers({
18183
+ const customPluginConfig = {
18184
+ ...resolvedConfig,
18185
+ modifiers: buildRedteamModifiers({
18209
18186
  maxCharsPerMessage,
18210
- pluginConfig: pluginConfigWithMaxChars,
18187
+ pluginConfig: resolvedConfig,
18211
18188
  testGenerationInstructions
18212
- }),
18213
- ...t.metadata?.modifiers
18189
+ })
18214
18190
  };
18191
+ const testCasesWithMetadata = filterOversizedTestCases((await new CustomPlugin(redteamProvider, purpose, injectVar, plugin.id, customPluginConfig).generateTests(plugin.numTests, delay)).map((t) => addLanguageToPluginMetadata(t, lang, plugin, maxCharsPerMessage, testGenerationInstructions)), injectVar, `Custom plugin ${plugin.id}`, maxCharsPerMessage);
18215
18192
  return {
18216
- ...t,
18217
- metadata: {
18218
- ...t.metadata || {},
18219
- pluginId: plugin.id,
18220
- ...includePluginConfig && { pluginConfig: pluginConfigWithMaxChars },
18221
- severity: plugin.severity || getPluginSeverity(plugin.id, resolvePluginConfig(plugin.config)),
18222
- modifiers
18223
- }
18193
+ lang,
18194
+ tests: testCasesWithMetadata,
18195
+ requested: plugin.numTests,
18196
+ generated: testCasesWithMetadata.length
18197
+ };
18198
+ });
18199
+ const languageResults = await Promise.allSettled(languagePromises);
18200
+ for (const [index, result] of languageResults.entries()) if (result.status === "fulfilled") {
18201
+ const { lang, tests, requested, generated } = result.value;
18202
+ allCustomTests.push(...tests);
18203
+ resultsPerLanguage[lang || "default"] = {
18204
+ requested,
18205
+ generated
18206
+ };
18207
+ } else {
18208
+ const lang = languages[index];
18209
+ logger.warn(`[Language Processing] Error generating tests for custom plugin ${plugin.id}: ${result.reason}`);
18210
+ resultsPerLanguage[lang || "default"] = {
18211
+ requested: plugin.numTests,
18212
+ generated: 0
18224
18213
  };
18225
- }), injectVar, `Custom plugin ${plugin.id}`, maxCharsPerMessage);
18214
+ }
18226
18215
  if (needsGoalExtraction) {
18227
- logger.debug(`Extracting goal for ${testCasesWithMetadata.length} custom tests from ${plugin.id}...`);
18228
- for (const testCase of testCasesWithMetadata) {
18216
+ logger.debug(`Extracting goal for ${allCustomTests.length} custom tests from ${plugin.id}...`);
18217
+ for (const testCase of allCustomTests) {
18229
18218
  const promptVar = testCase.vars?.[injectVar];
18230
18219
  const prompt = Array.isArray(promptVar) ? promptVar[0] : String(promptVar);
18231
18220
  const policy = getPolicyText(testCase.metadata);
@@ -18233,13 +18222,21 @@ async function synthesize({ abortSignal, delay, entities: entitiesOverride, inje
18233
18222
  testCase.metadata.goal = extractedGoal;
18234
18223
  }
18235
18224
  }
18236
- testCases.push(...testCasesWithMetadata);
18237
- logger.debug(`Added ${customTests.length} custom test cases from ${plugin.id}`);
18238
- const displayId = getPluginDisplayId(plugin);
18239
- pluginResults[displayId] = {
18240
- requested: plugin.numTests,
18241
- generated: testCasesWithMetadata.length
18225
+ testCases.push(...allCustomTests);
18226
+ logger.debug(`Added ${allCustomTests.length} custom test cases from ${plugin.id}`);
18227
+ const baseDisplayId = getPluginDisplayId(plugin);
18228
+ if (languages.filter((lang) => lang !== void 0).length > 1) for (const [langKey, result] of Object.entries(resultsPerLanguage)) {
18229
+ const displayId = langKey === "en" ? baseDisplayId : `(${langKey}) ${baseDisplayId}`;
18230
+ pluginResults[displayId] = {
18231
+ requested: result.requested,
18232
+ generated: result.generated
18233
+ };
18234
+ }
18235
+ else pluginResults[baseDisplayId] = {
18236
+ requested: plugin.numTests * languages.length,
18237
+ generated: allCustomTests.length
18242
18238
  };
18239
+ progressBar?.increment(plugin.numTests * languages.length);
18243
18240
  } catch (e) {
18244
18241
  logger.error(`Error generating tests for custom plugin ${plugin.id}: ${e}`);
18245
18242
  const displayId = getPluginDisplayId(plugin);
@@ -24054,7 +24051,7 @@ router.get("/", async (_req, res) => {
24054
24051
  };
24055
24052
  } catch (error) {
24056
24053
  logger.debug(`Failed to fetch latest version: ${error}`);
24057
- latestVersion = versionCache.latestVersion ?? "0.121.7";
24054
+ latestVersion = versionCache.latestVersion ?? "0.121.8";
24058
24055
  }
24059
24056
  }
24060
24057
  const selfHosted = getEnvBool("PROMPTFOO_SELF_HOSTED");
@@ -24063,7 +24060,7 @@ router.get("/", async (_req, res) => {
24063
24060
  selfHosted,
24064
24061
  isNpx
24065
24062
  });
24066
- const resolvedLatestVersion = latestVersion ?? "0.121.7";
24063
+ const resolvedLatestVersion = latestVersion ?? "0.121.8";
24067
24064
  const response = {
24068
24065
  currentVersion: VERSION,
24069
24066
  latestVersion: resolvedLatestVersion,
@@ -1,7 +1,7 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
2
2
  const require_logger = require("./logger-cfNpzI4o.cjs");
3
- const require_fetch = require("./fetch-Dw4XZHjj.cjs");
4
- const require_remoteGeneration = require("./remoteGeneration-DS9N3pgB.cjs");
3
+ const require_fetch = require("./fetch-Cfm4EuOB.cjs");
4
+ const require_remoteGeneration = require("./remoteGeneration-BpIYlb_O.cjs");
5
5
  let chalk = require("chalk");
6
6
  chalk = require_rolldown_runtime.__toESM(chalk, 1);
7
7
  require("opener");
@@ -123,4 +123,4 @@ Object.defineProperty(exports, "server_exports", {
123
123
  }
124
124
  });
125
125
 
126
- //# sourceMappingURL=server-B8rqV126.cjs.map
126
+ //# sourceMappingURL=server-BHOEL8p8.cjs.map
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./chunk-DEq-mXcV.js";
2
2
  import { a as logger } from "./logger-Ct2S6Yx-.js";
3
- import { t as fetchWithProxy } from "./fetch-It34O8Ur.js";
4
- import { o as getRemoteVersionUrl } from "./remoteGeneration-DsaSwmG2.js";
3
+ import { t as fetchWithProxy } from "./fetch-Doks14zQ.js";
4
+ import { o as getRemoteVersionUrl } from "./remoteGeneration-CJC3E0aW.js";
5
5
  import "chalk";
6
6
  import "opener";
7
7
  import readline from "readline";
@@ -104,4 +104,4 @@ async function checkServerFeatureSupport(featureName, requiredBuildDate) {
104
104
  //#endregion
105
105
  export { server_exports as n, promptYesNo as r, checkServerFeatureSupport as t };
106
106
 
107
- //# sourceMappingURL=server-CMJD10J4.js.map
107
+ //# sourceMappingURL=server-CbiJppij.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { r as checkServerFeatureSupport } from "./server-DLYjSFm2.js";
3
+ export { checkServerFeatureSupport };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { s as logger } from "./logger-BbY6ypFL.js";
3
- import { N as getDefaultPort, n as fetchWithProxy } from "./fetch-DXUnXkVU.js";
4
- import "./version-eRkNuGv8.js";
5
- import { o as getRemoteVersionUrl } from "./remoteGeneration-B1_XsKXU.js";
3
+ import { N as getDefaultPort, n as fetchWithProxy } from "./fetch-Cpf1U1nO.js";
4
+ import "./version-F0YDgb7J.js";
5
+ import { o as getRemoteVersionUrl } from "./remoteGeneration-D6UjE2JT.js";
6
6
  import chalk from "chalk";
7
7
  import opener from "opener";
8
8
  import readline from "readline";
@@ -109,7 +109,7 @@ async function checkServerRunning(port = getDefaultPort()) {
109
109
  logger.debug(`Checking for existing server on port ${port}...`);
110
110
  try {
111
111
  const data = await (await fetchWithProxy(`http://localhost:${port}/health`, { headers: { "x-promptfoo-silent": "true" } })).json();
112
- return data.status === "OK" && data.version === "0.121.7";
112
+ return data.status === "OK" && data.version === "0.121.8";
113
113
  } catch (err) {
114
114
  logger.debug(`No existing server found - this is expected on first startup. ${String(err)}`);
115
115
  return false;
@@ -179,4 +179,4 @@ async function openAuthBrowser(authUrl, welcomeUrl, browserBehavior) {
179
179
  //#endregion
180
180
  export { openAuthBrowser as a, promptYesNo as c, checkServerRunning as i, BrowserBehaviorNames as n, openBrowser as o, checkServerFeatureSupport as r, promptUser as s, BrowserBehavior as t };
181
181
 
182
- //# sourceMappingURL=server-DhMHosWj.js.map
182
+ //# sourceMappingURL=server-DLYjSFm2.js.map
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./chunk-DEq-mXcV.js";
2
2
  import { a as logger } from "./logger-KD8JjCRJ.js";
3
- import { P as getDefaultPort, t as fetchWithProxy } from "./fetch-BufrQtvR.js";
4
- import "./version-BK20a4sw.js";
5
- import { o as getRemoteVersionUrl } from "./remoteGeneration-COpWcmWd.js";
3
+ import { P as getDefaultPort, t as fetchWithProxy } from "./fetch-BSSAcMxf.js";
4
+ import "./version-CHR-EFec.js";
5
+ import { o as getRemoteVersionUrl } from "./remoteGeneration--D6WjzUm.js";
6
6
  import "chalk";
7
7
  import opener from "opener";
8
8
  import readline from "readline";
@@ -116,7 +116,7 @@ async function checkServerRunning(port = getDefaultPort()) {
116
116
  logger.debug(`Checking for existing server on port ${port}...`);
117
117
  try {
118
118
  const data = await (await fetchWithProxy(`http://localhost:${port}/health`, { headers: { "x-promptfoo-silent": "true" } })).json();
119
- return data.status === "OK" && data.version === "0.121.7";
119
+ return data.status === "OK" && data.version === "0.121.8";
120
120
  } catch (err) {
121
121
  logger.debug(`No existing server found - this is expected on first startup. ${String(err)}`);
122
122
  return false;
@@ -143,4 +143,4 @@ async function openBrowser(browserBehavior, port = getDefaultPort()) {
143
143
  //#endregion
144
144
  export { openBrowser as a, checkServerRunning as i, BrowserBehaviorNames as n, server_exports as o, checkServerFeatureSupport as r, promptYesNo as s, BrowserBehavior as t };
145
145
 
146
- //# sourceMappingURL=server-Ddp8GNMp.js.map
146
+ //# sourceMappingURL=server-JQYD_Nws.js.map
@@ -1,12 +1,12 @@
1
1
  import { C as getEnvFloat, S as getEnvBool, a as logger, k as state, p as sanitizeUrl, w as getEnvInt, y as safeJsonStringify } from "./logger-KD8JjCRJ.js";
2
- import { g as parseRetryAfter, h as parseRateLimitHeaders, m as sleep, o as withFetchRetryContext } from "./fetch-BufrQtvR.js";
2
+ import { g as parseRetryAfter, h as parseRateLimitHeaders, m as sleep, o as withFetchRetryContext } from "./fetch-BSSAcMxf.js";
3
3
  import { t as invariant } from "./invariant-DIYf9sP1.js";
4
4
  import { m as isProviderOptions, p as isApiProvider } from "./types-BJQBBPTP.js";
5
- import { u as isTransientConnectionError } from "./cache-roFAE0cI.js";
5
+ import { u as isTransientConnectionError } from "./cache-CrioYnaa.js";
6
6
  import { a as createEmptyTokenUsage, r as accumulateTokenUsage } from "./tokenUsageUtils-BjVkdk18.js";
7
- import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-BR7XAzAL.js";
8
- import { t as OpenAiChatCompletionProvider } from "./chat-CUCorGiL.js";
9
- import { t as PromptfooChatCompletionProvider } from "./promptfoo-BDrfT30-.js";
7
+ import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-Jp53vs-6.js";
8
+ import { t as OpenAiChatCompletionProvider } from "./chat-BSos6PvZ.js";
9
+ import { t as PromptfooChatCompletionProvider } from "./promptfoo-CReYAtfb.js";
10
10
  import { o as transform, r as TransformInputType } from "./transform-CrPGTsij.js";
11
11
  import { i as throwIfTargetPromptExceedsMaxChars } from "./promptLength-0qIHyhA5.js";
12
12
  import { createHash, randomUUID } from "crypto";
@@ -940,7 +940,7 @@ const ATTACKER_MODEL = "gpt-5.4-2026-03-05";
940
940
  const ATTACKER_MODEL_SMALL = "gpt-5.4-mini-2026-03-17";
941
941
  const TEMPERATURE = getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") ? getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") : .7;
942
942
  const defaultRedteamProviderLoader = async (providers) => {
943
- const { loadApiProviders } = await import("./providers-BCCz6_IX.js").then((n) => n.i);
943
+ const { loadApiProviders } = await import("./providers-iH3Sw1yo.js").then((n) => n.i);
944
944
  return loadApiProviders(providers);
945
945
  };
946
946
  let redteamProviderLoader = defaultRedteamProviderLoader;
@@ -1257,7 +1257,7 @@ async function tryUnblocking({ messages, lastResponse, goal, purpose }) {
1257
1257
  logger.debug("[Unblocking] Disabled by default (set PROMPTFOO_ENABLE_UNBLOCKING=true to enable)");
1258
1258
  return { success: false };
1259
1259
  }
1260
- const { checkServerFeatureSupport } = await import("./server-Ddp8GNMp.js").then((n) => n.o);
1260
+ const { checkServerFeatureSupport } = await import("./server-JQYD_Nws.js").then((n) => n.o);
1261
1261
  if (!await checkServerFeatureSupport("blocking-question-analysis", "2025-06-16T14:49:11-07:00")) {
1262
1262
  logger.debug("[Unblocking] Server does not support unblocking, skipping gracefully");
1263
1263
  return { success: false };
@@ -1331,4 +1331,4 @@ function getGraderAssertionValue(assertToUse) {
1331
1331
  //#endregion
1332
1332
  export { isRateLimitWrapped as _, formatRedteamHistoryAsTranscript as a, getTargetResponse as c, messagesToRedteamHistory as d, redteamProviderManager as f, createProviderRateLimitOptions as g, createRateLimitRegistry as h, externalizeResponseForRedteamHistory as i, isConversationEndedResponse as l, TokenUsageTracker as m, checkPenalizedPhrases as n, getGraderAssertionValue as o, tryUnblocking as p, createIterationContext as r, getLastMessageContent as s, buildGraderResultAssertion as t, isValidChatMessageArray as u };
1333
1333
 
1334
- //# sourceMappingURL=shared-7pmVZLNO.js.map
1334
+ //# sourceMappingURL=shared-CRq0gGVf.js.map
@@ -1,13 +1,13 @@
1
1
  import { C as getEnvFloat, S as getEnvBool, a as logger, k as state, p as sanitizeUrl, w as getEnvInt, y as safeJsonStringify } from "./logger-Ct2S6Yx-.js";
2
2
  import { t as invariant } from "./invariant-Ddh24eXh.js";
3
3
  import { Gt as isProviderOptions, Wt as isApiProvider } from "./types-D6glLbdF.js";
4
- import { d as parseRetryAfter, l as sleep, o as withFetchRetryContext, u as parseRateLimitHeaders } from "./fetch-It34O8Ur.js";
5
- import { u as isTransientConnectionError } from "./cache-DIXbtkNO.js";
6
- import { t as OpenAiChatCompletionProvider } from "./chat-Dabu84Br.js";
4
+ import { d as parseRetryAfter, l as sleep, o as withFetchRetryContext, u as parseRateLimitHeaders } from "./fetch-Doks14zQ.js";
5
+ import { u as isTransientConnectionError } from "./cache-DdriHsNX.js";
6
+ import { t as OpenAiChatCompletionProvider } from "./chat-BBEnnpQk.js";
7
7
  import { a as createEmptyTokenUsage, r as accumulateTokenUsage } from "./tokenUsageUtils-CmnQ0G2m.js";
8
- import { t as PromptfooChatCompletionProvider } from "./promptfoo-Cm4hiy1Y.js";
8
+ import { t as PromptfooChatCompletionProvider } from "./promptfoo-CqEpj6Sr.js";
9
9
  import { o as transform, r as TransformInputType } from "./transform-CGt7Kt3y2.js";
10
- import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-CxRtnaHl.js";
10
+ import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-D3Fv_Tdh.js";
11
11
  import { i as throwIfTargetPromptExceedsMaxChars } from "./promptLength-B9nZEfO6.js";
12
12
  import { createHash, randomUUID } from "crypto";
13
13
  import { EventEmitter } from "events";
@@ -940,7 +940,7 @@ const ATTACKER_MODEL = "gpt-5.4-2026-03-05";
940
940
  const ATTACKER_MODEL_SMALL = "gpt-5.4-mini-2026-03-17";
941
941
  const TEMPERATURE = getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") ? getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") : .7;
942
942
  const defaultRedteamProviderLoader = async (providers) => {
943
- const { loadApiProviders } = await import("./providers-DVYRZP4E.js").then((n) => n.i);
943
+ const { loadApiProviders } = await import("./providers-BGc7tDtQ.js").then((n) => n.i);
944
944
  return loadApiProviders(providers);
945
945
  };
946
946
  let redteamProviderLoader = defaultRedteamProviderLoader;
@@ -1257,7 +1257,7 @@ async function tryUnblocking({ messages, lastResponse, goal, purpose }) {
1257
1257
  logger.debug("[Unblocking] Disabled by default (set PROMPTFOO_ENABLE_UNBLOCKING=true to enable)");
1258
1258
  return { success: false };
1259
1259
  }
1260
- const { checkServerFeatureSupport } = await import("./server-CMJD10J4.js").then((n) => n.n);
1260
+ const { checkServerFeatureSupport } = await import("./server-CbiJppij.js").then((n) => n.n);
1261
1261
  if (!await checkServerFeatureSupport("blocking-question-analysis", "2025-06-16T14:49:11-07:00")) {
1262
1262
  logger.debug("[Unblocking] Server does not support unblocking, skipping gracefully");
1263
1263
  return { success: false };
@@ -1331,4 +1331,4 @@ function getGraderAssertionValue(assertToUse) {
1331
1331
  //#endregion
1332
1332
  export { isRateLimitWrapped as _, formatRedteamHistoryAsTranscript as a, getTargetResponse as c, messagesToRedteamHistory as d, redteamProviderManager as f, createProviderRateLimitOptions as g, createRateLimitRegistry as h, externalizeResponseForRedteamHistory as i, isConversationEndedResponse as l, TokenUsageTracker as m, checkPenalizedPhrases as n, getGraderAssertionValue as o, tryUnblocking as p, createIterationContext as r, getLastMessageContent as s, buildGraderResultAssertion as t, isValidChatMessageArray as u };
1333
1333
 
1334
- //# sourceMappingURL=shared-D6IjElRI.js.map
1334
+ //# sourceMappingURL=shared-CSIGeGLl.js.map
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { D as getEnvInt, E as getEnvFloat, N as state, T as getEnvBool, h as sanitizeUrl, s as logger, x as safeJsonStringify } from "./logger-BbY6ypFL.js";
3
- import { f as sleep, h as parseRetryAfter, l as withFetchRetryContext, m as parseRateLimitHeaders } from "./fetch-DXUnXkVU.js";
3
+ import { f as sleep, h as parseRetryAfter, l as withFetchRetryContext, m as parseRateLimitHeaders } from "./fetch-Cpf1U1nO.js";
4
4
  import { t as invariant } from "./invariant-B2Rf6avk.js";
5
5
  import { m as isProviderOptions, p as isApiProvider } from "./types-BFevViUY.js";
6
6
  import { r as isTransientConnectionError } from "./errors-9PcUL8BC.js";
7
- import { t as OpenAiChatCompletionProvider } from "./chat-DqUFcWI0.js";
7
+ import { t as OpenAiChatCompletionProvider } from "./chat-DTdf-J5Q.js";
8
8
  import { a as createEmptyTokenUsage, r as accumulateTokenUsage } from "./tokenUsageUtils-CDet74yk.js";
9
- import { t as PromptfooChatCompletionProvider } from "./promptfoo-Rjp-MeBb.js";
9
+ import { t as PromptfooChatCompletionProvider } from "./promptfoo-BU4_0J85.js";
10
10
  import { o as transform, r as TransformInputType } from "./transform-BnSTnFlp.js";
11
- import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-CIW3iN-b.js";
11
+ import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-BVkZtk4R.js";
12
12
  import { i as throwIfTargetPromptExceedsMaxChars } from "./promptLength-4X-Wd8PG.js";
13
13
  import { createHash, randomUUID } from "crypto";
14
14
  import { EventEmitter } from "events";
@@ -941,7 +941,7 @@ const ATTACKER_MODEL = "gpt-5.4-2026-03-05";
941
941
  const ATTACKER_MODEL_SMALL = "gpt-5.4-mini-2026-03-17";
942
942
  const TEMPERATURE = getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") ? getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") : .7;
943
943
  const defaultRedteamProviderLoader = async (providers) => {
944
- const { loadApiProviders } = await import("./providers-BYAn82cf.js");
944
+ const { loadApiProviders } = await import("./providers-CSOp-bCm.js");
945
945
  return loadApiProviders(providers);
946
946
  };
947
947
  let redteamProviderLoader = defaultRedteamProviderLoader;
@@ -1258,7 +1258,7 @@ async function tryUnblocking({ messages, lastResponse, goal, purpose }) {
1258
1258
  logger.debug("[Unblocking] Disabled by default (set PROMPTFOO_ENABLE_UNBLOCKING=true to enable)");
1259
1259
  return { success: false };
1260
1260
  }
1261
- const { checkServerFeatureSupport } = await import("./server-BaLytskk.js");
1261
+ const { checkServerFeatureSupport } = await import("./server-D18AAlAc.js");
1262
1262
  if (!await checkServerFeatureSupport("blocking-question-analysis", "2025-06-16T14:49:11-07:00")) {
1263
1263
  logger.debug("[Unblocking] Server does not support unblocking, skipping gracefully");
1264
1264
  return { success: false };
@@ -1332,4 +1332,4 @@ function getGraderAssertionValue(assertToUse) {
1332
1332
  //#endregion
1333
1333
  export { isRateLimitWrapped as _, formatRedteamHistoryAsTranscript as a, getTargetResponse as c, messagesToRedteamHistory as d, redteamProviderManager as f, createProviderRateLimitOptions as g, createRateLimitRegistry as h, externalizeResponseForRedteamHistory as i, isConversationEndedResponse as l, TokenUsageTracker as m, checkPenalizedPhrases as n, getGraderAssertionValue as o, tryUnblocking as p, createIterationContext as r, getLastMessageContent as s, buildGraderResultAssertion as t, isValidChatMessageArray as u };
1334
1334
 
1335
- //# sourceMappingURL=shared-9WHQ1oNE.js.map
1335
+ //# sourceMappingURL=shared-DNvim54U.js.map