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,293 @@
1
+ import { m as calculateCost } from "./fetch-4M3YRaqL.js";
2
+ import { x as parseDataUrl } from "./transform-DGxXocjk.js";
3
+ //#region src/providers/anthropic/util.ts
4
+ const ANTHROPIC_MODELS = [
5
+ ...["claude-sonnet-4-6", "claude-sonnet-4-6-latest"].map((model) => ({
6
+ id: model,
7
+ cost: {
8
+ input: 3 / 1e6,
9
+ output: 15 / 1e6
10
+ }
11
+ })),
12
+ ...["claude-opus-4-6", "claude-opus-4-6-latest"].map((model) => ({
13
+ id: model,
14
+ cost: {
15
+ input: 5 / 1e6,
16
+ output: 25 / 1e6
17
+ }
18
+ })),
19
+ ...["claude-opus-4-5-20251101", "claude-opus-4-5-latest"].map((model) => ({
20
+ id: model,
21
+ cost: {
22
+ input: 5 / 1e6,
23
+ output: 25 / 1e6
24
+ }
25
+ })),
26
+ ...[
27
+ "claude-opus-4-1-20250805",
28
+ "claude-opus-4-20250514",
29
+ "claude-opus-4-0",
30
+ "claude-opus-4-latest"
31
+ ].map((model) => ({
32
+ id: model,
33
+ cost: {
34
+ input: 15 / 1e6,
35
+ output: 75 / 1e6
36
+ }
37
+ })),
38
+ ...[
39
+ "claude-sonnet-4-5-20250929",
40
+ "claude-sonnet-4-5-latest",
41
+ "claude-sonnet-4-20250514",
42
+ "claude-sonnet-4-0",
43
+ "claude-sonnet-4-latest"
44
+ ].map((model) => ({
45
+ id: model,
46
+ cost: {
47
+ input: 3 / 1e6,
48
+ output: 15 / 1e6
49
+ }
50
+ })),
51
+ ...["claude-haiku-4-5-20251001", "claude-haiku-4-5-latest"].map((model) => ({
52
+ id: model,
53
+ cost: {
54
+ input: 1 / 1e6,
55
+ output: 5 / 1e6
56
+ }
57
+ })),
58
+ ...["claude-2.0"].map((model) => ({
59
+ id: model,
60
+ cost: {
61
+ input: .008 / 1e3,
62
+ output: .024 / 1e3
63
+ }
64
+ })),
65
+ ...["claude-2.1"].map((model) => ({
66
+ id: model,
67
+ cost: {
68
+ input: .008 / 1e3,
69
+ output: .024 / 1e3
70
+ }
71
+ })),
72
+ ...["claude-3-haiku-20240307", "claude-3-haiku-latest"].map((model) => ({
73
+ id: model,
74
+ cost: {
75
+ input: 25e-5 / 1e3,
76
+ output: .00125 / 1e3
77
+ }
78
+ })),
79
+ ...["claude-3-opus-20240229", "claude-3-opus-latest"].map((model) => ({
80
+ id: model,
81
+ cost: {
82
+ input: .015 / 1e3,
83
+ output: .075 / 1e3
84
+ }
85
+ })),
86
+ ...["claude-3-5-haiku-20241022", "claude-3-5-haiku-latest"].map((model) => ({
87
+ id: model,
88
+ cost: {
89
+ input: .8 / 1e6,
90
+ output: 4 / 1e6
91
+ }
92
+ })),
93
+ ...[
94
+ "claude-3-5-sonnet-20240620",
95
+ "claude-3-5-sonnet-20241022",
96
+ "claude-3-5-sonnet-latest",
97
+ "claude-3-7-sonnet-20250219",
98
+ "claude-3-7-sonnet-latest"
99
+ ].map((model) => ({
100
+ id: model,
101
+ cost: {
102
+ input: 3 / 1e6,
103
+ output: 15 / 1e6
104
+ }
105
+ }))
106
+ ];
107
+ function outputFromMessage(message, showThinking) {
108
+ const hasToolUse = message.content.some((block) => block.type === "tool_use");
109
+ const hasThinking = message.content.some((block) => block.type === "thinking" || block.type === "redacted_thinking");
110
+ if (hasToolUse || hasThinking) return message.content.map((block) => {
111
+ if (block.type === "text") return block.text;
112
+ else if (block.type === "thinking" && showThinking) return `Thinking: ${block.thinking}\nSignature: ${block.signature}`;
113
+ else if (block.type === "redacted_thinking" && showThinking) return `Redacted Thinking: ${block.data}`;
114
+ else if (block.type !== "thinking" && block.type !== "redacted_thinking") return JSON.stringify(block);
115
+ return "";
116
+ }).filter((text) => text !== "").join("\n\n");
117
+ return message.content.map((block) => {
118
+ return block.text;
119
+ }).join("\n\n");
120
+ }
121
+ /**
122
+ * Automatically extracts base64 data from data URLs for Anthropic image content.
123
+ * This ensures compatibility with our universal data URL generation without requiring
124
+ * users to modify their prompt templates with Nunjucks filters.
125
+ */
126
+ function processAnthropicImageContent(content) {
127
+ return content.map((item) => {
128
+ if (item.type === "image" && item.source && item.source.type === "base64") {
129
+ const parsed = parseDataUrl(item.source.data);
130
+ if (parsed) return {
131
+ ...item,
132
+ source: {
133
+ ...item.source,
134
+ media_type: item.source.media_type || parsed.mimeType,
135
+ data: parsed.base64Data
136
+ }
137
+ };
138
+ }
139
+ return item;
140
+ });
141
+ }
142
+ function parseMessages(messages) {
143
+ try {
144
+ const parsed = JSON.parse(messages);
145
+ if (Array.isArray(parsed)) {
146
+ const systemMessage = parsed.find((msg) => msg.role === "system");
147
+ const thinking = parsed.find((msg) => msg.thinking)?.thinking;
148
+ return {
149
+ extractedMessages: parsed.filter((msg) => msg.role && msg.role !== "system").map((msg) => ({
150
+ role: msg.role,
151
+ content: Array.isArray(msg.content) ? processAnthropicImageContent(msg.content) : [{
152
+ type: "text",
153
+ text: msg.content
154
+ }]
155
+ })),
156
+ system: systemMessage ? Array.isArray(systemMessage.content) ? systemMessage.content : [{
157
+ type: "text",
158
+ text: systemMessage.content
159
+ }] : void 0,
160
+ thinking
161
+ };
162
+ }
163
+ } catch {}
164
+ const lines = messages.split("\n").map((line) => line.trim()).filter((line) => line);
165
+ let system;
166
+ let thinking;
167
+ const extractedMessages = [];
168
+ let currentRole = null;
169
+ let currentContent = [];
170
+ const pushMessage = () => {
171
+ if (currentRole && currentContent.length > 0) {
172
+ extractedMessages.push({
173
+ role: currentRole,
174
+ content: [{
175
+ type: "text",
176
+ text: currentContent.join("\n")
177
+ }]
178
+ });
179
+ currentContent = [];
180
+ }
181
+ };
182
+ for (const line of lines) if (line.startsWith("system:")) system = [{
183
+ type: "text",
184
+ text: line.slice(7).trim()
185
+ }];
186
+ else if (line.startsWith("thinking:")) try {
187
+ thinking = JSON.parse(line.slice(9).trim());
188
+ } catch {}
189
+ else if (line.startsWith("user:") || line.startsWith("assistant:")) {
190
+ pushMessage();
191
+ currentRole = line.startsWith("user:") ? "user" : "assistant";
192
+ currentContent.push(line.slice(line.indexOf(":") + 1).trim());
193
+ } else if (currentRole) currentContent.push(line);
194
+ else {
195
+ currentRole = "user";
196
+ currentContent.push(line);
197
+ }
198
+ pushMessage();
199
+ if (extractedMessages.length === 0 && !system) extractedMessages.push({
200
+ role: "user",
201
+ content: [{
202
+ type: "text",
203
+ text: messages.trim()
204
+ }]
205
+ });
206
+ return {
207
+ system,
208
+ extractedMessages,
209
+ thinking
210
+ };
211
+ }
212
+ function calculateAnthropicCost(modelName, config, promptTokens, completionTokens) {
213
+ if ([
214
+ "claude-sonnet-4-5-20250929",
215
+ "claude-sonnet-4-5-latest",
216
+ "claude-sonnet-4-6",
217
+ "claude-sonnet-4-6-latest"
218
+ ].includes(modelName) && Number.isFinite(promptTokens) && Number.isFinite(completionTokens) && typeof promptTokens !== "undefined" && typeof completionTokens !== "undefined") {
219
+ const inputCost = config.cost ?? (promptTokens > 2e5 ? 6 / 1e6 : 3 / 1e6);
220
+ const outputCost = config.cost ?? (promptTokens > 2e5 ? 22.5 / 1e6 : 15 / 1e6);
221
+ return inputCost * promptTokens + outputCost * completionTokens;
222
+ }
223
+ return calculateCost(modelName, config, promptTokens, completionTokens, ANTHROPIC_MODELS);
224
+ }
225
+ function getTokenUsage(data, cached) {
226
+ if (data.usage) {
227
+ const total_tokens = data.usage.input_tokens + data.usage.output_tokens;
228
+ if (cached) return {
229
+ cached: total_tokens,
230
+ total: total_tokens
231
+ };
232
+ else return {
233
+ total: total_tokens,
234
+ prompt: data.usage.input_tokens || 0,
235
+ completion: data.usage.output_tokens || 0
236
+ };
237
+ }
238
+ return {};
239
+ }
240
+ /**
241
+ * Processes tools configuration to handle web fetch and web search tools
242
+ */
243
+ function processAnthropicTools(tools = []) {
244
+ const processedTools = [];
245
+ const requiredBetaFeatures = [];
246
+ for (const tool of tools) if ("type" in tool) if (tool.type === "web_fetch_20250910") {
247
+ processedTools.push(transformWebFetchTool(tool));
248
+ if (!requiredBetaFeatures.includes("web-fetch-2025-09-10")) requiredBetaFeatures.push("web-fetch-2025-09-10");
249
+ } else if (tool.type === "web_search_20250305") processedTools.push(transformWebSearchTool(tool));
250
+ else processedTools.push(tool);
251
+ else {
252
+ processedTools.push(tool);
253
+ if ("strict" in tool && tool.strict === true) {
254
+ if (!requiredBetaFeatures.includes("structured-outputs-2025-11-13")) requiredBetaFeatures.push("structured-outputs-2025-11-13");
255
+ }
256
+ }
257
+ return {
258
+ processedTools,
259
+ requiredBetaFeatures
260
+ };
261
+ }
262
+ /**
263
+ * Transform web fetch tool config to Anthropic beta tool format
264
+ */
265
+ function transformWebFetchTool(config) {
266
+ const tool = {
267
+ type: "web_fetch_20250910",
268
+ name: "web_fetch"
269
+ };
270
+ if (config.max_uses !== void 0) tool.max_uses = config.max_uses;
271
+ if (config.allowed_domains) tool.allowed_domains = config.allowed_domains;
272
+ if (config.blocked_domains) tool.blocked_domains = config.blocked_domains;
273
+ if (config.citations) tool.citations = config.citations;
274
+ if (config.max_content_tokens !== void 0) tool.max_content_tokens = config.max_content_tokens;
275
+ if (config.cache_control) tool.cache_control = config.cache_control;
276
+ return tool;
277
+ }
278
+ /**
279
+ * Transform web search tool config to Anthropic beta tool format
280
+ */
281
+ function transformWebSearchTool(config) {
282
+ const tool = {
283
+ type: "web_search_20250305",
284
+ name: "web_search"
285
+ };
286
+ if (config.max_uses !== void 0) tool.max_uses = config.max_uses;
287
+ if (config.cache_control) tool.cache_control = config.cache_control;
288
+ return tool;
289
+ }
290
+ //#endregion
291
+ export { parseMessages as a, outputFromMessage as i, calculateAnthropicCost as n, processAnthropicTools as o, getTokenUsage as r, ANTHROPIC_MODELS as t };
292
+
293
+ //# sourceMappingURL=util-ZZH-3QZz.js.map
@@ -1,6 +1,5 @@
1
- const require_logger = require('./logger-BdZ-IqBc.cjs');
2
- const require_extractor = require('./extractor-DbhlYEeo.cjs');
3
-
1
+ const require_logger = require("./logger-Cp1GPUjj.cjs");
2
+ const require_createHash = require("./createHash-CfZSc0b4.cjs");
4
3
  //#region src/prompts/constants.ts
5
4
  const PROMPT_DELIMITER = require_logger.getEnvString("PROMPTFOO_PROMPT_SEPARATOR") || "---";
6
5
  const VALID_FILE_EXTENSIONS = [
@@ -19,7 +18,6 @@ const VALID_FILE_EXTENSIONS = [
19
18
  ".yml",
20
19
  ".yaml"
21
20
  ];
22
-
23
21
  //#endregion
24
22
  //#region src/models/prompt.ts
25
23
  /**
@@ -34,11 +32,10 @@ const VALID_FILE_EXTENSIONS = [
34
32
  * @returns A SHA-256 hash string
35
33
  */
36
34
  function generateIdFromPrompt(prompt) {
37
- if (prompt.label) return require_extractor.sha256(prompt.label);
38
- if (prompt.id) return require_extractor.sha256(prompt.id);
39
- return require_extractor.sha256(typeof prompt.raw === "object" ? JSON.stringify(prompt.raw) : prompt.raw);
35
+ if (prompt.label) return require_createHash.sha256(prompt.label);
36
+ if (prompt.id) return require_createHash.sha256(prompt.id);
37
+ return require_createHash.sha256(typeof prompt.raw === "object" ? JSON.stringify(prompt.raw) : prompt.raw);
40
38
  }
41
-
42
39
  //#endregion
43
40
  //#region src/prompts/utils.ts
44
41
  /**
@@ -91,36 +88,36 @@ function normalizeInput(promptPathOrGlobs) {
91
88
  function hashPrompt(prompt) {
92
89
  return generateIdFromPrompt(prompt);
93
90
  }
94
-
95
91
  //#endregion
96
- Object.defineProperty(exports, 'PROMPT_DELIMITER', {
97
- enumerable: true,
98
- get: function () {
99
- return PROMPT_DELIMITER;
100
- }
92
+ Object.defineProperty(exports, "PROMPT_DELIMITER", {
93
+ enumerable: true,
94
+ get: function() {
95
+ return PROMPT_DELIMITER;
96
+ }
101
97
  });
102
- Object.defineProperty(exports, 'generateIdFromPrompt', {
103
- enumerable: true,
104
- get: function () {
105
- return generateIdFromPrompt;
106
- }
98
+ Object.defineProperty(exports, "generateIdFromPrompt", {
99
+ enumerable: true,
100
+ get: function() {
101
+ return generateIdFromPrompt;
102
+ }
107
103
  });
108
- Object.defineProperty(exports, 'hashPrompt', {
109
- enumerable: true,
110
- get: function () {
111
- return hashPrompt;
112
- }
104
+ Object.defineProperty(exports, "hashPrompt", {
105
+ enumerable: true,
106
+ get: function() {
107
+ return hashPrompt;
108
+ }
113
109
  });
114
- Object.defineProperty(exports, 'maybeFilePath', {
115
- enumerable: true,
116
- get: function () {
117
- return maybeFilePath;
118
- }
110
+ Object.defineProperty(exports, "maybeFilePath", {
111
+ enumerable: true,
112
+ get: function() {
113
+ return maybeFilePath;
114
+ }
119
115
  });
120
- Object.defineProperty(exports, 'normalizeInput', {
121
- enumerable: true,
122
- get: function () {
123
- return normalizeInput;
124
- }
116
+ Object.defineProperty(exports, "normalizeInput", {
117
+ enumerable: true,
118
+ get: function() {
119
+ return normalizeInput;
120
+ }
125
121
  });
126
- //# sourceMappingURL=utils-DFaZa6Rf.cjs.map
122
+
123
+ //# sourceMappingURL=utils-Cz9qXqII.cjs.map
@@ -1,6 +1,5 @@
1
- import { b as getEnvString } from "./logger-w8Ozp0Td.js";
2
- import { a as sha256 } from "./extractor-Hs7la_19.js";
3
-
1
+ import { b as getEnvString } from "./logger-CT3IKMKA.js";
2
+ import { n as sha256 } from "./createHash-DmPQkvBh.js";
4
3
  //#region src/prompts/constants.ts
5
4
  const PROMPT_DELIMITER = getEnvString("PROMPTFOO_PROMPT_SEPARATOR") || "---";
6
5
  const VALID_FILE_EXTENSIONS = [
@@ -19,7 +18,6 @@ const VALID_FILE_EXTENSIONS = [
19
18
  ".yml",
20
19
  ".yaml"
21
20
  ];
22
-
23
21
  //#endregion
24
22
  //#region src/models/prompt.ts
25
23
  /**
@@ -38,7 +36,6 @@ function generateIdFromPrompt(prompt) {
38
36
  if (prompt.id) return sha256(prompt.id);
39
37
  return sha256(typeof prompt.raw === "object" ? JSON.stringify(prompt.raw) : prompt.raw);
40
38
  }
41
-
42
39
  //#endregion
43
40
  //#region src/prompts/utils.ts
44
41
  /**
@@ -91,7 +88,7 @@ function normalizeInput(promptPathOrGlobs) {
91
88
  function hashPrompt(prompt) {
92
89
  return generateIdFromPrompt(prompt);
93
90
  }
94
-
95
91
  //#endregion
96
92
  export { PROMPT_DELIMITER as a, generateIdFromPrompt as i, maybeFilePath as n, normalizeInput as r, hashPrompt as t };
97
- //# sourceMappingURL=utils-CVzb4YiI.js.map
93
+
94
+ //# sourceMappingURL=utils-XiOAgly5.js.map
@@ -0,0 +1,94 @@
1
+ import { b as getEnvString } from "./logger-DLcq4dWf.js";
2
+ import { n as sha256 } from "./createHash-CTQmL3G2.js";
3
+ //#region src/models/prompt.ts
4
+ /**
5
+ * Generates a unique identifier for a prompt based on its properties.
6
+ *
7
+ * Priority order:
8
+ * 1. If label is truthy, hash the label
9
+ * 2. If id is truthy, hash the id
10
+ * 3. Otherwise, hash the raw content (stringified if object)
11
+ *
12
+ * @param prompt - The prompt object to generate an ID for
13
+ * @returns A SHA-256 hash string
14
+ */
15
+ function generateIdFromPrompt(prompt) {
16
+ if (prompt.label) return sha256(prompt.label);
17
+ if (prompt.id) return sha256(prompt.id);
18
+ return sha256(typeof prompt.raw === "object" ? JSON.stringify(prompt.raw) : prompt.raw);
19
+ }
20
+ //#endregion
21
+ //#region src/prompts/constants.ts
22
+ const PROMPT_DELIMITER = getEnvString("PROMPTFOO_PROMPT_SEPARATOR") || "---";
23
+ const VALID_FILE_EXTENSIONS = [
24
+ ".cjs",
25
+ ".cts",
26
+ ".j2",
27
+ ".js",
28
+ ".json",
29
+ ".jsonl",
30
+ ".md",
31
+ ".mjs",
32
+ ".mts",
33
+ ".py",
34
+ ".ts",
35
+ ".txt",
36
+ ".yml",
37
+ ".yaml"
38
+ ];
39
+ //#endregion
40
+ //#region src/prompts/utils.ts
41
+ /**
42
+ * Determines if a string is a valid file path.
43
+ * @param str - The string to check.
44
+ * @returns True if the string is a valid file path, false otherwise.
45
+ */
46
+ function maybeFilePath(str) {
47
+ if (typeof str !== "string") throw new Error(`Invalid input: ${JSON.stringify(str)}`);
48
+ if ([
49
+ "\n",
50
+ "portkey://",
51
+ "langfuse://",
52
+ "helicone://"
53
+ ].some((substring) => str.includes(substring))) return false;
54
+ return str.startsWith("file://") || VALID_FILE_EXTENSIONS.some((ext) => {
55
+ const tokens = str.split(":");
56
+ return tokens.pop()?.endsWith(ext) || tokens.pop()?.endsWith(ext);
57
+ }) || str.charAt(str.length - 3) === "." || str.charAt(str.length - 4) === "." || str.includes("*") || str.includes("/") || str.includes("\\");
58
+ }
59
+ /**
60
+ * Normalizes the input prompt to an array of prompts, rejecting invalid and empty inputs.
61
+ * @param promptPathOrGlobs - The input prompt.
62
+ * @returns The normalized prompts.
63
+ * @throws If the input is invalid or empty.
64
+ */
65
+ function normalizeInput(promptPathOrGlobs) {
66
+ if (!promptPathOrGlobs || (typeof promptPathOrGlobs === "string" || Array.isArray(promptPathOrGlobs)) && promptPathOrGlobs.length === 0) throw new Error(`Invalid input prompt: ${JSON.stringify(promptPathOrGlobs)}`);
67
+ if (typeof promptPathOrGlobs === "string") return [{ raw: promptPathOrGlobs }];
68
+ if (Array.isArray(promptPathOrGlobs)) return promptPathOrGlobs.map((promptPathOrGlob, _index) => {
69
+ if (typeof promptPathOrGlob === "string") return { raw: promptPathOrGlob };
70
+ return {
71
+ raw: promptPathOrGlob.raw || promptPathOrGlob.id,
72
+ ...promptPathOrGlob
73
+ };
74
+ });
75
+ if (typeof promptPathOrGlobs === "object" && Object.keys(promptPathOrGlobs).length) return Object.entries(promptPathOrGlobs).map(([raw, key]) => ({
76
+ label: key,
77
+ raw
78
+ }));
79
+ throw new Error(`Invalid input prompt: ${JSON.stringify(promptPathOrGlobs)}`);
80
+ }
81
+ /**
82
+ * Generates a hash identifier for a prompt.
83
+ * This is an alias for generateIdFromPrompt for backward compatibility.
84
+ *
85
+ * @param prompt - The prompt to hash
86
+ * @returns A SHA-256 hash string
87
+ */
88
+ function hashPrompt(prompt) {
89
+ return generateIdFromPrompt(prompt);
90
+ }
91
+ //#endregion
92
+ export { generateIdFromPrompt as a, PROMPT_DELIMITER as i, maybeFilePath as n, normalizeInput as r, hashPrompt as t };
93
+
94
+ //# sourceMappingURL=utils-dLokC-eR.js.map
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { C as getEnvString } from "./logger-BotXmWKW.js";
3
- import { a as sha256 } from "./extractor-LSYjrhK0.js";
4
-
2
+ import { C as getEnvString } from "./logger-KkObSCzq.js";
3
+ import { n as sha256 } from "./createHash-Da8fMwqB.js";
5
4
  //#region src/prompts/constants.ts
6
5
  const PROMPT_DELIMITER = getEnvString("PROMPTFOO_PROMPT_SEPARATOR") || "---";
7
6
  const VALID_FILE_EXTENSIONS = [
@@ -20,7 +19,6 @@ const VALID_FILE_EXTENSIONS = [
20
19
  ".yml",
21
20
  ".yaml"
22
21
  ];
23
-
24
22
  //#endregion
25
23
  //#region src/models/prompt.ts
26
24
  /**
@@ -39,7 +37,6 @@ function generateIdFromPrompt(prompt) {
39
37
  if (prompt.id) return sha256(prompt.id);
40
38
  return sha256(typeof prompt.raw === "object" ? JSON.stringify(prompt.raw) : prompt.raw);
41
39
  }
42
-
43
40
  //#endregion
44
41
  //#region src/prompts/utils.ts
45
42
  /**
@@ -92,7 +89,7 @@ function normalizeInput(promptPathOrGlobs) {
92
89
  function hashPrompt(prompt) {
93
90
  return generateIdFromPrompt(prompt);
94
91
  }
95
-
96
92
  //#endregion
97
93
  export { PROMPT_DELIMITER as a, generateIdFromPrompt as i, maybeFilePath as n, normalizeInput as r, hashPrompt as t };
98
- //# sourceMappingURL=utils-JaY9veb5.js.map
94
+
95
+ //# sourceMappingURL=utils-f2-Moju7.js.map