promptfoo 0.121.4 → 0.121.5

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 (346) hide show
  1. package/dist/src/{ListApp-DQkFNqE9.js → ListApp-BRUsT43Y.js} +1 -1
  2. package/dist/src/{accounts-Dy17bs4D.cjs → accounts-BIFntVWB.cjs} +4 -4
  3. package/dist/src/{accounts-F9d_5sMC.js → accounts-CLJHCDDb.js} +6 -6
  4. package/dist/src/{accounts-DhMYUUbu.js → accounts-CaLNYnf7.js} +4 -4
  5. package/dist/src/{accounts-DdJ2pHMI.js → accounts-bnyHT7Ju.js} +5 -5
  6. package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-B5krlibj.js} +3 -3
  7. package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-Ba67xmgs.js} +2 -2
  8. package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-BclbiXiq.js} +3 -3
  9. package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-D2x0wGhB.cjs} +2 -2
  10. package/dist/src/{agents-CgaMXvLM.js → agents-BGqaTDnr.js} +5 -5
  11. package/dist/src/{agents-8FDnTriG.js → agents-BV9yFpXX.js} +5 -5
  12. package/dist/src/{agents-aYPQLf8W.js → agents-BYdMl1UE.js} +4 -4
  13. package/dist/src/{agents-pQeBEXMm.js → agents-DhxWMCtH.js} +5 -5
  14. package/dist/src/{agents-D7-HGxUj.cjs → agents-DiWmQYH9.cjs} +4 -4
  15. package/dist/src/{agents-BahDpe5G.cjs → agents-WULPVjbH.cjs} +4 -4
  16. package/dist/src/{agents-DJ35I3Nt.js → agents-emVcx3yh.js} +5 -5
  17. package/dist/src/{agents-C-R_jfzI.js → agents-n6vPqV3i.js} +4 -4
  18. package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-BxqK9HF_.js} +7 -7
  19. package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-BzLjZI_m.cjs} +6 -6
  20. package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-DR4pgeiC.js} +6 -6
  21. package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-uPGp0Zdo.js} +7 -7
  22. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
  23. package/dist/src/app/assets/Report-vjzrbgce.js +1 -0
  24. package/dist/src/app/assets/index-B3NQ8HTd.js +385 -0
  25. package/dist/src/app/assets/{index-BXGkeMwh.css → index-Cli2yAXv.css} +1 -1
  26. package/dist/src/app/index.html +27 -2
  27. package/dist/src/{audio-DcVKoInv.js → audio-BvpTOArF.js} +4 -4
  28. package/dist/src/{audio-BQtNuYBj.cjs → audio-C0vDeS0j.cjs} +3 -3
  29. package/dist/src/{audio-B7izf48x.js → audio-CScmnmEB.js} +4 -4
  30. package/dist/src/{audio-COrn8rM6.js → audio-Da8U9IS5.js} +3 -3
  31. package/dist/src/{base-fZ9wgg50.js → base-BOMaNEes.js} +3 -3
  32. package/dist/src/{base-PYJvBE1i.js → base-BTux96b1.js} +2 -2
  33. package/dist/src/{base-D-670DX8.cjs → base-Tw6uhH8K.cjs} +2 -2
  34. package/dist/src/{base-yrI1Yal4.js → base-dYsl2hmL.js} +3 -3
  35. package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B95F_7vE.cjs} +2 -2
  36. package/dist/src/{blobs-C-F78Kfn.js → blobs-BW4U31ue.js} +2 -2
  37. package/dist/src/{blobs-BCZavS8s.js → blobs-D_gg8nbm.js} +3 -3
  38. package/dist/src/{blobs-BQWqnnvL.js → blobs-DjLby-uP.js} +3 -3
  39. package/dist/src/{cache-mb7c8hbp.js → cache-BI5BY7ey.js} +4 -4
  40. package/dist/src/{cache-DbLsVWB2.cjs → cache-BRkhlH3k.cjs} +1 -1
  41. package/dist/src/cache-BlC6aeJ0.js +3 -0
  42. package/dist/src/{cache-D5NZmMiT.js → cache-Bzttsk0X.js} +2 -2
  43. package/dist/src/{cache-C4Xb-hNb.js → cache-Cr-qWIbP.js} +3 -3
  44. package/dist/src/{cache-BIyPcp5v.cjs → cache-DGg-yTZG.cjs} +2 -2
  45. package/dist/src/{chat-Dr3DUQ0D.js → chat-BLOdH60v.js} +12 -12
  46. package/dist/src/{chat-BfPaS15_.js → chat-Cx_LkwvZ.js} +12 -12
  47. package/dist/src/{chat-mW0ORo8G.js → chat-D9nudO9b.js} +4 -4
  48. package/dist/src/{chat-I9izLm49.js → chat-DChSH_Es.js} +12 -12
  49. package/dist/src/{chat-MKxMnZJZ.js → chat-DG2LkwLq.js} +2 -2
  50. package/dist/src/{chat-BPXSW8Bv.cjs → chat-DH97tVV9.cjs} +2 -2
  51. package/dist/src/{chat-0bwXjVP0.js → chat-aMQZw6R7.js} +4 -4
  52. package/dist/src/{chat-CclRbxGf.cjs → chat-vYqqv1gP.cjs} +11 -11
  53. package/dist/src/{chatkit-zUIVoDos.js → chatkit-B8X34dQc.js} +4 -4
  54. package/dist/src/{chatkit-Cv6AhukM.js → chatkit-BXu42Qwt.js} +3 -3
  55. package/dist/src/{chatkit-CJnHRRMM.js → chatkit-CbMRoeYw.js} +4 -4
  56. package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-D44VyUyB.cjs} +3 -3
  57. package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-BRq0bbIK.cjs} +8 -8
  58. package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-BjriSVRZ.js} +7 -7
  59. package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BzNZeZ0N.js} +7 -7
  60. package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-DYv_AJ8u.js} +7 -7
  61. package/dist/src/cloud-CoD5OacT.js +3 -0
  62. package/dist/src/{cloud-DQZ5sVjW.js → cloud-Da0bofJd.js} +3 -3
  63. package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-CXC4b1EU.js} +4 -4
  64. package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-CyBoIs1Q.js} +6 -6
  65. package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-DGOwgexC.js} +6 -6
  66. package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-DJv5qnyb.cjs} +4 -4
  67. package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-1sAoOyft.js} +5 -5
  68. package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-D-dnkzCF.js} +5 -5
  69. package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-DKVjkDav.cjs} +3 -3
  70. package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-TJkVrZlB.js} +3 -3
  71. package/dist/src/codex-app-server-CCLjqCh9.js +1915 -0
  72. package/dist/src/codex-app-server-CCe0TiDc.js +1915 -0
  73. package/dist/src/codex-app-server-CPW1LFwh.js +1916 -0
  74. package/dist/src/codex-app-server-VMRnjZ68.cjs +1920 -0
  75. package/dist/src/codex-sdk-1jm_qPHf.js +3 -0
  76. package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-Bd8UbO9q.cjs} +5 -5
  77. package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-BgEFQ70r.js} +6 -6
  78. package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-Bzb_TqX9.js} +6 -6
  79. package/dist/src/{codex-sdk-CWEnH70W.cjs → codex-sdk-Danroptg.cjs} +1 -1
  80. package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-DfvDTN33.js} +5 -5
  81. package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-B5ImDlSm.js} +8 -8
  82. package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-BgAkuYCw.cjs} +7 -7
  83. package/dist/src/{cometapi-BUlt_ELa.js → cometapi-CC7hWxmX.js} +8 -8
  84. package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CCbpHkuF.js} +7 -7
  85. package/dist/src/{completion-x0a_c2y1.js → completion-2iuYVxwi.js} +6 -6
  86. package/dist/src/{completion-Dnxn7E-j.js → completion-CrD6MQ93.js} +5 -5
  87. package/dist/src/{completion-BozdoXba.cjs → completion-DtQ72Bm3.cjs} +5 -5
  88. package/dist/src/{completion-HUe8wDhZ.js → completion-Vq_ad618.js} +6 -6
  89. package/dist/src/{createHash-ChI45QR1.js → createHash-DPpsZgFF.js} +1 -1
  90. package/dist/src/{createHash-CwDVU5xr.js → createHash-Un4Q_huE.js} +1 -1
  91. package/dist/src/{createHash-B7KvgoOD.cjs → createHash-VvBIc-AW.cjs} +1 -1
  92. package/dist/src/{docker-DCgsveLD.js → docker--3qzPa-6.js} +6 -6
  93. package/dist/src/{docker-DS4_Osau.cjs → docker-D3AY-5F5.cjs} +5 -5
  94. package/dist/src/{docker-CQmlA2NU.js → docker-DCsCDvwM.js} +6 -6
  95. package/dist/src/{docker-ClnmCf1Z.js → docker-Dorv4_Dg.js} +5 -5
  96. package/dist/src/{embedding-I45KG3o7.cjs → embedding-BXhN5lCH.cjs} +5 -5
  97. package/dist/src/{embedding-nFbumxcv.js → embedding-ChS1ivFS.js} +5 -5
  98. package/dist/src/{embedding-D3xTseo7.js → embedding-DNRvZwRN.js} +6 -6
  99. package/dist/src/{embedding-DD9wa3ae.js → embedding-D_bI4NDq.js} +6 -6
  100. package/dist/src/{errors-Cw810C93.js → errors-DFHe4L-n.js} +1 -1
  101. package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
  102. package/dist/src/{esm-C7PnfdF8.js → esm-BRkfNsYs.js} +1 -1
  103. package/dist/src/{esm-tVgYPY-f.js → esm-BX8fwlAO.js} +2 -2
  104. package/dist/src/{esm-CtEPLdAj.cjs → esm-B_rGuPTo.cjs} +1 -1
  105. package/dist/src/{eval-CzJFfFO9.js → eval-BQPLBJbw.js} +1 -1
  106. package/dist/src/{eval-u4UVafl6.js → eval-DJ_4A-tr.js} +14 -14
  107. package/dist/src/evalResult-BBJAHAtw.cjs +2 -0
  108. package/dist/src/evalResult-BBK58h2B.js +3 -0
  109. package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-Cx-8OWkb.cjs} +28 -10
  110. package/dist/src/{evalResult-D3hVYFis.js → evalResult-D6P5I5il.js} +29 -11
  111. package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-pSvGWFMo.js} +29 -11
  112. package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-D-UIbbYq.js} +845 -98
  113. package/dist/src/evaluator-DgLKaZk8.js +3 -0
  114. package/dist/src/{extractor-Dk6bRWkv.js → extractor-BM3jRERL.js} +5 -5
  115. package/dist/src/{extractor-WVPOrH43.cjs → extractor-Dxr2J_wK.cjs} +5 -5
  116. package/dist/src/{extractor-DNSeBVOJ.js → extractor-DxyiFhPk.js} +6 -6
  117. package/dist/src/{extractor-CAfTSraf.js → extractor-YlZbUMsL.js} +6 -6
  118. package/dist/src/fetch-8viavNv8.js +3 -0
  119. package/dist/src/{fetch-BEWnXrrG.js → fetch-B6ch2nU2.js} +9 -20
  120. package/dist/src/{fetch-Di00EQrc.js → fetch-D9xxyC1p.js} +221 -232
  121. package/dist/src/{fetch-CJU5ELPa.cjs → fetch-NuqXW1Xb.cjs} +221 -244
  122. package/dist/src/{fetch-B0Z3Oe4k.js → fetch-Y5qX_kST.js} +8 -19
  123. package/dist/src/{fileExtensions-BArZuxsI.js → fileExtensions-8CjoL7vB.js} +1 -1
  124. package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-BGh-W-HT.js} +1 -1
  125. package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-D9h-8Wxg.cjs} +1 -1
  126. package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-DysCsxNG.js} +1 -1
  127. package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-Ch4A7G3o.js} +1 -1
  128. package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-BokHC-MW.cjs} +1 -1
  129. package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-C3ZPQU60.js} +1 -1
  130. package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-CFny3gOy.js} +1 -1
  131. package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-DxODqT9e.js} +1 -1
  132. package/dist/src/{graders-Zy3x0zqX.js → graders-BoUqsCEm.js} +1303 -2044
  133. package/dist/src/{graders--zknU_uk.cjs → graders-Bw1wk_21.cjs} +1553 -2240
  134. package/dist/src/graders-C84JI-m5.js +2 -0
  135. package/dist/src/graders-CBbd0K0Q.cjs +2 -0
  136. package/dist/src/graders-CbQqpHSN.js +3 -0
  137. package/dist/src/{graders-eIHhRqoC.js → graders-CgPn32yp.js} +1300 -2041
  138. package/dist/src/{graders-pvbReLLn.js → graders-CwrbifOo.js} +747 -1488
  139. package/dist/src/graders-DS42d3ZG.js +2 -0
  140. package/dist/src/{image-9302QVqR.js → image-BeWaInPF.js} +3 -3
  141. package/dist/src/{image-DVz2RiMF.js → image-BmilRNqO.js} +7 -7
  142. package/dist/src/{image-x6KqLQl4.cjs → image-CxJoa3aW.cjs} +6 -6
  143. package/dist/src/{image-De2FBmYV.cjs → image-D10dNAav.cjs} +3 -3
  144. package/dist/src/{image-dnoUgPrC.js → image-Dr_3I3nK.js} +4 -4
  145. package/dist/src/{image-B5Mv-Z3h.js → image-DsGRlkh7.js} +7 -7
  146. package/dist/src/{image-qUpPvmNZ.js → image-a_SGUobh.js} +6 -6
  147. package/dist/src/{image-u7-rKnYU.js → image-qjO6FWPs.js} +4 -4
  148. package/dist/src/index.cjs +1052 -296
  149. package/dist/src/index.d.cts +124 -13
  150. package/dist/src/index.d.ts +125 -14
  151. package/dist/src/index.js +1018 -262
  152. package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-CCICw2cy.js} +2 -2
  153. package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
  154. package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
  155. package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-BBETc5-S.js} +6 -6
  156. package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-C8qOo26M.cjs} +5 -5
  157. package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CzAi2rUI.js} +6 -6
  158. package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-Dr3Kib7F.js} +5 -5
  159. package/dist/src/{litellm-C2kqjxqp.js → litellm-BLSiANhk.js} +5 -5
  160. package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CaUmV7Mk.cjs} +4 -4
  161. package/dist/src/{litellm-p37R1dzQ.js → litellm-DQGo_juI.js} +4 -4
  162. package/dist/src/{litellm-DRjpcSa7.js → litellm-DRc4qWfc.js} +5 -5
  163. package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
  164. package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
  165. package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-B-tNZzqW.js} +6 -6
  166. package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CtS3OlGq.js} +5 -5
  167. package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-PJJgUjOc.js} +6 -6
  168. package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-if-Ml4R9.cjs} +5 -5
  169. package/dist/src/main.js +242 -198
  170. package/dist/src/{messages-zWbkLLHz.js → messages-B9dSjrNf.js} +264 -16
  171. package/dist/src/{messages-811uVVW5.cjs → messages-BnsVHUnm.cjs} +266 -15
  172. package/dist/src/{messages-MYTQ2TWp.js → messages-CI69Lasb.js} +264 -16
  173. package/dist/src/{messages-BTQz42fn.js → messages-CewuNcNS.js} +264 -16
  174. package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-BBGcGeCa.cjs} +1 -1
  175. package/dist/src/{meteor-DuAFv6gF.js → meteor-BKTM-7KS.js} +1 -1
  176. package/dist/src/{meteor-DHdzY1Ss.js → meteor-CeGo0Lu2.js} +2 -2
  177. package/dist/src/{meteor-CU5UAE-H.js → meteor-Wc_aUVvu.js} +2 -2
  178. package/dist/src/{modelslab-wu9yi5GE.js → modelslab-BCLOtfek.js} +7 -7
  179. package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-BkapYJhh.cjs} +6 -6
  180. package/dist/src/{modelslab-DIq-6y7x.js → modelslab-D73OnKSx.js} +6 -6
  181. package/dist/src/{modelslab-D0erNWKe.js → modelslab-zpz9JcK0.js} +7 -7
  182. package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-B8F_TK5w.js} +6 -6
  183. package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-Bx0NFV2f.js} +5 -5
  184. package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-CNGJTLtG.js} +6 -6
  185. package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-DkT7tnoB.cjs} +5 -5
  186. package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BaXRN1cr.js} +4 -4
  187. package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-BeTRaFOh.js} +4 -4
  188. package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CL7Zqv0G.js} +3 -3
  189. package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-YT426juD.cjs} +3 -3
  190. package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
  191. package/dist/src/{openai-Qsvz25mV.js → openai-BT-JvDse.js} +2 -2
  192. package/dist/src/{openai-URNyItar.cjs → openai-Cy1XLs0c.cjs} +1 -1
  193. package/dist/src/{openai-iYtrXzOX.js → openai-D4fxGvRx.js} +1 -1
  194. package/dist/src/{openclaw-CwzlQSQX.js → openclaw-Bq7RVR3k.js} +7 -6
  195. package/dist/src/{openclaw-CLWrW03k.js → openclaw-DA8U4DsD.js} +8 -7
  196. package/dist/src/{openclaw-CnQ363Wi.js → openclaw-DObVgpjC.js} +8 -7
  197. package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-DUBZP3GL.cjs} +8 -7
  198. package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-BB40Wir1.js} +4 -4
  199. package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-BM1UAIv1.js} +3 -3
  200. package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-CeqiOcOU.cjs} +4 -4
  201. package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-ChdK7F7z.js} +4 -4
  202. package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-C6thJRXi.js} +4 -4
  203. package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-CcdIikOu.js} +3 -3
  204. package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-DNSQj6bf.cjs} +3 -3
  205. package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver-UYMQx3sy.js} +4 -4
  206. package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
  207. package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-BESeALrr.cjs} +1 -1
  208. package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DoACwqhD.js} +1 -1
  209. package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-PMsleEzs.js} +2 -2
  210. package/dist/src/{providers-Bp4S-FvO.js → providers-BuyzKt7C.js} +1 -1
  211. package/dist/src/{providers-DV3ax9e_.cjs → providers-C7lNVBjX.cjs} +1 -1
  212. package/dist/src/{providers-u9Enmfok.js → providers-CCE2COJi2.js} +1 -1
  213. package/dist/src/{providers-DruaQfwu.js → providers-CJh7iriU.js} +18103 -17952
  214. package/dist/src/{providers-iUt5fbAN.js → providers-Ctcc592x.js} +1 -1
  215. package/dist/src/{providers-Domz_llv.js → providers-DRrerKra.js} +432 -281
  216. package/dist/src/{providers-BV_KMZje.js → providers-DT-GtF2t.js} +19094 -18943
  217. package/dist/src/{providers-1eKkXBKp.cjs → providers-eDShy16E.cjs} +17946 -17795
  218. package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-C4tltmIn.js} +3 -3
  219. package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-CoLaCwNY.cjs} +3 -3
  220. package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-DMO68Jg7.js} +3 -3
  221. package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-DNqbnRdx.js} +3 -3
  222. package/dist/src/{quiverai-DR0SnIQV.js → quiverai-BSS9a7wV.js} +3 -3
  223. package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Bk1KrvL6.js} +4 -4
  224. package/dist/src/{quiverai-DFotyafY.cjs → quiverai-Bpx6MZ7T.cjs} +3 -3
  225. package/dist/src/{quiverai-aPPvXOgn.js → quiverai-CPKhWgaT.js} +4 -4
  226. package/dist/src/{render-DHIZ6_k8.js → render-7uNJ2V14.js} +2 -2
  227. package/dist/src/{render-CH-62LbA.js → render-DlscvAUJ.js} +1 -1
  228. package/dist/src/{render-CMEpfLaO.js → render-eui5p5mL.js} +2 -2
  229. package/dist/src/{render-CgVDrJmM.js → render-nj-UaPdn.js} +2 -2
  230. package/dist/src/{render-DfQSFxGE.cjs → render-tG6ir9_g.cjs} +1 -1
  231. package/dist/src/{responses--OsX2aYW.js → responses-1ztiVYsx.js} +49 -15
  232. package/dist/src/{responses-DL9m8CyY.js → responses-B8haB-mD.js} +49 -15
  233. package/dist/src/{responses-C-flexAY.js → responses-BiaBguAu.js} +49 -15
  234. package/dist/src/{responses-Bi9vBuW_.cjs → responses-CF-ayauu.cjs} +48 -14
  235. package/dist/src/rubyUtils-4hjGxvju.js +3 -0
  236. package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-BI0p46eZ.js} +3 -3
  237. package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CIQFnVz4.js} +3 -3
  238. package/dist/src/rubyUtils-CO-tuszQ.cjs +2 -0
  239. package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DGnoCYL2.js} +3 -3
  240. package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-DoifqkiA.cjs} +4 -3
  241. package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-BDLeW29y.js} +12 -12
  242. package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-C5T60MKf.js} +13 -13
  243. package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-ClS_NB07.js} +13 -13
  244. package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-ljtY12VM.cjs} +12 -12
  245. package/dist/src/{scanner-1DqWi1Ej.js → scanner-nOCWNIXa.js} +7 -7
  246. package/dist/src/server/index.js +1067 -265
  247. package/dist/src/{server-Dx2TyCH2.cjs → server-BEECpeGG.cjs} +5 -5
  248. package/dist/src/{server-BNYztJkh.js → server-ByiF3qlg.js} +9 -8
  249. package/dist/src/{server-BSB45Nt9.js → server-ByxbqAcQ.js} +8 -7
  250. package/dist/src/{server-DaA2eR26.cjs → server-C0XKRNB_.cjs} +1 -1
  251. package/dist/src/server-C_15p79-.js +3 -0
  252. package/dist/src/{server-D6Il2Sob.js → server-gyd6d4Hc.js} +5 -5
  253. package/dist/src/{signal-CE5G3a7x.js → signal-DTtUuU3l.js} +3 -3
  254. package/dist/src/{slack-acRb0IqQ.js → slack-4zZX1OKP.js} +1 -1
  255. package/dist/src/{slack-1Rhq0EoV.cjs → slack-BLlsDpfG.cjs} +1 -1
  256. package/dist/src/{slack-D5Wpy8LM.js → slack-BPYLQLgb.js} +2 -2
  257. package/dist/src/{slack-DDUe-5MC.js → slack-Bamy_7te.js} +2 -2
  258. package/dist/src/{store-DAAyxcy6.cjs → store-2K0kDi80.cjs} +2 -2
  259. package/dist/src/{store-Dn9HUkdW.js → store-2OXm_eBY.js} +3 -3
  260. package/dist/src/store-BELqNwvz.js +3 -0
  261. package/dist/src/{store-M0b1WfYb.js → store-BPkzEyFM.js} +2 -2
  262. package/dist/src/{store-CYEy5J2D.js → store-CPh25336.js} +3 -3
  263. package/dist/src/store-uQZ4AjPe.cjs +2 -0
  264. package/dist/src/{tables-CsWou1Bx.js → tables-BMSOS2Gg.js} +3 -3
  265. package/dist/src/{tables-DUfh1F7Z.cjs → tables-CXbaZ9y1.cjs} +2 -2
  266. package/dist/src/{tables-C4CH3zRr.js → tables-NlvH23ky.js} +3 -3
  267. package/dist/src/{tables-DQ4WU5tX.js → tables-WgdUZ8Ck.js} +2 -2
  268. package/dist/src/{telemetry-dbaJ0E98.js → telemetry--iqaGyaS.js} +5 -4
  269. package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CEQxGnMZ.cjs} +7 -6
  270. package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-CgdVGV8N.js} +4 -3
  271. package/dist/src/{telemetry-CQPez_Jp.js → telemetry-DWdGHvEf.js} +5 -4
  272. package/dist/src/telemetry-DjNoC_n3.cjs +2 -0
  273. package/dist/src/telemetry-ZdPZc0fm.js +3 -0
  274. package/dist/src/{text-BVi-cLPJ.cjs → text-BiNME7QG.cjs} +1 -1
  275. package/dist/src/{text-KvuD2Iko.js → text-D4lz-Jg_.js} +1 -1
  276. package/dist/src/{text-DHxdyQqT.js → text-DDQP0tuQ.js} +1 -1
  277. package/dist/src/{text-CZr46tp_.js → text-NWvfMfkF.js} +1 -1
  278. package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-2wIvAhB3.js} +1 -1
  279. package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-4c780gFd.js} +1 -1
  280. package/dist/src/tokenUsageUtils-BjVkdk18.js +142 -0
  281. package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-C9odhsbW.cjs} +1 -1
  282. package/dist/src/{transcription-DuWDupG7.js → transcription-84t4ALo2.js} +5 -5
  283. package/dist/src/{transcription-CJspiD2c.js → transcription-Bm2emLmJ.js} +6 -6
  284. package/dist/src/{transcription-BvjmiYB1.cjs → transcription-CZ4LG5hQ.cjs} +5 -5
  285. package/dist/src/{transcription-V2HaAmy2.js → transcription-D7Q0vJsh.js} +6 -6
  286. package/dist/src/{transform-zDhMmzwX.js → transform-B-b6Cq-q.js} +5 -5
  287. package/dist/src/transform-BQt0BeAW.js +3 -0
  288. package/dist/src/{transform-DgKlRr73.cjs → transform-Bq5oqC0s.cjs} +1 -1
  289. package/dist/src/{transform-CUnzlsbn.cjs → transform-C9izGX54.cjs} +4 -4
  290. package/dist/src/{transform-DYX1_Xnh.js → transform-CwbAZ84V.js} +5 -5
  291. package/dist/src/{transform-CTeuTR3S.cjs → transform-Dg4LcO1Y.cjs} +6 -6
  292. package/dist/src/{transform-CG0ehZNG.js → transform-DtooZqYY.js} +6 -6
  293. package/dist/src/{transform-UN5UGu8U.js → transform-DzCF-wqV.js} +5 -5
  294. package/dist/src/{transform-lQrDE1BQ.js → transform-_DpNB4qp.js} +5 -5
  295. package/dist/src/{transform-Bbg6A8Jk.js → transform-eGiUAv86.js} +4 -4
  296. package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-B22swDxr.cjs} +1 -1
  297. package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-lvCCvuPT.js} +1 -1
  298. package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-rJGPccjr.js} +1 -1
  299. package/dist/src/{types-Bgh5SOn6.js → types-BDjGOq4E.js} +4 -2
  300. package/dist/src/{types-Dm9JM6Vb.js → types-BVH9hjgW.js} +4 -2
  301. package/dist/src/{types-CeaeaZdP.cjs → types-CgG2rKiW.cjs} +151 -149
  302. package/dist/src/{types-BGQDAP8i.js → types-DNRZVOue.js} +152 -150
  303. package/dist/src/{util-C8e5uydV.js → util-3pBZZb_H.js} +142 -17
  304. package/dist/src/{util-CN3SrLT4.cjs → util-A5_ZsQUn.cjs} +65 -43
  305. package/dist/src/{util-D3q0WQ-0.js → util-B9CNhyac.js} +66 -44
  306. package/dist/src/{util-DxWpWjhc.js → util-BQOCAHQC.js} +700 -575
  307. package/dist/src/{util-BYvQUPp7.js → util-BVXcTwXu.js} +3 -3
  308. package/dist/src/{util-D9TisOyk.js → util-BlFVL0UF.js} +65 -43
  309. package/dist/src/{util-C9J8ahRn.js → util-C-kmRosx.js} +66 -44
  310. package/dist/src/{util-DvU2Pw8c.js → util-DFPeFkiV.js} +3 -3
  311. package/dist/src/{util-DDs-7g6-.js → util-DN0-b81k.js} +3 -3
  312. package/dist/src/{util-olYL5C6N.cjs → util-Dpmm_dAI.cjs} +3 -3
  313. package/dist/src/{util-oGMLA7vc.js → util-Dub0f_ej.js} +700 -575
  314. package/dist/src/{util-Bxn8emtE.cjs → util-DvpHnLt0.cjs} +718 -570
  315. package/dist/src/{utils-DJfvjyMj.js → utils-BUMN8orw.js} +3 -3
  316. package/dist/src/{utils-B05gLxER.cjs → utils-DkVeShIB.cjs} +2 -2
  317. package/dist/src/{utils-BLJKfv0y.js → utils-kt7lv30R.js} +3 -3
  318. package/dist/src/{utils-hXtCYanr.js → utils-o8S5huU2.js} +2 -2
  319. package/dist/src/version-0frU0UTr.js +16 -0
  320. package/dist/src/version-CbpiUINz.js +17 -0
  321. package/dist/src/version-CbuBKu2U.js +16 -0
  322. package/dist/src/version-D9zu9FWB.cjs +27 -0
  323. package/dist/tsconfig.tsbuildinfo +1 -1
  324. package/package.json +22 -20
  325. package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
  326. package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
  327. package/dist/src/cache-Cr9oLMUa.js +0 -3
  328. package/dist/src/cloud-Hphvo8kr.js +0 -3
  329. package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
  330. package/dist/src/evalResult-D8MT9p0s.js +0 -3
  331. package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
  332. package/dist/src/evaluator-CVessDWe.js +0 -3
  333. package/dist/src/fetch-C7bGKDlQ.js +0 -3
  334. package/dist/src/graders-BOAzQEUe.cjs +0 -2
  335. package/dist/src/graders-D4BTsZdG2.js +0 -3
  336. package/dist/src/graders-DOJK1XpV.js +0 -2
  337. package/dist/src/graders-NAv9LcBn.js +0 -2
  338. package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
  339. package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
  340. package/dist/src/server-DCtHUqlp.js +0 -3
  341. package/dist/src/store-CWOSz6D_.cjs +0 -2
  342. package/dist/src/store-DCDBhv7B.js +0 -3
  343. package/dist/src/telemetry-C1IqxcdW.js +0 -3
  344. package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
  345. package/dist/src/transform-M6ITAESf.js +0 -3
  346. /package/dist/src/{evalResult-DElBuddX.js → evalResult-spPqh1G_.js} +0 -0
@@ -1,16 +1,17 @@
1
1
  const require_logger = require("./logger-COuQb2xB.cjs");
2
2
  const require_invariant = require("./invariant-kfQ8Bu82.cjs");
3
+ const require_version = require("./version-D9zu9FWB.cjs");
3
4
  let fs = require("fs");
4
5
  fs = require_logger.__toESM(fs);
5
6
  let path = require("path");
6
7
  path = require_logger.__toESM(path);
7
8
  let js_yaml = require("js-yaml");
8
9
  js_yaml = require_logger.__toESM(js_yaml);
9
- let util = require("util");
10
10
  let fs_promises = require("fs/promises");
11
11
  fs_promises = require_logger.__toESM(fs_promises);
12
12
  let proxy_from_env = require("proxy-from-env");
13
13
  let undici = require("undici");
14
+ let util = require("util");
14
15
  let zlib = require("zlib");
15
16
  //#region src/providers/constants.ts
16
17
  const FILE_METADATA_KEY = "_promptfooFileMetadata";
@@ -19,19 +20,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
19
20
  * Used to distinguish human ratings from automated assertions.
20
21
  */
21
22
  const HUMAN_ASSERTION_TYPE = "human";
22
- //#endregion
23
- //#region src/version.ts
24
- /**
25
- * Application version from package.json.
26
- * Injected at build time, or read from npm environment in development.
27
- */
28
- const VERSION = "0.121.4";
29
- /**
30
- * PostHog analytics key.
31
- * Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
32
- * Empty string in development/test.
33
- */
34
- const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
35
23
  function getShareApiBaseUrl() {
36
24
  return require_logger.getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
37
25
  }
@@ -47,6 +35,220 @@ const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
47
35
  const EVENTS_ENDPOINT = "https://a.promptfoo.app";
48
36
  const R_ENDPOINT = "https://r.promptfoo.app/";
49
37
  //#endregion
38
+ //#region src/globalConfig/globalConfig.ts
39
+ /**
40
+ * Functions for manipulating the global configuration file, which lives at
41
+ * ~/.promptfoo/promptfoo.yaml by default.
42
+ */
43
+ function writeGlobalConfig(config) {
44
+ fs.writeFileSync(path.join(require_logger.getConfigDirectoryPath(true), "promptfoo.yaml"), js_yaml.default.dump(config));
45
+ }
46
+ function readGlobalConfig() {
47
+ const configDir = require_logger.getConfigDirectoryPath();
48
+ const configFilePath = path.join(configDir, "promptfoo.yaml");
49
+ let globalConfig = { id: crypto.randomUUID() };
50
+ if (fs.existsSync(configFilePath)) {
51
+ globalConfig = js_yaml.default.load(fs.readFileSync(configFilePath, "utf-8")) || {};
52
+ if (!globalConfig?.id) {
53
+ globalConfig = {
54
+ ...globalConfig,
55
+ id: crypto.randomUUID()
56
+ };
57
+ writeGlobalConfig(globalConfig);
58
+ }
59
+ } else {
60
+ if (!fs.existsSync(configDir)) fs.mkdirSync(configDir, { recursive: true });
61
+ fs.writeFileSync(configFilePath, js_yaml.default.dump(globalConfig));
62
+ }
63
+ return globalConfig;
64
+ }
65
+ /**
66
+ * Merges the top-level keys into existing config.
67
+ * @param partialConfig New keys to merge into the existing config.
68
+ */
69
+ function writeGlobalConfigPartial(partialConfig) {
70
+ const updatedConfig = { ...readGlobalConfig() };
71
+ Object.entries(partialConfig).forEach(([key, value]) => {
72
+ if (value !== void 0 && value !== null) updatedConfig[key] = value;
73
+ else delete updatedConfig[key];
74
+ });
75
+ writeGlobalConfig(updatedConfig);
76
+ }
77
+ const API_HOST = require_logger.getEnvString("API_HOST", "https://api.promptfoo.app");
78
+ const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
79
+ var CloudConfig = class {
80
+ config;
81
+ constructor() {
82
+ const savedConfig = readGlobalConfig()?.cloud || {};
83
+ this.config = {
84
+ appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
85
+ apiHost: savedConfig.apiHost,
86
+ apiKey: savedConfig.apiKey,
87
+ sharing: savedConfig.sharing,
88
+ currentOrganizationId: savedConfig.currentOrganizationId,
89
+ currentTeamId: savedConfig.currentTeamId,
90
+ teams: savedConfig.teams
91
+ };
92
+ }
93
+ /**
94
+ * Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
95
+ * Config file takes precedence over environment variable.
96
+ */
97
+ resolveApiKey() {
98
+ return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
99
+ }
100
+ /**
101
+ * Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
102
+ * or defaults to the standard cloud API host.
103
+ * Config file takes precedence over environment variable.
104
+ */
105
+ resolveApiHost() {
106
+ return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
107
+ }
108
+ isEnabled() {
109
+ return !!this.resolveApiKey();
110
+ }
111
+ setApiHost(apiHost) {
112
+ this.config.apiHost = apiHost;
113
+ this.saveConfig();
114
+ }
115
+ setApiKey(apiKey) {
116
+ this.config.apiKey = apiKey;
117
+ this.saveConfig();
118
+ }
119
+ getApiKey() {
120
+ return this.resolveApiKey();
121
+ }
122
+ getApiHost() {
123
+ return this.resolveApiHost();
124
+ }
125
+ setAppUrl(appUrl) {
126
+ this.config.appUrl = appUrl;
127
+ this.saveConfig();
128
+ }
129
+ getAppUrl() {
130
+ return this.config.appUrl;
131
+ }
132
+ getSharing() {
133
+ return this.config.sharing;
134
+ }
135
+ /**
136
+ * Sets the sharing preference. Note: this value is only updated at authentication time
137
+ * (via `validateAndSetApiToken`) and may become stale if the user's license status
138
+ * changes between re-authentications.
139
+ */
140
+ setSharing(sharing) {
141
+ this.config.sharing = sharing;
142
+ this.saveConfig();
143
+ }
144
+ delete() {
145
+ writeGlobalConfigPartial({ cloud: {} });
146
+ this.reload();
147
+ }
148
+ saveConfig() {
149
+ writeGlobalConfigPartial({ cloud: this.config });
150
+ this.reload();
151
+ }
152
+ reload() {
153
+ const savedConfig = readGlobalConfig()?.cloud || {};
154
+ this.config = {
155
+ appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
156
+ apiHost: savedConfig.apiHost,
157
+ apiKey: savedConfig.apiKey,
158
+ sharing: savedConfig.sharing,
159
+ currentOrganizationId: savedConfig.currentOrganizationId,
160
+ currentTeamId: savedConfig.currentTeamId,
161
+ teams: savedConfig.teams
162
+ };
163
+ }
164
+ saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
165
+ this.setApiKey(token);
166
+ this.setApiHost(apiHost);
167
+ this.setAppUrl(app.url);
168
+ if (typeof hasActiveLicense === "boolean") {
169
+ const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
170
+ const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
171
+ this.setSharing(hasActiveLicense || isGrandfathered);
172
+ }
173
+ }
174
+ async validateApiToken(token, apiHost) {
175
+ try {
176
+ const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
177
+ const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
178
+ if (!response.ok) {
179
+ const errorMessage = await response.text();
180
+ require_logger.logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
181
+ throw new Error("Failed to validate API token: " + response.statusText);
182
+ }
183
+ const { user, organization, app, hasActiveLicense } = await response.json();
184
+ return {
185
+ user,
186
+ organization,
187
+ app,
188
+ ...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
189
+ };
190
+ } catch (err) {
191
+ const error = err;
192
+ const errorMessage = error instanceof Error ? error.message : String(error);
193
+ require_logger.logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
194
+ if (error.cause) require_logger.logger.error(`Cause: ${error.cause}`);
195
+ throw error;
196
+ }
197
+ }
198
+ async validateAndSetApiToken(token, apiHost) {
199
+ const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
200
+ this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
201
+ return {
202
+ user,
203
+ organization,
204
+ app,
205
+ hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
206
+ };
207
+ }
208
+ getCurrentOrganizationId() {
209
+ return this.config.currentOrganizationId;
210
+ }
211
+ setCurrentOrganization(organizationId) {
212
+ this.config.currentOrganizationId = organizationId;
213
+ this.saveConfig();
214
+ }
215
+ getCurrentTeamId(organizationId) {
216
+ if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
217
+ return this.config.currentTeamId;
218
+ }
219
+ setCurrentTeamId(teamId, organizationId) {
220
+ if (organizationId) {
221
+ if (!this.config.teams) this.config.teams = {};
222
+ if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
223
+ this.config.teams[organizationId].currentTeamId = teamId;
224
+ } else this.config.currentTeamId = teamId;
225
+ this.saveConfig();
226
+ }
227
+ clearCurrentTeamId(organizationId) {
228
+ if (organizationId) {
229
+ if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
230
+ } else delete this.config.currentTeamId;
231
+ this.saveConfig();
232
+ }
233
+ cacheTeams(teams, organizationId) {
234
+ if (organizationId) {
235
+ if (!this.config.teams) this.config.teams = {};
236
+ if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
237
+ this.config.teams[organizationId].cache = teams.map((t) => ({
238
+ id: t.id,
239
+ name: t.name,
240
+ slug: t.slug,
241
+ lastFetched: (/* @__PURE__ */ new Date()).toISOString()
242
+ }));
243
+ }
244
+ this.saveConfig();
245
+ }
246
+ getCachedTeams(organizationId) {
247
+ if (organizationId) return this.config.teams?.[organizationId]?.cache;
248
+ }
249
+ };
250
+ const cloudConfig = new CloudConfig();
251
+ //#endregion
50
252
  //#region src/providers/shared.ts
51
253
  /**
52
254
  * The default timeout for API requests in milliseconds.
@@ -71,8 +273,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
71
273
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
72
274
  const model = models.find((m) => m.id === modelName);
73
275
  if (!model || !model.cost) return;
74
- const inputCost = config.cost ?? model.cost.input;
75
- const outputCost = config.cost ?? model.cost.output;
276
+ const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
277
+ const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
278
+ const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
76
279
  return inputCost * promptTokens + outputCost * completionTokens;
77
280
  }
78
281
  /**
@@ -440,220 +643,6 @@ function getCurrentTimestamp() {
440
643
  }
441
644
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
442
645
  //#endregion
443
- //#region src/globalConfig/globalConfig.ts
444
- /**
445
- * Functions for manipulating the global configuration file, which lives at
446
- * ~/.promptfoo/promptfoo.yaml by default.
447
- */
448
- function writeGlobalConfig(config) {
449
- fs.writeFileSync(path.join(require_logger.getConfigDirectoryPath(true), "promptfoo.yaml"), js_yaml.default.dump(config));
450
- }
451
- function readGlobalConfig() {
452
- const configDir = require_logger.getConfigDirectoryPath();
453
- const configFilePath = path.join(configDir, "promptfoo.yaml");
454
- let globalConfig = { id: crypto.randomUUID() };
455
- if (fs.existsSync(configFilePath)) {
456
- globalConfig = js_yaml.default.load(fs.readFileSync(configFilePath, "utf-8")) || {};
457
- if (!globalConfig?.id) {
458
- globalConfig = {
459
- ...globalConfig,
460
- id: crypto.randomUUID()
461
- };
462
- writeGlobalConfig(globalConfig);
463
- }
464
- } else {
465
- if (!fs.existsSync(configDir)) fs.mkdirSync(configDir, { recursive: true });
466
- fs.writeFileSync(configFilePath, js_yaml.default.dump(globalConfig));
467
- }
468
- return globalConfig;
469
- }
470
- /**
471
- * Merges the top-level keys into existing config.
472
- * @param partialConfig New keys to merge into the existing config.
473
- */
474
- function writeGlobalConfigPartial(partialConfig) {
475
- const updatedConfig = { ...readGlobalConfig() };
476
- Object.entries(partialConfig).forEach(([key, value]) => {
477
- if (value !== void 0 && value !== null) updatedConfig[key] = value;
478
- else delete updatedConfig[key];
479
- });
480
- writeGlobalConfig(updatedConfig);
481
- }
482
- const API_HOST = require_logger.getEnvString("API_HOST", "https://api.promptfoo.app");
483
- const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
484
- var CloudConfig = class {
485
- config;
486
- constructor() {
487
- const savedConfig = readGlobalConfig()?.cloud || {};
488
- this.config = {
489
- appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
490
- apiHost: savedConfig.apiHost,
491
- apiKey: savedConfig.apiKey,
492
- sharing: savedConfig.sharing,
493
- currentOrganizationId: savedConfig.currentOrganizationId,
494
- currentTeamId: savedConfig.currentTeamId,
495
- teams: savedConfig.teams
496
- };
497
- }
498
- /**
499
- * Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
500
- * Config file takes precedence over environment variable.
501
- */
502
- resolveApiKey() {
503
- return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
504
- }
505
- /**
506
- * Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
507
- * or defaults to the standard cloud API host.
508
- * Config file takes precedence over environment variable.
509
- */
510
- resolveApiHost() {
511
- return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
512
- }
513
- isEnabled() {
514
- return !!this.resolveApiKey();
515
- }
516
- setApiHost(apiHost) {
517
- this.config.apiHost = apiHost;
518
- this.saveConfig();
519
- }
520
- setApiKey(apiKey) {
521
- this.config.apiKey = apiKey;
522
- this.saveConfig();
523
- }
524
- getApiKey() {
525
- return this.resolveApiKey();
526
- }
527
- getApiHost() {
528
- return this.resolveApiHost();
529
- }
530
- setAppUrl(appUrl) {
531
- this.config.appUrl = appUrl;
532
- this.saveConfig();
533
- }
534
- getAppUrl() {
535
- return this.config.appUrl;
536
- }
537
- getSharing() {
538
- return this.config.sharing;
539
- }
540
- /**
541
- * Sets the sharing preference. Note: this value is only updated at authentication time
542
- * (via `validateAndSetApiToken`) and may become stale if the user's license status
543
- * changes between re-authentications.
544
- */
545
- setSharing(sharing) {
546
- this.config.sharing = sharing;
547
- this.saveConfig();
548
- }
549
- delete() {
550
- writeGlobalConfigPartial({ cloud: {} });
551
- this.reload();
552
- }
553
- saveConfig() {
554
- writeGlobalConfigPartial({ cloud: this.config });
555
- this.reload();
556
- }
557
- reload() {
558
- const savedConfig = readGlobalConfig()?.cloud || {};
559
- this.config = {
560
- appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
561
- apiHost: savedConfig.apiHost,
562
- apiKey: savedConfig.apiKey,
563
- sharing: savedConfig.sharing,
564
- currentOrganizationId: savedConfig.currentOrganizationId,
565
- currentTeamId: savedConfig.currentTeamId,
566
- teams: savedConfig.teams
567
- };
568
- }
569
- saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
570
- this.setApiKey(token);
571
- this.setApiHost(apiHost);
572
- this.setAppUrl(app.url);
573
- if (typeof hasActiveLicense === "boolean") {
574
- const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
575
- const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
576
- this.setSharing(hasActiveLicense || isGrandfathered);
577
- }
578
- }
579
- async validateApiToken(token, apiHost) {
580
- try {
581
- const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
582
- const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
583
- if (!response.ok) {
584
- const errorMessage = await response.text();
585
- require_logger.logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
586
- throw new Error("Failed to validate API token: " + response.statusText);
587
- }
588
- const { user, organization, app, hasActiveLicense } = await response.json();
589
- return {
590
- user,
591
- organization,
592
- app,
593
- ...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
594
- };
595
- } catch (err) {
596
- const error = err;
597
- const errorMessage = error instanceof Error ? error.message : String(error);
598
- require_logger.logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
599
- if (error.cause) require_logger.logger.error(`Cause: ${error.cause}`);
600
- throw error;
601
- }
602
- }
603
- async validateAndSetApiToken(token, apiHost) {
604
- const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
605
- this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
606
- return {
607
- user,
608
- organization,
609
- app,
610
- hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
611
- };
612
- }
613
- getCurrentOrganizationId() {
614
- return this.config.currentOrganizationId;
615
- }
616
- setCurrentOrganization(organizationId) {
617
- this.config.currentOrganizationId = organizationId;
618
- this.saveConfig();
619
- }
620
- getCurrentTeamId(organizationId) {
621
- if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
622
- return this.config.currentTeamId;
623
- }
624
- setCurrentTeamId(teamId, organizationId) {
625
- if (organizationId) {
626
- if (!this.config.teams) this.config.teams = {};
627
- if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
628
- this.config.teams[organizationId].currentTeamId = teamId;
629
- } else this.config.currentTeamId = teamId;
630
- this.saveConfig();
631
- }
632
- clearCurrentTeamId(organizationId) {
633
- if (organizationId) {
634
- if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
635
- } else delete this.config.currentTeamId;
636
- this.saveConfig();
637
- }
638
- cacheTeams(teams, organizationId) {
639
- if (organizationId) {
640
- if (!this.config.teams) this.config.teams = {};
641
- if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
642
- this.config.teams[organizationId].cache = teams.map((t) => ({
643
- id: t.id,
644
- name: t.name,
645
- slug: t.slug,
646
- lastFetched: (/* @__PURE__ */ new Date()).toISOString()
647
- }));
648
- }
649
- this.saveConfig();
650
- }
651
- getCachedTeams(organizationId) {
652
- if (organizationId) return this.config.teams?.[organizationId]?.cache;
653
- }
654
- };
655
- const cloudConfig = new CloudConfig();
656
- //#endregion
657
646
  //#region src/util/fetch/monkeyPatchFetch.ts
658
647
  const gzipAsync = (0, util.promisify)(zlib.gzip);
659
648
  function isConnectionError(error) {
@@ -786,7 +775,7 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
786
775
  ...options,
787
776
  headers: {
788
777
  ...options.headers,
789
- "x-promptfoo-version": VERSION
778
+ "x-promptfoo-version": require_version.VERSION
790
779
  },
791
780
  signal: combinedSignal
792
781
  };
@@ -979,12 +968,6 @@ Object.defineProperty(exports, "LONG_RUNNING_MODEL_TIMEOUT_MS", {
979
968
  return LONG_RUNNING_MODEL_TIMEOUT_MS;
980
969
  }
981
970
  });
982
- Object.defineProperty(exports, "POSTHOG_KEY", {
983
- enumerable: true,
984
- get: function() {
985
- return POSTHOG_KEY;
986
- }
987
- });
988
971
  Object.defineProperty(exports, "REQUEST_TIMEOUT_MS", {
989
972
  enumerable: true,
990
973
  get: function() {
@@ -1003,12 +986,6 @@ Object.defineProperty(exports, "TERMINAL_MAX_WIDTH", {
1003
986
  return TERMINAL_MAX_WIDTH;
1004
987
  }
1005
988
  });
1006
- Object.defineProperty(exports, "VERSION", {
1007
- enumerable: true,
1008
- get: function() {
1009
- return VERSION;
1010
- }
1011
- });
1012
989
  Object.defineProperty(exports, "calculateCost", {
1013
990
  enumerable: true,
1014
991
  get: function() {
@@ -1160,4 +1137,4 @@ Object.defineProperty(exports, "writeGlobalConfigPartial", {
1160
1137
  }
1161
1138
  });
1162
1139
 
1163
- //# sourceMappingURL=fetch-CJU5ELPa.cjs.map
1140
+ //# sourceMappingURL=fetch-NuqXW1Xb.cjs.map
@@ -1,6 +1,7 @@
1
1
  import { t as __exportAll } from "./chunk-DEq-mXcV.js";
2
- import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-B88EkIn6.js";
3
- import { t as invariant } from "./invariant-vgHWClmd.js";
2
+ import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-KD8JjCRJ.js";
3
+ import { n as VERSION } from "./version-0frU0UTr.js";
4
+ import { t as invariant } from "./invariant-DIYf9sP1.js";
4
5
  import * as fs$2 from "fs";
5
6
  import * as path$1 from "path";
6
7
  import path from "path";
@@ -17,19 +18,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
17
18
  * Used to distinguish human ratings from automated assertions.
18
19
  */
19
20
  const HUMAN_ASSERTION_TYPE = "human";
20
- //#endregion
21
- //#region src/version.ts
22
- /**
23
- * Application version from package.json.
24
- * Injected at build time, or read from npm environment in development.
25
- */
26
- const VERSION = "0.121.4";
27
- /**
28
- * PostHog analytics key.
29
- * Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
30
- * Empty string in development/test.
31
- */
32
- const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
33
21
  function getShareApiBaseUrl() {
34
22
  return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
35
23
  }
@@ -72,8 +60,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
72
60
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
73
61
  const model = models.find((m) => m.id === modelName);
74
62
  if (!model || !model.cost) return;
75
- const inputCost = config.cost ?? model.cost.input;
76
- const outputCost = config.cost ?? model.cost.output;
63
+ const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
64
+ const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
65
+ const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
77
66
  return inputCost * promptTokens + outputCost * completionTokens;
78
67
  }
79
68
  /**
@@ -938,6 +927,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
938
927
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
939
928
  }
940
929
  //#endregion
941
- export { TERMINAL_MAX_WIDTH as A, toTitleCase as C, CONSENT_ENDPOINT as D, CLOUD_PROVIDER_PREFIX as E, POSTHOG_KEY as F, VERSION as I, FILE_METADATA_KEY as L, getDefaultShareViewBaseUrl as M, getShareApiBaseUrl as N, EVENTS_ENDPOINT as O, getShareViewBaseUrl as P, HUMAN_ASSERTION_TYPE as R, parseChatPrompt as S, transformTools as T, isOpenAIToolArray as _, CloudConfig as a, openaiToolChoiceToBedrock as b, writeGlobalConfig as c, sleep as d, parseRateLimitHeaders as f, calculateCost as g, REQUEST_TIMEOUT_MS as h, fetch_exports as i, getDefaultPort as j, R_ENDPOINT as k, writeGlobalConfigPartial as l, LONG_RUNNING_MODEL_TIMEOUT_MS as m, fetchWithRetries as n, cloudConfig as o, parseRetryAfter as p, fetchWithTimeout as r, readGlobalConfig as s, fetchWithProxy as t, getCurrentTimestamp as u, isOpenAIToolChoice as v, transformToolChoice as w, openaiToolsToBedrock as x, isPromptfooSampleTarget as y };
930
+ export { TERMINAL_MAX_WIDTH as A, toTitleCase as C, CONSENT_ENDPOINT as D, CLOUD_PROVIDER_PREFIX as E, FILE_METADATA_KEY as F, HUMAN_ASSERTION_TYPE as I, getDefaultShareViewBaseUrl as M, getShareApiBaseUrl as N, EVENTS_ENDPOINT as O, getShareViewBaseUrl as P, parseChatPrompt as S, transformTools as T, isOpenAIToolArray as _, CloudConfig as a, openaiToolChoiceToBedrock as b, writeGlobalConfig as c, sleep as d, parseRateLimitHeaders as f, calculateCost as g, REQUEST_TIMEOUT_MS as h, fetch_exports as i, getDefaultPort as j, R_ENDPOINT as k, writeGlobalConfigPartial as l, LONG_RUNNING_MODEL_TIMEOUT_MS as m, fetchWithRetries as n, cloudConfig as o, parseRetryAfter as p, fetchWithTimeout as r, readGlobalConfig as s, fetchWithProxy as t, getCurrentTimestamp as u, isOpenAIToolChoice as v, transformToolChoice as w, openaiToolsToBedrock as x, isPromptfooSampleTarget as y };
942
931
 
943
- //# sourceMappingURL=fetch-B0Z3Oe4k.js.map
932
+ //# sourceMappingURL=fetch-Y5qX_kST.js.map
@@ -82,4 +82,4 @@ function isAudioFile(filePath) {
82
82
  //#endregion
83
83
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
84
84
 
85
- //# sourceMappingURL=fileExtensions-BArZuxsI.js.map
85
+ //# sourceMappingURL=fileExtensions-8CjoL7vB.js.map
@@ -82,4 +82,4 @@ function isAudioFile(filePath) {
82
82
  //#endregion
83
83
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
84
84
 
85
- //# sourceMappingURL=fileExtensions-DnqA1y9x.js.map
85
+ //# sourceMappingURL=fileExtensions-BGh-W-HT.js.map
@@ -111,4 +111,4 @@ Object.defineProperty(exports, "isVideoFile", {
111
111
  }
112
112
  });
113
113
 
114
- //# sourceMappingURL=fileExtensions-bYh77CN8.cjs.map
114
+ //# sourceMappingURL=fileExtensions-D9h-8Wxg.cjs.map
@@ -83,4 +83,4 @@ function isAudioFile(filePath) {
83
83
  //#endregion
84
84
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
85
85
 
86
- //# sourceMappingURL=fileExtensions-AWa2ZML4.js.map
86
+ //# sourceMappingURL=fileExtensions-DysCsxNG.js.map
@@ -20,4 +20,4 @@ function formatDuration(seconds) {
20
20
  //#endregion
21
21
  export { formatDuration as t };
22
22
 
23
- //# sourceMappingURL=formatDuration-DZzPsexs.js.map
23
+ //# sourceMappingURL=formatDuration-Ch4A7G3o.js.map
@@ -269,4 +269,4 @@ Object.defineProperty(exports, "withGenAISpan", {
269
269
  }
270
270
  });
271
271
 
272
- //# sourceMappingURL=genaiTracer-yRuxj9-L.cjs.map
272
+ //# sourceMappingURL=genaiTracer-BokHC-MW.cjs.map
@@ -258,4 +258,4 @@ function getTraceparent() {
258
258
  //#endregion
259
259
  export { withGenAISpan as n, getTraceparent as t };
260
260
 
261
- //# sourceMappingURL=genaiTracer-DWdZ28hY.js.map
261
+ //# sourceMappingURL=genaiTracer-C3ZPQU60.js.map
@@ -257,4 +257,4 @@ function getTraceparent() {
257
257
  //#endregion
258
258
  export { withGenAISpan as n, getTraceparent as t };
259
259
 
260
- //# sourceMappingURL=genaiTracer-XnrcgDCe.js.map
260
+ //# sourceMappingURL=genaiTracer-CFny3gOy.js.map
@@ -257,4 +257,4 @@ function getTraceparent() {
257
257
  //#endregion
258
258
  export { withGenAISpan as n, getTraceparent as t };
259
259
 
260
- //# sourceMappingURL=genaiTracer-COYDi-tC.js.map
260
+ //# sourceMappingURL=genaiTracer-DxODqT9e.js.map