promptfoo 0.121.2 → 0.121.4

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 (379) hide show
  1. package/README.md +2 -0
  2. package/dist/src/{ListApp-Du7YVwj5.js → ListApp-DQkFNqE9.js} +1 -1
  3. package/dist/src/{accounts-B0pgC1oV.js → accounts-DdJ2pHMI.js} +5 -5
  4. package/dist/src/{accounts-CiBLOnA7.js → accounts-DhMYUUbu.js} +5 -5
  5. package/dist/src/{accounts-gtkH-5KX.cjs → accounts-Dy17bs4D.cjs} +5 -5
  6. package/dist/src/{accounts-Bm2D8Db9.js → accounts-F9d_5sMC.js} +6 -6
  7. package/dist/src/{cometapi-C4xSqeID.cjs → agentic-utils-BpX5b23w.cjs} +24 -62
  8. package/dist/src/{cometapi-CUQq3H_a.js → agentic-utils-P172hM8B.js} +4 -61
  9. package/dist/src/agentic-utils-qFlm6zes.js +153 -0
  10. package/dist/src/{agentic-utils-DS1g3GLF.js → agentic-utils-w68v6_Dz.js} +3 -3
  11. package/dist/src/{agents-CmvBq8LV.js → agents-8FDnTriG.js} +6 -7
  12. package/dist/src/{agents-DbRtpYxR.cjs → agents-BahDpe5G.cjs} +255 -20
  13. package/dist/src/{agents-DgF2zDag.js → agents-C-R_jfzI.js} +255 -20
  14. package/dist/src/{agents-9qiOy0ho.js → agents-CgaMXvLM.js} +5 -7
  15. package/dist/src/{agents-Di9DKPzn.cjs → agents-D7-HGxUj.cjs} +5 -7
  16. package/dist/src/{agents-CBr9A01V.js → agents-DJ35I3Nt.js} +255 -20
  17. package/dist/src/{agents-cLXA8a_8.js → agents-aYPQLf8W.js} +5 -9
  18. package/dist/src/{agents-D__IdAlg.js → agents-pQeBEXMm.js} +255 -21
  19. package/dist/src/{aimlapi-B4rcnZgv.js → aimlapi-BCq3MHeL.js} +8 -14
  20. package/dist/src/{aimlapi-DHJU_kcV.js → aimlapi-BD6J9oKt.js} +7 -14
  21. package/dist/src/{aimlapi-BvlNH0gr.cjs → aimlapi-qcK4OT55.cjs} +8 -15
  22. package/dist/src/{aimlapi-CnkC2HqE.js → aimlapi-sgYnkE54.js} +7 -16
  23. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -0
  24. package/dist/src/app/assets/Report-CQYFezYu.js +1 -0
  25. package/dist/src/app/assets/index-BXGkeMwh.css +1 -0
  26. package/dist/src/app/assets/index-BzJt18Jz.js +385 -0
  27. package/dist/src/app/assets/rolldown-runtime-COnpUsM8.js +1 -0
  28. package/dist/src/app/assets/scroll-timeline-D9IT_e8Z.js +1 -0
  29. package/dist/src/app/assets/sync-IjzpWrOE.js +4 -0
  30. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +36 -0
  31. package/dist/src/app/assets/vendor-markdown-Ch00wnNI.js +29 -0
  32. package/dist/src/app/assets/vendor-react-CVvmk1UB.js +9 -0
  33. package/dist/src/app/assets/vendor-utils-BnEYbx2Q.js +37 -0
  34. package/dist/src/app/index.html +7 -7
  35. package/dist/src/{audio-Dz3z7s3J.js → audio-B7izf48x.js} +4 -5
  36. package/dist/src/{audio-CGMyULza.cjs → audio-BQtNuYBj.cjs} +4 -4
  37. package/dist/src/{audio-Bkv46et0.js → audio-COrn8rM6.js} +4 -4
  38. package/dist/src/{audio-ClI_AFre.js → audio-DcVKoInv.js} +4 -4
  39. package/dist/src/{base-CGrhspbK.cjs → base-D-670DX8.cjs} +3 -3
  40. package/dist/src/{base-CpjcHe4e.js → base-PYJvBE1i.js} +3 -3
  41. package/dist/src/{base-Dy1V8--Z.js → base-fZ9wgg50.js} +3 -3
  42. package/dist/src/{base-DLKtKMFh.js → base-yrI1Yal4.js} +3 -3
  43. package/dist/src/{blobs-BDbfYdrJ.js → blobs-BCZavS8s.js} +4 -4
  44. package/dist/src/{blobs-CMHN0Qcz.js → blobs-BQWqnnvL.js} +4 -4
  45. package/dist/src/{blobs-CBO20krR.js → blobs-C-F78Kfn.js} +3 -3
  46. package/dist/src/{blobs-D23XLin-.cjs → blobs-D2FAd1Q5.cjs} +3 -3
  47. package/dist/src/cache-BIyPcp5v.cjs +376 -0
  48. package/dist/src/cache-C4Xb-hNb.js +310 -0
  49. package/dist/src/cache-Cr9oLMUa.js +3 -0
  50. package/dist/src/cache-D5NZmMiT.js +310 -0
  51. package/dist/src/cache-DbLsVWB2.cjs +3 -0
  52. package/dist/src/cache-mb7c8hbp.js +280 -0
  53. package/dist/src/{chat-C2jrdPMx.js → chat-0bwXjVP0.js} +3 -13
  54. package/dist/src/{chat-C1Qst7jL.cjs → chat-BPXSW8Bv.cjs} +3 -13
  55. package/dist/src/{chat-DJIw17u0.js → chat-BfPaS15_.js} +68 -42
  56. package/dist/src/{chat-CgF-J-Jj.cjs → chat-CclRbxGf.cjs} +68 -42
  57. package/dist/src/{chat-BiKyneZl.js → chat-Dr3DUQ0D.js} +68 -42
  58. package/dist/src/{chat-DqxYYtWA.js → chat-I9izLm49.js} +67 -41
  59. package/dist/src/{chat-CzkrVDfz.js → chat-MKxMnZJZ.js} +3 -13
  60. package/dist/src/{chat-qmatte1u.js → chat-mW0ORo8G.js} +3 -14
  61. package/dist/src/{chatkit-DKyPi1Gs.cjs → chatkit-BoWoSgXl.cjs} +4 -4
  62. package/dist/src/{chatkit-65VXf5SR.js → chatkit-CJnHRRMM.js} +4 -4
  63. package/dist/src/{chatkit-Be-Q-a9F.js → chatkit-Cv6AhukM.js} +4 -4
  64. package/dist/src/{chatkit-BxFvW8KY.js → chatkit-zUIVoDos.js} +4 -4
  65. package/dist/src/{claude-agent-sdk-Apiy0iaz.js → claude-agent-sdk-BQNuLaAK.js} +41 -18
  66. package/dist/src/{claude-agent-sdk-D9Z5Pr9X.cjs → claude-agent-sdk-CPJo3dBQ.cjs} +45 -22
  67. package/dist/src/{claude-agent-sdk-D2bJee9S.js → claude-agent-sdk-Dtq_L-Sc.js} +40 -17
  68. package/dist/src/{claude-agent-sdk-DfCoW0E6.js → claude-agent-sdk-nfAIcxNf.js} +42 -20
  69. package/dist/src/{cloud-C0dlstV_.js → cloud-DQZ5sVjW.js} +25 -13
  70. package/dist/src/cloud-Hphvo8kr.js +3 -0
  71. package/dist/src/{cloudflare-ai-8TDxHR0x.js → cloudflare-ai-BIB567w6.js} +5 -14
  72. package/dist/src/{cloudflare-ai-g7PB6VHR.js → cloudflare-ai-DGLte7Py.js} +5 -14
  73. package/dist/src/{cloudflare-ai-CknbZ5LJ.cjs → cloudflare-ai-Dl3N9OVD.cjs} +6 -15
  74. package/dist/src/{cloudflare-ai-BxAGvfju.js → cloudflare-ai-DlKr0rY7.js} +5 -15
  75. package/dist/src/{cloudflare-gateway-B9HWA5wf.js → cloudflare-gateway-BDZrYydE.js} +4 -16
  76. package/dist/src/{cloudflare-gateway-BSnDmHYo.cjs → cloudflare-gateway-BYDp495F.cjs} +4 -15
  77. package/dist/src/{cloudflare-gateway-CKDb4dJ8.js → cloudflare-gateway-CiIZHU0Q.js} +5 -164
  78. package/dist/src/{cloudflare-gateway-CP9QEWYS.js → cloudflare-gateway-DI1HNP5F.js} +4 -15
  79. package/dist/src/codex-sdk-BAmYE7qy.js +3 -0
  80. package/dist/src/codex-sdk-C2_M2pl_.cjs +1172 -0
  81. package/dist/src/codex-sdk-CErXn7qh.js +1165 -0
  82. package/dist/src/codex-sdk-CWEnH70W.cjs +2 -0
  83. package/dist/src/codex-sdk-CpqiOqDO.js +1164 -0
  84. package/dist/src/codex-sdk-Rtky3M4I.js +1165 -0
  85. package/dist/src/{cometapi-BL9yvj_f.js → cometapi-BUlt_ELa.js} +8 -15
  86. package/dist/src/{cometapi-DFNiKmSz.js → cometapi-CtJ-mS8R.js} +8 -16
  87. package/dist/src/cometapi-DT-jlVCB.js +55 -0
  88. package/dist/src/cometapi-UVOryo4W.cjs +55 -0
  89. package/dist/src/{completion-CM6oK8PS.cjs → completion-BozdoXba.cjs} +7 -62
  90. package/dist/src/{completion-5MzrpJxT.js → completion-Dnxn7E-j.js} +8 -57
  91. package/dist/src/{completion-qRoZAYRB.js → completion-HUe8wDhZ.js} +8 -57
  92. package/dist/src/{completion-DZ083F31.js → completion-x0a_c2y1.js} +8 -57
  93. package/dist/src/{createHash-CTQmL3G2.js → createHash-4gFQpDDv.js} +3 -3
  94. package/dist/src/{createHash-CfZSc0b4.cjs → createHash-B7KvgoOD.cjs} +4 -4
  95. package/dist/src/{createHash-Da8fMwqB.js → createHash-ChI45QR1.js} +3 -3
  96. package/dist/src/{createHash-DmPQkvBh.js → createHash-CwDVU5xr.js} +3 -3
  97. package/dist/src/{docker-ExVyLp0S.js → docker-CQmlA2NU.js} +7 -14
  98. package/dist/src/{docker-Bb5dcxr8.js → docker-ClnmCf1Z.js} +6 -14
  99. package/dist/src/{docker-BvfL2BrW.js → docker-DCgsveLD.js} +6 -16
  100. package/dist/src/{docker-DcF2pRrj.cjs → docker-DS4_Osau.cjs} +7 -15
  101. package/dist/src/embedding-D3xTseo7.js +59 -0
  102. package/dist/src/embedding-DD9wa3ae.js +58 -0
  103. package/dist/src/embedding-I45KG3o7.cjs +63 -0
  104. package/dist/src/embedding-nFbumxcv.js +58 -0
  105. package/dist/src/entrypoint.js +69 -6
  106. package/dist/src/{errors-P6ll7XSJ.js → errors-Cw810C93.js} +1 -1
  107. package/dist/src/{esm-CaIwzWR5.js → esm-C7PnfdF8.js} +16 -7
  108. package/dist/src/{esm-CnNt7sI4.cjs → esm-CtEPLdAj.cjs} +15 -6
  109. package/dist/src/{esm-Cd1AjG1D.js → esm-Dh4dOLlt.js} +15 -6
  110. package/dist/src/{esm-C03C-mv3.js → esm-tVgYPY-f.js} +27 -18
  111. package/dist/src/eval-CzJFfFO9.js +3 -0
  112. package/dist/src/{eval-Dg2nG4v2.js → eval-u4UVafl6.js} +49 -20
  113. package/dist/src/{evalResult-BDMqrapS.js → evalResult-Bgm9ZH31.js} +7 -7
  114. package/dist/src/{evalResult-BBRNtX4I.js → evalResult-D3hVYFis.js} +7 -7
  115. package/dist/src/evalResult-D8MT9p0s.js +3 -0
  116. package/dist/src/evalResult-DElBuddX.js +2 -0
  117. package/dist/src/evalResult-Dvc-iucu.cjs +2 -0
  118. package/dist/src/{evalResult-fuaI8HkH.cjs → evalResult-KZqXl4XP.cjs} +7 -7
  119. package/dist/src/evaluator-CVessDWe.js +3 -0
  120. package/dist/src/{evaluator-BhoWwp5b.js → evaluator-IvuDYSvQ.js} +3080 -1254
  121. package/dist/src/{extractor-D25qpmGX.js → extractor-CAfTSraf.js} +6 -6
  122. package/dist/src/{extractor-DReVID0K.js → extractor-DNSeBVOJ.js} +6 -6
  123. package/dist/src/{extractor-C0EVHewb.js → extractor-Dk6bRWkv.js} +6 -6
  124. package/dist/src/{extractor-pYLLi3wS.cjs → extractor-WVPOrH43.cjs} +6 -6
  125. package/dist/src/{fetch-HaqdX7U1.js → fetch-B0Z3Oe4k.js} +218 -55
  126. package/dist/src/{fetch-Dxpd4_sr.js → fetch-BEWnXrrG.js} +195 -45
  127. package/dist/src/fetch-C7bGKDlQ.js +3 -0
  128. package/dist/src/{fetch-BPkYtG8K.cjs → fetch-CJU5ELPa.cjs} +223 -48
  129. package/dist/src/{fetch-Cwxnd8zz.js → fetch-Di00EQrc.js} +218 -55
  130. package/dist/src/{fileExtensions-Ds-foDzt.js → fileExtensions-AWa2ZML4.js} +1 -1
  131. package/dist/src/{fileExtensions-LcDYkU4v.js → fileExtensions-BArZuxsI.js} +1 -1
  132. package/dist/src/{formatDuration-DgBVMN65.js → formatDuration-DZzPsexs.js} +1 -1
  133. package/dist/src/{genaiTracer-D3fD9dNV.js → genaiTracer-COYDi-tC.js} +6 -2
  134. package/dist/src/{genaiTracer-C1rxGO8Q.js → genaiTracer-DWdZ28hY.js} +6 -2
  135. package/dist/src/{genaiTracer-70Z8BIuV.js → genaiTracer-XnrcgDCe.js} +6 -2
  136. package/dist/src/{genaiTracer-DN4dQywX.cjs → genaiTracer-yRuxj9-L.cjs} +7 -3
  137. package/dist/src/golang/wrapper.go +1 -1
  138. package/dist/src/{graders-DU49_J8Y.cjs → graders--zknU_uk.cjs} +5747 -3206
  139. package/dist/src/graders-BOAzQEUe.cjs +2 -0
  140. package/dist/src/graders-D4BTsZdG2.js +3 -0
  141. package/dist/src/graders-DOJK1XpV.js +2 -0
  142. package/dist/src/graders-NAv9LcBn.js +2 -0
  143. package/dist/src/{graders-BTeBGqjJ.js → graders-Zy3x0zqX.js} +5727 -3218
  144. package/dist/src/{graders-Bj_Odv7c.js → graders-eIHhRqoC.js} +5719 -3210
  145. package/dist/src/{graders-DP7KFFo-.js → graders-pvbReLLn.js} +5728 -3219
  146. package/dist/src/{image-B0h9VEMc.js → image-9302QVqR.js} +4 -4
  147. package/dist/src/{image-CHfWvljl.js → image-B5Mv-Z3h.js} +8 -8
  148. package/dist/src/{image-DS-o-0ph.js → image-DVz2RiMF.js} +8 -8
  149. package/dist/src/{image-C1madmKh.cjs → image-De2FBmYV.cjs} +4 -4
  150. package/dist/src/{image-B02ogr_b.js → image-dnoUgPrC.js} +4 -5
  151. package/dist/src/{image-Dpxa1Jt6.js → image-qUpPvmNZ.js} +8 -8
  152. package/dist/src/{image-Bb4vWQLM.js → image-u7-rKnYU.js} +4 -4
  153. package/dist/src/{image-BLmROtN3.cjs → image-x6KqLQl4.cjs} +8 -8
  154. package/dist/src/index.cjs +3728 -1482
  155. package/dist/src/index.d.cts +3232 -79
  156. package/dist/src/index.d.ts +3232 -79
  157. package/dist/src/index.js +3735 -1490
  158. package/dist/src/{interactiveCheck-BgLZUIt3.js → interactiveCheck-CLERUB0c.js} +2 -2
  159. package/dist/src/{knowledgeBase-DOO_BM9b.cjs → knowledgeBase-Bpoe_nLu.cjs} +6 -8
  160. package/dist/src/{knowledgeBase-D33Ty2l6.js → knowledgeBase-Dgc7CBWF.js} +6 -8
  161. package/dist/src/{knowledgeBase-B3OoKIej.js → knowledgeBase-RhFPGWDc.js} +6 -8
  162. package/dist/src/{knowledgeBase-CYTLHOt1.js → knowledgeBase-lm9RXSAm.js} +6 -9
  163. package/dist/src/{litellm-NbjknEh6.js → litellm-C2kqjxqp.js} +6 -14
  164. package/dist/src/{litellm-I_hbp_dc.cjs → litellm-CoyI4IAl.cjs} +6 -15
  165. package/dist/src/{litellm-TrljxD9G.js → litellm-DRjpcSa7.js} +5 -14
  166. package/dist/src/{litellm-AaeZcZQF.js → litellm-p37R1dzQ.js} +5 -16
  167. package/dist/src/{logger-DLcq4dWf.js → logger-B88EkIn6.js} +48 -23
  168. package/dist/src/{logger-Cp1GPUjj.cjs → logger-COuQb2xB.cjs} +77 -22
  169. package/dist/src/{logger-CT3IKMKA.js → logger-Ct2S6Yx-.js} +48 -23
  170. package/dist/src/{logger-KkObSCzq.js → logger-DksKw1Qc.js} +48 -23
  171. package/dist/src/{luma-ray-f6I2fft-.js → luma-ray-B863CmuZ.js} +6 -10
  172. package/dist/src/{luma-ray-DDsjcgZZ.js → luma-ray-BTTLtqQ8.js} +7 -10
  173. package/dist/src/{luma-ray-Due0n7di.cjs → luma-ray-BxVKaW2a.cjs} +6 -10
  174. package/dist/src/{luma-ray-BS2_tY8L.js → luma-ray-KgTCXrZC.js} +6 -12
  175. package/dist/src/main.d.ts +1 -26
  176. package/dist/src/main.js +1011 -548
  177. package/dist/src/{messages-Bs1kC7P4.cjs → messages-811uVVW5.cjs} +74 -19
  178. package/dist/src/{messages-BS17jdMx.js → messages-BTQz42fn.js} +74 -19
  179. package/dist/src/{messages-ZJk778GH.js → messages-MYTQ2TWp.js} +74 -19
  180. package/dist/src/{messages-D0lx5qK7.js → messages-zWbkLLHz.js} +74 -19
  181. package/dist/src/{meteor-D-SotUw9.js → meteor-CU5UAE-H.js} +1 -1
  182. package/dist/src/{meteor-DLZZ3osF.cjs → meteor-Co1VQ1u5.cjs} +1 -1
  183. package/dist/src/{meteor-44VjEACX.js → meteor-DHdzY1Ss.js} +1 -1
  184. package/dist/src/{meteor-DUiCJRC-.js → meteor-DuAFv6gF.js} +1 -1
  185. package/dist/src/{modelslab-Bmni6skY.js → modelslab-D0erNWKe.js} +7 -10
  186. package/dist/src/{modelslab-DRb74SP4.js → modelslab-DIq-6y7x.js} +7 -10
  187. package/dist/src/{modelslab-CoUX6Jc_.cjs → modelslab-Dk1JAtVo.cjs} +7 -10
  188. package/dist/src/{modelslab-Bx9IrZfS.js → modelslab-wu9yi5GE.js} +7 -11
  189. package/dist/src/{nova-reel-BfPq-0Yk.js → nova-reel-CCFRfeRb.js} +7 -10
  190. package/dist/src/{nova-reel-C_QM18Xn.cjs → nova-reel-CrLXVKQf.cjs} +6 -10
  191. package/dist/src/{nova-reel-bgjxilYW.js → nova-reel-DQrm74ng.js} +6 -10
  192. package/dist/src/{nova-reel-D_W1tjMH.js → nova-reel-gr11WG7f.js} +6 -12
  193. package/dist/src/{nova-sonic-DIGQNR07.js → nova-sonic-BYdp-QLs.js} +5 -7
  194. package/dist/src/{nova-sonic-CFb5GYhg.js → nova-sonic-B_ZXcUJB.js} +4 -7
  195. package/dist/src/{nova-sonic-De1HW5fD.js → nova-sonic-TDgrlTk7.js} +4 -9
  196. package/dist/src/{nova-sonic-zfcljeRp.cjs → nova-sonic-i5tUvXKn.cjs} +4 -7
  197. package/dist/src/{openai-DElQ-fPX.js → openai-DhVEmgeZ.js} +6 -3
  198. package/dist/src/{openai-DhbB7eWK.js → openai-Qsvz25mV.js} +6 -3
  199. package/dist/src/{openai-Cuif0GEt.cjs → openai-URNyItar.cjs} +6 -3
  200. package/dist/src/{openai-j-sE2O7r.js → openai-iYtrXzOX.js} +6 -3
  201. package/dist/src/openclaw-CLWrW03k.js +1200 -0
  202. package/dist/src/openclaw-CnQ363Wi.js +1199 -0
  203. package/dist/src/openclaw-CwzlQSQX.js +1199 -0
  204. package/dist/src/openclaw-wX9rtfke.cjs +1205 -0
  205. package/dist/src/{opencode-sdk-B3CWY9h_.js → opencode-sdk-BUu5Nevv.js} +12 -14
  206. package/dist/src/{opencode-sdk-BL764Jdi.cjs → opencode-sdk-BZ2idgYA.cjs} +16 -18
  207. package/dist/src/{opencode-sdk-0j6rTWNb.js → opencode-sdk-BxD8vXp_.js} +12 -15
  208. package/dist/src/{opencode-sdk-C2y6UkP2.js → opencode-sdk-GI2KaAXq.js} +12 -14
  209. package/dist/src/{otlpReceiver-C99PPb48.js → otlpReceiver-B2z58l4e.js} +154 -98
  210. package/dist/src/{otlpReceiver-CGq6LspY.cjs → otlpReceiver-BfcVq2Nq.cjs} +154 -98
  211. package/dist/src/{otlpReceiver-D89fR-rC.js → otlpReceiver-BntK801g.js} +154 -98
  212. package/dist/src/{otlpReceiver-CdNBdbsk.js → otlpReceiver-DmVulbhC.js} +154 -98
  213. package/dist/src/{providerRegistry-CD8MEar9.js → providerRegistry-Bvh8mv85.js} +2 -2
  214. package/dist/src/{providerRegistry-DM8rZYol.js → providerRegistry-CPQ_CmVO.js} +2 -2
  215. package/dist/src/{providerRegistry-Civky8Ar.cjs → providerRegistry-CQMdTmHP.cjs} +2 -2
  216. package/dist/src/{providerRegistry-B0RUOLI_.js → providerRegistry-CWoPjKFZ.js} +2 -2
  217. package/dist/src/{providers-CgKOSgTR.cjs → providers-1eKkXBKp.cjs} +1435 -930
  218. package/dist/src/{providers-BlqUifFg.js → providers-BV_KMZje.js} +1419 -944
  219. package/dist/src/providers-Bp4S-FvO.js +2 -0
  220. package/dist/src/providers-DV3ax9e_.cjs +3 -0
  221. package/dist/src/{providers-D8lF1sqW.js → providers-Domz_llv.js} +1427 -952
  222. package/dist/src/{providers-Dk_6ocUX.js → providers-DruaQfwu.js} +1424 -949
  223. package/dist/src/providers-iUt5fbAN.js +3 -0
  224. package/dist/src/providers-u9Enmfok.js +2 -0
  225. package/dist/src/python/persistent_wrapper.py +0 -5
  226. package/dist/src/{pythonUtils-D6fwaDSg.js → pythonUtils-C2UQ30Rz.js} +4 -4
  227. package/dist/src/{pythonUtils-D5nxkQ0P.js → pythonUtils-Cldx7huE.js} +4 -4
  228. package/dist/src/{pythonUtils-C3py6GC1.js → pythonUtils-CnndUbW-.js} +3 -3
  229. package/dist/src/{pythonUtils-CTU3Y3lw.cjs → pythonUtils-tAJvvpS-.cjs} +3 -3
  230. package/dist/src/{quiverai-CIaELU_m.js → quiverai-CtWi6x_g.js} +4 -4
  231. package/dist/src/{quiverai-PdShCPox.cjs → quiverai-DFotyafY.cjs} +4 -4
  232. package/dist/src/{quiverai-BbOUOn2L.js → quiverai-DR0SnIQV.js} +4 -4
  233. package/dist/src/{quiverai-uH-dcTIr.js → quiverai-aPPvXOgn.js} +4 -5
  234. package/dist/src/render-CH-62LbA.js +135 -0
  235. package/dist/src/render-CMEpfLaO.js +136 -0
  236. package/dist/src/{render-Drod8m7K.js → render-CgVDrJmM.js} +2 -3
  237. package/dist/src/render-DHIZ6_k8.js +135 -0
  238. package/dist/src/render-DfQSFxGE.cjs +165 -0
  239. package/dist/src/{responses-DIR9Ud3j.js → responses--OsX2aYW.js} +23 -14
  240. package/dist/src/{responses-D8SBTL64.cjs → responses-Bi9vBuW_.cjs} +24 -15
  241. package/dist/src/{responses-CB2jwoAr.js → responses-C-flexAY.js} +24 -15
  242. package/dist/src/{responses-WNGNYe3K.js → responses-DL9m8CyY.js} +24 -15
  243. package/dist/src/{rubyUtils-DhCAlxZr.cjs → rubyUtils-B6eljPuh.cjs} +3 -3
  244. package/dist/src/{rubyUtils-BcuGX77l.js → rubyUtils-CYSQEG4a.js} +3 -3
  245. package/dist/src/rubyUtils-D1L2d3jb.js +3 -0
  246. package/dist/src/rubyUtils-DUbq4tff.cjs +2 -0
  247. package/dist/src/{rubyUtils-BUVePouc.js → rubyUtils-DVLeA2jg.js} +3 -3
  248. package/dist/src/{rubyUtils-Boc4HZzX.js → rubyUtils-DsGrTx8R.js} +3 -3
  249. package/dist/src/{sagemaker-CNBxx5CJ.js → sagemaker-BVkaG2-l.js} +14 -18
  250. package/dist/src/{sagemaker-CemTFp2h.js → sagemaker-BveBvuxm.js} +14 -18
  251. package/dist/src/{sagemaker-YSyBXQQh.js → sagemaker-D67yzMzs.js} +14 -19
  252. package/dist/src/{sagemaker-Cl28mZU2.cjs → sagemaker-XnfhheQv.cjs} +14 -18
  253. package/dist/src/{scanner-BsBlNXNn.js → scanner-1DqWi1Ej.js} +130 -35
  254. package/dist/src/server/golang/wrapper.go +1 -1
  255. package/dist/src/server/index.js +3757 -1511
  256. package/dist/src/server/python/persistent_wrapper.py +0 -5
  257. package/dist/src/{server-CqzrVGpF.js → server-BNYztJkh.js} +128 -9
  258. package/dist/src/{server-CuxBbeSY.js → server-BSB45Nt9.js} +127 -8
  259. package/dist/src/{server-VWgWb00X.js → server-D6Il2Sob.js} +126 -7
  260. package/dist/src/server-DCtHUqlp.js +3 -0
  261. package/dist/src/server-DaA2eR26.cjs +2 -0
  262. package/dist/src/{server-C_7Ax-hA.cjs → server-Dx2TyCH2.cjs} +140 -6
  263. package/dist/src/{signal-4U3mfRvL.js → signal-CE5G3a7x.js} +3 -3
  264. package/dist/src/{slack-BmVAVGaK.cjs → slack-1Rhq0EoV.cjs} +2 -2
  265. package/dist/src/{slack-DCUPTzS2.js → slack-D5Wpy8LM.js} +2 -2
  266. package/dist/src/{slack-DXMKtA-f.js → slack-DDUe-5MC.js} +2 -2
  267. package/dist/src/{slack-DOdy_kyv.js → slack-acRb0IqQ.js} +2 -2
  268. package/dist/src/store-CWOSz6D_.cjs +2 -0
  269. package/dist/src/{store-Dim__MDd.js → store-CYEy5J2D.js} +17 -5
  270. package/dist/src/{store-DLlFCC4h.cjs → store-DAAyxcy6.cjs} +17 -5
  271. package/dist/src/store-DCDBhv7B.js +3 -0
  272. package/dist/src/{store-CXGFv4aR.js → store-Dn9HUkdW.js} +17 -5
  273. package/dist/src/{store-DXilxTl-.js → store-M0b1WfYb.js} +17 -5
  274. package/dist/src/{tables-gftXzE9I.js → tables-C4CH3zRr.js} +3 -3
  275. package/dist/src/{tables-DLJPUdUE.js → tables-CsWou1Bx.js} +3 -3
  276. package/dist/src/{tables-6YKwjN9-.js → tables-DQ4WU5tX.js} +3 -3
  277. package/dist/src/{tables-DPi7wKeM.cjs → tables-DUfh1F7Z.cjs} +3 -3
  278. package/dist/src/telemetry-C1IqxcdW.js +3 -0
  279. package/dist/src/telemetry-C4ZEa_es.cjs +2 -0
  280. package/dist/src/{telemetry-CMrFgtPB.js → telemetry-CQPez_Jp.js} +4 -4
  281. package/dist/src/{telemetry-DaX14Chu.cjs → telemetry-Dsw_faFj.cjs} +4 -4
  282. package/dist/src/{telemetry-Dthj_BbD.js → telemetry-Dvqxv3YC.js} +4 -4
  283. package/dist/src/{telemetry-Cps3mIU-.js → telemetry-dbaJ0E98.js} +4 -4
  284. package/dist/src/{text-CW1cyrwj.cjs → text-BVi-cLPJ.cjs} +1 -1
  285. package/dist/src/{text-B_UCRPp2.js → text-CZr46tp_.js} +1 -1
  286. package/dist/src/{text-TIv0QYnd.js → text-DHxdyQqT.js} +1 -1
  287. package/dist/src/{text-Db-Wt2u2.js → text-KvuD2Iko.js} +1 -1
  288. package/dist/src/{tokenUsageUtils-bVa1ga6f.cjs → tokenUsageUtils-Bb7DkZPz.cjs} +7 -3
  289. package/dist/src/{tokenUsageUtils-NYT-WKS6.js → tokenUsageUtils-C-bmyHoE.js} +7 -3
  290. package/dist/src/{tokenUsageUtils-DflFMjS0.js → tokenUsageUtils-CXrvO-wA.js} +7 -3
  291. package/dist/src/{transcription-NLVG9MT1.cjs → transcription-BvjmiYB1.cjs} +12 -16
  292. package/dist/src/{transcription-BNYURcXg.js → transcription-CJspiD2c.js} +11 -14
  293. package/dist/src/{transcription-B_OdaHp7.js → transcription-DuWDupG7.js} +10 -14
  294. package/dist/src/{transcription-s6A-bNrZ.js → transcription-V2HaAmy2.js} +10 -16
  295. package/dist/src/{transform-DECvGmzp.js → transform-Bbg6A8Jk.js} +4 -4
  296. package/dist/src/{transform-vNucnNr0.js → transform-CG0ehZNG.js} +11 -7
  297. package/dist/src/{transform-DuHvhZpj.cjs → transform-CTeuTR3S.cjs} +31 -9
  298. package/dist/src/{transform-CzK1Q0zl.cjs → transform-CUnzlsbn.cjs} +4 -4
  299. package/dist/src/{transform-aa6tmVpZ.js → transform-DYX1_Xnh.js} +5 -5
  300. package/dist/src/transform-DgKlRr73.cjs +2 -0
  301. package/dist/src/transform-M6ITAESf.js +3 -0
  302. package/dist/src/{transform-DilY9wbS.js → transform-UN5UGu8U.js} +5 -5
  303. package/dist/src/{transform-uAytVuyX.js → transform-lQrDE1BQ.js} +11 -7
  304. package/dist/src/{transform-D5HsjduX.js → transform-zDhMmzwX.js} +11 -7
  305. package/dist/src/{transformersAvailability-CEVM2GNQ.js → transformersAvailability-CcHusyhw.js} +1 -1
  306. package/dist/src/{transformersAvailability-CwayUSlh.cjs → transformersAvailability-Cju9mHgR.cjs} +1 -1
  307. package/dist/src/{transformersAvailability-D6c6ROpT.js → transformersAvailability-DLlROWhg.js} +1 -1
  308. package/dist/src/{types-DmyIJ-sR.js → types-BGQDAP8i.js} +357 -22
  309. package/dist/src/{types-CzW2QFyi.js → types-Bgh5SOn6.js} +358 -24
  310. package/dist/src/{types-C_7nyzr1.cjs → types-CeaeaZdP.cjs} +393 -22
  311. package/dist/src/{types-Cbd8uOMq.js → types-Dm9JM6Vb.js} +368 -23
  312. package/dist/src/{util-BHGHw5G1.js → util-BYvQUPp7.js} +138 -36
  313. package/dist/src/{util-B9vlHIIh.cjs → util-Bxn8emtE.cjs} +15 -168
  314. package/dist/src/{util-ZzmqNPlg.js → util-C8e5uydV.js} +19 -142
  315. package/dist/src/{util-CMy69ZgQ.js → util-C9J8ahRn.js} +18 -4
  316. package/dist/src/{util-BzMcevZc.cjs → util-CN3SrLT4.cjs} +18 -4
  317. package/dist/src/{util-BV4XUC0n.js → util-D3q0WQ-0.js} +18 -4
  318. package/dist/src/{util-Dnmk2mBQ.js → util-D9TisOyk.js} +18 -4
  319. package/dist/src/{util-B3xGByQh.js → util-DDs-7g6-.js} +138 -36
  320. package/dist/src/{util-Bv6uGDfH.js → util-DvU2Pw8c.js} +138 -36
  321. package/dist/src/{util-C1CeHl-P.js → util-DxWpWjhc.js} +13 -136
  322. package/dist/src/{util-BRYkYPTd.js → util-oGMLA7vc.js} +17 -140
  323. package/dist/src/{util-DGNOS1db.cjs → util-olYL5C6N.cjs} +143 -35
  324. package/dist/src/{utils-Cz9qXqII.cjs → utils-B05gLxER.cjs} +6 -4
  325. package/dist/src/{utils-f2-Moju7.js → utils-BLJKfv0y.js} +6 -4
  326. package/dist/src/{utils-dLokC-eR.js → utils-DJfvjyMj.js} +6 -4
  327. package/dist/src/{utils-XiOAgly5.js → utils-hXtCYanr.js} +6 -4
  328. package/dist/tsconfig.tsbuildinfo +1 -1
  329. package/package.json +66 -57
  330. package/dist/src/app/assets/index-4LKxG2CG.js +0 -439
  331. package/dist/src/app/assets/index-C3zcsZFQ.css +0 -1
  332. package/dist/src/app/assets/scroll-timeline-BdJZVXlz.js +0 -1
  333. package/dist/src/app/assets/sync-9qqYcY-B.js +0 -4
  334. package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +0 -36
  335. package/dist/src/app/assets/vendor-markdown-0tekx3KX.js +0 -29
  336. package/dist/src/app/assets/vendor-react-AtKqiNEf.js +0 -4
  337. package/dist/src/app/assets/vendor-syntax-D06x6TQF.js +0 -2
  338. package/dist/src/app/assets/vendor-utils-BvMHZmO7.js +0 -37
  339. package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
  340. package/dist/src/cache-BVeDlD87.js +0 -726
  341. package/dist/src/cache-C4Nxf52C.js +0 -756
  342. package/dist/src/cache-CeUpFm3M.cjs +0 -5
  343. package/dist/src/cache-Dh5WtQps.cjs +0 -816
  344. package/dist/src/cache-i1P6crbO.js +0 -756
  345. package/dist/src/cache-n-RCJ-hL.js +0 -6
  346. package/dist/src/cloud-BBh91EUK.js +0 -4
  347. package/dist/src/codex-sdk-C6UMlxwV.js +0 -665
  348. package/dist/src/codex-sdk-DUwKWezN.js +0 -665
  349. package/dist/src/codex-sdk-GGAw0qbD.js +0 -666
  350. package/dist/src/codex-sdk-fAO0c3yA.cjs +0 -669
  351. package/dist/src/eval-B3r2CVXr.js +0 -15
  352. package/dist/src/evalResult-5xwYnECe.js +0 -12
  353. package/dist/src/evalResult-71lY93Kj.cjs +0 -10
  354. package/dist/src/evalResult-Dx5P5cIv.js +0 -10
  355. package/dist/src/evaluator-Jx6bRZV6.js +0 -36
  356. package/dist/src/fetch-BxNb_Lp3.js +0 -5
  357. package/dist/src/graders-B_pgMLS2.js +0 -34
  358. package/dist/src/graders-DErokPDO.cjs +0 -32
  359. package/dist/src/graders-DR_uNe54.js +0 -32
  360. package/dist/src/graders-w3176Wz-.js +0 -32
  361. package/dist/src/openclaw-CSugPYAr.cjs +0 -586
  362. package/dist/src/openclaw-DiSz3I5L.js +0 -582
  363. package/dist/src/openclaw-DuvJKEW5.js +0 -580
  364. package/dist/src/openclaw-tiVYRtr-.js +0 -580
  365. package/dist/src/providers-B7V0njNs.js +0 -32
  366. package/dist/src/providers-BEwbhv0X.js +0 -30
  367. package/dist/src/providers-CH3C7zf7.js +0 -30
  368. package/dist/src/providers-zyB6k_38.cjs +0 -31
  369. package/dist/src/rubyUtils-BUHu6PhO.js +0 -5
  370. package/dist/src/rubyUtils-CP42kMvq.cjs +0 -4
  371. package/dist/src/server-DA4Cyrrq.js +0 -7
  372. package/dist/src/server-Dulb-4-K.cjs +0 -5
  373. package/dist/src/store-CXS-Q_91.js +0 -6
  374. package/dist/src/store-eYkaKMwq.cjs +0 -5
  375. package/dist/src/telemetry-BpMfhthR.cjs +0 -5
  376. package/dist/src/telemetry-Dw38hanS.js +0 -7
  377. package/dist/src/tokenUsageUtils-BDGe-iyI.js +0 -138
  378. package/dist/src/transform-DTGDnAzW.js +0 -6
  379. package/dist/src/transform-m3qNw4KP.cjs +0 -5
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./chunk-DEq-mXcV.js";
2
- import { _ as getEnvBool, b as getEnvString, c as sanitizeUrl, g as getConfigDirectoryPath, i as logger, r as logRequestResponse, w as state, y as getEnvInt } from "./logger-CT3IKMKA.js";
2
+ import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-Ct2S6Yx-.js";
3
3
  import { t as invariant } from "./invariant-Ddh24eXh.js";
4
- import * as fs$1 from "fs";
4
+ import * as fs$2 from "fs";
5
5
  import * as path$1 from "path";
6
6
  import path from "path";
7
7
  import yaml from "js-yaml";
@@ -23,7 +23,7 @@ const HUMAN_ASSERTION_TYPE = "human";
23
23
  * Application version from package.json.
24
24
  * Injected at build time, or read from npm environment in development.
25
25
  */
26
- const VERSION = "0.121.2";
26
+ const VERSION = "0.121.4";
27
27
  /**
28
28
  * PostHog analytics key.
29
29
  * Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
@@ -147,7 +147,7 @@ function isOpenAIToolChoice(obj) {
147
147
  function openaiToolChoiceToAnthropic(choice) {
148
148
  if (typeof choice === "string") switch (choice) {
149
149
  case "auto": return { type: "auto" };
150
- case "none": return { type: "auto" };
150
+ case "none": return { type: "none" };
151
151
  case "required": return { type: "any" };
152
152
  }
153
153
  return {
@@ -283,6 +283,155 @@ function transformTools(tools, format) {
283
283
  }
284
284
  }
285
285
  //#endregion
286
+ //#region src/scheduler/headerParser.ts
287
+ const OPENAI_HEADERS = {
288
+ remainingRequests: "x-ratelimit-remaining-requests",
289
+ remainingTokens: "x-ratelimit-remaining-tokens",
290
+ limitRequests: "x-ratelimit-limit-requests",
291
+ limitTokens: "x-ratelimit-limit-tokens",
292
+ resetRequests: "x-ratelimit-reset-requests",
293
+ resetTokens: "x-ratelimit-reset-tokens"
294
+ };
295
+ const ANTHROPIC_HEADERS = {
296
+ remainingRequests: "anthropic-ratelimit-requests-remaining",
297
+ remainingTokens: "anthropic-ratelimit-tokens-remaining",
298
+ limitRequests: "anthropic-ratelimit-requests-limit",
299
+ limitTokens: "anthropic-ratelimit-tokens-limit",
300
+ reset: "anthropic-ratelimit-requests-reset"
301
+ };
302
+ const STANDARD_HEADERS = {
303
+ remaining: "ratelimit-remaining",
304
+ limit: "ratelimit-limit",
305
+ reset: "ratelimit-reset",
306
+ remainingAlt: "x-ratelimit-remaining",
307
+ limitAlt: "x-ratelimit-limit",
308
+ resetAlt: "x-ratelimit-reset"
309
+ };
310
+ /**
311
+ * Parse rate limit headers from response.
312
+ */
313
+ function parseRateLimitHeaders(headers) {
314
+ const result = {};
315
+ const h = lowercaseKeys(headers);
316
+ result.remainingRequests = parseFirstMatch(h, [
317
+ OPENAI_HEADERS.remainingRequests,
318
+ ANTHROPIC_HEADERS.remainingRequests,
319
+ STANDARD_HEADERS.remainingAlt,
320
+ STANDARD_HEADERS.remaining
321
+ ]);
322
+ result.remainingTokens = parseFirstMatch(h, [OPENAI_HEADERS.remainingTokens, ANTHROPIC_HEADERS.remainingTokens]);
323
+ result.limitRequests = parseFirstMatch(h, [
324
+ OPENAI_HEADERS.limitRequests,
325
+ ANTHROPIC_HEADERS.limitRequests,
326
+ STANDARD_HEADERS.limitAlt,
327
+ STANDARD_HEADERS.limit
328
+ ]);
329
+ result.limitTokens = parseFirstMatch(h, [OPENAI_HEADERS.limitTokens, ANTHROPIC_HEADERS.limitTokens]);
330
+ for (const name of [
331
+ OPENAI_HEADERS.resetRequests,
332
+ OPENAI_HEADERS.resetTokens,
333
+ ANTHROPIC_HEADERS.reset,
334
+ STANDARD_HEADERS.resetAlt,
335
+ STANDARD_HEADERS.reset
336
+ ]) if (h[name] !== void 0) {
337
+ const parsed = parseResetTime(h[name]);
338
+ if (parsed !== null) {
339
+ result.resetAt = parsed;
340
+ break;
341
+ }
342
+ }
343
+ if (h["retry-after-ms"] !== void 0) {
344
+ const ms = parseInt(h["retry-after-ms"], 10);
345
+ if (!isNaN(ms) && ms >= 0) {
346
+ result.retryAfterMs = ms;
347
+ if (result.resetAt === void 0) result.resetAt = Date.now() + ms;
348
+ }
349
+ } else if (h["retry-after"] !== void 0) {
350
+ const parsed = parseRetryAfter(h["retry-after"]);
351
+ if (parsed !== null) {
352
+ result.retryAfterMs = parsed;
353
+ if (result.resetAt === void 0) result.resetAt = Date.now() + parsed;
354
+ }
355
+ }
356
+ return result;
357
+ }
358
+ /**
359
+ * Parse Retry-After header value.
360
+ * Returns duration in milliseconds.
361
+ * Exported for integration use.
362
+ */
363
+ function parseRetryAfter(value) {
364
+ const seconds = parseInt(value, 10);
365
+ if (!isNaN(seconds) && seconds >= 0 && String(seconds) === value.trim()) return seconds * 1e3;
366
+ const httpDate = parseHttpDate(value);
367
+ if (httpDate !== null) return Math.max(0, httpDate - Date.now());
368
+ return null;
369
+ }
370
+ function parseFirstMatch(headers, names) {
371
+ for (const name of names) {
372
+ const value = headers[name];
373
+ if (value !== void 0) {
374
+ const num = parseInt(value, 10);
375
+ if (!isNaN(num) && num >= 0) return num;
376
+ }
377
+ }
378
+ }
379
+ /**
380
+ * Parse reset time from various formats.
381
+ * Returns absolute Unix timestamp in milliseconds.
382
+ */
383
+ function parseResetTime(value) {
384
+ const durationMs = parseDuration(value);
385
+ if (durationMs !== null) return Date.now() + durationMs;
386
+ const num = parseFloat(value);
387
+ if (!isNaN(num)) if (num < 1e9) return Date.now() + num * 1e3;
388
+ else if (num < 1e10) return num * 1e3;
389
+ else return num;
390
+ const httpDate = parseHttpDate(value);
391
+ if (httpDate !== null) return httpDate;
392
+ return null;
393
+ }
394
+ /**
395
+ * Parse HTTP-date format (RFC 7231).
396
+ */
397
+ function parseHttpDate(value) {
398
+ const timestamp = Date.parse(value);
399
+ if (!isNaN(timestamp)) {
400
+ const now = Date.now();
401
+ const oneYearMs = 365 * 24 * 60 * 60 * 1e3;
402
+ if (timestamp > now - oneYearMs && timestamp < now + oneYearMs) return timestamp;
403
+ }
404
+ return null;
405
+ }
406
+ /**
407
+ * Parse duration strings like "1s", "100ms", "1m30s", "1h30s", "2h15m30s".
408
+ *
409
+ * Supported formats:
410
+ * - Xms (milliseconds)
411
+ * - Xs or X.Xs (seconds)
412
+ * - Xm or XmYs (minutes with optional seconds)
413
+ * - Xh or XhYm or XhYs or XhYmZs (hours with optional minutes/seconds)
414
+ */
415
+ function parseDuration(value) {
416
+ const match = value.match(/^(?:(\d+)h)?(?:(\d+)m(?!s))?(?:(\d+(?:\.\d+)?)(ms|s))?$/);
417
+ if (!match) return null;
418
+ const [, hours, minutes, secondsValue, secondsUnit] = match;
419
+ if (!hours && !minutes && !secondsValue) return null;
420
+ let ms = 0;
421
+ if (hours) ms += parseInt(hours, 10) * 36e5;
422
+ if (minutes) ms += parseInt(minutes, 10) * 6e4;
423
+ if (secondsValue) {
424
+ const num = parseFloat(secondsValue);
425
+ ms += secondsUnit === "ms" ? num : num * 1e3;
426
+ }
427
+ return ms;
428
+ }
429
+ function lowercaseKeys(obj) {
430
+ const result = {};
431
+ for (const [key, value] of Object.entries(obj)) result[key.toLowerCase()] = value;
432
+ return result;
433
+ }
434
+ //#endregion
286
435
  //#region src/util/time.ts
287
436
  function getCurrentTimestamp() {
288
437
  return Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3);
@@ -295,14 +444,14 @@ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
295
444
  * ~/.promptfoo/promptfoo.yaml by default.
296
445
  */
297
446
  function writeGlobalConfig(config) {
298
- fs$1.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
447
+ fs$2.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
299
448
  }
300
449
  function readGlobalConfig() {
301
450
  const configDir = getConfigDirectoryPath();
302
451
  const configFilePath = path$1.join(configDir, "promptfoo.yaml");
303
452
  let globalConfig = { id: crypto.randomUUID() };
304
- if (fs$1.existsSync(configFilePath)) {
305
- globalConfig = yaml.load(fs$1.readFileSync(configFilePath, "utf-8")) || {};
453
+ if (fs$2.existsSync(configFilePath)) {
454
+ globalConfig = yaml.load(fs$2.readFileSync(configFilePath, "utf-8")) || {};
306
455
  if (!globalConfig?.id) {
307
456
  globalConfig = {
308
457
  ...globalConfig,
@@ -311,8 +460,8 @@ function readGlobalConfig() {
311
460
  writeGlobalConfig(globalConfig);
312
461
  }
313
462
  } else {
314
- if (!fs$1.existsSync(configDir)) fs$1.mkdirSync(configDir, { recursive: true });
315
- fs$1.writeFileSync(configFilePath, yaml.dump(globalConfig));
463
+ if (!fs$2.existsSync(configDir)) fs$2.mkdirSync(configDir, { recursive: true });
464
+ fs$2.writeFileSync(configFilePath, yaml.dump(globalConfig));
316
465
  }
317
466
  return globalConfig;
318
467
  }
@@ -415,7 +564,17 @@ var CloudConfig = class {
415
564
  teams: savedConfig.teams
416
565
  };
417
566
  }
418
- async validateAndSetApiToken(token, apiHost) {
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) {
419
578
  try {
420
579
  const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
421
580
  const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
@@ -425,19 +584,11 @@ var CloudConfig = class {
425
584
  throw new Error("Failed to validate API token: " + response.statusText);
426
585
  }
427
586
  const { user, organization, app, hasActiveLicense } = await response.json();
428
- this.setApiKey(token);
429
- this.setApiHost(apiHost);
430
- this.setAppUrl(app.url);
431
- if (typeof hasActiveLicense === "boolean") {
432
- const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
433
- const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
434
- this.setSharing(hasActiveLicense || isGrandfathered);
435
- }
436
587
  return {
437
588
  user,
438
589
  organization,
439
590
  app,
440
- hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
591
+ ...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
441
592
  };
442
593
  } catch (err) {
443
594
  const error = err;
@@ -447,6 +598,16 @@ var CloudConfig = class {
447
598
  throw error;
448
599
  }
449
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
+ }
450
611
  getCurrentOrganizationId() {
451
612
  return this.config.currentOrganizationId;
452
613
  }
@@ -561,9 +722,8 @@ var fetch_exports = /* @__PURE__ */ __exportAll({
561
722
  isRateLimited: () => isRateLimited,
562
723
  isTransientError: () => isTransientError
563
724
  });
564
- let cachedAgent = null;
565
- let cachedAgentConcurrency;
566
- let cachedProxyAgents = /* @__PURE__ */ new Map();
725
+ const cachedAgents = /* @__PURE__ */ new Map();
726
+ const cachedProxyAgents = /* @__PURE__ */ new Map();
567
727
  /**
568
728
  * Get the connection pool size for HTTP agents.
569
729
  * Priority: PROMPTFOO_FETCH_CONNECTIONS env var > CLI -j flag > DEFAULT_MAX_CONCURRENCY (4).
@@ -580,36 +740,37 @@ function getConnectionPoolSize() {
580
740
  }
581
741
  function getOrCreateAgent(tlsOptions) {
582
742
  const concurrency = getConnectionPoolSize();
583
- if (cachedAgent && cachedAgentConcurrency !== concurrency) {
584
- if (typeof cachedAgent.close === "function") cachedAgent.close();
585
- cachedAgent = null;
586
- }
587
- if (!cachedAgent) {
588
- cachedAgent = new Agent({
589
- headersTimeout: REQUEST_TIMEOUT_MS,
590
- keepAliveTimeout: 3e4,
591
- keepAliveMaxTimeout: 6e4,
592
- connections: concurrency,
593
- connect: tlsOptions
594
- });
595
- cachedAgentConcurrency = concurrency;
596
- }
597
- return cachedAgent;
743
+ const existing = cachedAgents.get(concurrency);
744
+ if (existing) return existing;
745
+ const agent = new Agent({
746
+ headersTimeout: REQUEST_TIMEOUT_MS,
747
+ keepAliveTimeout: 3e4,
748
+ keepAliveMaxTimeout: 6e4,
749
+ connections: concurrency,
750
+ connect: tlsOptions
751
+ });
752
+ cachedAgents.set(concurrency, agent);
753
+ return agent;
754
+ }
755
+ function getProxyAgentCacheKey(proxyUrl, concurrency) {
756
+ return `${proxyUrl}::${concurrency}`;
598
757
  }
599
758
  function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
600
- if (!cachedProxyAgents.has(proxyUrl)) {
601
- const agent = new ProxyAgent({
602
- uri: proxyUrl,
603
- proxyTls: tlsOptions,
604
- requestTls: tlsOptions,
605
- headersTimeout: REQUEST_TIMEOUT_MS,
606
- keepAliveTimeout: 3e4,
607
- keepAliveMaxTimeout: 6e4,
608
- connections: getConnectionPoolSize()
609
- });
610
- cachedProxyAgents.set(proxyUrl, agent);
611
- }
612
- return cachedProxyAgents.get(proxyUrl);
759
+ const concurrency = getConnectionPoolSize();
760
+ const cacheKey = getProxyAgentCacheKey(proxyUrl, concurrency);
761
+ const existing = cachedProxyAgents.get(cacheKey);
762
+ if (existing) return existing;
763
+ const agent = new ProxyAgent({
764
+ uri: proxyUrl,
765
+ proxyTls: tlsOptions,
766
+ requestTls: tlsOptions,
767
+ headersTimeout: REQUEST_TIMEOUT_MS,
768
+ keepAliveTimeout: 3e4,
769
+ keepAliveMaxTimeout: 6e4,
770
+ connections: concurrency
771
+ });
772
+ cachedProxyAgents.set(cacheKey, agent);
773
+ return agent;
613
774
  }
614
775
  async function fetchWithProxy(url, options = {}, abortSignal) {
615
776
  let finalUrl = url;
@@ -711,12 +872,14 @@ async function handleRateLimit(response) {
711
872
  const retryAfter = response.headers.get("Retry-After");
712
873
  const openaiReset = response.headers.get("x-ratelimit-reset-requests") || response.headers.get("x-ratelimit-reset-tokens");
713
874
  let waitTime = 6e4;
714
- if (openaiReset) waitTime = Math.max(Number.parseInt(openaiReset) * 1e3, 0);
715
- else if (rateLimitReset) {
875
+ if (openaiReset) {
876
+ const parsedHeaders = parseRateLimitHeaders(Object.fromEntries(response.headers.entries()));
877
+ if (parsedHeaders.resetAt !== void 0) waitTime = Math.max(parsedHeaders.resetAt - Date.now(), 0);
878
+ } else if (rateLimitReset) {
716
879
  const resetTime = /* @__PURE__ */ new Date(Number.parseInt(rateLimitReset) * 1e3);
717
880
  const now = /* @__PURE__ */ new Date();
718
881
  waitTime = Math.max(resetTime.getTime() - now.getTime() + 1e3, 0);
719
- } else if (retryAfter) waitTime = Number.parseInt(retryAfter) * 1e3;
882
+ } else if (retryAfter) waitTime = parseRetryAfter(retryAfter) ?? waitTime;
720
883
  logger.debug(`Rate limited, waiting ${waitTime}ms before retry`);
721
884
  await sleep(waitTime);
722
885
  }
@@ -772,6 +935,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
772
935
  throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
773
936
  }
774
937
  //#endregion
775
- export { getShareApiBaseUrl as A, transformTools as C, R_ENDPOINT as D, EVENTS_ENDPOINT as E, HUMAN_ASSERTION_TYPE as F, POSTHOG_KEY as M, VERSION as N, TERMINAL_MAX_WIDTH as O, FILE_METADATA_KEY as P, transformToolChoice as S, CONSENT_ENDPOINT as T, isPromptfooSampleTarget as _, CloudConfig as a, parseChatPrompt as b, writeGlobalConfig as c, sleep as d, LONG_RUNNING_MODEL_TIMEOUT_MS as f, isOpenAIToolChoice as g, isOpenAIToolArray as h, fetch_exports as i, getShareViewBaseUrl as j, getDefaultShareViewBaseUrl as k, writeGlobalConfigPartial as l, calculateCost as m, fetchWithRetries as n, cloudConfig as o, REQUEST_TIMEOUT_MS as p, fetchWithTimeout as r, readGlobalConfig as s, fetchWithProxy as t, getCurrentTimestamp as u, openaiToolChoiceToBedrock as v, CLOUD_PROVIDER_PREFIX as w, toTitleCase as x, openaiToolsToBedrock as y };
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 };
776
939
 
777
- //# sourceMappingURL=fetch-Cwxnd8zz.js.map
940
+ //# sourceMappingURL=fetch-Di00EQrc.js.map
@@ -83,4 +83,4 @@ function isAudioFile(filePath) {
83
83
  //#endregion
84
84
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
85
85
 
86
- //# sourceMappingURL=fileExtensions-Ds-foDzt.js.map
86
+ //# sourceMappingURL=fileExtensions-AWa2ZML4.js.map
@@ -82,4 +82,4 @@ function isAudioFile(filePath) {
82
82
  //#endregion
83
83
  export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
84
84
 
85
- //# sourceMappingURL=fileExtensions-LcDYkU4v.js.map
85
+ //# sourceMappingURL=fileExtensions-BArZuxsI.js.map
@@ -20,4 +20,4 @@ function formatDuration(seconds) {
20
20
  //#endregion
21
21
  export { formatDuration as t };
22
22
 
23
- //# sourceMappingURL=formatDuration-DgBVMN65.js.map
23
+ //# sourceMappingURL=formatDuration-DZzPsexs.js.map
@@ -22,7 +22,9 @@ const GenAIAttributes = {
22
22
  USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
23
23
  USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
24
24
  USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
25
- USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
25
+ USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
26
+ USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
27
+ USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
26
28
  };
27
29
  const PromptfooAttributes = {
28
30
  PROVIDER_ID: "promptfoo.provider.id",
@@ -225,6 +227,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
225
227
  if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
226
228
  if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
227
229
  if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
230
+ if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
231
+ if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
228
232
  }
229
233
  }
230
234
  if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
@@ -253,4 +257,4 @@ function getTraceparent() {
253
257
  //#endregion
254
258
  export { withGenAISpan as n, getTraceparent as t };
255
259
 
256
- //# sourceMappingURL=genaiTracer-D3fD9dNV.js.map
260
+ //# sourceMappingURL=genaiTracer-COYDi-tC.js.map
@@ -23,7 +23,9 @@ const GenAIAttributes = {
23
23
  USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
24
24
  USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
25
25
  USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
26
- USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
26
+ USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
27
+ USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
28
+ USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
27
29
  };
28
30
  const PromptfooAttributes = {
29
31
  PROVIDER_ID: "promptfoo.provider.id",
@@ -226,6 +228,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
226
228
  if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
227
229
  if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
228
230
  if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
231
+ if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
232
+ if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
229
233
  }
230
234
  }
231
235
  if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
@@ -254,4 +258,4 @@ function getTraceparent() {
254
258
  //#endregion
255
259
  export { withGenAISpan as n, getTraceparent as t };
256
260
 
257
- //# sourceMappingURL=genaiTracer-C1rxGO8Q.js.map
261
+ //# sourceMappingURL=genaiTracer-DWdZ28hY.js.map
@@ -22,7 +22,9 @@ const GenAIAttributes = {
22
22
  USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
23
23
  USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
24
24
  USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
25
- USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
25
+ USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
26
+ USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
27
+ USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
26
28
  };
27
29
  const PromptfooAttributes = {
28
30
  PROVIDER_ID: "promptfoo.provider.id",
@@ -225,6 +227,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
225
227
  if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
226
228
  if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
227
229
  if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
230
+ if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
231
+ if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
228
232
  }
229
233
  }
230
234
  if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
@@ -253,4 +257,4 @@ function getTraceparent() {
253
257
  //#endregion
254
258
  export { withGenAISpan as n, getTraceparent as t };
255
259
 
256
- //# sourceMappingURL=genaiTracer-70Z8BIuV.js.map
260
+ //# sourceMappingURL=genaiTracer-XnrcgDCe.js.map
@@ -1,4 +1,4 @@
1
- require("./logger-Cp1GPUjj.cjs");
1
+ require("./logger-COuQb2xB.cjs");
2
2
  let _opentelemetry_api = require("@opentelemetry/api");
3
3
  //#region src/tracing/genaiTracer.ts
4
4
  const TRACER_NAME = "promptfoo.providers";
@@ -23,7 +23,9 @@ const GenAIAttributes = {
23
23
  USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
24
24
  USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
25
25
  USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
26
- USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
26
+ USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
27
+ USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
28
+ USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
27
29
  };
28
30
  const PromptfooAttributes = {
29
31
  PROVIDER_ID: "promptfoo.provider.id",
@@ -226,6 +228,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
226
228
  if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
227
229
  if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
228
230
  if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
231
+ if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
232
+ if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
229
233
  }
230
234
  }
231
235
  if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
@@ -265,4 +269,4 @@ Object.defineProperty(exports, "withGenAISpan", {
265
269
  }
266
270
  });
267
271
 
268
- //# sourceMappingURL=genaiTracer-DN4dQywX.cjs.map
272
+ //# sourceMappingURL=genaiTracer-yRuxj9-L.cjs.map
@@ -28,7 +28,7 @@ func main() {
28
28
  }
29
29
 
30
30
  // Get the function by name using reflection
31
- f := reflect.ValueOf(nil)
31
+ var f reflect.Value
32
32
  switch functionName {
33
33
  case "call_api", "CallApi":
34
34
  // Use the CallApi function defined in the user's code