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,6 +1,8 @@
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-BK20a4sw.js";
4
+ import { t as invariant } from "./invariant-DIYf9sP1.js";
5
+ import { AsyncLocalStorage } from "node:async_hooks";
4
6
  import * as fs$2 from "fs";
5
7
  import * as path$1 from "path";
6
8
  import path from "path";
@@ -17,19 +19,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
17
19
  * Used to distinguish human ratings from automated assertions.
18
20
  */
19
21
  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
22
  function getShareApiBaseUrl() {
34
23
  return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
35
24
  }
@@ -72,8 +61,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
72
61
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
73
62
  const model = models.find((m) => m.id === modelName);
74
63
  if (!model || !model.cost) return;
75
- const inputCost = config.cost ?? model.cost.input;
76
- const outputCost = config.cost ?? model.cost.output;
64
+ const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
65
+ const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
66
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
77
67
  return inputCost * promptTokens + outputCost * completionTokens;
78
68
  }
79
69
  /**
@@ -480,7 +470,10 @@ function writeGlobalConfigPartial(partialConfig) {
480
470
  });
481
471
  writeGlobalConfig(updatedConfig);
482
472
  }
483
- const API_HOST = getEnvString("API_HOST", "https://api.promptfoo.app");
473
+ //#endregion
474
+ //#region src/globalConfig/cloud.ts
475
+ const CLOUD_API_HOST = "https://api.promptfoo.app";
476
+ const API_HOST = getEnvString("API_HOST", CLOUD_API_HOST);
484
477
  const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
485
478
  var CloudConfig = class {
486
479
  config;
@@ -663,6 +656,14 @@ function isConnectionError(error) {
663
656
  /**
664
657
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
665
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
+ }
666
667
  async function monkeyPatchFetch(url, options) {
667
668
  const NO_LOG_URLS = [
668
669
  R_ENDPOINT,
@@ -682,7 +683,7 @@ async function monkeyPatchFetch(url, options) {
682
683
  } catch (e) {
683
684
  logger.warn(`Failed to compress request body: ${e}`);
684
685
  }
685
- 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)) {
686
687
  const token = cloudConfig.getApiKey();
687
688
  opts.headers = {
688
689
  ...opts.headers || {},
@@ -716,11 +717,31 @@ async function monkeyPatchFetch(url, options) {
716
717
  }
717
718
  }
718
719
  //#endregion
720
+ //#region src/util/fetch/retryContext.ts
721
+ const fetchRetryContext = new 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
719
739
  //#region src/util/fetch/index.ts
720
740
  var fetch_exports = /* @__PURE__ */ __exportAll({
721
741
  fetchWithProxy: () => fetchWithProxy,
722
742
  fetchWithRetries: () => fetchWithRetries,
723
743
  fetchWithTimeout: () => fetchWithTimeout,
744
+ getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
724
745
  handleRateLimit: () => handleRateLimit,
725
746
  isRateLimited: () => isRateLimited,
726
747
  isTransientError: () => isTransientError
@@ -775,20 +796,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
775
796
  cachedProxyAgents.set(cacheKey, agent);
776
797
  return agent;
777
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": 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
+ }
778
829
  async function fetchWithProxy(url, options = {}, abortSignal) {
779
830
  let finalUrl = url;
780
- let finalUrlString;
781
- if (typeof url === "string") finalUrlString = url;
782
- else if (url instanceof URL) finalUrlString = url.toString();
783
- else if (url instanceof Request) finalUrlString = url.url;
831
+ let finalUrlString = getFetchUrlString(url);
784
832
  if (!finalUrlString) throw new Error("Invalid URL");
785
833
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
786
834
  const finalOptions = {
787
835
  ...options,
788
- headers: {
789
- ...options.headers,
790
- "x-promptfoo-version": VERSION
791
- },
836
+ headers: getFetchWithProxyHeaders(url, options),
792
837
  signal: combinedSignal
793
838
  };
794
839
  if (typeof url === "string") try {
@@ -826,10 +871,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
826
871
  logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
827
872
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
828
873
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
829
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
874
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
875
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
830
876
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
831
877
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
832
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
878
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
833
879
  const backoffMs = Math.pow(2, attempt) * 1e3;
834
880
  logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
835
881
  await sleep(backoffMs);
@@ -902,8 +948,17 @@ function isTransientError(response) {
902
948
  default: return false;
903
949
  }
904
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
+ }
905
959
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
906
- maxRetries = Math.max(0, maxRetries ?? 4);
960
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
961
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
907
962
  let lastErrorMessage;
908
963
  const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
909
964
  for (let i = 0; i <= maxRetries; i++) {
@@ -915,21 +970,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
915
970
  }, timeout);
916
971
  if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
917
972
  if (response && isRateLimited(response)) {
918
- logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
919
973
  lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
974
+ if (i >= maxRetries) {
975
+ logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
976
+ break;
977
+ }
978
+ logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
920
979
  await handleRateLimit(response);
921
980
  continue;
922
981
  }
923
982
  return response;
924
983
  } catch (error) {
925
984
  if (error instanceof Error && error.name === "AbortError") throw error;
926
- let errorMessage;
927
- if (error instanceof Error) {
928
- const typedError = error;
929
- errorMessage = `${typedError.name}: ${typedError.message}`;
930
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
931
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
932
- } else errorMessage = String(error);
985
+ const errorMessage = formatFetchErrorMessage(error);
933
986
  logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
934
987
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
935
988
  lastErrorMessage = errorMessage;
@@ -938,6 +991,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
938
991
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
939
992
  }
940
993
  //#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 };
994
+ export { CONSENT_ENDPOINT as A, openaiToolChoiceToBedrock as C, transformToolChoice as D, toTitleCase as E, getDefaultShareViewBaseUrl as F, getShareApiBaseUrl as I, getShareViewBaseUrl as L, R_ENDPOINT as M, TERMINAL_MAX_WIDTH as N, transformTools as O, getDefaultPort as P, FILE_METADATA_KEY as R, isPromptfooSampleTarget as S, parseChatPrompt as T, LONG_RUNNING_MODEL_TIMEOUT_MS as _, getFetchWithProxyHeaders as a, isOpenAIToolArray as b, CloudConfig as c, writeGlobalConfig as d, writeGlobalConfigPartial as f, parseRetryAfter as g, parseRateLimitHeaders as h, fetch_exports as i, EVENTS_ENDPOINT as j, CLOUD_PROVIDER_PREFIX as k, cloudConfig as l, sleep as m, fetchWithRetries as n, withFetchRetryContext as o, getCurrentTimestamp as p, fetchWithTimeout as r, isPromptfooCloudApiHost as s, fetchWithProxy as t, readGlobalConfig as u, REQUEST_TIMEOUT_MS as v, openaiToolsToBedrock as w, isOpenAIToolChoice as x, calculateCost as y, HUMAN_ASSERTION_TYPE as z };
942
995
 
943
- //# sourceMappingURL=fetch-B0Z3Oe4k.js.map
996
+ //# sourceMappingURL=fetch-BufrQtvR.js.map
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-DksKw1Qc.js";
3
- import { t as invariant } from "./invariant-BtWWVVhl.js";
4
- import { a as cloudConfig } from "./cloud-DQZ5sVjW.js";
2
+ import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-BbY6ypFL.js";
3
+ import { n as VERSION } from "./version-eRkNuGv8.js";
4
+ import { t as invariant } from "./invariant-B2Rf6avk.js";
5
+ import { a as cloudConfig, n as CLOUD_API_HOST } from "./cloud-D3DiFqH6.js";
6
+ import { AsyncLocalStorage } from "node:async_hooks";
5
7
  import path from "path";
6
8
  import yaml from "js-yaml";
7
9
  import * as fsPromises from "fs/promises";
@@ -16,19 +18,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
16
18
  * Used to distinguish human ratings from automated assertions.
17
19
  */
18
20
  const HUMAN_ASSERTION_TYPE = "human";
19
- //#endregion
20
- //#region src/version.ts
21
- /**
22
- * Application version from package.json.
23
- * Injected at build time, or read from npm environment in development.
24
- */
25
- const VERSION = "0.121.4";
26
- /**
27
- * PostHog analytics key.
28
- * Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
29
- * Empty string in development/test.
30
- */
31
- const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
32
21
  function getShareApiBaseUrl() {
33
22
  return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
34
23
  }
@@ -71,8 +60,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
71
60
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
72
61
  const model = models.find((m) => m.id === modelName);
73
62
  if (!model || !model.cost) return;
74
- const inputCost = config.cost ?? model.cost.input;
75
- 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.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
65
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
76
66
  return inputCost * promptTokens + outputCost * completionTokens;
77
67
  }
78
68
  /**
@@ -466,6 +456,14 @@ function isConnectionError(error) {
466
456
  /**
467
457
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
468
458
  */
459
+ function isPromptfooCloudApiHost(url) {
460
+ try {
461
+ const targetUrl = url instanceof Request ? url.url : url.toString();
462
+ return new URL(targetUrl).origin === CLOUD_API_HOST;
463
+ } catch {
464
+ return false;
465
+ }
466
+ }
469
467
  async function monkeyPatchFetch(url, options) {
470
468
  const NO_LOG_URLS = [
471
469
  R_ENDPOINT,
@@ -485,7 +483,7 @@ async function monkeyPatchFetch(url, options) {
485
483
  } catch (e) {
486
484
  logger.warn(`Failed to compress request body: ${e}`);
487
485
  }
488
- if (typeof url === "string" && url.startsWith("https://api.promptfoo.app") || url instanceof URL && url.host === "https://api.promptfoo.app".replace(/^https?:\/\//, "")) {
486
+ if (isPromptfooCloudApiHost(url)) {
489
487
  const token = cloudConfig.getApiKey();
490
488
  opts.headers = {
491
489
  ...opts.headers || {},
@@ -519,6 +517,25 @@ async function monkeyPatchFetch(url, options) {
519
517
  }
520
518
  }
521
519
  //#endregion
520
+ //#region src/util/fetch/retryContext.ts
521
+ const fetchRetryContext = new AsyncLocalStorage();
522
+ /**
523
+ * Run `fn` with a fetch retry context so nested `fetchWithRetries` /
524
+ * `fetchWithProxy` calls inherit the provider's configured `maxRetries`.
525
+ *
526
+ * When `maxRetries` is `undefined`, the new scope deliberately shadows any
527
+ * outer provider context so providers without an override fall back to defaults.
528
+ */
529
+ function withFetchRetryContext(maxRetries, fn) {
530
+ return fetchRetryContext.run({ maxRetries }, fn);
531
+ }
532
+ /**
533
+ * Read the active context's `maxRetries`, or `undefined` when none is set.
534
+ */
535
+ function getFetchRetryContextMaxRetries() {
536
+ return fetchRetryContext.getStore()?.maxRetries;
537
+ }
538
+ //#endregion
522
539
  //#region src/util/fetch/index.ts
523
540
  const cachedAgents = /* @__PURE__ */ new Map();
524
541
  const cachedProxyAgents = /* @__PURE__ */ new Map();
@@ -580,20 +597,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
580
597
  cachedProxyAgents.set(cacheKey, agent);
581
598
  return agent;
582
599
  }
600
+ /**
601
+ * Resolve whether to disable transient-error retries. An explicit caller flag
602
+ * always wins (a caller may opt back in even when the provider set
603
+ * `maxRetries: 0`); otherwise we disable only when the retry context carries
604
+ * `maxRetries === 0`.
605
+ */
606
+ function resolveTransientRetryDisabled(explicit) {
607
+ if (explicit !== void 0) return explicit;
608
+ return getFetchRetryContextMaxRetries() === 0;
609
+ }
610
+ function headersInitToRecord(headers) {
611
+ if (!headers) return {};
612
+ if (headers instanceof Headers) return Object.fromEntries(headers.entries());
613
+ if (Array.isArray(headers)) return Object.fromEntries(new Headers(headers).entries());
614
+ return { ...headers };
615
+ }
616
+ function getFetchWithProxyHeaders(url, options) {
617
+ const requestHeaders = url instanceof Request && options.headers === void 0 ? headersInitToRecord(url.headers) : {};
618
+ const optionHeaders = headersInitToRecord(options.headers);
619
+ return {
620
+ ...requestHeaders,
621
+ ...optionHeaders,
622
+ "x-promptfoo-version": VERSION
623
+ };
624
+ }
625
+ function getFetchUrlString(url) {
626
+ if (typeof url === "string") return url;
627
+ if (url instanceof URL) return url.toString();
628
+ if (url instanceof Request) return url.url;
629
+ }
583
630
  async function fetchWithProxy(url, options = {}, abortSignal) {
584
631
  let finalUrl = url;
585
- let finalUrlString;
586
- if (typeof url === "string") finalUrlString = url;
587
- else if (url instanceof URL) finalUrlString = url.toString();
588
- else if (url instanceof Request) finalUrlString = url.url;
632
+ let finalUrlString = getFetchUrlString(url);
589
633
  if (!finalUrlString) throw new Error("Invalid URL");
590
634
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
591
635
  const finalOptions = {
592
636
  ...options,
593
- headers: {
594
- ...options.headers,
595
- "x-promptfoo-version": VERSION
596
- },
637
+ headers: getFetchWithProxyHeaders(url, options),
597
638
  signal: combinedSignal
598
639
  };
599
640
  if (typeof url === "string") try {
@@ -631,10 +672,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
631
672
  logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
632
673
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
633
674
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
634
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
675
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
676
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
635
677
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
636
678
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
637
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
679
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
638
680
  const backoffMs = Math.pow(2, attempt) * 1e3;
639
681
  logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
640
682
  await sleep(backoffMs);
@@ -707,8 +749,17 @@ function isTransientError(response) {
707
749
  default: return false;
708
750
  }
709
751
  }
752
+ function formatFetchErrorMessage(error) {
753
+ if (!(error instanceof Error)) return String(error);
754
+ const typedError = error;
755
+ let message = `${typedError.name}: ${typedError.message}`;
756
+ if (typedError.cause) message += ` (Cause: ${typedError.cause})`;
757
+ if (typedError.code) message += ` (Code: ${typedError.code})`;
758
+ return message;
759
+ }
710
760
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
711
- maxRetries = Math.max(0, maxRetries ?? 4);
761
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
762
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
712
763
  let lastErrorMessage;
713
764
  const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
714
765
  for (let i = 0; i <= maxRetries; i++) {
@@ -720,21 +771,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
720
771
  }, timeout);
721
772
  if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
722
773
  if (response && isRateLimited(response)) {
723
- logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
724
774
  lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
775
+ if (i >= maxRetries) {
776
+ logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
777
+ break;
778
+ }
779
+ logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
725
780
  await handleRateLimit(response);
726
781
  continue;
727
782
  }
728
783
  return response;
729
784
  } catch (error) {
730
785
  if (error instanceof Error && error.name === "AbortError") throw error;
731
- let errorMessage;
732
- if (error instanceof Error) {
733
- const typedError = error;
734
- errorMessage = `${typedError.name}: ${typedError.message}`;
735
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
736
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
737
- } else errorMessage = String(error);
786
+ const errorMessage = formatFetchErrorMessage(error);
738
787
  logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
739
788
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
740
789
  lastErrorMessage = errorMessage;
@@ -743,6 +792,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
743
792
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
744
793
  }
745
794
  //#endregion
746
- export { getDefaultPort as A, transformToolChoice as C, EVENTS_ENDPOINT as D, CONSENT_ENDPOINT as E, VERSION as F, FILE_METADATA_KEY as I, HUMAN_ASSERTION_TYPE as L, getShareApiBaseUrl as M, getShareViewBaseUrl as N, R_ENDPOINT as O, POSTHOG_KEY as P, toTitleCase as S, CLOUD_PROVIDER_PREFIX as T, isOpenAIToolChoice as _, handleRateLimit as a, openaiToolsToBedrock as b, getCurrentTimestamp as c, parseRateLimitHeaders as d, parseRetryAfter as f, isOpenAIToolArray as g, calculateCost as h, fetchWithTimeout as i, getDefaultShareViewBaseUrl as j, TERMINAL_MAX_WIDTH as k, sleep as l, REQUEST_TIMEOUT_MS as m, fetchWithProxy as n, isRateLimited as o, LONG_RUNNING_MODEL_TIMEOUT_MS as p, fetchWithRetries as r, isTransientError as s, clearAgentCache as t, sleepWithAbort as u, isPromptfooSampleTarget as v, transformTools as w, parseChatPrompt as x, openaiToolChoiceToBedrock as y };
795
+ export { EVENTS_ENDPOINT as A, openaiToolsToBedrock as C, transformTools as D, transformToolChoice as E, getShareApiBaseUrl as F, getShareViewBaseUrl as I, FILE_METADATA_KEY as L, TERMINAL_MAX_WIDTH as M, getDefaultPort as N, CLOUD_PROVIDER_PREFIX as O, getDefaultShareViewBaseUrl as P, HUMAN_ASSERTION_TYPE as R, openaiToolChoiceToBedrock as S, toTitleCase as T, REQUEST_TIMEOUT_MS as _, getFetchWithProxyHeaders as a, isOpenAIToolChoice as b, isTransientError as c, getCurrentTimestamp as d, sleep as f, LONG_RUNNING_MODEL_TIMEOUT_MS as g, parseRetryAfter as h, fetchWithTimeout as i, R_ENDPOINT as j, CONSENT_ENDPOINT as k, withFetchRetryContext as l, parseRateLimitHeaders as m, fetchWithProxy as n, handleRateLimit as o, sleepWithAbort as p, fetchWithRetries as r, isRateLimited as s, clearAgentCache as t, isPromptfooCloudApiHost as u, calculateCost as v, parseChatPrompt as w, isPromptfooSampleTarget as x, isOpenAIToolArray as y };
747
796
 
748
- //# sourceMappingURL=fetch-BEWnXrrG.js.map
797
+ //# sourceMappingURL=fetch-DXUnXkVU.js.map