promptfoo 0.121.5 → 0.121.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/dist/src/{ListApp-BRUsT43Y.js → ListApp-DLmM02JS.js} +1 -1
  2. package/dist/src/{accounts-BIFntVWB.cjs → accounts-BVz5gHLK.cjs} +16 -10
  3. package/dist/src/{accounts-bnyHT7Ju.js → accounts-BWjqwsrf.js} +12 -7
  4. package/dist/src/{accounts-CLJHCDDb.js → accounts-D6IBfEE0.js} +13 -8
  5. package/dist/src/{accounts-CaLNYnf7.js → accounts-DAv_0iE7.js} +12 -7
  6. package/dist/src/{agentic-utils-B5krlibj.js → agentic-utils-BJKAkz2e.js} +2 -2
  7. package/dist/src/{agentic-utils-D2x0wGhB.cjs → agentic-utils-C-A92xhn.cjs} +8 -7
  8. package/dist/src/{agentic-utils-Ba67xmgs.js → agentic-utils-DmoS_S4B.js} +2 -2
  9. package/dist/src/{agentic-utils-BclbiXiq.js → agentic-utils-GdToujHu.js} +2 -2
  10. package/dist/src/{agents-BGqaTDnr.js → agents-2C8NN6I1.js} +20 -9
  11. package/dist/src/{agents-n6vPqV3i.js → agents-BMAiSR2o.js} +4 -4
  12. package/dist/src/{agents-BYdMl1UE.js → agents-C-PGaxwj.js} +20 -9
  13. package/dist/src/{agents-BV9yFpXX.js → agents-C98cz5pl.js} +20 -9
  14. package/dist/src/{agents-WULPVjbH.cjs → agents-DB8Ub2Ld.cjs} +7 -6
  15. package/dist/src/{agents-DhxWMCtH.js → agents-Dwshy2H8.js} +4 -4
  16. package/dist/src/{agents-emVcx3yh.js → agents-mlKjx-cK.js} +2 -2
  17. package/dist/src/{agents-DiWmQYH9.cjs → agents-n2ej-c4H.cjs} +21 -10
  18. package/dist/src/{aimlapi-DR4pgeiC.js → aimlapi-Bi-laUlp.js} +6 -6
  19. package/dist/src/{aimlapi-BzLjZI_m.cjs → aimlapi-D0OFV4Vj.cjs} +7 -7
  20. package/dist/src/{aimlapi-BxqK9HF_.js → aimlapi-WyUK0wYy.js} +6 -6
  21. package/dist/src/{aimlapi-uPGp0Zdo.js → aimlapi-v-63ZjEI.js} +6 -6
  22. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
  23. package/dist/src/app/assets/Report-sCXUfaWo.js +1 -0
  24. package/dist/src/app/assets/index-BopgkZEh.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 +6 -6
  33. package/dist/src/{audio-CScmnmEB.js → audio-DnEIHWZR.js} +3 -3
  34. package/dist/src/{audio-Da8U9IS5.js → audio-heR0mu0n.js} +3 -3
  35. package/dist/src/{audio-BvpTOArF.js → audio-wafFO1wn.js} +3 -3
  36. package/dist/src/{audio-C0vDeS0j.cjs → audio-x44tsxIo.cjs} +4 -4
  37. package/dist/src/authoritativeMarkupInjection-2G3Be6oL.cjs +74 -0
  38. package/dist/src/authoritativeMarkupInjection-81PPynHR.js +75 -0
  39. package/dist/src/authoritativeMarkupInjection-D9O70HPi.js +74 -0
  40. package/dist/src/authoritativeMarkupInjection-PxSf3Rh8.js +74 -0
  41. package/dist/src/{base-dYsl2hmL.js → base-0Gzzue9Z.js} +4 -3
  42. package/dist/src/{base-BOMaNEes.js → base-Bp4c52YZ.js} +4 -3
  43. package/dist/src/{base-BTux96b1.js → base-BuNn-YBX.js} +4 -3
  44. package/dist/src/{base-Tw6uhH8K.cjs → base-BzdS8tod.cjs} +5 -4
  45. package/dist/src/bestOfN-BHiOjeaq.js +136 -0
  46. package/dist/src/bestOfN-CdkNPPbX.js +136 -0
  47. package/dist/src/bestOfN-ClUSOhN0.js +137 -0
  48. package/dist/src/bestOfN-DWwXEg1h.cjs +140 -0
  49. package/dist/src/{blobs-B95F_7vE.cjs → blobs-B0977K1O.cjs} +7 -6
  50. package/dist/src/{blobs-D_gg8nbm.js → blobs-CeFdPn_T.js} +2 -2
  51. package/dist/src/{blobs-DjLby-uP.js → blobs-DODuTK-a.js} +2 -2
  52. package/dist/src/{blobs-BW4U31ue.js → blobs-Dwef1Ao1.js} +2 -2
  53. package/dist/src/cache-BKYi3kAA.js +3 -0
  54. package/dist/src/{cache-BI5BY7ey.js → cache-BR77mdIR.js} +127 -11
  55. package/dist/src/{cache-Cr-qWIbP.js → cache-CrioYnaa.js} +125 -10
  56. package/dist/src/{cache-Bzttsk0X.js → cache-DdriHsNX.js} +125 -10
  57. package/dist/src/{cache-DGg-yTZG.cjs → cache-h5MWOBZI.cjs} +135 -25
  58. package/dist/src/{chat-Cx_LkwvZ.js → chat-BBEnnpQk.js} +11 -11
  59. package/dist/src/{chat-DChSH_Es.js → chat-BSos6PvZ.js} +9 -9
  60. package/dist/src/{chat-aMQZw6R7.js → chat-Bnt7ieO0.js} +4 -4
  61. package/dist/src/{chat-vYqqv1gP.cjs → chat-DSyYuTYT.cjs} +14 -13
  62. package/dist/src/{chat-BLOdH60v.js → chat-DTdf-J5Q.js} +11 -11
  63. package/dist/src/{chat-DH97tVV9.cjs → chat-Dq3DomYU.cjs} +6 -6
  64. package/dist/src/{chat-DG2LkwLq.js → chat-g5QLeLOo.js} +4 -4
  65. package/dist/src/{chat-D9nudO9b.js → chat-mTTuUAYb.js} +4 -4
  66. package/dist/src/{chatkit-B8X34dQc.js → chatkit-B6DWi70Q.js} +3 -3
  67. package/dist/src/{chatkit-D44VyUyB.cjs → chatkit-BYveR48_.cjs} +6 -5
  68. package/dist/src/{chatkit-BXu42Qwt.js → chatkit-fARZwEfV.js} +3 -3
  69. package/dist/src/{chatkit-CbMRoeYw.js → chatkit-lb6FK02w.js} +1 -1
  70. package/dist/src/{claude-agent-sdk-DYv_AJ8u.js → claude-agent-sdk-BGUac_kS.js} +213 -66
  71. package/dist/src/{claude-agent-sdk-BjriSVRZ.js → claude-agent-sdk-BP__YGfK.js} +213 -66
  72. package/dist/src/{claude-agent-sdk-BzNZeZ0N.js → claude-agent-sdk-Ddgx5BIQ.js} +212 -65
  73. package/dist/src/{claude-agent-sdk-BRq0bbIK.cjs → claude-agent-sdk-n2XcEclh.cjs} +219 -71
  74. package/dist/src/cloud-DiWbUiVP.js +3 -0
  75. package/dist/src/{cloud-Da0bofJd.js → cloud-DqF5N1aJ.js} +2 -2
  76. package/dist/src/{cloudflare-ai-CXC4b1EU.js → cloudflare-ai-BGamMotN.js} +4 -4
  77. package/dist/src/{cloudflare-ai-DGOwgexC.js → cloudflare-ai-BwW8W-w7.js} +4 -4
  78. package/dist/src/{cloudflare-ai-DJv5qnyb.cjs → cloudflare-ai-DCRGnsyL.cjs} +6 -6
  79. package/dist/src/{cloudflare-ai-CyBoIs1Q.js → cloudflare-ai-sD26nP6V.js} +4 -4
  80. package/dist/src/{cloudflare-gateway-TJkVrZlB.js → cloudflare-gateway-2lnOT4qM.js} +3 -3
  81. package/dist/src/{cloudflare-gateway-D-dnkzCF.js → cloudflare-gateway-B1-8KNCt.js} +3 -3
  82. package/dist/src/{cloudflare-gateway-DKVjkDav.cjs → cloudflare-gateway-CCC1DFrC.cjs} +5 -5
  83. package/dist/src/{cloudflare-gateway-1sAoOyft.js → cloudflare-gateway-DOghiU6r.js} +3 -3
  84. package/dist/src/{codex-app-server-CCLjqCh9.js → codex-app-server-BWeWamEb.js} +19 -4
  85. package/dist/src/{codex-app-server-CCe0TiDc.js → codex-app-server-DyQB1P0p.js} +20 -5
  86. package/dist/src/{codex-app-server-VMRnjZ68.cjs → codex-app-server-R9u_G7W9.cjs} +27 -11
  87. package/dist/src/{codex-app-server-CPW1LFwh.js → codex-app-server-ZQRJSJjU.js} +20 -5
  88. package/dist/src/{codex-sdk-Bzb_TqX9.js → codex-sdk-B62H0fe7.js} +16 -5
  89. package/dist/src/{codex-sdk-Bd8UbO9q.cjs → codex-sdk-BRPUvJG8.cjs} +31 -12
  90. package/dist/src/{codex-sdk-BgEFQ70r.js → codex-sdk-Dio1zJBS.js} +18 -7
  91. package/dist/src/codex-sdk-DxukZs_K.js +3 -0
  92. package/dist/src/{codex-sdk-DfvDTN33.js → codex-sdk-iEmW1eS2.js} +18 -7
  93. package/dist/src/{cometapi-B5ImDlSm.js → cometapi--hh7dESS.js} +7 -7
  94. package/dist/src/{cometapi-CC7hWxmX.js → cometapi-C7yWNGqt.js} +7 -7
  95. package/dist/src/{cometapi-CCbpHkuF.js → cometapi-CSIi16a0.js} +7 -7
  96. package/dist/src/{cometapi-BgAkuYCw.cjs → cometapi-sZgBZtbU.cjs} +8 -8
  97. package/dist/src/{completion-DtQ72Bm3.cjs → completion-CWtqdn3z.cjs} +6 -6
  98. package/dist/src/{completion-Vq_ad618.js → completion-DT8cxo9T.js} +4 -4
  99. package/dist/src/{completion-2iuYVxwi.js → completion-DUScduXp.js} +5 -5
  100. package/dist/src/{completion-CrD6MQ93.js → completion-D_2IOAoS.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-Un4Q_huE.js → createHash-CGVzWdjj.js} +1 -1
  107. package/dist/src/{createHash-VvBIc-AW.cjs → createHash-CSiqnK5P.cjs} +2 -2
  108. package/dist/src/{createHash-DPpsZgFF.js → createHash-CgRvs4Fn.js} +1 -1
  109. package/dist/src/crescendo-B41TwUHM.js +722 -0
  110. package/dist/src/crescendo-Bfic7KC4.js +724 -0
  111. package/dist/src/crescendo-DXFB7rHP.cjs +725 -0
  112. package/dist/src/crescendo-DvvYxMLA.js +723 -0
  113. package/dist/src/custom-BdzuqFTN.js +619 -0
  114. package/dist/src/custom-Cf5Q6r-P.js +618 -0
  115. package/dist/src/custom-DLgufezC.js +620 -0
  116. package/dist/src/custom-LEXHCRe3.cjs +621 -0
  117. package/dist/src/{docker--3qzPa-6.js → docker-BOSO_6hK.js} +5 -5
  118. package/dist/src/{docker-D3AY-5F5.cjs → docker-D0h2vFrc.cjs} +6 -6
  119. package/dist/src/{docker-DCsCDvwM.js → docker-D2TWGyTP.js} +5 -5
  120. package/dist/src/{docker-Dorv4_Dg.js → docker-Vj_4_cPg.js} +5 -5
  121. package/dist/src/{embedding-BXhN5lCH.cjs → embedding-BQIApR18.cjs} +6 -6
  122. package/dist/src/{embedding-ChS1ivFS.js → embedding-CStK0TV6.js} +5 -5
  123. package/dist/src/{embedding-DNRvZwRN.js → embedding-CU78FMnw.js} +5 -5
  124. package/dist/src/{embedding-D_bI4NDq.js → embedding-CV8lmCnU.js} +4 -4
  125. package/dist/src/{errors-DFHe4L-n.js → errors-9PcUL8BC.js} +1 -1
  126. package/dist/src/{esm-B_rGuPTo.cjs → esm-BIKakvNa.cjs} +8 -7
  127. package/dist/src/{esm-BRkfNsYs.js → esm-BTK1W7lG.js} +1 -1
  128. package/dist/src/{esm-BX8fwlAO.js → esm-Bexx2PFc.js} +1 -1
  129. package/dist/src/{eval-DJ_4A-tr.js → eval-B3BaNBbO.js} +19 -19
  130. package/dist/src/{eval-BQPLBJbw.js → eval-DfR9885C.js} +1 -1
  131. package/dist/src/evalResult-BtZSUgQv.js +3 -0
  132. package/dist/src/{evalResult-D6P5I5il.js → evalResult-CcSqNl_Y.js} +17 -10
  133. package/dist/src/{evalResult-Cx-8OWkb.cjs → evalResult-DHXs-9TL.cjs} +29 -11
  134. package/dist/src/{evalResult-pSvGWFMo.js → evalResult-PGqEbasb.js} +18 -11
  135. package/dist/src/evaluator-B9LGbKI8.js +3 -0
  136. package/dist/src/{evaluator-D-UIbbYq.js → evaluator-n_dEb00o.js} +258 -132
  137. package/dist/src/evaluatorHelpers-CrRObe2z.js +510 -0
  138. package/dist/src/evaluatorHelpers-D06I9WFL.cjs +537 -0
  139. package/dist/src/evaluatorHelpers-D1_kwvyp.js +511 -0
  140. package/dist/src/{extractor-DxyiFhPk.js → extractor-BVkZtk4R.js} +5 -5
  141. package/dist/src/{extractor-BM3jRERL.js → extractor-D3Fv_Tdh.js} +5 -5
  142. package/dist/src/{extractor-YlZbUMsL.js → extractor-Jp53vs-6.js} +5 -5
  143. package/dist/src/{extractor-Dxr2J_wK.cjs → extractor-bV_NOoaz.cjs} +6 -6
  144. package/dist/src/{fetch-Y5qX_kST.js → fetch-BSSAcMxf.js} +90 -26
  145. package/dist/src/fetch-BodQTrMU.js +3 -0
  146. package/dist/src/{fetch-NuqXW1Xb.cjs → fetch-Cfm4EuOB.cjs} +115 -32
  147. package/dist/src/{fetch-B6ch2nU2.js → fetch-Cpf1U1nO.js} +86 -26
  148. package/dist/src/{fetch-D9xxyC1p.js → fetch-Doks14zQ.js} +90 -26
  149. package/dist/src/{fileExtensions-D9h-8Wxg.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
  150. package/dist/src/{fileExtensions-BGh-W-HT.js → fileExtensions-CXRfY3Ss.js} +12 -2
  151. package/dist/src/{fileExtensions-DysCsxNG.js → fileExtensions-D4GCJ67J.js} +12 -2
  152. package/dist/src/{formatDuration-Ch4A7G3o.js → formatDuration-CMVNrYvE.js} +1 -1
  153. package/dist/src/{genaiTracer-BokHC-MW.cjs → genaiTracer-14nugQQx.cjs} +14 -2
  154. package/dist/src/{genaiTracer-C3ZPQU60.js → genaiTracer-BPVvltoW.js} +2 -2
  155. package/dist/src/{genaiTracer-DxODqT9e.js → genaiTracer-D18lYzhB.js} +2 -2
  156. package/dist/src/{genaiTracer-CFny3gOy.js → genaiTracer-jJKYsnjc.js} +2 -2
  157. package/dist/src/goat-Ba7Gznzq.js +467 -0
  158. package/dist/src/goat-CJngS-WU.js +468 -0
  159. package/dist/src/goat-CwsbfQeu.js +466 -0
  160. package/dist/src/goat-DOMbozoX.cjs +470 -0
  161. package/dist/src/graders-B3D7kCcD.js +3 -0
  162. package/dist/src/{graders-CgPn32yp.js → graders-BQt1BaQe.js} +1019 -86
  163. package/dist/src/{graders-Bw1wk_21.cjs → graders-CBQ2s6gz.cjs} +1087 -130
  164. package/dist/src/{graders-CwrbifOo.js → graders-DaRU98zs.js} +1022 -84
  165. package/dist/src/{graders-BoUqsCEm.js → graders-KXzjnIim.js} +1024 -86
  166. package/dist/src/hydra-BU6GjYoQ.js +560 -0
  167. package/dist/src/hydra-BmXHxlyl.js +559 -0
  168. package/dist/src/hydra-CR0KyYDb.js +561 -0
  169. package/dist/src/hydra-RO9jBks7.cjs +560 -0
  170. package/dist/src/{image-BeWaInPF.js → image-BBmZdKO3.js} +3 -3
  171. package/dist/src/{image-qjO6FWPs.js → image-B_PFG7IG.js} +3 -3
  172. package/dist/src/image-BtODOZjh.js +442 -0
  173. package/dist/src/image-CYuNJIqd.js +442 -0
  174. package/dist/src/{image-D10dNAav.cjs → image-E00WFZkq.cjs} +4 -4
  175. package/dist/src/image-HK2Cfqb1.cjs +465 -0
  176. package/dist/src/{image-Dr_3I3nK.js → image-LGj8dTcr.js} +3 -3
  177. package/dist/src/image-YMKejC0r.js +443 -0
  178. package/dist/src/index.cjs +711 -339
  179. package/dist/src/index.d.cts +3159 -1611
  180. package/dist/src/index.d.ts +3158 -1610
  181. package/dist/src/index.js +605 -249
  182. package/dist/src/indirectWebPwn-B80dLlFC.js +260 -0
  183. package/dist/src/indirectWebPwn-BMTXXznx.js +386 -0
  184. package/dist/src/indirectWebPwn-BZFPV7Q9.js +385 -0
  185. package/dist/src/indirectWebPwn-BaEQEOIO.cjs +260 -0
  186. package/dist/src/indirectWebPwn-BzpyMnFS.js +259 -0
  187. package/dist/src/indirectWebPwn-CiWB-vVH.js +385 -0
  188. package/dist/src/indirectWebPwn-D7NA9Nsv.cjs +397 -0
  189. package/dist/src/indirectWebPwn-o_bEFMjP.js +259 -0
  190. package/dist/src/inputVariables-B0qUChbV.js +467 -0
  191. package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
  192. package/dist/src/inputVariables-DXFdi7AI.js +468 -0
  193. package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
  194. package/dist/src/{interactiveCheck-CCICw2cy.js → interactiveCheck-C4QlIuoR.js} +1 -1
  195. package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
  196. package/dist/src/iterative-B-l0syBV.js +501 -0
  197. package/dist/src/iterative-BACUeCCz.cjs +503 -0
  198. package/dist/src/iterative-CVwoExo8.js +502 -0
  199. package/dist/src/iterative-QDrGSyss.js +500 -0
  200. package/dist/src/iterativeImage-BQg2OwA6.js +413 -0
  201. package/dist/src/iterativeImage-Bwn0fM75.js +413 -0
  202. package/dist/src/iterativeImage-CcgVyASo.cjs +415 -0
  203. package/dist/src/iterativeImage-D_UbQXg4.js +414 -0
  204. package/dist/src/iterativeMeta-CIu-CHRS.js +405 -0
  205. package/dist/src/iterativeMeta-CN8CNjFA.js +406 -0
  206. package/dist/src/iterativeMeta-DN6BTjpq.js +404 -0
  207. package/dist/src/iterativeMeta-DlqY3BsS.cjs +405 -0
  208. package/dist/src/iterativeTree-CJ8a8G9T.js +820 -0
  209. package/dist/src/iterativeTree-DcuFXnjL.js +819 -0
  210. package/dist/src/iterativeTree-FrDDYAN0.js +818 -0
  211. package/dist/src/iterativeTree-LOgAi0nU.cjs +821 -0
  212. package/dist/src/{knowledgeBase-C8qOo26M.cjs → knowledgeBase-CdbcGBZF.cjs} +25 -11
  213. package/dist/src/{knowledgeBase-BBETc5-S.js → knowledgeBase-CjOXp6Lr.js} +23 -9
  214. package/dist/src/{knowledgeBase-Dr3Kib7F.js → knowledgeBase-DxAq4n4z.js} +24 -10
  215. package/dist/src/{knowledgeBase-CzAi2rUI.js → knowledgeBase-o_wTLzrt.js} +24 -10
  216. package/dist/src/{litellm-DRc4qWfc.js → litellm-B2gHwya_.js} +4 -4
  217. package/dist/src/{litellm-CaUmV7Mk.cjs → litellm-CPpdlO7n.cjs} +5 -5
  218. package/dist/src/{litellm-BLSiANhk.js → litellm-CYfgxLrM.js} +4 -4
  219. package/dist/src/{litellm-DQGo_juI.js → litellm-ojWBKU3C.js} +4 -4
  220. package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
  221. package/dist/src/{luma-ray-if-Ml4R9.cjs → luma-ray-BCCO9XXG.cjs} +9 -8
  222. package/dist/src/{luma-ray-B-tNZzqW.js → luma-ray-BPrdihAb.js} +5 -5
  223. package/dist/src/{luma-ray-CtS3OlGq.js → luma-ray-DP5N79lB.js} +5 -5
  224. package/dist/src/{luma-ray-PJJgUjOc.js → luma-ray-DTDyoAlM.js} +5 -5
  225. package/dist/src/main.js +727 -234
  226. package/dist/src/memoryPoisoning-B6N3us35.cjs +106 -0
  227. package/dist/src/memoryPoisoning-Bc_BK_k2.js +106 -0
  228. package/dist/src/memoryPoisoning-D375zwSX.js +107 -0
  229. package/dist/src/memoryPoisoning-DJA0YjJT.js +106 -0
  230. package/dist/src/{messages-CewuNcNS.js → messages-Bg29Nbit.js} +17 -9
  231. package/dist/src/{messages-BnsVHUnm.cjs → messages-BrZEnHsV.cjs} +24 -15
  232. package/dist/src/{messages-CI69Lasb.js → messages-CBulRaud.js} +18 -10
  233. package/dist/src/{messages-B9dSjrNf.js → messages-K9A8RxBM.js} +18 -10
  234. package/dist/src/{meteor-CeGo0Lu2.js → meteor--TZYICTI.js} +1 -1
  235. package/dist/src/{meteor-BBGcGeCa.cjs → meteor-CR226f7Z.cjs} +2 -2
  236. package/dist/src/{meteor-Wc_aUVvu.js → meteor-Cl_yd7rJ.js} +1 -1
  237. package/dist/src/{meteor-BKTM-7KS.js → meteor-Dce-_zGQ.js} +1 -1
  238. package/dist/src/mischievousUser-BDLwSGN0.js +46 -0
  239. package/dist/src/mischievousUser-Blx-OtT3.js +47 -0
  240. package/dist/src/mischievousUser-CHuTTvBg.js +46 -0
  241. package/dist/src/mischievousUser-CSUrH3fq.cjs +46 -0
  242. package/dist/src/{modelslab-zpz9JcK0.js → modelslab-BjEk7yCP.js} +6 -6
  243. package/dist/src/{modelslab-BCLOtfek.js → modelslab-CBCrdIBc.js} +6 -6
  244. package/dist/src/{modelslab-D73OnKSx.js → modelslab-CrGpXuhv.js} +6 -6
  245. package/dist/src/{modelslab-BkapYJhh.cjs → modelslab-Cvh0klQx.cjs} +7 -7
  246. package/dist/src/{nova-reel-B8F_TK5w.js → nova-reel-CUDDZcSA.js} +5 -5
  247. package/dist/src/{nova-reel-Bx0NFV2f.js → nova-reel-CyDESu5J.js} +5 -5
  248. package/dist/src/{nova-reel-DkT7tnoB.cjs → nova-reel-DH_Ksu6X.cjs} +9 -8
  249. package/dist/src/{nova-reel-CNGJTLtG.js → nova-reel-YQAqUYJY.js} +5 -5
  250. package/dist/src/{nova-sonic-BeTRaFOh.js → nova-sonic-BVFFB7JZ.js} +2 -2
  251. package/dist/src/{nova-sonic-YT426juD.cjs → nova-sonic-Bg3cxMMu.cjs} +5 -4
  252. package/dist/src/{nova-sonic-CL7Zqv0G.js → nova-sonic-BhmnRGyh.js} +3 -3
  253. package/dist/src/{nova-sonic-BaXRN1cr.js → nova-sonic-DxmK95c1.js} +3 -3
  254. package/dist/src/{openai-Cy1XLs0c.cjs → openai-C3uXv8wS.cjs} +2 -2
  255. package/dist/src/{openai-BT-JvDse.js → openai-CJrsh9n4.js} +1 -1
  256. package/dist/src/{openai-D4fxGvRx.js → openai-zgwBb4Ff.js} +1 -1
  257. package/dist/src/{openclaw-DUBZP3GL.cjs → openclaw-CHQaZi_-.cjs} +17 -15
  258. package/dist/src/{openclaw-DA8U4DsD.js → openclaw-CWOm2eOr.js} +9 -8
  259. package/dist/src/{openclaw-DObVgpjC.js → openclaw-Cdk9JKfY.js} +9 -8
  260. package/dist/src/{openclaw-Bq7RVR3k.js → openclaw-DhF8rUpI.js} +9 -8
  261. package/dist/src/{opencode-sdk-BB40Wir1.js → opencode-sdk-BRjiPV-g.js} +38 -3
  262. package/dist/src/{opencode-sdk-CeqiOcOU.cjs → opencode-sdk-CPFMw0ed.cjs} +45 -9
  263. package/dist/src/{opencode-sdk-BM1UAIv1.js → opencode-sdk-CaSOCsBA.js} +39 -4
  264. package/dist/src/{opencode-sdk-ChdK7F7z.js → opencode-sdk-CqkyG8De.js} +39 -4
  265. package/dist/src/{otlpReceiver-UYMQx3sy.js → otlpReceiver--gTpSagc.js} +119 -3
  266. package/dist/src/{otlpReceiver-C6thJRXi.js → otlpReceiver-B2eaKC8C.js} +118 -2
  267. package/dist/src/{otlpReceiver-CcdIikOu.js → otlpReceiver-BXjcRqAM.js} +119 -3
  268. package/dist/src/{otlpReceiver-DNSQj6bf.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
  269. package/dist/src/packageParser--MWTSrPW.js +36 -0
  270. package/dist/src/packageParser-CgE-ziRo.js +35 -0
  271. package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
  272. package/dist/src/packageParser-hwwSGnAZ.js +35 -0
  273. package/dist/src/processShim-BBxt7LKO.js +95 -0
  274. package/dist/src/processShim-BcGzU8fY.js +94 -0
  275. package/dist/src/processShim-C_z3aRvF.js +94 -0
  276. package/dist/src/processShim-DSY9BV2T.cjs +98 -0
  277. package/dist/src/promptLength-0qIHyhA5.js +71 -0
  278. package/dist/src/promptLength-4X-Wd8PG.js +72 -0
  279. package/dist/src/promptLength-B9nZEfO6.js +71 -0
  280. package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
  281. package/dist/src/promptfoo-BU4_0J85.js +238 -0
  282. package/dist/src/promptfoo-CReYAtfb.js +237 -0
  283. package/dist/src/promptfoo-ClChwT74.cjs +292 -0
  284. package/dist/src/promptfoo-CqEpj6Sr.js +237 -0
  285. package/dist/src/prompts-BYMtqPCw.js +259 -0
  286. package/dist/src/prompts-C-bqE1Yp.js +260 -0
  287. package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
  288. package/dist/src/prompts-DHhQsANy.js +259 -0
  289. package/dist/src/prompts-D_QpZ2Dm.js +271 -0
  290. package/dist/src/prompts-hNvWBD3z.cjs +284 -0
  291. package/dist/src/prompts-huDVH2CI.js +270 -0
  292. package/dist/src/prompts-p78Hul5i.cjs +289 -0
  293. package/dist/src/{providerRegistry-BESeALrr.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
  294. package/dist/src/{providerRegistry-DoACwqhD.js → providerRegistry-DHcFiVWX.js} +1 -1
  295. package/dist/src/{providerRegistry-PMsleEzs.js → providerRegistry-ReCd0sFa.js} +1 -1
  296. package/dist/src/{providers-DT-GtF2t.js → providers-B7TyByfj.js} +789 -11925
  297. package/dist/src/{providers-CJh7iriU.js → providers-BGc7tDtQ.js} +796 -11872
  298. package/dist/src/{providers-Ctcc592x.js → providers-CSOp-bCm.js} +1 -1
  299. package/dist/src/{providers-eDShy16E.cjs → providers-V6RBuieY.cjs} +837 -12138
  300. package/dist/src/{providers-DRrerKra.js → providers-iH3Sw1yo.js} +851 -11938
  301. package/dist/src/{pythonUtils-C4tltmIn.js → pythonUtils-CLCgQ9tt.js} +1 -1
  302. package/dist/src/{pythonUtils-DNqbnRdx.js → pythonUtils-CgYxeSmO.js} +2 -2
  303. package/dist/src/{pythonUtils-CoLaCwNY.cjs → pythonUtils-Cokhluq3.cjs} +7 -6
  304. package/dist/src/{pythonUtils-DMO68Jg7.js → pythonUtils-D0BYebvX.js} +2 -2
  305. package/dist/src/{quiverai-CPKhWgaT.js → quiverai-58BtRRet.js} +3 -3
  306. package/dist/src/{quiverai-Bk1KrvL6.js → quiverai-C1dYu5MW.js} +3 -3
  307. package/dist/src/{quiverai-BSS9a7wV.js → quiverai-CNMIpZQg.js} +3 -3
  308. package/dist/src/{quiverai-Bpx6MZ7T.cjs → quiverai-fmSfU43k.cjs} +4 -4
  309. package/dist/src/registry-6Jw6ebor.cjs +124 -0
  310. package/dist/src/registry-BTGk2ZkB.js +124 -0
  311. package/dist/src/registry-BTNqmP5o.js +125 -0
  312. package/dist/src/registry-NGnOG2xa.js +124 -0
  313. package/dist/src/{server-gyd6d4Hc.js → remoteGeneration--D6WjzUm.js} +15 -108
  314. package/dist/src/{server-BEECpeGG.cjs → remoteGeneration-BpIYlb_O.cjs} +30 -119
  315. package/dist/src/{server-ByxbqAcQ.js → remoteGeneration-CJC3E0aW.js} +15 -147
  316. package/dist/src/remoteGeneration-D6UjE2JT.js +218 -0
  317. package/dist/src/render-BNTrbmBw.cjs +384 -0
  318. package/dist/src/render-CSP99NLm.js +348 -0
  319. package/dist/src/render-DFfDeYUK.js +347 -0
  320. package/dist/src/{render-nj-UaPdn.js → render-DznWrxGO.js} +2 -2
  321. package/dist/src/render-_6ur1fhE.js +347 -0
  322. package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
  323. package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
  324. package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
  325. package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
  326. package/dist/src/{responses-1ztiVYsx.js → responses-5Gf5HNOi.js} +11 -7
  327. package/dist/src/{responses-BiaBguAu.js → responses-BVi7xIdv.js} +13 -9
  328. package/dist/src/{responses-CF-ayauu.cjs → responses-CUARGrhY.cjs} +16 -11
  329. package/dist/src/{responses-B8haB-mD.js → responses-CrmWv6iz.js} +13 -9
  330. package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
  331. package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
  332. package/dist/src/{rubyUtils-CIQFnVz4.js → rubyUtils-CXlFM2rR.js} +2 -2
  333. package/dist/src/{rubyUtils-BI0p46eZ.js → rubyUtils-CnlW8AYb.js} +2 -2
  334. package/dist/src/{rubyUtils-DoifqkiA.cjs → rubyUtils-CqUWBZAt.cjs} +16 -26
  335. package/dist/src/{rubyUtils-DGnoCYL2.js → rubyUtils-DdGojpfv.js} +1 -1
  336. package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
  337. package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
  338. package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
  339. package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
  340. package/dist/src/{sagemaker-ljtY12VM.cjs → sagemaker-BeVTKfrv.cjs} +65 -53
  341. package/dist/src/{sagemaker-BDLeW29y.js → sagemaker-BwbV5U7_.js} +61 -50
  342. package/dist/src/{sagemaker-C5T60MKf.js → sagemaker-ClAZ6Qwc.js} +61 -50
  343. package/dist/src/{sagemaker-ClS_NB07.js → sagemaker-DY2qrOpq.js} +61 -50
  344. package/dist/src/{scanner-nOCWNIXa.js → scanner-BS-iFIp3.js} +6 -6
  345. package/dist/src/server/index.js +4115 -420
  346. package/dist/src/server-BHOEL8p8.cjs +126 -0
  347. package/dist/src/server-CbiJppij.js +107 -0
  348. package/dist/src/server-D18AAlAc.js +3 -0
  349. package/dist/src/server-DLYjSFm2.js +182 -0
  350. package/dist/src/server-JQYD_Nws.js +146 -0
  351. package/dist/src/{fileExtensions-8CjoL7vB.js → shared-BoG7qLMv.js} +12 -2
  352. package/dist/src/shared-CRq0gGVf.js +1334 -0
  353. package/dist/src/shared-CSIGeGLl.js +1334 -0
  354. package/dist/src/shared-DNvim54U.js +1335 -0
  355. package/dist/src/shared-aHWko3P1.cjs +1436 -0
  356. package/dist/src/{signal-DTtUuU3l.js → signal-CSurUUyV.js} +2 -2
  357. package/dist/src/simulatedUser-C7sOFSF6.js +222 -0
  358. package/dist/src/simulatedUser-DH_7RzEQ.js +222 -0
  359. package/dist/src/simulatedUser-lgMMmniD.js +223 -0
  360. package/dist/src/simulatedUser-mnCUS9Bm.cjs +227 -0
  361. package/dist/src/{slack-Bamy_7te.js → slack-Bapo-7_8.js} +1 -1
  362. package/dist/src/{slack-BLlsDpfG.cjs → slack-DMC1QVEg.cjs} +3 -2
  363. package/dist/src/{slack-BPYLQLgb.js → slack-DTEFhrMn.js} +1 -1
  364. package/dist/src/{slack-4zZX1OKP.js → slack-k-_CP84Q.js} +1 -1
  365. package/dist/src/storage-95htjpLs.js +834 -0
  366. package/dist/src/storage-A4WnAeN3.cjs +911 -0
  367. package/dist/src/storage-B2Ql_oq4.js +822 -0
  368. package/dist/src/storage-EKVWZBNY.js +875 -0
  369. package/dist/src/{store-2K0kDi80.cjs → store-B2NDDooM.cjs} +60 -24
  370. package/dist/src/{store-CPh25336.js → store-DKd5592Q.js} +50 -19
  371. package/dist/src/{store-BPkzEyFM.js → store-HpopRVzl.js} +50 -19
  372. package/dist/src/store-IbiRIF3k.js +3 -0
  373. package/dist/src/strategies-CBI1brSy.js +2333 -0
  374. package/dist/src/strategies-CCcnEbFO.cjs +2360 -0
  375. package/dist/src/strategies-CD1gHeeQ.js +2331 -0
  376. package/dist/src/{tables-WgdUZ8Ck.js → tables-CRSXQ2Ke.js} +2 -2
  377. package/dist/src/{tables-BMSOS2Gg.js → tables-CxjU7bBd.js} +2 -2
  378. package/dist/src/{tables-CXbaZ9y1.cjs → tables-DBIJU0WE.cjs} +6 -5
  379. package/dist/src/{tables-NlvH23ky.js → tables-DafUHOeh.js} +2 -2
  380. package/dist/src/telemetry-BUm_krVX.js +3 -0
  381. package/dist/src/{telemetry--iqaGyaS.js → telemetry-BbpmrenM.js} +4 -4
  382. package/dist/src/{telemetry-CgdVGV8N.js → telemetry-C4bX-6Sr.js} +4 -4
  383. package/dist/src/{telemetry-CEQxGnMZ.cjs → telemetry-C_ImlCOk.cjs} +15 -9
  384. package/dist/src/{telemetry-DWdGHvEf.js → telemetry-DOE567Wj.js} +4 -4
  385. package/dist/src/{text-DDQP0tuQ.js → text-CZr46tp_.js} +1 -1
  386. package/dist/src/{text-D4lz-Jg_.js → text-Db-Wt2u2.js} +1 -1
  387. package/dist/src/{text-NWvfMfkF.js → text-DwYK5EBn.js} +1 -1
  388. package/dist/src/{text-BiNME7QG.cjs → text-nywWsRBM.cjs} +1 -1
  389. package/dist/src/{tokenUsageUtils-2wIvAhB3.js → tokenUsageUtils-CDet74yk.js} +1 -1
  390. package/dist/src/{tokenUsageUtils-4c780gFd.js → tokenUsageUtils-CmnQ0G2m.js} +1 -1
  391. package/dist/src/{tokenUsageUtils-C9odhsbW.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
  392. package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
  393. package/dist/src/toolAttributes-COVgDrBG.js +87 -0
  394. package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
  395. package/dist/src/tracingOptions-BOP1FsRt.js +220 -0
  396. package/dist/src/tracingOptions-BvmDa_jH.js +219 -0
  397. package/dist/src/tracingOptions-DFBoE8O0.cjs +249 -0
  398. package/dist/src/tracingOptions-xhjOg2b1.js +221 -0
  399. package/dist/src/{transcription-D7Q0vJsh.js → transcription-BOXDoehT.js} +4 -4
  400. package/dist/src/{transcription-Bm2emLmJ.js → transcription-CpVdKc4P.js} +5 -5
  401. package/dist/src/{transcription-CZ4LG5hQ.cjs → transcription-D8kkPXg_.cjs} +9 -8
  402. package/dist/src/{transcription-84t4ALo2.js → transcription-Z94eV9LR.js} +5 -5
  403. package/dist/src/transform-BnSTnFlp.js +187 -0
  404. package/dist/src/transform-BnSXWmU_2.cjs +221 -0
  405. package/dist/src/{transform-DtooZqYY.js → transform-BufxPIQL.js} +8 -8
  406. package/dist/src/transform-CGt7Kt3y2.js +186 -0
  407. package/dist/src/transform-CrPGTsij.js +186 -0
  408. package/dist/src/{transform-Dg4LcO1Y.cjs → transform-DJkt81VY.cjs} +12 -11
  409. package/dist/src/{transform-B-b6Cq-q.js → transform-DtTfiGoh.js} +8 -8
  410. package/dist/src/{transform-_DpNB4qp.js → transform-Wp6s_5QE.js} +8 -8
  411. package/dist/src/{transformersAvailability-lvCCvuPT.js → transformersAvailability-0ThtPved.js} +1 -1
  412. package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
  413. package/dist/src/{transformersAvailability-rJGPccjr.js → transformersAvailability-BvyU9vDD.js} +1 -1
  414. package/dist/src/{transformersAvailability-B22swDxr.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
  415. package/dist/src/{types-BVH9hjgW.js → types-BFevViUY.js} +113 -19
  416. package/dist/src/{types-BDjGOq4E.js → types-BJQBBPTP.js} +113 -19
  417. package/dist/src/{types-CgG2rKiW.cjs → types-CxJvaY2S.cjs} +211 -28
  418. package/dist/src/{types-DNRZVOue.js → types-D6glLbdF.js} +125 -26
  419. package/dist/src/{util-Dpmm_dAI.cjs → util-BHCAeuXx.cjs} +33 -7
  420. package/dist/src/{util-DFPeFkiV.js → util-CMrHV35u.js} +28 -8
  421. package/dist/src/{util-DvpHnLt0.cjs → util-COnzevXE.cjs} +29 -21
  422. package/dist/src/{util-BlFVL0UF.js → util-CYev3d-r.js} +22 -7
  423. package/dist/src/util-DGqkTb2-.js +327 -0
  424. package/dist/src/util-DNtUsus_.cjs +386 -0
  425. package/dist/src/{util-Dub0f_ej.js → util-DRfqa4xz.js} +17 -10
  426. package/dist/src/{util-BVXcTwXu.js → util-DTq3jq2z.js} +28 -8
  427. package/dist/src/{util-C-kmRosx.js → util-DeY58psG.js} +22 -7
  428. package/dist/src/util-DpV6KT5i.js +327 -0
  429. package/dist/src/{util-3pBZZb_H.js → util-DwNJzqOV.js} +45 -10
  430. package/dist/src/util-ETfU_sS9.js +328 -0
  431. package/dist/src/{util-A5_ZsQUn.cjs → util-NYQvo1C7.cjs} +25 -9
  432. package/dist/src/{util-DN0-b81k.js → util-X4KQgyVD.js} +28 -8
  433. package/dist/src/{util-BQOCAHQC.js → util-jZRrXe1P.js} +46 -11
  434. package/dist/src/{util-B9CNhyac.js → util-o2Qg5rZv.js} +22 -7
  435. package/dist/src/{utils-BUMN8orw.js → utils-B0lzitHZ.js} +2 -2
  436. package/dist/src/{utils-kt7lv30R.js → utils-BFOh20Gb.js} +2 -2
  437. package/dist/src/{utils-o8S5huU2.js → utils-BGY69tk_.js} +2 -2
  438. package/dist/src/{utils-DkVeShIB.cjs → utils-Ve6kuJsa.cjs} +3 -3
  439. package/dist/src/{version-CbuBKu2U.js → version-CHR-EFec.js} +2 -2
  440. package/dist/src/{version-CbpiUINz.js → version-F0YDgb7J.js} +2 -2
  441. package/dist/src/{version-D9zu9FWB.cjs → version-VzUqOBZk.cjs} +2 -2
  442. package/dist/src/{version-0frU0UTr.js → version-qVEN5qCm.js} +2 -2
  443. package/dist/tsconfig.tsbuildinfo +1 -1
  444. package/package.json +49 -23
  445. package/dist/src/app/assets/Report-vjzrbgce.js +0 -1
  446. package/dist/src/app/assets/index-B3NQ8HTd.js +0 -385
  447. package/dist/src/app/assets/index-Cli2yAXv.css +0 -1
  448. package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
  449. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
  450. package/dist/src/cache-BRkhlH3k.cjs +0 -3
  451. package/dist/src/cache-BlC6aeJ0.js +0 -3
  452. package/dist/src/cloud-CoD5OacT.js +0 -3
  453. package/dist/src/codex-sdk-1jm_qPHf.js +0 -3
  454. package/dist/src/codex-sdk-Danroptg.cjs +0 -2
  455. package/dist/src/evalResult-BBJAHAtw.cjs +0 -2
  456. package/dist/src/evalResult-BBK58h2B.js +0 -3
  457. package/dist/src/evalResult-spPqh1G_.js +0 -2
  458. package/dist/src/evaluator-DgLKaZk8.js +0 -3
  459. package/dist/src/fetch-8viavNv8.js +0 -3
  460. package/dist/src/graders-C84JI-m5.js +0 -2
  461. package/dist/src/graders-CBbd0K0Q.cjs +0 -2
  462. package/dist/src/graders-CbQqpHSN.js +0 -3
  463. package/dist/src/graders-DS42d3ZG.js +0 -2
  464. package/dist/src/image-BmilRNqO.js +0 -258
  465. package/dist/src/image-CxJoa3aW.cjs +0 -280
  466. package/dist/src/image-DsGRlkh7.js +0 -257
  467. package/dist/src/image-a_SGUobh.js +0 -257
  468. package/dist/src/providers-BuyzKt7C.js +0 -2
  469. package/dist/src/providers-C7lNVBjX.cjs +0 -3
  470. package/dist/src/providers-CCE2COJi2.js +0 -2
  471. package/dist/src/render-7uNJ2V14.js +0 -135
  472. package/dist/src/render-DlscvAUJ.js +0 -135
  473. package/dist/src/render-eui5p5mL.js +0 -136
  474. package/dist/src/render-tG6ir9_g.cjs +0 -165
  475. package/dist/src/rubyUtils-4hjGxvju.js +0 -3
  476. package/dist/src/rubyUtils-CO-tuszQ.cjs +0 -2
  477. package/dist/src/server-ByiF3qlg.js +0 -386
  478. package/dist/src/server-C0XKRNB_.cjs +0 -2
  479. package/dist/src/server-C_15p79-.js +0 -3
  480. package/dist/src/store-2OXm_eBY.js +0 -240
  481. package/dist/src/store-BELqNwvz.js +0 -3
  482. package/dist/src/store-uQZ4AjPe.cjs +0 -2
  483. package/dist/src/telemetry-DjNoC_n3.cjs +0 -2
  484. package/dist/src/telemetry-ZdPZc0fm.js +0 -3
  485. package/dist/src/transform-BQt0BeAW.js +0 -3
  486. package/dist/src/transform-Bq5oqC0s.cjs +0 -2
  487. package/dist/src/transform-C9izGX54.cjs +0 -228
  488. package/dist/src/transform-CwbAZ84V.js +0 -216
  489. package/dist/src/transform-DzCF-wqV.js +0 -213
  490. package/dist/src/transform-eGiUAv86.js +0 -216
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { s as logger } from "./logger-BbY6ypFL.js";
3
- import { _ as getDbSignalPath } from "./tables-NlvH23ky.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-DTtUuU3l.js.map
116
+ //# sourceMappingURL=signal-CSurUUyV.js.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-Doks14zQ.js";
4
+ import { o as getNunjucksEngine } from "./render-DFfDeYUK.js";
5
+ import { w as maybeLoadConfigFromExternalFile } from "./util-DRfqa4xz.js";
6
+ import { a as createEmptyTokenUsage, n as accumulateResponseTokenUsage } from "./tokenUsageUtils-CmnQ0G2m.js";
7
+ import { o as getSessionId } from "./util-DpV6KT5i.js";
8
+ import { r as PromptfooSimulatedUserProvider } from "./promptfoo-CqEpj6Sr.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-C7sOFSF6.js.map
@@ -0,0 +1,222 @@
1
+ import { a as logger } from "./logger-KD8JjCRJ.js";
2
+ import { m as sleep } from "./fetch-BSSAcMxf.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-DwNJzqOV.js";
7
+ import { o as getSessionId } from "./util-DGqkTb2-.js";
8
+ import { r as PromptfooSimulatedUserProvider } from "./promptfoo-CReYAtfb.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-DH_7RzEQ.js.map
@@ -0,0 +1,223 @@
1
+ #!/usr/bin/env node
2
+ import { s as logger } from "./logger-BbY6ypFL.js";
3
+ import { f as sleep } from "./fetch-Cpf1U1nO.js";
4
+ import { t as invariant } from "./invariant-B2Rf6avk.js";
5
+ import { o as getNunjucksEngine } from "./render-CSP99NLm.js";
6
+ import { j as maybeLoadConfigFromExternalFile } from "./util-jZRrXe1P.js";
7
+ import { a as createEmptyTokenUsage, n as accumulateResponseTokenUsage } from "./tokenUsageUtils-CDet74yk.js";
8
+ import { o as getSessionId } from "./util-ETfU_sS9.js";
9
+ import { r as PromptfooSimulatedUserProvider } from "./promptfoo-BU4_0J85.js";
10
+ //#region src/providers/simulatedUser.ts
11
+ /**
12
+ * TODO(Will): Ideally this class is an Abstract Base Class that's implemented by the
13
+ * Redteam and Non-Redteam SimulatedUser Providers. Address this in a follow-up PR.
14
+ */
15
+ var SimulatedUser = class {
16
+ identifier;
17
+ maxTurns;
18
+ rawInstructions;
19
+ stateful;
20
+ configInitialMessages;
21
+ /**
22
+ * Because the SimulatedUser is inherited by the RedteamMischievousUserProvider, and different
23
+ * Cloud tasks are used for each, the taskId needs to be explicitly defined/scoped.
24
+ */
25
+ taskId = "tau";
26
+ constructor({ id, label, config }) {
27
+ this.identifier = id ?? label ?? "agent-provider";
28
+ this.maxTurns = config.maxTurns ?? 10;
29
+ this.rawInstructions = config.instructions || "{{instructions}}";
30
+ this.stateful = config.stateful ?? false;
31
+ this.configInitialMessages = config.initialMessages;
32
+ }
33
+ id() {
34
+ return this.identifier;
35
+ }
36
+ /**
37
+ * Validates that a message has the required structure.
38
+ */
39
+ isValidMessage(msg) {
40
+ return msg && typeof msg === "object" && typeof msg.content === "string" && (msg.role === "user" || msg.role === "assistant" || msg.role === "system");
41
+ }
42
+ /**
43
+ * Safely renders a Nunjucks template string, falling back to the original value on error.
44
+ */
45
+ renderTemplate(template, vars) {
46
+ if (typeof template !== "string") return template;
47
+ try {
48
+ return getNunjucksEngine().renderString(template, vars || {});
49
+ } catch (err) {
50
+ logger.warn(`[SimulatedUser] Failed to render template: ${template.substring(0, 100)}. Error: ${err instanceof Error ? err.message : err}`);
51
+ return template;
52
+ }
53
+ }
54
+ /**
55
+ * Validates and filters an array of messages, logging warnings for invalid entries.
56
+ */
57
+ validateMessages(messages) {
58
+ const validMessages = [];
59
+ for (let i = 0; i < messages.length; i++) if (this.isValidMessage(messages[i])) validMessages.push(messages[i]);
60
+ 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)}`);
61
+ return validMessages;
62
+ }
63
+ /**
64
+ * Resolves initial messages from either an array or a file:// path.
65
+ * Supports loading messages from JSON and YAML files.
66
+ */
67
+ resolveInitialMessages(initialMessages) {
68
+ if (!initialMessages) return [];
69
+ if (Array.isArray(initialMessages)) return initialMessages;
70
+ if (typeof initialMessages === "string") {
71
+ if (initialMessages.trim() === "") return [];
72
+ if (initialMessages.startsWith("file://")) {
73
+ try {
74
+ const resolved = maybeLoadConfigFromExternalFile(initialMessages);
75
+ if (Array.isArray(resolved)) return resolved;
76
+ logger.warn(`[SimulatedUser] Expected array of messages from file, got: ${typeof resolved}. Value: ${JSON.stringify(resolved).substring(0, 200)}`);
77
+ } catch (error) {
78
+ logger.warn(`[SimulatedUser] Failed to load initialMessages from file: ${error instanceof Error ? error.message : error}`);
79
+ }
80
+ return [];
81
+ }
82
+ if (initialMessages.trim().startsWith("[")) try {
83
+ const parsed = JSON.parse(initialMessages);
84
+ if (Array.isArray(parsed)) return parsed;
85
+ logger.warn(`[SimulatedUser] Parsed JSON but got ${typeof parsed} instead of array. Value: ${initialMessages.substring(0, 200)}`);
86
+ } catch (error) {
87
+ logger.warn(`[SimulatedUser] Failed to parse initialMessages as JSON: ${error}. Value: ${initialMessages.substring(0, 200)}`);
88
+ }
89
+ logger.warn(`[SimulatedUser] initialMessages is a string but could not be resolved: ${initialMessages.substring(0, 200)}`);
90
+ return [];
91
+ }
92
+ return [];
93
+ }
94
+ async sendMessageToUser(messages, userProvider) {
95
+ logger.debug("[SimulatedUser] Sending message to simulated user provider");
96
+ const flippedMessages = messages.map((message) => {
97
+ return {
98
+ role: message.role === "user" ? "assistant" : "user",
99
+ content: message.content
100
+ };
101
+ });
102
+ const response = await userProvider.callApi(JSON.stringify(flippedMessages));
103
+ if (response.error) return {
104
+ messages,
105
+ error: response.error
106
+ };
107
+ logger.debug(`User: ${response.output}`);
108
+ return {
109
+ messages: [...messages, {
110
+ role: "user",
111
+ content: String(response.output || "")
112
+ }],
113
+ tokenUsage: response.tokenUsage
114
+ };
115
+ }
116
+ async sendMessageToAgent(prompt, messages, targetProvider, context) {
117
+ invariant(context?.prompt?.raw, "Expected context.prompt.raw to be set");
118
+ const renderedPrompt = context.prompt.function ? prompt : getNunjucksEngine().renderString(context.prompt.raw, context.vars);
119
+ const targetPrompt = this.stateful ? context.vars?.sessionId ? JSON.stringify([{
120
+ role: "user",
121
+ content: messages[messages.length - 1].content
122
+ }]) : JSON.stringify([{
123
+ role: "system",
124
+ content: renderedPrompt
125
+ }, {
126
+ role: "user",
127
+ content: messages[messages.length - 1].content
128
+ }]) : JSON.stringify([{
129
+ role: "system",
130
+ content: renderedPrompt
131
+ }, ...messages]);
132
+ logger.debug(`[SimulatedUser] Sending message to target provider: ${targetPrompt}`);
133
+ const response = await targetProvider.callApi(targetPrompt, context);
134
+ if (response.sessionId) {
135
+ context = context ?? {
136
+ vars: {},
137
+ prompt: {
138
+ raw: "",
139
+ label: "target"
140
+ }
141
+ };
142
+ context.vars.sessionId = response.sessionId;
143
+ }
144
+ if (targetProvider.delay) {
145
+ logger.debug(`[SimulatedUser] Sleeping for ${targetProvider.delay}ms`);
146
+ await sleep(targetProvider.delay);
147
+ }
148
+ logger.debug(`[SimulatedUser] Agent: ${response.output}`);
149
+ return response;
150
+ }
151
+ async callApi(prompt, context, _callApiOptions) {
152
+ invariant(context?.originalProvider, "Expected originalProvider to be set");
153
+ const targetProvider = context.originalProvider;
154
+ const instructions = getNunjucksEngine().renderString(this.rawInstructions, context?.vars);
155
+ const userProvider = new PromptfooSimulatedUserProvider({ instructions }, this.taskId);
156
+ logger.debug(`[SimulatedUser] Formatted user instructions: ${instructions}`);
157
+ const varsInitialMessages = context?.vars?.initialMessages;
158
+ const templatedMessages = this.resolveInitialMessages(varsInitialMessages || this.configInitialMessages).map((msg) => ({
159
+ role: this.renderTemplate(msg.role, context?.vars),
160
+ content: this.renderTemplate(msg.content, context?.vars)
161
+ }));
162
+ const messages = this.validateMessages(templatedMessages);
163
+ if (messages.length > 0) logger.debug(`[SimulatedUser] Starting with ${messages.length} initial messages`);
164
+ const maxTurns = this.maxTurns;
165
+ const tokenUsage = createEmptyTokenUsage();
166
+ let agentResponse;
167
+ if ((messages.length > 0 ? messages[messages.length - 1].role : null) === "user") {
168
+ logger.debug("[SimulatedUser] Initial messages end with user message, getting agent response first");
169
+ agentResponse = await this.sendMessageToAgent(prompt, messages, targetProvider, context);
170
+ if (agentResponse.error) return {
171
+ error: agentResponse.error,
172
+ tokenUsage
173
+ };
174
+ messages.push({
175
+ role: "assistant",
176
+ content: String(agentResponse.output ?? "")
177
+ });
178
+ accumulateResponseTokenUsage(tokenUsage, agentResponse);
179
+ }
180
+ for (let i = 0; i < maxTurns; i++) {
181
+ logger.debug(`[SimulatedUser] Turn ${i + 1} of ${maxTurns}`);
182
+ const userResult = await this.sendMessageToUser(messages, userProvider);
183
+ if (userResult.error) return {
184
+ error: userResult.error,
185
+ tokenUsage
186
+ };
187
+ const { messages: messagesToUser, tokenUsage: userTokenUsage } = userResult;
188
+ accumulateResponseTokenUsage(tokenUsage, { tokenUsage: userTokenUsage });
189
+ const lastMessage = messagesToUser[messagesToUser.length - 1];
190
+ if (lastMessage.content && typeof lastMessage.content === "string" && lastMessage.content.includes("###STOP###")) break;
191
+ messages.push(lastMessage);
192
+ agentResponse = await this.sendMessageToAgent(prompt, messagesToUser, targetProvider, context);
193
+ if (agentResponse.error) return {
194
+ error: agentResponse.error,
195
+ tokenUsage
196
+ };
197
+ messages.push({
198
+ role: "assistant",
199
+ content: String(agentResponse.output ?? "")
200
+ });
201
+ accumulateResponseTokenUsage(tokenUsage, agentResponse);
202
+ }
203
+ return this.serializeOutput(messages, tokenUsage, agentResponse, getSessionId(agentResponse, context));
204
+ }
205
+ toString() {
206
+ return "AgentProvider";
207
+ }
208
+ serializeOutput(messages, tokenUsage, finalTargetResponse, sessionId) {
209
+ return {
210
+ output: messages.map((message) => `${message.role === "assistant" ? "Assistant" : "User"}: ${message.content}`).join("\n---\n"),
211
+ tokenUsage,
212
+ metadata: {
213
+ messages,
214
+ sessionId
215
+ },
216
+ guardrails: finalTargetResponse?.guardrails
217
+ };
218
+ }
219
+ };
220
+ //#endregion
221
+ export { SimulatedUser as t };
222
+
223
+ //# sourceMappingURL=simulatedUser-lgMMmniD.js.map