promptfoo 0.121.4 → 0.121.7

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 (497) hide show
  1. package/dist/src/{ListApp-DQkFNqE9.js → ListApp-DLmM02JS.js} +1 -1
  2. package/dist/src/{accounts-DhMYUUbu.js → accounts-Ca7WIoPY.js} +12 -7
  3. package/dist/src/{accounts-F9d_5sMC.js → accounts-CjFnOPmb.js} +14 -9
  4. package/dist/src/{accounts-Dy17bs4D.cjs → accounts-CmWzeD2d.cjs} +16 -10
  5. package/dist/src/{accounts-DdJ2pHMI.js → accounts-DanM1wq_.js} +13 -8
  6. package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-CJ0j3fBi.js} +3 -3
  7. package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-DDEGRV9v.js} +3 -3
  8. package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
  9. package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-TxUEMPYS.js} +2 -2
  10. package/dist/src/{agents-BahDpe5G.cjs → agents-B4sRuXg3.cjs} +7 -6
  11. package/dist/src/{agents-pQeBEXMm.js → agents-B8q7h_ek.js} +5 -5
  12. package/dist/src/{agents-CgaMXvLM.js → agents-CBgJvRkB.js} +21 -10
  13. package/dist/src/{agents-C-R_jfzI.js → agents-CYn2n3QP.js} +4 -4
  14. package/dist/src/{agents-8FDnTriG.js → agents-D-vDNFx4.js} +21 -10
  15. package/dist/src/{agents-aYPQLf8W.js → agents-LrHuQqr1.js} +20 -9
  16. package/dist/src/{agents-DJ35I3Nt.js → agents-QGg76OF-.js} +5 -5
  17. package/dist/src/{agents-D7-HGxUj.cjs → agents-eHZ9nlgA.cjs} +21 -10
  18. package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-CJEbQ0o6.js} +7 -7
  19. package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-D5HXzZ0s.js} +6 -6
  20. package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
  21. package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-eYv3a_DK.js} +7 -7
  22. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
  23. package/dist/src/app/assets/Report-BNHJKN35.js +1 -0
  24. package/dist/src/app/assets/index-BnT6P6sF.js +388 -0
  25. package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
  26. package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
  27. package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
  28. package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
  29. package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
  30. package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
  31. package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
  32. package/dist/src/app/index.html +31 -6
  33. package/dist/src/{audio-COrn8rM6.js → audio-BqnRvcWG.js} +3 -3
  34. package/dist/src/{audio-DcVKoInv.js → audio-CPMtV1yR.js} +4 -4
  35. package/dist/src/{audio-B7izf48x.js → audio-DyiebVB3.js} +4 -4
  36. package/dist/src/{audio-BQtNuYBj.cjs → audio-FnxbEnSE.cjs} +4 -4
  37. package/dist/src/authoritativeMarkupInjection-BZIywVjG.js +74 -0
  38. package/dist/src/authoritativeMarkupInjection-DyAXAsSr.js +75 -0
  39. package/dist/src/authoritativeMarkupInjection-F2gBw0lN.cjs +74 -0
  40. package/dist/src/authoritativeMarkupInjection-QEQmFS83.js +74 -0
  41. package/dist/src/{base-PYJvBE1i.js → base-CKLo890h.js} +4 -3
  42. package/dist/src/{base-fZ9wgg50.js → base-Co80MMCi.js} +5 -4
  43. package/dist/src/{base-D-670DX8.cjs → base-DGJW48uz.cjs} +5 -4
  44. package/dist/src/{base-yrI1Yal4.js → base-E9I8zXjz.js} +5 -4
  45. package/dist/src/bestOfN-B3wNzjSB.js +137 -0
  46. package/dist/src/bestOfN-BBsO41z4.js +136 -0
  47. package/dist/src/bestOfN-CAwmg5UL.cjs +140 -0
  48. package/dist/src/bestOfN-_kTi8Bxe.js +136 -0
  49. package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B0977K1O.cjs} +7 -6
  50. package/dist/src/{blobs-BCZavS8s.js → blobs-CeFdPn_T.js} +3 -3
  51. package/dist/src/{blobs-BQWqnnvL.js → blobs-DODuTK-a.js} +3 -3
  52. package/dist/src/{blobs-C-F78Kfn.js → blobs-Dwef1Ao1.js} +2 -2
  53. package/dist/src/{cache-BIyPcp5v.cjs → cache-CPGUA4Yl.cjs} +135 -25
  54. package/dist/src/cache-Cf7b4pWE.js +3 -0
  55. package/dist/src/{cache-D5NZmMiT.js → cache-DIXbtkNO.js} +125 -10
  56. package/dist/src/{cache-mb7c8hbp.js → cache-DpPWrkTE.js} +128 -12
  57. package/dist/src/{cache-C4Xb-hNb.js → cache-roFAE0cI.js} +126 -11
  58. package/dist/src/{chat-I9izLm49.js → chat-CUCorGiL.js} +12 -12
  59. package/dist/src/{chat-BPXSW8Bv.cjs → chat-DG1wG4w0.cjs} +6 -6
  60. package/dist/src/{chat-BfPaS15_.js → chat-Dabu84Br.js} +12 -12
  61. package/dist/src/{chat-Dr3DUQ0D.js → chat-DqUFcWI0.js} +12 -12
  62. package/dist/src/{chat-CclRbxGf.cjs → chat-DxTDQ83C.cjs} +14 -13
  63. package/dist/src/{chat-MKxMnZJZ.js → chat-GmlolEwo.js} +4 -4
  64. package/dist/src/{chat-0bwXjVP0.js → chat-TP8Qifkh.js} +6 -6
  65. package/dist/src/{chat-mW0ORo8G.js → chat-iwaM5UTQ.js} +6 -6
  66. package/dist/src/{chatkit-zUIVoDos.js → chatkit-B6DWi70Q.js} +4 -4
  67. package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-BYveR48_.cjs} +6 -5
  68. package/dist/src/{chatkit-Cv6AhukM.js → chatkit-fARZwEfV.js} +3 -3
  69. package/dist/src/{chatkit-CJnHRRMM.js → chatkit-lb6FK02w.js} +4 -4
  70. package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BQNp_y-F.js} +212 -67
  71. package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-D5Jl0SDh.js} +212 -67
  72. package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-DH416NBD.cjs} +218 -72
  73. package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-x1XJ1-pU.js} +212 -67
  74. package/dist/src/{cloud-DQZ5sVjW.js → cloud-D3DiFqH6.js} +3 -3
  75. package/dist/src/cloud-p96PA4MH.js +3 -0
  76. package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-B6NVI3ax.js} +4 -4
  77. package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
  78. package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-RFSojyXG.js} +6 -6
  79. package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-r4tbYmWU.js} +6 -6
  80. package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-BCkLouto.js} +5 -5
  81. package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-BaZ4insB.js} +3 -3
  82. package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-CF-Vb-2Z.js} +5 -5
  83. package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
  84. package/dist/src/codex-app-server-B8KHEiF4.js +1915 -0
  85. package/dist/src/codex-app-server-CnrLBCeA.cjs +1921 -0
  86. package/dist/src/codex-app-server-DIXZ230V.js +1915 -0
  87. package/dist/src/codex-app-server-Dd22dC_N.js +1916 -0
  88. package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-B6Wah8Pa.js} +6 -6
  89. package/dist/src/codex-sdk-BGjVAk23.js +3 -0
  90. package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
  91. package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-CmQABzV3.js} +6 -6
  92. package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-D2d54RL8.js} +5 -5
  93. package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-Bu9B8NUY.js} +8 -8
  94. package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CtzNCHKu.js} +7 -7
  95. package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-DHCDlQUI.cjs} +8 -8
  96. package/dist/src/{cometapi-BUlt_ELa.js → cometapi-OBILPLlu.js} +8 -8
  97. package/dist/src/{completion-HUe8wDhZ.js → completion-CO2e1_62.js} +6 -6
  98. package/dist/src/{completion-BozdoXba.cjs → completion-CSYfl2cd.cjs} +6 -6
  99. package/dist/src/{completion-x0a_c2y1.js → completion-DZNxcyfG.js} +6 -6
  100. package/dist/src/{completion-Dnxn7E-j.js → completion-sNvCLTAP.js} +5 -5
  101. package/dist/src/constants-BjJV0cRr.js +6 -0
  102. package/dist/src/constants-DH5XYLKZ.js +7 -0
  103. package/dist/src/constants-DZGEFLsu.js +6 -0
  104. package/dist/src/constants-a2kYssQk.cjs +11 -0
  105. package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
  106. package/dist/src/{createHash-CwDVU5xr.js → createHash-CGVzWdjj.js} +1 -1
  107. package/dist/src/{createHash-B7KvgoOD.cjs → createHash-CSiqnK5P.cjs} +2 -2
  108. package/dist/src/{createHash-ChI45QR1.js → createHash-CgRvs4Fn.js} +1 -1
  109. package/dist/src/crescendo-BXEJK_bi.cjs +704 -0
  110. package/dist/src/crescendo-CU_Y2i-m.js +702 -0
  111. package/dist/src/crescendo-J1Xx4_zb.js +703 -0
  112. package/dist/src/crescendo-QiaSLW0d.js +701 -0
  113. package/dist/src/custom-BJfP00Bh.js +619 -0
  114. package/dist/src/custom-CZVn-1-r.js +620 -0
  115. package/dist/src/custom-Cqia7M0D.cjs +621 -0
  116. package/dist/src/custom-notggYVl.js +618 -0
  117. package/dist/src/{docker-DCgsveLD.js → docker-4D1eL6Gq.js} +6 -6
  118. package/dist/src/{docker-ClnmCf1Z.js → docker-BBv1WUDu.js} +5 -5
  119. package/dist/src/{docker-DS4_Osau.cjs → docker-D06JUoe2.cjs} +6 -6
  120. package/dist/src/{docker-CQmlA2NU.js → docker-DdJQBxK9.js} +6 -6
  121. package/dist/src/{embedding-D3xTseo7.js → embedding--UZVe4_7.js} +6 -6
  122. package/dist/src/{embedding-I45KG3o7.cjs → embedding-BbrwopfX.cjs} +6 -6
  123. package/dist/src/{embedding-nFbumxcv.js → embedding-Bi3rxrZF.js} +5 -5
  124. package/dist/src/{embedding-DD9wa3ae.js → embedding-C251p1-8.js} +6 -6
  125. package/dist/src/{errors-Cw810C93.js → errors-9PcUL8BC.js} +1 -1
  126. package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
  127. package/dist/src/{esm-CtEPLdAj.cjs → esm-BIKakvNa.cjs} +8 -7
  128. package/dist/src/{esm-C7PnfdF8.js → esm-BTK1W7lG.js} +1 -1
  129. package/dist/src/{esm-tVgYPY-f.js → esm-Bexx2PFc.js} +2 -2
  130. package/dist/src/{eval-u4UVafl6.js → eval-0VRANImH.js} +21 -21
  131. package/dist/src/{eval-CzJFfFO9.js → eval-DscR5iOM.js} +1 -1
  132. package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-2RRJvFyB.js} +41 -16
  133. package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-CvtS8h8u.cjs} +51 -15
  134. package/dist/src/evalResult-DqzsS6_W.js +3 -0
  135. package/dist/src/{evalResult-D3hVYFis.js → evalResult-eUkJv9Ko.js} +40 -15
  136. package/dist/src/evaluator-DNdJF1Gv.js +3 -0
  137. package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-DRoiYB2q.js} +1060 -187
  138. package/dist/src/evaluatorHelpers-BsYP_muT.js +511 -0
  139. package/dist/src/evaluatorHelpers-CRqTvSux.cjs +537 -0
  140. package/dist/src/evaluatorHelpers-DuqFFfq7.js +510 -0
  141. package/dist/src/{extractor-CAfTSraf.js → extractor-BR7XAzAL.js} +6 -6
  142. package/dist/src/{extractor-WVPOrH43.cjs → extractor-BdxEtt3J.cjs} +6 -6
  143. package/dist/src/{extractor-DNSeBVOJ.js → extractor-CIW3iN-b.js} +6 -6
  144. package/dist/src/{extractor-Dk6bRWkv.js → extractor-CxRtnaHl.js} +5 -5
  145. package/dist/src/{fetch-B0Z3Oe4k.js → fetch-BufrQtvR.js} +93 -40
  146. package/dist/src/{fetch-BEWnXrrG.js → fetch-DXUnXkVU.js} +89 -40
  147. package/dist/src/{fetch-CJU5ELPa.cjs → fetch-Dw4XZHjj.cjs} +330 -270
  148. package/dist/src/{fetch-Di00EQrc.js → fetch-It34O8Ur.js} +305 -252
  149. package/dist/src/fetch-_YgGd2qv.js +3 -0
  150. package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
  151. package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-CXRfY3Ss.js} +12 -2
  152. package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-D4GCJ67J.js} +12 -2
  153. package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-CMVNrYvE.js} +1 -1
  154. package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-14nugQQx.cjs} +14 -2
  155. package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-BPVvltoW.js} +2 -2
  156. package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-D18lYzhB.js} +2 -2
  157. package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-jJKYsnjc.js} +2 -2
  158. package/dist/src/goat-Ckd3q3AY.js +467 -0
  159. package/dist/src/goat-Qgurm-NP.js +466 -0
  160. package/dist/src/goat-ghadEDdy.js +465 -0
  161. package/dist/src/goat-una6pZGP.cjs +469 -0
  162. package/dist/src/graders-BDT7dif6.js +3 -0
  163. package/dist/src/{graders-eIHhRqoC.js → graders-BGP99PdK.js} +2416 -2224
  164. package/dist/src/{graders-Zy3x0zqX.js → graders-BX0f2tvS.js} +2423 -2226
  165. package/dist/src/{graders-pvbReLLn.js → graders-C0nXU_ZP.js} +1806 -1609
  166. package/dist/src/{graders--zknU_uk.cjs → graders-ClrU2fnd.cjs} +2219 -1949
  167. package/dist/src/hydra-BSNZZm2M.js +543 -0
  168. package/dist/src/hydra-BxdG4nkg.js +541 -0
  169. package/dist/src/hydra-DE4xWwyc.js +542 -0
  170. package/dist/src/hydra-DrJttnvw.cjs +542 -0
  171. package/dist/src/image-B4oBtu6J.js +443 -0
  172. package/dist/src/{image-dnoUgPrC.js → image-BN-hjLL9.js} +4 -4
  173. package/dist/src/{image-9302QVqR.js → image-B_fPIwdg.js} +3 -3
  174. package/dist/src/image-BvUAW344.js +442 -0
  175. package/dist/src/image-Cvjwx1uY.js +442 -0
  176. package/dist/src/{image-De2FBmYV.cjs → image-DfVCGPbI.cjs} +4 -4
  177. package/dist/src/{image-u7-rKnYU.js → image-QzmydkiG.js} +4 -4
  178. package/dist/src/image-X0oY4350.cjs +465 -0
  179. package/dist/src/index.cjs +1689 -558
  180. package/dist/src/index.d.cts +3270 -1624
  181. package/dist/src/index.d.ts +3270 -1624
  182. package/dist/src/index.js +1553 -438
  183. package/dist/src/indirectWebPwn-02ZIghCS.js +259 -0
  184. package/dist/src/indirectWebPwn-BJ22AbQa.cjs +397 -0
  185. package/dist/src/indirectWebPwn-CbjUG0rh.js +385 -0
  186. package/dist/src/indirectWebPwn-CfQJt3gk.cjs +260 -0
  187. package/dist/src/indirectWebPwn-DBQhOjoD.js +260 -0
  188. package/dist/src/indirectWebPwn-OsXnKejv.js +259 -0
  189. package/dist/src/indirectWebPwn-tNx9OZ35.js +385 -0
  190. package/dist/src/indirectWebPwn-uyWdHx04.js +386 -0
  191. package/dist/src/inputVariables-B0qUChbV.js +467 -0
  192. package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
  193. package/dist/src/inputVariables-DXFdi7AI.js +468 -0
  194. package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
  195. package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-C4QlIuoR.js} +2 -2
  196. package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
  197. package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
  198. package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
  199. package/dist/src/iterative-CpU6i2As.js +490 -0
  200. package/dist/src/iterative-DJQEQpG3.js +491 -0
  201. package/dist/src/iterative-DQBuWM-j.cjs +493 -0
  202. package/dist/src/iterative-FTS4Bz67.js +492 -0
  203. package/dist/src/iterativeImage-BUABMVOA.js +413 -0
  204. package/dist/src/iterativeImage-ByFWkxax.cjs +415 -0
  205. package/dist/src/iterativeImage-BzUapOUi.js +414 -0
  206. package/dist/src/iterativeImage-Doz8mgxF.js +413 -0
  207. package/dist/src/iterativeMeta-B3YiAOc8.js +386 -0
  208. package/dist/src/iterativeMeta-C7APE_P1.js +385 -0
  209. package/dist/src/iterativeMeta-CSS8M6Ds.cjs +385 -0
  210. package/dist/src/iterativeMeta-DgoQ7bLh.js +384 -0
  211. package/dist/src/iterativeTree-B5zxBBSW.js +769 -0
  212. package/dist/src/iterativeTree-CNyIk0Yn.js +768 -0
  213. package/dist/src/iterativeTree-CPMF10ve.cjs +771 -0
  214. package/dist/src/iterativeTree-DvZ7GBwt.js +770 -0
  215. package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-BadkINlJ.js} +24 -10
  216. package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-Bi_8sV-H.js} +25 -11
  217. package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CkMljjdg.js} +25 -11
  218. package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
  219. package/dist/src/{litellm-DRjpcSa7.js → litellm-BKBo0jpC.js} +5 -5
  220. package/dist/src/{litellm-C2kqjxqp.js → litellm-BXyn5kZK.js} +5 -5
  221. package/dist/src/{litellm-p37R1dzQ.js → litellm-CNcfbCfa.js} +4 -4
  222. package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CtAr7bKG.cjs} +5 -5
  223. package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
  224. package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
  225. package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
  226. package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-BMX1iEB6.js} +5 -5
  227. package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CR5TSpp4.js} +5 -5
  228. package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
  229. package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-OEMmS1RB.js} +6 -6
  230. package/dist/src/main.js +909 -369
  231. package/dist/src/memoryPoisoning-CM83NWYl.js +107 -0
  232. package/dist/src/memoryPoisoning-D8h9gXJF.js +106 -0
  233. package/dist/src/memoryPoisoning-Dp-btinn.cjs +106 -0
  234. package/dist/src/memoryPoisoning-cLuCoTuJ.js +106 -0
  235. package/dist/src/{messages-BTQz42fn.js → messages-BabO-cX8.js} +273 -17
  236. package/dist/src/{messages-811uVVW5.cjs → messages-DBPir0TQ.cjs} +278 -18
  237. package/dist/src/{messages-zWbkLLHz.js → messages-DGUlSNU7.js} +273 -17
  238. package/dist/src/{messages-MYTQ2TWp.js → messages-vsE_-Lv0.js} +273 -17
  239. package/dist/src/{meteor-DHdzY1Ss.js → meteor--TZYICTI.js} +2 -2
  240. package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-CR226f7Z.cjs} +2 -2
  241. package/dist/src/{meteor-CU5UAE-H.js → meteor-Cl_yd7rJ.js} +2 -2
  242. package/dist/src/{meteor-DuAFv6gF.js → meteor-Dce-_zGQ.js} +1 -1
  243. package/dist/src/mischievousUser-0l8GD7Dp.js +46 -0
  244. package/dist/src/mischievousUser-BUOP9W5r.js +46 -0
  245. package/dist/src/mischievousUser-frFYKxu6.js +47 -0
  246. package/dist/src/mischievousUser-olGgHIVR.cjs +46 -0
  247. package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-CNV5bMSk.cjs} +7 -7
  248. package/dist/src/{modelslab-D0erNWKe.js → modelslab-Cogmu4mG.js} +6 -6
  249. package/dist/src/{modelslab-DIq-6y7x.js → modelslab-Dzst7VTU.js} +6 -6
  250. package/dist/src/{modelslab-wu9yi5GE.js → modelslab-EyDczZ5A.js} +7 -7
  251. package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-BGPNBOMS.js} +6 -6
  252. package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-B_5NKFu1.js} +5 -5
  253. package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-C4eUJGse.js} +5 -5
  254. package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
  255. package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BNGmgfFz.js} +4 -4
  256. package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-ChPlh5na.js} +4 -4
  257. package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CrV0iaY_.js} +3 -3
  258. package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
  259. package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
  260. package/dist/src/{openai-URNyItar.cjs → openai-C3uXv8wS.cjs} +2 -2
  261. package/dist/src/{openai-Qsvz25mV.js → openai-CJrsh9n4.js} +2 -2
  262. package/dist/src/{openai-iYtrXzOX.js → openai-zgwBb4Ff.js} +1 -1
  263. package/dist/src/{openclaw-CnQ363Wi.js → openclaw-BIHlu_36.js} +10 -8
  264. package/dist/src/{openclaw-CwzlQSQX.js → openclaw-CF7fMido.js} +9 -7
  265. package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-Dphc01BY.cjs} +18 -15
  266. package/dist/src/{openclaw-CLWrW03k.js → openclaw-zIJAsz3P.js} +10 -8
  267. package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-B3vlPLsp.js} +40 -5
  268. package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-D05JSgMQ.js} +40 -5
  269. package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-DoY6GbWw.cjs} +46 -10
  270. package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-sRKYHGoI.js} +39 -4
  271. package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver--gTpSagc.js} +120 -4
  272. package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-B2eaKC8C.js} +120 -4
  273. package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-BXjcRqAM.js} +119 -3
  274. package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
  275. package/dist/src/packageParser--MWTSrPW.js +36 -0
  276. package/dist/src/packageParser-CgE-ziRo.js +35 -0
  277. package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
  278. package/dist/src/packageParser-hwwSGnAZ.js +35 -0
  279. package/dist/src/processShim-BBxt7LKO.js +95 -0
  280. package/dist/src/processShim-BcGzU8fY.js +94 -0
  281. package/dist/src/processShim-C_z3aRvF.js +94 -0
  282. package/dist/src/processShim-DSY9BV2T.cjs +98 -0
  283. package/dist/src/promptLength-0qIHyhA5.js +71 -0
  284. package/dist/src/promptLength-4X-Wd8PG.js +72 -0
  285. package/dist/src/promptLength-B9nZEfO6.js +71 -0
  286. package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
  287. package/dist/src/promptfoo-BDrfT30-.js +180 -0
  288. package/dist/src/promptfoo-Cm4hiy1Y.js +180 -0
  289. package/dist/src/promptfoo-Rjp-MeBb.js +181 -0
  290. package/dist/src/promptfoo-b-baRMj-.cjs +205 -0
  291. package/dist/src/prompts-BYMtqPCw.js +259 -0
  292. package/dist/src/prompts-C-bqE1Yp.js +260 -0
  293. package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
  294. package/dist/src/prompts-DHhQsANy.js +259 -0
  295. package/dist/src/prompts-D_QpZ2Dm.js +271 -0
  296. package/dist/src/prompts-hNvWBD3z.cjs +284 -0
  297. package/dist/src/prompts-huDVH2CI.js +270 -0
  298. package/dist/src/prompts-p78Hul5i.cjs +289 -0
  299. package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
  300. package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
  301. package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DHcFiVWX.js} +1 -1
  302. package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-ReCd0sFa.js} +2 -2
  303. package/dist/src/{providers-BV_KMZje.js → providers-B9KzWxAX.js} +10558 -21587
  304. package/dist/src/{providers-DruaQfwu.js → providers-BCCz6_IX.js} +1228 -12196
  305. package/dist/src/{providers-1eKkXBKp.cjs → providers-BDVVIQM6.cjs} +10649 -21843
  306. package/dist/src/{providers-iUt5fbAN.js → providers-BYAn82cf.js} +1 -1
  307. package/dist/src/{providers-Domz_llv.js → providers-DVYRZP4E.js} +10589 -21570
  308. package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-CLCgQ9tt.js} +3 -3
  309. package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-CgYxeSmO.js} +3 -3
  310. package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-Cokhluq3.cjs} +8 -7
  311. package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-D0BYebvX.js} +3 -3
  312. package/dist/src/{quiverai-DFotyafY.cjs → quiverai-BAp6iTZD.cjs} +4 -4
  313. package/dist/src/{quiverai-aPPvXOgn.js → quiverai-BvIhI_0l.js} +4 -4
  314. package/dist/src/{quiverai-DR0SnIQV.js → quiverai-CdTWPe-A.js} +3 -3
  315. package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Cv7rJKDz.js} +4 -4
  316. package/dist/src/registry-BUJrgjwv.js +124 -0
  317. package/dist/src/registry-DXm1t_x0.js +125 -0
  318. package/dist/src/registry-Dp5EqoXc.js +124 -0
  319. package/dist/src/registry-KCVF1CFC.cjs +124 -0
  320. package/dist/src/{server-D6Il2Sob.js → remoteGeneration-B1_XsKXU.js} +16 -108
  321. package/dist/src/{server-BSB45Nt9.js → remoteGeneration-COpWcmWd.js} +15 -146
  322. package/dist/src/{server-Dx2TyCH2.cjs → remoteGeneration-DS9N3pgB.cjs} +30 -119
  323. package/dist/src/remoteGeneration-DsaSwmG2.js +217 -0
  324. package/dist/src/render-BNTrbmBw.cjs +384 -0
  325. package/dist/src/render-CSP99NLm.js +348 -0
  326. package/dist/src/render-DFfDeYUK.js +347 -0
  327. package/dist/src/{render-CgVDrJmM.js → render-DznWrxGO.js} +2 -2
  328. package/dist/src/render-_6ur1fhE.js +347 -0
  329. package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
  330. package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
  331. package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
  332. package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
  333. package/dist/src/{responses-Bi9vBuW_.cjs → responses-1UFFF9N_.cjs} +51 -16
  334. package/dist/src/{responses-DL9m8CyY.js → responses-B3W2JvOQ.js} +49 -15
  335. package/dist/src/{responses--OsX2aYW.js → responses-B6ktc3Ra.js} +49 -15
  336. package/dist/src/{responses-C-flexAY.js → responses-URRzV8qE.js} +49 -15
  337. package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
  338. package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
  339. package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CXlFM2rR.js} +3 -3
  340. package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-CnlW8AYb.js} +3 -3
  341. package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-CqUWBZAt.cjs} +18 -27
  342. package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DdGojpfv.js} +3 -3
  343. package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
  344. package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
  345. package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
  346. package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
  347. package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-CujrzP1a.js} +62 -51
  348. package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-DzffAqo_.cjs} +65 -53
  349. package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-vhtSV7JI.js} +62 -51
  350. package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-yr1QKeBs.js} +61 -50
  351. package/dist/src/{scanner-1DqWi1Ej.js → scanner-DS0109SS.js} +7 -7
  352. package/dist/src/server/index.js +5105 -605
  353. package/dist/src/server-B8rqV126.cjs +126 -0
  354. package/dist/src/server-BaLytskk.js +3 -0
  355. package/dist/src/server-CMJD10J4.js +107 -0
  356. package/dist/src/server-Ddp8GNMp.js +146 -0
  357. package/dist/src/server-DhMHosWj.js +182 -0
  358. package/dist/src/shared-7pmVZLNO.js +1334 -0
  359. package/dist/src/shared-9WHQ1oNE.js +1335 -0
  360. package/dist/src/{fileExtensions-BArZuxsI.js → shared-BoG7qLMv.js} +12 -2
  361. package/dist/src/shared-D6IjElRI.js +1334 -0
  362. package/dist/src/shared-WkgnDkcg.cjs +1436 -0
  363. package/dist/src/{signal-CE5G3a7x.js → signal-CSurUUyV.js} +3 -3
  364. package/dist/src/simulatedUser-C9aQObBI.js +222 -0
  365. package/dist/src/simulatedUser-Cu601Dd4.cjs +227 -0
  366. package/dist/src/simulatedUser-U_qAHnuB.js +222 -0
  367. package/dist/src/simulatedUser-p3tACcmw.js +223 -0
  368. package/dist/src/{slack-DDUe-5MC.js → slack-Bapo-7_8.js} +2 -2
  369. package/dist/src/{slack-1Rhq0EoV.cjs → slack-DMC1QVEg.cjs} +3 -2
  370. package/dist/src/{slack-D5Wpy8LM.js → slack-DTEFhrMn.js} +2 -2
  371. package/dist/src/{slack-acRb0IqQ.js → slack-k-_CP84Q.js} +1 -1
  372. package/dist/src/storage-BU4qcnOb.js +875 -0
  373. package/dist/src/storage-CA-v9V2v.cjs +911 -0
  374. package/dist/src/storage-CD-GWAdx.js +822 -0
  375. package/dist/src/storage-QdU-SmvD.js +834 -0
  376. package/dist/src/{store-DAAyxcy6.cjs → store-B2NDDooM.cjs} +60 -24
  377. package/dist/src/{store-CYEy5J2D.js → store-DKd5592Q.js} +51 -20
  378. package/dist/src/{store-M0b1WfYb.js → store-HpopRVzl.js} +50 -19
  379. package/dist/src/store-IbiRIF3k.js +3 -0
  380. package/dist/src/strategies-7CS3Alao.cjs +2360 -0
  381. package/dist/src/strategies-CiSeroPH.js +2331 -0
  382. package/dist/src/strategies-DRJjGTIY.js +2333 -0
  383. package/dist/src/{tables-DQ4WU5tX.js → tables-CRSXQ2Ke.js} +2 -2
  384. package/dist/src/{tables-CsWou1Bx.js → tables-CxjU7bBd.js} +3 -3
  385. package/dist/src/{tables-DUfh1F7Z.cjs → tables-DBIJU0WE.cjs} +6 -5
  386. package/dist/src/{tables-C4CH3zRr.js → tables-DafUHOeh.js} +3 -3
  387. package/dist/src/{telemetry-CQPez_Jp.js → telemetry-00ezXr_t.js} +5 -4
  388. package/dist/src/telemetry-ByPqDcKC.js +3 -0
  389. package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CJ7FnCsc.cjs} +18 -11
  390. package/dist/src/{telemetry-dbaJ0E98.js → telemetry-DmXYcJNV.js} +5 -4
  391. package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-DwX9XUN5.js} +4 -3
  392. package/dist/src/{text-KvuD2Iko.js → text-Db-Wt2u2.js} +1 -1
  393. package/dist/src/{text-DHxdyQqT.js → text-DwYK5EBn.js} +1 -1
  394. package/dist/src/{text-BVi-cLPJ.cjs → text-nywWsRBM.cjs} +1 -1
  395. package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-BjVkdk18.js} +1 -1
  396. package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-CDet74yk.js} +1 -1
  397. package/dist/src/tokenUsageUtils-CmnQ0G2m.js +142 -0
  398. package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
  399. package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
  400. package/dist/src/toolAttributes-COVgDrBG.js +87 -0
  401. package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
  402. package/dist/src/tracingOptions-BnwKCkSB.js +221 -0
  403. package/dist/src/tracingOptions-Chi74lOD.js +219 -0
  404. package/dist/src/tracingOptions-DrbSFaKy.cjs +249 -0
  405. package/dist/src/tracingOptions-ji2OuXbT.js +220 -0
  406. package/dist/src/{transcription-DuWDupG7.js → transcription-B8uIgCYX.js} +5 -5
  407. package/dist/src/{transcription-CJspiD2c.js → transcription-CfU5loSq.js} +6 -6
  408. package/dist/src/{transcription-V2HaAmy2.js → transcription-Dkd22_4K.js} +6 -6
  409. package/dist/src/{transcription-BvjmiYB1.cjs → transcription-mzuf18Mq.cjs} +9 -8
  410. package/dist/src/{transform-lQrDE1BQ.js → transform-BIMynQsA.js} +9 -9
  411. package/dist/src/transform-BnSTnFlp.js +187 -0
  412. package/dist/src/transform-BnSXWmU_2.cjs +221 -0
  413. package/dist/src/transform-CGt7Kt3y2.js +186 -0
  414. package/dist/src/transform-CrPGTsij.js +186 -0
  415. package/dist/src/{transform-CTeuTR3S.cjs → transform-DhNkAUs8.cjs} +13 -12
  416. package/dist/src/{transform-CG0ehZNG.js → transform-DmvYBRll.js} +9 -9
  417. package/dist/src/{transform-zDhMmzwX.js → transform-EtD4jAWi.js} +9 -9
  418. package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-0ThtPved.js} +1 -1
  419. package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
  420. package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-BvyU9vDD.js} +1 -1
  421. package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
  422. package/dist/src/{types-Dm9JM6Vb.js → types-BFevViUY.js} +115 -19
  423. package/dist/src/{types-Bgh5SOn6.js → types-BJQBBPTP.js} +115 -19
  424. package/dist/src/{types-CeaeaZdP.cjs → types-CxJvaY2S.cjs} +357 -172
  425. package/dist/src/{types-BGQDAP8i.js → types-D6glLbdF.js} +271 -170
  426. package/dist/src/{util-BYvQUPp7.js → util--WMgw7wM.js} +28 -8
  427. package/dist/src/{util-C9J8ahRn.js → util-5WnCSb0h.js} +72 -48
  428. package/dist/src/{util-CN3SrLT4.cjs → util-BSIuSLVK.cjs} +74 -49
  429. package/dist/src/{util-C8e5uydV.js → util-Bx677_k2.js} +154 -147
  430. package/dist/src/util-CN8om2rz.cjs +386 -0
  431. package/dist/src/{util-DDs-7g6-.js → util-CoQWM76y.js} +28 -8
  432. package/dist/src/util-DNl96nNs.js +327 -0
  433. package/dist/src/{util-DxWpWjhc.js → util-DURocbYR.js} +667 -507
  434. package/dist/src/util-Df8YMvS1.js +327 -0
  435. package/dist/src/{util-DvU2Pw8c.js → util-DiQ3QvBB.js} +28 -8
  436. package/dist/src/{util-oGMLA7vc.js → util-I-Rf-KaD.js} +862 -577
  437. package/dist/src/{util-olYL5C6N.cjs → util-IYzs5Y04.cjs} +33 -7
  438. package/dist/src/{util-D9TisOyk.js → util-LKTmNsMQ.js} +71 -47
  439. package/dist/src/{util-Bxn8emtE.cjs → util-SPsvFONY.cjs} +738 -582
  440. package/dist/src/{util-D3q0WQ-0.js → util-efByNxcr.js} +72 -48
  441. package/dist/src/util-kDURhgJW.js +328 -0
  442. package/dist/src/{utils-DJfvjyMj.js → utils-B0lzitHZ.js} +3 -3
  443. package/dist/src/{utils-BLJKfv0y.js → utils-BFOh20Gb.js} +3 -3
  444. package/dist/src/{utils-hXtCYanr.js → utils-BGY69tk_.js} +2 -2
  445. package/dist/src/{utils-B05gLxER.cjs → utils-Ve6kuJsa.cjs} +3 -3
  446. package/dist/src/version-BK20a4sw.js +16 -0
  447. package/dist/src/version-BWCSaByA.cjs +27 -0
  448. package/dist/src/version-eRkNuGv8.js +17 -0
  449. package/dist/src/version-lpHV_53E.js +16 -0
  450. package/dist/tsconfig.tsbuildinfo +1 -1
  451. package/package.json +56 -28
  452. package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
  453. package/dist/src/app/assets/index-BXGkeMwh.css +0 -1
  454. package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
  455. package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
  456. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
  457. package/dist/src/cache-Cr9oLMUa.js +0 -3
  458. package/dist/src/cache-DbLsVWB2.cjs +0 -3
  459. package/dist/src/cloud-Hphvo8kr.js +0 -3
  460. package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
  461. package/dist/src/codex-sdk-CWEnH70W.cjs +0 -2
  462. package/dist/src/evalResult-D8MT9p0s.js +0 -3
  463. package/dist/src/evalResult-DElBuddX.js +0 -2
  464. package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
  465. package/dist/src/evaluator-CVessDWe.js +0 -3
  466. package/dist/src/fetch-C7bGKDlQ.js +0 -3
  467. package/dist/src/graders-BOAzQEUe.cjs +0 -2
  468. package/dist/src/graders-D4BTsZdG2.js +0 -3
  469. package/dist/src/graders-DOJK1XpV.js +0 -2
  470. package/dist/src/graders-NAv9LcBn.js +0 -2
  471. package/dist/src/image-B5Mv-Z3h.js +0 -257
  472. package/dist/src/image-DVz2RiMF.js +0 -258
  473. package/dist/src/image-qUpPvmNZ.js +0 -257
  474. package/dist/src/image-x6KqLQl4.cjs +0 -280
  475. package/dist/src/providers-Bp4S-FvO.js +0 -2
  476. package/dist/src/providers-DV3ax9e_.cjs +0 -3
  477. package/dist/src/providers-u9Enmfok.js +0 -2
  478. package/dist/src/render-CH-62LbA.js +0 -135
  479. package/dist/src/render-CMEpfLaO.js +0 -136
  480. package/dist/src/render-DHIZ6_k8.js +0 -135
  481. package/dist/src/render-DfQSFxGE.cjs +0 -165
  482. package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
  483. package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
  484. package/dist/src/server-BNYztJkh.js +0 -385
  485. package/dist/src/server-DCtHUqlp.js +0 -3
  486. package/dist/src/server-DaA2eR26.cjs +0 -2
  487. package/dist/src/store-CWOSz6D_.cjs +0 -2
  488. package/dist/src/store-DCDBhv7B.js +0 -3
  489. package/dist/src/store-Dn9HUkdW.js +0 -240
  490. package/dist/src/telemetry-C1IqxcdW.js +0 -3
  491. package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
  492. package/dist/src/transform-Bbg6A8Jk.js +0 -216
  493. package/dist/src/transform-CUnzlsbn.cjs +0 -228
  494. package/dist/src/transform-DYX1_Xnh.js +0 -216
  495. package/dist/src/transform-DgKlRr73.cjs +0 -2
  496. package/dist/src/transform-M6ITAESf.js +0 -3
  497. package/dist/src/transform-UN5UGu8U.js +0 -213
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { s as logger } from "./logger-DksKw1Qc.js";
3
- import { _ as getDbSignalPath } from "./tables-C4CH3zRr.js";
2
+ import { s as logger } from "./logger-BbY6ypFL.js";
3
+ import { _ as getDbSignalPath } from "./tables-DafUHOeh.js";
4
4
  import fs from "fs";
5
5
  import debounce from "debounce";
6
6
  //#region src/util/providerResponse.ts
@@ -113,4 +113,4 @@ function setupSignalWatcher(onChange) {
113
113
  //#endregion
114
114
  export { getActualPromptWithFallback as a, getActualPrompt as i, setupSignalWatcher as n, updateSignalFile as r, readSignalEvalId as t };
115
115
 
116
- //# sourceMappingURL=signal-CE5G3a7x.js.map
116
+ //# sourceMappingURL=signal-CSurUUyV.js.map
@@ -0,0 +1,222 @@
1
+ import { a as logger } from "./logger-KD8JjCRJ.js";
2
+ import { m as sleep } from "./fetch-BufrQtvR.js";
3
+ import { t as invariant } from "./invariant-DIYf9sP1.js";
4
+ import { o as getNunjucksEngine } from "./render-_6ur1fhE.js";
5
+ import { a as createEmptyTokenUsage, n as accumulateResponseTokenUsage } from "./tokenUsageUtils-BjVkdk18.js";
6
+ import { A as maybeLoadConfigFromExternalFile } from "./util-I-Rf-KaD.js";
7
+ import { o as getSessionId } from "./util-Df8YMvS1.js";
8
+ import { r as PromptfooSimulatedUserProvider } from "./promptfoo-BDrfT30-.js";
9
+ //#region src/providers/simulatedUser.ts
10
+ /**
11
+ * TODO(Will): Ideally this class is an Abstract Base Class that's implemented by the
12
+ * Redteam and Non-Redteam SimulatedUser Providers. Address this in a follow-up PR.
13
+ */
14
+ var SimulatedUser = class {
15
+ identifier;
16
+ maxTurns;
17
+ rawInstructions;
18
+ stateful;
19
+ configInitialMessages;
20
+ /**
21
+ * Because the SimulatedUser is inherited by the RedteamMischievousUserProvider, and different
22
+ * Cloud tasks are used for each, the taskId needs to be explicitly defined/scoped.
23
+ */
24
+ taskId = "tau";
25
+ constructor({ id, label, config }) {
26
+ this.identifier = id ?? label ?? "agent-provider";
27
+ this.maxTurns = config.maxTurns ?? 10;
28
+ this.rawInstructions = config.instructions || "{{instructions}}";
29
+ this.stateful = config.stateful ?? false;
30
+ this.configInitialMessages = config.initialMessages;
31
+ }
32
+ id() {
33
+ return this.identifier;
34
+ }
35
+ /**
36
+ * Validates that a message has the required structure.
37
+ */
38
+ isValidMessage(msg) {
39
+ return msg && typeof msg === "object" && typeof msg.content === "string" && (msg.role === "user" || msg.role === "assistant" || msg.role === "system");
40
+ }
41
+ /**
42
+ * Safely renders a Nunjucks template string, falling back to the original value on error.
43
+ */
44
+ renderTemplate(template, vars) {
45
+ if (typeof template !== "string") return template;
46
+ try {
47
+ return getNunjucksEngine().renderString(template, vars || {});
48
+ } catch (err) {
49
+ logger.warn(`[SimulatedUser] Failed to render template: ${template.substring(0, 100)}. Error: ${err instanceof Error ? err.message : err}`);
50
+ return template;
51
+ }
52
+ }
53
+ /**
54
+ * Validates and filters an array of messages, logging warnings for invalid entries.
55
+ */
56
+ validateMessages(messages) {
57
+ const validMessages = [];
58
+ for (let i = 0; i < messages.length; i++) if (this.isValidMessage(messages[i])) validMessages.push(messages[i]);
59
+ else logger.warn(`[SimulatedUser] Invalid message at index ${i}, skipping. Expected {role: 'user'|'assistant'|'system', content: string}, got: ${JSON.stringify(messages[i]).substring(0, 100)}`);
60
+ return validMessages;
61
+ }
62
+ /**
63
+ * Resolves initial messages from either an array or a file:// path.
64
+ * Supports loading messages from JSON and YAML files.
65
+ */
66
+ resolveInitialMessages(initialMessages) {
67
+ if (!initialMessages) return [];
68
+ if (Array.isArray(initialMessages)) return initialMessages;
69
+ if (typeof initialMessages === "string") {
70
+ if (initialMessages.trim() === "") return [];
71
+ if (initialMessages.startsWith("file://")) {
72
+ try {
73
+ const resolved = maybeLoadConfigFromExternalFile(initialMessages);
74
+ if (Array.isArray(resolved)) return resolved;
75
+ logger.warn(`[SimulatedUser] Expected array of messages from file, got: ${typeof resolved}. Value: ${JSON.stringify(resolved).substring(0, 200)}`);
76
+ } catch (error) {
77
+ logger.warn(`[SimulatedUser] Failed to load initialMessages from file: ${error instanceof Error ? error.message : error}`);
78
+ }
79
+ return [];
80
+ }
81
+ if (initialMessages.trim().startsWith("[")) try {
82
+ const parsed = JSON.parse(initialMessages);
83
+ if (Array.isArray(parsed)) return parsed;
84
+ logger.warn(`[SimulatedUser] Parsed JSON but got ${typeof parsed} instead of array. Value: ${initialMessages.substring(0, 200)}`);
85
+ } catch (error) {
86
+ logger.warn(`[SimulatedUser] Failed to parse initialMessages as JSON: ${error}. Value: ${initialMessages.substring(0, 200)}`);
87
+ }
88
+ logger.warn(`[SimulatedUser] initialMessages is a string but could not be resolved: ${initialMessages.substring(0, 200)}`);
89
+ return [];
90
+ }
91
+ return [];
92
+ }
93
+ async sendMessageToUser(messages, userProvider) {
94
+ logger.debug("[SimulatedUser] Sending message to simulated user provider");
95
+ const flippedMessages = messages.map((message) => {
96
+ return {
97
+ role: message.role === "user" ? "assistant" : "user",
98
+ content: message.content
99
+ };
100
+ });
101
+ const response = await userProvider.callApi(JSON.stringify(flippedMessages));
102
+ if (response.error) return {
103
+ messages,
104
+ error: response.error
105
+ };
106
+ logger.debug(`User: ${response.output}`);
107
+ return {
108
+ messages: [...messages, {
109
+ role: "user",
110
+ content: String(response.output || "")
111
+ }],
112
+ tokenUsage: response.tokenUsage
113
+ };
114
+ }
115
+ async sendMessageToAgent(prompt, messages, targetProvider, context) {
116
+ invariant(context?.prompt?.raw, "Expected context.prompt.raw to be set");
117
+ const renderedPrompt = context.prompt.function ? prompt : getNunjucksEngine().renderString(context.prompt.raw, context.vars);
118
+ const targetPrompt = this.stateful ? context.vars?.sessionId ? JSON.stringify([{
119
+ role: "user",
120
+ content: messages[messages.length - 1].content
121
+ }]) : JSON.stringify([{
122
+ role: "system",
123
+ content: renderedPrompt
124
+ }, {
125
+ role: "user",
126
+ content: messages[messages.length - 1].content
127
+ }]) : JSON.stringify([{
128
+ role: "system",
129
+ content: renderedPrompt
130
+ }, ...messages]);
131
+ logger.debug(`[SimulatedUser] Sending message to target provider: ${targetPrompt}`);
132
+ const response = await targetProvider.callApi(targetPrompt, context);
133
+ if (response.sessionId) {
134
+ context = context ?? {
135
+ vars: {},
136
+ prompt: {
137
+ raw: "",
138
+ label: "target"
139
+ }
140
+ };
141
+ context.vars.sessionId = response.sessionId;
142
+ }
143
+ if (targetProvider.delay) {
144
+ logger.debug(`[SimulatedUser] Sleeping for ${targetProvider.delay}ms`);
145
+ await sleep(targetProvider.delay);
146
+ }
147
+ logger.debug(`[SimulatedUser] Agent: ${response.output}`);
148
+ return response;
149
+ }
150
+ async callApi(prompt, context, _callApiOptions) {
151
+ invariant(context?.originalProvider, "Expected originalProvider to be set");
152
+ const targetProvider = context.originalProvider;
153
+ const instructions = getNunjucksEngine().renderString(this.rawInstructions, context?.vars);
154
+ const userProvider = new PromptfooSimulatedUserProvider({ instructions }, this.taskId);
155
+ logger.debug(`[SimulatedUser] Formatted user instructions: ${instructions}`);
156
+ const varsInitialMessages = context?.vars?.initialMessages;
157
+ const templatedMessages = this.resolveInitialMessages(varsInitialMessages || this.configInitialMessages).map((msg) => ({
158
+ role: this.renderTemplate(msg.role, context?.vars),
159
+ content: this.renderTemplate(msg.content, context?.vars)
160
+ }));
161
+ const messages = this.validateMessages(templatedMessages);
162
+ if (messages.length > 0) logger.debug(`[SimulatedUser] Starting with ${messages.length} initial messages`);
163
+ const maxTurns = this.maxTurns;
164
+ const tokenUsage = createEmptyTokenUsage();
165
+ let agentResponse;
166
+ if ((messages.length > 0 ? messages[messages.length - 1].role : null) === "user") {
167
+ logger.debug("[SimulatedUser] Initial messages end with user message, getting agent response first");
168
+ agentResponse = await this.sendMessageToAgent(prompt, messages, targetProvider, context);
169
+ if (agentResponse.error) return {
170
+ error: agentResponse.error,
171
+ tokenUsage
172
+ };
173
+ messages.push({
174
+ role: "assistant",
175
+ content: String(agentResponse.output ?? "")
176
+ });
177
+ accumulateResponseTokenUsage(tokenUsage, agentResponse);
178
+ }
179
+ for (let i = 0; i < maxTurns; i++) {
180
+ logger.debug(`[SimulatedUser] Turn ${i + 1} of ${maxTurns}`);
181
+ const userResult = await this.sendMessageToUser(messages, userProvider);
182
+ if (userResult.error) return {
183
+ error: userResult.error,
184
+ tokenUsage
185
+ };
186
+ const { messages: messagesToUser, tokenUsage: userTokenUsage } = userResult;
187
+ accumulateResponseTokenUsage(tokenUsage, { tokenUsage: userTokenUsage });
188
+ const lastMessage = messagesToUser[messagesToUser.length - 1];
189
+ if (lastMessage.content && typeof lastMessage.content === "string" && lastMessage.content.includes("###STOP###")) break;
190
+ messages.push(lastMessage);
191
+ agentResponse = await this.sendMessageToAgent(prompt, messagesToUser, targetProvider, context);
192
+ if (agentResponse.error) return {
193
+ error: agentResponse.error,
194
+ tokenUsage
195
+ };
196
+ messages.push({
197
+ role: "assistant",
198
+ content: String(agentResponse.output ?? "")
199
+ });
200
+ accumulateResponseTokenUsage(tokenUsage, agentResponse);
201
+ }
202
+ return this.serializeOutput(messages, tokenUsage, agentResponse, getSessionId(agentResponse, context));
203
+ }
204
+ toString() {
205
+ return "AgentProvider";
206
+ }
207
+ serializeOutput(messages, tokenUsage, finalTargetResponse, sessionId) {
208
+ return {
209
+ output: messages.map((message) => `${message.role === "assistant" ? "Assistant" : "User"}: ${message.content}`).join("\n---\n"),
210
+ tokenUsage,
211
+ metadata: {
212
+ messages,
213
+ sessionId
214
+ },
215
+ guardrails: finalTargetResponse?.guardrails
216
+ };
217
+ }
218
+ };
219
+ //#endregion
220
+ export { SimulatedUser as t };
221
+
222
+ //# sourceMappingURL=simulatedUser-C9aQObBI.js.map
@@ -0,0 +1,227 @@
1
+ const require_logger = require("./logger-cfNpzI4o.cjs");
2
+ const require_invariant = require("./invariant-QtnLD03y.cjs");
3
+ const require_fetch = require("./fetch-Dw4XZHjj.cjs");
4
+ const require_render = require("./render-BNTrbmBw.cjs");
5
+ const require_util = require("./util-SPsvFONY.cjs");
6
+ const require_tokenUsageUtils = require("./tokenUsageUtils-_B-P8IAi.cjs");
7
+ const require_util$1 = require("./util-CN8om2rz.cjs");
8
+ const require_promptfoo = require("./promptfoo-b-baRMj-.cjs");
9
+ //#region src/providers/simulatedUser.ts
10
+ /**
11
+ * TODO(Will): Ideally this class is an Abstract Base Class that's implemented by the
12
+ * Redteam and Non-Redteam SimulatedUser Providers. Address this in a follow-up PR.
13
+ */
14
+ var SimulatedUser = class {
15
+ identifier;
16
+ maxTurns;
17
+ rawInstructions;
18
+ stateful;
19
+ configInitialMessages;
20
+ /**
21
+ * Because the SimulatedUser is inherited by the RedteamMischievousUserProvider, and different
22
+ * Cloud tasks are used for each, the taskId needs to be explicitly defined/scoped.
23
+ */
24
+ taskId = "tau";
25
+ constructor({ id, label, config }) {
26
+ this.identifier = id ?? label ?? "agent-provider";
27
+ this.maxTurns = config.maxTurns ?? 10;
28
+ this.rawInstructions = config.instructions || "{{instructions}}";
29
+ this.stateful = config.stateful ?? false;
30
+ this.configInitialMessages = config.initialMessages;
31
+ }
32
+ id() {
33
+ return this.identifier;
34
+ }
35
+ /**
36
+ * Validates that a message has the required structure.
37
+ */
38
+ isValidMessage(msg) {
39
+ return msg && typeof msg === "object" && typeof msg.content === "string" && (msg.role === "user" || msg.role === "assistant" || msg.role === "system");
40
+ }
41
+ /**
42
+ * Safely renders a Nunjucks template string, falling back to the original value on error.
43
+ */
44
+ renderTemplate(template, vars) {
45
+ if (typeof template !== "string") return template;
46
+ try {
47
+ return require_render.getNunjucksEngine().renderString(template, vars || {});
48
+ } catch (err) {
49
+ require_logger.logger.warn(`[SimulatedUser] Failed to render template: ${template.substring(0, 100)}. Error: ${err instanceof Error ? err.message : err}`);
50
+ return template;
51
+ }
52
+ }
53
+ /**
54
+ * Validates and filters an array of messages, logging warnings for invalid entries.
55
+ */
56
+ validateMessages(messages) {
57
+ const validMessages = [];
58
+ for (let i = 0; i < messages.length; i++) if (this.isValidMessage(messages[i])) validMessages.push(messages[i]);
59
+ else require_logger.logger.warn(`[SimulatedUser] Invalid message at index ${i}, skipping. Expected {role: 'user'|'assistant'|'system', content: string}, got: ${JSON.stringify(messages[i]).substring(0, 100)}`);
60
+ return validMessages;
61
+ }
62
+ /**
63
+ * Resolves initial messages from either an array or a file:// path.
64
+ * Supports loading messages from JSON and YAML files.
65
+ */
66
+ resolveInitialMessages(initialMessages) {
67
+ if (!initialMessages) return [];
68
+ if (Array.isArray(initialMessages)) return initialMessages;
69
+ if (typeof initialMessages === "string") {
70
+ if (initialMessages.trim() === "") return [];
71
+ if (initialMessages.startsWith("file://")) {
72
+ try {
73
+ const resolved = require_util.maybeLoadConfigFromExternalFile(initialMessages);
74
+ if (Array.isArray(resolved)) return resolved;
75
+ require_logger.logger.warn(`[SimulatedUser] Expected array of messages from file, got: ${typeof resolved}. Value: ${JSON.stringify(resolved).substring(0, 200)}`);
76
+ } catch (error) {
77
+ require_logger.logger.warn(`[SimulatedUser] Failed to load initialMessages from file: ${error instanceof Error ? error.message : error}`);
78
+ }
79
+ return [];
80
+ }
81
+ if (initialMessages.trim().startsWith("[")) try {
82
+ const parsed = JSON.parse(initialMessages);
83
+ if (Array.isArray(parsed)) return parsed;
84
+ require_logger.logger.warn(`[SimulatedUser] Parsed JSON but got ${typeof parsed} instead of array. Value: ${initialMessages.substring(0, 200)}`);
85
+ } catch (error) {
86
+ require_logger.logger.warn(`[SimulatedUser] Failed to parse initialMessages as JSON: ${error}. Value: ${initialMessages.substring(0, 200)}`);
87
+ }
88
+ require_logger.logger.warn(`[SimulatedUser] initialMessages is a string but could not be resolved: ${initialMessages.substring(0, 200)}`);
89
+ return [];
90
+ }
91
+ return [];
92
+ }
93
+ async sendMessageToUser(messages, userProvider) {
94
+ require_logger.logger.debug("[SimulatedUser] Sending message to simulated user provider");
95
+ const flippedMessages = messages.map((message) => {
96
+ return {
97
+ role: message.role === "user" ? "assistant" : "user",
98
+ content: message.content
99
+ };
100
+ });
101
+ const response = await userProvider.callApi(JSON.stringify(flippedMessages));
102
+ if (response.error) return {
103
+ messages,
104
+ error: response.error
105
+ };
106
+ require_logger.logger.debug(`User: ${response.output}`);
107
+ return {
108
+ messages: [...messages, {
109
+ role: "user",
110
+ content: String(response.output || "")
111
+ }],
112
+ tokenUsage: response.tokenUsage
113
+ };
114
+ }
115
+ async sendMessageToAgent(prompt, messages, targetProvider, context) {
116
+ require_invariant.invariant(context?.prompt?.raw, "Expected context.prompt.raw to be set");
117
+ const renderedPrompt = context.prompt.function ? prompt : require_render.getNunjucksEngine().renderString(context.prompt.raw, context.vars);
118
+ const targetPrompt = this.stateful ? context.vars?.sessionId ? JSON.stringify([{
119
+ role: "user",
120
+ content: messages[messages.length - 1].content
121
+ }]) : JSON.stringify([{
122
+ role: "system",
123
+ content: renderedPrompt
124
+ }, {
125
+ role: "user",
126
+ content: messages[messages.length - 1].content
127
+ }]) : JSON.stringify([{
128
+ role: "system",
129
+ content: renderedPrompt
130
+ }, ...messages]);
131
+ require_logger.logger.debug(`[SimulatedUser] Sending message to target provider: ${targetPrompt}`);
132
+ const response = await targetProvider.callApi(targetPrompt, context);
133
+ if (response.sessionId) {
134
+ context = context ?? {
135
+ vars: {},
136
+ prompt: {
137
+ raw: "",
138
+ label: "target"
139
+ }
140
+ };
141
+ context.vars.sessionId = response.sessionId;
142
+ }
143
+ if (targetProvider.delay) {
144
+ require_logger.logger.debug(`[SimulatedUser] Sleeping for ${targetProvider.delay}ms`);
145
+ await require_fetch.sleep(targetProvider.delay);
146
+ }
147
+ require_logger.logger.debug(`[SimulatedUser] Agent: ${response.output}`);
148
+ return response;
149
+ }
150
+ async callApi(prompt, context, _callApiOptions) {
151
+ require_invariant.invariant(context?.originalProvider, "Expected originalProvider to be set");
152
+ const targetProvider = context.originalProvider;
153
+ const instructions = require_render.getNunjucksEngine().renderString(this.rawInstructions, context?.vars);
154
+ const userProvider = new require_promptfoo.PromptfooSimulatedUserProvider({ instructions }, this.taskId);
155
+ require_logger.logger.debug(`[SimulatedUser] Formatted user instructions: ${instructions}`);
156
+ const varsInitialMessages = context?.vars?.initialMessages;
157
+ const templatedMessages = this.resolveInitialMessages(varsInitialMessages || this.configInitialMessages).map((msg) => ({
158
+ role: this.renderTemplate(msg.role, context?.vars),
159
+ content: this.renderTemplate(msg.content, context?.vars)
160
+ }));
161
+ const messages = this.validateMessages(templatedMessages);
162
+ if (messages.length > 0) require_logger.logger.debug(`[SimulatedUser] Starting with ${messages.length} initial messages`);
163
+ const maxTurns = this.maxTurns;
164
+ const tokenUsage = require_tokenUsageUtils.createEmptyTokenUsage();
165
+ let agentResponse;
166
+ if ((messages.length > 0 ? messages[messages.length - 1].role : null) === "user") {
167
+ require_logger.logger.debug("[SimulatedUser] Initial messages end with user message, getting agent response first");
168
+ agentResponse = await this.sendMessageToAgent(prompt, messages, targetProvider, context);
169
+ if (agentResponse.error) return {
170
+ error: agentResponse.error,
171
+ tokenUsage
172
+ };
173
+ messages.push({
174
+ role: "assistant",
175
+ content: String(agentResponse.output ?? "")
176
+ });
177
+ require_tokenUsageUtils.accumulateResponseTokenUsage(tokenUsage, agentResponse);
178
+ }
179
+ for (let i = 0; i < maxTurns; i++) {
180
+ require_logger.logger.debug(`[SimulatedUser] Turn ${i + 1} of ${maxTurns}`);
181
+ const userResult = await this.sendMessageToUser(messages, userProvider);
182
+ if (userResult.error) return {
183
+ error: userResult.error,
184
+ tokenUsage
185
+ };
186
+ const { messages: messagesToUser, tokenUsage: userTokenUsage } = userResult;
187
+ require_tokenUsageUtils.accumulateResponseTokenUsage(tokenUsage, { tokenUsage: userTokenUsage });
188
+ const lastMessage = messagesToUser[messagesToUser.length - 1];
189
+ if (lastMessage.content && typeof lastMessage.content === "string" && lastMessage.content.includes("###STOP###")) break;
190
+ messages.push(lastMessage);
191
+ agentResponse = await this.sendMessageToAgent(prompt, messagesToUser, targetProvider, context);
192
+ if (agentResponse.error) return {
193
+ error: agentResponse.error,
194
+ tokenUsage
195
+ };
196
+ messages.push({
197
+ role: "assistant",
198
+ content: String(agentResponse.output ?? "")
199
+ });
200
+ require_tokenUsageUtils.accumulateResponseTokenUsage(tokenUsage, agentResponse);
201
+ }
202
+ return this.serializeOutput(messages, tokenUsage, agentResponse, require_util$1.getSessionId(agentResponse, context));
203
+ }
204
+ toString() {
205
+ return "AgentProvider";
206
+ }
207
+ serializeOutput(messages, tokenUsage, finalTargetResponse, sessionId) {
208
+ return {
209
+ output: messages.map((message) => `${message.role === "assistant" ? "Assistant" : "User"}: ${message.content}`).join("\n---\n"),
210
+ tokenUsage,
211
+ metadata: {
212
+ messages,
213
+ sessionId
214
+ },
215
+ guardrails: finalTargetResponse?.guardrails
216
+ };
217
+ }
218
+ };
219
+ //#endregion
220
+ Object.defineProperty(exports, "SimulatedUser", {
221
+ enumerable: true,
222
+ get: function() {
223
+ return SimulatedUser;
224
+ }
225
+ });
226
+
227
+ //# sourceMappingURL=simulatedUser-Cu601Dd4.cjs.map
@@ -0,0 +1,222 @@
1
+ import { a as logger } from "./logger-Ct2S6Yx-.js";
2
+ import { t as invariant } from "./invariant-Ddh24eXh.js";
3
+ import { l as sleep } from "./fetch-It34O8Ur.js";
4
+ import { o as getNunjucksEngine } from "./render-DFfDeYUK.js";
5
+ import { w as maybeLoadConfigFromExternalFile } from "./util-Bx677_k2.js";
6
+ import { a as createEmptyTokenUsage, n as accumulateResponseTokenUsage } from "./tokenUsageUtils-CmnQ0G2m.js";
7
+ import { o as getSessionId } from "./util-DNl96nNs.js";
8
+ import { r as PromptfooSimulatedUserProvider } from "./promptfoo-Cm4hiy1Y.js";
9
+ //#region src/providers/simulatedUser.ts
10
+ /**
11
+ * TODO(Will): Ideally this class is an Abstract Base Class that's implemented by the
12
+ * Redteam and Non-Redteam SimulatedUser Providers. Address this in a follow-up PR.
13
+ */
14
+ var SimulatedUser = class {
15
+ identifier;
16
+ maxTurns;
17
+ rawInstructions;
18
+ stateful;
19
+ configInitialMessages;
20
+ /**
21
+ * Because the SimulatedUser is inherited by the RedteamMischievousUserProvider, and different
22
+ * Cloud tasks are used for each, the taskId needs to be explicitly defined/scoped.
23
+ */
24
+ taskId = "tau";
25
+ constructor({ id, label, config }) {
26
+ this.identifier = id ?? label ?? "agent-provider";
27
+ this.maxTurns = config.maxTurns ?? 10;
28
+ this.rawInstructions = config.instructions || "{{instructions}}";
29
+ this.stateful = config.stateful ?? false;
30
+ this.configInitialMessages = config.initialMessages;
31
+ }
32
+ id() {
33
+ return this.identifier;
34
+ }
35
+ /**
36
+ * Validates that a message has the required structure.
37
+ */
38
+ isValidMessage(msg) {
39
+ return msg && typeof msg === "object" && typeof msg.content === "string" && (msg.role === "user" || msg.role === "assistant" || msg.role === "system");
40
+ }
41
+ /**
42
+ * Safely renders a Nunjucks template string, falling back to the original value on error.
43
+ */
44
+ renderTemplate(template, vars) {
45
+ if (typeof template !== "string") return template;
46
+ try {
47
+ return getNunjucksEngine().renderString(template, vars || {});
48
+ } catch (err) {
49
+ logger.warn(`[SimulatedUser] Failed to render template: ${template.substring(0, 100)}. Error: ${err instanceof Error ? err.message : err}`);
50
+ return template;
51
+ }
52
+ }
53
+ /**
54
+ * Validates and filters an array of messages, logging warnings for invalid entries.
55
+ */
56
+ validateMessages(messages) {
57
+ const validMessages = [];
58
+ for (let i = 0; i < messages.length; i++) if (this.isValidMessage(messages[i])) validMessages.push(messages[i]);
59
+ else logger.warn(`[SimulatedUser] Invalid message at index ${i}, skipping. Expected {role: 'user'|'assistant'|'system', content: string}, got: ${JSON.stringify(messages[i]).substring(0, 100)}`);
60
+ return validMessages;
61
+ }
62
+ /**
63
+ * Resolves initial messages from either an array or a file:// path.
64
+ * Supports loading messages from JSON and YAML files.
65
+ */
66
+ resolveInitialMessages(initialMessages) {
67
+ if (!initialMessages) return [];
68
+ if (Array.isArray(initialMessages)) return initialMessages;
69
+ if (typeof initialMessages === "string") {
70
+ if (initialMessages.trim() === "") return [];
71
+ if (initialMessages.startsWith("file://")) {
72
+ try {
73
+ const resolved = maybeLoadConfigFromExternalFile(initialMessages);
74
+ if (Array.isArray(resolved)) return resolved;
75
+ logger.warn(`[SimulatedUser] Expected array of messages from file, got: ${typeof resolved}. Value: ${JSON.stringify(resolved).substring(0, 200)}`);
76
+ } catch (error) {
77
+ logger.warn(`[SimulatedUser] Failed to load initialMessages from file: ${error instanceof Error ? error.message : error}`);
78
+ }
79
+ return [];
80
+ }
81
+ if (initialMessages.trim().startsWith("[")) try {
82
+ const parsed = JSON.parse(initialMessages);
83
+ if (Array.isArray(parsed)) return parsed;
84
+ logger.warn(`[SimulatedUser] Parsed JSON but got ${typeof parsed} instead of array. Value: ${initialMessages.substring(0, 200)}`);
85
+ } catch (error) {
86
+ logger.warn(`[SimulatedUser] Failed to parse initialMessages as JSON: ${error}. Value: ${initialMessages.substring(0, 200)}`);
87
+ }
88
+ logger.warn(`[SimulatedUser] initialMessages is a string but could not be resolved: ${initialMessages.substring(0, 200)}`);
89
+ return [];
90
+ }
91
+ return [];
92
+ }
93
+ async sendMessageToUser(messages, userProvider) {
94
+ logger.debug("[SimulatedUser] Sending message to simulated user provider");
95
+ const flippedMessages = messages.map((message) => {
96
+ return {
97
+ role: message.role === "user" ? "assistant" : "user",
98
+ content: message.content
99
+ };
100
+ });
101
+ const response = await userProvider.callApi(JSON.stringify(flippedMessages));
102
+ if (response.error) return {
103
+ messages,
104
+ error: response.error
105
+ };
106
+ logger.debug(`User: ${response.output}`);
107
+ return {
108
+ messages: [...messages, {
109
+ role: "user",
110
+ content: String(response.output || "")
111
+ }],
112
+ tokenUsage: response.tokenUsage
113
+ };
114
+ }
115
+ async sendMessageToAgent(prompt, messages, targetProvider, context) {
116
+ invariant(context?.prompt?.raw, "Expected context.prompt.raw to be set");
117
+ const renderedPrompt = context.prompt.function ? prompt : getNunjucksEngine().renderString(context.prompt.raw, context.vars);
118
+ const targetPrompt = this.stateful ? context.vars?.sessionId ? JSON.stringify([{
119
+ role: "user",
120
+ content: messages[messages.length - 1].content
121
+ }]) : JSON.stringify([{
122
+ role: "system",
123
+ content: renderedPrompt
124
+ }, {
125
+ role: "user",
126
+ content: messages[messages.length - 1].content
127
+ }]) : JSON.stringify([{
128
+ role: "system",
129
+ content: renderedPrompt
130
+ }, ...messages]);
131
+ logger.debug(`[SimulatedUser] Sending message to target provider: ${targetPrompt}`);
132
+ const response = await targetProvider.callApi(targetPrompt, context);
133
+ if (response.sessionId) {
134
+ context = context ?? {
135
+ vars: {},
136
+ prompt: {
137
+ raw: "",
138
+ label: "target"
139
+ }
140
+ };
141
+ context.vars.sessionId = response.sessionId;
142
+ }
143
+ if (targetProvider.delay) {
144
+ logger.debug(`[SimulatedUser] Sleeping for ${targetProvider.delay}ms`);
145
+ await sleep(targetProvider.delay);
146
+ }
147
+ logger.debug(`[SimulatedUser] Agent: ${response.output}`);
148
+ return response;
149
+ }
150
+ async callApi(prompt, context, _callApiOptions) {
151
+ invariant(context?.originalProvider, "Expected originalProvider to be set");
152
+ const targetProvider = context.originalProvider;
153
+ const instructions = getNunjucksEngine().renderString(this.rawInstructions, context?.vars);
154
+ const userProvider = new PromptfooSimulatedUserProvider({ instructions }, this.taskId);
155
+ logger.debug(`[SimulatedUser] Formatted user instructions: ${instructions}`);
156
+ const varsInitialMessages = context?.vars?.initialMessages;
157
+ const templatedMessages = this.resolveInitialMessages(varsInitialMessages || this.configInitialMessages).map((msg) => ({
158
+ role: this.renderTemplate(msg.role, context?.vars),
159
+ content: this.renderTemplate(msg.content, context?.vars)
160
+ }));
161
+ const messages = this.validateMessages(templatedMessages);
162
+ if (messages.length > 0) logger.debug(`[SimulatedUser] Starting with ${messages.length} initial messages`);
163
+ const maxTurns = this.maxTurns;
164
+ const tokenUsage = createEmptyTokenUsage();
165
+ let agentResponse;
166
+ if ((messages.length > 0 ? messages[messages.length - 1].role : null) === "user") {
167
+ logger.debug("[SimulatedUser] Initial messages end with user message, getting agent response first");
168
+ agentResponse = await this.sendMessageToAgent(prompt, messages, targetProvider, context);
169
+ if (agentResponse.error) return {
170
+ error: agentResponse.error,
171
+ tokenUsage
172
+ };
173
+ messages.push({
174
+ role: "assistant",
175
+ content: String(agentResponse.output ?? "")
176
+ });
177
+ accumulateResponseTokenUsage(tokenUsage, agentResponse);
178
+ }
179
+ for (let i = 0; i < maxTurns; i++) {
180
+ logger.debug(`[SimulatedUser] Turn ${i + 1} of ${maxTurns}`);
181
+ const userResult = await this.sendMessageToUser(messages, userProvider);
182
+ if (userResult.error) return {
183
+ error: userResult.error,
184
+ tokenUsage
185
+ };
186
+ const { messages: messagesToUser, tokenUsage: userTokenUsage } = userResult;
187
+ accumulateResponseTokenUsage(tokenUsage, { tokenUsage: userTokenUsage });
188
+ const lastMessage = messagesToUser[messagesToUser.length - 1];
189
+ if (lastMessage.content && typeof lastMessage.content === "string" && lastMessage.content.includes("###STOP###")) break;
190
+ messages.push(lastMessage);
191
+ agentResponse = await this.sendMessageToAgent(prompt, messagesToUser, targetProvider, context);
192
+ if (agentResponse.error) return {
193
+ error: agentResponse.error,
194
+ tokenUsage
195
+ };
196
+ messages.push({
197
+ role: "assistant",
198
+ content: String(agentResponse.output ?? "")
199
+ });
200
+ accumulateResponseTokenUsage(tokenUsage, agentResponse);
201
+ }
202
+ return this.serializeOutput(messages, tokenUsage, agentResponse, getSessionId(agentResponse, context));
203
+ }
204
+ toString() {
205
+ return "AgentProvider";
206
+ }
207
+ serializeOutput(messages, tokenUsage, finalTargetResponse, sessionId) {
208
+ return {
209
+ output: messages.map((message) => `${message.role === "assistant" ? "Assistant" : "User"}: ${message.content}`).join("\n---\n"),
210
+ tokenUsage,
211
+ metadata: {
212
+ messages,
213
+ sessionId
214
+ },
215
+ guardrails: finalTargetResponse?.guardrails
216
+ };
217
+ }
218
+ };
219
+ //#endregion
220
+ export { SimulatedUser as t };
221
+
222
+ //# sourceMappingURL=simulatedUser-U_qAHnuB.js.map