promptfoo 0.121.5 → 0.121.8

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 (490) hide show
  1. package/dist/src/{ListApp-BRUsT43Y.js → ListApp-DLmM02JS.js} +1 -1
  2. package/dist/src/{accounts-BIFntVWB.cjs → accounts-BVz5gHLK.cjs} +16 -10
  3. package/dist/src/{accounts-bnyHT7Ju.js → accounts-BWjqwsrf.js} +12 -7
  4. package/dist/src/{accounts-CLJHCDDb.js → accounts-D6IBfEE0.js} +13 -8
  5. package/dist/src/{accounts-CaLNYnf7.js → accounts-DAv_0iE7.js} +12 -7
  6. package/dist/src/{agentic-utils-B5krlibj.js → agentic-utils-BJKAkz2e.js} +2 -2
  7. package/dist/src/{agentic-utils-D2x0wGhB.cjs → agentic-utils-C-A92xhn.cjs} +8 -7
  8. package/dist/src/{agentic-utils-Ba67xmgs.js → agentic-utils-DmoS_S4B.js} +2 -2
  9. package/dist/src/{agentic-utils-BclbiXiq.js → agentic-utils-GdToujHu.js} +2 -2
  10. package/dist/src/{agents-BGqaTDnr.js → agents-2C8NN6I1.js} +20 -9
  11. package/dist/src/{agents-n6vPqV3i.js → agents-BMAiSR2o.js} +4 -4
  12. package/dist/src/{agents-BYdMl1UE.js → agents-C-PGaxwj.js} +20 -9
  13. package/dist/src/{agents-BV9yFpXX.js → agents-C98cz5pl.js} +20 -9
  14. package/dist/src/{agents-WULPVjbH.cjs → agents-DB8Ub2Ld.cjs} +7 -6
  15. package/dist/src/{agents-DhxWMCtH.js → agents-Dwshy2H8.js} +4 -4
  16. package/dist/src/{agents-emVcx3yh.js → agents-mlKjx-cK.js} +2 -2
  17. package/dist/src/{agents-DiWmQYH9.cjs → agents-n2ej-c4H.cjs} +21 -10
  18. package/dist/src/{aimlapi-DR4pgeiC.js → aimlapi-Bi-laUlp.js} +6 -6
  19. package/dist/src/{aimlapi-BzLjZI_m.cjs → aimlapi-D0OFV4Vj.cjs} +7 -7
  20. package/dist/src/{aimlapi-BxqK9HF_.js → aimlapi-WyUK0wYy.js} +6 -6
  21. package/dist/src/{aimlapi-uPGp0Zdo.js → aimlapi-v-63ZjEI.js} +6 -6
  22. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
  23. package/dist/src/app/assets/Report-sCXUfaWo.js +1 -0
  24. package/dist/src/app/assets/index-BopgkZEh.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 +6 -6
  33. package/dist/src/{audio-CScmnmEB.js → audio-DnEIHWZR.js} +3 -3
  34. package/dist/src/{audio-Da8U9IS5.js → audio-heR0mu0n.js} +3 -3
  35. package/dist/src/{audio-BvpTOArF.js → audio-wafFO1wn.js} +3 -3
  36. package/dist/src/{audio-C0vDeS0j.cjs → audio-x44tsxIo.cjs} +4 -4
  37. package/dist/src/authoritativeMarkupInjection-2G3Be6oL.cjs +74 -0
  38. package/dist/src/authoritativeMarkupInjection-81PPynHR.js +75 -0
  39. package/dist/src/authoritativeMarkupInjection-D9O70HPi.js +74 -0
  40. package/dist/src/authoritativeMarkupInjection-PxSf3Rh8.js +74 -0
  41. package/dist/src/{base-dYsl2hmL.js → base-0Gzzue9Z.js} +4 -3
  42. package/dist/src/{base-BOMaNEes.js → base-Bp4c52YZ.js} +4 -3
  43. package/dist/src/{base-BTux96b1.js → base-BuNn-YBX.js} +4 -3
  44. package/dist/src/{base-Tw6uhH8K.cjs → base-BzdS8tod.cjs} +5 -4
  45. package/dist/src/bestOfN-BHiOjeaq.js +136 -0
  46. package/dist/src/bestOfN-CdkNPPbX.js +136 -0
  47. package/dist/src/bestOfN-ClUSOhN0.js +137 -0
  48. package/dist/src/bestOfN-DWwXEg1h.cjs +140 -0
  49. package/dist/src/{blobs-B95F_7vE.cjs → blobs-B0977K1O.cjs} +7 -6
  50. package/dist/src/{blobs-D_gg8nbm.js → blobs-CeFdPn_T.js} +2 -2
  51. package/dist/src/{blobs-DjLby-uP.js → blobs-DODuTK-a.js} +2 -2
  52. package/dist/src/{blobs-BW4U31ue.js → blobs-Dwef1Ao1.js} +2 -2
  53. package/dist/src/cache-BKYi3kAA.js +3 -0
  54. package/dist/src/{cache-BI5BY7ey.js → cache-BR77mdIR.js} +127 -11
  55. package/dist/src/{cache-Cr-qWIbP.js → cache-CrioYnaa.js} +125 -10
  56. package/dist/src/{cache-Bzttsk0X.js → cache-DdriHsNX.js} +125 -10
  57. package/dist/src/{cache-DGg-yTZG.cjs → cache-h5MWOBZI.cjs} +135 -25
  58. package/dist/src/{chat-Cx_LkwvZ.js → chat-BBEnnpQk.js} +11 -11
  59. package/dist/src/{chat-DChSH_Es.js → chat-BSos6PvZ.js} +9 -9
  60. package/dist/src/{chat-aMQZw6R7.js → chat-Bnt7ieO0.js} +4 -4
  61. package/dist/src/{chat-vYqqv1gP.cjs → chat-DSyYuTYT.cjs} +14 -13
  62. package/dist/src/{chat-BLOdH60v.js → chat-DTdf-J5Q.js} +11 -11
  63. package/dist/src/{chat-DH97tVV9.cjs → chat-Dq3DomYU.cjs} +6 -6
  64. package/dist/src/{chat-DG2LkwLq.js → chat-g5QLeLOo.js} +4 -4
  65. package/dist/src/{chat-D9nudO9b.js → chat-mTTuUAYb.js} +4 -4
  66. package/dist/src/{chatkit-B8X34dQc.js → chatkit-B6DWi70Q.js} +3 -3
  67. package/dist/src/{chatkit-D44VyUyB.cjs → chatkit-BYveR48_.cjs} +6 -5
  68. package/dist/src/{chatkit-BXu42Qwt.js → chatkit-fARZwEfV.js} +3 -3
  69. package/dist/src/{chatkit-CbMRoeYw.js → chatkit-lb6FK02w.js} +1 -1
  70. package/dist/src/{claude-agent-sdk-DYv_AJ8u.js → claude-agent-sdk-BGUac_kS.js} +213 -66
  71. package/dist/src/{claude-agent-sdk-BjriSVRZ.js → claude-agent-sdk-BP__YGfK.js} +213 -66
  72. package/dist/src/{claude-agent-sdk-BzNZeZ0N.js → claude-agent-sdk-Ddgx5BIQ.js} +212 -65
  73. package/dist/src/{claude-agent-sdk-BRq0bbIK.cjs → claude-agent-sdk-n2XcEclh.cjs} +219 -71
  74. package/dist/src/cloud-DiWbUiVP.js +3 -0
  75. package/dist/src/{cloud-Da0bofJd.js → cloud-DqF5N1aJ.js} +2 -2
  76. package/dist/src/{cloudflare-ai-CXC4b1EU.js → cloudflare-ai-BGamMotN.js} +4 -4
  77. package/dist/src/{cloudflare-ai-DGOwgexC.js → cloudflare-ai-BwW8W-w7.js} +4 -4
  78. package/dist/src/{cloudflare-ai-DJv5qnyb.cjs → cloudflare-ai-DCRGnsyL.cjs} +6 -6
  79. package/dist/src/{cloudflare-ai-CyBoIs1Q.js → cloudflare-ai-sD26nP6V.js} +4 -4
  80. package/dist/src/{cloudflare-gateway-TJkVrZlB.js → cloudflare-gateway-2lnOT4qM.js} +3 -3
  81. package/dist/src/{cloudflare-gateway-D-dnkzCF.js → cloudflare-gateway-B1-8KNCt.js} +3 -3
  82. package/dist/src/{cloudflare-gateway-DKVjkDav.cjs → cloudflare-gateway-CCC1DFrC.cjs} +5 -5
  83. package/dist/src/{cloudflare-gateway-1sAoOyft.js → cloudflare-gateway-DOghiU6r.js} +3 -3
  84. package/dist/src/{codex-app-server-CCLjqCh9.js → codex-app-server-BWeWamEb.js} +19 -4
  85. package/dist/src/{codex-app-server-CCe0TiDc.js → codex-app-server-DyQB1P0p.js} +20 -5
  86. package/dist/src/{codex-app-server-VMRnjZ68.cjs → codex-app-server-R9u_G7W9.cjs} +27 -11
  87. package/dist/src/{codex-app-server-CPW1LFwh.js → codex-app-server-ZQRJSJjU.js} +20 -5
  88. package/dist/src/{codex-sdk-Bzb_TqX9.js → codex-sdk-B62H0fe7.js} +16 -5
  89. package/dist/src/{codex-sdk-Bd8UbO9q.cjs → codex-sdk-BRPUvJG8.cjs} +31 -12
  90. package/dist/src/{codex-sdk-BgEFQ70r.js → codex-sdk-Dio1zJBS.js} +18 -7
  91. package/dist/src/codex-sdk-DxukZs_K.js +3 -0
  92. package/dist/src/{codex-sdk-DfvDTN33.js → codex-sdk-iEmW1eS2.js} +18 -7
  93. package/dist/src/{cometapi-B5ImDlSm.js → cometapi--hh7dESS.js} +7 -7
  94. package/dist/src/{cometapi-CC7hWxmX.js → cometapi-C7yWNGqt.js} +7 -7
  95. package/dist/src/{cometapi-CCbpHkuF.js → cometapi-CSIi16a0.js} +7 -7
  96. package/dist/src/{cometapi-BgAkuYCw.cjs → cometapi-sZgBZtbU.cjs} +8 -8
  97. package/dist/src/{completion-DtQ72Bm3.cjs → completion-CWtqdn3z.cjs} +6 -6
  98. package/dist/src/{completion-Vq_ad618.js → completion-DT8cxo9T.js} +4 -4
  99. package/dist/src/{completion-2iuYVxwi.js → completion-DUScduXp.js} +5 -5
  100. package/dist/src/{completion-CrD6MQ93.js → completion-D_2IOAoS.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-Un4Q_huE.js → createHash-CGVzWdjj.js} +1 -1
  107. package/dist/src/{createHash-VvBIc-AW.cjs → createHash-CSiqnK5P.cjs} +2 -2
  108. package/dist/src/{createHash-DPpsZgFF.js → createHash-CgRvs4Fn.js} +1 -1
  109. package/dist/src/crescendo-B41TwUHM.js +722 -0
  110. package/dist/src/crescendo-Bfic7KC4.js +724 -0
  111. package/dist/src/crescendo-DXFB7rHP.cjs +725 -0
  112. package/dist/src/crescendo-DvvYxMLA.js +723 -0
  113. package/dist/src/custom-BdzuqFTN.js +619 -0
  114. package/dist/src/custom-Cf5Q6r-P.js +618 -0
  115. package/dist/src/custom-DLgufezC.js +620 -0
  116. package/dist/src/custom-LEXHCRe3.cjs +621 -0
  117. package/dist/src/{docker--3qzPa-6.js → docker-BOSO_6hK.js} +5 -5
  118. package/dist/src/{docker-D3AY-5F5.cjs → docker-D0h2vFrc.cjs} +6 -6
  119. package/dist/src/{docker-DCsCDvwM.js → docker-D2TWGyTP.js} +5 -5
  120. package/dist/src/{docker-Dorv4_Dg.js → docker-Vj_4_cPg.js} +5 -5
  121. package/dist/src/{embedding-BXhN5lCH.cjs → embedding-BQIApR18.cjs} +6 -6
  122. package/dist/src/{embedding-ChS1ivFS.js → embedding-CStK0TV6.js} +5 -5
  123. package/dist/src/{embedding-DNRvZwRN.js → embedding-CU78FMnw.js} +5 -5
  124. package/dist/src/{embedding-D_bI4NDq.js → embedding-CV8lmCnU.js} +4 -4
  125. package/dist/src/{errors-DFHe4L-n.js → errors-9PcUL8BC.js} +1 -1
  126. package/dist/src/{esm-B_rGuPTo.cjs → esm-BIKakvNa.cjs} +8 -7
  127. package/dist/src/{esm-BRkfNsYs.js → esm-BTK1W7lG.js} +1 -1
  128. package/dist/src/{esm-BX8fwlAO.js → esm-Bexx2PFc.js} +1 -1
  129. package/dist/src/{eval-DJ_4A-tr.js → eval-B3BaNBbO.js} +19 -19
  130. package/dist/src/{eval-BQPLBJbw.js → eval-DfR9885C.js} +1 -1
  131. package/dist/src/evalResult-BtZSUgQv.js +3 -0
  132. package/dist/src/{evalResult-D6P5I5il.js → evalResult-CcSqNl_Y.js} +17 -10
  133. package/dist/src/{evalResult-Cx-8OWkb.cjs → evalResult-DHXs-9TL.cjs} +29 -11
  134. package/dist/src/{evalResult-pSvGWFMo.js → evalResult-PGqEbasb.js} +18 -11
  135. package/dist/src/evaluator-B9LGbKI8.js +3 -0
  136. package/dist/src/{evaluator-D-UIbbYq.js → evaluator-n_dEb00o.js} +258 -132
  137. package/dist/src/evaluatorHelpers-CrRObe2z.js +510 -0
  138. package/dist/src/evaluatorHelpers-D06I9WFL.cjs +537 -0
  139. package/dist/src/evaluatorHelpers-D1_kwvyp.js +511 -0
  140. package/dist/src/{extractor-DxyiFhPk.js → extractor-BVkZtk4R.js} +5 -5
  141. package/dist/src/{extractor-BM3jRERL.js → extractor-D3Fv_Tdh.js} +5 -5
  142. package/dist/src/{extractor-YlZbUMsL.js → extractor-Jp53vs-6.js} +5 -5
  143. package/dist/src/{extractor-Dxr2J_wK.cjs → extractor-bV_NOoaz.cjs} +6 -6
  144. package/dist/src/{fetch-Y5qX_kST.js → fetch-BSSAcMxf.js} +90 -26
  145. package/dist/src/fetch-BodQTrMU.js +3 -0
  146. package/dist/src/{fetch-NuqXW1Xb.cjs → fetch-Cfm4EuOB.cjs} +115 -32
  147. package/dist/src/{fetch-B6ch2nU2.js → fetch-Cpf1U1nO.js} +86 -26
  148. package/dist/src/{fetch-D9xxyC1p.js → fetch-Doks14zQ.js} +90 -26
  149. package/dist/src/{fileExtensions-D9h-8Wxg.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
  150. package/dist/src/{fileExtensions-BGh-W-HT.js → fileExtensions-CXRfY3Ss.js} +12 -2
  151. package/dist/src/{fileExtensions-DysCsxNG.js → fileExtensions-D4GCJ67J.js} +12 -2
  152. package/dist/src/{formatDuration-Ch4A7G3o.js → formatDuration-CMVNrYvE.js} +1 -1
  153. package/dist/src/{genaiTracer-BokHC-MW.cjs → genaiTracer-14nugQQx.cjs} +14 -2
  154. package/dist/src/{genaiTracer-C3ZPQU60.js → genaiTracer-BPVvltoW.js} +2 -2
  155. package/dist/src/{genaiTracer-DxODqT9e.js → genaiTracer-D18lYzhB.js} +2 -2
  156. package/dist/src/{genaiTracer-CFny3gOy.js → genaiTracer-jJKYsnjc.js} +2 -2
  157. package/dist/src/goat-Ba7Gznzq.js +467 -0
  158. package/dist/src/goat-CJngS-WU.js +468 -0
  159. package/dist/src/goat-CwsbfQeu.js +466 -0
  160. package/dist/src/goat-DOMbozoX.cjs +470 -0
  161. package/dist/src/graders-B3D7kCcD.js +3 -0
  162. package/dist/src/{graders-CgPn32yp.js → graders-BQt1BaQe.js} +1019 -86
  163. package/dist/src/{graders-Bw1wk_21.cjs → graders-CBQ2s6gz.cjs} +1087 -130
  164. package/dist/src/{graders-CwrbifOo.js → graders-DaRU98zs.js} +1022 -84
  165. package/dist/src/{graders-BoUqsCEm.js → graders-KXzjnIim.js} +1024 -86
  166. package/dist/src/hydra-BU6GjYoQ.js +560 -0
  167. package/dist/src/hydra-BmXHxlyl.js +559 -0
  168. package/dist/src/hydra-CR0KyYDb.js +561 -0
  169. package/dist/src/hydra-RO9jBks7.cjs +560 -0
  170. package/dist/src/{image-BeWaInPF.js → image-BBmZdKO3.js} +3 -3
  171. package/dist/src/{image-qjO6FWPs.js → image-B_PFG7IG.js} +3 -3
  172. package/dist/src/image-BtODOZjh.js +442 -0
  173. package/dist/src/image-CYuNJIqd.js +442 -0
  174. package/dist/src/{image-D10dNAav.cjs → image-E00WFZkq.cjs} +4 -4
  175. package/dist/src/image-HK2Cfqb1.cjs +465 -0
  176. package/dist/src/{image-Dr_3I3nK.js → image-LGj8dTcr.js} +3 -3
  177. package/dist/src/image-YMKejC0r.js +443 -0
  178. package/dist/src/index.cjs +711 -339
  179. package/dist/src/index.d.cts +3159 -1611
  180. package/dist/src/index.d.ts +3158 -1610
  181. package/dist/src/index.js +605 -249
  182. package/dist/src/indirectWebPwn-B80dLlFC.js +260 -0
  183. package/dist/src/indirectWebPwn-BMTXXznx.js +386 -0
  184. package/dist/src/indirectWebPwn-BZFPV7Q9.js +385 -0
  185. package/dist/src/indirectWebPwn-BaEQEOIO.cjs +260 -0
  186. package/dist/src/indirectWebPwn-BzpyMnFS.js +259 -0
  187. package/dist/src/indirectWebPwn-CiWB-vVH.js +385 -0
  188. package/dist/src/indirectWebPwn-D7NA9Nsv.cjs +397 -0
  189. package/dist/src/indirectWebPwn-o_bEFMjP.js +259 -0
  190. package/dist/src/inputVariables-B0qUChbV.js +467 -0
  191. package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
  192. package/dist/src/inputVariables-DXFdi7AI.js +468 -0
  193. package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
  194. package/dist/src/{interactiveCheck-CCICw2cy.js → interactiveCheck-C4QlIuoR.js} +1 -1
  195. package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
  196. package/dist/src/iterative-B-l0syBV.js +501 -0
  197. package/dist/src/iterative-BACUeCCz.cjs +503 -0
  198. package/dist/src/iterative-CVwoExo8.js +502 -0
  199. package/dist/src/iterative-QDrGSyss.js +500 -0
  200. package/dist/src/iterativeImage-BQg2OwA6.js +413 -0
  201. package/dist/src/iterativeImage-Bwn0fM75.js +413 -0
  202. package/dist/src/iterativeImage-CcgVyASo.cjs +415 -0
  203. package/dist/src/iterativeImage-D_UbQXg4.js +414 -0
  204. package/dist/src/iterativeMeta-CIu-CHRS.js +405 -0
  205. package/dist/src/iterativeMeta-CN8CNjFA.js +406 -0
  206. package/dist/src/iterativeMeta-DN6BTjpq.js +404 -0
  207. package/dist/src/iterativeMeta-DlqY3BsS.cjs +405 -0
  208. package/dist/src/iterativeTree-CJ8a8G9T.js +820 -0
  209. package/dist/src/iterativeTree-DcuFXnjL.js +819 -0
  210. package/dist/src/iterativeTree-FrDDYAN0.js +818 -0
  211. package/dist/src/iterativeTree-LOgAi0nU.cjs +821 -0
  212. package/dist/src/{knowledgeBase-C8qOo26M.cjs → knowledgeBase-CdbcGBZF.cjs} +25 -11
  213. package/dist/src/{knowledgeBase-BBETc5-S.js → knowledgeBase-CjOXp6Lr.js} +23 -9
  214. package/dist/src/{knowledgeBase-Dr3Kib7F.js → knowledgeBase-DxAq4n4z.js} +24 -10
  215. package/dist/src/{knowledgeBase-CzAi2rUI.js → knowledgeBase-o_wTLzrt.js} +24 -10
  216. package/dist/src/{litellm-DRc4qWfc.js → litellm-B2gHwya_.js} +4 -4
  217. package/dist/src/{litellm-CaUmV7Mk.cjs → litellm-CPpdlO7n.cjs} +5 -5
  218. package/dist/src/{litellm-BLSiANhk.js → litellm-CYfgxLrM.js} +4 -4
  219. package/dist/src/{litellm-DQGo_juI.js → litellm-ojWBKU3C.js} +4 -4
  220. package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
  221. package/dist/src/{luma-ray-if-Ml4R9.cjs → luma-ray-BCCO9XXG.cjs} +9 -8
  222. package/dist/src/{luma-ray-B-tNZzqW.js → luma-ray-BPrdihAb.js} +5 -5
  223. package/dist/src/{luma-ray-CtS3OlGq.js → luma-ray-DP5N79lB.js} +5 -5
  224. package/dist/src/{luma-ray-PJJgUjOc.js → luma-ray-DTDyoAlM.js} +5 -5
  225. package/dist/src/main.js +727 -234
  226. package/dist/src/memoryPoisoning-B6N3us35.cjs +106 -0
  227. package/dist/src/memoryPoisoning-Bc_BK_k2.js +106 -0
  228. package/dist/src/memoryPoisoning-D375zwSX.js +107 -0
  229. package/dist/src/memoryPoisoning-DJA0YjJT.js +106 -0
  230. package/dist/src/{messages-CewuNcNS.js → messages-Bg29Nbit.js} +17 -9
  231. package/dist/src/{messages-BnsVHUnm.cjs → messages-BrZEnHsV.cjs} +24 -15
  232. package/dist/src/{messages-CI69Lasb.js → messages-CBulRaud.js} +18 -10
  233. package/dist/src/{messages-B9dSjrNf.js → messages-K9A8RxBM.js} +18 -10
  234. package/dist/src/{meteor-CeGo0Lu2.js → meteor--TZYICTI.js} +1 -1
  235. package/dist/src/{meteor-BBGcGeCa.cjs → meteor-CR226f7Z.cjs} +2 -2
  236. package/dist/src/{meteor-Wc_aUVvu.js → meteor-Cl_yd7rJ.js} +1 -1
  237. package/dist/src/{meteor-BKTM-7KS.js → meteor-Dce-_zGQ.js} +1 -1
  238. package/dist/src/mischievousUser-BDLwSGN0.js +46 -0
  239. package/dist/src/mischievousUser-Blx-OtT3.js +47 -0
  240. package/dist/src/mischievousUser-CHuTTvBg.js +46 -0
  241. package/dist/src/mischievousUser-CSUrH3fq.cjs +46 -0
  242. package/dist/src/{modelslab-zpz9JcK0.js → modelslab-BjEk7yCP.js} +6 -6
  243. package/dist/src/{modelslab-BCLOtfek.js → modelslab-CBCrdIBc.js} +6 -6
  244. package/dist/src/{modelslab-D73OnKSx.js → modelslab-CrGpXuhv.js} +6 -6
  245. package/dist/src/{modelslab-BkapYJhh.cjs → modelslab-Cvh0klQx.cjs} +7 -7
  246. package/dist/src/{nova-reel-B8F_TK5w.js → nova-reel-CUDDZcSA.js} +5 -5
  247. package/dist/src/{nova-reel-Bx0NFV2f.js → nova-reel-CyDESu5J.js} +5 -5
  248. package/dist/src/{nova-reel-DkT7tnoB.cjs → nova-reel-DH_Ksu6X.cjs} +9 -8
  249. package/dist/src/{nova-reel-CNGJTLtG.js → nova-reel-YQAqUYJY.js} +5 -5
  250. package/dist/src/{nova-sonic-BeTRaFOh.js → nova-sonic-BVFFB7JZ.js} +2 -2
  251. package/dist/src/{nova-sonic-YT426juD.cjs → nova-sonic-Bg3cxMMu.cjs} +5 -4
  252. package/dist/src/{nova-sonic-CL7Zqv0G.js → nova-sonic-BhmnRGyh.js} +3 -3
  253. package/dist/src/{nova-sonic-BaXRN1cr.js → nova-sonic-DxmK95c1.js} +3 -3
  254. package/dist/src/{openai-Cy1XLs0c.cjs → openai-C3uXv8wS.cjs} +2 -2
  255. package/dist/src/{openai-BT-JvDse.js → openai-CJrsh9n4.js} +1 -1
  256. package/dist/src/{openai-D4fxGvRx.js → openai-zgwBb4Ff.js} +1 -1
  257. package/dist/src/{openclaw-DUBZP3GL.cjs → openclaw-CHQaZi_-.cjs} +17 -15
  258. package/dist/src/{openclaw-DA8U4DsD.js → openclaw-CWOm2eOr.js} +9 -8
  259. package/dist/src/{openclaw-DObVgpjC.js → openclaw-Cdk9JKfY.js} +9 -8
  260. package/dist/src/{openclaw-Bq7RVR3k.js → openclaw-DhF8rUpI.js} +9 -8
  261. package/dist/src/{opencode-sdk-BB40Wir1.js → opencode-sdk-BRjiPV-g.js} +38 -3
  262. package/dist/src/{opencode-sdk-CeqiOcOU.cjs → opencode-sdk-CPFMw0ed.cjs} +45 -9
  263. package/dist/src/{opencode-sdk-BM1UAIv1.js → opencode-sdk-CaSOCsBA.js} +39 -4
  264. package/dist/src/{opencode-sdk-ChdK7F7z.js → opencode-sdk-CqkyG8De.js} +39 -4
  265. package/dist/src/{otlpReceiver-UYMQx3sy.js → otlpReceiver--gTpSagc.js} +119 -3
  266. package/dist/src/{otlpReceiver-C6thJRXi.js → otlpReceiver-B2eaKC8C.js} +118 -2
  267. package/dist/src/{otlpReceiver-CcdIikOu.js → otlpReceiver-BXjcRqAM.js} +119 -3
  268. package/dist/src/{otlpReceiver-DNSQj6bf.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
  269. package/dist/src/packageParser--MWTSrPW.js +36 -0
  270. package/dist/src/packageParser-CgE-ziRo.js +35 -0
  271. package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
  272. package/dist/src/packageParser-hwwSGnAZ.js +35 -0
  273. package/dist/src/processShim-BBxt7LKO.js +95 -0
  274. package/dist/src/processShim-BcGzU8fY.js +94 -0
  275. package/dist/src/processShim-C_z3aRvF.js +94 -0
  276. package/dist/src/processShim-DSY9BV2T.cjs +98 -0
  277. package/dist/src/promptLength-0qIHyhA5.js +71 -0
  278. package/dist/src/promptLength-4X-Wd8PG.js +72 -0
  279. package/dist/src/promptLength-B9nZEfO6.js +71 -0
  280. package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
  281. package/dist/src/promptfoo-BU4_0J85.js +238 -0
  282. package/dist/src/promptfoo-CReYAtfb.js +237 -0
  283. package/dist/src/promptfoo-ClChwT74.cjs +292 -0
  284. package/dist/src/promptfoo-CqEpj6Sr.js +237 -0
  285. package/dist/src/prompts-BYMtqPCw.js +259 -0
  286. package/dist/src/prompts-C-bqE1Yp.js +260 -0
  287. package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
  288. package/dist/src/prompts-DHhQsANy.js +259 -0
  289. package/dist/src/prompts-D_QpZ2Dm.js +271 -0
  290. package/dist/src/prompts-hNvWBD3z.cjs +284 -0
  291. package/dist/src/prompts-huDVH2CI.js +270 -0
  292. package/dist/src/prompts-p78Hul5i.cjs +289 -0
  293. package/dist/src/{providerRegistry-BESeALrr.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
  294. package/dist/src/{providerRegistry-DoACwqhD.js → providerRegistry-DHcFiVWX.js} +1 -1
  295. package/dist/src/{providerRegistry-PMsleEzs.js → providerRegistry-ReCd0sFa.js} +1 -1
  296. package/dist/src/{providers-DT-GtF2t.js → providers-B7TyByfj.js} +789 -11925
  297. package/dist/src/{providers-CJh7iriU.js → providers-BGc7tDtQ.js} +796 -11872
  298. package/dist/src/{providers-Ctcc592x.js → providers-CSOp-bCm.js} +1 -1
  299. package/dist/src/{providers-eDShy16E.cjs → providers-V6RBuieY.cjs} +837 -12138
  300. package/dist/src/{providers-DRrerKra.js → providers-iH3Sw1yo.js} +851 -11938
  301. package/dist/src/{pythonUtils-C4tltmIn.js → pythonUtils-CLCgQ9tt.js} +1 -1
  302. package/dist/src/{pythonUtils-DNqbnRdx.js → pythonUtils-CgYxeSmO.js} +2 -2
  303. package/dist/src/{pythonUtils-CoLaCwNY.cjs → pythonUtils-Cokhluq3.cjs} +7 -6
  304. package/dist/src/{pythonUtils-DMO68Jg7.js → pythonUtils-D0BYebvX.js} +2 -2
  305. package/dist/src/{quiverai-CPKhWgaT.js → quiverai-58BtRRet.js} +3 -3
  306. package/dist/src/{quiverai-Bk1KrvL6.js → quiverai-C1dYu5MW.js} +3 -3
  307. package/dist/src/{quiverai-BSS9a7wV.js → quiverai-CNMIpZQg.js} +3 -3
  308. package/dist/src/{quiverai-Bpx6MZ7T.cjs → quiverai-fmSfU43k.cjs} +4 -4
  309. package/dist/src/registry-6Jw6ebor.cjs +124 -0
  310. package/dist/src/registry-BTGk2ZkB.js +124 -0
  311. package/dist/src/registry-BTNqmP5o.js +125 -0
  312. package/dist/src/registry-NGnOG2xa.js +124 -0
  313. package/dist/src/{server-gyd6d4Hc.js → remoteGeneration--D6WjzUm.js} +15 -108
  314. package/dist/src/{server-BEECpeGG.cjs → remoteGeneration-BpIYlb_O.cjs} +30 -119
  315. package/dist/src/{server-ByxbqAcQ.js → remoteGeneration-CJC3E0aW.js} +15 -147
  316. package/dist/src/remoteGeneration-D6UjE2JT.js +218 -0
  317. package/dist/src/render-BNTrbmBw.cjs +384 -0
  318. package/dist/src/render-CSP99NLm.js +348 -0
  319. package/dist/src/render-DFfDeYUK.js +347 -0
  320. package/dist/src/{render-nj-UaPdn.js → render-DznWrxGO.js} +2 -2
  321. package/dist/src/render-_6ur1fhE.js +347 -0
  322. package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
  323. package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
  324. package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
  325. package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
  326. package/dist/src/{responses-1ztiVYsx.js → responses-5Gf5HNOi.js} +11 -7
  327. package/dist/src/{responses-BiaBguAu.js → responses-BVi7xIdv.js} +13 -9
  328. package/dist/src/{responses-CF-ayauu.cjs → responses-CUARGrhY.cjs} +16 -11
  329. package/dist/src/{responses-B8haB-mD.js → responses-CrmWv6iz.js} +13 -9
  330. package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
  331. package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
  332. package/dist/src/{rubyUtils-CIQFnVz4.js → rubyUtils-CXlFM2rR.js} +2 -2
  333. package/dist/src/{rubyUtils-BI0p46eZ.js → rubyUtils-CnlW8AYb.js} +2 -2
  334. package/dist/src/{rubyUtils-DoifqkiA.cjs → rubyUtils-CqUWBZAt.cjs} +16 -26
  335. package/dist/src/{rubyUtils-DGnoCYL2.js → rubyUtils-DdGojpfv.js} +1 -1
  336. package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
  337. package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
  338. package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
  339. package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
  340. package/dist/src/{sagemaker-ljtY12VM.cjs → sagemaker-BeVTKfrv.cjs} +65 -53
  341. package/dist/src/{sagemaker-BDLeW29y.js → sagemaker-BwbV5U7_.js} +61 -50
  342. package/dist/src/{sagemaker-C5T60MKf.js → sagemaker-ClAZ6Qwc.js} +61 -50
  343. package/dist/src/{sagemaker-ClS_NB07.js → sagemaker-DY2qrOpq.js} +61 -50
  344. package/dist/src/{scanner-nOCWNIXa.js → scanner-BS-iFIp3.js} +6 -6
  345. package/dist/src/server/index.js +4115 -420
  346. package/dist/src/server-BHOEL8p8.cjs +126 -0
  347. package/dist/src/server-CbiJppij.js +107 -0
  348. package/dist/src/server-D18AAlAc.js +3 -0
  349. package/dist/src/server-DLYjSFm2.js +182 -0
  350. package/dist/src/server-JQYD_Nws.js +146 -0
  351. package/dist/src/{fileExtensions-8CjoL7vB.js → shared-BoG7qLMv.js} +12 -2
  352. package/dist/src/shared-CRq0gGVf.js +1334 -0
  353. package/dist/src/shared-CSIGeGLl.js +1334 -0
  354. package/dist/src/shared-DNvim54U.js +1335 -0
  355. package/dist/src/shared-aHWko3P1.cjs +1436 -0
  356. package/dist/src/{signal-DTtUuU3l.js → signal-CSurUUyV.js} +2 -2
  357. package/dist/src/simulatedUser-C7sOFSF6.js +222 -0
  358. package/dist/src/simulatedUser-DH_7RzEQ.js +222 -0
  359. package/dist/src/simulatedUser-lgMMmniD.js +223 -0
  360. package/dist/src/simulatedUser-mnCUS9Bm.cjs +227 -0
  361. package/dist/src/{slack-Bamy_7te.js → slack-Bapo-7_8.js} +1 -1
  362. package/dist/src/{slack-BLlsDpfG.cjs → slack-DMC1QVEg.cjs} +3 -2
  363. package/dist/src/{slack-BPYLQLgb.js → slack-DTEFhrMn.js} +1 -1
  364. package/dist/src/{slack-4zZX1OKP.js → slack-k-_CP84Q.js} +1 -1
  365. package/dist/src/storage-95htjpLs.js +834 -0
  366. package/dist/src/storage-A4WnAeN3.cjs +911 -0
  367. package/dist/src/storage-B2Ql_oq4.js +822 -0
  368. package/dist/src/storage-EKVWZBNY.js +875 -0
  369. package/dist/src/{store-2K0kDi80.cjs → store-B2NDDooM.cjs} +60 -24
  370. package/dist/src/{store-CPh25336.js → store-DKd5592Q.js} +50 -19
  371. package/dist/src/{store-BPkzEyFM.js → store-HpopRVzl.js} +50 -19
  372. package/dist/src/store-IbiRIF3k.js +3 -0
  373. package/dist/src/strategies-CBI1brSy.js +2333 -0
  374. package/dist/src/strategies-CCcnEbFO.cjs +2360 -0
  375. package/dist/src/strategies-CD1gHeeQ.js +2331 -0
  376. package/dist/src/{tables-WgdUZ8Ck.js → tables-CRSXQ2Ke.js} +2 -2
  377. package/dist/src/{tables-BMSOS2Gg.js → tables-CxjU7bBd.js} +2 -2
  378. package/dist/src/{tables-CXbaZ9y1.cjs → tables-DBIJU0WE.cjs} +6 -5
  379. package/dist/src/{tables-NlvH23ky.js → tables-DafUHOeh.js} +2 -2
  380. package/dist/src/telemetry-BUm_krVX.js +3 -0
  381. package/dist/src/{telemetry--iqaGyaS.js → telemetry-BbpmrenM.js} +4 -4
  382. package/dist/src/{telemetry-CgdVGV8N.js → telemetry-C4bX-6Sr.js} +4 -4
  383. package/dist/src/{telemetry-CEQxGnMZ.cjs → telemetry-C_ImlCOk.cjs} +15 -9
  384. package/dist/src/{telemetry-DWdGHvEf.js → telemetry-DOE567Wj.js} +4 -4
  385. package/dist/src/{text-DDQP0tuQ.js → text-CZr46tp_.js} +1 -1
  386. package/dist/src/{text-D4lz-Jg_.js → text-Db-Wt2u2.js} +1 -1
  387. package/dist/src/{text-NWvfMfkF.js → text-DwYK5EBn.js} +1 -1
  388. package/dist/src/{text-BiNME7QG.cjs → text-nywWsRBM.cjs} +1 -1
  389. package/dist/src/{tokenUsageUtils-2wIvAhB3.js → tokenUsageUtils-CDet74yk.js} +1 -1
  390. package/dist/src/{tokenUsageUtils-4c780gFd.js → tokenUsageUtils-CmnQ0G2m.js} +1 -1
  391. package/dist/src/{tokenUsageUtils-C9odhsbW.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
  392. package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
  393. package/dist/src/toolAttributes-COVgDrBG.js +87 -0
  394. package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
  395. package/dist/src/tracingOptions-BOP1FsRt.js +220 -0
  396. package/dist/src/tracingOptions-BvmDa_jH.js +219 -0
  397. package/dist/src/tracingOptions-DFBoE8O0.cjs +249 -0
  398. package/dist/src/tracingOptions-xhjOg2b1.js +221 -0
  399. package/dist/src/{transcription-D7Q0vJsh.js → transcription-BOXDoehT.js} +4 -4
  400. package/dist/src/{transcription-Bm2emLmJ.js → transcription-CpVdKc4P.js} +5 -5
  401. package/dist/src/{transcription-CZ4LG5hQ.cjs → transcription-D8kkPXg_.cjs} +9 -8
  402. package/dist/src/{transcription-84t4ALo2.js → transcription-Z94eV9LR.js} +5 -5
  403. package/dist/src/transform-BnSTnFlp.js +187 -0
  404. package/dist/src/transform-BnSXWmU_2.cjs +221 -0
  405. package/dist/src/{transform-DtooZqYY.js → transform-BufxPIQL.js} +8 -8
  406. package/dist/src/transform-CGt7Kt3y2.js +186 -0
  407. package/dist/src/transform-CrPGTsij.js +186 -0
  408. package/dist/src/{transform-Dg4LcO1Y.cjs → transform-DJkt81VY.cjs} +12 -11
  409. package/dist/src/{transform-B-b6Cq-q.js → transform-DtTfiGoh.js} +8 -8
  410. package/dist/src/{transform-_DpNB4qp.js → transform-Wp6s_5QE.js} +8 -8
  411. package/dist/src/{transformersAvailability-lvCCvuPT.js → transformersAvailability-0ThtPved.js} +1 -1
  412. package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
  413. package/dist/src/{transformersAvailability-rJGPccjr.js → transformersAvailability-BvyU9vDD.js} +1 -1
  414. package/dist/src/{transformersAvailability-B22swDxr.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
  415. package/dist/src/{types-BVH9hjgW.js → types-BFevViUY.js} +113 -19
  416. package/dist/src/{types-BDjGOq4E.js → types-BJQBBPTP.js} +113 -19
  417. package/dist/src/{types-CgG2rKiW.cjs → types-CxJvaY2S.cjs} +211 -28
  418. package/dist/src/{types-DNRZVOue.js → types-D6glLbdF.js} +125 -26
  419. package/dist/src/{util-Dpmm_dAI.cjs → util-BHCAeuXx.cjs} +33 -7
  420. package/dist/src/{util-DFPeFkiV.js → util-CMrHV35u.js} +28 -8
  421. package/dist/src/{util-DvpHnLt0.cjs → util-COnzevXE.cjs} +29 -21
  422. package/dist/src/{util-BlFVL0UF.js → util-CYev3d-r.js} +22 -7
  423. package/dist/src/util-DGqkTb2-.js +327 -0
  424. package/dist/src/util-DNtUsus_.cjs +386 -0
  425. package/dist/src/{util-Dub0f_ej.js → util-DRfqa4xz.js} +17 -10
  426. package/dist/src/{util-BVXcTwXu.js → util-DTq3jq2z.js} +28 -8
  427. package/dist/src/{util-C-kmRosx.js → util-DeY58psG.js} +22 -7
  428. package/dist/src/util-DpV6KT5i.js +327 -0
  429. package/dist/src/{util-3pBZZb_H.js → util-DwNJzqOV.js} +45 -10
  430. package/dist/src/util-ETfU_sS9.js +328 -0
  431. package/dist/src/{util-A5_ZsQUn.cjs → util-NYQvo1C7.cjs} +25 -9
  432. package/dist/src/{util-DN0-b81k.js → util-X4KQgyVD.js} +28 -8
  433. package/dist/src/{util-BQOCAHQC.js → util-jZRrXe1P.js} +46 -11
  434. package/dist/src/{util-B9CNhyac.js → util-o2Qg5rZv.js} +22 -7
  435. package/dist/src/{utils-BUMN8orw.js → utils-B0lzitHZ.js} +2 -2
  436. package/dist/src/{utils-kt7lv30R.js → utils-BFOh20Gb.js} +2 -2
  437. package/dist/src/{utils-o8S5huU2.js → utils-BGY69tk_.js} +2 -2
  438. package/dist/src/{utils-DkVeShIB.cjs → utils-Ve6kuJsa.cjs} +3 -3
  439. package/dist/src/{version-CbuBKu2U.js → version-CHR-EFec.js} +2 -2
  440. package/dist/src/{version-CbpiUINz.js → version-F0YDgb7J.js} +2 -2
  441. package/dist/src/{version-D9zu9FWB.cjs → version-VzUqOBZk.cjs} +2 -2
  442. package/dist/src/{version-0frU0UTr.js → version-qVEN5qCm.js} +2 -2
  443. package/dist/tsconfig.tsbuildinfo +1 -1
  444. package/package.json +49 -23
  445. package/dist/src/app/assets/Report-vjzrbgce.js +0 -1
  446. package/dist/src/app/assets/index-B3NQ8HTd.js +0 -385
  447. package/dist/src/app/assets/index-Cli2yAXv.css +0 -1
  448. package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
  449. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
  450. package/dist/src/cache-BRkhlH3k.cjs +0 -3
  451. package/dist/src/cache-BlC6aeJ0.js +0 -3
  452. package/dist/src/cloud-CoD5OacT.js +0 -3
  453. package/dist/src/codex-sdk-1jm_qPHf.js +0 -3
  454. package/dist/src/codex-sdk-Danroptg.cjs +0 -2
  455. package/dist/src/evalResult-BBJAHAtw.cjs +0 -2
  456. package/dist/src/evalResult-BBK58h2B.js +0 -3
  457. package/dist/src/evalResult-spPqh1G_.js +0 -2
  458. package/dist/src/evaluator-DgLKaZk8.js +0 -3
  459. package/dist/src/fetch-8viavNv8.js +0 -3
  460. package/dist/src/graders-C84JI-m5.js +0 -2
  461. package/dist/src/graders-CBbd0K0Q.cjs +0 -2
  462. package/dist/src/graders-CbQqpHSN.js +0 -3
  463. package/dist/src/graders-DS42d3ZG.js +0 -2
  464. package/dist/src/image-BmilRNqO.js +0 -258
  465. package/dist/src/image-CxJoa3aW.cjs +0 -280
  466. package/dist/src/image-DsGRlkh7.js +0 -257
  467. package/dist/src/image-a_SGUobh.js +0 -257
  468. package/dist/src/providers-BuyzKt7C.js +0 -2
  469. package/dist/src/providers-C7lNVBjX.cjs +0 -3
  470. package/dist/src/providers-CCE2COJi2.js +0 -2
  471. package/dist/src/render-7uNJ2V14.js +0 -135
  472. package/dist/src/render-DlscvAUJ.js +0 -135
  473. package/dist/src/render-eui5p5mL.js +0 -136
  474. package/dist/src/render-tG6ir9_g.cjs +0 -165
  475. package/dist/src/rubyUtils-4hjGxvju.js +0 -3
  476. package/dist/src/rubyUtils-CO-tuszQ.cjs +0 -2
  477. package/dist/src/server-ByiF3qlg.js +0 -386
  478. package/dist/src/server-C0XKRNB_.cjs +0 -2
  479. package/dist/src/server-C_15p79-.js +0 -3
  480. package/dist/src/store-2OXm_eBY.js +0 -240
  481. package/dist/src/store-BELqNwvz.js +0 -3
  482. package/dist/src/store-uQZ4AjPe.cjs +0 -2
  483. package/dist/src/telemetry-DjNoC_n3.cjs +0 -2
  484. package/dist/src/telemetry-ZdPZc0fm.js +0 -3
  485. package/dist/src/transform-BQt0BeAW.js +0 -3
  486. package/dist/src/transform-Bq5oqC0s.cjs +0 -2
  487. package/dist/src/transform-C9izGX54.cjs +0 -228
  488. package/dist/src/transform-CwbAZ84V.js +0 -216
  489. package/dist/src/transform-DzCF-wqV.js +0 -213
  490. package/dist/src/transform-eGiUAv86.js +0 -216
@@ -1,7 +1,8 @@
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-KD8JjCRJ.js";
3
- import { n as VERSION } from "./version-0frU0UTr.js";
3
+ import { n as VERSION } from "./version-CHR-EFec.js";
4
4
  import { t as invariant } from "./invariant-DIYf9sP1.js";
5
+ import { AsyncLocalStorage } from "node:async_hooks";
5
6
  import * as fs$2 from "fs";
6
7
  import * as path$1 from "path";
7
8
  import path from "path";
@@ -61,8 +62,8 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
61
62
  const model = models.find((m) => m.id === modelName);
62
63
  if (!model || !model.cost) return;
63
64
  const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
64
- const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
65
- const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
65
+ const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
66
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
66
67
  return inputCost * promptTokens + outputCost * completionTokens;
67
68
  }
68
69
  /**
@@ -469,7 +470,10 @@ function writeGlobalConfigPartial(partialConfig) {
469
470
  });
470
471
  writeGlobalConfig(updatedConfig);
471
472
  }
472
- 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);
473
477
  const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
474
478
  var CloudConfig = class {
475
479
  config;
@@ -652,6 +656,14 @@ function isConnectionError(error) {
652
656
  /**
653
657
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
654
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
+ }
655
667
  async function monkeyPatchFetch(url, options) {
656
668
  const NO_LOG_URLS = [
657
669
  R_ENDPOINT,
@@ -671,7 +683,7 @@ async function monkeyPatchFetch(url, options) {
671
683
  } catch (e) {
672
684
  logger.warn(`Failed to compress request body: ${e}`);
673
685
  }
674
- 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)) {
675
687
  const token = cloudConfig.getApiKey();
676
688
  opts.headers = {
677
689
  ...opts.headers || {},
@@ -705,11 +717,31 @@ async function monkeyPatchFetch(url, options) {
705
717
  }
706
718
  }
707
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
708
739
  //#region src/util/fetch/index.ts
709
740
  var fetch_exports = /* @__PURE__ */ __exportAll({
710
741
  fetchWithProxy: () => fetchWithProxy,
711
742
  fetchWithRetries: () => fetchWithRetries,
712
743
  fetchWithTimeout: () => fetchWithTimeout,
744
+ getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
713
745
  handleRateLimit: () => handleRateLimit,
714
746
  isRateLimited: () => isRateLimited,
715
747
  isTransientError: () => isTransientError
@@ -764,20 +796,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
764
796
  cachedProxyAgents.set(cacheKey, agent);
765
797
  return agent;
766
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
+ }
767
829
  async function fetchWithProxy(url, options = {}, abortSignal) {
768
830
  let finalUrl = url;
769
- let finalUrlString;
770
- if (typeof url === "string") finalUrlString = url;
771
- else if (url instanceof URL) finalUrlString = url.toString();
772
- else if (url instanceof Request) finalUrlString = url.url;
831
+ let finalUrlString = getFetchUrlString(url);
773
832
  if (!finalUrlString) throw new Error("Invalid URL");
774
833
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
775
834
  const finalOptions = {
776
835
  ...options,
777
- headers: {
778
- ...options.headers,
779
- "x-promptfoo-version": VERSION
780
- },
836
+ headers: getFetchWithProxyHeaders(url, options),
781
837
  signal: combinedSignal
782
838
  };
783
839
  if (typeof url === "string") try {
@@ -815,10 +871,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
815
871
  logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
816
872
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
817
873
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
818
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
874
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
875
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
819
876
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
820
877
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
821
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
878
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
822
879
  const backoffMs = Math.pow(2, attempt) * 1e3;
823
880
  logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
824
881
  await sleep(backoffMs);
@@ -891,8 +948,17 @@ function isTransientError(response) {
891
948
  default: return false;
892
949
  }
893
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
+ }
894
959
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
895
- maxRetries = Math.max(0, maxRetries ?? 4);
960
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
961
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
896
962
  let lastErrorMessage;
897
963
  const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
898
964
  for (let i = 0; i <= maxRetries; i++) {
@@ -904,21 +970,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
904
970
  }, timeout);
905
971
  if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
906
972
  if (response && isRateLimited(response)) {
907
- logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
908
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...`);
909
979
  await handleRateLimit(response);
910
980
  continue;
911
981
  }
912
982
  return response;
913
983
  } catch (error) {
914
984
  if (error instanceof Error && error.name === "AbortError") throw error;
915
- let errorMessage;
916
- if (error instanceof Error) {
917
- const typedError = error;
918
- errorMessage = `${typedError.name}: ${typedError.message}`;
919
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
920
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
921
- } else errorMessage = String(error);
985
+ const errorMessage = formatFetchErrorMessage(error);
922
986
  logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
923
987
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
924
988
  lastErrorMessage = errorMessage;
@@ -927,6 +991,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
927
991
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
928
992
  }
929
993
  //#endregion
930
- export { TERMINAL_MAX_WIDTH as A, toTitleCase as C, CONSENT_ENDPOINT as D, CLOUD_PROVIDER_PREFIX as E, FILE_METADATA_KEY as F, HUMAN_ASSERTION_TYPE as I, getDefaultShareViewBaseUrl as M, getShareApiBaseUrl as N, EVENTS_ENDPOINT as O, getShareViewBaseUrl as P, parseChatPrompt as S, transformTools as T, isOpenAIToolArray as _, CloudConfig as a, openaiToolChoiceToBedrock as b, writeGlobalConfig as c, sleep as d, parseRateLimitHeaders as f, calculateCost as g, REQUEST_TIMEOUT_MS as h, fetch_exports as i, getDefaultPort as j, R_ENDPOINT as k, writeGlobalConfigPartial as l, LONG_RUNNING_MODEL_TIMEOUT_MS as m, fetchWithRetries as n, cloudConfig as o, parseRetryAfter as p, fetchWithTimeout as r, readGlobalConfig as s, fetchWithProxy as t, getCurrentTimestamp as u, isOpenAIToolChoice as v, transformToolChoice as w, openaiToolsToBedrock as x, isPromptfooSampleTarget as y };
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 };
931
995
 
932
- //# sourceMappingURL=fetch-Y5qX_kST.js.map
996
+ //# sourceMappingURL=fetch-BSSAcMxf.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { n as fetchWithProxy } from "./fetch-Cpf1U1nO.js";
3
+ export { fetchWithProxy };
@@ -1,14 +1,16 @@
1
- const require_logger = require("./logger-COuQb2xB.cjs");
2
- const require_invariant = require("./invariant-kfQ8Bu82.cjs");
3
- const require_version = require("./version-D9zu9FWB.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
2
+ const require_logger = require("./logger-cfNpzI4o.cjs");
3
+ const require_invariant = require("./invariant-QtnLD03y.cjs");
4
+ const require_version = require("./version-VzUqOBZk.cjs");
4
5
  let fs = require("fs");
5
- fs = require_logger.__toESM(fs);
6
+ fs = require_rolldown_runtime.__toESM(fs, 1);
6
7
  let path = require("path");
7
- path = require_logger.__toESM(path);
8
+ path = require_rolldown_runtime.__toESM(path, 1);
8
9
  let js_yaml = require("js-yaml");
9
- js_yaml = require_logger.__toESM(js_yaml);
10
+ js_yaml = require_rolldown_runtime.__toESM(js_yaml, 1);
11
+ let node_async_hooks = require("node:async_hooks");
10
12
  let fs_promises = require("fs/promises");
11
- fs_promises = require_logger.__toESM(fs_promises);
13
+ fs_promises = require_rolldown_runtime.__toESM(fs_promises, 1);
12
14
  let proxy_from_env = require("proxy-from-env");
13
15
  let undici = require("undici");
14
16
  let util = require("util");
@@ -74,7 +76,10 @@ function writeGlobalConfigPartial(partialConfig) {
74
76
  });
75
77
  writeGlobalConfig(updatedConfig);
76
78
  }
77
- const API_HOST = require_logger.getEnvString("API_HOST", "https://api.promptfoo.app");
79
+ //#endregion
80
+ //#region src/globalConfig/cloud.ts
81
+ const CLOUD_API_HOST = "https://api.promptfoo.app";
82
+ const API_HOST = require_logger.getEnvString("API_HOST", CLOUD_API_HOST);
78
83
  const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
79
84
  var CloudConfig = class {
80
85
  config;
@@ -274,8 +279,8 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
274
279
  const model = models.find((m) => m.id === modelName);
275
280
  if (!model || !model.cost) return;
276
281
  const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
277
- const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
278
- const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
282
+ const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
283
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
279
284
  return inputCost * promptTokens + outputCost * completionTokens;
280
285
  }
281
286
  /**
@@ -651,6 +656,14 @@ function isConnectionError(error) {
651
656
  /**
652
657
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
653
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
+ }
654
667
  async function monkeyPatchFetch(url, options) {
655
668
  const NO_LOG_URLS = [
656
669
  R_ENDPOINT,
@@ -670,7 +683,7 @@ async function monkeyPatchFetch(url, options) {
670
683
  } catch (e) {
671
684
  require_logger.logger.warn(`Failed to compress request body: ${e}`);
672
685
  }
673
- 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)) {
674
687
  const token = cloudConfig.getApiKey();
675
688
  opts.headers = {
676
689
  ...opts.headers || {},
@@ -704,11 +717,31 @@ async function monkeyPatchFetch(url, options) {
704
717
  }
705
718
  }
706
719
  //#endregion
720
+ //#region src/util/fetch/retryContext.ts
721
+ const fetchRetryContext = new node_async_hooks.AsyncLocalStorage();
722
+ /**
723
+ * Run `fn` with a fetch retry context so nested `fetchWithRetries` /
724
+ * `fetchWithProxy` calls inherit the provider's configured `maxRetries`.
725
+ *
726
+ * When `maxRetries` is `undefined`, the new scope deliberately shadows any
727
+ * outer provider context so providers without an override fall back to defaults.
728
+ */
729
+ function withFetchRetryContext(maxRetries, fn) {
730
+ return fetchRetryContext.run({ maxRetries }, fn);
731
+ }
732
+ /**
733
+ * Read the active context's `maxRetries`, or `undefined` when none is set.
734
+ */
735
+ function getFetchRetryContextMaxRetries() {
736
+ return fetchRetryContext.getStore()?.maxRetries;
737
+ }
738
+ //#endregion
707
739
  //#region src/util/fetch/index.ts
708
- var fetch_exports = /* @__PURE__ */ require_logger.__exportAll({
740
+ var fetch_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
709
741
  fetchWithProxy: () => fetchWithProxy,
710
742
  fetchWithRetries: () => fetchWithRetries,
711
743
  fetchWithTimeout: () => fetchWithTimeout,
744
+ getFetchWithProxyHeaders: () => getFetchWithProxyHeaders,
712
745
  handleRateLimit: () => handleRateLimit,
713
746
  isRateLimited: () => isRateLimited,
714
747
  isTransientError: () => isTransientError
@@ -763,20 +796,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
763
796
  cachedProxyAgents.set(cacheKey, agent);
764
797
  return agent;
765
798
  }
799
+ /**
800
+ * Resolve whether to disable transient-error retries. An explicit caller flag
801
+ * always wins (a caller may opt back in even when the provider set
802
+ * `maxRetries: 0`); otherwise we disable only when the retry context carries
803
+ * `maxRetries === 0`.
804
+ */
805
+ function resolveTransientRetryDisabled(explicit) {
806
+ if (explicit !== void 0) return explicit;
807
+ return getFetchRetryContextMaxRetries() === 0;
808
+ }
809
+ function headersInitToRecord(headers) {
810
+ if (!headers) return {};
811
+ if (headers instanceof Headers) return Object.fromEntries(headers.entries());
812
+ if (Array.isArray(headers)) return Object.fromEntries(new Headers(headers).entries());
813
+ return { ...headers };
814
+ }
815
+ function getFetchWithProxyHeaders(url, options) {
816
+ const requestHeaders = url instanceof Request && options.headers === void 0 ? headersInitToRecord(url.headers) : {};
817
+ const optionHeaders = headersInitToRecord(options.headers);
818
+ return {
819
+ ...requestHeaders,
820
+ ...optionHeaders,
821
+ "x-promptfoo-version": require_version.VERSION
822
+ };
823
+ }
824
+ function getFetchUrlString(url) {
825
+ if (typeof url === "string") return url;
826
+ if (url instanceof URL) return url.toString();
827
+ if (url instanceof Request) return url.url;
828
+ }
766
829
  async function fetchWithProxy(url, options = {}, abortSignal) {
767
830
  let finalUrl = url;
768
- let finalUrlString;
769
- if (typeof url === "string") finalUrlString = url;
770
- else if (url instanceof URL) finalUrlString = url.toString();
771
- else if (url instanceof Request) finalUrlString = url.url;
831
+ let finalUrlString = getFetchUrlString(url);
772
832
  if (!finalUrlString) throw new Error("Invalid URL");
773
833
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
774
834
  const finalOptions = {
775
835
  ...options,
776
- headers: {
777
- ...options.headers,
778
- "x-promptfoo-version": require_version.VERSION
779
- },
836
+ headers: getFetchWithProxyHeaders(url, options),
780
837
  signal: combinedSignal
781
838
  };
782
839
  if (typeof url === "string") try {
@@ -814,10 +871,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
814
871
  require_logger.logger.debug(`Using proxy: ${require_logger.sanitizeUrl(proxyUrl)}`);
815
872
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
816
873
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
817
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
874
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
875
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
818
876
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
819
877
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
820
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
878
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
821
879
  const backoffMs = Math.pow(2, attempt) * 1e3;
822
880
  require_logger.logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
823
881
  await sleep(backoffMs);
@@ -890,8 +948,17 @@ function isTransientError(response) {
890
948
  default: return false;
891
949
  }
892
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
+ }
893
959
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
894
- maxRetries = Math.max(0, maxRetries ?? 4);
960
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
961
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
895
962
  let lastErrorMessage;
896
963
  const backoff = require_logger.getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
897
964
  for (let i = 0; i <= maxRetries; i++) {
@@ -903,21 +970,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
903
970
  }, timeout);
904
971
  if (require_logger.getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
905
972
  if (response && isRateLimited(response)) {
906
- require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
907
973
  lastErrorMessage = `Rate limited: ${response.status} ${response.statusText}`;
974
+ if (i >= maxRetries) {
975
+ require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, no retries remain.`);
976
+ break;
977
+ }
978
+ require_logger.logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
908
979
  await handleRateLimit(response);
909
980
  continue;
910
981
  }
911
982
  return response;
912
983
  } catch (error) {
913
984
  if (error instanceof Error && error.name === "AbortError") throw error;
914
- let errorMessage;
915
- if (error instanceof Error) {
916
- const typedError = error;
917
- errorMessage = `${typedError.name}: ${typedError.message}`;
918
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
919
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
920
- } else errorMessage = String(error);
985
+ const errorMessage = formatFetchErrorMessage(error);
921
986
  require_logger.logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
922
987
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
923
988
  lastErrorMessage = errorMessage;
@@ -1034,6 +1099,12 @@ Object.defineProperty(exports, "getDefaultShareViewBaseUrl", {
1034
1099
  return getDefaultShareViewBaseUrl;
1035
1100
  }
1036
1101
  });
1102
+ Object.defineProperty(exports, "getFetchWithProxyHeaders", {
1103
+ enumerable: true,
1104
+ get: function() {
1105
+ return getFetchWithProxyHeaders;
1106
+ }
1107
+ });
1037
1108
  Object.defineProperty(exports, "getShareApiBaseUrl", {
1038
1109
  enumerable: true,
1039
1110
  get: function() {
@@ -1058,6 +1129,12 @@ Object.defineProperty(exports, "isOpenAIToolChoice", {
1058
1129
  return isOpenAIToolChoice;
1059
1130
  }
1060
1131
  });
1132
+ Object.defineProperty(exports, "isPromptfooCloudApiHost", {
1133
+ enumerable: true,
1134
+ get: function() {
1135
+ return isPromptfooCloudApiHost;
1136
+ }
1137
+ });
1061
1138
  Object.defineProperty(exports, "isPromptfooSampleTarget", {
1062
1139
  enumerable: true,
1063
1140
  get: function() {
@@ -1124,6 +1201,12 @@ Object.defineProperty(exports, "transformTools", {
1124
1201
  return transformTools;
1125
1202
  }
1126
1203
  });
1204
+ Object.defineProperty(exports, "withFetchRetryContext", {
1205
+ enumerable: true,
1206
+ get: function() {
1207
+ return withFetchRetryContext;
1208
+ }
1209
+ });
1127
1210
  Object.defineProperty(exports, "writeGlobalConfig", {
1128
1211
  enumerable: true,
1129
1212
  get: function() {
@@ -1137,4 +1220,4 @@ Object.defineProperty(exports, "writeGlobalConfigPartial", {
1137
1220
  }
1138
1221
  });
1139
1222
 
1140
- //# sourceMappingURL=fetch-NuqXW1Xb.cjs.map
1223
+ //# sourceMappingURL=fetch-Cfm4EuOB.cjs.map
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
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-CbpiUINz.js";
3
+ import { n as VERSION } from "./version-F0YDgb7J.js";
4
4
  import { t as invariant } from "./invariant-B2Rf6avk.js";
5
- import { a as cloudConfig } from "./cloud-Da0bofJd.js";
5
+ import { a as cloudConfig, n as CLOUD_API_HOST } from "./cloud-DqF5N1aJ.js";
6
+ import { AsyncLocalStorage } from "node:async_hooks";
6
7
  import path from "path";
7
8
  import yaml from "js-yaml";
8
9
  import * as fsPromises from "fs/promises";
@@ -60,8 +61,8 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
60
61
  const model = models.find((m) => m.id === modelName);
61
62
  if (!model || !model.cost) return;
62
63
  const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
63
- const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
64
- const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
64
+ const inputCost = config.inputCost ?? config.cost ?? longContextCost?.input ?? model.cost.input;
65
+ const outputCost = config.outputCost ?? config.cost ?? longContextCost?.output ?? model.cost.output;
65
66
  return inputCost * promptTokens + outputCost * completionTokens;
66
67
  }
67
68
  /**
@@ -455,6 +456,14 @@ function isConnectionError(error) {
455
456
  /**
456
457
  * Enhanced fetch wrapper that adds logging, authentication, error handling, and optional compression
457
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
+ }
458
467
  async function monkeyPatchFetch(url, options) {
459
468
  const NO_LOG_URLS = [
460
469
  R_ENDPOINT,
@@ -474,7 +483,7 @@ async function monkeyPatchFetch(url, options) {
474
483
  } catch (e) {
475
484
  logger.warn(`Failed to compress request body: ${e}`);
476
485
  }
477
- 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)) {
478
487
  const token = cloudConfig.getApiKey();
479
488
  opts.headers = {
480
489
  ...opts.headers || {},
@@ -508,6 +517,25 @@ async function monkeyPatchFetch(url, options) {
508
517
  }
509
518
  }
510
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
511
539
  //#region src/util/fetch/index.ts
512
540
  const cachedAgents = /* @__PURE__ */ new Map();
513
541
  const cachedProxyAgents = /* @__PURE__ */ new Map();
@@ -569,20 +597,44 @@ function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
569
597
  cachedProxyAgents.set(cacheKey, agent);
570
598
  return agent;
571
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
+ }
572
630
  async function fetchWithProxy(url, options = {}, abortSignal) {
573
631
  let finalUrl = url;
574
- let finalUrlString;
575
- if (typeof url === "string") finalUrlString = url;
576
- else if (url instanceof URL) finalUrlString = url.toString();
577
- else if (url instanceof Request) finalUrlString = url.url;
632
+ let finalUrlString = getFetchUrlString(url);
578
633
  if (!finalUrlString) throw new Error("Invalid URL");
579
634
  const combinedSignal = abortSignal ? options.signal ? AbortSignal.any([options.signal, abortSignal]) : abortSignal : options.signal;
580
635
  const finalOptions = {
581
636
  ...options,
582
- headers: {
583
- ...options.headers,
584
- "x-promptfoo-version": VERSION
585
- },
637
+ headers: getFetchWithProxyHeaders(url, options),
586
638
  signal: combinedSignal
587
639
  };
588
640
  if (typeof url === "string") try {
@@ -620,10 +672,11 @@ async function fetchWithProxy(url, options = {}, abortSignal) {
620
672
  logger.debug(`Using proxy: ${sanitizeUrl(proxyUrl)}`);
621
673
  finalOptions.dispatcher = getOrCreateProxyAgent(proxyUrl, tlsOptions);
622
674
  } else finalOptions.dispatcher = getOrCreateAgent(tlsOptions);
623
- const maxTransientRetries = options.disableTransientRetries ? 0 : 3;
675
+ const disableTransientRetries = resolveTransientRetryDisabled(options.disableTransientRetries);
676
+ const maxTransientRetries = disableTransientRetries ? 0 : 3;
624
677
  for (let attempt = 0; attempt <= maxTransientRetries; attempt++) {
625
678
  const response = await monkeyPatchFetch(finalUrl, finalOptions);
626
- if (!options.disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
679
+ if (!disableTransientRetries && isTransientError(response) && attempt < maxTransientRetries) {
627
680
  const backoffMs = Math.pow(2, attempt) * 1e3;
628
681
  logger.debug(`Transient error (${response.status} ${response.statusText}), retry ${attempt + 1}/${maxTransientRetries} after ${backoffMs}ms`);
629
682
  await sleep(backoffMs);
@@ -696,8 +749,17 @@ function isTransientError(response) {
696
749
  default: return false;
697
750
  }
698
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
+ }
699
760
  async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
700
- maxRetries = Math.max(0, maxRetries ?? 4);
761
+ const contextMaxRetries = getFetchRetryContextMaxRetries();
762
+ maxRetries = Math.max(0, maxRetries ?? contextMaxRetries ?? 4);
701
763
  let lastErrorMessage;
702
764
  const backoff = getEnvInt("PROMPTFOO_REQUEST_BACKOFF_MS", 5e3);
703
765
  for (let i = 0; i <= maxRetries; i++) {
@@ -709,21 +771,19 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
709
771
  }, timeout);
710
772
  if (getEnvBool("PROMPTFOO_RETRY_5XX") && response.status >= 500 && response.status < 600) throw new Error(`Internal Server Error: ${response.status} ${response.statusText}`);
711
773
  if (response && isRateLimited(response)) {
712
- logger.debug(`Rate limited on URL ${url}: ${response.status} ${response.statusText}, attempt ${i + 1}/${maxRetries + 1}, waiting before retry...`);
713
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...`);
714
780
  await handleRateLimit(response);
715
781
  continue;
716
782
  }
717
783
  return response;
718
784
  } catch (error) {
719
785
  if (error instanceof Error && error.name === "AbortError") throw error;
720
- let errorMessage;
721
- if (error instanceof Error) {
722
- const typedError = error;
723
- errorMessage = `${typedError.name}: ${typedError.message}`;
724
- if (typedError.cause) errorMessage += ` (Cause: ${typedError.cause})`;
725
- if (typedError.code) errorMessage += ` (Code: ${typedError.code})`;
726
- } else errorMessage = String(error);
786
+ const errorMessage = formatFetchErrorMessage(error);
727
787
  logger.debug(`Request to ${url} failed (attempt #${i + 1}), retrying: ${errorMessage}`);
728
788
  if (i < maxRetries) await sleep(Math.pow(2, i) * (backoff + 1e3 * Math.random()));
729
789
  lastErrorMessage = errorMessage;
@@ -732,6 +792,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
732
792
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
733
793
  }
734
794
  //#endregion
735
- export { getDefaultPort as A, transformToolChoice as C, EVENTS_ENDPOINT as D, CONSENT_ENDPOINT as E, HUMAN_ASSERTION_TYPE as F, getShareApiBaseUrl as M, getShareViewBaseUrl as N, R_ENDPOINT as O, FILE_METADATA_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 };
736
796
 
737
- //# sourceMappingURL=fetch-B6ch2nU2.js.map
797
+ //# sourceMappingURL=fetch-Cpf1U1nO.js.map