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,14 +1,16 @@
1
1
  import { t as __exportAll } from "./chunk-DEq-mXcV.js";
2
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-Ct2S6Yx-.js";
3
3
  import { t as invariant } from "./invariant-Ddh24eXh.js";
4
+ import { n as VERSION } from "./version-lpHV_53E.js";
4
5
  import * as fs$2 from "fs";
5
6
  import * as path$1 from "path";
6
7
  import path from "path";
7
8
  import yaml from "js-yaml";
8
- import { promisify } from "util";
9
+ import { AsyncLocalStorage } from "node:async_hooks";
9
10
  import * as fsPromises from "fs/promises";
10
11
  import { getProxyForUrl } from "proxy-from-env";
11
12
  import { Agent, ProxyAgent } from "undici";
13
+ import { promisify } from "util";
12
14
  import { gzip } from "zlib";
13
15
  //#region src/providers/constants.ts
14
16
  const FILE_METADATA_KEY = "_promptfooFileMetadata";
@@ -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
  }
@@ -45,6 +34,223 @@ const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
45
34
  const EVENTS_ENDPOINT = "https://a.promptfoo.app";
46
35
  const R_ENDPOINT = "https://r.promptfoo.app/";
47
36
  //#endregion
37
+ //#region src/globalConfig/globalConfig.ts
38
+ /**
39
+ * Functions for manipulating the global configuration file, which lives at
40
+ * ~/.promptfoo/promptfoo.yaml by default.
41
+ */
42
+ function writeGlobalConfig(config) {
43
+ fs$2.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
44
+ }
45
+ function readGlobalConfig() {
46
+ const configDir = getConfigDirectoryPath();
47
+ const configFilePath = path$1.join(configDir, "promptfoo.yaml");
48
+ let globalConfig = { id: crypto.randomUUID() };
49
+ if (fs$2.existsSync(configFilePath)) {
50
+ globalConfig = yaml.load(fs$2.readFileSync(configFilePath, "utf-8")) || {};
51
+ if (!globalConfig?.id) {
52
+ globalConfig = {
53
+ ...globalConfig,
54
+ id: crypto.randomUUID()
55
+ };
56
+ writeGlobalConfig(globalConfig);
57
+ }
58
+ } else {
59
+ if (!fs$2.existsSync(configDir)) fs$2.mkdirSync(configDir, { recursive: true });
60
+ fs$2.writeFileSync(configFilePath, yaml.dump(globalConfig));
61
+ }
62
+ return globalConfig;
63
+ }
64
+ /**
65
+ * Merges the top-level keys into existing config.
66
+ * @param partialConfig New keys to merge into the existing config.
67
+ */
68
+ function writeGlobalConfigPartial(partialConfig) {
69
+ const updatedConfig = { ...readGlobalConfig() };
70
+ Object.entries(partialConfig).forEach(([key, value]) => {
71
+ if (value !== void 0 && value !== null) updatedConfig[key] = value;
72
+ else delete updatedConfig[key];
73
+ });
74
+ writeGlobalConfig(updatedConfig);
75
+ }
76
+ //#endregion
77
+ //#region src/globalConfig/cloud.ts
78
+ const CLOUD_API_HOST = "https://api.promptfoo.app";
79
+ const API_HOST = getEnvString("API_HOST", CLOUD_API_HOST);
80
+ const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
81
+ var CloudConfig = class {
82
+ config;
83
+ constructor() {
84
+ const savedConfig = readGlobalConfig()?.cloud || {};
85
+ this.config = {
86
+ appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
87
+ apiHost: savedConfig.apiHost,
88
+ apiKey: savedConfig.apiKey,
89
+ sharing: savedConfig.sharing,
90
+ currentOrganizationId: savedConfig.currentOrganizationId,
91
+ currentTeamId: savedConfig.currentTeamId,
92
+ teams: savedConfig.teams
93
+ };
94
+ }
95
+ /**
96
+ * Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
97
+ * Config file takes precedence over environment variable.
98
+ */
99
+ resolveApiKey() {
100
+ return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
101
+ }
102
+ /**
103
+ * Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
104
+ * or defaults to the standard cloud API host.
105
+ * Config file takes precedence over environment variable.
106
+ */
107
+ resolveApiHost() {
108
+ return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
109
+ }
110
+ isEnabled() {
111
+ return !!this.resolveApiKey();
112
+ }
113
+ setApiHost(apiHost) {
114
+ this.config.apiHost = apiHost;
115
+ this.saveConfig();
116
+ }
117
+ setApiKey(apiKey) {
118
+ this.config.apiKey = apiKey;
119
+ this.saveConfig();
120
+ }
121
+ getApiKey() {
122
+ return this.resolveApiKey();
123
+ }
124
+ getApiHost() {
125
+ return this.resolveApiHost();
126
+ }
127
+ setAppUrl(appUrl) {
128
+ this.config.appUrl = appUrl;
129
+ this.saveConfig();
130
+ }
131
+ getAppUrl() {
132
+ return this.config.appUrl;
133
+ }
134
+ getSharing() {
135
+ return this.config.sharing;
136
+ }
137
+ /**
138
+ * Sets the sharing preference. Note: this value is only updated at authentication time
139
+ * (via `validateAndSetApiToken`) and may become stale if the user's license status
140
+ * changes between re-authentications.
141
+ */
142
+ setSharing(sharing) {
143
+ this.config.sharing = sharing;
144
+ this.saveConfig();
145
+ }
146
+ delete() {
147
+ writeGlobalConfigPartial({ cloud: {} });
148
+ this.reload();
149
+ }
150
+ saveConfig() {
151
+ writeGlobalConfigPartial({ cloud: this.config });
152
+ this.reload();
153
+ }
154
+ reload() {
155
+ const savedConfig = readGlobalConfig()?.cloud || {};
156
+ this.config = {
157
+ appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
158
+ apiHost: savedConfig.apiHost,
159
+ apiKey: savedConfig.apiKey,
160
+ sharing: savedConfig.sharing,
161
+ currentOrganizationId: savedConfig.currentOrganizationId,
162
+ currentTeamId: savedConfig.currentTeamId,
163
+ teams: savedConfig.teams
164
+ };
165
+ }
166
+ saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
167
+ this.setApiKey(token);
168
+ this.setApiHost(apiHost);
169
+ this.setAppUrl(app.url);
170
+ if (typeof hasActiveLicense === "boolean") {
171
+ const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
172
+ const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
173
+ this.setSharing(hasActiveLicense || isGrandfathered);
174
+ }
175
+ }
176
+ async validateApiToken(token, apiHost) {
177
+ try {
178
+ const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
179
+ const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
180
+ if (!response.ok) {
181
+ const errorMessage = await response.text();
182
+ logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
183
+ throw new Error("Failed to validate API token: " + response.statusText);
184
+ }
185
+ const { user, organization, app, hasActiveLicense } = await response.json();
186
+ return {
187
+ user,
188
+ organization,
189
+ app,
190
+ ...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
191
+ };
192
+ } catch (err) {
193
+ const error = err;
194
+ const errorMessage = error instanceof Error ? error.message : String(error);
195
+ logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
196
+ if (error.cause) logger.error(`Cause: ${error.cause}`);
197
+ throw error;
198
+ }
199
+ }
200
+ async validateAndSetApiToken(token, apiHost) {
201
+ const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
202
+ this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
203
+ return {
204
+ user,
205
+ organization,
206
+ app,
207
+ hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
208
+ };
209
+ }
210
+ getCurrentOrganizationId() {
211
+ return this.config.currentOrganizationId;
212
+ }
213
+ setCurrentOrganization(organizationId) {
214
+ this.config.currentOrganizationId = organizationId;
215
+ this.saveConfig();
216
+ }
217
+ getCurrentTeamId(organizationId) {
218
+ if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
219
+ return this.config.currentTeamId;
220
+ }
221
+ setCurrentTeamId(teamId, organizationId) {
222
+ if (organizationId) {
223
+ if (!this.config.teams) this.config.teams = {};
224
+ if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
225
+ this.config.teams[organizationId].currentTeamId = teamId;
226
+ } else this.config.currentTeamId = teamId;
227
+ this.saveConfig();
228
+ }
229
+ clearCurrentTeamId(organizationId) {
230
+ if (organizationId) {
231
+ if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
232
+ } else delete this.config.currentTeamId;
233
+ this.saveConfig();
234
+ }
235
+ cacheTeams(teams, organizationId) {
236
+ if (organizationId) {
237
+ if (!this.config.teams) this.config.teams = {};
238
+ if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
239
+ this.config.teams[organizationId].cache = teams.map((t) => ({
240
+ id: t.id,
241
+ name: t.name,
242
+ slug: t.slug,
243
+ lastFetched: (/* @__PURE__ */ new Date()).toISOString()
244
+ }));
245
+ }
246
+ this.saveConfig();
247
+ }
248
+ getCachedTeams(organizationId) {
249
+ if (organizationId) return this.config.teams?.[organizationId]?.cache;
250
+ }
251
+ };
252
+ const cloudConfig = new CloudConfig();
253
+ //#endregion
48
254
  //#region src/providers/shared.ts
49
255
  /**
50
256
  * The default timeout for API requests in milliseconds.
@@ -69,8 +275,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
69
275
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
70
276
  const model = models.find((m) => m.id === modelName);
71
277
  if (!model || !model.cost) return;
72
- const inputCost = config.cost ?? model.cost.input;
73
- const outputCost = config.cost ?? model.cost.output;
278
+ const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
279
+ const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
280
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
74
281
  return inputCost * promptTokens + outputCost * completionTokens;
75
282
  }
76
283
  /**
@@ -438,220 +645,6 @@ function getCurrentTimestamp() {
438
645
  }
439
646
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
440
647
  //#endregion
441
- //#region src/globalConfig/globalConfig.ts
442
- /**
443
- * Functions for manipulating the global configuration file, which lives at
444
- * ~/.promptfoo/promptfoo.yaml by default.
445
- */
446
- function writeGlobalConfig(config) {
447
- fs$2.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
448
- }
449
- function readGlobalConfig() {
450
- const configDir = getConfigDirectoryPath();
451
- const configFilePath = path$1.join(configDir, "promptfoo.yaml");
452
- let globalConfig = { id: crypto.randomUUID() };
453
- if (fs$2.existsSync(configFilePath)) {
454
- globalConfig = yaml.load(fs$2.readFileSync(configFilePath, "utf-8")) || {};
455
- if (!globalConfig?.id) {
456
- globalConfig = {
457
- ...globalConfig,
458
- id: crypto.randomUUID()
459
- };
460
- writeGlobalConfig(globalConfig);
461
- }
462
- } else {
463
- if (!fs$2.existsSync(configDir)) fs$2.mkdirSync(configDir, { recursive: true });
464
- fs$2.writeFileSync(configFilePath, yaml.dump(globalConfig));
465
- }
466
- return globalConfig;
467
- }
468
- /**
469
- * Merges the top-level keys into existing config.
470
- * @param partialConfig New keys to merge into the existing config.
471
- */
472
- function writeGlobalConfigPartial(partialConfig) {
473
- const updatedConfig = { ...readGlobalConfig() };
474
- Object.entries(partialConfig).forEach(([key, value]) => {
475
- if (value !== void 0 && value !== null) updatedConfig[key] = value;
476
- else delete updatedConfig[key];
477
- });
478
- writeGlobalConfig(updatedConfig);
479
- }
480
- const API_HOST = getEnvString("API_HOST", "https://api.promptfoo.app");
481
- const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
482
- var CloudConfig = class {
483
- config;
484
- constructor() {
485
- const savedConfig = readGlobalConfig()?.cloud || {};
486
- this.config = {
487
- appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
488
- apiHost: savedConfig.apiHost,
489
- apiKey: savedConfig.apiKey,
490
- sharing: savedConfig.sharing,
491
- currentOrganizationId: savedConfig.currentOrganizationId,
492
- currentTeamId: savedConfig.currentTeamId,
493
- teams: savedConfig.teams
494
- };
495
- }
496
- /**
497
- * Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
498
- * Config file takes precedence over environment variable.
499
- */
500
- resolveApiKey() {
501
- return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
502
- }
503
- /**
504
- * Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
505
- * or defaults to the standard cloud API host.
506
- * Config file takes precedence over environment variable.
507
- */
508
- resolveApiHost() {
509
- return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
510
- }
511
- isEnabled() {
512
- return !!this.resolveApiKey();
513
- }
514
- setApiHost(apiHost) {
515
- this.config.apiHost = apiHost;
516
- this.saveConfig();
517
- }
518
- setApiKey(apiKey) {
519
- this.config.apiKey = apiKey;
520
- this.saveConfig();
521
- }
522
- getApiKey() {
523
- return this.resolveApiKey();
524
- }
525
- getApiHost() {
526
- return this.resolveApiHost();
527
- }
528
- setAppUrl(appUrl) {
529
- this.config.appUrl = appUrl;
530
- this.saveConfig();
531
- }
532
- getAppUrl() {
533
- return this.config.appUrl;
534
- }
535
- getSharing() {
536
- return this.config.sharing;
537
- }
538
- /**
539
- * Sets the sharing preference. Note: this value is only updated at authentication time
540
- * (via `validateAndSetApiToken`) and may become stale if the user's license status
541
- * changes between re-authentications.
542
- */
543
- setSharing(sharing) {
544
- this.config.sharing = sharing;
545
- this.saveConfig();
546
- }
547
- delete() {
548
- writeGlobalConfigPartial({ cloud: {} });
549
- this.reload();
550
- }
551
- saveConfig() {
552
- writeGlobalConfigPartial({ cloud: this.config });
553
- this.reload();
554
- }
555
- reload() {
556
- const savedConfig = readGlobalConfig()?.cloud || {};
557
- this.config = {
558
- appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
559
- apiHost: savedConfig.apiHost,
560
- apiKey: savedConfig.apiKey,
561
- sharing: savedConfig.sharing,
562
- currentOrganizationId: savedConfig.currentOrganizationId,
563
- currentTeamId: savedConfig.currentTeamId,
564
- teams: savedConfig.teams
565
- };
566
- }
567
- saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
568
- this.setApiKey(token);
569
- this.setApiHost(apiHost);
570
- this.setAppUrl(app.url);
571
- if (typeof hasActiveLicense === "boolean") {
572
- const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
573
- const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
574
- this.setSharing(hasActiveLicense || isGrandfathered);
575
- }
576
- }
577
- async validateApiToken(token, apiHost) {
578
- try {
579
- const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
580
- const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
581
- if (!response.ok) {
582
- const errorMessage = await response.text();
583
- logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
584
- throw new Error("Failed to validate API token: " + response.statusText);
585
- }
586
- const { user, organization, app, hasActiveLicense } = await response.json();
587
- return {
588
- user,
589
- organization,
590
- app,
591
- ...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
592
- };
593
- } catch (err) {
594
- const error = err;
595
- const errorMessage = error instanceof Error ? error.message : String(error);
596
- logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
597
- if (error.cause) logger.error(`Cause: ${error.cause}`);
598
- throw error;
599
- }
600
- }
601
- async validateAndSetApiToken(token, apiHost) {
602
- const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
603
- this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
604
- return {
605
- user,
606
- organization,
607
- app,
608
- hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
609
- };
610
- }
611
- getCurrentOrganizationId() {
612
- return this.config.currentOrganizationId;
613
- }
614
- setCurrentOrganization(organizationId) {
615
- this.config.currentOrganizationId = organizationId;
616
- this.saveConfig();
617
- }
618
- getCurrentTeamId(organizationId) {
619
- if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
620
- return this.config.currentTeamId;
621
- }
622
- setCurrentTeamId(teamId, organizationId) {
623
- if (organizationId) {
624
- if (!this.config.teams) this.config.teams = {};
625
- if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
626
- this.config.teams[organizationId].currentTeamId = teamId;
627
- } else this.config.currentTeamId = teamId;
628
- this.saveConfig();
629
- }
630
- clearCurrentTeamId(organizationId) {
631
- if (organizationId) {
632
- if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
633
- } else delete this.config.currentTeamId;
634
- this.saveConfig();
635
- }
636
- cacheTeams(teams, organizationId) {
637
- if (organizationId) {
638
- if (!this.config.teams) this.config.teams = {};
639
- if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
640
- this.config.teams[organizationId].cache = teams.map((t) => ({
641
- id: t.id,
642
- name: t.name,
643
- slug: t.slug,
644
- lastFetched: (/* @__PURE__ */ new Date()).toISOString()
645
- }));
646
- }
647
- this.saveConfig();
648
- }
649
- getCachedTeams(organizationId) {
650
- if (organizationId) return this.config.teams?.[organizationId]?.cache;
651
- }
652
- };
653
- const cloudConfig = new CloudConfig();
654
- //#endregion
655
648
  //#region src/util/fetch/monkeyPatchFetch.ts
656
649
  const gzipAsync = promisify(gzip);
657
650
  function isConnectionError(error) {
@@ -660,6 +653,14 @@ function isConnectionError(error) {
660
653
  /**
661
654
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
662
655
  */
656
+ function isPromptfooCloudApiHost(url) {
657
+ try {
658
+ const targetUrl = url instanceof Request ? url.url : url.toString();
659
+ return new URL(targetUrl).origin === CLOUD_API_HOST;
660
+ } catch {
661
+ return false;
662
+ }
663
+ }
663
664
  async function monkeyPatchFetch(url, options) {
664
665
  const NO_LOG_URLS = [
665
666
  R_ENDPOINT,
@@ -679,7 +680,7 @@ async function monkeyPatchFetch(url, options) {
679
680
  } catch (e) {
680
681
  logger.warn(`Failed to compress request body: ${e}`);
681
682
  }
682
- if (typeof url === "string" && url.startsWith("https://api.promptfoo.app") || url instanceof URL && url.host === "https://api.promptfoo.app".replace(/^https?:\/\//, "")) {
683
+ if (isPromptfooCloudApiHost(url)) {
683
684
  const token = cloudConfig.getApiKey();
684
685
  opts.headers = {
685
686
  ...opts.headers || {},
@@ -713,11 +714,31 @@ async function monkeyPatchFetch(url, options) {
713
714
  }
714
715
  }
715
716
  //#endregion
717
+ //#region src/util/fetch/retryContext.ts
718
+ const fetchRetryContext = new AsyncLocalStorage();
719
+ /**
720
+ * Run `fn` with a fetch retry context so nested `fetchWithRetries` /
721
+ * `fetchWithProxy` calls inherit the provider's configured `maxRetries`.
722
+ *
723
+ * When `maxRetries` is `undefined`, the new scope deliberately shadows any
724
+ * outer provider context so providers without an override fall back to defaults.
725
+ */
726
+ function withFetchRetryContext(maxRetries, fn) {
727
+ return fetchRetryContext.run({ maxRetries }, fn);
728
+ }
729
+ /**
730
+ * Read the active context's `maxRetries`, or `undefined` when none is set.
731
+ */
732
+ function getFetchRetryContextMaxRetries() {
733
+ return fetchRetryContext.getStore()?.maxRetries;
734
+ }
735
+ //#endregion
716
736
  //#region src/util/fetch/index.ts
717
737
  var fetch_exports = /* @__PURE__ */ __exportAll({
718
738
  fetchWithProxy: () => fetchWithProxy,
719
739
  fetchWithRetries: () => fetchWithRetries,
720
740
  fetchWithTimeout: () => fetchWithTimeout,
741
+ getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
721
742
  handleRateLimit: () => handleRateLimit,
722
743
  isRateLimited: () => isRateLimited,
723
744
  isTransientError: () => isTransientError
@@ -772,20 +793,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
772
793
  cachedProxyAgents.set(cacheKey, agent);
773
794
  return agent;
774
795
  }
796
+ /**
797
+ * Resolve whether to disable transient-error retries. An explicit caller flag
798
+ * always wins (a caller may opt back in even when the provider set
799
+ * `maxRetries: 0`); otherwise we disable only when the retry context carries
800
+ * `maxRetries === 0`.
801
+ */
802
+ function resolveTransientRetryDisabled(explicit) {
803
+ if (explicit !== void 0) return explicit;
804
+ return getFetchRetryContextMaxRetries() === 0;
805
+ }
806
+ function headersInitToRecord(headers) {
807
+ if (!headers) return {};
808
+ if (headers instanceof Headers) return Object.fromEntries(headers.entries());
809
+ if (Array.isArray(headers)) return Object.fromEntries(new Headers(headers).entries());
810
+ return { ...headers };
811
+ }
812
+ function getFetchWithProxyHeaders(url, options) {
813
+ const requestHeaders = url instanceof Request && options.headers === void 0 ? headersInitToRecord(url.headers) : {};
814
+ const optionHeaders = headersInitToRecord(options.headers);
815
+ return {
816
+ ...requestHeaders,
817
+ ...optionHeaders,
818
+ "x-promptfoo-version": VERSION
819
+ };
820
+ }
821
+ function getFetchUrlString(url) {
822
+ if (typeof url === "string") return url;
823
+ if (url instanceof URL) return url.toString();
824
+ if (url instanceof Request) return url.url;
825
+ }
775
826
  async function fetchWithProxy(url, options = {}, abortSignal) {
776
827
  let finalUrl = url;
777
- let finalUrlString;
778
- if (typeof url === "string") finalUrlString = url;
779
- else if (url instanceof URL) finalUrlString = url.toString();
780
- else if (url instanceof Request) finalUrlString = url.url;
828
+ let finalUrlString = getFetchUrlString(url);
781
829
  if (!finalUrlString) throw new Error("Invalid URL");
782
830
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
783
831
  const finalOptions = {
784
832
  ...options,
785
- headers: {
786
- ...options.headers,
787
- "x-promptfoo-version": VERSION
788
- },
833
+ headers: getFetchWithProxyHeaders(url, options),
789
834
  signal: combinedSignal
790
835
  };
791
836
  if (typeof url === "string") try {
@@ -823,10 +868,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
823
868
  logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
824
869
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
825
870
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
826
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
871
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
872
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
827
873
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
828
874
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
829
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
875
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
830
876
  const backoffMs = Math.pow(2, attempt) * 1e3;
831
877
  logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
832
878
  await sleep(backoffMs);
@@ -899,8 +945,17 @@ function isTransientError(response) {
899
945
  default: return false;
900
946
  }
901
947
  }
948
+ function formatFetchErrorMessage(error) {
949
+ if (!(error instanceof Error)) return String(error);
950
+ const typedError = error;
951
+ let message = `${typedError.name}: ${typedError.message}`;
952
+ if (typedError.cause) message += ` (Cause: ${typedError.cause})`;
953
+ if (typedError.code) message += ` (Code: ${typedError.code})`;
954
+ return message;
955
+ }
902
956
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
903
- maxRetries = Math.max(0, maxRetries ?? 4);
957
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
958
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
904
959
  let lastErrorMessage;
905
960
  const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
906
961
  for (let i = 0; i <= maxRetries; i++) {
@@ -912,21 +967,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
912
967
  }, timeout);
913
968
  if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
914
969
  if (response && isRateLimited(response)) {
915
- logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
916
970
  lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
971
+ if (i >= maxRetries) {
972
+ logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
973
+ break;
974
+ }
975
+ logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
917
976
  await handleRateLimit(response);
918
977
  continue;
919
978
  }
920
979
  return response;
921
980
  } catch (error) {
922
981
  if (error instanceof Error && error.name === "AbortError") throw error;
923
- let errorMessage;
924
- if (error instanceof Error) {
925
- const typedError = error;
926
- errorMessage = `${typedError.name}: ${typedError.message}`;
927
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
928
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
929
- } else errorMessage = String(error);
982
+ const errorMessage = formatFetchErrorMessage(error);
930
983
  logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
931
984
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
932
985
  lastErrorMessage = errorMessage;
@@ -935,6 +988,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
935
988
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
936
989
  }
937
990
  //#endregion
938
- export { TERMINAL_MAX_WIDTH as A, toTitleCase as C, CONSENT_ENDPOINT as D, CLOUD_PROVIDER_PREFIX as E, VERSION as F, FILE_METADATA_KEY as I, HUMAN_ASSERTION_TYPE as L, getShareApiBaseUrl as M, getShareViewBaseUrl as N, EVENTS_ENDPOINT as O, POSTHOG_KEY as P, parseChatPrompt as S, transformTools as T, isOpenAIToolArray as _, CloudConfig as a, openaiToolChoiceToBedrock as b, writeGlobalConfig as c, sleep as d, parseRateLimitHeaders as f, calculateCost as g, REQUEST_TIMEOUT_MS as h, fetch_exports as i, getDefaultShareViewBaseUrl 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 };
991
+ export { CONSENT_ENDPOINT as A, transformTools as C, writeGlobalConfig as D, readGlobalConfig as E, getShareApiBaseUrl as F, getShareViewBaseUrl as I, FILE_METADATA_KEY as L, R_ENDPOINT as M, TERMINAL_MAX_WIDTH as N, writeGlobalConfigPartial as O, getDefaultShareViewBaseUrl as P, HUMAN_ASSERTION_TYPE as R, transformToolChoice as S, cloudConfig as T, isPromptfooSampleTarget as _, getFetchWithProxyHeaders as a, parseChatPrompt as b, getCurrentTimestamp as c, parseRetryAfter as d, LONG_RUNNING_MODEL_TIMEOUT_MS as f, isOpenAIToolChoice as g, isOpenAIToolArray as h, fetch_exports as i, EVENTS_ENDPOINT as j, CLOUD_PROVIDER_PREFIX as k, sleep as l, calculateCost as m, fetchWithRetries as n, withFetchRetryContext as o, REQUEST_TIMEOUT_MS as p, fetchWithTimeout as r, isPromptfooCloudApiHost as s, fetchWithProxy as t, parseRateLimitHeaders as u, openaiToolChoiceToBedrock as v, CloudConfig as w, toTitleCase as x, openaiToolsToBedrock as y };
939
992
 
940
- //# sourceMappingURL=fetch-Di00EQrc.js.map
993
+ //# sourceMappingURL=fetch-It34O8Ur.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { n as fetchWithProxy } from "./fetch-DXUnXkVU.js";
3
+ export { fetchWithProxy };