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
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import "./logger-KkObSCzq.js";
3
+ import { n as fetchWithProxy } from "./fetch-BMv0O527.js";
4
+ import "./cloud-Bc9526yV.js";
5
+ export { fetchWithProxy };
@@ -79,7 +79,7 @@ function isAudioFile(filePath) {
79
79
  const fileExtension = filePath.split(".").pop()?.toLowerCase() || "";
80
80
  return audioExtensions.includes(fileExtension);
81
81
  }
82
-
83
82
  //#endregion
84
83
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
85
- //# sourceMappingURL=fileExtensions-ePDqouxn.js.map
84
+
85
+ //# sourceMappingURL=fileExtensions-DnqA1y9x.js.map
@@ -80,7 +80,7 @@ function isAudioFile(filePath) {
80
80
  const fileExtension = filePath.split(".").pop()?.toLowerCase() || "";
81
81
  return audioExtensions.includes(fileExtension);
82
82
  }
83
-
84
83
  //#endregion
85
84
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
86
- //# sourceMappingURL=fileExtensions-BpuMmaFL.js.map
85
+
86
+ //# sourceMappingURL=fileExtensions-Ds-foDzt.js.map
@@ -0,0 +1,85 @@
1
+ //#region src/util/fileExtensions.ts
2
+ /**
3
+ * Array of supported JavaScript and TypeScript file extensions
4
+ */
5
+ const JAVASCRIPT_EXTENSIONS = [
6
+ "js",
7
+ "cjs",
8
+ "mjs",
9
+ "ts",
10
+ "cts",
11
+ "mts"
12
+ ];
13
+ /**
14
+ * Checks if a file is a JavaScript or TypeScript file based on its extension.
15
+ *
16
+ * @param filePath - The path of the file to check.
17
+ * @returns True if the file has a JavaScript or TypeScript extension, false otherwise.
18
+ */
19
+ function isJavascriptFile(filePath) {
20
+ return new RegExp(`\\.(${JAVASCRIPT_EXTENSIONS.join("|")})$`).test(filePath);
21
+ }
22
+ /**
23
+ * Checks if a file is an image file based on its extension. Non-exhaustive list.
24
+ *
25
+ * @param filePath - The path of the file to check.
26
+ * @returns True if the file has an image extension, false otherwise.
27
+ */
28
+ function isImageFile(filePath) {
29
+ const imageExtensions = [
30
+ "jpg",
31
+ "jpeg",
32
+ "png",
33
+ "gif",
34
+ "bmp",
35
+ "webp",
36
+ "svg"
37
+ ];
38
+ const fileExtension = filePath.split(".").pop()?.toLowerCase() || "";
39
+ return imageExtensions.includes(fileExtension);
40
+ }
41
+ /**
42
+ * Checks if a file is a video file based on its extension. Non-exhaustive list.
43
+ *
44
+ * @param filePath - The path of the file to check.
45
+ * @returns True if the file has a video extension, false otherwise.
46
+ */
47
+ function isVideoFile(filePath) {
48
+ const videoExtensions = [
49
+ "mp4",
50
+ "webm",
51
+ "ogg",
52
+ "mov",
53
+ "avi",
54
+ "wmv",
55
+ "mkv",
56
+ "m4v"
57
+ ];
58
+ const fileExtension = filePath.split(".").pop()?.toLowerCase() || "";
59
+ return videoExtensions.includes(fileExtension);
60
+ }
61
+ /**
62
+ * Checks if a file is an audio file based on its extension. Non-exhaustive list.
63
+ *
64
+ * @param filePath - The path of the file to check.
65
+ * @returns True if the file has an audio extension, false otherwise.
66
+ */
67
+ function isAudioFile(filePath) {
68
+ const audioExtensions = [
69
+ "wav",
70
+ "mp3",
71
+ "ogg",
72
+ "aac",
73
+ "m4a",
74
+ "flac",
75
+ "wma",
76
+ "aiff",
77
+ "opus"
78
+ ];
79
+ const fileExtension = filePath.split(".").pop()?.toLowerCase() || "";
80
+ return audioExtensions.includes(fileExtension);
81
+ }
82
+ //#endregion
83
+ export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
84
+
85
+ //# sourceMappingURL=fileExtensions-LcDYkU4v.js.map
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/util/fileExtensions.ts
3
2
  /**
4
3
  * Array of supported JavaScript and TypeScript file extensions
@@ -80,36 +79,36 @@ function isAudioFile(filePath) {
80
79
  const fileExtension = filePath.split(".").pop()?.toLowerCase() || "";
81
80
  return audioExtensions.includes(fileExtension);
82
81
  }
83
-
84
82
  //#endregion
85
- Object.defineProperty(exports, 'JAVASCRIPT_EXTENSIONS', {
86
- enumerable: true,
87
- get: function () {
88
- return JAVASCRIPT_EXTENSIONS;
89
- }
83
+ Object.defineProperty(exports, "JAVASCRIPT_EXTENSIONS", {
84
+ enumerable: true,
85
+ get: function() {
86
+ return JAVASCRIPT_EXTENSIONS;
87
+ }
90
88
  });
91
- Object.defineProperty(exports, 'isAudioFile', {
92
- enumerable: true,
93
- get: function () {
94
- return isAudioFile;
95
- }
89
+ Object.defineProperty(exports, "isAudioFile", {
90
+ enumerable: true,
91
+ get: function() {
92
+ return isAudioFile;
93
+ }
96
94
  });
97
- Object.defineProperty(exports, 'isImageFile', {
98
- enumerable: true,
99
- get: function () {
100
- return isImageFile;
101
- }
95
+ Object.defineProperty(exports, "isImageFile", {
96
+ enumerable: true,
97
+ get: function() {
98
+ return isImageFile;
99
+ }
102
100
  });
103
- Object.defineProperty(exports, 'isJavascriptFile', {
104
- enumerable: true,
105
- get: function () {
106
- return isJavascriptFile;
107
- }
101
+ Object.defineProperty(exports, "isJavascriptFile", {
102
+ enumerable: true,
103
+ get: function() {
104
+ return isJavascriptFile;
105
+ }
108
106
  });
109
- Object.defineProperty(exports, 'isVideoFile', {
110
- enumerable: true,
111
- get: function () {
112
- return isVideoFile;
113
- }
107
+ Object.defineProperty(exports, "isVideoFile", {
108
+ enumerable: true,
109
+ get: function() {
110
+ return isVideoFile;
111
+ }
114
112
  });
115
- //# sourceMappingURL=fileExtensions-DkJYkWUy.cjs.map
113
+
114
+ //# sourceMappingURL=fileExtensions-bYh77CN8.cjs.map
@@ -17,7 +17,7 @@ function formatDuration(seconds) {
17
17
  result += `${remainingSeconds}s`;
18
18
  return result;
19
19
  }
20
-
21
20
  //#endregion
22
21
  export { formatDuration as t };
23
- //# sourceMappingURL=formatDuration-Doo0xq-z.js.map
22
+
23
+ //# sourceMappingURL=formatDuration-DgBVMN65.js.map
@@ -1,5 +1,4 @@
1
1
  import { ROOT_CONTEXT, SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
2
-
3
2
  //#region src/tracing/genaiTracer.ts
4
3
  const TRACER_NAME = "promptfoo.providers";
5
4
  const TRACER_VERSION = "1.0.0";
@@ -251,7 +250,7 @@ function getTraceparent() {
251
250
  const traceFlags = ctx.traceFlags.toString(16).padStart(2, "0");
252
251
  return `00-${ctx.traceId}-${ctx.spanId}-${traceFlags}`;
253
252
  }
254
-
255
253
  //#endregion
256
254
  export { withGenAISpan as n, getTraceparent as t };
257
- //# sourceMappingURL=genaiTracer-Ce19n68P.js.map
255
+
256
+ //# sourceMappingURL=genaiTracer-70Z8BIuV.js.map
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  import { ROOT_CONTEXT, SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
3
-
4
3
  //#region src/tracing/genaiTracer.ts
5
4
  const TRACER_NAME = "promptfoo.providers";
6
5
  const TRACER_VERSION = "1.0.0";
@@ -252,7 +251,7 @@ function getTraceparent() {
252
251
  const traceFlags = ctx.traceFlags.toString(16).padStart(2, "0");
253
252
  return `00-${ctx.traceId}-${ctx.spanId}-${traceFlags}`;
254
253
  }
255
-
256
254
  //#endregion
257
255
  export { withGenAISpan as n, getTraceparent as t };
258
- //# sourceMappingURL=genaiTracer-CqNnnXrE.js.map
256
+
257
+ //# sourceMappingURL=genaiTracer-C1rxGO8Q.js.map
@@ -0,0 +1,256 @@
1
+ import { ROOT_CONTEXT, SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
2
+ //#region src/tracing/genaiTracer.ts
3
+ const TRACER_NAME = "promptfoo.providers";
4
+ const TRACER_VERSION = "1.0.0";
5
+ const GenAIAttributes = {
6
+ SYSTEM: "gen_ai.system",
7
+ OPERATION_NAME: "gen_ai.operation.name",
8
+ REQUEST_MODEL: "gen_ai.request.model",
9
+ REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens",
10
+ REQUEST_TEMPERATURE: "gen_ai.request.temperature",
11
+ REQUEST_TOP_P: "gen_ai.request.top_p",
12
+ REQUEST_TOP_K: "gen_ai.request.top_k",
13
+ REQUEST_STOP_SEQUENCES: "gen_ai.request.stop_sequences",
14
+ REQUEST_FREQUENCY_PENALTY: "gen_ai.request.frequency_penalty",
15
+ REQUEST_PRESENCE_PENALTY: "gen_ai.request.presence_penalty",
16
+ RESPONSE_MODEL: "gen_ai.response.model",
17
+ RESPONSE_ID: "gen_ai.response.id",
18
+ RESPONSE_FINISH_REASONS: "gen_ai.response.finish_reasons",
19
+ USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens",
20
+ USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens",
21
+ USAGE_TOTAL_TOKENS: "gen_ai.usage.total_tokens",
22
+ USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
23
+ USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
24
+ USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
25
+ USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
26
+ };
27
+ const PromptfooAttributes = {
28
+ PROVIDER_ID: "promptfoo.provider.id",
29
+ EVAL_ID: "promptfoo.eval.id",
30
+ TEST_INDEX: "promptfoo.test.index",
31
+ PROMPT_LABEL: "promptfoo.prompt.label",
32
+ CACHE_HIT: "promptfoo.cache_hit",
33
+ REQUEST_BODY: "promptfoo.request.body",
34
+ RESPONSE_BODY: "promptfoo.response.body"
35
+ };
36
+ /** Maximum length for request/response body attributes (characters) */
37
+ const MAX_BODY_LENGTH = 4096;
38
+ /**
39
+ * Patterns to redact from request/response bodies for security.
40
+ * These patterns match common API key and secret formats.
41
+ */
42
+ const SENSITIVE_PATTERNS = [
43
+ {
44
+ pattern: /\b(sk-[a-zA-Z0-9_-]{20,})/g,
45
+ replacement: "<REDACTED_API_KEY>"
46
+ },
47
+ {
48
+ pattern: /\b(pk-[a-zA-Z0-9_-]{20,})/g,
49
+ replacement: "<REDACTED_API_KEY>"
50
+ },
51
+ {
52
+ pattern: /\b(api[_-]?key["']?\s*[:=]\s*["']?)([a-zA-Z0-9_-]{16,})/gi,
53
+ replacement: "$1<REDACTED>"
54
+ },
55
+ {
56
+ pattern: /\b(secret["']?\s*[:=]\s*["']?)([a-zA-Z0-9_-]{16,})/gi,
57
+ replacement: "$1<REDACTED>"
58
+ },
59
+ {
60
+ pattern: /\b(token["']?\s*[:=]\s*["']?)([a-zA-Z0-9_-]{16,})/gi,
61
+ replacement: "$1<REDACTED>"
62
+ },
63
+ {
64
+ pattern: /\b(password["']?\s*[:=]\s*["']?)([^\s"',}{]+)/gi,
65
+ replacement: "$1<REDACTED>"
66
+ },
67
+ {
68
+ pattern: /(Authorization["']?\s*[:=]\s*["']?)(Bearer\s+)?([a-zA-Z0-9_.-]{16,})/gi,
69
+ replacement: "$1$2<REDACTED>"
70
+ },
71
+ {
72
+ pattern: /\b(AKIA[A-Z0-9]{16})/g,
73
+ replacement: "<REDACTED_AWS_KEY>"
74
+ },
75
+ {
76
+ pattern: /\b([a-zA-Z0-9/+=]{40})/g,
77
+ replacement: (match) => {
78
+ if (/^[A-Za-z0-9+/=]{40}$/.test(match) && match.includes("/")) return "<REDACTED_SECRET>";
79
+ return match;
80
+ }
81
+ },
82
+ {
83
+ pattern: /\b[a-f0-9]{64,}\b/gi,
84
+ replacement: "<REDACTED_HASH>"
85
+ }
86
+ ];
87
+ /**
88
+ * Get the tracer instance for GenAI operations.
89
+ */
90
+ function getGenAITracer() {
91
+ return trace.getTracer(TRACER_NAME, TRACER_VERSION);
92
+ }
93
+ /**
94
+ * Execute a function within a GenAI span.
95
+ *
96
+ * This wrapper:
97
+ * 1. Creates a span with GenAI semantic conventions
98
+ * 2. Sets request attributes before execution
99
+ * 3. Executes the provided function
100
+ * 4. Sets response attributes (including token usage) after execution
101
+ * 5. Handles errors and sets appropriate span status
102
+ *
103
+ * @param ctx - GenAI span context with request information
104
+ * @param fn - The async function to execute (typically the API call)
105
+ * @param resultExtractor - Optional function to extract result data from the return value
106
+ * @returns The return value from fn
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const response = await withGenAISpan(
111
+ * {
112
+ * system: 'openai',
113
+ * operationName: 'chat',
114
+ * model: 'gpt-4',
115
+ * providerId: 'openai:gpt-4',
116
+ * },
117
+ * async (span) => {
118
+ * return await openai.chat.completions.create({...});
119
+ * },
120
+ * (response) => ({
121
+ * tokenUsage: {
122
+ * prompt: response.usage?.prompt_tokens,
123
+ * completion: response.usage?.completion_tokens,
124
+ * },
125
+ * responseId: response.id,
126
+ * })
127
+ * );
128
+ * ```
129
+ */
130
+ async function withGenAISpan(ctx, fn, resultExtractor) {
131
+ const tracer = getGenAITracer();
132
+ const spanName = `${ctx.operationName} ${ctx.model}`;
133
+ let parentContext = context.active();
134
+ if (ctx.traceparent) {
135
+ const carrier = { traceparent: ctx.traceparent };
136
+ parentContext = propagation.extract(ROOT_CONTEXT, carrier);
137
+ }
138
+ const spanCallback = async (span) => {
139
+ try {
140
+ const value = await fn(span);
141
+ if (resultExtractor) setGenAIResponseAttributes(span, resultExtractor(value), ctx.sanitizeBodies);
142
+ const valueAsRecord = value;
143
+ if (valueAsRecord && typeof valueAsRecord.error === "string" && valueAsRecord.error) span.setStatus({
144
+ code: SpanStatusCode.ERROR,
145
+ message: valueAsRecord.error
146
+ });
147
+ else span.setStatus({ code: SpanStatusCode.OK });
148
+ return value;
149
+ } catch (error) {
150
+ span.setStatus({
151
+ code: SpanStatusCode.ERROR,
152
+ message: error instanceof Error ? error.message : String(error)
153
+ });
154
+ if (error instanceof Error) span.recordException(error);
155
+ throw error;
156
+ } finally {
157
+ span.end();
158
+ }
159
+ };
160
+ return tracer.startActiveSpan(spanName, {
161
+ kind: SpanKind.CLIENT,
162
+ attributes: buildRequestAttributes(ctx)
163
+ }, parentContext, spanCallback);
164
+ }
165
+ /**
166
+ * Build request attributes for a GenAI span.
167
+ */
168
+ function buildRequestAttributes(ctx) {
169
+ const attrs = {
170
+ [GenAIAttributes.SYSTEM]: ctx.system,
171
+ [GenAIAttributes.OPERATION_NAME]: ctx.operationName,
172
+ [GenAIAttributes.REQUEST_MODEL]: ctx.model,
173
+ [PromptfooAttributes.PROVIDER_ID]: ctx.providerId
174
+ };
175
+ if (ctx.maxTokens !== void 0) attrs[GenAIAttributes.REQUEST_MAX_TOKENS] = ctx.maxTokens;
176
+ if (ctx.temperature !== void 0) attrs[GenAIAttributes.REQUEST_TEMPERATURE] = ctx.temperature;
177
+ if (ctx.topP !== void 0) attrs[GenAIAttributes.REQUEST_TOP_P] = ctx.topP;
178
+ if (ctx.topK !== void 0) attrs[GenAIAttributes.REQUEST_TOP_K] = ctx.topK;
179
+ if (ctx.stopSequences && ctx.stopSequences.length > 0) attrs[GenAIAttributes.REQUEST_STOP_SEQUENCES] = ctx.stopSequences;
180
+ if (ctx.frequencyPenalty !== void 0) attrs[GenAIAttributes.REQUEST_FREQUENCY_PENALTY] = ctx.frequencyPenalty;
181
+ if (ctx.presencePenalty !== void 0) attrs[GenAIAttributes.REQUEST_PRESENCE_PENALTY] = ctx.presencePenalty;
182
+ if (ctx.evalId) attrs[PromptfooAttributes.EVAL_ID] = ctx.evalId;
183
+ if (ctx.testIndex !== void 0) attrs[PromptfooAttributes.TEST_INDEX] = ctx.testIndex;
184
+ if (ctx.promptLabel) attrs[PromptfooAttributes.PROMPT_LABEL] = ctx.promptLabel;
185
+ if (ctx.requestBody) attrs[PromptfooAttributes.REQUEST_BODY] = truncateBody(ctx.requestBody, ctx.sanitizeBodies);
186
+ return attrs;
187
+ }
188
+ /**
189
+ * Sanitize sensitive data from a body string.
190
+ * Redacts API keys, secrets, tokens, and other sensitive patterns.
191
+ */
192
+ function sanitizeBody(body) {
193
+ let sanitized = body;
194
+ for (const { pattern, replacement } of SENSITIVE_PATTERNS) if (typeof replacement === "function") sanitized = sanitized.replace(pattern, replacement);
195
+ else sanitized = sanitized.replace(pattern, replacement);
196
+ return sanitized;
197
+ }
198
+ /**
199
+ * Truncate a body string to MAX_BODY_LENGTH.
200
+ * Optionally sanitizes sensitive data first if sanitize=true.
201
+ *
202
+ * @param body - The body string to process
203
+ * @param sanitize - Whether to sanitize sensitive data (defaults to true)
204
+ */
205
+ function truncateBody(body, sanitize = true) {
206
+ const processed = sanitize ? sanitizeBody(body) : body;
207
+ if (processed.length <= MAX_BODY_LENGTH) return processed;
208
+ return processed.slice(0, MAX_BODY_LENGTH - 15) + "... [truncated]";
209
+ }
210
+ /**
211
+ * Set response attributes on a span after the API call completes.
212
+ *
213
+ * @param span - The span to update
214
+ * @param result - The result data containing token usage and response metadata
215
+ * @param sanitize - Whether to sanitize sensitive data from response body (defaults to true)
216
+ */
217
+ function setGenAIResponseAttributes(span, result, sanitize = true) {
218
+ if (result.tokenUsage) {
219
+ const usage = result.tokenUsage;
220
+ if (usage.prompt !== void 0) span.setAttribute(GenAIAttributes.USAGE_INPUT_TOKENS, usage.prompt);
221
+ if (usage.completion !== void 0) span.setAttribute(GenAIAttributes.USAGE_OUTPUT_TOKENS, usage.completion);
222
+ if (usage.total !== void 0) span.setAttribute(GenAIAttributes.USAGE_TOTAL_TOKENS, usage.total);
223
+ if (usage.cached !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHED_TOKENS, usage.cached);
224
+ if (usage.completionDetails) {
225
+ if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
226
+ if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
227
+ if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
228
+ }
229
+ }
230
+ if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
231
+ if (result.responseId) span.setAttribute(GenAIAttributes.RESPONSE_ID, result.responseId);
232
+ if (result.finishReasons && result.finishReasons.length > 0) span.setAttribute(GenAIAttributes.RESPONSE_FINISH_REASONS, result.finishReasons);
233
+ if (result.cacheHit !== void 0) span.setAttribute(PromptfooAttributes.CACHE_HIT, result.cacheHit);
234
+ if (result.responseBody) span.setAttribute(PromptfooAttributes.RESPONSE_BODY, truncateBody(result.responseBody, sanitize));
235
+ if (result.additionalAttributes) {
236
+ for (const [key, value] of Object.entries(result.additionalAttributes)) if (value !== void 0 && value !== null) if (typeof value === "string") span.setAttribute(key, truncateBody(value, sanitize));
237
+ else span.setAttribute(key, value);
238
+ }
239
+ }
240
+ /**
241
+ * Get the W3C traceparent header value from the current active span.
242
+ * Returns undefined if there is no active span.
243
+ *
244
+ * This can be used to propagate trace context to downstream services.
245
+ */
246
+ function getTraceparent() {
247
+ const activeSpan = trace.getActiveSpan();
248
+ if (!activeSpan) return;
249
+ const ctx = activeSpan.spanContext();
250
+ const traceFlags = ctx.traceFlags.toString(16).padStart(2, "0");
251
+ return `00-${ctx.traceId}-${ctx.spanId}-${traceFlags}`;
252
+ }
253
+ //#endregion
254
+ export { withGenAISpan as n, getTraceparent as t };
255
+
256
+ //# sourceMappingURL=genaiTracer-D3fD9dNV.js.map
@@ -1,6 +1,5 @@
1
- const require_logger = require('./logger-BdZ-IqBc.cjs');
1
+ require("./logger-Cp1GPUjj.cjs");
2
2
  let _opentelemetry_api = require("@opentelemetry/api");
3
-
4
3
  //#region src/tracing/genaiTracer.ts
5
4
  const TRACER_NAME = "promptfoo.providers";
6
5
  const TRACER_VERSION = "1.0.0";
@@ -252,18 +251,18 @@ function getTraceparent() {
252
251
  const traceFlags = ctx.traceFlags.toString(16).padStart(2, "0");
253
252
  return `00-${ctx.traceId}-${ctx.spanId}-${traceFlags}`;
254
253
  }
255
-
256
254
  //#endregion
257
- Object.defineProperty(exports, 'getTraceparent', {
258
- enumerable: true,
259
- get: function () {
260
- return getTraceparent;
261
- }
255
+ Object.defineProperty(exports, "getTraceparent", {
256
+ enumerable: true,
257
+ get: function() {
258
+ return getTraceparent;
259
+ }
262
260
  });
263
- Object.defineProperty(exports, 'withGenAISpan', {
264
- enumerable: true,
265
- get: function () {
266
- return withGenAISpan;
267
- }
261
+ Object.defineProperty(exports, "withGenAISpan", {
262
+ enumerable: true,
263
+ get: function() {
264
+ return withGenAISpan;
265
+ }
268
266
  });
269
- //# sourceMappingURL=genaiTracer-CQlpZkrp.cjs.map
267
+
268
+ //# sourceMappingURL=genaiTracer-DN4dQywX.cjs.map
@@ -0,0 +1,32 @@
1
+ import "./logger-DLcq4dWf.js";
2
+ import "./fetch-4M3YRaqL.js";
3
+ import "./accounts-BgNJDBE6.js";
4
+ import "./server-OAs3nBRT.js";
5
+ import "./tables-xKANLRBD.js";
6
+ import "./esm-CaIwzWR5.js";
7
+ import "./types-CN_TZ2GJ.js";
8
+ import "./utils-dLokC-eR.js";
9
+ import "./store-Ub2vaGJ1.js";
10
+ import "./cache-D3eqDYGU.js";
11
+ import "./blobs-qTYm-1PY.js";
12
+ import "./extractor-YMU_Gvt8.js";
13
+ import "./providers-B3HvufyI.js";
14
+ import "./telemetry-DMb2Mpfm.js";
15
+ import "./genaiTracer-70Z8BIuV.js";
16
+ import "./pythonUtils-D6fwaDSg.js";
17
+ import "./util-5cB-L7U3.js";
18
+ import "./chat-BKm79wib.js";
19
+ import "./transform-DGxXocjk.js";
20
+ import "./messages-D8EA0oDc.js";
21
+ import "./util-ZZH-3QZz.js";
22
+ import { n as getGraderById } from "./graders-R9rYUM0d.js";
23
+ import "./responses-jxdehPkC.js";
24
+ import "./openai-j-sE2O7r.js";
25
+ import "./util-6-GqIvzS.js";
26
+ import "./completion-6Mx_iXxK.js";
27
+ import "./transform-aa6tmVpZ.js";
28
+ import "./base-fEDN28WM.js";
29
+ import "./image-pAX56tPG.js";
30
+ import "./providerRegistry-DM8rZYol.js";
31
+ import "./rubyUtils-BcuGX77l.js";
32
+ export { getGraderById };