promptfoo 0.120.27 → 0.121.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/README.md +1 -1
  2. package/dist/src/{ListApp-8WOe2nT6.js → ListApp-Du7YVwj5.js} +2 -4
  3. package/dist/src/accounts-BgNJDBE6.js +206 -0
  4. package/dist/src/{accounts-Fl2J3_Fu.cjs → accounts-Bx-x3bmW.cjs} +77 -78
  5. package/dist/src/{accounts-DVINui-2.js → accounts-CMqkzrVf.js} +39 -34
  6. package/dist/src/{accounts-CPDRAMND.js → accounts-xrUGFA6n.js} +38 -33
  7. package/dist/src/{agentic-utils-D922n6mm.js → agentic-utils-BKIN5PKu.js} +9 -10
  8. package/dist/src/{agents-BO2n8Z0d.cjs → agents-B0f4HICh.cjs} +37 -40
  9. package/dist/src/{agents-BXLmVsxR.js → agents-C-dDThPK.js} +37 -37
  10. package/dist/src/{agents-DgJf2-ez.cjs → agents-CErsqg5U.cjs} +16 -17
  11. package/dist/src/{agents-BcsN_BgB.js → agents-CVIn-Utx.js} +16 -12
  12. package/dist/src/{agents-hqgSV-3o.js → agents-CXknwsFX.js} +37 -40
  13. package/dist/src/{agents-pMfppv9Z.js → agents-DeH4Gu94.js} +18 -18
  14. package/dist/src/{agents-BdUTAwi-.js → agents-Dy2YpZpa.js} +38 -41
  15. package/dist/src/{agents-DNvSH78i.js → agents-aF4-T121.js} +16 -20
  16. package/dist/src/{aimlapi-DOib86oE.js → aimlapi-BAGZDo5G.js} +16 -18
  17. package/dist/src/{aimlapi-DtgPI0nE.js → aimlapi-BNfTBexL.js} +15 -17
  18. package/dist/src/{aimlapi-DTPACCB1.js → aimlapi-DHRKlBEA.js} +15 -4
  19. package/dist/src/{aimlapi-BE_Tg9Fl.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
  20. package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
  21. package/dist/src/app/index.html +1 -1
  22. package/dist/src/{audio-BRYU0BFo.js → audio-BRODU0UK.js} +7 -9
  23. package/dist/src/{audio-Cwo68yZS.cjs → audio-BWeaWovU.cjs} +6 -7
  24. package/dist/src/{audio-BnRUGAm_.js → audio-CHQ4r-RV.js} +6 -5
  25. package/dist/src/{audio-MSRki4JU.js → audio-tf_NBjlC.js} +6 -8
  26. package/dist/src/{base-h961VXYk.js → base-B0tcrnq_.js} +11 -13
  27. package/dist/src/{base-XB2tDJrB.js → base-B4QJRyFS.js} +11 -13
  28. package/dist/src/{base-pGVmXNl4.cjs → base-DBtwl2FR.cjs} +36 -38
  29. package/dist/src/base-fEDN28WM.js +193 -0
  30. package/dist/src/{blobs-BM_e6hCa.js → blobs-BAU-dXan.js} +9 -12
  31. package/dist/src/{blobs-CR5C4Ihh.js → blobs-Bpg5rH6i.js} +9 -12
  32. package/dist/src/{blobs-B-KQAFhX.cjs → blobs-DvS-O6be.cjs} +34 -37
  33. package/dist/src/blobs-qTYm-1PY.js +236 -0
  34. package/dist/src/{cache-CIpsoBZR.js → cache-8XhNqPKW.js} +64 -67
  35. package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
  36. package/dist/src/cache-BwsMSda7.js +6 -0
  37. package/dist/src/{cache-jsiwsAJv.js → cache-CG0SlR1d.js} +64 -66
  38. package/dist/src/{cache-BTVYfbka.cjs → cache-COish3-W.cjs} +114 -117
  39. package/dist/src/cache-D3eqDYGU.js +739 -0
  40. package/dist/src/{chat-D31K7C4u.cjs → chat-2K608PeQ.cjs} +20 -21
  41. package/dist/src/chat-BKm79wib.js +764 -0
  42. package/dist/src/{chat-B84t99NW.js → chat-CM_kyI8B.js} +20 -9
  43. package/dist/src/{chat-BcPjZXIp.js → chat-CRWNNq73.js} +41 -44
  44. package/dist/src/{chat-CcUCysjU.js → chat-CznLWr_D.js} +41 -44
  45. package/dist/src/{chat-DwWifjxi.js → chat-DHMH-N64.js} +20 -22
  46. package/dist/src/{chat-BE44YOc6.cjs → chat-DaqekjFr.cjs} +61 -64
  47. package/dist/src/{chat-DZM2GUHO.js → chat-DxysjBvt.js} +21 -23
  48. package/dist/src/{chatkit-D67HS_0b.js → chatkit-65VXf5SR.js} +58 -58
  49. package/dist/src/{chatkit-DAB_qfzI.js → chatkit-Be-Q-a9F.js} +58 -60
  50. package/dist/src/{chatkit-Biqb_wsD.js → chatkit-BxFvW8KY.js} +58 -60
  51. package/dist/src/{chatkit-PGG4ZYIn.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
  52. package/dist/src/chunk-DEq-mXcV.js +15 -0
  53. package/dist/src/chunk-DRamLcfz.js +16 -0
  54. package/dist/src/{claude-agent-sdk-SVM6AdBu.js → claude-agent-sdk-BLTu0WBO.js} +31 -31
  55. package/dist/src/{claude-agent-sdk-C9SiaQub.cjs → claude-agent-sdk-CJH22shf.cjs} +31 -28
  56. package/dist/src/{claude-agent-sdk-C-IOTPfo.js → claude-agent-sdk-D6_k9FKA.js} +31 -29
  57. package/dist/src/{claude-agent-sdk-CiluSyW1.js → claude-agent-sdk-Dy5lT-Tx.js} +33 -20
  58. package/dist/src/{cloud-CZ-q9Ier.js → cloud-Bc9526yV.js} +7 -9
  59. package/dist/src/cloud-DmE0EwsY.js +4 -0
  60. package/dist/src/{cloudflare-ai-BahKHyhh.js → cloudflare-ai-C9r2sRhw.js} +16 -18
  61. package/dist/src/{cloudflare-ai-Dxyt50Nl.js → cloudflare-ai-CWWJCRim.js} +16 -4
  62. package/dist/src/{cloudflare-ai-Dfahv5SY.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
  63. package/dist/src/{cloudflare-ai-v_qZD6_q.js → cloudflare-ai-ICsOuD-z.js} +17 -19
  64. package/dist/src/{cloudflare-gateway-BPWoZIzJ.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
  65. package/dist/src/{cloudflare-gateway-Bi_FpOFy.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
  66. package/dist/src/{cloudflare-gateway-btS7h1OZ.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
  67. package/dist/src/{cloudflare-gateway-C0guUNwk.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
  68. package/dist/src/{codex-sdk-DSxAnbfT.js → codex-sdk-C6UMlxwV.js} +28 -29
  69. package/dist/src/{codex-sdk-IYVi9fuM.js → codex-sdk-DUwKWezN.js} +28 -27
  70. package/dist/src/{codex-sdk-DulY0ZRq.js → codex-sdk-GGAw0qbD.js} +28 -29
  71. package/dist/src/{codex-sdk-DFKMtAyf.cjs → codex-sdk-fAO0c3yA.cjs} +28 -29
  72. package/dist/src/{cometapi-DkNBMk0G.js → cometapi-BasUi7-_.js} +17 -19
  73. package/dist/src/{cometapi-DzrR3SR_.js → cometapi-Bbjp5V4x.js} +16 -4
  74. package/dist/src/{cometapi-C9EEpJzT.js → cometapi-DkXrKi5z.js} +21 -24
  75. package/dist/src/{cometapi-DIO64tf4.cjs → cometapi-vY6aDZgo.cjs} +21 -22
  76. package/dist/src/{completion-CG29bfKX.js → completion-6Mx_iXxK.js} +11 -13
  77. package/dist/src/{completion-Bgf1VJoq.js → completion-C5rtR_9P.js} +11 -13
  78. package/dist/src/{completion-CCRT4kX1.cjs → completion-CDOouNzq.cjs} +21 -23
  79. package/dist/src/completion-C_P3ypkJ.js +120 -0
  80. package/dist/src/{createHash-Dw_iLu31.js → createHash-CTQmL3G2.js} +2 -3
  81. package/dist/src/{createHash-CYQy4YeL.cjs → createHash-CfZSc0b4.cjs} +13 -14
  82. package/dist/src/{createHash-CJcfskIZ.js → createHash-Da8fMwqB.js} +2 -3
  83. package/dist/src/createHash-DmPQkvBh.js +15 -0
  84. package/dist/src/{docker-D-ayp2FW.js → docker-5KcG-_86.js} +18 -20
  85. package/dist/src/{docker-DNcLR4Ig.cjs → docker-BwsKwxFs.cjs} +18 -19
  86. package/dist/src/{docker-egERKxCF.js → docker-CZnqU1XV.js} +18 -7
  87. package/dist/src/{docker-B81N0t4e.js → docker-DzxyDPIj.js} +19 -21
  88. package/dist/src/entrypoint.js +2 -3
  89. package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
  90. package/dist/src/{esm-B9dPm_BF.js → esm-C03C-mv3.js} +17 -20
  91. package/dist/src/{esm-D2pZ87fL.js → esm-CaIwzWR5.js} +18 -21
  92. package/dist/src/esm-Cd1AjG1D.js +379 -0
  93. package/dist/src/{esm-Ct-Joyue.cjs → esm-CnNt7sI4.cjs} +47 -49
  94. package/dist/src/eval-17JizQIv.js +15 -0
  95. package/dist/src/{eval-C-Nr6wX_.js → eval-DmFyWU7i.js} +47 -54
  96. package/dist/src/{evalResult-4BzI2tmj.js → evalResult-CDQiuUuf.js} +16 -12
  97. package/dist/src/{evalResult-DXMWJ3sx.js → evalResult-CTG2AHOS.js} +10 -11
  98. package/dist/src/evalResult-Cqj8pldJ.js +12 -0
  99. package/dist/src/{evalResult-CX8wQecI.cjs → evalResult-Dap2CekP.cjs} +20 -21
  100. package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
  101. package/dist/src/evalResult-Hftn-S_i.js +10 -0
  102. package/dist/src/evaluator-B2CFNt-P.js +36 -0
  103. package/dist/src/{evaluator-8aGyV12L.js → evaluator-DPFRbFIL.js} +201 -229
  104. package/dist/src/{extractor-CD5yKL-G.js → extractor-CFG6bcWJ.js} +22 -24
  105. package/dist/src/{extractor-C031XmTA.cjs → extractor-DX36oYEv.cjs} +37 -39
  106. package/dist/src/{extractor-V5x_m1i0.js → extractor-M67RUtg6.js} +22 -24
  107. package/dist/src/extractor-YMU_Gvt8.js +374 -0
  108. package/dist/src/{fetch-D3OHf-lV.js → fetch-4M3YRaqL.js} +40 -45
  109. package/dist/src/fetch-60Gzydls.js +777 -0
  110. package/dist/src/{fetch-CXZI9RRr.js → fetch-BMv0O527.js} +23 -35
  111. package/dist/src/{fetch-BmbD-v1L.cjs → fetch-BxUk8odA.cjs} +244 -277
  112. package/dist/src/fetch-KV5kNASw.js +5 -0
  113. package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
  114. package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
  115. package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
  116. package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
  117. package/dist/src/{formatDuration-CdevI3An.js → formatDuration-DgBVMN65.js} +2 -2
  118. package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
  119. package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
  120. package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
  121. package/dist/src/{genaiTracer-Dres3qrN.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
  122. package/dist/src/graders-Bu0H9nXi.js +32 -0
  123. package/dist/src/{graders-DTeBrzWp.js → graders-CHO8EPM4.js} +349 -397
  124. package/dist/src/graders-Cfhkvx-e.js +34 -0
  125. package/dist/src/{graders--1y2u9HO.js → graders-CpdqD9PI.js} +349 -397
  126. package/dist/src/graders-DClJVpGP.cjs +32 -0
  127. package/dist/src/{graders-DohM2dir.cjs → graders-DOXycdlG.cjs} +684 -732
  128. package/dist/src/graders-DcnJsrMO.js +32 -0
  129. package/dist/src/graders-R9rYUM0d.js +13466 -0
  130. package/dist/src/{image-C3wHC9_h.js → image-BmEZqVmk.js} +9 -10
  131. package/dist/src/{image-O1u4bCFg.js → image-CBBVXWuT.js} +9 -10
  132. package/dist/src/{image-DpKl2F15.cjs → image-CDLQOcqT.cjs} +6 -7
  133. package/dist/src/{image-DmE-niFE.js → image-DJEvKveK.js} +6 -5
  134. package/dist/src/{image-CuKHuccK.cjs → image-DTedmQPg.cjs} +29 -30
  135. package/dist/src/{image-B0U4Hqll.js → image-gvmivTEe.js} +7 -9
  136. package/dist/src/image-pAX56tPG.js +257 -0
  137. package/dist/src/{image-DNEIf_aI.js → image-tL5hIOFh.js} +6 -8
  138. package/dist/src/index.cjs +605 -689
  139. package/dist/src/index.d.cts +11 -7
  140. package/dist/src/index.d.ts +11 -3
  141. package/dist/src/index.js +570 -658
  142. package/dist/src/{interactiveCheck-Bxj1Swex.js → interactiveCheck-BgLZUIt3.js} +7 -8
  143. package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
  144. package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
  145. package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
  146. package/dist/src/invariant-vgHWClmd.js +25 -0
  147. package/dist/src/{knowledgeBase-Be_zyW4L.js → knowledgeBase-CLJybhnF.js} +16 -16
  148. package/dist/src/{knowledgeBase-CEzQobWX.js → knowledgeBase-CoU-UQBg.js} +14 -9
  149. package/dist/src/{knowledgeBase-BZ41IFwq.js → knowledgeBase-DjWPVqSb.js} +14 -18
  150. package/dist/src/{knowledgeBase-D-5BMXlr.cjs → knowledgeBase-wkxuRFhA.cjs} +14 -15
  151. package/dist/src/{litellm-DnbRJ2if.js → litellm-B9Hysuri.js} +16 -18
  152. package/dist/src/{litellm-CRDqPhNI.js → litellm-CTfa0hqi.js} +15 -17
  153. package/dist/src/{litellm-hUSNM_M2.cjs → litellm-NYpQ8RQu.cjs} +15 -16
  154. package/dist/src/{litellm-9vR8zpfU.js → litellm-ePxtr9F1.js} +15 -4
  155. package/dist/src/{logger-CG1uZPbQ.js → logger-CT3IKMKA.js} +10 -29
  156. package/dist/src/{logger-B7sBeGa0.cjs → logger-Cp1GPUjj.cjs} +152 -180
  157. package/dist/src/logger-DLcq4dWf.js +713 -0
  158. package/dist/src/{logger-LSBxlt7a.js → logger-KkObSCzq.js} +13 -31
  159. package/dist/src/{luma-ray-Hm3d6VJE.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
  160. package/dist/src/{luma-ray-drvgdpP9.js → luma-ray-BE2mOt6N.js} +20 -13
  161. package/dist/src/{luma-ray-4blv9iZ2.js → luma-ray-BW9IRGIc.js} +22 -21
  162. package/dist/src/{luma-ray-B2__8lYH.js → luma-ray-Cm1KZBhs.js} +20 -23
  163. package/dist/src/main.js +1170 -1321
  164. package/dist/src/{messages-XhiwCbi4.cjs → messages-1JrJs91T.cjs} +32 -34
  165. package/dist/src/{messages-CGPPidQr.js → messages-1x9atZmP.js} +22 -24
  166. package/dist/src/{messages-Uee41Mj5.js → messages-BLbWdsyt.js} +22 -24
  167. package/dist/src/messages-D8EA0oDc.js +240 -0
  168. package/dist/src/{meteor-BYykdXrV.js → meteor-44VjEACX.js} +3 -4
  169. package/dist/src/{meteor-CsopaHrH.js → meteor-D-SotUw9.js} +3 -4
  170. package/dist/src/{meteor-e-E-2vVl.cjs → meteor-DLZZ3osF.cjs} +3 -4
  171. package/dist/src/{meteor-C8lGP6P4.js → meteor-DUiCJRC-.js} +3 -4
  172. package/dist/src/{modelslab-yKz-ZNB4.js → modelslab-C1OLRmVX.js} +17 -10
  173. package/dist/src/{modelslab-E9gO-bYd.js → modelslab-CqXBy3U8.js} +18 -20
  174. package/dist/src/{modelslab-lUVW0cmB.cjs → modelslab-DcOSFwKh.cjs} +17 -18
  175. package/dist/src/{modelslab-ClBkr8_9.js → modelslab-X5-4LroM.js} +17 -19
  176. package/dist/src/{nova-reel-Dk8jNpId.js → nova-reel-BgS1ZWuK.js} +20 -13
  177. package/dist/src/{nova-reel-u2eF2Cxm.js → nova-reel-D2ZkOSyr.js} +22 -21
  178. package/dist/src/{nova-reel-D8CuO6QH.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
  179. package/dist/src/{nova-reel-P9bwvtYX.js → nova-reel-DihqLeol.js} +20 -23
  180. package/dist/src/{nova-sonic-Ds1C-dpm.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
  181. package/dist/src/{nova-sonic-CK2rAiKi.js → nova-sonic-DezhVUYT.js} +30 -26
  182. package/dist/src/{nova-sonic-BaqWlkds.js → nova-sonic-P-CdUMlV.js} +30 -31
  183. package/dist/src/{nova-sonic-yZapPLv7.js → nova-sonic-Q3BOJeig.js} +31 -32
  184. package/dist/src/{openai-DUFopMrH.cjs → openai-Cuif0GEt.cjs} +8 -9
  185. package/dist/src/{openai-PblZ3jUE.js → openai-DElQ-fPX.js} +3 -4
  186. package/dist/src/{openai-CcN1B8Sb.js → openai-DhbB7eWK.js} +3 -4
  187. package/dist/src/openai-j-sE2O7r.js +44 -0
  188. package/dist/src/{openclaw-A-3_loM7.js → openclaw-BiSZPL7J.js} +20 -14
  189. package/dist/src/{openclaw-COn6QzDi.js → openclaw-Bv1DINsX.js} +20 -27
  190. package/dist/src/{openclaw-a3lylB-V.js → openclaw-D1D_ej1z.js} +21 -28
  191. package/dist/src/{openclaw-B6qqDr_u.cjs → openclaw-DAfWQn-o.cjs} +33 -39
  192. package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
  193. package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
  194. package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
  195. package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
  196. package/dist/src/{otlpReceiver-oyf5wLGC.js → otlpReceiver--AIRW_S4.js} +53 -51
  197. package/dist/src/{otlpReceiver-BmmTiMjA.js → otlpReceiver-Bn5wGB1v.js} +53 -55
  198. package/dist/src/{otlpReceiver-lXsYVbpj.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
  199. package/dist/src/{otlpReceiver-94URx7UW.js → otlpReceiver-g3ByGaXs.js} +53 -55
  200. package/dist/src/{providerRegistry-Cq_JK_CJ.js → providerRegistry-B0RUOLI_.js} +7 -8
  201. package/dist/src/{providerRegistry-DSSHjMKf.js → providerRegistry-CD8MEar9.js} +7 -8
  202. package/dist/src/{providerRegistry-CvHEVJad.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
  203. package/dist/src/providerRegistry-DM8rZYol.js +45 -0
  204. package/dist/src/providers-B3HvufyI.js +33246 -0
  205. package/dist/src/{providers-BnFpbY_s.js → providers-BKRJTjBz.js} +1536 -1669
  206. package/dist/src/providers-C1rOSHiR.js +32 -0
  207. package/dist/src/{providers-Iil64vk9.js → providers-CFLy1_ji.js} +1543 -1676
  208. package/dist/src/{providers-DHbjzW2e.cjs → providers-CFu-TZl-.cjs} +1896 -2029
  209. package/dist/src/providers-CxmDwEFf.cjs +31 -0
  210. package/dist/src/providers-Dodakqr0.js +30 -0
  211. package/dist/src/providers-GIQ2TcsA.js +30 -0
  212. package/dist/src/{pythonUtils-CcT5LH1M.js → pythonUtils-C3py6GC1.js} +18 -19
  213. package/dist/src/{pythonUtils-DBbuI3QJ.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
  214. package/dist/src/{pythonUtils-hZ8LeQLv.js → pythonUtils-D5nxkQ0P.js} +18 -19
  215. package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
  216. package/dist/src/{quiverai-BuI0tE39.js → quiverai-C2jVwbH1.js} +8 -7
  217. package/dist/src/{quiverai-DCGSZt4U.js → quiverai-CI6gYJVI.js} +8 -10
  218. package/dist/src/{quiverai-DiMVJQDz.cjs → quiverai-CLkWkyZc.cjs} +8 -9
  219. package/dist/src/{quiverai-fQNkExW4.js → quiverai-MHSxbmmZ.js} +9 -11
  220. package/dist/src/{render-Dj1smHEb.js → render-Drod8m7K.js} +4 -5
  221. package/dist/src/{responses-DOAFFENS.js → responses-BKqJmhhc.js} +22 -25
  222. package/dist/src/{responses-CxzoQoBe.js → responses-CGw0DCzh.js} +22 -25
  223. package/dist/src/responses-jxdehPkC.js +660 -0
  224. package/dist/src/{responses-ghR3IOfy.cjs → responses-tD4Bd4dc.cjs} +37 -40
  225. package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
  226. package/dist/src/{rubyUtils-CwbGmgYN.js → rubyUtils-BUVePouc.js} +27 -20
  227. package/dist/src/rubyUtils-BcuGX77l.js +222 -0
  228. package/dist/src/{rubyUtils-DudlFZed.js → rubyUtils-Boc4HZzX.js} +18 -19
  229. package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
  230. package/dist/src/{rubyUtils-C8MhKGHb.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
  231. package/dist/src/{sagemaker-gmskuyre.js → sagemaker-BK4Zb993.js} +75 -70
  232. package/dist/src/{sagemaker-DuM71dVU.js → sagemaker-BfiWTmvn.js} +77 -77
  233. package/dist/src/{sagemaker-77zbJ2Q2.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
  234. package/dist/src/{sagemaker-CcxhlOAR.js → sagemaker-D2Q1c-sD.js} +75 -79
  235. package/dist/src/{scanner-DJYiSXQj.js → scanner-J8CA3LsV.js} +100 -121
  236. package/dist/src/server/index.js +5505 -67416
  237. package/dist/src/{server-B5v33lvE.cjs → server-B0PPuDw-.cjs} +57 -67
  238. package/dist/src/server-B1vi21hA.js +7 -0
  239. package/dist/src/{server-RV_i_YX5.js → server-BC7XJFgr.js} +19 -24
  240. package/dist/src/server-Cm9Kai_h.cjs +5 -0
  241. package/dist/src/{server-BJ4m4f1D.js → server-DbFphssR.js} +26 -29
  242. package/dist/src/server-OAs3nBRT.js +229 -0
  243. package/dist/src/{signal-BW33JuId.js → signal-BOTbd53Z.js} +9 -11
  244. package/dist/src/{slack-DEURelTy.cjs → slack-BmVAVGaK.cjs} +7 -8
  245. package/dist/src/{slack-BQYeW9L3.js → slack-DCUPTzS2.js} +8 -8
  246. package/dist/src/{slack-BB6yuZzp.js → slack-DOdy_kyv.js} +7 -8
  247. package/dist/src/{slack-2pRrhhgJ.js → slack-DXMKtA-f.js} +7 -9
  248. package/dist/src/store-BNmZ1KAz.cjs +5 -0
  249. package/dist/src/{store-D7CgQzAR.cjs → store-BSc-TF2w.cjs} +44 -45
  250. package/dist/src/store-BltJg2cd.js +6 -0
  251. package/dist/src/{store-s3SftUwF.js → store-D1tv90v3.js} +34 -35
  252. package/dist/src/{store-DJNsD1iC.js → store-DQLEjuEO.js} +40 -36
  253. package/dist/src/store-Ub2vaGJ1.js +228 -0
  254. package/dist/src/{tables-DfTsNN7X.js → tables-5EvT_Bwn.js} +19 -21
  255. package/dist/src/{tables-BKTmd6u7.cjs → tables-C7K-XKWp.cjs} +89 -91
  256. package/dist/src/{tables-DMegD0Xf.js → tables-D36WTqKX.js} +21 -23
  257. package/dist/src/tables-xKANLRBD.js +288 -0
  258. package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
  259. package/dist/src/{telemetry-BedSm-bZ.js → telemetry-C15ziL8u.js} +17 -14
  260. package/dist/src/{telemetry--WAdAfVi.js → telemetry-C2YDkUQH.js} +11 -13
  261. package/dist/src/{telemetry-DQgVBCAb.cjs → telemetry-CbrnxHp_.cjs} +21 -24
  262. package/dist/src/telemetry-D4W5hboe.js +7 -0
  263. package/dist/src/telemetry-DMb2Mpfm.js +171 -0
  264. package/dist/src/{text-oiSbwSOI.js → text-B_UCRPp2.js} +2 -2
  265. package/dist/src/{text-oKzCBnK6.cjs → text-CW1cyrwj.cjs} +12 -13
  266. package/dist/src/{text-B_IrO4GZ.js → text-Db-Wt2u2.js} +2 -2
  267. package/dist/src/text-TIv0QYnd.js +22 -0
  268. package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
  269. package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
  270. package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
  271. package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
  272. package/dist/src/{transcription-BO1AHegO.cjs → transcription-CL78qbOU.cjs} +14 -15
  273. package/dist/src/{transcription-mYS9vd5v.js → transcription-DAtxHhAM.js} +14 -7
  274. package/dist/src/{transcription-X2-B4vkX.js → transcription-LNZTNUUL.js} +14 -16
  275. package/dist/src/{transcription-lzBLiTFJ.js → transcription-QHh3AH6Z.js} +15 -17
  276. package/dist/src/{transform-DeGlxb0D.js → transform-Cgi24fJ7.js} +39 -47
  277. package/dist/src/{transform-B1Hi5lWS.cjs → transform-CzK1Q0zl.cjs} +24 -26
  278. package/dist/src/{transform-CYDILYDe.js → transform-DECvGmzp.js} +15 -13
  279. package/dist/src/{transform-Dfl89yi4.js → transform-DGLazrMm.js} +39 -47
  280. package/dist/src/transform-DGxXocjk.js +1506 -0
  281. package/dist/src/{transform-D5PjiWiZ.cjs → transform-DOcQeLld.cjs} +179 -187
  282. package/dist/src/transform-DTGDnAzW.js +6 -0
  283. package/dist/src/{transform-BEgStbHK.js → transform-DilY9wbS.js} +10 -12
  284. package/dist/src/transform-aa6tmVpZ.js +216 -0
  285. package/dist/src/transform-m3qNw4KP.cjs +5 -0
  286. package/dist/src/{transformersAvailability-SZnTS3pJ.js → transformersAvailability-CEVM2GNQ.js} +2 -2
  287. package/dist/src/{transformersAvailability-D-glmEy7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
  288. package/dist/src/{transformersAvailability-CjeFXhuJ.js → transformersAvailability-D6c6ROpT.js} +2 -2
  289. package/dist/src/{types-CXQduE9o.js → types-CH3Ge2sE.js} +30 -90
  290. package/dist/src/{types-C5hEkb-x.js → types-CLKiCBW3.js} +25 -89
  291. package/dist/src/types-CN_TZ2GJ.js +3260 -0
  292. package/dist/src/{types-DWNf48sT.cjs → types-LJ0r3wbR.cjs} +500 -564
  293. package/dist/src/util-5cB-L7U3.js +1430 -0
  294. package/dist/src/util-6-GqIvzS.js +599 -0
  295. package/dist/src/{util-CoQjmE3u.js → util-B7T3SiBS.js} +4 -5
  296. package/dist/src/{util-D9eLdGfa.js → util-Betm42rL.js} +5 -6
  297. package/dist/src/{util-Bm_-UMD_.js → util-C-PPYSMq.js} +5 -6
  298. package/dist/src/{util-CyUdMzV0.cjs → util-CchiqXh_.cjs} +34 -35
  299. package/dist/src/{util-Du96oyYS.js → util-DaWTWKBK.js} +4 -5
  300. package/dist/src/{util-1wWM599Z.cjs → util-Db0a0AFH.cjs} +50 -51
  301. package/dist/src/{util-DQ984syk.js → util-Dlz_Wvgm.js} +37 -48
  302. package/dist/src/{util-_h4pVqrz.js → util-YT5HPZaS.js} +37 -48
  303. package/dist/src/{util-aLhtl3fe.cjs → util-Yz-1aEhW.cjs} +209 -220
  304. package/dist/src/util-ZZH-3QZz.js +293 -0
  305. package/dist/src/{utils-BjLy-Q72.cjs → utils-Cz9qXqII.cjs} +29 -32
  306. package/dist/src/{utils-CFMn2yHW.js → utils-XiOAgly5.js} +4 -7
  307. package/dist/src/utils-dLokC-eR.js +94 -0
  308. package/dist/src/{utils-DvWMzuMx.js → utils-f2-Moju7.js} +4 -7
  309. package/dist/tsconfig.tsbuildinfo +1 -1
  310. package/package.json +30 -30
  311. package/dist/src/app/assets/index-B2D0bCSI.js +0 -439
  312. package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
  313. package/dist/src/cache-ChPcurj7.js +0 -6
  314. package/dist/src/cache-VVu_W-yg.js +0 -8
  315. package/dist/src/cache-YLNCFEM2.cjs +0 -6
  316. package/dist/src/chunk-DHDDz29n.js +0 -22
  317. package/dist/src/chunk-FhC4c-0y.js +0 -21
  318. package/dist/src/cloud-BndfXy4H.js +0 -5
  319. package/dist/src/eval-BhHvMY82.js +0 -17
  320. package/dist/src/evalResult-Dq2gFNQY.js +0 -12
  321. package/dist/src/evalResult-nmcP5VKH.cjs +0 -12
  322. package/dist/src/evalResult-trqZjVYh.js +0 -14
  323. package/dist/src/evaluator-CnfPstzT.js +0 -39
  324. package/dist/src/fetch-IDPDue6F.cjs +0 -4
  325. package/dist/src/fetch-hKJ-It8q.js +0 -6
  326. package/dist/src/fetch-ouKnrWK-.js +0 -4
  327. package/dist/src/graders-CQn7WUsd.cjs +0 -34
  328. package/dist/src/graders-DC6QAbpW.js +0 -35
  329. package/dist/src/graders-DUWz3Y7j.js +0 -37
  330. package/dist/src/opencode-sdk-4bL9n-Gk.js +0 -382
  331. package/dist/src/opencode-sdk-BfC2zWcR.js +0 -376
  332. package/dist/src/opencode-sdk-DMJyuwMg.js +0 -380
  333. package/dist/src/opencode-sdk-Da-9adza.cjs +0 -383
  334. package/dist/src/providers-CsXB2Ix-.js +0 -35
  335. package/dist/src/providers-DO8ltjLC.js +0 -33
  336. package/dist/src/providers-Dtq-xnXd.cjs +0 -33
  337. package/dist/src/rubyUtils-BUbcND2f.js +0 -6
  338. package/dist/src/rubyUtils-Cr55X_KE.js +0 -5
  339. package/dist/src/rubyUtils-DlIiqoYo.cjs +0 -5
  340. package/dist/src/server-C2eQH4Gu.js +0 -6
  341. package/dist/src/server-CXWycu7H.cjs +0 -6
  342. package/dist/src/server-Q6OGlxxT.js +0 -8
  343. package/dist/src/store-B3EDO9Q3.js +0 -7
  344. package/dist/src/store-Dl9F8aw5.js +0 -6
  345. package/dist/src/store-SnrGrlt9.cjs +0 -6
  346. package/dist/src/telemetry-BGhiPZtl.js +0 -8
  347. package/dist/src/telemetry-CFfiYan6.cjs +0 -6
  348. package/dist/src/telemetry-DHzEduxX.js +0 -6
  349. package/dist/src/transform-C1x1ZlMQ.cjs +0 -6
  350. package/dist/src/transform-DYHjFmQu.js +0 -8
  351. package/dist/src/transform-rmwJT5JQ.js +0 -7
  352. package/dist/src/transformersAvailability-eJooj0gX.js +0 -35
@@ -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-B7sBeGa0.cjs');
2
- const require_createHash = require('./createHash-CYQy4YeL.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
  /**
@@ -38,7 +36,6 @@ function generateIdFromPrompt(prompt) {
38
36
  if (prompt.id) return require_createHash.sha256(prompt.id);
39
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-BjLy-Q72.cjs.map
122
+
123
+ //# sourceMappingURL=utils-Cz9qXqII.cjs.map
@@ -1,6 +1,5 @@
1
- import { b as getEnvString } from "./logger-CG1uZPbQ.js";
2
- import { n as sha256 } from "./createHash-Dw_iLu31.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-CFMn2yHW.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-LSBxlt7a.js";
3
- import { n as sha256 } from "./createHash-CJcfskIZ.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-DvWMzuMx.js.map
94
+
95
+ //# sourceMappingURL=utils-f2-Moju7.js.map