promptfoo 0.120.26 → 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 (366) hide show
  1. package/README.md +1 -1
  2. package/dist/drizzle/0023_wooden_mandrill.sql +2 -0
  3. package/dist/drizzle/meta/0023_snapshot.json +1496 -0
  4. package/dist/drizzle/meta/_journal.json +7 -0
  5. package/dist/src/{ListApp-D3DG0F8h.js → ListApp-Du7YVwj5.js} +2 -4
  6. package/dist/src/accounts-BgNJDBE6.js +206 -0
  7. package/dist/src/{accounts-BzEY8H3v.cjs → accounts-Bx-x3bmW.cjs} +99 -80
  8. package/dist/src/{accounts-DHHiXsy6.js → accounts-CMqkzrVf.js} +61 -36
  9. package/dist/src/{accounts-R3gfCR_g.js → accounts-xrUGFA6n.js} +60 -35
  10. package/dist/src/{agentic-utils-D6_gzOUF.js → agentic-utils-BKIN5PKu.js} +9 -10
  11. package/dist/src/{agents-CwM7re15.cjs → agents-B0f4HICh.cjs} +37 -40
  12. package/dist/src/{agents-Cnph5GLD.js → agents-C-dDThPK.js} +37 -37
  13. package/dist/src/{agents-C7BiinFI.cjs → agents-CErsqg5U.cjs} +19 -27
  14. package/dist/src/{agents-v4cW_ZgC.js → agents-CVIn-Utx.js} +19 -22
  15. package/dist/src/{agents-GiUianme.js → agents-CXknwsFX.js} +37 -40
  16. package/dist/src/{agents-DETIQHqF.js → agents-DeH4Gu94.js} +21 -28
  17. package/dist/src/{agents-DYIT-hQy.js → agents-Dy2YpZpa.js} +38 -41
  18. package/dist/src/{agents-Cao4i7AX.js → agents-aF4-T121.js} +19 -30
  19. package/dist/src/{aimlapi-DMF6v_vb.js → aimlapi-BAGZDo5G.js} +16 -18
  20. package/dist/src/{aimlapi-CMJpKK-B.js → aimlapi-BNfTBexL.js} +15 -17
  21. package/dist/src/{aimlapi-DtSf1ykJ.js → aimlapi-DHRKlBEA.js} +15 -4
  22. package/dist/src/{aimlapi-DoGLcQW_.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
  23. package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
  24. package/dist/src/app/assets/index-NCn4eVBv.css +1 -0
  25. package/dist/src/app/assets/{vendor-charts-CYyo8R8v.js → vendor-charts-CCl15Imd.js} +1 -1
  26. package/dist/src/app/assets/{vendor-markdown-DSmzq4Jh.js → vendor-markdown-0tekx3KX.js} +1 -1
  27. package/dist/src/app/index.html +4 -34
  28. package/dist/src/{audio-DUH4q0Xq.js → audio-BRODU0UK.js} +7 -9
  29. package/dist/src/{audio-BWjyvHn9.cjs → audio-BWeaWovU.cjs} +6 -7
  30. package/dist/src/{audio-U580w8jM.js → audio-CHQ4r-RV.js} +6 -5
  31. package/dist/src/{audio-BrJBFN2b.js → audio-tf_NBjlC.js} +6 -8
  32. package/dist/src/base-B0tcrnq_.js +193 -0
  33. package/dist/src/base-B4QJRyFS.js +194 -0
  34. package/dist/src/base-DBtwl2FR.cjs +222 -0
  35. package/dist/src/base-fEDN28WM.js +193 -0
  36. package/dist/src/{blobs-kt8v3UyH.js → blobs-BAU-dXan.js} +9 -12
  37. package/dist/src/{blobs-C9J2mVgo.js → blobs-Bpg5rH6i.js} +9 -12
  38. package/dist/src/{blobs-673H0jCl.cjs → blobs-DvS-O6be.cjs} +34 -37
  39. package/dist/src/blobs-qTYm-1PY.js +236 -0
  40. package/dist/src/{cache-BLLayYEN.js → cache-8XhNqPKW.js} +64 -67
  41. package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
  42. package/dist/src/cache-BwsMSda7.js +6 -0
  43. package/dist/src/{cache-mIszOnuz.js → cache-CG0SlR1d.js} +64 -66
  44. package/dist/src/{cache-7xULbvt3.cjs → cache-COish3-W.cjs} +114 -117
  45. package/dist/src/cache-D3eqDYGU.js +739 -0
  46. package/dist/src/{chat-Fl6TZJRS.cjs → chat-2K608PeQ.cjs} +20 -21
  47. package/dist/src/chat-BKm79wib.js +764 -0
  48. package/dist/src/{chat-XPN9YHhr.js → chat-CM_kyI8B.js} +20 -9
  49. package/dist/src/{chat-DIywASPG.js → chat-CRWNNq73.js} +49 -49
  50. package/dist/src/{chat-C8Ei4f87.js → chat-CznLWr_D.js} +49 -49
  51. package/dist/src/{chat-CgyGj2hC.js → chat-DHMH-N64.js} +20 -22
  52. package/dist/src/{chat-C4zqjObh.cjs → chat-DaqekjFr.cjs} +69 -69
  53. package/dist/src/{chat-Cpz3O-Xl.js → chat-DxysjBvt.js} +21 -23
  54. package/dist/src/{chatkit-Dpxrq4eD.js → chatkit-65VXf5SR.js} +58 -58
  55. package/dist/src/{chatkit-DIrJX8xk.js → chatkit-Be-Q-a9F.js} +58 -60
  56. package/dist/src/{chatkit-DEls11hE.js → chatkit-BxFvW8KY.js} +58 -60
  57. package/dist/src/{chatkit-e25Ziu17.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
  58. package/dist/src/chunk-DEq-mXcV.js +15 -0
  59. package/dist/src/chunk-DRamLcfz.js +16 -0
  60. package/dist/src/{claude-agent-sdk-6-xTaLwM.js → claude-agent-sdk-BLTu0WBO.js} +45 -31
  61. package/dist/src/{claude-agent-sdk-BzxF6NIJ.cjs → claude-agent-sdk-CJH22shf.cjs} +44 -29
  62. package/dist/src/{claude-agent-sdk-CmkTnKGH.js → claude-agent-sdk-D6_k9FKA.js} +45 -33
  63. package/dist/src/{claude-agent-sdk-rXCBLK_o.js → claude-agent-sdk-Dy5lT-Tx.js} +46 -21
  64. package/dist/src/{cloud-BMbRVJFw.js → cloud-Bc9526yV.js} +32 -12
  65. package/dist/src/cloud-DmE0EwsY.js +4 -0
  66. package/dist/src/{cloudflare-ai-CUg4BTcj.js → cloudflare-ai-C9r2sRhw.js} +16 -18
  67. package/dist/src/{cloudflare-ai-Z9X219gp.js → cloudflare-ai-CWWJCRim.js} +16 -4
  68. package/dist/src/{cloudflare-ai-BAQ0u_dg.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
  69. package/dist/src/{cloudflare-ai-CobxMTR4.js → cloudflare-ai-ICsOuD-z.js} +17 -19
  70. package/dist/src/{cloudflare-gateway-C0sgfr_z.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
  71. package/dist/src/{cloudflare-gateway-_itGuXry.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
  72. package/dist/src/{cloudflare-gateway-D2_yi-Fh.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
  73. package/dist/src/{cloudflare-gateway-Djf3F3_H.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
  74. package/dist/src/{codex-sdk-ibXwdglL.js → codex-sdk-C6UMlxwV.js} +49 -32
  75. package/dist/src/{codex-sdk-BASDNkIl.js → codex-sdk-DUwKWezN.js} +49 -30
  76. package/dist/src/{codex-sdk-dSnGdgIp.js → codex-sdk-GGAw0qbD.js} +49 -32
  77. package/dist/src/{codex-sdk-wTEpMM_X.cjs → codex-sdk-fAO0c3yA.cjs} +49 -32
  78. package/dist/src/{cometapi-B01btbfb.js → cometapi-BasUi7-_.js} +17 -19
  79. package/dist/src/{cometapi-DHUAH6nK.js → cometapi-Bbjp5V4x.js} +16 -4
  80. package/dist/src/{cometapi-ChAaRjg5.js → cometapi-DkXrKi5z.js} +21 -24
  81. package/dist/src/{cometapi-JbvOJSCO.cjs → cometapi-vY6aDZgo.cjs} +21 -22
  82. package/dist/src/{completion-D9_MDlnd.js → completion-6Mx_iXxK.js} +11 -13
  83. package/dist/src/{completion-BBJ6zmG3.js → completion-C5rtR_9P.js} +11 -13
  84. package/dist/src/{completion-DDyL3Cb2.cjs → completion-CDOouNzq.cjs} +21 -23
  85. package/dist/src/completion-C_P3ypkJ.js +120 -0
  86. package/dist/src/createHash-CTQmL3G2.js +15 -0
  87. package/dist/src/createHash-CfZSc0b4.cjs +27 -0
  88. package/dist/src/createHash-Da8fMwqB.js +16 -0
  89. package/dist/src/createHash-DmPQkvBh.js +15 -0
  90. package/dist/src/{docker-JAAubMw3.js → docker-5KcG-_86.js} +18 -20
  91. package/dist/src/{docker-Ckw-j7Rr.cjs → docker-BwsKwxFs.cjs} +18 -19
  92. package/dist/src/{docker-vnOg96gi.js → docker-CZnqU1XV.js} +18 -7
  93. package/dist/src/{docker-BuButc4D.js → docker-DzxyDPIj.js} +19 -21
  94. package/dist/src/entrypoint.js +2 -3
  95. package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
  96. package/dist/src/{esm-CYhseqj4.js → esm-C03C-mv3.js} +17 -20
  97. package/dist/src/{esm-rDtG_2rg.js → esm-CaIwzWR5.js} +18 -21
  98. package/dist/src/esm-Cd1AjG1D.js +379 -0
  99. package/dist/src/{esm-BQkx5roy.cjs → esm-CnNt7sI4.cjs} +47 -49
  100. package/dist/src/eval-17JizQIv.js +15 -0
  101. package/dist/src/{eval-CYrbG57o.js → eval-DmFyWU7i.js} +49 -55
  102. package/dist/src/{evalResult-COsVttMA.js → evalResult-CDQiuUuf.js} +16 -12
  103. package/dist/src/{evalResult-6JaUIStC.js → evalResult-CTG2AHOS.js} +10 -11
  104. package/dist/src/evalResult-Cqj8pldJ.js +12 -0
  105. package/dist/src/{evalResult-DlRfu_Rq.cjs → evalResult-Dap2CekP.cjs} +20 -21
  106. package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
  107. package/dist/src/evalResult-Hftn-S_i.js +10 -0
  108. package/dist/src/evaluator-B2CFNt-P.js +36 -0
  109. package/dist/src/{evaluator-3EJCMTs0.js → evaluator-DPFRbFIL.js} +210 -232
  110. package/dist/src/{extractor-LSYjrhK0.js → extractor-CFG6bcWJ.js} +23 -38
  111. package/dist/src/{extractor-DbhlYEeo.cjs → extractor-DX36oYEv.cjs} +37 -64
  112. package/dist/src/{extractor-Hs7la_19.js → extractor-M67RUtg6.js} +23 -38
  113. package/dist/src/extractor-YMU_Gvt8.js +374 -0
  114. package/dist/src/fetch-4M3YRaqL.js +780 -0
  115. package/dist/src/{fetch-18MuNu9i.js → fetch-60Gzydls.js} +60 -46
  116. package/dist/src/{fetch-SRsE6Ctl.js → fetch-BMv0O527.js} +41 -35
  117. package/dist/src/{fetch-ZMn_oemb.cjs → fetch-BxUk8odA.cjs} +268 -279
  118. package/dist/src/fetch-KV5kNASw.js +5 -0
  119. package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
  120. package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
  121. package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
  122. package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
  123. package/dist/src/{formatDuration-Doo0xq-z.js → formatDuration-DgBVMN65.js} +2 -2
  124. package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
  125. package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
  126. package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
  127. package/dist/src/{genaiTracer-CQlpZkrp.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
  128. package/dist/src/graders-Bu0H9nXi.js +32 -0
  129. package/dist/src/{graders-BaMCwIKp.js → graders-CHO8EPM4.js} +385 -417
  130. package/dist/src/graders-Cfhkvx-e.js +34 -0
  131. package/dist/src/{graders-QsALpIdy.js → graders-CpdqD9PI.js} +385 -417
  132. package/dist/src/graders-DClJVpGP.cjs +32 -0
  133. package/dist/src/{graders-DzUUnUjC.cjs → graders-DOXycdlG.cjs} +721 -753
  134. package/dist/src/graders-DcnJsrMO.js +32 -0
  135. package/dist/src/graders-R9rYUM0d.js +13466 -0
  136. package/dist/src/{image-BiEVdpdP.js → image-BmEZqVmk.js} +57 -18
  137. package/dist/src/{image-mhAGP07h.js → image-CBBVXWuT.js} +57 -18
  138. package/dist/src/{image-D10zEe1f.cjs → image-CDLQOcqT.cjs} +6 -7
  139. package/dist/src/{image-COCWy5dX.js → image-DJEvKveK.js} +6 -5
  140. package/dist/src/{image-C3BjJUAU.cjs → image-DTedmQPg.cjs} +77 -32
  141. package/dist/src/{image-DB4sHxdJ.js → image-gvmivTEe.js} +7 -9
  142. package/dist/src/image-pAX56tPG.js +257 -0
  143. package/dist/src/{image-BXt_7u0v.js → image-tL5hIOFh.js} +6 -8
  144. package/dist/src/index.cjs +696 -693
  145. package/dist/src/index.d.cts +113 -10
  146. package/dist/src/index.d.ts +113 -6
  147. package/dist/src/index.js +657 -658
  148. package/dist/src/{interactiveCheck-DU-MAhp5.js → interactiveCheck-BgLZUIt3.js} +7 -8
  149. package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
  150. package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
  151. package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
  152. package/dist/src/invariant-vgHWClmd.js +25 -0
  153. package/dist/src/{knowledgeBase-DotRBzUE.js → knowledgeBase-CLJybhnF.js} +19 -34
  154. package/dist/src/{knowledgeBase-XJQ0Qyez.js → knowledgeBase-CoU-UQBg.js} +17 -41
  155. package/dist/src/{knowledgeBase-CMvMlLZR.js → knowledgeBase-DjWPVqSb.js} +17 -43
  156. package/dist/src/{knowledgeBase-Bnb00xKs.cjs → knowledgeBase-wkxuRFhA.cjs} +17 -40
  157. package/dist/src/{litellm-CHrRmPAe.js → litellm-B9Hysuri.js} +16 -18
  158. package/dist/src/{litellm-CrLJrPIm.js → litellm-CTfa0hqi.js} +15 -17
  159. package/dist/src/{litellm-BrnZhMcL.cjs → litellm-NYpQ8RQu.cjs} +15 -16
  160. package/dist/src/{litellm-BECdjOTx.js → litellm-ePxtr9F1.js} +15 -4
  161. package/dist/src/{logger-w8Ozp0Td.js → logger-CT3IKMKA.js} +24 -41
  162. package/dist/src/{logger-BdZ-IqBc.cjs → logger-Cp1GPUjj.cjs} +166 -192
  163. package/dist/src/logger-DLcq4dWf.js +713 -0
  164. package/dist/src/{logger-BotXmWKW.js → logger-KkObSCzq.js} +27 -43
  165. package/dist/src/{luma-ray-C0RkI3lt.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
  166. package/dist/src/{luma-ray-C-w6EsJm.js → luma-ray-BE2mOt6N.js} +20 -13
  167. package/dist/src/{luma-ray-BOeX-h0M.js → luma-ray-BW9IRGIc.js} +22 -21
  168. package/dist/src/{luma-ray-DgKLS0BF.js → luma-ray-Cm1KZBhs.js} +20 -23
  169. package/dist/src/main.js +1985 -2055
  170. package/dist/src/{messages-DXV3Qh8_.cjs → messages-1JrJs91T.cjs} +35 -34
  171. package/dist/src/{messages-D61tPFQo.js → messages-1x9atZmP.js} +25 -24
  172. package/dist/src/{messages-CDZYGNlS.js → messages-BLbWdsyt.js} +25 -24
  173. package/dist/src/messages-D8EA0oDc.js +240 -0
  174. package/dist/src/{meteor-P2rUE-Uz.js → meteor-44VjEACX.js} +3 -4
  175. package/dist/src/{meteor-SLNTgmXm.js → meteor-D-SotUw9.js} +3 -4
  176. package/dist/src/{meteor-odmwVbyG.cjs → meteor-DLZZ3osF.cjs} +3 -4
  177. package/dist/src/{meteor-Dj8cTkU_.js → meteor-DUiCJRC-.js} +3 -4
  178. package/dist/src/modelslab-C1OLRmVX.js +166 -0
  179. package/dist/src/modelslab-CqXBy3U8.js +168 -0
  180. package/dist/src/modelslab-DcOSFwKh.cjs +166 -0
  181. package/dist/src/modelslab-X5-4LroM.js +166 -0
  182. package/dist/src/{nova-reel-C2LFfVTf.js → nova-reel-BgS1ZWuK.js} +20 -13
  183. package/dist/src/{nova-reel-DtCjbD5O.js → nova-reel-D2ZkOSyr.js} +22 -21
  184. package/dist/src/{nova-reel-D9FXq3Mt.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
  185. package/dist/src/{nova-reel-Bk5npr2q.js → nova-reel-DihqLeol.js} +20 -23
  186. package/dist/src/{nova-sonic-BoRSY_U6.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
  187. package/dist/src/{nova-sonic-D_qERM-K.js → nova-sonic-DezhVUYT.js} +30 -26
  188. package/dist/src/{nova-sonic-CgaWLDM1.js → nova-sonic-P-CdUMlV.js} +30 -31
  189. package/dist/src/{nova-sonic-BXRfQyF-.js → nova-sonic-Q3BOJeig.js} +31 -32
  190. package/dist/src/{openai-Bigwjgo1.cjs → openai-Cuif0GEt.cjs} +8 -9
  191. package/dist/src/{openai-Dz3surb_.js → openai-DElQ-fPX.js} +3 -4
  192. package/dist/src/{openai-CT5fwbve.js → openai-DhbB7eWK.js} +3 -4
  193. package/dist/src/openai-j-sE2O7r.js +44 -0
  194. package/dist/src/{openclaw-dHLcXUWZ.js → openclaw-BiSZPL7J.js} +20 -14
  195. package/dist/src/{openclaw-CpPrXwf6.js → openclaw-Bv1DINsX.js} +20 -27
  196. package/dist/src/{openclaw-B6XY2kUf.js → openclaw-D1D_ej1z.js} +21 -28
  197. package/dist/src/{openclaw-DDSfq5fp.cjs → openclaw-DAfWQn-o.cjs} +33 -39
  198. package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
  199. package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
  200. package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
  201. package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
  202. package/dist/src/{otlpReceiver-DmRb0NBj.js → otlpReceiver--AIRW_S4.js} +53 -51
  203. package/dist/src/{otlpReceiver-Dg817agV.js → otlpReceiver-Bn5wGB1v.js} +53 -55
  204. package/dist/src/{otlpReceiver-B6Xo4KZM.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
  205. package/dist/src/{otlpReceiver-BO0rbDzh.js → otlpReceiver-g3ByGaXs.js} +53 -55
  206. package/dist/src/{providerRegistry-Xf0qdqGQ.js → providerRegistry-B0RUOLI_.js} +7 -8
  207. package/dist/src/{providerRegistry-wCWd7sKQ.js → providerRegistry-CD8MEar9.js} +7 -8
  208. package/dist/src/{providerRegistry-lc7a7utN.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
  209. package/dist/src/providerRegistry-DM8rZYol.js +45 -0
  210. package/dist/src/providers-B3HvufyI.js +33246 -0
  211. package/dist/src/{providers-BiNq_Iyc.js → providers-BKRJTjBz.js} +1743 -1795
  212. package/dist/src/providers-C1rOSHiR.js +32 -0
  213. package/dist/src/{providers-BlEhY5mi.js → providers-CFLy1_ji.js} +1750 -1802
  214. package/dist/src/{providers-BNKVY53V.cjs → providers-CFu-TZl-.cjs} +2111 -2163
  215. package/dist/src/providers-CxmDwEFf.cjs +31 -0
  216. package/dist/src/providers-Dodakqr0.js +30 -0
  217. package/dist/src/providers-GIQ2TcsA.js +30 -0
  218. package/dist/src/{pythonUtils-r1uBuA0n.js → pythonUtils-C3py6GC1.js} +18 -19
  219. package/dist/src/{pythonUtils-DZ6EbdY4.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
  220. package/dist/src/{pythonUtils-vMlk9Qp5.js → pythonUtils-D5nxkQ0P.js} +18 -19
  221. package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
  222. package/dist/src/quiverai-C2jVwbH1.js +213 -0
  223. package/dist/src/quiverai-CI6gYJVI.js +213 -0
  224. package/dist/src/quiverai-CLkWkyZc.cjs +213 -0
  225. package/dist/src/quiverai-MHSxbmmZ.js +215 -0
  226. package/dist/src/{render-CAZvKKkB.js → render-Drod8m7K.js} +4 -5
  227. package/dist/src/{responses-DLLjADw5.js → responses-BKqJmhhc.js} +34 -27
  228. package/dist/src/{responses-TsdODUpm.js → responses-CGw0DCzh.js} +34 -27
  229. package/dist/src/responses-jxdehPkC.js +660 -0
  230. package/dist/src/{responses-zOtKtnY_.cjs → responses-tD4Bd4dc.cjs} +49 -42
  231. package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
  232. package/dist/src/{rubyUtils-Cs35SDYa.js → rubyUtils-BUVePouc.js} +27 -20
  233. package/dist/src/rubyUtils-BcuGX77l.js +222 -0
  234. package/dist/src/{rubyUtils-BtjlqyXt.js → rubyUtils-Boc4HZzX.js} +18 -19
  235. package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
  236. package/dist/src/{rubyUtils-DCVaJ3mc.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
  237. package/dist/src/{sagemaker-Du4LIR97.js → sagemaker-BK4Zb993.js} +75 -70
  238. package/dist/src/{sagemaker-CLdUAv5z.js → sagemaker-BfiWTmvn.js} +77 -77
  239. package/dist/src/{sagemaker-DwNnEVYt.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
  240. package/dist/src/{sagemaker-BcgLu0U4.js → sagemaker-D2Q1c-sD.js} +75 -79
  241. package/dist/src/{scanner-Dyw21Wg_.js → scanner-J8CA3LsV.js} +149 -122
  242. package/dist/src/server/index.js +5620 -67302
  243. package/dist/src/{server-CgUQ25qW.cjs → server-B0PPuDw-.cjs} +57 -67
  244. package/dist/src/server-B1vi21hA.js +7 -0
  245. package/dist/src/{server-CbMTRQkg.js → server-BC7XJFgr.js} +19 -24
  246. package/dist/src/server-Cm9Kai_h.cjs +5 -0
  247. package/dist/src/{server-DWmZLfCy.js → server-DbFphssR.js} +26 -29
  248. package/dist/src/server-OAs3nBRT.js +229 -0
  249. package/dist/src/{signal-Bl32q42d.js → signal-BOTbd53Z.js} +9 -11
  250. package/dist/src/{slack-BtMkB6xP.cjs → slack-BmVAVGaK.cjs} +7 -8
  251. package/dist/src/{slack-OZYxoVON.js → slack-DCUPTzS2.js} +8 -8
  252. package/dist/src/{slack-DPqj42Ts.js → slack-DOdy_kyv.js} +7 -8
  253. package/dist/src/{slack-BfdBx2tO.js → slack-DXMKtA-f.js} +7 -9
  254. package/dist/src/store-BNmZ1KAz.cjs +5 -0
  255. package/dist/src/{store-BqwfFEyF.cjs → store-BSc-TF2w.cjs} +44 -45
  256. package/dist/src/store-BltJg2cd.js +6 -0
  257. package/dist/src/{store-D4gdn9ih.js → store-D1tv90v3.js} +34 -35
  258. package/dist/src/{store-2ocbYY9D.js → store-DQLEjuEO.js} +40 -36
  259. package/dist/src/store-Ub2vaGJ1.js +228 -0
  260. package/dist/src/{tables-D-NSwNIb.js → tables-5EvT_Bwn.js} +23 -23
  261. package/dist/src/{tables-B9E1kRp-.cjs → tables-C7K-XKWp.cjs} +93 -93
  262. package/dist/src/{tables-C7TT2XVn.js → tables-D36WTqKX.js} +25 -25
  263. package/dist/src/tables-xKANLRBD.js +288 -0
  264. package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
  265. package/dist/src/{telemetry-DZ_7PaVq.js → telemetry-C15ziL8u.js} +17 -14
  266. package/dist/src/{telemetry-BXyVqyAg.js → telemetry-C2YDkUQH.js} +11 -13
  267. package/dist/src/{telemetry-D0_yFdtU.cjs → telemetry-CbrnxHp_.cjs} +21 -24
  268. package/dist/src/telemetry-D4W5hboe.js +7 -0
  269. package/dist/src/telemetry-DMb2Mpfm.js +171 -0
  270. package/dist/src/{text-Dm78AVGG.js → text-B_UCRPp2.js} +2 -2
  271. package/dist/src/{text-DF2hMKdg.cjs → text-CW1cyrwj.cjs} +12 -13
  272. package/dist/src/{text-DgMr_tiM.js → text-Db-Wt2u2.js} +2 -2
  273. package/dist/src/text-TIv0QYnd.js +22 -0
  274. package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
  275. package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
  276. package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
  277. package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
  278. package/dist/src/{transcription-FNIz3YOe.cjs → transcription-CL78qbOU.cjs} +14 -15
  279. package/dist/src/{transcription-C-M81iDA.js → transcription-DAtxHhAM.js} +14 -7
  280. package/dist/src/{transcription-CYuY5sFO.js → transcription-LNZTNUUL.js} +14 -16
  281. package/dist/src/{transcription-Ch7S-LWw.js → transcription-QHh3AH6Z.js} +15 -17
  282. package/dist/src/{transform-CoP2bJ7P.js → transform-Cgi24fJ7.js} +94 -66
  283. package/dist/src/{transform-Kd6u-oNm.cjs → transform-CzK1Q0zl.cjs} +24 -26
  284. package/dist/src/{transform-D8dILpfZ.js → transform-DECvGmzp.js} +15 -13
  285. package/dist/src/{transform-DMaxQwDx.js → transform-DGLazrMm.js} +94 -66
  286. package/dist/src/transform-DGxXocjk.js +1506 -0
  287. package/dist/src/{transform-ivxEY4f7.cjs → transform-DOcQeLld.cjs} +234 -206
  288. package/dist/src/transform-DTGDnAzW.js +6 -0
  289. package/dist/src/{transform-CqTFr7KR.js → transform-DilY9wbS.js} +10 -12
  290. package/dist/src/transform-aa6tmVpZ.js +216 -0
  291. package/dist/src/transform-m3qNw4KP.cjs +5 -0
  292. package/dist/src/{transformersAvailability-DEU2naS1.js → transformersAvailability-CEVM2GNQ.js} +2 -2
  293. package/dist/src/{transformersAvailability-Bkep3ka7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
  294. package/dist/src/{transformersAvailability-DwmezkVe.js → transformersAvailability-D6c6ROpT.js} +2 -2
  295. package/dist/src/{types-t52w-XsS.js → types-CH3Ge2sE.js} +103 -92
  296. package/dist/src/{types-DMVjYLpx.js → types-CLKiCBW3.js} +98 -91
  297. package/dist/src/types-CN_TZ2GJ.js +3260 -0
  298. package/dist/src/{types-BIfttHrT.cjs → types-LJ0r3wbR.cjs} +573 -566
  299. package/dist/src/util-5cB-L7U3.js +1430 -0
  300. package/dist/src/util-6-GqIvzS.js +599 -0
  301. package/dist/src/{util-vjscpUzy.js → util-B7T3SiBS.js} +5 -6
  302. package/dist/src/{util-Cl0zfT3V.js → util-Betm42rL.js} +44 -17
  303. package/dist/src/{util-CUEt0Vum.js → util-C-PPYSMq.js} +44 -17
  304. package/dist/src/{util-DkFTvieG.cjs → util-CchiqXh_.cjs} +35 -36
  305. package/dist/src/{util-mJ58qbbw.js → util-DaWTWKBK.js} +5 -6
  306. package/dist/src/{util-C08Kns6-.cjs → util-Db0a0AFH.cjs} +89 -62
  307. package/dist/src/{util-DiCePfDu.js → util-Dlz_Wvgm.js} +102 -53
  308. package/dist/src/{util-BSh4a_Q8.js → util-YT5HPZaS.js} +102 -53
  309. package/dist/src/{util-DUYOvxAy.cjs → util-Yz-1aEhW.cjs} +274 -219
  310. package/dist/src/util-ZZH-3QZz.js +293 -0
  311. package/dist/src/{utils-DFaZa6Rf.cjs → utils-Cz9qXqII.cjs} +32 -35
  312. package/dist/src/{utils-CVzb4YiI.js → utils-XiOAgly5.js} +4 -7
  313. package/dist/src/utils-dLokC-eR.js +94 -0
  314. package/dist/src/{utils-JaY9veb5.js → utils-f2-Moju7.js} +4 -7
  315. package/dist/tsconfig.tsbuildinfo +1 -1
  316. package/package.json +59 -53
  317. package/dist/src/app/assets/index-BOgkICuY.css +0 -1
  318. package/dist/src/app/assets/index-CSgqn_Vd.js +0 -428
  319. package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
  320. package/dist/src/base-BaXmtXYp.js +0 -107
  321. package/dist/src/base-Dtp8b4_N.js +0 -106
  322. package/dist/src/base-f71xxWai.cjs +0 -111
  323. package/dist/src/cache-BUPcq0Ad.js +0 -6
  324. package/dist/src/cache-CVfRb-HD.cjs +0 -6
  325. package/dist/src/cache-O4EuX2JV.js +0 -8
  326. package/dist/src/chunk-DHDDz29n.js +0 -22
  327. package/dist/src/chunk-FhC4c-0y.js +0 -21
  328. package/dist/src/cloud-CZ4hytdm.js +0 -5
  329. package/dist/src/eval-CKHWqG9f.js +0 -16
  330. package/dist/src/evalResult-CxTP-LMm.cjs +0 -11
  331. package/dist/src/evalResult-CzLURDcP.js +0 -13
  332. package/dist/src/evalResult-DyttNQ_G.js +0 -11
  333. package/dist/src/evaluator-0PvfeBYh.js +0 -38
  334. package/dist/src/fetch-Bi0o-fdp.js +0 -4
  335. package/dist/src/fetch-CMptBDVg.cjs +0 -4
  336. package/dist/src/fetch-DAZkv3gV.js +0 -6
  337. package/dist/src/graders-BCytzXrb.js +0 -34
  338. package/dist/src/graders-CGZQShfJ.cjs +0 -33
  339. package/dist/src/graders-spkuVC-E.js +0 -36
  340. package/dist/src/opencode-sdk-CImWVqy9.js +0 -382
  341. package/dist/src/opencode-sdk-CuCztr4P.js +0 -380
  342. package/dist/src/opencode-sdk-DhcfRbBH.js +0 -376
  343. package/dist/src/opencode-sdk-mqF-Oj3f.cjs +0 -383
  344. package/dist/src/providers-BMZZmPBJ.cjs +0 -32
  345. package/dist/src/providers-CQQrNaJk.js +0 -32
  346. package/dist/src/providers-Ck8HyrC-.js +0 -34
  347. package/dist/src/quiverai-BNfIwKCO.cjs +0 -54
  348. package/dist/src/quiverai-BQigKdIH.js +0 -57
  349. package/dist/src/quiverai-Bfy2WnE2.js +0 -55
  350. package/dist/src/quiverai-CedIP0PJ.js +0 -43
  351. package/dist/src/rubyUtils-D7--T12C.js +0 -6
  352. package/dist/src/rubyUtils-DRRiMFV2.js +0 -5
  353. package/dist/src/rubyUtils-vb8OYFC-.cjs +0 -5
  354. package/dist/src/server-BUbS0Qfh.js +0 -6
  355. package/dist/src/server-XpGXFHkS.cjs +0 -6
  356. package/dist/src/server-gfOx5Zrk.js +0 -8
  357. package/dist/src/store-5u2yriTV.js +0 -7
  358. package/dist/src/store-D_lq_8oQ.js +0 -6
  359. package/dist/src/store-m5KT6Ly7.cjs +0 -6
  360. package/dist/src/telemetry-5RHFoCJh.js +0 -6
  361. package/dist/src/telemetry-Do8wMnA-.js +0 -8
  362. package/dist/src/telemetry-LojxPoFq.cjs +0 -6
  363. package/dist/src/transform-8eGmaH-7.js +0 -7
  364. package/dist/src/transform-BRVvWaG4.cjs +0 -6
  365. package/dist/src/transform-GybT0X0u.js +0 -8
  366. package/dist/src/transformersAvailability-DkAWaK5B.js +0 -35
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { O as cliState_default, b as getEnvBool, o as logger_default } from "./logger-BotXmWKW.js";
3
- import { O as TERMINAL_MAX_WIDTH, P as VERSION, n as fetchWithProxy } from "./fetch-SRsE6Ctl.js";
4
- import { t as invariant } from "./invariant-DT20jrBd.js";
5
- import { m as isProviderOptions, o as OutputFileExtension, p as isApiProvider, s as ResultFailureReason } from "./types-t52w-XsS.js";
6
- import { i as isJavascriptFile, t as JAVASCRIPT_EXTENSIONS } from "./fileExtensions-BpuMmaFL.js";
7
- import { o as safeResolve, r as importModule, t as getDirectory } from "./esm-CYhseqj4.js";
8
- import { r as runPython } from "./pythonUtils-r1uBuA0n.js";
2
+ import { O as state, b as getEnvBool, l as sanitizeObject, o as logger } from "./logger-KkObSCzq.js";
3
+ import { D as TERMINAL_MAX_WIDTH, N as VERSION, n as fetchWithProxy } from "./fetch-BMv0O527.js";
4
+ import { t as invariant } from "./invariant-BtWWVVhl.js";
5
+ import { m as isProviderOptions, o as OutputFileExtension, p as isApiProvider, s as ResultFailureReason } from "./types-CH3Ge2sE.js";
6
+ import { i as isJavascriptFile, t as JAVASCRIPT_EXTENSIONS } from "./fileExtensions-Ds-foDzt.js";
7
+ import { o as safeResolve, r as importModule, t as getDirectory } from "./esm-C03C-mv3.js";
8
+ import { r as runPython } from "./pythonUtils-C3py6GC1.js";
9
9
  import dotenv from "dotenv";
10
10
  import * as fs$2 from "fs";
11
11
  import * as path$1 from "path";
@@ -20,7 +20,6 @@ import { globSync, hasMagic } from "glob";
20
20
  import nunjucks from "nunjucks";
21
21
  import { XMLBuilder } from "fast-xml-parser";
22
22
  import { stringify } from "csv-stringify/sync";
23
-
24
23
  //#region src/util/provider.ts
25
24
  function canonicalizeProviderId(id) {
26
25
  if (id.startsWith("file://")) {
@@ -129,6 +128,55 @@ function isAnthropicProvider(providerId) {
129
128
  }
130
129
  return false;
131
130
  }
131
+ const KNOWN_ENV_VARS = {
132
+ openai: "OPENAI_API_KEY",
133
+ anthropic: "ANTHROPIC_API_KEY",
134
+ google: "GOOGLE_API_KEY",
135
+ mistral: "MISTRAL_API_KEY",
136
+ cohere: "COHERE_API_KEY",
137
+ replicate: "REPLICATE_API_TOKEN",
138
+ voyage: "VOYAGE_API_KEY",
139
+ ai21: "AI21_API_KEY",
140
+ xai: "XAI_API_KEY",
141
+ groq: "GROQ_API_KEY",
142
+ deepseek: "DEEPSEEK_API_KEY",
143
+ perplexity: "PERPLEXITY_API_KEY",
144
+ hyperbolic: "HYPERBOLIC_API_KEY",
145
+ cerebras: "CEREBRAS_API_KEY",
146
+ togetherai: "TOGETHER_API_KEY",
147
+ fal: "FAL_KEY",
148
+ huggingface: "HF_TOKEN",
149
+ "cloudflare-ai": "CLOUDFLARE_API_KEY"
150
+ };
151
+ function getDefaultEnvVar(providerId) {
152
+ const prefix = providerId.split(":")[0];
153
+ return KNOWN_ENV_VARS[prefix] || `${prefix.toUpperCase()}_API_KEY`;
154
+ }
155
+ /**
156
+ * Pre-checks providers for missing API keys before evaluation starts.
157
+ * Assumes getApiKey() is side-effect free (no network calls or token refresh).
158
+ */
159
+ function checkProviderApiKeys(providers) {
160
+ const missingApiKeys = /* @__PURE__ */ new Map();
161
+ for (const provider of providers) {
162
+ const p = provider;
163
+ if (typeof p.getApiKey !== "function") continue;
164
+ if (provider.id().startsWith("azure:")) continue;
165
+ const requiresKey = typeof p.requiresApiKey === "function" ? p.requiresApiKey() : p.config?.apiKeyRequired !== false;
166
+ let apiKey;
167
+ try {
168
+ apiKey = p.getApiKey();
169
+ } catch {
170
+ apiKey = void 0;
171
+ }
172
+ if (requiresKey && !apiKey) {
173
+ const envVar = p.config?.apiKeyEnvar || getDefaultEnvVar(provider.id());
174
+ if (!missingApiKeys.has(envVar)) missingApiKeys.set(envVar, []);
175
+ missingApiKeys.get(envVar).push(provider.id());
176
+ }
177
+ }
178
+ return missingApiKeys;
179
+ }
132
180
  /**
133
181
  * Detects if a provider uses Google models.
134
182
  * This includes direct Google/Vertex providers with Gemini and other Google models.
@@ -142,7 +190,6 @@ function isGoogleProvider(providerId) {
142
190
  }
143
191
  return false;
144
192
  }
145
-
146
193
  //#endregion
147
194
  //#region src/util/comparison.ts
148
195
  /**
@@ -241,7 +288,7 @@ function resultIsForTestCase(result, testCase) {
241
288
  const isMatch = doVarsMatch && providersMatch;
242
289
  if (!isMatch) {
243
290
  const varKeys = testVars ? Object.keys(testVars).join(", ") : "none";
244
- logger_default.debug(`[resultIsForTestCase] No match: vars=${doVarsMatch}, providers=${providersMatch}`, {
291
+ logger.debug(`[resultIsForTestCase] No match: vars=${doVarsMatch}, providers=${providersMatch}`, {
245
292
  testProvider: testProviderId || "none",
246
293
  resultProvider: resultProviderId || "none",
247
294
  testVarKeys: varKeys
@@ -249,7 +296,6 @@ function resultIsForTestCase(result, testCase) {
249
296
  }
250
297
  return isMatch;
251
298
  }
252
-
253
299
  //#endregion
254
300
  //#region src/util/env.ts
255
301
  /**
@@ -266,8 +312,8 @@ function setupEnv(envPath) {
266
312
  return;
267
313
  }
268
314
  for (const p of paths) if (!fs$2.existsSync(p)) throw new Error(`Environment file not found: ${p}`);
269
- if (paths.length === 1) logger_default.info(`Loading environment variables from ${paths[0]}`);
270
- else logger_default.info(`Loading environment variables from: ${paths.join(", ")}`);
315
+ if (paths.length === 1) logger.info(`Loading environment variables from ${paths[0]}`);
316
+ else logger.info(`Loading environment variables from: ${paths.join(", ")}`);
271
317
  const pathArg = paths.length === 1 ? paths[0] : paths;
272
318
  dotenv.config({
273
319
  path: pathArg,
@@ -276,7 +322,6 @@ function setupEnv(envPath) {
276
322
  });
277
323
  } else dotenv.config({ quiet: true });
278
324
  }
279
-
280
325
  //#endregion
281
326
  //#region src/util/functions/loadFunction.ts
282
327
  const functionCache = {};
@@ -285,7 +330,7 @@ const functionCache = {};
285
330
  * @param options Options for loading the function
286
331
  * @returns The loaded function
287
332
  */
288
- async function loadFunction({ filePath, functionName, defaultFunctionName = "func", basePath = cliState_default.basePath, useCache = true }) {
333
+ async function loadFunction({ filePath, functionName, defaultFunctionName = "func", basePath = state.basePath, useCache = true }) {
289
334
  const cacheKey = `${filePath}${functionName ? `:${functionName}` : ""}`;
290
335
  if (useCache && functionCache[cacheKey]) return functionCache[cacheKey];
291
336
  const resolvedPath = basePath ? path.resolve(basePath, filePath) : filePath;
@@ -306,7 +351,7 @@ async function loadFunction({ filePath, functionName, defaultFunctionName = "fun
306
351
  if (useCache) functionCache[cacheKey] = func;
307
352
  return func;
308
353
  } catch (err) {
309
- logger_default.error(`Failed to load function: ${err.message}`);
354
+ logger.error(`Failed to load function: ${err.message}`);
310
355
  throw err;
311
356
  }
312
357
  }
@@ -325,7 +370,6 @@ function parseFileUrl(fileUrl) {
325
370
  };
326
371
  return { filePath: urlWithoutProtocol };
327
372
  }
328
-
329
373
  //#endregion
330
374
  //#region src/util/templates.ts
331
375
  /**
@@ -344,7 +388,7 @@ function getNunjucksEngine(filters, throwOnUndefined = false, isGrader = false)
344
388
  });
345
389
  const envGlobals = {
346
390
  ...getEnvBool("PROMPTFOO_DISABLE_TEMPLATE_ENV_VARS", getEnvBool("PROMPTFOO_SELF_HOSTED", false)) ? {} : process.env,
347
- ...cliState_default.config?.env
391
+ ...state.config?.env
348
392
  };
349
393
  env.addGlobal("env", envGlobals);
350
394
  env.addFilter("load", function(str) {
@@ -384,7 +428,6 @@ function extractVariablesFromTemplates(templates) {
384
428
  for (const template of templates) extractVariablesFromTemplate(template).forEach((variable) => variableSet.add(variable));
385
429
  return Array.from(variableSet);
386
430
  }
387
-
388
431
  //#endregion
389
432
  //#region src/util/render.ts
390
433
  /**
@@ -414,7 +457,7 @@ function renderEnvOnlyInObject(obj, envOverrides, replaceBase) {
414
457
  if (getEnvBool("PROMPTFOO_DISABLE_TEMPLATING")) return obj;
415
458
  if (typeof obj === "string") {
416
459
  if (obj.length > 5e4) {
417
- logger_default.warn(`String too long (${obj.length} chars) for template matching. Skipping env var rendering.`);
460
+ logger.warn(`String too long (${obj.length} chars) for template matching. Skipping env var rendering.`);
418
461
  return obj;
419
462
  }
420
463
  const nunjucks = getNunjucksEngine();
@@ -430,7 +473,7 @@ function renderEnvOnlyInObject(obj, envOverrides, replaceBase) {
430
473
  if (match.includes("|") || varName && varName in envGlobals && envGlobals[varName] !== void 0) try {
431
474
  return nunjucks.renderString(match, { env: envGlobals });
432
475
  } catch (error) {
433
- logger_default.debug(`Failed to render env template "${match}": ${error instanceof Error ? error.message : String(error)}`);
476
+ logger.debug(`Failed to render env template "${match}": ${error instanceof Error ? error.message : String(error)}`);
434
477
  return match;
435
478
  }
436
479
  return match;
@@ -455,7 +498,6 @@ function renderVarsInObject(obj, vars) {
455
498
  } else if (typeof obj === "function") return renderVarsInObject(obj({ vars }));
456
499
  return obj;
457
500
  }
458
-
459
501
  //#endregion
460
502
  //#region src/util/file.ts
461
503
  /**
@@ -466,7 +508,7 @@ function getNunjucksEngineForFilePath() {
466
508
  const env = nunjucks.configure({ autoescape: false });
467
509
  env.addGlobal("env", {
468
510
  ...process.env,
469
- ...cliState_default.config?.env
511
+ ...state.config?.env
470
512
  });
471
513
  return env;
472
514
  }
@@ -493,16 +535,16 @@ function maybeLoadFromExternalFile(filePath, context) {
493
535
  const renderedFilePath = getNunjucksEngineForFilePath().renderString(filePath, {});
494
536
  const { filePath: cleanPath, functionName } = parseFileUrl(renderedFilePath);
495
537
  if (context === "assertion" && (cleanPath.endsWith(".py") || isJavascriptFile(cleanPath))) {
496
- logger_default.debug(`Preserving Python/JS file reference in assertion context: ${renderedFilePath}`);
538
+ logger.debug(`Preserving Python/JS file reference in assertion context: ${renderedFilePath}`);
497
539
  return renderedFilePath;
498
540
  }
499
541
  if (context === "vars") {
500
- logger_default.debug(`Preserving file reference in vars context: ${renderedFilePath}`);
542
+ logger.debug(`Preserving file reference in vars context: ${renderedFilePath}`);
501
543
  return renderedFilePath;
502
544
  }
503
545
  if (functionName && (cleanPath.endsWith(".py") || isJavascriptFile(cleanPath))) return renderedFilePath;
504
546
  const pathToUse = functionName && !(cleanPath.endsWith(".py") || isJavascriptFile(cleanPath)) ? renderedFilePath.slice(7) : cleanPath;
505
- const resolvedPath = path$1.resolve(cliState_default.basePath || "", pathToUse);
547
+ const resolvedPath = path$1.resolve(state.basePath || "", pathToUse);
506
548
  if (hasMagic(pathToUse)) {
507
549
  const matchedFiles = globSync(resolvedPath, { windowsPathsNoEscape: true });
508
550
  if (matchedFiles.length === 0) throw new Error(`No files found matching pattern: ${resolvedPath}`);
@@ -513,7 +555,7 @@ function maybeLoadFromExternalFile(filePath, context) {
513
555
  contents = fs$2.readFileSync(matchedFile, "utf8");
514
556
  } catch (error) {
515
557
  if (error.code === "ENOENT") {
516
- logger_default.debug(`File disappeared during glob expansion: ${matchedFile}`);
558
+ logger.debug(`File disappeared during glob expansion: ${matchedFile}`);
517
559
  continue;
518
560
  }
519
561
  throw error;
@@ -723,37 +765,37 @@ async function maybeLoadToolsFromExternalFile(tools, vars) {
723
765
  const { filePath, functionName } = parseFileUrl(rendered);
724
766
  if (functionName && (filePath.endsWith(".py") || isJavascriptFile(filePath))) {
725
767
  const fileType = filePath.endsWith(".py") ? "Python" : "JavaScript";
726
- logger_default.debug(`[maybeLoadToolsFromExternalFile] Loading tools from ${fileType} file: ${filePath}:${functionName}`);
768
+ logger.debug(`[maybeLoadToolsFromExternalFile] Loading tools from ${fileType} file: ${filePath}:${functionName}`);
727
769
  try {
728
770
  let toolDefinitions;
729
771
  if (filePath.endsWith(".py")) {
730
- const absPath = safeResolve(cliState_default.basePath || process.cwd(), filePath);
731
- logger_default.debug(`[maybeLoadToolsFromExternalFile] Resolved Python path: ${absPath}`);
772
+ const absPath = safeResolve(state.basePath || process.cwd(), filePath);
773
+ logger.debug(`[maybeLoadToolsFromExternalFile] Resolved Python path: ${absPath}`);
732
774
  toolDefinitions = await runPython(absPath, functionName, []);
733
775
  } else {
734
- const absPath = safeResolve(cliState_default.basePath || process.cwd(), filePath);
735
- logger_default.debug(`[maybeLoadToolsFromExternalFile] Resolved JavaScript path: ${absPath}`);
776
+ const absPath = safeResolve(state.basePath || process.cwd(), filePath);
777
+ logger.debug(`[maybeLoadToolsFromExternalFile] Resolved JavaScript path: ${absPath}`);
736
778
  const module = await importModule(absPath);
737
779
  const fn = module[functionName] || module.default?.[functionName];
738
780
  if (typeof fn !== "function") {
739
781
  const availableExports = Object.keys(module).filter((k) => k !== "default");
740
- const basePath = cliState_default.basePath || process.cwd();
782
+ const basePath = state.basePath || process.cwd();
741
783
  throw new Error(`Function "${functionName}" not found in ${filePath}. Available exports: ${availableExports.length > 0 ? availableExports.join(", ") : "(none)"}\nResolved from: ${basePath}`);
742
784
  }
743
785
  toolDefinitions = await Promise.resolve(fn());
744
786
  }
745
787
  if (!toolDefinitions || typeof toolDefinitions === "string" || typeof toolDefinitions === "number" || typeof toolDefinitions === "boolean") throw new Error(`Function "${functionName}" must return an array or object of tool definitions, but returned: ${toolDefinitions === null ? "null" : typeof toolDefinitions}`);
746
- logger_default.debug(`[maybeLoadToolsFromExternalFile] Successfully loaded ${Array.isArray(toolDefinitions) ? toolDefinitions.length : "object"} tools`);
788
+ logger.debug(`[maybeLoadToolsFromExternalFile] Successfully loaded ${Array.isArray(toolDefinitions) ? toolDefinitions.length : "object"} tools`);
747
789
  return toolDefinitions;
748
790
  } catch (err) {
749
791
  const errorMessage = err instanceof Error ? err.message : String(err);
750
- const basePath = cliState_default.basePath || process.cwd();
792
+ const basePath = state.basePath || process.cwd();
751
793
  throw new Error(`Failed to load tools from ${rendered}:\n${errorMessage}\n\nMake sure the function "${functionName}" exists and returns a valid tool definition array.\nResolved from: ${basePath}`);
752
794
  }
753
795
  }
754
796
  if (filePath.endsWith(".py") || isJavascriptFile(filePath)) {
755
797
  const ext = filePath.endsWith(".py") ? "Python" : "JavaScript";
756
- const basePath = cliState_default.basePath || process.cwd();
798
+ const basePath = state.basePath || process.cwd();
757
799
  throw new Error(`Cannot load tools from ${rendered}\n${ext} files require a function name. Use this format:\n tools: file://${filePath}:get_tools\n\nYour ${ext} file should export a function that returns tool definitions:\n` + (filePath.endsWith(".py") ? ` def get_tools():\n return [{"type": "function", "function": {...}}]` : ` module.exports.get_tools = () => [{ type: "function", function: {...} }];`) + `\n\nResolved from: ${basePath}`);
758
800
  }
759
801
  }
@@ -771,7 +813,6 @@ async function maybeLoadToolsFromExternalFile(tools, vars) {
771
813
  }
772
814
  return loaded;
773
815
  }
774
-
775
816
  //#endregion
776
817
  //#region src/googleSheets.ts
777
818
  async function checkGoogleSheetAccess(url) {
@@ -786,7 +827,7 @@ async function checkGoogleSheetAccess(url) {
786
827
  status: response.status
787
828
  };
788
829
  } catch (error) {
789
- logger_default.error(`Error checking sheet access: ${error}`);
830
+ logger.error(`Error checking sheet access: ${error}`);
790
831
  return { public: false };
791
832
  }
792
833
  }
@@ -838,7 +879,7 @@ async function fetchCsvFromGoogleSheetAuthenticated(url) {
838
879
  }
839
880
  async function fetchCsvFromGoogleSheet(url) {
840
881
  const { public: isPublic } = await checkGoogleSheetAccess(url);
841
- logger_default.debug(`Google Sheets URL: ${url}, isPublic: ${isPublic}`);
882
+ logger.debug(`Google Sheets URL: ${url}, isPublic: ${isPublic}`);
842
883
  if (isPublic) return fetchCsvFromGoogleSheetUnauthenticated(url);
843
884
  return fetchCsvFromGoogleSheetAuthenticated(url);
844
885
  }
@@ -881,7 +922,7 @@ async function writeCsvToGoogleSheet(rows, url) {
881
922
  });
882
923
  range = `${newSheetTitle}!A1:${endColumn}${numRows}`;
883
924
  }
884
- logger_default.debug(`Writing CSV to Google Sheets URL: ${url} with ${values.length} rows`);
925
+ logger.debug(`Writing CSV to Google Sheets URL: ${url} with ${values.length} rows`);
885
926
  await sheets.spreadsheets.values.update({
886
927
  spreadsheetId,
887
928
  range,
@@ -890,7 +931,6 @@ async function writeCsvToGoogleSheet(rows, url) {
890
931
  requestBody: { values }
891
932
  });
892
933
  }
893
-
894
934
  //#endregion
895
935
  //#region src/server/utils/evalTableUtils.ts
896
936
  /**
@@ -1214,7 +1254,6 @@ async function streamEvalCsv(eval_, options) {
1214
1254
  isRedteam
1215
1255
  })]));
1216
1256
  }
1217
-
1218
1257
  //#endregion
1219
1258
  //#region src/util/output.ts
1220
1259
  const outputToSimpleString = (output) => {
@@ -1230,6 +1269,13 @@ const outputToSimpleString = (output) => {
1230
1269
  ${gradingResultText}
1231
1270
  `.trim();
1232
1271
  };
1272
+ function sanitizeConfigForOutput(config) {
1273
+ return sanitizeObject(config, {
1274
+ context: "output config",
1275
+ throwOnError: true,
1276
+ maxDepth: Number.POSITIVE_INFINITY
1277
+ });
1278
+ }
1233
1279
  function createOutputMetadata(evalRecord) {
1234
1280
  let evaluationCreatedAt;
1235
1281
  if (evalRecord.createdAt) try {
@@ -1256,10 +1302,11 @@ async function writeJsonOutputSafely(outputPath, evalRecord, shareableUrl) {
1256
1302
  const metadata = createOutputMetadata(evalRecord);
1257
1303
  try {
1258
1304
  const summary = await evalRecord.toEvaluateSummary();
1305
+ const redactedConfig = sanitizeConfigForOutput(evalRecord.config);
1259
1306
  const outputData = {
1260
1307
  evalId: evalRecord.id,
1261
1308
  results: summary,
1262
- config: evalRecord.config,
1309
+ config: redactedConfig,
1263
1310
  shareableUrl,
1264
1311
  metadata
1265
1312
  };
@@ -1271,7 +1318,7 @@ async function writeJsonOutputSafely(outputPath, evalRecord, shareableUrl) {
1271
1318
  const isHeapOOM = /heap out of memory|Array buffer allocation failed|ERR_STRING_TOO_LONG/i.test(msg);
1272
1319
  if (isStringLen || isHeapOOM) {
1273
1320
  const resultCount = await evalRecord.getResultsCount();
1274
- logger_default.error(`Dataset too large for JSON export (${resultCount} results).`);
1321
+ logger.error(`Dataset too large for JSON export (${resultCount} results).`);
1275
1322
  throw new Error(`Dataset too large for JSON export. The evaluation has ${resultCount} results which exceeds memory limits. Consider using JSONL format instead: --output output.jsonl`);
1276
1323
  } else throw error;
1277
1324
  }
@@ -1290,7 +1337,7 @@ async function writeOutput(outputPath, evalRecord, shareableUrl) {
1290
1337
  });
1291
1338
  return csvRow;
1292
1339
  });
1293
- logger_default.info(`Writing ${rows.length} rows to Google Sheets...`);
1340
+ logger.info(`Writing ${rows.length} rows to Google Sheets...`);
1294
1341
  await writeCsvToGoogleSheet(rows, outputPath);
1295
1342
  return;
1296
1343
  }
@@ -1314,10 +1361,11 @@ async function writeOutput(outputPath, evalRecord, shareableUrl) {
1314
1361
  } else if (outputExtension === "json") await writeJsonOutputSafely(outputPath, evalRecord, shareableUrl);
1315
1362
  else if (outputExtension === "yaml" || outputExtension === "yml" || outputExtension === "txt") {
1316
1363
  const summary = await evalRecord.toEvaluateSummary();
1364
+ const redactedConfig = sanitizeConfigForOutput(evalRecord.config);
1317
1365
  await fsPromises.writeFile(outputPath, yaml.dump({
1318
1366
  evalId: evalRecord.id,
1319
1367
  results: summary,
1320
- config: evalRecord.config,
1368
+ config: redactedConfig,
1321
1369
  shareableUrl,
1322
1370
  metadata
1323
1371
  }));
@@ -1325,10 +1373,11 @@ async function writeOutput(outputPath, evalRecord, shareableUrl) {
1325
1373
  const table = await evalRecord.getTable();
1326
1374
  invariant(table, "Table is required");
1327
1375
  const summary = await evalRecord.toEvaluateSummary();
1376
+ const redactedConfig = sanitizeConfigForOutput(evalRecord.config);
1328
1377
  const template = await fsPromises.readFile(path$1.join(getDirectory(), "tableOutput.html"), "utf-8");
1329
1378
  const htmlTable = [[...table.head.vars, ...table.head.prompts.map((prompt) => `[${prompt.provider}] ${prompt.label}`)], ...table.body.map((row) => [...row.vars, ...row.outputs.map(outputToSimpleString)])];
1330
1379
  const htmlOutput = getNunjucksEngine().renderString(template, {
1331
- config: evalRecord.config,
1380
+ config: redactedConfig,
1332
1381
  table: htmlTable,
1333
1382
  results: summary
1334
1383
  });
@@ -1341,6 +1390,7 @@ async function writeOutput(outputPath, evalRecord, shareableUrl) {
1341
1390
  }
1342
1391
  } else if (outputExtension === "xml") {
1343
1392
  const summary = await evalRecord.toEvaluateSummary();
1393
+ const redactedConfig = sanitizeConfigForOutput(evalRecord.config);
1344
1394
  const sanitizeForXml = (obj) => {
1345
1395
  if (obj === null || obj === void 0) return "";
1346
1396
  if (typeof obj === "boolean" || typeof obj === "number") return String(obj);
@@ -1360,7 +1410,7 @@ async function writeOutput(outputPath, evalRecord, shareableUrl) {
1360
1410
  }).build({ promptfoo: {
1361
1411
  evalId: evalRecord.id,
1362
1412
  results: sanitizeForXml(summary),
1363
- config: sanitizeForXml(evalRecord.config),
1413
+ config: sanitizeForXml(redactedConfig),
1364
1414
  shareableUrl: shareableUrl || ""
1365
1415
  } });
1366
1416
  await fsPromises.writeFile(outputPath, xmlData);
@@ -1369,14 +1419,13 @@ async function writeOutput(outputPath, evalRecord, shareableUrl) {
1369
1419
  async function writeMultipleOutputs(outputPaths, evalRecord, shareableUrl) {
1370
1420
  await Promise.all(outputPaths.map((outputPath) => writeOutput(outputPath, evalRecord, shareableUrl)));
1371
1421
  }
1372
-
1373
1422
  //#endregion
1374
1423
  //#region src/util/runtime.ts
1375
1424
  function printBorder() {
1376
1425
  const border = "=".repeat(TERMINAL_MAX_WIDTH);
1377
- logger_default.info(border);
1426
+ logger.info(border);
1378
1427
  }
1379
-
1380
1428
  //#endregion
1381
- export { filterRuntimeVars as A, extractVariablesFromTemplates as C, setupEnv as D, parseFileUrl as E, isAnthropicProvider as F, isGoogleProvider as I, isOpenAiProvider as L, resultIsForTestCase as M, doesProviderRefMatch as N, deduplicateTestCases as O, getProviderDescription as P, isProviderAllowed as R, extractVariablesFromTemplate as S, loadFunction as T, parsePathOrGlob as _, ComparisonEvalNotFoundError as a, renderEnvOnlyInObject as b, mergeComparisonTables as c, getResolvedRelativePath as d, maybeLoadConfigFromExternalFile as f, maybeLoadToolsFromExternalFile as g, maybeLoadResponseFormatFromExternalFile as h, writeOutput as i, getTestCaseDeduplicationKey as j, extractRuntimeVars as k, fetchCsvFromGoogleSheet as l, maybeLoadFromExternalFileWithVars as m, createOutputMetadata as n, evalTableToJson as o, maybeLoadFromExternalFile as p, writeMultipleOutputs as r, generateEvalCsv as s, printBorder as t, getNunjucksEngineForFilePath as u, readFilters as v, getNunjucksEngine as w, renderVarsInObject as x, readOutput as y };
1382
- //# sourceMappingURL=util-BSh4a_Q8.js.map
1429
+ export { filterRuntimeVars as A, extractVariablesFromTemplates as C, setupEnv as D, parseFileUrl as E, getProviderDescription as F, isAnthropicProvider as I, isGoogleProvider as L, resultIsForTestCase as M, checkProviderApiKeys as N, deduplicateTestCases as O, doesProviderRefMatch as P, isOpenAiProvider as R, extractVariablesFromTemplate as S, loadFunction as T, parsePathOrGlob as _, ComparisonEvalNotFoundError as a, renderEnvOnlyInObject as b, mergeComparisonTables as c, getResolvedRelativePath as d, maybeLoadConfigFromExternalFile as f, maybeLoadToolsFromExternalFile as g, maybeLoadResponseFormatFromExternalFile as h, writeOutput as i, getTestCaseDeduplicationKey as j, extractRuntimeVars as k, fetchCsvFromGoogleSheet as l, maybeLoadFromExternalFileWithVars as m, createOutputMetadata as n, evalTableToJson as o, maybeLoadFromExternalFile as p, writeMultipleOutputs as r, generateEvalCsv as s, printBorder as t, getNunjucksEngineForFilePath as u, readFilters as v, getNunjucksEngine as w, renderVarsInObject as x, readOutput as y, isProviderAllowed as z };
1430
+
1431
+ //# sourceMappingURL=util-YT5HPZaS.js.map