promptfoo 0.121.4 → 0.121.7

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 (497) hide show
  1. package/dist/src/{ListApp-DQkFNqE9.js → ListApp-DLmM02JS.js} +1 -1
  2. package/dist/src/{accounts-DhMYUUbu.js → accounts-Ca7WIoPY.js} +12 -7
  3. package/dist/src/{accounts-F9d_5sMC.js → accounts-CjFnOPmb.js} +14 -9
  4. package/dist/src/{accounts-Dy17bs4D.cjs → accounts-CmWzeD2d.cjs} +16 -10
  5. package/dist/src/{accounts-DdJ2pHMI.js → accounts-DanM1wq_.js} +13 -8
  6. package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-CJ0j3fBi.js} +3 -3
  7. package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-DDEGRV9v.js} +3 -3
  8. package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
  9. package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-TxUEMPYS.js} +2 -2
  10. package/dist/src/{agents-BahDpe5G.cjs → agents-B4sRuXg3.cjs} +7 -6
  11. package/dist/src/{agents-pQeBEXMm.js → agents-B8q7h_ek.js} +5 -5
  12. package/dist/src/{agents-CgaMXvLM.js → agents-CBgJvRkB.js} +21 -10
  13. package/dist/src/{agents-C-R_jfzI.js → agents-CYn2n3QP.js} +4 -4
  14. package/dist/src/{agents-8FDnTriG.js → agents-D-vDNFx4.js} +21 -10
  15. package/dist/src/{agents-aYPQLf8W.js → agents-LrHuQqr1.js} +20 -9
  16. package/dist/src/{agents-DJ35I3Nt.js → agents-QGg76OF-.js} +5 -5
  17. package/dist/src/{agents-D7-HGxUj.cjs → agents-eHZ9nlgA.cjs} +21 -10
  18. package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-CJEbQ0o6.js} +7 -7
  19. package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-D5HXzZ0s.js} +6 -6
  20. package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
  21. package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-eYv3a_DK.js} +7 -7
  22. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
  23. package/dist/src/app/assets/Report-BNHJKN35.js +1 -0
  24. package/dist/src/app/assets/index-BnT6P6sF.js +388 -0
  25. package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
  26. package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
  27. package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
  28. package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
  29. package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
  30. package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
  31. package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
  32. package/dist/src/app/index.html +31 -6
  33. package/dist/src/{audio-COrn8rM6.js → audio-BqnRvcWG.js} +3 -3
  34. package/dist/src/{audio-DcVKoInv.js → audio-CPMtV1yR.js} +4 -4
  35. package/dist/src/{audio-B7izf48x.js → audio-DyiebVB3.js} +4 -4
  36. package/dist/src/{audio-BQtNuYBj.cjs → audio-FnxbEnSE.cjs} +4 -4
  37. package/dist/src/authoritativeMarkupInjection-BZIywVjG.js +74 -0
  38. package/dist/src/authoritativeMarkupInjection-DyAXAsSr.js +75 -0
  39. package/dist/src/authoritativeMarkupInjection-F2gBw0lN.cjs +74 -0
  40. package/dist/src/authoritativeMarkupInjection-QEQmFS83.js +74 -0
  41. package/dist/src/{base-PYJvBE1i.js → base-CKLo890h.js} +4 -3
  42. package/dist/src/{base-fZ9wgg50.js → base-Co80MMCi.js} +5 -4
  43. package/dist/src/{base-D-670DX8.cjs → base-DGJW48uz.cjs} +5 -4
  44. package/dist/src/{base-yrI1Yal4.js → base-E9I8zXjz.js} +5 -4
  45. package/dist/src/bestOfN-B3wNzjSB.js +137 -0
  46. package/dist/src/bestOfN-BBsO41z4.js +136 -0
  47. package/dist/src/bestOfN-CAwmg5UL.cjs +140 -0
  48. package/dist/src/bestOfN-_kTi8Bxe.js +136 -0
  49. package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B0977K1O.cjs} +7 -6
  50. package/dist/src/{blobs-BCZavS8s.js → blobs-CeFdPn_T.js} +3 -3
  51. package/dist/src/{blobs-BQWqnnvL.js → blobs-DODuTK-a.js} +3 -3
  52. package/dist/src/{blobs-C-F78Kfn.js → blobs-Dwef1Ao1.js} +2 -2
  53. package/dist/src/{cache-BIyPcp5v.cjs → cache-CPGUA4Yl.cjs} +135 -25
  54. package/dist/src/cache-Cf7b4pWE.js +3 -0
  55. package/dist/src/{cache-D5NZmMiT.js → cache-DIXbtkNO.js} +125 -10
  56. package/dist/src/{cache-mb7c8hbp.js → cache-DpPWrkTE.js} +128 -12
  57. package/dist/src/{cache-C4Xb-hNb.js → cache-roFAE0cI.js} +126 -11
  58. package/dist/src/{chat-I9izLm49.js → chat-CUCorGiL.js} +12 -12
  59. package/dist/src/{chat-BPXSW8Bv.cjs → chat-DG1wG4w0.cjs} +6 -6
  60. package/dist/src/{chat-BfPaS15_.js → chat-Dabu84Br.js} +12 -12
  61. package/dist/src/{chat-Dr3DUQ0D.js → chat-DqUFcWI0.js} +12 -12
  62. package/dist/src/{chat-CclRbxGf.cjs → chat-DxTDQ83C.cjs} +14 -13
  63. package/dist/src/{chat-MKxMnZJZ.js → chat-GmlolEwo.js} +4 -4
  64. package/dist/src/{chat-0bwXjVP0.js → chat-TP8Qifkh.js} +6 -6
  65. package/dist/src/{chat-mW0ORo8G.js → chat-iwaM5UTQ.js} +6 -6
  66. package/dist/src/{chatkit-zUIVoDos.js → chatkit-B6DWi70Q.js} +4 -4
  67. package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-BYveR48_.cjs} +6 -5
  68. package/dist/src/{chatkit-Cv6AhukM.js → chatkit-fARZwEfV.js} +3 -3
  69. package/dist/src/{chatkit-CJnHRRMM.js → chatkit-lb6FK02w.js} +4 -4
  70. package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BQNp_y-F.js} +212 -67
  71. package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-D5Jl0SDh.js} +212 -67
  72. package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-DH416NBD.cjs} +218 -72
  73. package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-x1XJ1-pU.js} +212 -67
  74. package/dist/src/{cloud-DQZ5sVjW.js → cloud-D3DiFqH6.js} +3 -3
  75. package/dist/src/cloud-p96PA4MH.js +3 -0
  76. package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-B6NVI3ax.js} +4 -4
  77. package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
  78. package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-RFSojyXG.js} +6 -6
  79. package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-r4tbYmWU.js} +6 -6
  80. package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-BCkLouto.js} +5 -5
  81. package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-BaZ4insB.js} +3 -3
  82. package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-CF-Vb-2Z.js} +5 -5
  83. package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
  84. package/dist/src/codex-app-server-B8KHEiF4.js +1915 -0
  85. package/dist/src/codex-app-server-CnrLBCeA.cjs +1921 -0
  86. package/dist/src/codex-app-server-DIXZ230V.js +1915 -0
  87. package/dist/src/codex-app-server-Dd22dC_N.js +1916 -0
  88. package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-B6Wah8Pa.js} +6 -6
  89. package/dist/src/codex-sdk-BGjVAk23.js +3 -0
  90. package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
  91. package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-CmQABzV3.js} +6 -6
  92. package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-D2d54RL8.js} +5 -5
  93. package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-Bu9B8NUY.js} +8 -8
  94. package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CtzNCHKu.js} +7 -7
  95. package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-DHCDlQUI.cjs} +8 -8
  96. package/dist/src/{cometapi-BUlt_ELa.js → cometapi-OBILPLlu.js} +8 -8
  97. package/dist/src/{completion-HUe8wDhZ.js → completion-CO2e1_62.js} +6 -6
  98. package/dist/src/{completion-BozdoXba.cjs → completion-CSYfl2cd.cjs} +6 -6
  99. package/dist/src/{completion-x0a_c2y1.js → completion-DZNxcyfG.js} +6 -6
  100. package/dist/src/{completion-Dnxn7E-j.js → completion-sNvCLTAP.js} +5 -5
  101. package/dist/src/constants-BjJV0cRr.js +6 -0
  102. package/dist/src/constants-DH5XYLKZ.js +7 -0
  103. package/dist/src/constants-DZGEFLsu.js +6 -0
  104. package/dist/src/constants-a2kYssQk.cjs +11 -0
  105. package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
  106. package/dist/src/{createHash-CwDVU5xr.js → createHash-CGVzWdjj.js} +1 -1
  107. package/dist/src/{createHash-B7KvgoOD.cjs → createHash-CSiqnK5P.cjs} +2 -2
  108. package/dist/src/{createHash-ChI45QR1.js → createHash-CgRvs4Fn.js} +1 -1
  109. package/dist/src/crescendo-BXEJK_bi.cjs +704 -0
  110. package/dist/src/crescendo-CU_Y2i-m.js +702 -0
  111. package/dist/src/crescendo-J1Xx4_zb.js +703 -0
  112. package/dist/src/crescendo-QiaSLW0d.js +701 -0
  113. package/dist/src/custom-BJfP00Bh.js +619 -0
  114. package/dist/src/custom-CZVn-1-r.js +620 -0
  115. package/dist/src/custom-Cqia7M0D.cjs +621 -0
  116. package/dist/src/custom-notggYVl.js +618 -0
  117. package/dist/src/{docker-DCgsveLD.js → docker-4D1eL6Gq.js} +6 -6
  118. package/dist/src/{docker-ClnmCf1Z.js → docker-BBv1WUDu.js} +5 -5
  119. package/dist/src/{docker-DS4_Osau.cjs → docker-D06JUoe2.cjs} +6 -6
  120. package/dist/src/{docker-CQmlA2NU.js → docker-DdJQBxK9.js} +6 -6
  121. package/dist/src/{embedding-D3xTseo7.js → embedding--UZVe4_7.js} +6 -6
  122. package/dist/src/{embedding-I45KG3o7.cjs → embedding-BbrwopfX.cjs} +6 -6
  123. package/dist/src/{embedding-nFbumxcv.js → embedding-Bi3rxrZF.js} +5 -5
  124. package/dist/src/{embedding-DD9wa3ae.js → embedding-C251p1-8.js} +6 -6
  125. package/dist/src/{errors-Cw810C93.js → errors-9PcUL8BC.js} +1 -1
  126. package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
  127. package/dist/src/{esm-CtEPLdAj.cjs → esm-BIKakvNa.cjs} +8 -7
  128. package/dist/src/{esm-C7PnfdF8.js → esm-BTK1W7lG.js} +1 -1
  129. package/dist/src/{esm-tVgYPY-f.js → esm-Bexx2PFc.js} +2 -2
  130. package/dist/src/{eval-u4UVafl6.js → eval-0VRANImH.js} +21 -21
  131. package/dist/src/{eval-CzJFfFO9.js → eval-DscR5iOM.js} +1 -1
  132. package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-2RRJvFyB.js} +41 -16
  133. package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-CvtS8h8u.cjs} +51 -15
  134. package/dist/src/evalResult-DqzsS6_W.js +3 -0
  135. package/dist/src/{evalResult-D3hVYFis.js → evalResult-eUkJv9Ko.js} +40 -15
  136. package/dist/src/evaluator-DNdJF1Gv.js +3 -0
  137. package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-DRoiYB2q.js} +1060 -187
  138. package/dist/src/evaluatorHelpers-BsYP_muT.js +511 -0
  139. package/dist/src/evaluatorHelpers-CRqTvSux.cjs +537 -0
  140. package/dist/src/evaluatorHelpers-DuqFFfq7.js +510 -0
  141. package/dist/src/{extractor-CAfTSraf.js → extractor-BR7XAzAL.js} +6 -6
  142. package/dist/src/{extractor-WVPOrH43.cjs → extractor-BdxEtt3J.cjs} +6 -6
  143. package/dist/src/{extractor-DNSeBVOJ.js → extractor-CIW3iN-b.js} +6 -6
  144. package/dist/src/{extractor-Dk6bRWkv.js → extractor-CxRtnaHl.js} +5 -5
  145. package/dist/src/{fetch-B0Z3Oe4k.js → fetch-BufrQtvR.js} +93 -40
  146. package/dist/src/{fetch-BEWnXrrG.js → fetch-DXUnXkVU.js} +89 -40
  147. package/dist/src/{fetch-CJU5ELPa.cjs → fetch-Dw4XZHjj.cjs} +330 -270
  148. package/dist/src/{fetch-Di00EQrc.js → fetch-It34O8Ur.js} +305 -252
  149. package/dist/src/fetch-_YgGd2qv.js +3 -0
  150. package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
  151. package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-CXRfY3Ss.js} +12 -2
  152. package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-D4GCJ67J.js} +12 -2
  153. package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-CMVNrYvE.js} +1 -1
  154. package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-14nugQQx.cjs} +14 -2
  155. package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-BPVvltoW.js} +2 -2
  156. package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-D18lYzhB.js} +2 -2
  157. package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-jJKYsnjc.js} +2 -2
  158. package/dist/src/goat-Ckd3q3AY.js +467 -0
  159. package/dist/src/goat-Qgurm-NP.js +466 -0
  160. package/dist/src/goat-ghadEDdy.js +465 -0
  161. package/dist/src/goat-una6pZGP.cjs +469 -0
  162. package/dist/src/graders-BDT7dif6.js +3 -0
  163. package/dist/src/{graders-eIHhRqoC.js → graders-BGP99PdK.js} +2416 -2224
  164. package/dist/src/{graders-Zy3x0zqX.js → graders-BX0f2tvS.js} +2423 -2226
  165. package/dist/src/{graders-pvbReLLn.js → graders-C0nXU_ZP.js} +1806 -1609
  166. package/dist/src/{graders--zknU_uk.cjs → graders-ClrU2fnd.cjs} +2219 -1949
  167. package/dist/src/hydra-BSNZZm2M.js +543 -0
  168. package/dist/src/hydra-BxdG4nkg.js +541 -0
  169. package/dist/src/hydra-DE4xWwyc.js +542 -0
  170. package/dist/src/hydra-DrJttnvw.cjs +542 -0
  171. package/dist/src/image-B4oBtu6J.js +443 -0
  172. package/dist/src/{image-dnoUgPrC.js → image-BN-hjLL9.js} +4 -4
  173. package/dist/src/{image-9302QVqR.js → image-B_fPIwdg.js} +3 -3
  174. package/dist/src/image-BvUAW344.js +442 -0
  175. package/dist/src/image-Cvjwx1uY.js +442 -0
  176. package/dist/src/{image-De2FBmYV.cjs → image-DfVCGPbI.cjs} +4 -4
  177. package/dist/src/{image-u7-rKnYU.js → image-QzmydkiG.js} +4 -4
  178. package/dist/src/image-X0oY4350.cjs +465 -0
  179. package/dist/src/index.cjs +1689 -558
  180. package/dist/src/index.d.cts +3270 -1624
  181. package/dist/src/index.d.ts +3270 -1624
  182. package/dist/src/index.js +1553 -438
  183. package/dist/src/indirectWebPwn-02ZIghCS.js +259 -0
  184. package/dist/src/indirectWebPwn-BJ22AbQa.cjs +397 -0
  185. package/dist/src/indirectWebPwn-CbjUG0rh.js +385 -0
  186. package/dist/src/indirectWebPwn-CfQJt3gk.cjs +260 -0
  187. package/dist/src/indirectWebPwn-DBQhOjoD.js +260 -0
  188. package/dist/src/indirectWebPwn-OsXnKejv.js +259 -0
  189. package/dist/src/indirectWebPwn-tNx9OZ35.js +385 -0
  190. package/dist/src/indirectWebPwn-uyWdHx04.js +386 -0
  191. package/dist/src/inputVariables-B0qUChbV.js +467 -0
  192. package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
  193. package/dist/src/inputVariables-DXFdi7AI.js +468 -0
  194. package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
  195. package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-C4QlIuoR.js} +2 -2
  196. package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
  197. package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
  198. package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
  199. package/dist/src/iterative-CpU6i2As.js +490 -0
  200. package/dist/src/iterative-DJQEQpG3.js +491 -0
  201. package/dist/src/iterative-DQBuWM-j.cjs +493 -0
  202. package/dist/src/iterative-FTS4Bz67.js +492 -0
  203. package/dist/src/iterativeImage-BUABMVOA.js +413 -0
  204. package/dist/src/iterativeImage-ByFWkxax.cjs +415 -0
  205. package/dist/src/iterativeImage-BzUapOUi.js +414 -0
  206. package/dist/src/iterativeImage-Doz8mgxF.js +413 -0
  207. package/dist/src/iterativeMeta-B3YiAOc8.js +386 -0
  208. package/dist/src/iterativeMeta-C7APE_P1.js +385 -0
  209. package/dist/src/iterativeMeta-CSS8M6Ds.cjs +385 -0
  210. package/dist/src/iterativeMeta-DgoQ7bLh.js +384 -0
  211. package/dist/src/iterativeTree-B5zxBBSW.js +769 -0
  212. package/dist/src/iterativeTree-CNyIk0Yn.js +768 -0
  213. package/dist/src/iterativeTree-CPMF10ve.cjs +771 -0
  214. package/dist/src/iterativeTree-DvZ7GBwt.js +770 -0
  215. package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-BadkINlJ.js} +24 -10
  216. package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-Bi_8sV-H.js} +25 -11
  217. package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CkMljjdg.js} +25 -11
  218. package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
  219. package/dist/src/{litellm-DRjpcSa7.js → litellm-BKBo0jpC.js} +5 -5
  220. package/dist/src/{litellm-C2kqjxqp.js → litellm-BXyn5kZK.js} +5 -5
  221. package/dist/src/{litellm-p37R1dzQ.js → litellm-CNcfbCfa.js} +4 -4
  222. package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CtAr7bKG.cjs} +5 -5
  223. package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
  224. package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
  225. package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
  226. package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-BMX1iEB6.js} +5 -5
  227. package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CR5TSpp4.js} +5 -5
  228. package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
  229. package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-OEMmS1RB.js} +6 -6
  230. package/dist/src/main.js +909 -369
  231. package/dist/src/memoryPoisoning-CM83NWYl.js +107 -0
  232. package/dist/src/memoryPoisoning-D8h9gXJF.js +106 -0
  233. package/dist/src/memoryPoisoning-Dp-btinn.cjs +106 -0
  234. package/dist/src/memoryPoisoning-cLuCoTuJ.js +106 -0
  235. package/dist/src/{messages-BTQz42fn.js → messages-BabO-cX8.js} +273 -17
  236. package/dist/src/{messages-811uVVW5.cjs → messages-DBPir0TQ.cjs} +278 -18
  237. package/dist/src/{messages-zWbkLLHz.js → messages-DGUlSNU7.js} +273 -17
  238. package/dist/src/{messages-MYTQ2TWp.js → messages-vsE_-Lv0.js} +273 -17
  239. package/dist/src/{meteor-DHdzY1Ss.js → meteor--TZYICTI.js} +2 -2
  240. package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-CR226f7Z.cjs} +2 -2
  241. package/dist/src/{meteor-CU5UAE-H.js → meteor-Cl_yd7rJ.js} +2 -2
  242. package/dist/src/{meteor-DuAFv6gF.js → meteor-Dce-_zGQ.js} +1 -1
  243. package/dist/src/mischievousUser-0l8GD7Dp.js +46 -0
  244. package/dist/src/mischievousUser-BUOP9W5r.js +46 -0
  245. package/dist/src/mischievousUser-frFYKxu6.js +47 -0
  246. package/dist/src/mischievousUser-olGgHIVR.cjs +46 -0
  247. package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-CNV5bMSk.cjs} +7 -7
  248. package/dist/src/{modelslab-D0erNWKe.js → modelslab-Cogmu4mG.js} +6 -6
  249. package/dist/src/{modelslab-DIq-6y7x.js → modelslab-Dzst7VTU.js} +6 -6
  250. package/dist/src/{modelslab-wu9yi5GE.js → modelslab-EyDczZ5A.js} +7 -7
  251. package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-BGPNBOMS.js} +6 -6
  252. package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-B_5NKFu1.js} +5 -5
  253. package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-C4eUJGse.js} +5 -5
  254. package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
  255. package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BNGmgfFz.js} +4 -4
  256. package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-ChPlh5na.js} +4 -4
  257. package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CrV0iaY_.js} +3 -3
  258. package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
  259. package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
  260. package/dist/src/{openai-URNyItar.cjs → openai-C3uXv8wS.cjs} +2 -2
  261. package/dist/src/{openai-Qsvz25mV.js → openai-CJrsh9n4.js} +2 -2
  262. package/dist/src/{openai-iYtrXzOX.js → openai-zgwBb4Ff.js} +1 -1
  263. package/dist/src/{openclaw-CnQ363Wi.js → openclaw-BIHlu_36.js} +10 -8
  264. package/dist/src/{openclaw-CwzlQSQX.js → openclaw-CF7fMido.js} +9 -7
  265. package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-Dphc01BY.cjs} +18 -15
  266. package/dist/src/{openclaw-CLWrW03k.js → openclaw-zIJAsz3P.js} +10 -8
  267. package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-B3vlPLsp.js} +40 -5
  268. package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-D05JSgMQ.js} +40 -5
  269. package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-DoY6GbWw.cjs} +46 -10
  270. package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-sRKYHGoI.js} +39 -4
  271. package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver--gTpSagc.js} +120 -4
  272. package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-B2eaKC8C.js} +120 -4
  273. package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-BXjcRqAM.js} +119 -3
  274. package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
  275. package/dist/src/packageParser--MWTSrPW.js +36 -0
  276. package/dist/src/packageParser-CgE-ziRo.js +35 -0
  277. package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
  278. package/dist/src/packageParser-hwwSGnAZ.js +35 -0
  279. package/dist/src/processShim-BBxt7LKO.js +95 -0
  280. package/dist/src/processShim-BcGzU8fY.js +94 -0
  281. package/dist/src/processShim-C_z3aRvF.js +94 -0
  282. package/dist/src/processShim-DSY9BV2T.cjs +98 -0
  283. package/dist/src/promptLength-0qIHyhA5.js +71 -0
  284. package/dist/src/promptLength-4X-Wd8PG.js +72 -0
  285. package/dist/src/promptLength-B9nZEfO6.js +71 -0
  286. package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
  287. package/dist/src/promptfoo-BDrfT30-.js +180 -0
  288. package/dist/src/promptfoo-Cm4hiy1Y.js +180 -0
  289. package/dist/src/promptfoo-Rjp-MeBb.js +181 -0
  290. package/dist/src/promptfoo-b-baRMj-.cjs +205 -0
  291. package/dist/src/prompts-BYMtqPCw.js +259 -0
  292. package/dist/src/prompts-C-bqE1Yp.js +260 -0
  293. package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
  294. package/dist/src/prompts-DHhQsANy.js +259 -0
  295. package/dist/src/prompts-D_QpZ2Dm.js +271 -0
  296. package/dist/src/prompts-hNvWBD3z.cjs +284 -0
  297. package/dist/src/prompts-huDVH2CI.js +270 -0
  298. package/dist/src/prompts-p78Hul5i.cjs +289 -0
  299. package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
  300. package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
  301. package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DHcFiVWX.js} +1 -1
  302. package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-ReCd0sFa.js} +2 -2
  303. package/dist/src/{providers-BV_KMZje.js → providers-B9KzWxAX.js} +10558 -21587
  304. package/dist/src/{providers-DruaQfwu.js → providers-BCCz6_IX.js} +1228 -12196
  305. package/dist/src/{providers-1eKkXBKp.cjs → providers-BDVVIQM6.cjs} +10649 -21843
  306. package/dist/src/{providers-iUt5fbAN.js → providers-BYAn82cf.js} +1 -1
  307. package/dist/src/{providers-Domz_llv.js → providers-DVYRZP4E.js} +10589 -21570
  308. package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-CLCgQ9tt.js} +3 -3
  309. package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-CgYxeSmO.js} +3 -3
  310. package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-Cokhluq3.cjs} +8 -7
  311. package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-D0BYebvX.js} +3 -3
  312. package/dist/src/{quiverai-DFotyafY.cjs → quiverai-BAp6iTZD.cjs} +4 -4
  313. package/dist/src/{quiverai-aPPvXOgn.js → quiverai-BvIhI_0l.js} +4 -4
  314. package/dist/src/{quiverai-DR0SnIQV.js → quiverai-CdTWPe-A.js} +3 -3
  315. package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Cv7rJKDz.js} +4 -4
  316. package/dist/src/registry-BUJrgjwv.js +124 -0
  317. package/dist/src/registry-DXm1t_x0.js +125 -0
  318. package/dist/src/registry-Dp5EqoXc.js +124 -0
  319. package/dist/src/registry-KCVF1CFC.cjs +124 -0
  320. package/dist/src/{server-D6Il2Sob.js → remoteGeneration-B1_XsKXU.js} +16 -108
  321. package/dist/src/{server-BSB45Nt9.js → remoteGeneration-COpWcmWd.js} +15 -146
  322. package/dist/src/{server-Dx2TyCH2.cjs → remoteGeneration-DS9N3pgB.cjs} +30 -119
  323. package/dist/src/remoteGeneration-DsaSwmG2.js +217 -0
  324. package/dist/src/render-BNTrbmBw.cjs +384 -0
  325. package/dist/src/render-CSP99NLm.js +348 -0
  326. package/dist/src/render-DFfDeYUK.js +347 -0
  327. package/dist/src/{render-CgVDrJmM.js → render-DznWrxGO.js} +2 -2
  328. package/dist/src/render-_6ur1fhE.js +347 -0
  329. package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
  330. package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
  331. package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
  332. package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
  333. package/dist/src/{responses-Bi9vBuW_.cjs → responses-1UFFF9N_.cjs} +51 -16
  334. package/dist/src/{responses-DL9m8CyY.js → responses-B3W2JvOQ.js} +49 -15
  335. package/dist/src/{responses--OsX2aYW.js → responses-B6ktc3Ra.js} +49 -15
  336. package/dist/src/{responses-C-flexAY.js → responses-URRzV8qE.js} +49 -15
  337. package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
  338. package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
  339. package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CXlFM2rR.js} +3 -3
  340. package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-CnlW8AYb.js} +3 -3
  341. package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-CqUWBZAt.cjs} +18 -27
  342. package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DdGojpfv.js} +3 -3
  343. package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
  344. package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
  345. package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
  346. package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
  347. package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-CujrzP1a.js} +62 -51
  348. package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-DzffAqo_.cjs} +65 -53
  349. package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-vhtSV7JI.js} +62 -51
  350. package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-yr1QKeBs.js} +61 -50
  351. package/dist/src/{scanner-1DqWi1Ej.js → scanner-DS0109SS.js} +7 -7
  352. package/dist/src/server/index.js +5105 -605
  353. package/dist/src/server-B8rqV126.cjs +126 -0
  354. package/dist/src/server-BaLytskk.js +3 -0
  355. package/dist/src/server-CMJD10J4.js +107 -0
  356. package/dist/src/server-Ddp8GNMp.js +146 -0
  357. package/dist/src/server-DhMHosWj.js +182 -0
  358. package/dist/src/shared-7pmVZLNO.js +1334 -0
  359. package/dist/src/shared-9WHQ1oNE.js +1335 -0
  360. package/dist/src/{fileExtensions-BArZuxsI.js → shared-BoG7qLMv.js} +12 -2
  361. package/dist/src/shared-D6IjElRI.js +1334 -0
  362. package/dist/src/shared-WkgnDkcg.cjs +1436 -0
  363. package/dist/src/{signal-CE5G3a7x.js → signal-CSurUUyV.js} +3 -3
  364. package/dist/src/simulatedUser-C9aQObBI.js +222 -0
  365. package/dist/src/simulatedUser-Cu601Dd4.cjs +227 -0
  366. package/dist/src/simulatedUser-U_qAHnuB.js +222 -0
  367. package/dist/src/simulatedUser-p3tACcmw.js +223 -0
  368. package/dist/src/{slack-DDUe-5MC.js → slack-Bapo-7_8.js} +2 -2
  369. package/dist/src/{slack-1Rhq0EoV.cjs → slack-DMC1QVEg.cjs} +3 -2
  370. package/dist/src/{slack-D5Wpy8LM.js → slack-DTEFhrMn.js} +2 -2
  371. package/dist/src/{slack-acRb0IqQ.js → slack-k-_CP84Q.js} +1 -1
  372. package/dist/src/storage-BU4qcnOb.js +875 -0
  373. package/dist/src/storage-CA-v9V2v.cjs +911 -0
  374. package/dist/src/storage-CD-GWAdx.js +822 -0
  375. package/dist/src/storage-QdU-SmvD.js +834 -0
  376. package/dist/src/{store-DAAyxcy6.cjs → store-B2NDDooM.cjs} +60 -24
  377. package/dist/src/{store-CYEy5J2D.js → store-DKd5592Q.js} +51 -20
  378. package/dist/src/{store-M0b1WfYb.js → store-HpopRVzl.js} +50 -19
  379. package/dist/src/store-IbiRIF3k.js +3 -0
  380. package/dist/src/strategies-7CS3Alao.cjs +2360 -0
  381. package/dist/src/strategies-CiSeroPH.js +2331 -0
  382. package/dist/src/strategies-DRJjGTIY.js +2333 -0
  383. package/dist/src/{tables-DQ4WU5tX.js → tables-CRSXQ2Ke.js} +2 -2
  384. package/dist/src/{tables-CsWou1Bx.js → tables-CxjU7bBd.js} +3 -3
  385. package/dist/src/{tables-DUfh1F7Z.cjs → tables-DBIJU0WE.cjs} +6 -5
  386. package/dist/src/{tables-C4CH3zRr.js → tables-DafUHOeh.js} +3 -3
  387. package/dist/src/{telemetry-CQPez_Jp.js → telemetry-00ezXr_t.js} +5 -4
  388. package/dist/src/telemetry-ByPqDcKC.js +3 -0
  389. package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CJ7FnCsc.cjs} +18 -11
  390. package/dist/src/{telemetry-dbaJ0E98.js → telemetry-DmXYcJNV.js} +5 -4
  391. package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-DwX9XUN5.js} +4 -3
  392. package/dist/src/{text-KvuD2Iko.js → text-Db-Wt2u2.js} +1 -1
  393. package/dist/src/{text-DHxdyQqT.js → text-DwYK5EBn.js} +1 -1
  394. package/dist/src/{text-BVi-cLPJ.cjs → text-nywWsRBM.cjs} +1 -1
  395. package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-BjVkdk18.js} +1 -1
  396. package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-CDet74yk.js} +1 -1
  397. package/dist/src/tokenUsageUtils-CmnQ0G2m.js +142 -0
  398. package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
  399. package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
  400. package/dist/src/toolAttributes-COVgDrBG.js +87 -0
  401. package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
  402. package/dist/src/tracingOptions-BnwKCkSB.js +221 -0
  403. package/dist/src/tracingOptions-Chi74lOD.js +219 -0
  404. package/dist/src/tracingOptions-DrbSFaKy.cjs +249 -0
  405. package/dist/src/tracingOptions-ji2OuXbT.js +220 -0
  406. package/dist/src/{transcription-DuWDupG7.js → transcription-B8uIgCYX.js} +5 -5
  407. package/dist/src/{transcription-CJspiD2c.js → transcription-CfU5loSq.js} +6 -6
  408. package/dist/src/{transcription-V2HaAmy2.js → transcription-Dkd22_4K.js} +6 -6
  409. package/dist/src/{transcription-BvjmiYB1.cjs → transcription-mzuf18Mq.cjs} +9 -8
  410. package/dist/src/{transform-lQrDE1BQ.js → transform-BIMynQsA.js} +9 -9
  411. package/dist/src/transform-BnSTnFlp.js +187 -0
  412. package/dist/src/transform-BnSXWmU_2.cjs +221 -0
  413. package/dist/src/transform-CGt7Kt3y2.js +186 -0
  414. package/dist/src/transform-CrPGTsij.js +186 -0
  415. package/dist/src/{transform-CTeuTR3S.cjs → transform-DhNkAUs8.cjs} +13 -12
  416. package/dist/src/{transform-CG0ehZNG.js → transform-DmvYBRll.js} +9 -9
  417. package/dist/src/{transform-zDhMmzwX.js → transform-EtD4jAWi.js} +9 -9
  418. package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-0ThtPved.js} +1 -1
  419. package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
  420. package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-BvyU9vDD.js} +1 -1
  421. package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
  422. package/dist/src/{types-Dm9JM6Vb.js → types-BFevViUY.js} +115 -19
  423. package/dist/src/{types-Bgh5SOn6.js → types-BJQBBPTP.js} +115 -19
  424. package/dist/src/{types-CeaeaZdP.cjs → types-CxJvaY2S.cjs} +357 -172
  425. package/dist/src/{types-BGQDAP8i.js → types-D6glLbdF.js} +271 -170
  426. package/dist/src/{util-BYvQUPp7.js → util--WMgw7wM.js} +28 -8
  427. package/dist/src/{util-C9J8ahRn.js → util-5WnCSb0h.js} +72 -48
  428. package/dist/src/{util-CN3SrLT4.cjs → util-BSIuSLVK.cjs} +74 -49
  429. package/dist/src/{util-C8e5uydV.js → util-Bx677_k2.js} +154 -147
  430. package/dist/src/util-CN8om2rz.cjs +386 -0
  431. package/dist/src/{util-DDs-7g6-.js → util-CoQWM76y.js} +28 -8
  432. package/dist/src/util-DNl96nNs.js +327 -0
  433. package/dist/src/{util-DxWpWjhc.js → util-DURocbYR.js} +667 -507
  434. package/dist/src/util-Df8YMvS1.js +327 -0
  435. package/dist/src/{util-DvU2Pw8c.js → util-DiQ3QvBB.js} +28 -8
  436. package/dist/src/{util-oGMLA7vc.js → util-I-Rf-KaD.js} +862 -577
  437. package/dist/src/{util-olYL5C6N.cjs → util-IYzs5Y04.cjs} +33 -7
  438. package/dist/src/{util-D9TisOyk.js → util-LKTmNsMQ.js} +71 -47
  439. package/dist/src/{util-Bxn8emtE.cjs → util-SPsvFONY.cjs} +738 -582
  440. package/dist/src/{util-D3q0WQ-0.js → util-efByNxcr.js} +72 -48
  441. package/dist/src/util-kDURhgJW.js +328 -0
  442. package/dist/src/{utils-DJfvjyMj.js → utils-B0lzitHZ.js} +3 -3
  443. package/dist/src/{utils-BLJKfv0y.js → utils-BFOh20Gb.js} +3 -3
  444. package/dist/src/{utils-hXtCYanr.js → utils-BGY69tk_.js} +2 -2
  445. package/dist/src/{utils-B05gLxER.cjs → utils-Ve6kuJsa.cjs} +3 -3
  446. package/dist/src/version-BK20a4sw.js +16 -0
  447. package/dist/src/version-BWCSaByA.cjs +27 -0
  448. package/dist/src/version-eRkNuGv8.js +17 -0
  449. package/dist/src/version-lpHV_53E.js +16 -0
  450. package/dist/tsconfig.tsbuildinfo +1 -1
  451. package/package.json +56 -28
  452. package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
  453. package/dist/src/app/assets/index-BXGkeMwh.css +0 -1
  454. package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
  455. package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
  456. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
  457. package/dist/src/cache-Cr9oLMUa.js +0 -3
  458. package/dist/src/cache-DbLsVWB2.cjs +0 -3
  459. package/dist/src/cloud-Hphvo8kr.js +0 -3
  460. package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
  461. package/dist/src/codex-sdk-CWEnH70W.cjs +0 -2
  462. package/dist/src/evalResult-D8MT9p0s.js +0 -3
  463. package/dist/src/evalResult-DElBuddX.js +0 -2
  464. package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
  465. package/dist/src/evaluator-CVessDWe.js +0 -3
  466. package/dist/src/fetch-C7bGKDlQ.js +0 -3
  467. package/dist/src/graders-BOAzQEUe.cjs +0 -2
  468. package/dist/src/graders-D4BTsZdG2.js +0 -3
  469. package/dist/src/graders-DOJK1XpV.js +0 -2
  470. package/dist/src/graders-NAv9LcBn.js +0 -2
  471. package/dist/src/image-B5Mv-Z3h.js +0 -257
  472. package/dist/src/image-DVz2RiMF.js +0 -258
  473. package/dist/src/image-qUpPvmNZ.js +0 -257
  474. package/dist/src/image-x6KqLQl4.cjs +0 -280
  475. package/dist/src/providers-Bp4S-FvO.js +0 -2
  476. package/dist/src/providers-DV3ax9e_.cjs +0 -3
  477. package/dist/src/providers-u9Enmfok.js +0 -2
  478. package/dist/src/render-CH-62LbA.js +0 -135
  479. package/dist/src/render-CMEpfLaO.js +0 -136
  480. package/dist/src/render-DHIZ6_k8.js +0 -135
  481. package/dist/src/render-DfQSFxGE.cjs +0 -165
  482. package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
  483. package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
  484. package/dist/src/server-BNYztJkh.js +0 -385
  485. package/dist/src/server-DCtHUqlp.js +0 -3
  486. package/dist/src/server-DaA2eR26.cjs +0 -2
  487. package/dist/src/store-CWOSz6D_.cjs +0 -2
  488. package/dist/src/store-DCDBhv7B.js +0 -3
  489. package/dist/src/store-Dn9HUkdW.js +0 -240
  490. package/dist/src/telemetry-C1IqxcdW.js +0 -3
  491. package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
  492. package/dist/src/transform-Bbg6A8Jk.js +0 -216
  493. package/dist/src/transform-CUnzlsbn.cjs +0 -228
  494. package/dist/src/transform-DYX1_Xnh.js +0 -216
  495. package/dist/src/transform-DgKlRr73.cjs +0 -2
  496. package/dist/src/transform-M6ITAESf.js +0 -3
  497. package/dist/src/transform-UN5UGu8U.js +0 -213
@@ -1,16 +1,19 @@
1
- const require_logger = require("./logger-COuQb2xB.cjs");
2
- const require_invariant = require("./invariant-kfQ8Bu82.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
2
+ const require_logger = require("./logger-cfNpzI4o.cjs");
3
+ const require_invariant = require("./invariant-QtnLD03y.cjs");
4
+ const require_version = require("./version-BWCSaByA.cjs");
3
5
  let fs = require("fs");
4
- fs = require_logger.__toESM(fs);
6
+ fs = require_rolldown_runtime.__toESM(fs, 1);
5
7
  let path = require("path");
6
- path = require_logger.__toESM(path);
8
+ path = require_rolldown_runtime.__toESM(path, 1);
7
9
  let js_yaml = require("js-yaml");
8
- js_yaml = require_logger.__toESM(js_yaml);
9
- let util = require("util");
10
+ js_yaml = require_rolldown_runtime.__toESM(js_yaml, 1);
11
+ let node_async_hooks = require("node:async_hooks");
10
12
  let fs_promises = require("fs/promises");
11
- fs_promises = require_logger.__toESM(fs_promises);
13
+ fs_promises = require_rolldown_runtime.__toESM(fs_promises, 1);
12
14
  let proxy_from_env = require("proxy-from-env");
13
15
  let undici = require("undici");
16
+ let util = require("util");
14
17
  let zlib = require("zlib");
15
18
  //#region src/providers/constants.ts
16
19
  const FILE_METADATA_KEY = "_promptfooFileMetadata";
@@ -19,19 +22,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
19
22
  * Used to distinguish human ratings from automated assertions.
20
23
  */
21
24
  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
25
  function getShareApiBaseUrl() {
36
26
  return require_logger.getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
37
27
  }
@@ -47,6 +37,223 @@ const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
47
37
  const EVENTS_ENDPOINT = "https://a.promptfoo.app";
48
38
  const R_ENDPOINT = "https://r.promptfoo.app/";
49
39
  //#endregion
40
+ //#region src/globalConfig/globalConfig.ts
41
+ /**
42
+ * Functions for manipulating the global configuration file, which lives at
43
+ * ~/.promptfoo/promptfoo.yaml by default.
44
+ */
45
+ function writeGlobalConfig(config) {
46
+ fs.writeFileSync(path.join(require_logger.getConfigDirectoryPath(true), "promptfoo.yaml"), js_yaml.default.dump(config));
47
+ }
48
+ function readGlobalConfig() {
49
+ const configDir = require_logger.getConfigDirectoryPath();
50
+ const configFilePath = path.join(configDir, "promptfoo.yaml");
51
+ let globalConfig = { id: crypto.randomUUID() };
52
+ if (fs.existsSync(configFilePath)) {
53
+ globalConfig = js_yaml.default.load(fs.readFileSync(configFilePath, "utf-8")) || {};
54
+ if (!globalConfig?.id) {
55
+ globalConfig = {
56
+ ...globalConfig,
57
+ id: crypto.randomUUID()
58
+ };
59
+ writeGlobalConfig(globalConfig);
60
+ }
61
+ } else {
62
+ if (!fs.existsSync(configDir)) fs.mkdirSync(configDir, { recursive: true });
63
+ fs.writeFileSync(configFilePath, js_yaml.default.dump(globalConfig));
64
+ }
65
+ return globalConfig;
66
+ }
67
+ /**
68
+ * Merges the top-level keys into existing config.
69
+ * @param partialConfig New keys to merge into the existing config.
70
+ */
71
+ function writeGlobalConfigPartial(partialConfig) {
72
+ const updatedConfig = { ...readGlobalConfig() };
73
+ Object.entries(partialConfig).forEach(([key, value]) => {
74
+ if (value !== void 0 && value !== null) updatedConfig[key] = value;
75
+ else delete updatedConfig[key];
76
+ });
77
+ writeGlobalConfig(updatedConfig);
78
+ }
79
+ //#endregion
80
+ //#region src/globalConfig/cloud.ts
81
+ const CLOUD_API_HOST = "https://api.promptfoo.app";
82
+ const API_HOST = require_logger.getEnvString("API_HOST", CLOUD_API_HOST);
83
+ const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
84
+ var CloudConfig = class {
85
+ config;
86
+ constructor() {
87
+ const savedConfig = readGlobalConfig()?.cloud || {};
88
+ this.config = {
89
+ appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
90
+ apiHost: savedConfig.apiHost,
91
+ apiKey: savedConfig.apiKey,
92
+ sharing: savedConfig.sharing,
93
+ currentOrganizationId: savedConfig.currentOrganizationId,
94
+ currentTeamId: savedConfig.currentTeamId,
95
+ teams: savedConfig.teams
96
+ };
97
+ }
98
+ /**
99
+ * Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
100
+ * Config file takes precedence over environment variable.
101
+ */
102
+ resolveApiKey() {
103
+ return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
104
+ }
105
+ /**
106
+ * Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
107
+ * or defaults to the standard cloud API host.
108
+ * Config file takes precedence over environment variable.
109
+ */
110
+ resolveApiHost() {
111
+ return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
112
+ }
113
+ isEnabled() {
114
+ return !!this.resolveApiKey();
115
+ }
116
+ setApiHost(apiHost) {
117
+ this.config.apiHost = apiHost;
118
+ this.saveConfig();
119
+ }
120
+ setApiKey(apiKey) {
121
+ this.config.apiKey = apiKey;
122
+ this.saveConfig();
123
+ }
124
+ getApiKey() {
125
+ return this.resolveApiKey();
126
+ }
127
+ getApiHost() {
128
+ return this.resolveApiHost();
129
+ }
130
+ setAppUrl(appUrl) {
131
+ this.config.appUrl = appUrl;
132
+ this.saveConfig();
133
+ }
134
+ getAppUrl() {
135
+ return this.config.appUrl;
136
+ }
137
+ getSharing() {
138
+ return this.config.sharing;
139
+ }
140
+ /**
141
+ * Sets the sharing preference. Note: this value is only updated at authentication time
142
+ * (via `validateAndSetApiToken`) and may become stale if the user's license status
143
+ * changes between re-authentications.
144
+ */
145
+ setSharing(sharing) {
146
+ this.config.sharing = sharing;
147
+ this.saveConfig();
148
+ }
149
+ delete() {
150
+ writeGlobalConfigPartial({ cloud: {} });
151
+ this.reload();
152
+ }
153
+ saveConfig() {
154
+ writeGlobalConfigPartial({ cloud: this.config });
155
+ this.reload();
156
+ }
157
+ reload() {
158
+ const savedConfig = readGlobalConfig()?.cloud || {};
159
+ this.config = {
160
+ appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
161
+ apiHost: savedConfig.apiHost,
162
+ apiKey: savedConfig.apiKey,
163
+ sharing: savedConfig.sharing,
164
+ currentOrganizationId: savedConfig.currentOrganizationId,
165
+ currentTeamId: savedConfig.currentTeamId,
166
+ teams: savedConfig.teams
167
+ };
168
+ }
169
+ saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
170
+ this.setApiKey(token);
171
+ this.setApiHost(apiHost);
172
+ this.setAppUrl(app.url);
173
+ if (typeof hasActiveLicense === "boolean") {
174
+ const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
175
+ const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
176
+ this.setSharing(hasActiveLicense || isGrandfathered);
177
+ }
178
+ }
179
+ async validateApiToken(token, apiHost) {
180
+ try {
181
+ const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
182
+ const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
183
+ if (!response.ok) {
184
+ const errorMessage = await response.text();
185
+ require_logger.logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
186
+ throw new Error("Failed to validate API token: " + response.statusText);
187
+ }
188
+ const { user, organization, app, hasActiveLicense } = await response.json();
189
+ return {
190
+ user,
191
+ organization,
192
+ app,
193
+ ...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
194
+ };
195
+ } catch (err) {
196
+ const error = err;
197
+ const errorMessage = error instanceof Error ? error.message : String(error);
198
+ require_logger.logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
199
+ if (error.cause) require_logger.logger.error(`Cause: ${error.cause}`);
200
+ throw error;
201
+ }
202
+ }
203
+ async validateAndSetApiToken(token, apiHost) {
204
+ const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
205
+ this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
206
+ return {
207
+ user,
208
+ organization,
209
+ app,
210
+ hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
211
+ };
212
+ }
213
+ getCurrentOrganizationId() {
214
+ return this.config.currentOrganizationId;
215
+ }
216
+ setCurrentOrganization(organizationId) {
217
+ this.config.currentOrganizationId = organizationId;
218
+ this.saveConfig();
219
+ }
220
+ getCurrentTeamId(organizationId) {
221
+ if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
222
+ return this.config.currentTeamId;
223
+ }
224
+ setCurrentTeamId(teamId, organizationId) {
225
+ if (organizationId) {
226
+ if (!this.config.teams) this.config.teams = {};
227
+ if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
228
+ this.config.teams[organizationId].currentTeamId = teamId;
229
+ } else this.config.currentTeamId = teamId;
230
+ this.saveConfig();
231
+ }
232
+ clearCurrentTeamId(organizationId) {
233
+ if (organizationId) {
234
+ if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
235
+ } else delete this.config.currentTeamId;
236
+ this.saveConfig();
237
+ }
238
+ cacheTeams(teams, organizationId) {
239
+ if (organizationId) {
240
+ if (!this.config.teams) this.config.teams = {};
241
+ if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
242
+ this.config.teams[organizationId].cache = teams.map((t) => ({
243
+ id: t.id,
244
+ name: t.name,
245
+ slug: t.slug,
246
+ lastFetched: (/* @__PURE__ */ new Date()).toISOString()
247
+ }));
248
+ }
249
+ this.saveConfig();
250
+ }
251
+ getCachedTeams(organizationId) {
252
+ if (organizationId) return this.config.teams?.[organizationId]?.cache;
253
+ }
254
+ };
255
+ const cloudConfig = new CloudConfig();
256
+ //#endregion
50
257
  //#region src/providers/shared.ts
51
258
  /**
52
259
  * The default timeout for API requests in milliseconds.
@@ -71,8 +278,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
71
278
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
72
279
  const model = models.find((m) => m.id === modelName);
73
280
  if (!model || !model.cost) return;
74
- const inputCost = config.cost ?? model.cost.input;
75
- const outputCost = config.cost ?? model.cost.output;
281
+ const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
282
+ const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
283
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
76
284
  return inputCost * promptTokens + outputCost * completionTokens;
77
285
  }
78
286
  /**
@@ -440,220 +648,6 @@ function getCurrentTimestamp() {
440
648
  }
441
649
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
442
650
  //#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
651
  //#region src/util/fetch/monkeyPatchFetch.ts
658
652
  const gzipAsync = (0, util.promisify)(zlib.gzip);
659
653
  function isConnectionError(error) {
@@ -662,6 +656,14 @@ function isConnectionError(error) {
662
656
  /**
663
657
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
664
658
  */
659
+ function isPromptfooCloudApiHost(url) {
660
+ try {
661
+ const targetUrl = url instanceof Request ? url.url : url.toString();
662
+ return new URL(targetUrl).origin === CLOUD_API_HOST;
663
+ } catch {
664
+ return false;
665
+ }
666
+ }
665
667
  async function monkeyPatchFetch(url, options) {
666
668
  const NO_LOG_URLS = [
667
669
  R_ENDPOINT,
@@ -681,7 +683,7 @@ async function monkeyPatchFetch(url, options) {
681
683
  } catch (e) {
682
684
  require_logger.logger.warn(`Failed to compress request body: ${e}`);
683
685
  }
684
- if (typeof url === "string" && url.startsWith("https://api.promptfoo.app") || url instanceof URL && url.host === "https://api.promptfoo.app".replace(/^https?:\/\//, "")) {
686
+ if (isPromptfooCloudApiHost(url)) {
685
687
  const token = cloudConfig.getApiKey();
686
688
  opts.headers = {
687
689
  ...opts.headers || {},
@@ -715,11 +717,31 @@ async function monkeyPatchFetch(url, options) {
715
717
  }
716
718
  }
717
719
  //#endregion
720
+ //#region src/util/fetch/retryContext.ts
721
+ const fetchRetryContext = new node_async_hooks.AsyncLocalStorage();
722
+ /**
723
+ * Run `fn` with a fetch retry context so nested `fetchWithRetries` /
724
+ * `fetchWithProxy` calls inherit the provider's configured `maxRetries`.
725
+ *
726
+ * When `maxRetries` is `undefined`, the new scope deliberately shadows any
727
+ * outer provider context so providers without an override fall back to defaults.
728
+ */
729
+ function withFetchRetryContext(maxRetries, fn) {
730
+ return fetchRetryContext.run({ maxRetries }, fn);
731
+ }
732
+ /**
733
+ * Read the active context's `maxRetries`, or `undefined` when none is set.
734
+ */
735
+ function getFetchRetryContextMaxRetries() {
736
+ return fetchRetryContext.getStore()?.maxRetries;
737
+ }
738
+ //#endregion
718
739
  //#region src/util/fetch/index.ts
719
- var fetch_exports = /* @__PURE__ */ require_logger.__exportAll({
740
+ var fetch_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
720
741
  fetchWithProxy: () => fetchWithProxy,
721
742
  fetchWithRetries: () => fetchWithRetries,
722
743
  fetchWithTimeout: () => fetchWithTimeout,
744
+ getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
723
745
  handleRateLimit: () => handleRateLimit,
724
746
  isRateLimited: () => isRateLimited,
725
747
  isTransientError: () => isTransientError
@@ -774,20 +796,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
774
796
  cachedProxyAgents.set(cacheKey, agent);
775
797
  return agent;
776
798
  }
799
+ /**
800
+ * Resolve whether to disable transient-error retries. An explicit caller flag
801
+ * always wins (a caller may opt back in even when the provider set
802
+ * `maxRetries: 0`); otherwise we disable only when the retry context carries
803
+ * `maxRetries === 0`.
804
+ */
805
+ function resolveTransientRetryDisabled(explicit) {
806
+ if (explicit !== void 0) return explicit;
807
+ return getFetchRetryContextMaxRetries() === 0;
808
+ }
809
+ function headersInitToRecord(headers) {
810
+ if (!headers) return {};
811
+ if (headers instanceof Headers) return Object.fromEntries(headers.entries());
812
+ if (Array.isArray(headers)) return Object.fromEntries(new Headers(headers).entries());
813
+ return { ...headers };
814
+ }
815
+ function getFetchWithProxyHeaders(url, options) {
816
+ const requestHeaders = url instanceof Request && options.headers === void 0 ? headersInitToRecord(url.headers) : {};
817
+ const optionHeaders = headersInitToRecord(options.headers);
818
+ return {
819
+ ...requestHeaders,
820
+ ...optionHeaders,
821
+ "x-promptfoo-version": require_version.VERSION
822
+ };
823
+ }
824
+ function getFetchUrlString(url) {
825
+ if (typeof url === "string") return url;
826
+ if (url instanceof URL) return url.toString();
827
+ if (url instanceof Request) return url.url;
828
+ }
777
829
  async function fetchWithProxy(url, options = {}, abortSignal) {
778
830
  let finalUrl = url;
779
- let finalUrlString;
780
- if (typeof url === "string") finalUrlString = url;
781
- else if (url instanceof URL) finalUrlString = url.toString();
782
- else if (url instanceof Request) finalUrlString = url.url;
831
+ let finalUrlString = getFetchUrlString(url);
783
832
  if (!finalUrlString) throw new Error("Invalid URL");
784
833
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
785
834
  const finalOptions = {
786
835
  ...options,
787
- headers: {
788
- ...options.headers,
789
- "x-promptfoo-version": VERSION
790
- },
836
+ headers: getFetchWithProxyHeaders(url, options),
791
837
  signal: combinedSignal
792
838
  };
793
839
  if (typeof url === "string") try {
@@ -825,10 +871,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
825
871
  require_logger.logger.debug(`Using proxy: ${require_logger.sanitizeUrl(proxyUrl)}`);
826
872
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
827
873
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
828
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
874
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
875
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
829
876
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
830
877
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
831
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
878
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
832
879
  const backoffMs = Math.pow(2, attempt) * 1e3;
833
880
  require_logger.logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
834
881
  await sleep(backoffMs);
@@ -901,8 +948,17 @@ function isTransientError(response) {
901
948
  default: return false;
902
949
  }
903
950
  }
951
+ function formatFetchErrorMessage(error) {
952
+ if (!(error instanceof Error)) return String(error);
953
+ const typedError = error;
954
+ let message = `${typedError.name}: ${typedError.message}`;
955
+ if (typedError.cause) message += ` (Cause: ${typedError.cause})`;
956
+ if (typedError.code) message += ` (Code: ${typedError.code})`;
957
+ return message;
958
+ }
904
959
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
905
- maxRetries = Math.max(0, maxRetries ?? 4);
960
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
961
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
906
962
  let lastErrorMessage;
907
963
  const backoff = require_logger.getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
908
964
  for (let i = 0; i <= maxRetries; i++) {
@@ -914,21 +970,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
914
970
  }, timeout);
915
971
  if (require_logger.getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
916
972
  if (response && isRateLimited(response)) {
917
- require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
918
973
  lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
974
+ if (i >= maxRetries) {
975
+ require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
976
+ break;
977
+ }
978
+ require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
919
979
  await handleRateLimit(response);
920
980
  continue;
921
981
  }
922
982
  return response;
923
983
  } catch (error) {
924
984
  if (error instanceof Error && error.name === "AbortError") throw error;
925
- let errorMessage;
926
- if (error instanceof Error) {
927
- const typedError = error;
928
- errorMessage = `${typedError.name}: ${typedError.message}`;
929
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
930
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
931
- } else errorMessage = String(error);
985
+ const errorMessage = formatFetchErrorMessage(error);
932
986
  require_logger.logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
933
987
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
934
988
  lastErrorMessage = errorMessage;
@@ -979,12 +1033,6 @@ Object.defineProperty(exports, "LONG_RUNNING_MODEL_TIMEOUT_MS", {
979
1033
  return LONG_RUNNING_MODEL_TIMEOUT_MS;
980
1034
  }
981
1035
  });
982
- Object.defineProperty(exports, "POSTHOG_KEY", {
983
- enumerable: true,
984
- get: function() {
985
- return POSTHOG_KEY;
986
- }
987
- });
988
1036
  Object.defineProperty(exports, "REQUEST_TIMEOUT_MS", {
989
1037
  enumerable: true,
990
1038
  get: function() {
@@ -1003,12 +1051,6 @@ Object.defineProperty(exports, "TERMINAL_MAX_WIDTH", {
1003
1051
  return TERMINAL_MAX_WIDTH;
1004
1052
  }
1005
1053
  });
1006
- Object.defineProperty(exports, "VERSION", {
1007
- enumerable: true,
1008
- get: function() {
1009
- return VERSION;
1010
- }
1011
- });
1012
1054
  Object.defineProperty(exports, "calculateCost", {
1013
1055
  enumerable: true,
1014
1056
  get: function() {
@@ -1057,6 +1099,12 @@ Object.defineProperty(exports, "getDefaultShareViewBaseUrl", {
1057
1099
  return getDefaultShareViewBaseUrl;
1058
1100
  }
1059
1101
  });
1102
+ Object.defineProperty(exports, "getFetchWithProxyHeaders", {
1103
+ enumerable: true,
1104
+ get: function() {
1105
+ return getFetchWithProxyHeaders;
1106
+ }
1107
+ });
1060
1108
  Object.defineProperty(exports, "getShareApiBaseUrl", {
1061
1109
  enumerable: true,
1062
1110
  get: function() {
@@ -1081,6 +1129,12 @@ Object.defineProperty(exports, "isOpenAIToolChoice", {
1081
1129
  return isOpenAIToolChoice;
1082
1130
  }
1083
1131
  });
1132
+ Object.defineProperty(exports, "isPromptfooCloudApiHost", {
1133
+ enumerable: true,
1134
+ get: function() {
1135
+ return isPromptfooCloudApiHost;
1136
+ }
1137
+ });
1084
1138
  Object.defineProperty(exports, "isPromptfooSampleTarget", {
1085
1139
  enumerable: true,
1086
1140
  get: function() {
@@ -1147,6 +1201,12 @@ Object.defineProperty(exports, "transformTools", {
1147
1201
  return transformTools;
1148
1202
  }
1149
1203
  });
1204
+ Object.defineProperty(exports, "withFetchRetryContext", {
1205
+ enumerable: true,
1206
+ get: function() {
1207
+ return withFetchRetryContext;
1208
+ }
1209
+ });
1150
1210
  Object.defineProperty(exports, "writeGlobalConfig", {
1151
1211
  enumerable: true,
1152
1212
  get: function() {
@@ -1160,4 +1220,4 @@ Object.defineProperty(exports, "writeGlobalConfigPartial", {
1160
1220
  }
1161
1221
  });
1162
1222
 
1163
- //# sourceMappingURL=fetch-CJU5ELPa.cjs.map
1223
+ //# sourceMappingURL=fetch-Dw4XZHjj.cjs.map