promptfoo 0.120.27 → 0.121.1

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 (352) hide show
  1. package/README.md +1 -1
  2. package/dist/src/{ListApp-8WOe2nT6.js → ListApp-Du7YVwj5.js} +2 -4
  3. package/dist/src/accounts-BgNJDBE6.js +206 -0
  4. package/dist/src/{accounts-Fl2J3_Fu.cjs → accounts-Bx-x3bmW.cjs} +77 -78
  5. package/dist/src/{accounts-DVINui-2.js → accounts-CMqkzrVf.js} +39 -34
  6. package/dist/src/{accounts-CPDRAMND.js → accounts-xrUGFA6n.js} +38 -33
  7. package/dist/src/{agentic-utils-D922n6mm.js → agentic-utils-BKIN5PKu.js} +9 -10
  8. package/dist/src/{agents-BO2n8Z0d.cjs → agents-B0f4HICh.cjs} +37 -40
  9. package/dist/src/{agents-BXLmVsxR.js → agents-C-dDThPK.js} +37 -37
  10. package/dist/src/{agents-DgJf2-ez.cjs → agents-CErsqg5U.cjs} +16 -17
  11. package/dist/src/{agents-BcsN_BgB.js → agents-CVIn-Utx.js} +16 -12
  12. package/dist/src/{agents-hqgSV-3o.js → agents-CXknwsFX.js} +37 -40
  13. package/dist/src/{agents-pMfppv9Z.js → agents-DeH4Gu94.js} +18 -18
  14. package/dist/src/{agents-BdUTAwi-.js → agents-Dy2YpZpa.js} +38 -41
  15. package/dist/src/{agents-DNvSH78i.js → agents-aF4-T121.js} +16 -20
  16. package/dist/src/{aimlapi-DOib86oE.js → aimlapi-BAGZDo5G.js} +16 -18
  17. package/dist/src/{aimlapi-DtgPI0nE.js → aimlapi-BNfTBexL.js} +15 -17
  18. package/dist/src/{aimlapi-DTPACCB1.js → aimlapi-DHRKlBEA.js} +15 -4
  19. package/dist/src/{aimlapi-BE_Tg9Fl.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
  20. package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
  21. package/dist/src/app/index.html +1 -1
  22. package/dist/src/{audio-BRYU0BFo.js → audio-BRODU0UK.js} +7 -9
  23. package/dist/src/{audio-Cwo68yZS.cjs → audio-BWeaWovU.cjs} +6 -7
  24. package/dist/src/{audio-BnRUGAm_.js → audio-CHQ4r-RV.js} +6 -5
  25. package/dist/src/{audio-MSRki4JU.js → audio-tf_NBjlC.js} +6 -8
  26. package/dist/src/{base-h961VXYk.js → base-B0tcrnq_.js} +11 -13
  27. package/dist/src/{base-XB2tDJrB.js → base-B4QJRyFS.js} +11 -13
  28. package/dist/src/{base-pGVmXNl4.cjs → base-DBtwl2FR.cjs} +36 -38
  29. package/dist/src/base-fEDN28WM.js +193 -0
  30. package/dist/src/{blobs-BM_e6hCa.js → blobs-BAU-dXan.js} +9 -12
  31. package/dist/src/{blobs-CR5C4Ihh.js → blobs-Bpg5rH6i.js} +9 -12
  32. package/dist/src/{blobs-B-KQAFhX.cjs → blobs-DvS-O6be.cjs} +34 -37
  33. package/dist/src/blobs-qTYm-1PY.js +236 -0
  34. package/dist/src/{cache-CIpsoBZR.js → cache-8XhNqPKW.js} +64 -67
  35. package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
  36. package/dist/src/cache-BwsMSda7.js +6 -0
  37. package/dist/src/{cache-jsiwsAJv.js → cache-CG0SlR1d.js} +64 -66
  38. package/dist/src/{cache-BTVYfbka.cjs → cache-COish3-W.cjs} +114 -117
  39. package/dist/src/cache-D3eqDYGU.js +739 -0
  40. package/dist/src/{chat-D31K7C4u.cjs → chat-2K608PeQ.cjs} +20 -21
  41. package/dist/src/chat-BKm79wib.js +764 -0
  42. package/dist/src/{chat-B84t99NW.js → chat-CM_kyI8B.js} +20 -9
  43. package/dist/src/{chat-BcPjZXIp.js → chat-CRWNNq73.js} +41 -44
  44. package/dist/src/{chat-CcUCysjU.js → chat-CznLWr_D.js} +41 -44
  45. package/dist/src/{chat-DwWifjxi.js → chat-DHMH-N64.js} +20 -22
  46. package/dist/src/{chat-BE44YOc6.cjs → chat-DaqekjFr.cjs} +61 -64
  47. package/dist/src/{chat-DZM2GUHO.js → chat-DxysjBvt.js} +21 -23
  48. package/dist/src/{chatkit-D67HS_0b.js → chatkit-65VXf5SR.js} +58 -58
  49. package/dist/src/{chatkit-DAB_qfzI.js → chatkit-Be-Q-a9F.js} +58 -60
  50. package/dist/src/{chatkit-Biqb_wsD.js → chatkit-BxFvW8KY.js} +58 -60
  51. package/dist/src/{chatkit-PGG4ZYIn.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
  52. package/dist/src/chunk-DEq-mXcV.js +15 -0
  53. package/dist/src/chunk-DRamLcfz.js +16 -0
  54. package/dist/src/{claude-agent-sdk-SVM6AdBu.js → claude-agent-sdk-BLTu0WBO.js} +31 -31
  55. package/dist/src/{claude-agent-sdk-C9SiaQub.cjs → claude-agent-sdk-CJH22shf.cjs} +31 -28
  56. package/dist/src/{claude-agent-sdk-C-IOTPfo.js → claude-agent-sdk-D6_k9FKA.js} +31 -29
  57. package/dist/src/{claude-agent-sdk-CiluSyW1.js → claude-agent-sdk-Dy5lT-Tx.js} +33 -20
  58. package/dist/src/{cloud-CZ-q9Ier.js → cloud-Bc9526yV.js} +7 -9
  59. package/dist/src/cloud-DmE0EwsY.js +4 -0
  60. package/dist/src/{cloudflare-ai-BahKHyhh.js → cloudflare-ai-C9r2sRhw.js} +16 -18
  61. package/dist/src/{cloudflare-ai-Dxyt50Nl.js → cloudflare-ai-CWWJCRim.js} +16 -4
  62. package/dist/src/{cloudflare-ai-Dfahv5SY.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
  63. package/dist/src/{cloudflare-ai-v_qZD6_q.js → cloudflare-ai-ICsOuD-z.js} +17 -19
  64. package/dist/src/{cloudflare-gateway-BPWoZIzJ.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
  65. package/dist/src/{cloudflare-gateway-Bi_FpOFy.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
  66. package/dist/src/{cloudflare-gateway-btS7h1OZ.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
  67. package/dist/src/{cloudflare-gateway-C0guUNwk.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
  68. package/dist/src/{codex-sdk-DSxAnbfT.js → codex-sdk-C6UMlxwV.js} +28 -29
  69. package/dist/src/{codex-sdk-IYVi9fuM.js → codex-sdk-DUwKWezN.js} +28 -27
  70. package/dist/src/{codex-sdk-DulY0ZRq.js → codex-sdk-GGAw0qbD.js} +28 -29
  71. package/dist/src/{codex-sdk-DFKMtAyf.cjs → codex-sdk-fAO0c3yA.cjs} +28 -29
  72. package/dist/src/{cometapi-DkNBMk0G.js → cometapi-BasUi7-_.js} +17 -19
  73. package/dist/src/{cometapi-DzrR3SR_.js → cometapi-Bbjp5V4x.js} +16 -4
  74. package/dist/src/{cometapi-C9EEpJzT.js → cometapi-DkXrKi5z.js} +21 -24
  75. package/dist/src/{cometapi-DIO64tf4.cjs → cometapi-vY6aDZgo.cjs} +21 -22
  76. package/dist/src/{completion-CG29bfKX.js → completion-6Mx_iXxK.js} +11 -13
  77. package/dist/src/{completion-Bgf1VJoq.js → completion-C5rtR_9P.js} +11 -13
  78. package/dist/src/{completion-CCRT4kX1.cjs → completion-CDOouNzq.cjs} +21 -23
  79. package/dist/src/completion-C_P3ypkJ.js +120 -0
  80. package/dist/src/{createHash-Dw_iLu31.js → createHash-CTQmL3G2.js} +2 -3
  81. package/dist/src/{createHash-CYQy4YeL.cjs → createHash-CfZSc0b4.cjs} +13 -14
  82. package/dist/src/{createHash-CJcfskIZ.js → createHash-Da8fMwqB.js} +2 -3
  83. package/dist/src/createHash-DmPQkvBh.js +15 -0
  84. package/dist/src/{docker-D-ayp2FW.js → docker-5KcG-_86.js} +18 -20
  85. package/dist/src/{docker-DNcLR4Ig.cjs → docker-BwsKwxFs.cjs} +18 -19
  86. package/dist/src/{docker-egERKxCF.js → docker-CZnqU1XV.js} +18 -7
  87. package/dist/src/{docker-B81N0t4e.js → docker-DzxyDPIj.js} +19 -21
  88. package/dist/src/entrypoint.js +2 -3
  89. package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
  90. package/dist/src/{esm-B9dPm_BF.js → esm-C03C-mv3.js} +17 -20
  91. package/dist/src/{esm-D2pZ87fL.js → esm-CaIwzWR5.js} +18 -21
  92. package/dist/src/esm-Cd1AjG1D.js +379 -0
  93. package/dist/src/{esm-Ct-Joyue.cjs → esm-CnNt7sI4.cjs} +47 -49
  94. package/dist/src/eval-17JizQIv.js +15 -0
  95. package/dist/src/{eval-C-Nr6wX_.js → eval-DmFyWU7i.js} +47 -54
  96. package/dist/src/{evalResult-4BzI2tmj.js → evalResult-CDQiuUuf.js} +16 -12
  97. package/dist/src/{evalResult-DXMWJ3sx.js → evalResult-CTG2AHOS.js} +10 -11
  98. package/dist/src/evalResult-Cqj8pldJ.js +12 -0
  99. package/dist/src/{evalResult-CX8wQecI.cjs → evalResult-Dap2CekP.cjs} +20 -21
  100. package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
  101. package/dist/src/evalResult-Hftn-S_i.js +10 -0
  102. package/dist/src/evaluator-B2CFNt-P.js +36 -0
  103. package/dist/src/{evaluator-8aGyV12L.js → evaluator-DPFRbFIL.js} +201 -229
  104. package/dist/src/{extractor-CD5yKL-G.js → extractor-CFG6bcWJ.js} +22 -24
  105. package/dist/src/{extractor-C031XmTA.cjs → extractor-DX36oYEv.cjs} +37 -39
  106. package/dist/src/{extractor-V5x_m1i0.js → extractor-M67RUtg6.js} +22 -24
  107. package/dist/src/extractor-YMU_Gvt8.js +374 -0
  108. package/dist/src/{fetch-D3OHf-lV.js → fetch-4M3YRaqL.js} +40 -45
  109. package/dist/src/fetch-60Gzydls.js +777 -0
  110. package/dist/src/{fetch-CXZI9RRr.js → fetch-BMv0O527.js} +23 -35
  111. package/dist/src/{fetch-BmbD-v1L.cjs → fetch-BxUk8odA.cjs} +244 -277
  112. package/dist/src/fetch-KV5kNASw.js +5 -0
  113. package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
  114. package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
  115. package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
  116. package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
  117. package/dist/src/{formatDuration-CdevI3An.js → formatDuration-DgBVMN65.js} +2 -2
  118. package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
  119. package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
  120. package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
  121. package/dist/src/{genaiTracer-Dres3qrN.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
  122. package/dist/src/graders-Bu0H9nXi.js +32 -0
  123. package/dist/src/{graders-DTeBrzWp.js → graders-CHO8EPM4.js} +349 -397
  124. package/dist/src/graders-Cfhkvx-e.js +34 -0
  125. package/dist/src/{graders--1y2u9HO.js → graders-CpdqD9PI.js} +349 -397
  126. package/dist/src/graders-DClJVpGP.cjs +32 -0
  127. package/dist/src/{graders-DohM2dir.cjs → graders-DOXycdlG.cjs} +684 -732
  128. package/dist/src/graders-DcnJsrMO.js +32 -0
  129. package/dist/src/graders-R9rYUM0d.js +13466 -0
  130. package/dist/src/{image-C3wHC9_h.js → image-BmEZqVmk.js} +9 -10
  131. package/dist/src/{image-O1u4bCFg.js → image-CBBVXWuT.js} +9 -10
  132. package/dist/src/{image-DpKl2F15.cjs → image-CDLQOcqT.cjs} +6 -7
  133. package/dist/src/{image-DmE-niFE.js → image-DJEvKveK.js} +6 -5
  134. package/dist/src/{image-CuKHuccK.cjs → image-DTedmQPg.cjs} +29 -30
  135. package/dist/src/{image-B0U4Hqll.js → image-gvmivTEe.js} +7 -9
  136. package/dist/src/image-pAX56tPG.js +257 -0
  137. package/dist/src/{image-DNEIf_aI.js → image-tL5hIOFh.js} +6 -8
  138. package/dist/src/index.cjs +605 -689
  139. package/dist/src/index.d.cts +11 -7
  140. package/dist/src/index.d.ts +11 -3
  141. package/dist/src/index.js +570 -658
  142. package/dist/src/{interactiveCheck-Bxj1Swex.js → interactiveCheck-BgLZUIt3.js} +7 -8
  143. package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
  144. package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
  145. package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
  146. package/dist/src/invariant-vgHWClmd.js +25 -0
  147. package/dist/src/{knowledgeBase-Be_zyW4L.js → knowledgeBase-CLJybhnF.js} +16 -16
  148. package/dist/src/{knowledgeBase-CEzQobWX.js → knowledgeBase-CoU-UQBg.js} +14 -9
  149. package/dist/src/{knowledgeBase-BZ41IFwq.js → knowledgeBase-DjWPVqSb.js} +14 -18
  150. package/dist/src/{knowledgeBase-D-5BMXlr.cjs → knowledgeBase-wkxuRFhA.cjs} +14 -15
  151. package/dist/src/{litellm-DnbRJ2if.js → litellm-B9Hysuri.js} +16 -18
  152. package/dist/src/{litellm-CRDqPhNI.js → litellm-CTfa0hqi.js} +15 -17
  153. package/dist/src/{litellm-hUSNM_M2.cjs → litellm-NYpQ8RQu.cjs} +15 -16
  154. package/dist/src/{litellm-9vR8zpfU.js → litellm-ePxtr9F1.js} +15 -4
  155. package/dist/src/{logger-CG1uZPbQ.js → logger-CT3IKMKA.js} +10 -29
  156. package/dist/src/{logger-B7sBeGa0.cjs → logger-Cp1GPUjj.cjs} +152 -180
  157. package/dist/src/logger-DLcq4dWf.js +713 -0
  158. package/dist/src/{logger-LSBxlt7a.js → logger-KkObSCzq.js} +13 -31
  159. package/dist/src/{luma-ray-Hm3d6VJE.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
  160. package/dist/src/{luma-ray-drvgdpP9.js → luma-ray-BE2mOt6N.js} +20 -13
  161. package/dist/src/{luma-ray-4blv9iZ2.js → luma-ray-BW9IRGIc.js} +22 -21
  162. package/dist/src/{luma-ray-B2__8lYH.js → luma-ray-Cm1KZBhs.js} +20 -23
  163. package/dist/src/main.js +1170 -1321
  164. package/dist/src/{messages-XhiwCbi4.cjs → messages-1JrJs91T.cjs} +32 -34
  165. package/dist/src/{messages-CGPPidQr.js → messages-1x9atZmP.js} +22 -24
  166. package/dist/src/{messages-Uee41Mj5.js → messages-BLbWdsyt.js} +22 -24
  167. package/dist/src/messages-D8EA0oDc.js +240 -0
  168. package/dist/src/{meteor-BYykdXrV.js → meteor-44VjEACX.js} +3 -4
  169. package/dist/src/{meteor-CsopaHrH.js → meteor-D-SotUw9.js} +3 -4
  170. package/dist/src/{meteor-e-E-2vVl.cjs → meteor-DLZZ3osF.cjs} +3 -4
  171. package/dist/src/{meteor-C8lGP6P4.js → meteor-DUiCJRC-.js} +3 -4
  172. package/dist/src/{modelslab-yKz-ZNB4.js → modelslab-C1OLRmVX.js} +17 -10
  173. package/dist/src/{modelslab-E9gO-bYd.js → modelslab-CqXBy3U8.js} +18 -20
  174. package/dist/src/{modelslab-lUVW0cmB.cjs → modelslab-DcOSFwKh.cjs} +17 -18
  175. package/dist/src/{modelslab-ClBkr8_9.js → modelslab-X5-4LroM.js} +17 -19
  176. package/dist/src/{nova-reel-Dk8jNpId.js → nova-reel-BgS1ZWuK.js} +20 -13
  177. package/dist/src/{nova-reel-u2eF2Cxm.js → nova-reel-D2ZkOSyr.js} +22 -21
  178. package/dist/src/{nova-reel-D8CuO6QH.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
  179. package/dist/src/{nova-reel-P9bwvtYX.js → nova-reel-DihqLeol.js} +20 -23
  180. package/dist/src/{nova-sonic-Ds1C-dpm.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
  181. package/dist/src/{nova-sonic-CK2rAiKi.js → nova-sonic-DezhVUYT.js} +30 -26
  182. package/dist/src/{nova-sonic-BaqWlkds.js → nova-sonic-P-CdUMlV.js} +30 -31
  183. package/dist/src/{nova-sonic-yZapPLv7.js → nova-sonic-Q3BOJeig.js} +31 -32
  184. package/dist/src/{openai-DUFopMrH.cjs → openai-Cuif0GEt.cjs} +8 -9
  185. package/dist/src/{openai-PblZ3jUE.js → openai-DElQ-fPX.js} +3 -4
  186. package/dist/src/{openai-CcN1B8Sb.js → openai-DhbB7eWK.js} +3 -4
  187. package/dist/src/openai-j-sE2O7r.js +44 -0
  188. package/dist/src/{openclaw-A-3_loM7.js → openclaw-BiSZPL7J.js} +20 -14
  189. package/dist/src/{openclaw-COn6QzDi.js → openclaw-Bv1DINsX.js} +20 -27
  190. package/dist/src/{openclaw-a3lylB-V.js → openclaw-D1D_ej1z.js} +21 -28
  191. package/dist/src/{openclaw-B6qqDr_u.cjs → openclaw-DAfWQn-o.cjs} +33 -39
  192. package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
  193. package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
  194. package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
  195. package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
  196. package/dist/src/{otlpReceiver-oyf5wLGC.js → otlpReceiver--AIRW_S4.js} +53 -51
  197. package/dist/src/{otlpReceiver-BmmTiMjA.js → otlpReceiver-Bn5wGB1v.js} +53 -55
  198. package/dist/src/{otlpReceiver-lXsYVbpj.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
  199. package/dist/src/{otlpReceiver-94URx7UW.js → otlpReceiver-g3ByGaXs.js} +53 -55
  200. package/dist/src/{providerRegistry-Cq_JK_CJ.js → providerRegistry-B0RUOLI_.js} +7 -8
  201. package/dist/src/{providerRegistry-DSSHjMKf.js → providerRegistry-CD8MEar9.js} +7 -8
  202. package/dist/src/{providerRegistry-CvHEVJad.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
  203. package/dist/src/providerRegistry-DM8rZYol.js +45 -0
  204. package/dist/src/providers-B3HvufyI.js +33246 -0
  205. package/dist/src/{providers-BnFpbY_s.js → providers-BKRJTjBz.js} +1536 -1669
  206. package/dist/src/providers-C1rOSHiR.js +32 -0
  207. package/dist/src/{providers-Iil64vk9.js → providers-CFLy1_ji.js} +1543 -1676
  208. package/dist/src/{providers-DHbjzW2e.cjs → providers-CFu-TZl-.cjs} +1896 -2029
  209. package/dist/src/providers-CxmDwEFf.cjs +31 -0
  210. package/dist/src/providers-Dodakqr0.js +30 -0
  211. package/dist/src/providers-GIQ2TcsA.js +30 -0
  212. package/dist/src/{pythonUtils-CcT5LH1M.js → pythonUtils-C3py6GC1.js} +18 -19
  213. package/dist/src/{pythonUtils-DBbuI3QJ.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
  214. package/dist/src/{pythonUtils-hZ8LeQLv.js → pythonUtils-D5nxkQ0P.js} +18 -19
  215. package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
  216. package/dist/src/{quiverai-BuI0tE39.js → quiverai-C2jVwbH1.js} +8 -7
  217. package/dist/src/{quiverai-DCGSZt4U.js → quiverai-CI6gYJVI.js} +8 -10
  218. package/dist/src/{quiverai-DiMVJQDz.cjs → quiverai-CLkWkyZc.cjs} +8 -9
  219. package/dist/src/{quiverai-fQNkExW4.js → quiverai-MHSxbmmZ.js} +9 -11
  220. package/dist/src/{render-Dj1smHEb.js → render-Drod8m7K.js} +4 -5
  221. package/dist/src/{responses-DOAFFENS.js → responses-BKqJmhhc.js} +22 -25
  222. package/dist/src/{responses-CxzoQoBe.js → responses-CGw0DCzh.js} +22 -25
  223. package/dist/src/responses-jxdehPkC.js +660 -0
  224. package/dist/src/{responses-ghR3IOfy.cjs → responses-tD4Bd4dc.cjs} +37 -40
  225. package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
  226. package/dist/src/{rubyUtils-CwbGmgYN.js → rubyUtils-BUVePouc.js} +27 -20
  227. package/dist/src/rubyUtils-BcuGX77l.js +222 -0
  228. package/dist/src/{rubyUtils-DudlFZed.js → rubyUtils-Boc4HZzX.js} +18 -19
  229. package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
  230. package/dist/src/{rubyUtils-C8MhKGHb.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
  231. package/dist/src/{sagemaker-gmskuyre.js → sagemaker-BK4Zb993.js} +75 -70
  232. package/dist/src/{sagemaker-DuM71dVU.js → sagemaker-BfiWTmvn.js} +77 -77
  233. package/dist/src/{sagemaker-77zbJ2Q2.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
  234. package/dist/src/{sagemaker-CcxhlOAR.js → sagemaker-D2Q1c-sD.js} +75 -79
  235. package/dist/src/{scanner-DJYiSXQj.js → scanner-J8CA3LsV.js} +100 -121
  236. package/dist/src/server/index.js +5505 -67416
  237. package/dist/src/{server-B5v33lvE.cjs → server-B0PPuDw-.cjs} +57 -67
  238. package/dist/src/server-B1vi21hA.js +7 -0
  239. package/dist/src/{server-RV_i_YX5.js → server-BC7XJFgr.js} +19 -24
  240. package/dist/src/server-Cm9Kai_h.cjs +5 -0
  241. package/dist/src/{server-BJ4m4f1D.js → server-DbFphssR.js} +26 -29
  242. package/dist/src/server-OAs3nBRT.js +229 -0
  243. package/dist/src/{signal-BW33JuId.js → signal-BOTbd53Z.js} +9 -11
  244. package/dist/src/{slack-DEURelTy.cjs → slack-BmVAVGaK.cjs} +7 -8
  245. package/dist/src/{slack-BQYeW9L3.js → slack-DCUPTzS2.js} +8 -8
  246. package/dist/src/{slack-BB6yuZzp.js → slack-DOdy_kyv.js} +7 -8
  247. package/dist/src/{slack-2pRrhhgJ.js → slack-DXMKtA-f.js} +7 -9
  248. package/dist/src/store-BNmZ1KAz.cjs +5 -0
  249. package/dist/src/{store-D7CgQzAR.cjs → store-BSc-TF2w.cjs} +44 -45
  250. package/dist/src/store-BltJg2cd.js +6 -0
  251. package/dist/src/{store-s3SftUwF.js → store-D1tv90v3.js} +34 -35
  252. package/dist/src/{store-DJNsD1iC.js → store-DQLEjuEO.js} +40 -36
  253. package/dist/src/store-Ub2vaGJ1.js +228 -0
  254. package/dist/src/{tables-DfTsNN7X.js → tables-5EvT_Bwn.js} +19 -21
  255. package/dist/src/{tables-BKTmd6u7.cjs → tables-C7K-XKWp.cjs} +89 -91
  256. package/dist/src/{tables-DMegD0Xf.js → tables-D36WTqKX.js} +21 -23
  257. package/dist/src/tables-xKANLRBD.js +288 -0
  258. package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
  259. package/dist/src/{telemetry-BedSm-bZ.js → telemetry-C15ziL8u.js} +17 -14
  260. package/dist/src/{telemetry--WAdAfVi.js → telemetry-C2YDkUQH.js} +11 -13
  261. package/dist/src/{telemetry-DQgVBCAb.cjs → telemetry-CbrnxHp_.cjs} +21 -24
  262. package/dist/src/telemetry-D4W5hboe.js +7 -0
  263. package/dist/src/telemetry-DMb2Mpfm.js +171 -0
  264. package/dist/src/{text-oiSbwSOI.js → text-B_UCRPp2.js} +2 -2
  265. package/dist/src/{text-oKzCBnK6.cjs → text-CW1cyrwj.cjs} +12 -13
  266. package/dist/src/{text-B_IrO4GZ.js → text-Db-Wt2u2.js} +2 -2
  267. package/dist/src/text-TIv0QYnd.js +22 -0
  268. package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
  269. package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
  270. package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
  271. package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
  272. package/dist/src/{transcription-BO1AHegO.cjs → transcription-CL78qbOU.cjs} +14 -15
  273. package/dist/src/{transcription-mYS9vd5v.js → transcription-DAtxHhAM.js} +14 -7
  274. package/dist/src/{transcription-X2-B4vkX.js → transcription-LNZTNUUL.js} +14 -16
  275. package/dist/src/{transcription-lzBLiTFJ.js → transcription-QHh3AH6Z.js} +15 -17
  276. package/dist/src/{transform-DeGlxb0D.js → transform-Cgi24fJ7.js} +39 -47
  277. package/dist/src/{transform-B1Hi5lWS.cjs → transform-CzK1Q0zl.cjs} +24 -26
  278. package/dist/src/{transform-CYDILYDe.js → transform-DECvGmzp.js} +15 -13
  279. package/dist/src/{transform-Dfl89yi4.js → transform-DGLazrMm.js} +39 -47
  280. package/dist/src/transform-DGxXocjk.js +1506 -0
  281. package/dist/src/{transform-D5PjiWiZ.cjs → transform-DOcQeLld.cjs} +179 -187
  282. package/dist/src/transform-DTGDnAzW.js +6 -0
  283. package/dist/src/{transform-BEgStbHK.js → transform-DilY9wbS.js} +10 -12
  284. package/dist/src/transform-aa6tmVpZ.js +216 -0
  285. package/dist/src/transform-m3qNw4KP.cjs +5 -0
  286. package/dist/src/{transformersAvailability-SZnTS3pJ.js → transformersAvailability-CEVM2GNQ.js} +2 -2
  287. package/dist/src/{transformersAvailability-D-glmEy7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
  288. package/dist/src/{transformersAvailability-CjeFXhuJ.js → transformersAvailability-D6c6ROpT.js} +2 -2
  289. package/dist/src/{types-CXQduE9o.js → types-CH3Ge2sE.js} +30 -90
  290. package/dist/src/{types-C5hEkb-x.js → types-CLKiCBW3.js} +25 -89
  291. package/dist/src/types-CN_TZ2GJ.js +3260 -0
  292. package/dist/src/{types-DWNf48sT.cjs → types-LJ0r3wbR.cjs} +500 -564
  293. package/dist/src/util-5cB-L7U3.js +1430 -0
  294. package/dist/src/util-6-GqIvzS.js +599 -0
  295. package/dist/src/{util-CoQjmE3u.js → util-B7T3SiBS.js} +4 -5
  296. package/dist/src/{util-D9eLdGfa.js → util-Betm42rL.js} +5 -6
  297. package/dist/src/{util-Bm_-UMD_.js → util-C-PPYSMq.js} +5 -6
  298. package/dist/src/{util-CyUdMzV0.cjs → util-CchiqXh_.cjs} +34 -35
  299. package/dist/src/{util-Du96oyYS.js → util-DaWTWKBK.js} +4 -5
  300. package/dist/src/{util-1wWM599Z.cjs → util-Db0a0AFH.cjs} +50 -51
  301. package/dist/src/{util-DQ984syk.js → util-Dlz_Wvgm.js} +37 -48
  302. package/dist/src/{util-_h4pVqrz.js → util-YT5HPZaS.js} +37 -48
  303. package/dist/src/{util-aLhtl3fe.cjs → util-Yz-1aEhW.cjs} +209 -220
  304. package/dist/src/util-ZZH-3QZz.js +293 -0
  305. package/dist/src/{utils-BjLy-Q72.cjs → utils-Cz9qXqII.cjs} +29 -32
  306. package/dist/src/{utils-CFMn2yHW.js → utils-XiOAgly5.js} +4 -7
  307. package/dist/src/utils-dLokC-eR.js +94 -0
  308. package/dist/src/{utils-DvWMzuMx.js → utils-f2-Moju7.js} +4 -7
  309. package/dist/tsconfig.tsbuildinfo +1 -1
  310. package/package.json +30 -30
  311. package/dist/src/app/assets/index-B2D0bCSI.js +0 -439
  312. package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
  313. package/dist/src/cache-ChPcurj7.js +0 -6
  314. package/dist/src/cache-VVu_W-yg.js +0 -8
  315. package/dist/src/cache-YLNCFEM2.cjs +0 -6
  316. package/dist/src/chunk-DHDDz29n.js +0 -22
  317. package/dist/src/chunk-FhC4c-0y.js +0 -21
  318. package/dist/src/cloud-BndfXy4H.js +0 -5
  319. package/dist/src/eval-BhHvMY82.js +0 -17
  320. package/dist/src/evalResult-Dq2gFNQY.js +0 -12
  321. package/dist/src/evalResult-nmcP5VKH.cjs +0 -12
  322. package/dist/src/evalResult-trqZjVYh.js +0 -14
  323. package/dist/src/evaluator-CnfPstzT.js +0 -39
  324. package/dist/src/fetch-IDPDue6F.cjs +0 -4
  325. package/dist/src/fetch-hKJ-It8q.js +0 -6
  326. package/dist/src/fetch-ouKnrWK-.js +0 -4
  327. package/dist/src/graders-CQn7WUsd.cjs +0 -34
  328. package/dist/src/graders-DC6QAbpW.js +0 -35
  329. package/dist/src/graders-DUWz3Y7j.js +0 -37
  330. package/dist/src/opencode-sdk-4bL9n-Gk.js +0 -382
  331. package/dist/src/opencode-sdk-BfC2zWcR.js +0 -376
  332. package/dist/src/opencode-sdk-DMJyuwMg.js +0 -380
  333. package/dist/src/opencode-sdk-Da-9adza.cjs +0 -383
  334. package/dist/src/providers-CsXB2Ix-.js +0 -35
  335. package/dist/src/providers-DO8ltjLC.js +0 -33
  336. package/dist/src/providers-Dtq-xnXd.cjs +0 -33
  337. package/dist/src/rubyUtils-BUbcND2f.js +0 -6
  338. package/dist/src/rubyUtils-Cr55X_KE.js +0 -5
  339. package/dist/src/rubyUtils-DlIiqoYo.cjs +0 -5
  340. package/dist/src/server-C2eQH4Gu.js +0 -6
  341. package/dist/src/server-CXWycu7H.cjs +0 -6
  342. package/dist/src/server-Q6OGlxxT.js +0 -8
  343. package/dist/src/store-B3EDO9Q3.js +0 -7
  344. package/dist/src/store-Dl9F8aw5.js +0 -6
  345. package/dist/src/store-SnrGrlt9.cjs +0 -6
  346. package/dist/src/telemetry-BGhiPZtl.js +0 -8
  347. package/dist/src/telemetry-CFfiYan6.cjs +0 -6
  348. package/dist/src/telemetry-DHzEduxX.js +0 -6
  349. package/dist/src/transform-C1x1ZlMQ.cjs +0 -6
  350. package/dist/src/transform-DYHjFmQu.js +0 -8
  351. package/dist/src/transform-rmwJT5JQ.js +0 -7
  352. package/dist/src/transformersAvailability-eJooj0gX.js +0 -35
@@ -1,28 +1,28 @@
1
1
  #!/usr/bin/env node
2
- import { C as getEnvString, E as isCI, O as cliState_default, S as getEnvInt, T as getMaxEvalTimeMs, _ as summarizeEvaluateResultForLogging, b as getEnvBool, f as extractJsonObjects, g as safeJsonStringify, o as logger_default, p as getAjv, w as getEvalTimeoutMs } from "./logger-LSBxlt7a.js";
3
- import { F as VERSION, I as FILE_METADATA_KEY, T as DEFAULT_MAX_CONCURRENCY, g as isPromptfooSampleTarget, l as sleep, r as fetchWithRetries, y as parseChatPrompt } from "./fetch-CXZI9RRr.js";
4
- import { t as invariant } from "./invariant-DT20jrBd.js";
5
- import { r as telemetry_default } from "./telemetry--WAdAfVi.js";
6
- import { d as isGradingResult, p as isApiProvider, s as ResultFailureReason } from "./types-CXQduE9o.js";
7
- import { c as promptYesNo } from "./server-BJ4m4f1D.js";
8
- import { A as renderPrompt, E as isBasicRefusal, F as TokenUsageTracker, G as VertexChatProvider, I as createRateLimitRegistry, K as AIStudioChatProvider, L as createProviderRateLimitOptions, M as isPackagePath, N as loadFromPackage, P as redteamProviderManager, j as runExtensionHook, k as collectFileMetadata, u as GoogleLiveProvider, v as checkExfilTracking, w as getSessionId } from "./providers-Iil64vk9.js";
9
- import { o as getCache } from "./cache-jsiwsAJv.js";
10
- import { n as isNonTransientHttpStatus } from "./errors-DnGCbnx8.js";
11
- import { i as isJavascriptFile } from "./fileExtensions-BpuMmaFL.js";
12
- import { E as parseFileUrl, I as isAnthropicProvider, L as isGoogleProvider, R as isOpenAiProvider, T as loadFunction, g as maybeLoadToolsFromExternalFile, w as getNunjucksEngine, z as isProviderAllowed } from "./util-_h4pVqrz.js";
13
- import { r as runPython } from "./pythonUtils-CcT5LH1M.js";
14
- import { n as transform, r as getProcessShim, t as TransformInputType } from "./transform-BEgStbHK.js";
15
- import { $ as matchesSearchRubric, B as getAndCheckProvider, G as matchesContextFaithfulness, H as matchesAnswerRelevance, J as matchesFactuality, K as matchesContextRecall, Q as matchesPiScore, R as callProviderWithContext, U as matchesClassification, V as loadRubricPrompt, W as matchesClosedQa, X as matchesLlmRubric, Y as matchesGEval, Z as matchesModeration, at as DefaultSuggestionsProvider, dt as getFinalTest, et as matchesSelectBest, ft as loadFromJavaScriptFile, it as getDefaultProviders, lt as SUGGEST_PROMPTS_SYSTEM_MESSAGE, mt as resolveContext, n as getGraderById, nt as selectMaxScore, pt as processFileReference, q as matchesContextRelevance, tt as matchesSimilarity, ut as coerceString, z as fail } from "./graders-DTeBrzWp.js";
16
- import { i as generateIdFromPrompt } from "./utils-DvWMzuMx.js";
17
- import { t as OpenAiChatCompletionProvider } from "./chat-BcPjZXIp.js";
18
- import { a as createEmptyTokenUsage, i as createEmptyAssertions, n as accumulateResponseTokenUsage, o as normalizeTokenUsage, r as accumulateTokenUsage, t as accumulateAssertionTokenUsage } from "./tokenUsageUtils-DmZSD2eU.js";
19
- import { m as validateFunctionCall } from "./transform-DeGlxb0D.js";
20
- import { l as validateFunctionCall$1 } from "./util-Bm_-UMD_.js";
21
- import { t as extractAndStoreBinaryData } from "./extractor-CD5yKL-G.js";
22
- import { n as getTraceStore } from "./store-s3SftUwF.js";
23
- import { t as providerRegistry } from "./providerRegistry-Cq_JK_CJ.js";
24
- import { n as runRuby } from "./rubyUtils-DudlFZed.js";
25
- import { a as getActualPromptWithFallback, r as updateSignalFile } from "./signal-BW33JuId.js";
2
+ import { C as getEnvString, E as isCI, O as state, S as getEnvInt, T as getMaxEvalTimeMs, _ as summarizeEvaluateResultForLogging, b as getEnvBool, f as extractJsonObjects, g as safeJsonStringify, o as logger, p as getAjv, w as getEvalTimeoutMs } from "./logger-KkObSCzq.js";
3
+ import { N as VERSION, P as FILE_METADATA_KEY, g as isPromptfooSampleTarget, l as sleep, r as fetchWithRetries, y as parseChatPrompt } from "./fetch-BMv0O527.js";
4
+ import { t as invariant } from "./invariant-BtWWVVhl.js";
5
+ import { r as telemetry } from "./telemetry-C2YDkUQH.js";
6
+ import { d as isGradingResult, p as isApiProvider, s as ResultFailureReason } from "./types-CH3Ge2sE.js";
7
+ import { c as promptYesNo } from "./server-DbFphssR.js";
8
+ import { A as renderPrompt, E as isBasicRefusal, F as TokenUsageTracker, G as VertexChatProvider, I as createRateLimitRegistry, K as AIStudioChatProvider, L as createProviderRateLimitOptions, M as isPackagePath, N as loadFromPackage, P as redteamProviderManager, j as runExtensionHook, k as collectFileMetadata, u as GoogleLiveProvider, v as checkExfilTracking, w as getSessionId } from "./providers-CFLy1_ji.js";
9
+ import { o as getCache } from "./cache-CG0SlR1d.js";
10
+ import { n as isNonTransientHttpStatus } from "./errors-P6ll7XSJ.js";
11
+ import { i as isJavascriptFile } from "./fileExtensions-Ds-foDzt.js";
12
+ import { E as parseFileUrl, I as isAnthropicProvider, L as isGoogleProvider, R as isOpenAiProvider, T as loadFunction, g as maybeLoadToolsFromExternalFile, w as getNunjucksEngine, z as isProviderAllowed } from "./util-YT5HPZaS.js";
13
+ import { r as runPython } from "./pythonUtils-C3py6GC1.js";
14
+ import { n as transform, r as getProcessShim, t as TransformInputType } from "./transform-DilY9wbS.js";
15
+ import { $ as matchesSearchRubric, B as getAndCheckProvider, G as matchesContextFaithfulness, H as matchesAnswerRelevance, J as matchesFactuality, K as matchesContextRecall, Q as matchesPiScore, R as callProviderWithContext, U as matchesClassification, V as loadRubricPrompt, W as matchesClosedQa, X as matchesLlmRubric, Y as matchesGEval, Z as matchesModeration, at as DefaultSuggestionsProvider, dt as getFinalTest, et as matchesSelectBest, ft as loadFromJavaScriptFile, it as getDefaultProviders, lt as SUGGEST_PROMPTS_SYSTEM_MESSAGE, mt as resolveContext, n as getGraderById, nt as selectMaxScore, pt as processFileReference, q as matchesContextRelevance, tt as matchesSimilarity, ut as coerceString, z as fail } from "./graders-CHO8EPM4.js";
16
+ import { i as generateIdFromPrompt } from "./utils-f2-Moju7.js";
17
+ import { t as OpenAiChatCompletionProvider } from "./chat-CRWNNq73.js";
18
+ import { a as createEmptyTokenUsage, i as createEmptyAssertions, n as accumulateResponseTokenUsage, o as normalizeTokenUsage, r as accumulateTokenUsage, t as accumulateAssertionTokenUsage } from "./tokenUsageUtils-DflFMjS0.js";
19
+ import { m as validateFunctionCall } from "./transform-Cgi24fJ7.js";
20
+ import { l as validateFunctionCall$1 } from "./util-C-PPYSMq.js";
21
+ import { t as extractAndStoreBinaryData } from "./extractor-CFG6bcWJ.js";
22
+ import { n as getTraceStore } from "./store-D1tv90v3.js";
23
+ import { t as providerRegistry } from "./providerRegistry-B0RUOLI_.js";
24
+ import { n as runRuby } from "./rubyUtils-Boc4HZzX.js";
25
+ import { a as getActualPromptWithFallback, r as updateSignalFile } from "./signal-BOTbd53Z.js";
26
26
  import chalk from "chalk";
27
27
  import fs, { createWriteStream } from "fs";
28
28
  import path from "path";
@@ -43,7 +43,6 @@ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
43
43
  import { resourceFromAttributes } from "@opentelemetry/resources";
44
44
  import { BatchSpanProcessor, NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
45
45
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
46
-
47
46
  //#region src/external/matchers/conversationRelevancyTemplate.ts
48
47
  var ConversationRelevancyTemplate = class {
49
48
  static generateVerdicts(slidingWindow) {
@@ -115,7 +114,6 @@ ${JSON.stringify(irrelevancies, null, 2)}
115
114
  JSON:`;
116
115
  }
117
116
  };
118
-
119
117
  //#endregion
120
118
  //#region src/external/matchers/deepeval.ts
121
119
  const nunjucks$1 = getNunjucksEngine(void 0, false, true);
@@ -165,7 +163,6 @@ async function matchesConversationRelevance(messages, threshold, vars, grading,
165
163
  return fail(`Error parsing output: ${err.message}`, resp.tokenUsage);
166
164
  }
167
165
  }
168
-
169
166
  //#endregion
170
167
  //#region src/external/assertions/deepeval.ts
171
168
  const DEFAULT_WINDOW_SIZE = 5;
@@ -220,7 +217,6 @@ const handleConversationRelevance = async ({ assertion, outputString, prompt, pr
220
217
  tokensUsed: tokensUsed.total > 0 ? tokensUsed : void 0
221
218
  };
222
219
  };
223
-
224
220
  //#endregion
225
221
  //#region src/tracing/evaluatorTracing.ts
226
222
  let otlpReceiverStarted = false;
@@ -253,28 +249,28 @@ function isOtlpReceiverStarted() {
253
249
  * Start the OTLP receiver if tracing is enabled and it hasn't been started yet
254
250
  */
255
251
  async function startOtlpReceiverIfNeeded(testSuite) {
256
- logger_default.debug(`[EvaluatorTracing] Checking tracing config: ${JSON.stringify(testSuite.tracing)}`);
257
- logger_default.debug(`[EvaluatorTracing] testSuite keys: ${Object.keys(testSuite)}`);
258
- logger_default.debug(`[EvaluatorTracing] Full testSuite.tracing: ${JSON.stringify(testSuite.tracing, null, 2)}`);
252
+ logger.debug(`[EvaluatorTracing] Checking tracing config: ${JSON.stringify(testSuite.tracing)}`);
253
+ logger.debug(`[EvaluatorTracing] testSuite keys: ${Object.keys(testSuite)}`);
254
+ logger.debug(`[EvaluatorTracing] Full testSuite.tracing: ${JSON.stringify(testSuite.tracing, null, 2)}`);
259
255
  if (testSuite.tracing?.enabled && testSuite.tracing?.otlp?.http?.enabled && !otlpReceiverStarted) {
260
- telemetry_default.record("feature_used", { feature: "tracing" });
256
+ telemetry.record("feature_used", { feature: "tracing" });
261
257
  try {
262
- logger_default.debug("[EvaluatorTracing] Tracing configuration detected, starting OTLP receiver");
263
- const { startOTLPReceiver } = await import("./otlpReceiver-BmmTiMjA.js");
258
+ logger.debug("[EvaluatorTracing] Tracing configuration detected, starting OTLP receiver");
259
+ const { startOTLPReceiver } = await import("./otlpReceiver-Bn5wGB1v.js");
264
260
  const port = testSuite.tracing.otlp.http.port || 4318;
265
261
  const host = testSuite.tracing.otlp.http.host || "127.0.0.1";
266
- logger_default.debug(`[EvaluatorTracing] Starting OTLP receiver on ${host}:${port}`);
262
+ logger.debug(`[EvaluatorTracing] Starting OTLP receiver on ${host}:${port}`);
267
263
  await startOTLPReceiver(port, host);
268
264
  otlpReceiverStarted = true;
269
- logger_default.info(`[EvaluatorTracing] OTLP receiver successfully started on port ${port} for tracing`);
265
+ logger.info(`[EvaluatorTracing] OTLP receiver successfully started on port ${port} for tracing`);
270
266
  } catch (error) {
271
- logger_default.error(`[EvaluatorTracing] Failed to start OTLP receiver: ${error}`);
267
+ logger.error(`[EvaluatorTracing] Failed to start OTLP receiver: ${error}`);
272
268
  }
273
- } else if (otlpReceiverStarted) logger_default.debug("[EvaluatorTracing] OTLP receiver already started, skipping initialization");
269
+ } else if (otlpReceiverStarted) logger.debug("[EvaluatorTracing] OTLP receiver already started, skipping initialization");
274
270
  else {
275
- logger_default.debug("[EvaluatorTracing] Tracing not enabled or OTLP HTTP receiver not configured");
276
- logger_default.debug(`[EvaluatorTracing] tracing.enabled: ${testSuite.tracing?.enabled}`);
277
- logger_default.debug(`[EvaluatorTracing] tracing.otlp.http.enabled: ${testSuite.tracing?.otlp?.http?.enabled}`);
271
+ logger.debug("[EvaluatorTracing] Tracing not enabled or OTLP HTTP receiver not configured");
272
+ logger.debug(`[EvaluatorTracing] tracing.enabled: ${testSuite.tracing?.enabled}`);
273
+ logger.debug(`[EvaluatorTracing] tracing.otlp.http.enabled: ${testSuite.tracing?.otlp?.http?.enabled}`);
278
274
  }
279
275
  }
280
276
  /**
@@ -282,13 +278,13 @@ async function startOtlpReceiverIfNeeded(testSuite) {
282
278
  */
283
279
  async function stopOtlpReceiverIfNeeded() {
284
280
  if (otlpReceiverStarted) try {
285
- logger_default.debug("[EvaluatorTracing] Stopping OTLP receiver");
286
- const { stopOTLPReceiver } = await import("./otlpReceiver-BmmTiMjA.js");
281
+ logger.debug("[EvaluatorTracing] Stopping OTLP receiver");
282
+ const { stopOTLPReceiver } = await import("./otlpReceiver-Bn5wGB1v.js");
287
283
  await stopOTLPReceiver();
288
284
  otlpReceiverStarted = false;
289
- logger_default.info("[EvaluatorTracing] OTLP receiver stopped successfully");
285
+ logger.info("[EvaluatorTracing] OTLP receiver stopped successfully");
290
286
  } catch (error) {
291
- logger_default.error(`[EvaluatorTracing] Failed to stop OTLP receiver: ${error}`);
287
+ logger.error(`[EvaluatorTracing] Failed to stop OTLP receiver: ${error}`);
292
288
  }
293
289
  }
294
290
  /**
@@ -304,7 +300,7 @@ function isTracingEnabled(test, testSuite) {
304
300
  const yamlConfigEnabled = testSuite?.tracing?.enabled === true;
305
301
  const envEnabled = getEnvBool("PROMPTFOO_TRACING_ENABLED", false);
306
302
  const result = metadataEnabled || yamlConfigEnabled || envEnabled;
307
- logger_default.debug(`[EvaluatorTracing] isTracingEnabled check: metadata=${metadataEnabled}, yamlConfig=${yamlConfigEnabled}, env=${envEnabled}, result=${result}`);
303
+ logger.debug(`[EvaluatorTracing] isTracingEnabled check: metadata=${metadataEnabled}, yamlConfig=${yamlConfigEnabled}, env=${envEnabled}, result=${result}`);
308
304
  return result;
309
305
  }
310
306
  /**
@@ -313,25 +309,25 @@ function isTracingEnabled(test, testSuite) {
313
309
  async function generateTraceContextIfNeeded(test, evaluateOptions, testIdx, promptIdx, testSuite) {
314
310
  const tracingEnabled = isTracingEnabled(test, testSuite);
315
311
  if (tracingEnabled) {
316
- logger_default.debug("[EvaluatorTracing] Tracing enabled for test case");
317
- logger_default.debug(`[EvaluatorTracing] Test metadata: ${JSON.stringify(test.metadata)}`);
312
+ logger.debug("[EvaluatorTracing] Tracing enabled for test case");
313
+ logger.debug(`[EvaluatorTracing] Test metadata: ${JSON.stringify(test.metadata)}`);
318
314
  }
319
315
  if (!tracingEnabled) return null;
320
- logger_default.debug("[EvaluatorTracing] Importing trace store");
321
- const { getTraceStore } = await import("./store-B3EDO9Q3.js");
316
+ logger.debug("[EvaluatorTracing] Importing trace store");
317
+ const { getTraceStore } = await import("./store-BltJg2cd.js");
322
318
  const traceStore = getTraceStore();
323
319
  const traceId = generateTraceId();
324
320
  const spanId = generateSpanId();
325
321
  const traceparent = generateTraceparent(traceId, spanId);
326
- logger_default.debug(`[EvaluatorTracing] Generated trace context: traceId=${traceId}, spanId=${spanId}`);
322
+ logger.debug(`[EvaluatorTracing] Generated trace context: traceId=${traceId}, spanId=${spanId}`);
327
323
  let evaluationId = test.metadata?.evaluationId || evaluateOptions?.eventSource;
328
324
  if (!evaluationId) {
329
- logger_default.warn("[EvaluatorTracing] No evaluation ID found in test metadata or evaluateOptions, trace will not be linked to evaluation");
325
+ logger.warn("[EvaluatorTracing] No evaluation ID found in test metadata or evaluateOptions, trace will not be linked to evaluation");
330
326
  evaluationId = `eval-${Date.now()}`;
331
327
  }
332
328
  const testCaseId = test.metadata?.testCaseId || test.id || `${testIdx}-${promptIdx}`;
333
329
  try {
334
- logger_default.debug(`[EvaluatorTracing] Creating trace record for traceId=${traceId}`);
330
+ logger.debug(`[EvaluatorTracing] Creating trace record for traceId=${traceId}`);
335
331
  await traceStore.createTrace({
336
332
  traceId,
337
333
  evaluationId: evaluationId || "",
@@ -342,18 +338,17 @@ async function generateTraceContextIfNeeded(test, evaluateOptions, testIdx, prom
342
338
  vars: test.vars
343
339
  }
344
340
  });
345
- logger_default.debug("[EvaluatorTracing] Trace record created successfully");
341
+ logger.debug("[EvaluatorTracing] Trace record created successfully");
346
342
  } catch (error) {
347
- logger_default.error(`[EvaluatorTracing] Failed to create trace: ${error}`);
343
+ logger.error(`[EvaluatorTracing] Failed to create trace: ${error}`);
348
344
  }
349
- logger_default.debug(`[EvaluatorTracing] Trace context ready: ${traceparent} for test case ${testCaseId}`);
345
+ logger.debug(`[EvaluatorTracing] Trace context ready: ${traceparent} for test case ${testCaseId}`);
350
346
  return {
351
347
  traceparent,
352
348
  evaluationId,
353
349
  testCaseId
354
350
  };
355
351
  }
356
-
357
352
  //#endregion
358
353
  //#region src/assertions/answerRelevance.ts
359
354
  const handleAnswerRelevance = async ({ assertion, output, prompt, test, providerCallContext }) => {
@@ -364,7 +359,6 @@ const handleAnswerRelevance = async ({ assertion, output, prompt, test, provider
364
359
  ...await matchesAnswerRelevance(typeof test?.vars?.query === "string" ? test.vars.query : prompt, output, assertion.threshold ?? 0, test.options, providerCallContext)
365
360
  };
366
361
  };
367
-
368
362
  //#endregion
369
363
  //#region src/assertions/assertionsResult.ts
370
364
  const GUARDRAIL_BLOCKED_REASON = "Content failed guardrail safety checks";
@@ -470,7 +464,6 @@ var AssertionsResult = class {
470
464
  return this.result;
471
465
  }
472
466
  };
473
-
474
467
  //#endregion
475
468
  //#region src/assertions/ngrams.ts
476
469
  /**
@@ -486,7 +479,6 @@ function getNGrams(words, n) {
486
479
  for (let i = 0; i <= words.length - n; i++) ngrams.push(words.slice(i, i + n).join(" "));
487
480
  return ngrams;
488
481
  }
489
-
490
482
  //#endregion
491
483
  //#region src/assertions/bleu.ts
492
484
  /**
@@ -582,7 +574,6 @@ function handleBleuScore({ assertion, inverse, outputString, renderedValue }) {
582
574
  assertion
583
575
  };
584
576
  }
585
-
586
577
  //#endregion
587
578
  //#region src/assertions/classifier.ts
588
579
  async function handleClassifier({ assertion, renderedValue, outputString, test, inverse }) {
@@ -597,9 +588,43 @@ async function handleClassifier({ assertion, renderedValue, outputString, test,
597
588
  ...classificationResult
598
589
  };
599
590
  }
600
-
601
591
  //#endregion
602
592
  //#region src/assertions/contains.ts
593
+ function parseCommaSeparatedValues(value) {
594
+ const results = [];
595
+ let i = 0;
596
+ while (i < value.length) {
597
+ while (i < value.length && /\s/.test(value[i])) i++;
598
+ if (i >= value.length) break;
599
+ if (value[i] === ",") {
600
+ i++;
601
+ continue;
602
+ }
603
+ if (value[i] === "\"") {
604
+ i++;
605
+ let field = "";
606
+ while (i < value.length) if (value[i] === "\\" && i + 1 < value.length && (value[i + 1] === "\"" || value[i + 1] === "\\")) {
607
+ field += value[i + 1];
608
+ i += 2;
609
+ } else if (value[i] === "\"" && i + 1 < value.length && value[i + 1] === "\"") {
610
+ field += "\"";
611
+ i += 2;
612
+ } else if (value[i] === "\"") {
613
+ i++;
614
+ break;
615
+ } else {
616
+ field += value[i];
617
+ i++;
618
+ }
619
+ results.push(field);
620
+ } else {
621
+ const start = i;
622
+ while (i < value.length && value[i] !== ",") i++;
623
+ results.push(value.substring(start, i).trim());
624
+ }
625
+ }
626
+ return results;
627
+ }
603
628
  const handleContains = ({ assertion, renderedValue, valueFromScript, outputString, inverse }) => {
604
629
  const value = valueFromScript ?? renderedValue;
605
630
  invariant(value, "\"contains\" assertion type must have a string or number value");
@@ -627,7 +652,7 @@ const handleIContains = ({ assertion, renderedValue, valueFromScript, outputStri
627
652
  const handleContainsAny = ({ assertion, renderedValue, valueFromScript, outputString, inverse }) => {
628
653
  let value = valueFromScript ?? renderedValue;
629
654
  invariant(value, "\"contains-any\" assertion type must have a value");
630
- if (typeof value === "string") value = value.match(/(".*?"|[^,]+)(?=\s*,|\s*$)/g)?.map((v) => v.trim().replace(/^"|"$/g, "")) ?? [];
655
+ if (typeof value === "string") value = parseCommaSeparatedValues(value);
631
656
  invariant(Array.isArray(value), "\"contains-any\" assertion type must have an array value");
632
657
  const pass = value.some((v) => outputString.includes(String(v))) !== inverse;
633
658
  return {
@@ -640,7 +665,7 @@ const handleContainsAny = ({ assertion, renderedValue, valueFromScript, outputSt
640
665
  const handleIContainsAny = ({ assertion, renderedValue, valueFromScript, outputString, inverse }) => {
641
666
  let value = valueFromScript ?? renderedValue;
642
667
  invariant(value, "\"icontains-any\" assertion type must have a value");
643
- if (typeof value === "string") value = value.split(",").map((v) => v.trim());
668
+ if (typeof value === "string") value = parseCommaSeparatedValues(value);
644
669
  invariant(Array.isArray(value), "\"icontains-any\" assertion type must have an array value");
645
670
  const pass = value.some((v) => outputString.toLowerCase().includes(String(v).toLowerCase())) !== inverse;
646
671
  return {
@@ -653,7 +678,7 @@ const handleIContainsAny = ({ assertion, renderedValue, valueFromScript, outputS
653
678
  const handleContainsAll = ({ assertion, renderedValue, valueFromScript, outputString, inverse }) => {
654
679
  let value = valueFromScript ?? renderedValue;
655
680
  invariant(value, "\"contains-all\" assertion type must have a value");
656
- if (typeof value === "string") value = value.split(",").map((v) => v.trim());
681
+ if (typeof value === "string") value = parseCommaSeparatedValues(value);
657
682
  invariant(Array.isArray(value), "\"contains-all\" assertion type must have an array value");
658
683
  const missingStrings = value.filter((v) => !outputString.includes(String(v)));
659
684
  const pass = missingStrings.length === 0 !== inverse;
@@ -667,7 +692,7 @@ const handleContainsAll = ({ assertion, renderedValue, valueFromScript, outputSt
667
692
  const handleIContainsAll = ({ assertion, renderedValue, valueFromScript, outputString, inverse }) => {
668
693
  let value = valueFromScript ?? renderedValue;
669
694
  invariant(value, "\"icontains-all\" assertion type must have a value");
670
- if (typeof value === "string") value = value.split(",").map((v) => v.trim());
695
+ if (typeof value === "string") value = parseCommaSeparatedValues(value);
671
696
  invariant(Array.isArray(value), "\"icontains-all\" assertion type must have an array value");
672
697
  const missingStrings = value.filter((v) => !outputString.toLowerCase().includes(String(v).toLowerCase()));
673
698
  const pass = missingStrings.length === 0 !== inverse;
@@ -678,7 +703,6 @@ const handleIContainsAll = ({ assertion, renderedValue, valueFromScript, outputS
678
703
  assertion
679
704
  };
680
705
  };
681
-
682
706
  //#endregion
683
707
  //#region src/assertions/contextFaithfulness.ts
684
708
  /**
@@ -702,7 +726,6 @@ async function handleContextFaithfulness({ assertion, test, output, prompt, prov
702
726
  metadata: { context }
703
727
  };
704
728
  }
705
-
706
729
  //#endregion
707
730
  //#region src/assertions/contextRecall.ts
708
731
  /**
@@ -729,7 +752,6 @@ const handleContextRecall = async ({ assertion, renderedValue, prompt, test, out
729
752
  }
730
753
  };
731
754
  };
732
-
733
755
  //#endregion
734
756
  //#region src/assertions/contextRelevance.ts
735
757
  /**
@@ -756,7 +778,6 @@ const handleContextRelevance = async ({ assertion, test, output, prompt, provide
756
778
  }
757
779
  };
758
780
  };
759
-
760
781
  //#endregion
761
782
  //#region src/assertions/cost.ts
762
783
  const handleCost = ({ cost, assertion }) => {
@@ -770,7 +791,6 @@ const handleCost = ({ cost, assertion }) => {
770
791
  assertion
771
792
  };
772
793
  };
773
-
774
794
  //#endregion
775
795
  //#region src/assertions/equals.ts
776
796
  const handleEquals = async ({ assertion, renderedValue, outputString, inverse }) => {
@@ -790,7 +810,6 @@ const handleEquals = async ({ assertion, renderedValue, outputString, inverse })
790
810
  assertion
791
811
  };
792
812
  };
793
-
794
813
  //#endregion
795
814
  //#region src/assertions/factuality.ts
796
815
  const handleFactuality = async ({ assertion, renderedValue, outputString, test, prompt, providerCallContext }) => {
@@ -801,7 +820,6 @@ const handleFactuality = async ({ assertion, renderedValue, outputString, test,
801
820
  ...await matchesFactuality(prompt, renderedValue, outputString, test.options, test.vars, providerCallContext)
802
821
  };
803
822
  };
804
-
805
823
  //#endregion
806
824
  //#region src/assertions/finishReason.ts
807
825
  function handleFinishReason({ assertion, renderedValue, providerResponse }) {
@@ -821,7 +839,6 @@ function handleFinishReason({ assertion, renderedValue, providerResponse }) {
821
839
  assertion
822
840
  };
823
841
  }
824
-
825
842
  //#endregion
826
843
  //#region src/assertions/functionToolCall.ts
827
844
  const handleIsValidFunctionCall = ({ assertion, output, provider, test }) => {
@@ -844,7 +861,6 @@ const handleIsValidFunctionCall = ({ assertion, output, provider, test }) => {
844
861
  };
845
862
  }
846
863
  };
847
-
848
864
  //#endregion
849
865
  //#region src/assertions/geval.ts
850
866
  const handleGEval = async ({ assertion, renderedValue, prompt, outputString, test, providerCallContext }) => {
@@ -870,7 +886,6 @@ const handleGEval = async ({ assertion, renderedValue, prompt, outputString, tes
870
886
  ...await matchesGEval(renderedValue, prompt || "", outputString, threshold, test.options, providerCallContext)
871
887
  };
872
888
  };
873
-
874
889
  //#endregion
875
890
  //#region src/assertions/gleu.ts
876
891
  /**
@@ -969,7 +984,6 @@ function handleGleuScore({ assertion, inverse, outputString, renderedValue }) {
969
984
  assertion
970
985
  };
971
986
  }
972
-
973
987
  //#endregion
974
988
  //#region src/assertions/guardrails.ts
975
989
  const handleGuardrails = async ({ assertion, inverse, providerResponse }) => {
@@ -978,7 +992,7 @@ const handleGuardrails = async ({ assertion, inverse, providerResponse }) => {
978
992
  flaggedInput: false,
979
993
  flaggedOutput: false
980
994
  };
981
- logger_default.debug(`Guardrails from target response: ${JSON.stringify(guardrails, null, 2)}`);
995
+ logger.debug(`Guardrails from target response: ${JSON.stringify(guardrails, null, 2)}`);
982
996
  if (guardrails) if (guardrails.flagged) {
983
997
  let reason = "Content failed safety checks";
984
998
  if (guardrails?.flaggedInput) reason = "Prompt failed safety checks";
@@ -1007,7 +1021,6 @@ const handleGuardrails = async ({ assertion, inverse, providerResponse }) => {
1007
1021
  assertion
1008
1022
  };
1009
1023
  };
1010
-
1011
1024
  //#endregion
1012
1025
  //#region src/assertions/html.ts
1013
1026
  const HTML_PATTERNS = {
@@ -1216,7 +1229,6 @@ const handleIsHtml = ({ assertion, outputString, inverse }) => {
1216
1229
  assertion
1217
1230
  };
1218
1231
  };
1219
-
1220
1232
  //#endregion
1221
1233
  //#region src/assertions/javascript.ts
1222
1234
  /**
@@ -1357,7 +1369,6 @@ ${renderedValue}`,
1357
1369
  assertion
1358
1370
  };
1359
1371
  };
1360
-
1361
1372
  //#endregion
1362
1373
  //#region src/assertions/json.ts
1363
1374
  function handleIsJson({ outputString, renderedValue, inverse, valueFromScript, assertion }) {
@@ -1423,7 +1434,6 @@ function handleContainsJson({ assertion, renderedValue, outputString, inverse, v
1423
1434
  assertion
1424
1435
  };
1425
1436
  }
1426
-
1427
1437
  //#endregion
1428
1438
  //#region src/assertions/latency.ts
1429
1439
  const handleLatency = ({ assertion, latencyMs }) => {
@@ -1437,7 +1447,6 @@ const handleLatency = ({ assertion, latencyMs }) => {
1437
1447
  assertion
1438
1448
  };
1439
1449
  };
1440
-
1441
1450
  //#endregion
1442
1451
  //#region src/assertions/levenshtein.ts
1443
1452
  function handleLevenshtein({ assertion, renderedValue, outputString }) {
@@ -1452,7 +1461,6 @@ function handleLevenshtein({ assertion, renderedValue, outputString }) {
1452
1461
  assertion
1453
1462
  };
1454
1463
  }
1455
-
1456
1464
  //#endregion
1457
1465
  //#region src/assertions/llmRubric.ts
1458
1466
  const handleLlmRubric = ({ assertion, renderedValue, outputString, test, providerCallContext }) => {
@@ -1461,7 +1469,6 @@ const handleLlmRubric = ({ assertion, renderedValue, outputString, test, provide
1461
1469
  assertion.value = assertion.value || test.options?.rubricPrompt;
1462
1470
  return matchesLlmRubric(renderedValue || "", outputString, test.options, test.vars, assertion, void 0, providerCallContext);
1463
1471
  };
1464
-
1465
1472
  //#endregion
1466
1473
  //#region src/assertions/modelGradedClosedQa.ts
1467
1474
  const handleModelGradedClosedQa = async ({ assertion, renderedValue, outputString, test, prompt, providerCallContext }) => {
@@ -1472,7 +1479,6 @@ const handleModelGradedClosedQa = async ({ assertion, renderedValue, outputStrin
1472
1479
  ...await matchesClosedQa(prompt, renderedValue, outputString, test.options, test.vars, providerCallContext)
1473
1480
  };
1474
1481
  };
1475
-
1476
1482
  //#endregion
1477
1483
  //#region src/assertions/moderation.ts
1478
1484
  const handleModeration = async ({ assertion, test, outputString, providerResponse, prompt }) => {
@@ -1495,7 +1501,6 @@ const handleModeration = async ({ assertion, test, outputString, providerRespons
1495
1501
  assertion
1496
1502
  };
1497
1503
  };
1498
-
1499
1504
  //#endregion
1500
1505
  //#region src/assertions/openai.ts
1501
1506
  const handleIsValidOpenAiToolsCall = async ({ assertion, output, provider, test }) => {
@@ -1556,7 +1561,6 @@ const handleIsValidOpenAiToolsCall = async ({ assertion, output, provider, test
1556
1561
  };
1557
1562
  }
1558
1563
  };
1559
-
1560
1564
  //#endregion
1561
1565
  //#region src/assertions/perplexity.ts
1562
1566
  function handlePerplexity({ logProbs, assertion }) {
@@ -1583,7 +1587,6 @@ function handlePerplexityScore({ logProbs, assertion }) {
1583
1587
  assertion
1584
1588
  };
1585
1589
  }
1586
-
1587
1590
  //#endregion
1588
1591
  //#region src/assertions/pi.ts
1589
1592
  const handlePiScorer = async ({ assertion, prompt, renderedValue, outputString }) => {
@@ -1591,7 +1594,6 @@ const handlePiScorer = async ({ assertion, prompt, renderedValue, outputString }
1591
1594
  invariant(typeof prompt === "string", "\"pi\" assertion must have a prompt that is a string");
1592
1595
  return matchesPiScore(renderedValue, prompt, outputString, assertion);
1593
1596
  };
1594
-
1595
1597
  //#endregion
1596
1598
  //#region src/python/wrapper.ts
1597
1599
  /**
@@ -1607,17 +1609,16 @@ async function runPythonCode(code, method, args) {
1607
1609
  fs.writeFileSync(tempFilePath, code);
1608
1610
  return await runPython(tempFilePath, method, args);
1609
1611
  } catch (error) {
1610
- logger_default.error(`Error executing Python code: ${error}`);
1612
+ logger.error(`Error executing Python code: ${error}`);
1611
1613
  throw error;
1612
1614
  } finally {
1613
1615
  try {
1614
1616
  fs.unlinkSync(tempFilePath);
1615
1617
  } catch (error) {
1616
- logger_default.error(`Error removing temporary file: ${error}`);
1618
+ logger.error(`Error removing temporary file: ${error}`);
1617
1619
  }
1618
1620
  }
1619
1621
  }
1620
-
1621
1622
  //#endregion
1622
1623
  //#region src/util/caseMapping.ts
1623
1624
  /**
@@ -1641,7 +1642,6 @@ function mapSnakeCaseToCamelCase(obj) {
1641
1642
  });
1642
1643
  return result;
1643
1644
  }
1644
-
1645
1645
  //#endregion
1646
1646
  //#region src/assertions/python.ts
1647
1647
  const handlePython = async ({ assertion, renderedValue, valueFromScript, assertionValueContext, output }) => {
@@ -1711,7 +1711,6 @@ ${isMultiline ? renderedValue.split("\n").map((line) => `${indentStyle}${line}`)
1711
1711
  assertion
1712
1712
  };
1713
1713
  };
1714
-
1715
1714
  //#endregion
1716
1715
  //#region src/assertions/redteam.ts
1717
1716
  /**
@@ -1792,7 +1791,7 @@ const handleRedteam = async ({ assertion, baseType, test, prompt, outputString,
1792
1791
  const { hasAnyErrors, allTurnsHaveErrors } = analyzeGraderErrors(redteamHistory);
1793
1792
  if (test.metadata?.strategyId && hasAnyErrors && !allTurnsHaveErrors) {
1794
1793
  const errorMessage = error instanceof Error ? error.message : String(error);
1795
- logger_default.warn("[Redteam] Grading failed for iterative test with some prior grader errors", {
1794
+ logger.warn("[Redteam] Grading failed for iterative test with some prior grader errors", {
1796
1795
  error: errorMessage,
1797
1796
  strategyId: test.metadata.strategyId,
1798
1797
  pluginId: test.metadata.pluginId
@@ -1812,7 +1811,6 @@ const handleRedteam = async ({ assertion, baseType, test, prompt, outputString,
1812
1811
  throw error;
1813
1812
  }
1814
1813
  };
1815
-
1816
1814
  //#endregion
1817
1815
  //#region src/assertions/refusal.ts
1818
1816
  function handleIsRefusal(params) {
@@ -1840,7 +1838,6 @@ function handleIsRefusal(params) {
1840
1838
  assertion
1841
1839
  };
1842
1840
  }
1843
-
1844
1841
  //#endregion
1845
1842
  //#region src/assertions/regex.ts
1846
1843
  const handleRegex = ({ assertion, renderedValue, outputString, inverse }) => {
@@ -1865,7 +1862,6 @@ const handleRegex = ({ assertion, renderedValue, outputString, inverse }) => {
1865
1862
  assertion
1866
1863
  };
1867
1864
  };
1868
-
1869
1865
  //#endregion
1870
1866
  //#region src/assertions/rouge.ts
1871
1867
  function handleRougeScore({ baseType, assertion, renderedValue, outputString, inverse }) {
@@ -1881,7 +1877,6 @@ function handleRougeScore({ baseType, assertion, renderedValue, outputString, in
1881
1877
  assertion
1882
1878
  };
1883
1879
  }
1884
-
1885
1880
  //#endregion
1886
1881
  //#region src/ruby/wrapper.ts
1887
1882
  /**
@@ -1897,17 +1892,16 @@ async function runRubyCode(code, method, args) {
1897
1892
  fs.writeFileSync(tempFilePath, code);
1898
1893
  return await runRuby(tempFilePath, method, args);
1899
1894
  } catch (error) {
1900
- logger_default.error(`Error executing Ruby code: ${error}`);
1895
+ logger.error(`Error executing Ruby code: ${error}`);
1901
1896
  throw error;
1902
1897
  } finally {
1903
1898
  try {
1904
1899
  fs.unlinkSync(tempFilePath);
1905
1900
  } catch (error) {
1906
- logger_default.error(`Error removing temporary file: ${error}`);
1901
+ logger.error(`Error removing temporary file: ${error}`);
1907
1902
  }
1908
1903
  }
1909
1904
  }
1910
-
1911
1905
  //#endregion
1912
1906
  //#region src/assertions/ruby.ts
1913
1907
  const handleRuby = async ({ assertion, renderedValue, valueFromScript, assertionValueContext, output }) => {
@@ -1978,7 +1972,6 @@ end
1978
1972
  assertion
1979
1973
  };
1980
1974
  };
1981
-
1982
1975
  //#endregion
1983
1976
  //#region src/assertions/searchRubric.ts
1984
1977
  async function handleSearchRubric({ assertion, baseType: _baseType, inverse, provider, providerCallContext, renderedValue, test, providerResponse }) {
@@ -1990,7 +1983,6 @@ async function handleSearchRubric({ assertion, baseType: _baseType, inverse, pro
1990
1983
  }
1991
1984
  return result;
1992
1985
  }
1993
-
1994
1986
  //#endregion
1995
1987
  //#region src/assertions/similar.ts
1996
1988
  const handleSimilar = async ({ assertion, renderedValue, outputString, inverse, test }) => {
@@ -2033,7 +2025,6 @@ const handleSimilar = async ({ assertion, renderedValue, outputString, inverse,
2033
2025
  ...await matchesSimilarity(renderedValue, outputString, threshold, inverse, test.options, metric)
2034
2026
  };
2035
2027
  };
2036
-
2037
2028
  //#endregion
2038
2029
  //#region src/assertions/sql.ts
2039
2030
  const handleIsSql = async ({ assertion, renderedValue, outputString, inverse }) => {
@@ -2125,7 +2116,6 @@ const handleContainsSql = async (assertionParams) => {
2125
2116
  }
2126
2117
  return handleIsSql(assertionParams);
2127
2118
  };
2128
-
2129
2119
  //#endregion
2130
2120
  //#region src/assertions/startsWith.ts
2131
2121
  const handleStartsWith = ({ assertion, renderedValue, outputString, inverse }) => {
@@ -2139,7 +2129,6 @@ const handleStartsWith = ({ assertion, renderedValue, outputString, inverse }) =
2139
2129
  assertion
2140
2130
  };
2141
2131
  };
2142
-
2143
2132
  //#endregion
2144
2133
  //#region src/assertions/toolCallF1.ts
2145
2134
  /**
@@ -2268,7 +2257,6 @@ const handleToolCallF1 = ({ assertion, output, renderedValue, inverse }) => {
2268
2257
  assertion
2269
2258
  };
2270
2259
  };
2271
-
2272
2260
  //#endregion
2273
2261
  //#region src/assertions/traceUtils.ts
2274
2262
  /**
@@ -2286,7 +2274,6 @@ function matchesPattern(spanName, pattern) {
2286
2274
  const regexPattern = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".");
2287
2275
  return new RegExp(`^${regexPattern}$`, "i").test(spanName);
2288
2276
  }
2289
-
2290
2277
  //#endregion
2291
2278
  //#region src/assertions/traceErrorSpans.ts
2292
2279
  function isErrorSpan(span) {
@@ -2364,7 +2351,6 @@ const handleTraceErrorSpans = ({ assertion, assertionValueContext }) => {
2364
2351
  assertion
2365
2352
  };
2366
2353
  };
2367
-
2368
2354
  //#endregion
2369
2355
  //#region src/assertions/traceSpanCount.ts
2370
2356
  const handleTraceSpanCount = ({ assertion, assertionValueContext }) => {
@@ -2399,7 +2385,6 @@ const handleTraceSpanCount = ({ assertion, assertionValueContext }) => {
2399
2385
  assertion
2400
2386
  };
2401
2387
  };
2402
-
2403
2388
  //#endregion
2404
2389
  //#region src/assertions/traceSpanDuration.ts
2405
2390
  function calculatePercentile(durations, percentile) {
@@ -2457,7 +2442,6 @@ const handleTraceSpanDuration = ({ assertion, assertionValueContext }) => {
2457
2442
  assertion
2458
2443
  };
2459
2444
  };
2460
-
2461
2445
  //#endregion
2462
2446
  //#region src/assertions/webhook.ts
2463
2447
  async function handleWebhook({ assertion, renderedValue, test, prompt, output, inverse }) {
@@ -2494,7 +2478,6 @@ async function handleWebhook({ assertion, renderedValue, test, prompt, output, i
2494
2478
  };
2495
2479
  }
2496
2480
  }
2497
-
2498
2481
  //#endregion
2499
2482
  //#region src/assertions/wordCount.ts
2500
2483
  /**
@@ -2557,7 +2540,6 @@ const handleWordCount = ({ assertion, renderedValue, valueFromScript, outputStri
2557
2540
  assertion
2558
2541
  };
2559
2542
  };
2560
-
2561
2543
  //#endregion
2562
2544
  //#region src/assertions/xml.ts
2563
2545
  function validateXml(xmlString, requiredElements) {
@@ -2632,7 +2614,6 @@ const handleIsXml = ({ assertion, renderedValue, outputString, inverse, baseType
2632
2614
  assertion
2633
2615
  };
2634
2616
  };
2635
-
2636
2617
  //#endregion
2637
2618
  //#region src/assertions/index.ts
2638
2619
  const ASSERTIONS_MAX_CONCURRENCY = getEnvInt("PROMPTFOO_ASSERTIONS_MAX_CONCURRENCY", 3);
@@ -2686,7 +2667,7 @@ const ASSERTION_HANDLERS = {
2686
2667
  "llm-rubric": handleLlmRubric,
2687
2668
  meteor: async (params) => {
2688
2669
  try {
2689
- const { handleMeteorAssertion } = await import("./meteor-BYykdXrV.js");
2670
+ const { handleMeteorAssertion } = await import("./meteor-44VjEACX.js");
2690
2671
  return handleMeteorAssertion(params);
2691
2672
  } catch (error) {
2692
2673
  if (error instanceof Error && (error.message.includes("Cannot find module") || error.message.includes("natural\" package is required"))) return {
@@ -2732,10 +2713,10 @@ function renderMetricName(metric, vars) {
2732
2713
  if (!metric) return metric;
2733
2714
  try {
2734
2715
  const rendered = nunjucks.renderString(metric, vars);
2735
- if (rendered === "" && metric !== "") logger_default.debug(`Metric template "${metric}" rendered to empty string`);
2716
+ if (rendered === "" && metric !== "") logger.debug(`Metric template "${metric}" rendered to empty string`);
2736
2717
  return rendered;
2737
2718
  } catch (error) {
2738
- logger_default.warn(`Failed to render metric template "${metric}": ${error instanceof Error ? error.message : error}`);
2719
+ logger.warn(`Failed to render metric template "${metric}": ${error instanceof Error ? error.message : error}`);
2739
2720
  return metric;
2740
2721
  }
2741
2722
  }
@@ -2786,12 +2767,12 @@ async function runAssertion({ prompt, provider, assertion, test, vars, latencyMs
2786
2767
  spans: traceData.spans || []
2787
2768
  };
2788
2769
  } catch (error) {
2789
- logger_default.debug(`Failed to fetch trace data for assertion: ${error}`);
2770
+ logger.debug(`Failed to fetch trace data for assertion: ${error}`);
2790
2771
  }
2791
2772
  let renderedValue = assertion.value;
2792
2773
  let valueFromScript;
2793
2774
  if (typeof renderedValue === "string") if (renderedValue.startsWith("file://")) {
2794
- const basePath = cliState_default.basePath || "";
2775
+ const basePath = state.basePath || "";
2795
2776
  const fileRef = renderedValue.slice(7);
2796
2777
  let filePath = fileRef;
2797
2778
  let functionName;
@@ -2803,10 +2784,10 @@ async function runAssertion({ prompt, provider, assertion, test, vars, latencyMs
2803
2784
  filePath = path.resolve(basePath, filePath);
2804
2785
  if (isJavascriptFile(filePath)) {
2805
2786
  valueFromScript = await loadFromJavaScriptFile(filePath, functionName, [output, context]);
2806
- logger_default.debug(`Javascript script ${filePath} output: ${valueFromScript}`);
2787
+ logger.debug(`Javascript script ${filePath} output: ${valueFromScript}`);
2807
2788
  } else if (filePath.endsWith(".py")) try {
2808
2789
  valueFromScript = await runPython(filePath, functionName || "get_assert", [output, context]);
2809
- logger_default.debug(`Python script ${filePath} output: ${valueFromScript}`);
2790
+ logger.debug(`Python script ${filePath} output: ${valueFromScript}`);
2810
2791
  } catch (error) {
2811
2792
  return {
2812
2793
  pass: false,
@@ -2816,9 +2797,9 @@ async function runAssertion({ prompt, provider, assertion, test, vars, latencyMs
2816
2797
  };
2817
2798
  }
2818
2799
  else if (filePath.endsWith(".rb")) try {
2819
- const { runRuby } = await import("./rubyUtils-BUbcND2f.js");
2800
+ const { runRuby } = await import("./rubyUtils-BUHu6PhO.js");
2820
2801
  valueFromScript = await runRuby(filePath, functionName || "get_assert", [output, context]);
2821
- logger_default.debug(`Ruby script ${filePath} output: ${valueFromScript}`);
2802
+ logger.debug(`Ruby script ${filePath} output: ${valueFromScript}`);
2822
2803
  } catch (error) {
2823
2804
  return {
2824
2805
  pass: false,
@@ -2829,7 +2810,7 @@ async function runAssertion({ prompt, provider, assertion, test, vars, latencyMs
2829
2810
  }
2830
2811
  else renderedValue = processFileReference(renderedValue);
2831
2812
  } else if (isPackagePath(renderedValue)) {
2832
- const basePath = cliState_default.basePath || "";
2813
+ const basePath = state.basePath || "";
2833
2814
  const requiredModule = await loadFromPackage(renderedValue, basePath);
2834
2815
  if (typeof requiredModule !== "function") throw new Error(`Assertion malformed: ${renderedValue} must be a function. Received: ${typeof requiredModule}`);
2835
2816
  valueFromScript = await Promise.resolve(requiredModule(output, context));
@@ -2990,7 +2971,6 @@ var assertions_default = {
2990
2971
  matchesModeration,
2991
2972
  matchesConversationRelevance
2992
2973
  };
2993
-
2994
2974
  //#endregion
2995
2975
  //#region src/util/promptMatching.ts
2996
2976
  /**
@@ -3028,7 +3008,6 @@ function isPromptAllowed(prompt, allowedPrompts) {
3028
3008
  if (allowedPrompts.length === 0) return false;
3029
3009
  return allowedPrompts.some((ref) => doesPromptRefMatch(ref, prompt));
3030
3010
  }
3031
-
3032
3011
  //#endregion
3033
3012
  //#region src/progress/ciProgressReporter.ts
3034
3013
  var CIProgressReporter = class {
@@ -3050,7 +3029,7 @@ var CIProgressReporter = class {
3050
3029
  }
3051
3030
  start() {
3052
3031
  if (this.intervalId) clearInterval(this.intervalId);
3053
- logger_default.info(`[Evaluation] Starting ${this.totalTests} test cases...`);
3032
+ logger.info(`[Evaluation] Starting ${this.totalTests} test cases...`);
3054
3033
  this.intervalId = setInterval(() => {
3055
3034
  this.logPeriodicUpdate();
3056
3035
  }, this.updateIntervalMs);
@@ -3081,14 +3060,14 @@ var CIProgressReporter = class {
3081
3060
  this.intervalId = null;
3082
3061
  }
3083
3062
  const elapsed = this.formatElapsedTime(Date.now() - this.startTime);
3084
- logger_default.info(`[Evaluation] ✓ Complete! ${this.completedTests}/${this.totalTests} tests in ${elapsed}`);
3063
+ logger.info(`[Evaluation] ✓ Complete! ${this.completedTests}/${this.totalTests} tests in ${elapsed}`);
3085
3064
  if (process.env.GITHUB_ACTIONS) console.log(`::notice::Evaluation completed: ${this.completedTests}/${this.totalTests} tests in ${elapsed}`);
3086
3065
  }
3087
3066
  error(message) {
3088
3067
  const now = Date.now();
3089
3068
  if (now - this.lastErrorTime < this.ERROR_THROTTLE_MS) return;
3090
3069
  this.lastErrorTime = now;
3091
- logger_default.error(`[Evaluation Error] ${message}`);
3070
+ logger.error(`[Evaluation Error] ${message}`);
3092
3071
  if (process.env.GITHUB_ACTIONS) {
3093
3072
  const escapedMessage = message.replace(/\r?\n/g, " ").replace(/::/g, " ");
3094
3073
  console.log(`::error::${escapedMessage}`);
@@ -3107,12 +3086,12 @@ var CIProgressReporter = class {
3107
3086
  else etaDisplay = `${Math.round(eta)} minute${Math.round(eta) !== 1 ? "s" : ""}`;
3108
3087
  }
3109
3088
  const percentage = Math.floor(this.completedTests / this.totalTests * 100);
3110
- logger_default.info(`[CI Progress] Evaluation running for ${this.formatElapsedTime(elapsed)} - Completed ${this.completedTests}/${this.totalTests} tests (${percentage}%)`);
3111
- logger_default.info(`[CI Progress] Rate: ~${Math.round(rate)} tests/minute, ETA: ${etaDisplay}`);
3089
+ logger.info(`[CI Progress] Evaluation running for ${this.formatElapsedTime(elapsed)} - Completed ${this.completedTests}/${this.totalTests} tests (${percentage}%)`);
3090
+ logger.info(`[CI Progress] Rate: ~${Math.round(rate)} tests/minute, ETA: ${etaDisplay}`);
3112
3091
  }
3113
3092
  logMilestone(percentage) {
3114
3093
  const elapsed = this.formatElapsedTime(Date.now() - this.startTime);
3115
- logger_default.info(`[Evaluation] ✓ ${percentage}% complete (${this.completedTests}/${this.totalTests}) - ${elapsed} elapsed`);
3094
+ logger.info(`[Evaluation] ✓ ${percentage}% complete (${this.completedTests}/${this.totalTests}) - ${elapsed} elapsed`);
3116
3095
  if (process.env.GITHUB_ACTIONS) console.log(`::notice::Evaluation ${percentage}% complete`);
3117
3096
  }
3118
3097
  formatElapsedTime(ms) {
@@ -3123,7 +3102,6 @@ var CIProgressReporter = class {
3123
3102
  return `${minutes}m ${remainingSeconds}s`;
3124
3103
  }
3125
3104
  };
3126
-
3127
3105
  //#endregion
3128
3106
  //#region src/providers/azure/warnings.ts
3129
3107
  /**
@@ -3137,13 +3115,12 @@ function maybeEmitAzureOpenAiWarning(testSuite, tests) {
3137
3115
  const modelGradedAsserts = tests.flatMap((t) => (t.assert || []).filter((a) => a.type !== "assert-set" && MODEL_GRADED_ASSERTION_TYPES.has(a.type) && !a.provider && !t.options?.provider));
3138
3116
  if (modelGradedAsserts.length > 0) {
3139
3117
  const assertTypes = Array.from(new Set(modelGradedAsserts.map((a) => a.type))).join(", ");
3140
- logger_default.warn(chalk.yellow(`You are using model-graded assertions of types ${chalk.bold(assertTypes)} while testing an Azure provider. You may need to override these to use your Azure deployment. To learn more, see ${chalk.bold(`https://promptfoo.dev/docs/providers/azure/#model-graded-tests`)}`));
3118
+ logger.warn(chalk.yellow(`You are using model-graded assertions of types ${chalk.bold(assertTypes)} while testing an Azure provider. You may need to override these to use your Azure deployment. To learn more, see ${chalk.bold(`https://promptfoo.dev/docs/providers/azure/#model-graded-tests`)}`));
3141
3119
  return true;
3142
3120
  }
3143
3121
  }
3144
3122
  return false;
3145
3123
  }
3146
-
3147
3124
  //#endregion
3148
3125
  //#region src/suggestions.ts
3149
3126
  async function generatePrompts(prompt, _num) {
@@ -3174,7 +3151,6 @@ async function generatePrompts(prompt, _num) {
3174
3151
  };
3175
3152
  }
3176
3153
  }
3177
-
3178
3154
  //#endregion
3179
3155
  //#region src/tracing/otelConfig.ts
3180
3156
  /**
@@ -3200,7 +3176,6 @@ function getDefaultOtelConfig() {
3200
3176
  enabled: true
3201
3177
  };
3202
3178
  }
3203
-
3204
3179
  //#endregion
3205
3180
  //#region src/tracing/localSpanExporter.ts
3206
3181
  /**
@@ -3220,7 +3195,7 @@ var LocalSpanExporter = class {
3220
3195
  });
3221
3196
  else resultCallback({ code: ExportResultCode.SUCCESS });
3222
3197
  }).catch((error) => {
3223
- logger_default.error("[LocalSpanExporter] Failed to export spans", { error });
3198
+ logger.error("[LocalSpanExporter] Failed to export spans", { error });
3224
3199
  resultCallback({
3225
3200
  code: ExportResultCode.FAILED,
3226
3201
  error: error instanceof Error ? error : new Error(String(error))
@@ -3234,7 +3209,7 @@ var LocalSpanExporter = class {
3234
3209
  async exportAsync(spans) {
3235
3210
  if (spans.length === 0) return;
3236
3211
  const traceStore = getTraceStore();
3237
- logger_default.debug(`[LocalSpanExporter] Exporting ${spans.length} spans`);
3212
+ logger.debug(`[LocalSpanExporter] Exporting ${spans.length} spans`);
3238
3213
  const spansByTrace = /* @__PURE__ */ new Map();
3239
3214
  for (const span of spans) {
3240
3215
  const traceId = span.spanContext().traceId;
@@ -3245,12 +3220,12 @@ var LocalSpanExporter = class {
3245
3220
  let firstError;
3246
3221
  for (const [traceId, spanDataList] of spansByTrace) try {
3247
3222
  const result = await traceStore.addSpans(traceId, spanDataList, { skipTraceCheck: false });
3248
- if (result.stored) logger_default.debug(`[LocalSpanExporter] Added ${spanDataList.length} spans to trace ${traceId}`);
3249
- else logger_default.debug(`[LocalSpanExporter] Skipping ${spanDataList.length} spans for orphan trace ${traceId}: ${result.reason}`);
3223
+ if (result.stored) logger.debug(`[LocalSpanExporter] Added ${spanDataList.length} spans to trace ${traceId}`);
3224
+ else logger.debug(`[LocalSpanExporter] Skipping ${spanDataList.length} spans for orphan trace ${traceId}: ${result.reason}`);
3250
3225
  } catch (error) {
3251
- if ((error instanceof Error ? error.message : String(error)).includes("FOREIGN KEY")) logger_default.debug(`[LocalSpanExporter] Skipping ${spanDataList.length} spans for orphan trace ${traceId}`);
3226
+ if ((error instanceof Error ? error.message : String(error)).includes("FOREIGN KEY")) logger.debug(`[LocalSpanExporter] Skipping ${spanDataList.length} spans for orphan trace ${traceId}`);
3252
3227
  else {
3253
- logger_default.error(`[LocalSpanExporter] Failed to add spans to trace ${traceId}`, { error });
3228
+ logger.error(`[LocalSpanExporter] Failed to add spans to trace ${traceId}`, { error });
3254
3229
  if (!firstError) firstError = error instanceof Error ? error : new Error(String(error));
3255
3230
  }
3256
3231
  }
@@ -3287,7 +3262,7 @@ var LocalSpanExporter = class {
3287
3262
  * Shutdown the exporter. No-op for local storage.
3288
3263
  */
3289
3264
  shutdown() {
3290
- logger_default.debug("[LocalSpanExporter] Shutting down");
3265
+ logger.debug("[LocalSpanExporter] Shutting down");
3291
3266
  return Promise.resolve();
3292
3267
  }
3293
3268
  /**
@@ -3297,7 +3272,6 @@ var LocalSpanExporter = class {
3297
3272
  return Promise.resolve();
3298
3273
  }
3299
3274
  };
3300
-
3301
3275
  //#endregion
3302
3276
  //#region src/tracing/otelSdk.ts
3303
3277
  let provider = null;
@@ -3325,21 +3299,21 @@ function getHandlers() {
3325
3299
  */
3326
3300
  function initializeOtel(config) {
3327
3301
  if (initialized) {
3328
- logger_default.debug("[OtelSdk] Already initialized, skipping");
3302
+ logger.debug("[OtelSdk] Already initialized, skipping");
3329
3303
  return;
3330
3304
  }
3331
3305
  if (!config.enabled) {
3332
- logger_default.debug("[OtelSdk] OTEL tracing is disabled");
3306
+ logger.debug("[OtelSdk] OTEL tracing is disabled");
3333
3307
  return;
3334
3308
  }
3335
- logger_default.debug("[OtelSdk] Initializing OpenTelemetry SDK", {
3309
+ logger.debug("[OtelSdk] Initializing OpenTelemetry SDK", {
3336
3310
  serviceName: config.serviceName,
3337
3311
  endpoint: config.endpoint,
3338
3312
  localExport: config.localExport
3339
3313
  });
3340
3314
  if (config.debug) diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
3341
3315
  propagation.setGlobalPropagator(new W3CTraceContextPropagator());
3342
- logger_default.debug("[OtelSdk] Registered W3C Trace Context propagator");
3316
+ logger.debug("[OtelSdk] Registered W3C Trace Context propagator");
3343
3317
  const resource = resourceFromAttributes({
3344
3318
  [ATTR_SERVICE_NAME]: config.serviceName,
3345
3319
  [ATTR_SERVICE_VERSION]: VERSION
@@ -3348,12 +3322,12 @@ function initializeOtel(config) {
3348
3322
  if (config.localExport) {
3349
3323
  const localExporter = new LocalSpanExporter();
3350
3324
  spanProcessors.push(new BatchSpanProcessor(localExporter));
3351
- logger_default.debug("[OtelSdk] Added local span exporter");
3325
+ logger.debug("[OtelSdk] Added local span exporter");
3352
3326
  }
3353
3327
  if (config.endpoint) {
3354
3328
  const otlpExporter = new OTLPTraceExporter({ url: config.endpoint });
3355
3329
  spanProcessors.push(new BatchSpanProcessor(otlpExporter));
3356
- logger_default.debug(`[OtelSdk] Added OTLP exporter to ${config.endpoint}`);
3330
+ logger.debug(`[OtelSdk] Added OTLP exporter to ${config.endpoint}`);
3357
3331
  }
3358
3332
  provider = new NodeTracerProvider({
3359
3333
  resource,
@@ -3361,7 +3335,7 @@ function initializeOtel(config) {
3361
3335
  });
3362
3336
  provider.register();
3363
3337
  initialized = true;
3364
- logger_default.info("[OtelSdk] OpenTelemetry SDK initialized successfully");
3338
+ logger.info("[OtelSdk] OpenTelemetry SDK initialized successfully");
3365
3339
  setupShutdownHandlers();
3366
3340
  }
3367
3341
  /**
@@ -3370,12 +3344,12 @@ function initializeOtel(config) {
3370
3344
  */
3371
3345
  async function shutdownOtel() {
3372
3346
  if (!initialized || !provider) return;
3373
- logger_default.debug("[OtelSdk] Shutting down OpenTelemetry SDK");
3347
+ logger.debug("[OtelSdk] Shutting down OpenTelemetry SDK");
3374
3348
  try {
3375
3349
  await provider.shutdown();
3376
- logger_default.info("[OtelSdk] OpenTelemetry SDK shut down successfully");
3350
+ logger.info("[OtelSdk] OpenTelemetry SDK shut down successfully");
3377
3351
  } catch (error) {
3378
- logger_default.error("[OtelSdk] Error shutting down OpenTelemetry SDK", { error });
3352
+ logger.error("[OtelSdk] Error shutting down OpenTelemetry SDK", { error });
3379
3353
  } finally {
3380
3354
  provider = null;
3381
3355
  initialized = false;
@@ -3388,12 +3362,12 @@ async function shutdownOtel() {
3388
3362
  */
3389
3363
  async function flushOtel() {
3390
3364
  if (!initialized || !provider) return;
3391
- logger_default.debug("[OtelSdk] Flushing pending spans");
3365
+ logger.debug("[OtelSdk] Flushing pending spans");
3392
3366
  try {
3393
3367
  await provider.forceFlush();
3394
- logger_default.debug("[OtelSdk] Spans flushed successfully");
3368
+ logger.debug("[OtelSdk] Spans flushed successfully");
3395
3369
  } catch (error) {
3396
- logger_default.error("[OtelSdk] Error flushing spans", { error });
3370
+ logger.error("[OtelSdk] Error flushing spans", { error });
3397
3371
  }
3398
3372
  }
3399
3373
  /**
@@ -3405,7 +3379,7 @@ function setupShutdownHandlers() {
3405
3379
  const handlers = getHandlers();
3406
3380
  if (handlers.registered) return;
3407
3381
  const shutdown = async (signal) => {
3408
- logger_default.debug(`[OtelSdk] Received ${signal}, shutting down`);
3382
+ logger.debug(`[OtelSdk] Received ${signal}, shutting down`);
3409
3383
  await shutdownOtel();
3410
3384
  };
3411
3385
  handlers.sigTermHandler = () => {
@@ -3442,7 +3416,6 @@ function cleanupShutdownHandlers() {
3442
3416
  }
3443
3417
  handlers.registered = false;
3444
3418
  }
3445
-
3446
3419
  //#endregion
3447
3420
  //#region src/util/exportToFile/writeToFile.ts
3448
3421
  var JsonlFileWriter = class {
@@ -3466,7 +3439,6 @@ var JsonlFileWriter = class {
3466
3439
  });
3467
3440
  }
3468
3441
  };
3469
-
3470
3442
  //#endregion
3471
3443
  //#region src/evaluator.ts
3472
3444
  /**
@@ -3658,7 +3630,7 @@ async function runEval({ provider, prompt, test, testSuite, delay, nunjucksFilte
3658
3630
  if (test.providerOutput) response.output = test.providerOutput;
3659
3631
  else {
3660
3632
  const activeProvider = isApiProvider(test.provider) ? test.provider : provider;
3661
- logger_default.debug(`Provider type: ${activeProvider.id()}`);
3633
+ logger.debug(`Provider type: ${activeProvider.id()}`);
3662
3634
  traceContext = await generateTraceContextIfNeeded(test, evaluateOptions, testIdx, promptIdx, testSuite);
3663
3635
  const callApiContext = {
3664
3636
  vars,
@@ -3669,7 +3641,7 @@ async function runEval({ provider, prompt, test, testSuite, delay, nunjucksFilte
3669
3641
  filters,
3670
3642
  originalProvider: provider,
3671
3643
  test,
3672
- logger: logger_default,
3644
+ logger,
3673
3645
  getCache,
3674
3646
  repeatIndex
3675
3647
  };
@@ -3686,8 +3658,8 @@ async function runEval({ provider, prompt, test, testSuite, delay, nunjucksFilte
3686
3658
  const sanitizedMetadata = safeJsonStringify(response.metadata);
3687
3659
  response.metadata = sanitizedMetadata ? JSON.parse(sanitizedMetadata) : {};
3688
3660
  }
3689
- logger_default.debug(`Provider response properties: ${Object.keys(response).join(", ")}`);
3690
- logger_default.debug(`Provider response cached property explicitly: ${response.cached}`);
3661
+ logger.debug(`Provider response properties: ${Object.keys(response).join(", ")}`);
3662
+ logger.debug(`Provider response cached property explicitly: ${response.cached}`);
3691
3663
  }
3692
3664
  latencyMs = Date.now() - startTime;
3693
3665
  let conversationLastInput = void 0;
@@ -3704,12 +3676,12 @@ async function runEval({ provider, prompt, test, testSuite, delay, nunjucksFilte
3704
3676
  metadata: response.metadata
3705
3677
  });
3706
3678
  }
3707
- logger_default.debug("Evaluator response", { responsePreview: (safeJsonStringify(response) ?? "").slice(0, 100) });
3708
- logger_default.debug(`Evaluator checking cached flag: response.cached = ${Boolean(response.cached)}, provider.delay = ${provider.delay}`);
3679
+ logger.debug("Evaluator response", { responsePreview: (safeJsonStringify(response) ?? "").slice(0, 100) });
3680
+ logger.debug(`Evaluator checking cached flag: response.cached = ${Boolean(response.cached)}, provider.delay = ${provider.delay}`);
3709
3681
  if (!response.cached && provider.delay > 0) {
3710
- logger_default.debug(`Sleeping for ${provider.delay}ms`);
3682
+ logger.debug(`Sleeping for ${provider.delay}ms`);
3711
3683
  await sleep(provider.delay);
3712
- } else if (response.cached) logger_default.debug(`Skipping delay because response is cached`);
3684
+ } else if (response.cached) logger.debug(`Skipping delay because response is cached`);
3713
3685
  const ret = {
3714
3686
  ...setup,
3715
3687
  response,
@@ -3812,7 +3784,7 @@ async function runEval({ provider, prompt, test, testSuite, delay, nunjucksFilte
3812
3784
  promptIdx,
3813
3785
  testIdx
3814
3786
  });
3815
- if (!(err instanceof Error && err.name === "AbortError")) logger_default.error("Provider call failed during eval", logContext);
3787
+ if (!(err instanceof Error && err.name === "AbortError")) logger.error("Provider call failed during eval", logContext);
3816
3788
  return [{
3817
3789
  ...setup,
3818
3790
  error: errorWithStack,
@@ -3895,7 +3867,7 @@ function generateVarCombinations(vars) {
3895
3867
  let values = [];
3896
3868
  if (typeof vars[key] === "string" && vars[key].startsWith("file://")) {
3897
3869
  const filePath = vars[key].slice(7);
3898
- const basePath = cliState_default.basePath || "";
3870
+ const basePath = state.basePath || "";
3899
3871
  values = (globSync(filePath, {
3900
3872
  cwd: basePath || process.cwd(),
3901
3873
  windowsPathsNoEscape: true
@@ -3935,28 +3907,28 @@ var Evaluator = class {
3935
3907
  this.conversations = {};
3936
3908
  this.registers = {};
3937
3909
  this.fileWriters = (Array.isArray(evalRecord.config.outputPath) ? evalRecord.config.outputPath.filter((p) => p.endsWith(".jsonl")) : evalRecord.config.outputPath?.endsWith(".jsonl") ? [evalRecord.config.outputPath] : []).map((p) => new JsonlFileWriter(p));
3938
- this.rateLimitRegistry = createRateLimitRegistry({ maxConcurrency: options.maxConcurrency || DEFAULT_MAX_CONCURRENCY });
3910
+ this.rateLimitRegistry = createRateLimitRegistry({ maxConcurrency: options.maxConcurrency || 4 });
3939
3911
  this.rateLimitRegistry.on("ratelimit:hit", (data) => {
3940
- logger_default.debug(`[Scheduler] Rate limit hit for ${data.rateLimitKey}`, {
3912
+ logger.debug(`[Scheduler] Rate limit hit for ${data.rateLimitKey}`, {
3941
3913
  retryAfterMs: data.retryAfterMs,
3942
3914
  resetAt: data.resetAt,
3943
3915
  concurrencyChange: data.concurrencyChange
3944
3916
  });
3945
3917
  });
3946
3918
  this.rateLimitRegistry.on("ratelimit:learned", (data) => {
3947
- logger_default.debug(`[Scheduler] Learned rate limits for ${data.rateLimitKey}`, {
3919
+ logger.debug(`[Scheduler] Learned rate limits for ${data.rateLimitKey}`, {
3948
3920
  requestLimit: data.requestLimit,
3949
3921
  tokenLimit: data.tokenLimit
3950
3922
  });
3951
3923
  });
3952
3924
  this.rateLimitRegistry.on("concurrency:decreased", (data) => {
3953
- logger_default.debug(`[Scheduler] Concurrency decreased for ${data.rateLimitKey}`, {
3925
+ logger.debug(`[Scheduler] Concurrency decreased for ${data.rateLimitKey}`, {
3954
3926
  previous: data.previous,
3955
3927
  current: data.current
3956
3928
  });
3957
3929
  });
3958
3930
  this.rateLimitRegistry.on("concurrency:increased", (data) => {
3959
- logger_default.debug(`[Scheduler] Concurrency increased for ${data.rateLimitKey}`, {
3931
+ logger.debug(`[Scheduler] Concurrency increased for ${data.rateLimitKey}`, {
3960
3932
  previous: data.previous,
3961
3933
  current: data.current
3962
3934
  });
@@ -4013,7 +3985,7 @@ var Evaluator = class {
4013
3985
  const checkAbort = () => {
4014
3986
  if (combinedAbortSignal.aborted) throw new Error("Operation cancelled");
4015
3987
  };
4016
- if (!options.silent) logger_default.info(`Starting evaluation ${this.evalRecord.id}`);
3988
+ if (!options.silent) logger.info(`Starting evaluation ${this.evalRecord.id}`);
4017
3989
  checkAbort();
4018
3990
  const prompts = [];
4019
3991
  const assertionTypes = /* @__PURE__ */ new Set();
@@ -4025,32 +3997,32 @@ var Evaluator = class {
4025
3997
  }
4026
3998
  testSuite = (await runExtensionHook(testSuite.extensions, "beforeAll", { suite: testSuite })).suite;
4027
3999
  if (options.generateSuggestions) {
4028
- logger_default.info(`Generating prompt variations...`);
4000
+ logger.info(`Generating prompt variations...`);
4029
4001
  const { prompts: newPrompts, error } = await generatePrompts(testSuite.prompts[0].raw, 1);
4030
4002
  if (error || !newPrompts) throw new Error(`Failed to generate prompts: ${error}`);
4031
- logger_default.info(chalk.blue("Generated prompts:"));
4003
+ logger.info(chalk.blue("Generated prompts:"));
4032
4004
  let numAdded = 0;
4033
4005
  for (const prompt of newPrompts) {
4034
- logger_default.info("--------------------------------------------------------");
4035
- logger_default.info(`${prompt}`);
4036
- logger_default.info("--------------------------------------------------------");
4006
+ logger.info("--------------------------------------------------------");
4007
+ logger.info(`${prompt}`);
4008
+ logger.info("--------------------------------------------------------");
4037
4009
  if (await promptYesNo("Do you want to test this prompt?", false)) {
4038
4010
  testSuite.prompts.push({
4039
4011
  raw: prompt,
4040
4012
  label: prompt
4041
4013
  });
4042
4014
  numAdded++;
4043
- } else logger_default.info("Skipping this prompt.");
4015
+ } else logger.info("Skipping this prompt.");
4044
4016
  }
4045
4017
  if (numAdded < 1) {
4046
- logger_default.info(chalk.red("No prompts selected. Aborting."));
4018
+ logger.info(chalk.red("No prompts selected. Aborting."));
4047
4019
  process.exitCode = 1;
4048
4020
  return this.evalRecord;
4049
4021
  }
4050
4022
  }
4051
4023
  const existingPromptsMap = /* @__PURE__ */ new Map();
4052
- if (cliState_default.resume && this.evalRecord.persisted && this.evalRecord.prompts.length > 0) {
4053
- logger_default.debug("Resuming evaluation: preserving metrics from previous run");
4024
+ if (state.resume && this.evalRecord.persisted && this.evalRecord.prompts.length > 0) {
4025
+ logger.debug("Resuming evaluation: preserving metrics from previous run");
4054
4026
  for (const existingPrompt of this.evalRecord.prompts) {
4055
4027
  const key = `${existingPrompt.provider}:${existingPrompt.id}`;
4056
4028
  existingPromptsMap.set(key, existingPrompt);
@@ -4088,7 +4060,7 @@ var Evaluator = class {
4088
4060
  await this.evalRecord.addPrompts(prompts);
4089
4061
  let tests = testSuite.tests && testSuite.tests.length > 0 ? testSuite.tests : testSuite.scenarios ? [] : [{}];
4090
4062
  if (testSuite.scenarios && testSuite.scenarios.length > 0) {
4091
- telemetry_default.record("feature_used", { feature: "scenarios" });
4063
+ telemetry.record("feature_used", { feature: "scenarios" });
4092
4064
  let scenarioIndex = 0;
4093
4065
  for (const scenario of testSuite.scenarios) for (const data of scenario.config) {
4094
4066
  const scenarioTests = (scenario.tests || [{}]).map((test) => {
@@ -4152,7 +4124,7 @@ var Evaluator = class {
4152
4124
  }
4153
4125
  const runEvalOptions = [];
4154
4126
  let testIdx = 0;
4155
- let concurrency = options.maxConcurrency || DEFAULT_MAX_CONCURRENCY;
4127
+ let concurrency = options.maxConcurrency || 4;
4156
4128
  for (let index = 0; index < tests.length; index++) {
4157
4129
  const testCase = tests[index];
4158
4130
  invariant(typeof testSuite.defaultTest !== "object" || Array.isArray(testSuite.defaultTest?.assert || []), `defaultTest.assert is not an array in test case #${index + 1}`);
@@ -4172,7 +4144,7 @@ var Evaluator = class {
4172
4144
  const defaultProvider = testSuite.defaultTest.provider;
4173
4145
  if (isApiProvider(defaultProvider)) testCase.provider = defaultProvider;
4174
4146
  else if (typeof defaultProvider === "object" && defaultProvider.id) {
4175
- const { loadApiProvider } = await import("./providers-CsXB2Ix-.js");
4147
+ const { loadApiProvider } = await import("./providers-C1rOSHiR.js");
4176
4148
  testCase.provider = await loadApiProvider(typeof defaultProvider.id === "function" ? defaultProvider.id() : defaultProvider.id, { options: defaultProvider });
4177
4149
  } else testCase.provider = defaultProvider;
4178
4150
  }
@@ -4199,7 +4171,7 @@ var Evaluator = class {
4199
4171
  const promptId = generateIdFromPrompt(prompt);
4200
4172
  const promptIdx = promptIndexMap.get(`${providerKey}:${promptId}`);
4201
4173
  if (promptIdx === void 0) {
4202
- logger_default.warn(`Could not find prompt index for ${providerKey}:${promptId}, skipping`);
4174
+ logger.warn(`Could not find prompt index for ${providerKey}:${promptId}, skipping`);
4203
4175
  continue;
4204
4176
  }
4205
4177
  runEvalOptions.push({
@@ -4222,7 +4194,7 @@ var Evaluator = class {
4222
4194
  options: testOptions
4223
4195
  };
4224
4196
  const tracingEnabled = getEnvBool("PROMPTFOO_TRACING_ENABLED", false) || testCase.metadata?.tracingEnabled === true || testSuite.tracing?.enabled === true;
4225
- logger_default.debug(`[Evaluator] Tracing check: env=${getEnvBool("PROMPTFOO_TRACING_ENABLED", false)}, testCase.metadata?.tracingEnabled=${testCase.metadata?.tracingEnabled}, testSuite.tracing?.enabled=${testSuite.tracing?.enabled}, tracingEnabled=${tracingEnabled}`);
4197
+ logger.debug(`[Evaluator] Tracing check: env=${getEnvBool("PROMPTFOO_TRACING_ENABLED", false)}, testCase.metadata?.tracingEnabled=${testCase.metadata?.tracingEnabled}, testSuite.tracing?.enabled=${testSuite.tracing?.enabled}, tracingEnabled=${tracingEnabled}`);
4226
4198
  if (tracingEnabled) return {
4227
4199
  ...baseTest,
4228
4200
  metadata: {
@@ -4255,27 +4227,27 @@ var Evaluator = class {
4255
4227
  if (evalOption.test.assert?.some((a) => a.type === "select-best")) rowsWithSelectBestAssertion.add(evalOption.testIdx);
4256
4228
  if (evalOption.test.assert?.some((a) => a.type === "max-score")) rowsWithMaxScoreAssertion.add(evalOption.testIdx);
4257
4229
  }
4258
- if (cliState_default.resume && this.evalRecord.persisted) try {
4259
- const { default: EvalResult } = await import("./evalResult-trqZjVYh.js");
4260
- const completedPairs = await EvalResult.getCompletedIndexPairs(this.evalRecord.id, { excludeErrors: cliState_default.retryMode });
4230
+ if (state.resume && this.evalRecord.persisted) try {
4231
+ const { default: EvalResult } = await import("./evalResult-Cqj8pldJ.js");
4232
+ const completedPairs = await EvalResult.getCompletedIndexPairs(this.evalRecord.id, { excludeErrors: state.retryMode });
4261
4233
  const originalCount = runEvalOptions.length;
4262
4234
  for (let i = runEvalOptions.length - 1; i >= 0; i--) {
4263
4235
  const step = runEvalOptions[i];
4264
4236
  if (completedPairs.has(`${step.testIdx}:${step.promptIdx}`)) runEvalOptions.splice(i, 1);
4265
4237
  }
4266
4238
  const skipped = originalCount - runEvalOptions.length;
4267
- if (skipped > 0) logger_default.info(`Resuming: skipping ${skipped} previously completed cases`);
4239
+ if (skipped > 0) logger.info(`Resuming: skipping ${skipped} previously completed cases`);
4268
4240
  } catch (err) {
4269
- logger_default.warn(`Resume: failed to load completed results. Running full evaluation. ${String(err)}`);
4241
+ logger.warn(`Resume: failed to load completed results. Running full evaluation. ${String(err)}`);
4270
4242
  }
4271
4243
  if (concurrency > 1) {
4272
4244
  const usesConversation = prompts.some((p) => p.raw.includes("_conversation"));
4273
4245
  const usesStoreOutputAs = tests.some((t) => t.options?.storeOutputAs);
4274
4246
  if (usesConversation) {
4275
- logger_default.info(`Setting concurrency to 1 because the ${chalk.cyan("_conversation")} variable is used.`);
4247
+ logger.info(`Setting concurrency to 1 because the ${chalk.cyan("_conversation")} variable is used.`);
4276
4248
  concurrency = 1;
4277
4249
  } else if (usesStoreOutputAs) {
4278
- logger_default.info(`Setting concurrency to 1 because storeOutputAs is used.`);
4250
+ logger.info(`Setting concurrency to 1 because storeOutputAs is used.`);
4279
4251
  concurrency = 1;
4280
4252
  }
4281
4253
  }
@@ -4306,14 +4278,14 @@ var Evaluator = class {
4306
4278
  await this.evalRecord.addResult(row);
4307
4279
  } catch (error) {
4308
4280
  const resultSummary = summarizeEvaluateResultForLogging(row);
4309
- logger_default.error(`Error saving result: ${error} ${safeJsonStringify(resultSummary)}`);
4281
+ logger.error(`Error saving result: ${error} ${safeJsonStringify(resultSummary)}`);
4310
4282
  }
4311
4283
  for (const writer of this.fileWriters) await writer.write(row);
4312
4284
  const httpStatus = row.response?.metadata?.http?.status;
4313
4285
  if (typeof httpStatus === "number" && isNonTransientHttpStatus(httpStatus)) {
4314
4286
  targetUnavailable = true;
4315
4287
  targetErrorStatus = httpStatus;
4316
- logger_default.error(`Target returned HTTP ${httpStatus}. Aborting scan - this error will not resolve on retry.`);
4288
+ logger.error(`Target returned HTTP ${httpStatus}. Aborting scan - this error will not resolve on retry.`);
4317
4289
  targetErrorAbortController.abort();
4318
4290
  break;
4319
4291
  }
@@ -4333,7 +4305,7 @@ var Evaluator = class {
4333
4305
  if (testSuite.derivedMetrics) {
4334
4306
  const math = await import("mathjs");
4335
4307
  const promptEvalCount = metrics.testPassCount + metrics.testFailCount + metrics.testErrorCount + 1;
4336
- if (Object.prototype.hasOwnProperty.call(metrics.namedScores, "__count")) logger_default.warn("Metric name '__count' is reserved for derived metrics and will be overridden.");
4308
+ if (Object.prototype.hasOwnProperty.call(metrics.namedScores, "__count")) logger.warn("Metric name '__count' is reserved for derived metrics and will be overridden.");
4337
4309
  const evalContext = {
4338
4310
  ...metrics.namedScores,
4339
4311
  __count: promptEvalCount
@@ -4348,7 +4320,7 @@ var Evaluator = class {
4348
4320
  }
4349
4321
  evalContext[metric.name] = metrics.namedScores[metric.name];
4350
4322
  } catch (error) {
4351
- logger_default.debug(`Could not evaluate derived metric '${metric.name}': ${error.message}`);
4323
+ logger.debug(`Could not evaluate derived metric '${metric.name}': ${error.message}`);
4352
4324
  }
4353
4325
  }
4354
4326
  }
@@ -4387,7 +4359,7 @@ var Evaluator = class {
4387
4359
  if (typeof evalStep.provider.cleanup === "function") try {
4388
4360
  evalStep.provider.cleanup();
4389
4361
  } catch (cleanupErr) {
4390
- logger_default.warn(`Error during provider cleanup: ${cleanupErr}`);
4362
+ logger.warn(`Error during provider cleanup: ${cleanupErr}`);
4391
4363
  }
4392
4364
  reject(/* @__PURE__ */ new Error(`Evaluation timed out after ${timeoutMs}ms`));
4393
4365
  }, timeoutMs);
@@ -4451,8 +4423,8 @@ var Evaluator = class {
4451
4423
  }
4452
4424
  };
4453
4425
  const originalProgressCallback = this.options.progressCallback;
4454
- const isWebUI = Boolean(cliState_default.webUI);
4455
- logger_default.debug(`Progress bar settings: showProgressBar=${this.options.showProgressBar}, isWebUI=${isWebUI}`);
4426
+ const isWebUI = Boolean(state.webUI);
4427
+ logger.debug(`Progress bar settings: showProgressBar=${this.options.showProgressBar}, isWebUI=${isWebUI}`);
4456
4428
  if (isCI() && !isWebUI) {
4457
4429
  ciProgressReporter = new CIProgressReporter(runEvalOptions.length);
4458
4430
  ciProgressReporter.start();
@@ -4462,20 +4434,20 @@ var Evaluator = class {
4462
4434
  if (isWebUI) {
4463
4435
  const provider = evalStep.provider.label || evalStep.provider.id();
4464
4436
  const vars = formatVarsForDisplay(evalStep.test.vars, 50);
4465
- logger_default.info(`[${numComplete}/${total}] Running ${provider} with vars: ${vars}`);
4437
+ logger.info(`[${numComplete}/${total}] Running ${provider} with vars: ${vars}`);
4466
4438
  } else if (progressBarManager) {
4467
4439
  const phase = evalStep.test.options?.runSerially ? "serial" : "concurrent";
4468
4440
  progressBarManager.updateProgress(index, evalStep, phase, metrics);
4469
4441
  } else if (ciProgressReporter) ciProgressReporter.update(numComplete);
4470
- else logger_default.debug(`Eval #${index + 1} complete (${numComplete} of ${runEvalOptions.length})`);
4442
+ else logger.debug(`Eval #${index + 1} complete (${numComplete} of ${runEvalOptions.length})`);
4471
4443
  };
4472
4444
  const serialRunEvalOptions = [];
4473
4445
  const concurrentRunEvalOptions = [];
4474
4446
  for (const evalOption of runEvalOptions) if (evalOption.test.options?.runSerially) serialRunEvalOptions.push(evalOption);
4475
4447
  else concurrentRunEvalOptions.push(evalOption);
4476
4448
  if (!this.options.silent) {
4477
- if (serialRunEvalOptions.length > 0) logger_default.info(`Running ${serialRunEvalOptions.length} test cases serially...`);
4478
- if (concurrentRunEvalOptions.length > 0) logger_default.info(`Running ${concurrentRunEvalOptions.length} test cases (up to ${concurrency} at a time)...`);
4449
+ if (serialRunEvalOptions.length > 0) logger.info(`Running ${serialRunEvalOptions.length} test cases serially...`);
4450
+ if (concurrentRunEvalOptions.length > 0) logger.info(`Running ${concurrentRunEvalOptions.length} test cases (up to ${concurrency} at a time)...`);
4479
4451
  }
4480
4452
  if (this.options.showProgressBar && progressBarManager) await progressBarManager.initialize(runEvalOptions, concurrency, 0);
4481
4453
  try {
@@ -4484,7 +4456,7 @@ var Evaluator = class {
4484
4456
  if (isWebUI) {
4485
4457
  const provider = evalStep.provider.label || evalStep.provider.id();
4486
4458
  const vars = formatVarsForDisplay(evalStep.test.vars || {}, 50);
4487
- logger_default.info(`[${numComplete}/${runEvalOptions.length}] Running ${provider} with vars: ${vars}`);
4459
+ logger.info(`[${numComplete}/${runEvalOptions.length}] Running ${provider} with vars: ${vars}`);
4488
4460
  }
4489
4461
  const idx = runEvalOptions.indexOf(evalStep);
4490
4462
  await processEvalStepWithTimeout(evalStep, idx);
@@ -4499,9 +4471,9 @@ var Evaluator = class {
4499
4471
  });
4500
4472
  } catch (err) {
4501
4473
  if (combinedAbortSignal.aborted) {
4502
- if (evalTimedOut) logger_default.warn(`Evaluation stopped after reaching max duration (${maxEvalTimeMs}ms)`);
4474
+ if (evalTimedOut) logger.warn(`Evaluation stopped after reaching max duration (${maxEvalTimeMs}ms)`);
4503
4475
  else if (!targetUnavailable) {
4504
- logger_default.info("Evaluation interrupted, saving progress...");
4476
+ logger.info("Evaluation interrupted, saving progress...");
4505
4477
  if (globalTimeout) clearTimeout(globalTimeout);
4506
4478
  if (progressBarManager) progressBarManager.stop();
4507
4479
  if (ciProgressReporter) ciProgressReporter.finish();
@@ -4531,10 +4503,10 @@ var Evaluator = class {
4531
4503
  let compareCount = 0;
4532
4504
  for (const testIdx of rowsWithSelectBestAssertion) {
4533
4505
  compareCount++;
4534
- if (isWebUI) logger_default.info(`Running model-graded comparison ${compareCount} of ${compareRowsCount}...`);
4506
+ if (isWebUI) logger.info(`Running model-graded comparison ${compareCount} of ${compareRowsCount}...`);
4535
4507
  const resultsToCompare = this.evalRecord.persisted ? await this.evalRecord.fetchResultsByTestIdx(testIdx) : this.evalRecord.results.filter((r) => r.testIdx === testIdx);
4536
4508
  if (resultsToCompare.length === 0) {
4537
- logger_default.warn(`Expected results to be found for test index ${testIdx}`);
4509
+ logger.warn(`Expected results to be found for test index ${testIdx}`);
4538
4510
  continue;
4539
4511
  }
4540
4512
  const compareAssertion = resultsToCompare[0].testCase.assert?.find((a) => a.type === "select-best");
@@ -4596,16 +4568,16 @@ var Evaluator = class {
4596
4568
  }
4597
4569
  if (progressBarManager) progressBarManager.updateComparisonProgress(resultsToCompare[0].prompt.raw);
4598
4570
  else if (ciProgressReporter) ciProgressReporter.update(runEvalOptions.length + compareCount);
4599
- else if (!isWebUI) logger_default.debug(`Model-graded comparison #${compareCount} of ${compareRowsCount} complete`);
4571
+ else if (!isWebUI) logger.debug(`Model-graded comparison #${compareCount} of ${compareRowsCount} complete`);
4600
4572
  }
4601
4573
  }
4602
4574
  const maxScoreRowsCount = rowsWithMaxScoreAssertion.size;
4603
4575
  if (maxScoreRowsCount > 0) {
4604
- logger_default.info(`Processing ${maxScoreRowsCount} max-score assertions...`);
4576
+ logger.info(`Processing ${maxScoreRowsCount} max-score assertions...`);
4605
4577
  for (const testIdx of rowsWithMaxScoreAssertion) {
4606
4578
  const resultsToCompare = this.evalRecord.persisted ? await this.evalRecord.fetchResultsByTestIdx(testIdx) : this.evalRecord.results.filter((r) => r.testIdx === testIdx);
4607
4579
  if (resultsToCompare.length === 0) {
4608
- logger_default.warn(`Expected results to be found for test index ${testIdx}`);
4580
+ logger.warn(`Expected results to be found for test index ${testIdx}`);
4609
4581
  continue;
4610
4582
  }
4611
4583
  const maxScoreAssertion = resultsToCompare[0].testCase.assert?.find((a) => a.type === "max-score");
@@ -4613,7 +4585,7 @@ var Evaluator = class {
4613
4585
  const maxScoreGradingResults = await selectMaxScore(resultsToCompare.map((r) => r.response?.output || ""), resultsToCompare, maxScoreAssertion);
4614
4586
  if (progressBarManager) progressBarManager.updateComparisonProgress(resultsToCompare[0].prompt.raw);
4615
4587
  else if (ciProgressReporter) ciProgressReporter.update(runEvalOptions.length + compareCount);
4616
- else if (!isWebUI) logger_default.debug(`Max-score assertion for test #${testIdx} complete`);
4588
+ else if (!isWebUI) logger.debug(`Max-score assertion for test #${testIdx} complete`);
4617
4589
  for (let index = 0; index < resultsToCompare.length; index++) {
4618
4590
  const result = resultsToCompare[index];
4619
4591
  const maxScoreGradingResult = {
@@ -4657,7 +4629,7 @@ var Evaluator = class {
4657
4629
  progressBarManager.stop();
4658
4630
  } else if (ciProgressReporter) ciProgressReporter.finish();
4659
4631
  } catch (cleanupErr) {
4660
- logger_default.warn(`Error during progress reporter cleanup: ${cleanupErr}`);
4632
+ logger.warn(`Error during progress reporter cleanup: ${cleanupErr}`);
4661
4633
  }
4662
4634
  if (globalTimeout) clearTimeout(globalTimeout);
4663
4635
  if (evalTimedOut) {
@@ -4730,7 +4702,7 @@ var Evaluator = class {
4730
4702
  return idParts.length > 1 ? idParts[0] : "unknown";
4731
4703
  })));
4732
4704
  const timeoutOccurred = evalTimedOut || this.evalRecord.results.some((r) => r.failureReason === ResultFailureReason.ERROR && r.error?.includes("timed out"));
4733
- telemetry_default.record("eval_ran", {
4705
+ telemetry.record("eval_ran", {
4734
4706
  numPrompts: prompts.length,
4735
4707
  numTests: this.stats.successes + this.stats.failures + this.stats.errors,
4736
4708
  numRequests: this.stats.tokenUsage.numRequests || 0,
@@ -4778,26 +4750,26 @@ var Evaluator = class {
4778
4750
  await startOtlpReceiverIfNeeded(this.testSuite);
4779
4751
  const tracingEnabled = getEnvBool("PROMPTFOO_TRACING_ENABLED", false) || this.testSuite.tracing?.enabled === true || typeof this.testSuite.defaultTest === "object" && this.testSuite.defaultTest?.metadata?.tracingEnabled === true || this.testSuite.tests?.some((t) => t.metadata?.tracingEnabled === true);
4780
4752
  if (tracingEnabled) {
4781
- logger_default.debug("[Evaluator] Initializing OTEL SDK for tracing");
4753
+ logger.debug("[Evaluator] Initializing OTEL SDK for tracing");
4782
4754
  initializeOtel(getDefaultOtelConfig());
4783
4755
  }
4784
4756
  try {
4785
4757
  return await this._runEvaluation();
4786
4758
  } finally {
4787
4759
  if (tracingEnabled) {
4788
- logger_default.debug("[Evaluator] Flushing OTEL spans...");
4760
+ logger.debug("[Evaluator] Flushing OTEL spans...");
4789
4761
  await flushOtel();
4790
4762
  await shutdownOtel();
4791
4763
  }
4792
4764
  if (isOtlpReceiverStarted()) {
4793
- logger_default.debug("[Evaluator] Waiting for span exports to complete...");
4765
+ logger.debug("[Evaluator] Waiting for span exports to complete...");
4794
4766
  await sleep(3e3);
4795
4767
  }
4796
4768
  await stopOtlpReceiverIfNeeded();
4797
4769
  await providerRegistry.shutdownAll();
4798
4770
  if (this.rateLimitRegistry) {
4799
4771
  const metrics = this.rateLimitRegistry.getMetrics();
4800
- for (const [key, m] of Object.entries(metrics)) if (m.totalRequests > 0) logger_default.debug(`[Scheduler] Final metrics for ${key}`, {
4772
+ for (const [key, m] of Object.entries(metrics)) if (m.totalRequests > 0) logger.debug(`[Scheduler] Final metrics for ${key}`, {
4801
4773
  totalRequests: m.totalRequests,
4802
4774
  completedRequests: m.completedRequests,
4803
4775
  failedRequests: m.failedRequests,
@@ -4810,14 +4782,14 @@ var Evaluator = class {
4810
4782
  }
4811
4783
  this.rateLimitRegistry?.dispose();
4812
4784
  redteamProviderManager.setRateLimitRegistry(void 0);
4813
- cliState_default.maxConcurrency = void 0;
4785
+ state.maxConcurrency = void 0;
4814
4786
  }
4815
4787
  }
4816
4788
  };
4817
4789
  function evaluate(testSuite, evalRecord, options) {
4818
4790
  return new Evaluator(testSuite, evalRecord, options).evaluate();
4819
4791
  }
4820
-
4821
4792
  //#endregion
4822
4793
  export { runEval as a, readAssertions as c, isAllowedPrompt as i, renderMetricName as l, formatVarsForDisplay as n, doesPromptRefMatch as o, generateVarCombinations as r, assertions_default as s, evaluate as t, runAssertions as u };
4823
- //# sourceMappingURL=evaluator-8aGyV12L.js.map
4794
+
4795
+ //# sourceMappingURL=evaluator-DPFRbFIL.js.map