promptfoo 0.121.1 → 0.121.3

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 (316) hide show
  1. package/README.md +2 -0
  2. package/dist/src/{accounts-xrUGFA6n.js → accounts-B2XmGjty.js} +5 -5
  3. package/dist/src/{accounts-Bx-x3bmW.cjs → accounts-BPyfpSeU.cjs} +5 -5
  4. package/dist/src/{accounts-CMqkzrVf.js → accounts-CFLK3mnD.js} +6 -6
  5. package/dist/src/{accounts-BgNJDBE6.js → accounts-Xatc0RYb.js} +5 -5
  6. package/dist/src/{agentic-utils-BKIN5PKu.js → agentic-utils-36epdqwB.js} +3 -3
  7. package/dist/src/{cometapi-DkXrKi5z.js → agentic-utils-D8yXo5Lm.js} +4 -61
  8. package/dist/src/{cometapi-vY6aDZgo.cjs → agentic-utils-DAVsChuB.cjs} +24 -62
  9. package/dist/src/agentic-utils-DIYAAYE7.js +153 -0
  10. package/dist/src/{agents-C-dDThPK.js → agents-BBVJCIYr.js} +226 -13
  11. package/dist/src/{agents-CErsqg5U.cjs → agents-BBWxKSM0.cjs} +7 -7
  12. package/dist/src/{agents-Dy2YpZpa.js → agents-Bqgfdokm.js} +227 -14
  13. package/dist/src/{agents-B0f4HICh.cjs → agents-CAYbM7qD.cjs} +226 -13
  14. package/dist/src/{agents-CVIn-Utx.js → agents-CLQ-P15P.js} +7 -7
  15. package/dist/src/{agents-DeH4Gu94.js → agents-CgBniSlI.js} +8 -8
  16. package/dist/src/{agents-CXknwsFX.js → agents-DSSTV4bv.js} +226 -13
  17. package/dist/src/{agents-aF4-T121.js → agents-wg3ohknq.js} +7 -7
  18. package/dist/src/{aimlapi-tg0Gkcvr.cjs → aimlapi-Bv8Fmc-b.cjs} +14 -14
  19. package/dist/src/{aimlapi-BNfTBexL.js → aimlapi-BwGC1TtS.js} +13 -13
  20. package/dist/src/{aimlapi-BAGZDo5G.js → aimlapi-DaC3qZ-o.js} +14 -14
  21. package/dist/src/{aimlapi-DHRKlBEA.js → aimlapi-MgSLdvy7.js} +13 -13
  22. package/dist/src/app/assets/index-B6l9CVVb.js +439 -0
  23. package/dist/src/app/assets/index-DyZ0Ep37.css +1 -0
  24. package/dist/src/app/assets/sync-CStkzc6u.js +4 -0
  25. package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +36 -0
  26. package/dist/src/app/assets/vendor-markdown-Bz7N-ca6.js +29 -0
  27. package/dist/src/app/index.html +4 -4
  28. package/dist/src/{audio-tf_NBjlC.js → audio-Bn44pQxv.js} +4 -4
  29. package/dist/src/{audio-CHQ4r-RV.js → audio-DDA5WHdx.js} +4 -4
  30. package/dist/src/{audio-BWeaWovU.cjs → audio-DVFjQ67_.cjs} +4 -4
  31. package/dist/src/{audio-BRODU0UK.js → audio-DjU9GswO.js} +5 -5
  32. package/dist/src/{base-DBtwl2FR.cjs → base-BboXIF_0.cjs} +3 -3
  33. package/dist/src/{base-B4QJRyFS.js → base-CKjwebIH.js} +3 -3
  34. package/dist/src/{base-B0tcrnq_.js → base-CqzQ4K8j.js} +3 -3
  35. package/dist/src/{base-fEDN28WM.js → base-Cz2ZC_iA.js} +3 -3
  36. package/dist/src/{blobs-BAU-dXan.js → blobs-B1JriOyi.js} +3 -3
  37. package/dist/src/{blobs-qTYm-1PY.js → blobs-BUWmKWzo.js} +3 -3
  38. package/dist/src/{blobs-DvS-O6be.cjs → blobs-C6j0bvFz.cjs} +3 -3
  39. package/dist/src/{blobs-Bpg5rH6i.js → blobs-DXTl6J3H.js} +3 -3
  40. package/dist/src/{cache-COish3-W.cjs → cache-C5yFZ4gC.cjs} +75 -58
  41. package/dist/src/{cache-8XhNqPKW.js → cache-CaT5tPgo.js} +75 -58
  42. package/dist/src/cache-CyCanoMu.js +6 -0
  43. package/dist/src/{cache-CG0SlR1d.js → cache-DSqR6ezl.js} +75 -58
  44. package/dist/src/cache-Df_QFDNu.cjs +5 -0
  45. package/dist/src/{cache-D3eqDYGU.js → cache-HP0NP4k3.js} +75 -58
  46. package/dist/src/{chat-DHMH-N64.js → chat-B-52XYI1.js} +12 -12
  47. package/dist/src/{chat-BKm79wib.js → chat-B0iaWhoh.js} +16 -14
  48. package/dist/src/{chat-DxysjBvt.js → chat-BE0qTA8e.js} +13 -13
  49. package/dist/src/{chat-CRWNNq73.js → chat-BEwdgGEg.js} +16 -14
  50. package/dist/src/{chat-2K608PeQ.cjs → chat-BtIKkLKx.cjs} +13 -13
  51. package/dist/src/{chat-DaqekjFr.cjs → chat-CM8qWR3_.cjs} +17 -15
  52. package/dist/src/{chat-CM_kyI8B.js → chat-DK1U-eZ-.js} +12 -12
  53. package/dist/src/{chat-CznLWr_D.js → chat-pxmiVpWe.js} +16 -14
  54. package/dist/src/{chatkit-65VXf5SR.js → chatkit-BYGQlHlV.js} +4 -4
  55. package/dist/src/{chatkit-DKyPi1Gs.cjs → chatkit-Cx174XI3.cjs} +4 -4
  56. package/dist/src/{chatkit-BxFvW8KY.js → chatkit-_8eJqKcD.js} +4 -4
  57. package/dist/src/{chatkit-Be-Q-a9F.js → chatkit-a2D6mY6s.js} +4 -4
  58. package/dist/src/{claude-agent-sdk-CJH22shf.cjs → claude-agent-sdk-8ddRp1L2.cjs} +35 -17
  59. package/dist/src/{claude-agent-sdk-Dy5lT-Tx.js → claude-agent-sdk-Bq5EArsX.js} +33 -15
  60. package/dist/src/{claude-agent-sdk-BLTu0WBO.js → claude-agent-sdk-CMjh4LFH.js} +33 -15
  61. package/dist/src/{claude-agent-sdk-D6_k9FKA.js → claude-agent-sdk-HgbFioFw.js} +33 -15
  62. package/dist/src/cloud-DE3t1-ZI.js +4 -0
  63. package/dist/src/{cloud-Bc9526yV.js → cloud-z8KZpUoa.js} +3 -3
  64. package/dist/src/{cloudflare-ai-CWWJCRim.js → cloudflare-ai-BGyXlpXJ.js} +13 -13
  65. package/dist/src/{cloudflare-ai-C9r2sRhw.js → cloudflare-ai-Bbp26N0L.js} +13 -13
  66. package/dist/src/{cloudflare-ai-ClWSdor4.cjs → cloudflare-ai-C62x6MQG.cjs} +14 -14
  67. package/dist/src/{cloudflare-ai-ICsOuD-z.js → cloudflare-ai-DdKP9TKT.js} +14 -14
  68. package/dist/src/{cloudflare-gateway-D6xFc5pa.js → cloudflare-gateway-BwAaUgeW.js} +14 -14
  69. package/dist/src/{cloudflare-gateway-D6O7AlYb.js → cloudflare-gateway-D-e9i1Sn.js} +15 -15
  70. package/dist/src/{cloudflare-gateway-pXGHxJ47.js → cloudflare-gateway-DXhtXDRb.js} +15 -163
  71. package/dist/src/{cloudflare-gateway-C2_-KG5o.cjs → cloudflare-gateway-Dx36ftqF.cjs} +15 -15
  72. package/dist/src/{codex-sdk-DUwKWezN.js → codex-sdk-BQEw16R_.js} +180 -11
  73. package/dist/src/{codex-sdk-C6UMlxwV.js → codex-sdk-C_07GuVS.js} +180 -11
  74. package/dist/src/{codex-sdk-GGAw0qbD.js → codex-sdk-DE5G18dx.js} +180 -11
  75. package/dist/src/{codex-sdk-fAO0c3yA.cjs → codex-sdk-ZLKfDjqP.cjs} +181 -12
  76. package/dist/src/cometapi-BDyV-NNm.js +62 -0
  77. package/dist/src/cometapi-C3hOlM7-.cjs +62 -0
  78. package/dist/src/{cometapi-Bbjp5V4x.js → cometapi-hhL4TAh3.js} +14 -14
  79. package/dist/src/{cometapi-BasUi7-_.js → cometapi-sp7sJpBD.js} +15 -15
  80. package/dist/src/{completion-C_P3ypkJ.js → completion-BCimtq-h.js} +6 -6
  81. package/dist/src/{completion-6Mx_iXxK.js → completion-DCjv7RZ3.js} +6 -6
  82. package/dist/src/{completion-CDOouNzq.cjs → completion-DlXUhj5c.cjs} +6 -6
  83. package/dist/src/{completion-C5rtR_9P.js → completion-DoYy49ti.js} +6 -6
  84. package/dist/src/{createHash-CfZSc0b4.cjs → createHash-BYwImsYv.cjs} +2 -2
  85. package/dist/src/{docker-BwsKwxFs.cjs → docker-Cqj2-QVi.cjs} +14 -14
  86. package/dist/src/{docker-CZnqU1XV.js → docker-CxCkwMzc.js} +13 -13
  87. package/dist/src/{docker-DzxyDPIj.js → docker-DpguQj-w.js} +14 -14
  88. package/dist/src/{docker-5KcG-_86.js → docker-FeBni2dw.js} +13 -13
  89. package/dist/src/{esm-C03C-mv3.js → esm-7UIl0pPM.js} +2 -2
  90. package/dist/src/{esm-Cd1AjG1D.js → esm-CKWP3u_P.js} +3 -3
  91. package/dist/src/{esm-CnNt7sI4.cjs → esm-CipptfDu.cjs} +2 -2
  92. package/dist/src/{esm-CaIwzWR5.js → esm-SUNIX1x3.js} +3 -3
  93. package/dist/src/eval-7aEqoMs3.js +15 -0
  94. package/dist/src/{eval-DmFyWU7i.js → eval-BTqTn7lb.js} +10 -10
  95. package/dist/src/{evalResult-CDQiuUuf.js → evalResult-BkIhRdTe.js} +7 -7
  96. package/dist/src/evalResult-CYNHkk5A.js +12 -0
  97. package/dist/src/evalResult-CuvJeNiM.js +10 -0
  98. package/dist/src/{evalResult-CTG2AHOS.js → evalResult-DUDShQrm.js} +7 -7
  99. package/dist/src/{evalResult-Dap2CekP.cjs → evalResult-DpARzUCb.cjs} +7 -7
  100. package/dist/src/evalResult-tGdilrWt.cjs +10 -0
  101. package/dist/src/evaluator-BBUqRhz1.js +36 -0
  102. package/dist/src/{evaluator-DPFRbFIL.js → evaluator-BcvOGaam.js} +833 -79
  103. package/dist/src/{extractor-YMU_Gvt8.js → extractor-C8XwivI9.js} +6 -6
  104. package/dist/src/{extractor-CFG6bcWJ.js → extractor-CAZ2G3Kh.js} +6 -6
  105. package/dist/src/{extractor-DX36oYEv.cjs → extractor-DG3sSfXE.cjs} +6 -6
  106. package/dist/src/{extractor-M67RUtg6.js → extractor-D_wd8jxt.js} +6 -6
  107. package/dist/src/{fetch-4M3YRaqL.js → fetch-BiYv2BZc.js} +3 -3
  108. package/dist/src/{fetch-BxUk8odA.cjs → fetch-BnR9wSnm.cjs} +3 -3
  109. package/dist/src/{fetch-60Gzydls.js → fetch-CVAtKnI3.js} +3 -3
  110. package/dist/src/{fetch-BMv0O527.js → fetch-DoVRJZhJ.js} +4 -4
  111. package/dist/src/fetch-UWU706qb.js +5 -0
  112. package/dist/src/{genaiTracer-DN4dQywX.cjs → genaiTracer-BfxrvSUb.cjs} +2 -2
  113. package/dist/src/{graders-DOXycdlG.cjs → graders-BElhu9ZY.cjs} +126 -55
  114. package/dist/src/{graders-R9rYUM0d.js → graders-BXAJ0sbS.js} +120 -55
  115. package/dist/src/graders-BxfEguVY.js +32 -0
  116. package/dist/src/graders-CzVMbEnv.js +34 -0
  117. package/dist/src/{graders-CpdqD9PI.js → graders-DG7mhg-b.js} +120 -55
  118. package/dist/src/graders-DjCXfj0l.cjs +32 -0
  119. package/dist/src/{graders-CHO8EPM4.js → graders-RjHF8VfG.js} +120 -55
  120. package/dist/src/graders-kHzIWOKu.js +32 -0
  121. package/dist/src/{image-DTedmQPg.cjs → image--F58eEIn.cjs} +6 -6
  122. package/dist/src/{image-DJEvKveK.js → image-6WQXK8m8.js} +4 -4
  123. package/dist/src/{image-pAX56tPG.js → image-B8b6f36E.js} +6 -6
  124. package/dist/src/{image-BmEZqVmk.js → image-CoxZp9PZ.js} +6 -6
  125. package/dist/src/{image-gvmivTEe.js → image-DO0RYnjH.js} +5 -5
  126. package/dist/src/{image-CBBVXWuT.js → image-PoF6DN3x.js} +6 -6
  127. package/dist/src/{image-CDLQOcqT.cjs → image-fza3zuKs.cjs} +4 -4
  128. package/dist/src/{image-tL5hIOFh.js → image-xNbw5ph2.js} +4 -4
  129. package/dist/src/index.cjs +863 -110
  130. package/dist/src/index.d.cts +833 -60
  131. package/dist/src/index.d.ts +833 -60
  132. package/dist/src/index.js +860 -108
  133. package/dist/src/{interactiveCheck-BgLZUIt3.js → interactiveCheck-BnMYOjMu.js} +2 -2
  134. package/dist/src/{knowledgeBase-CoU-UQBg.js → knowledgeBase-Bi7CmDbx.js} +7 -7
  135. package/dist/src/{knowledgeBase-CLJybhnF.js → knowledgeBase-Ce3ofVan.js} +8 -8
  136. package/dist/src/{knowledgeBase-DjWPVqSb.js → knowledgeBase-DFRXPZl_.js} +7 -7
  137. package/dist/src/{knowledgeBase-wkxuRFhA.cjs → knowledgeBase-DqrLX8fy.cjs} +7 -7
  138. package/dist/src/{litellm-B9Hysuri.js → litellm-Bo2gQXpo.js} +16 -15
  139. package/dist/src/{litellm-ePxtr9F1.js → litellm-CKiAxnoM.js} +15 -14
  140. package/dist/src/{litellm-NYpQ8RQu.cjs → litellm-CnHI69aj.cjs} +16 -15
  141. package/dist/src/{litellm-CTfa0hqi.js → litellm-Tc294Jhj.js} +15 -14
  142. package/dist/src/{logger-KkObSCzq.js → logger-BcJBzSSA.js} +10 -14
  143. package/dist/src/{logger-DLcq4dWf.js → logger-BnkjG2jt.js} +10 -14
  144. package/dist/src/{logger-Cp1GPUjj.cjs → logger-D5iKBpu_.cjs} +27 -13
  145. package/dist/src/{logger-CT3IKMKA.js → logger-DO8_zM18.js} +10 -14
  146. package/dist/src/{luma-ray-BW9IRGIc.js → luma-ray-0ehMPt5N.js} +10 -10
  147. package/dist/src/{luma-ray-BE2mOt6N.js → luma-ray-C9q8rdQe.js} +9 -9
  148. package/dist/src/{luma-ray-Cm1KZBhs.js → luma-ray-DP0QA9qn.js} +9 -9
  149. package/dist/src/{luma-ray-B0GGNRc1.cjs → luma-ray-m9Ku2meV.cjs} +9 -9
  150. package/dist/src/main.js +69 -71
  151. package/dist/src/{messages-1x9atZmP.js → messages-DJNo37Ko.js} +14 -9
  152. package/dist/src/{messages-BLbWdsyt.js → messages-Dy9QecMs.js} +14 -9
  153. package/dist/src/{messages-1JrJs91T.cjs → messages-HJsyEh4o.cjs} +15 -10
  154. package/dist/src/{messages-D8EA0oDc.js → messages-biC_ex-p.js} +14 -9
  155. package/dist/src/{modelslab-C1OLRmVX.js → modelslab-B5J-ZM5c.js} +9 -9
  156. package/dist/src/{modelslab-CqXBy3U8.js → modelslab-BI458moT.js} +10 -10
  157. package/dist/src/{modelslab-X5-4LroM.js → modelslab-BTOT8FUO.js} +9 -9
  158. package/dist/src/{modelslab-DcOSFwKh.cjs → modelslab-IQbNg-r7.cjs} +9 -9
  159. package/dist/src/{nova-reel-DihqLeol.js → nova-reel-BZ9y-Y5s.js} +9 -9
  160. package/dist/src/{nova-reel-D9xfaMBs.cjs → nova-reel-CE5etkv9.cjs} +9 -9
  161. package/dist/src/{nova-reel-D2ZkOSyr.js → nova-reel-DEeQlnOJ.js} +10 -10
  162. package/dist/src/{nova-reel-BgS1ZWuK.js → nova-reel-Xw1SXLpg.js} +9 -9
  163. package/dist/src/{nova-sonic-Q3BOJeig.js → nova-sonic-DWswpN1E.js} +7 -7
  164. package/dist/src/{nova-sonic-DezhVUYT.js → nova-sonic-DXTLpi-r.js} +6 -6
  165. package/dist/src/{nova-sonic-DVu3mMIy.cjs → nova-sonic-N0yCm0vb.cjs} +6 -6
  166. package/dist/src/{nova-sonic-P-CdUMlV.js → nova-sonic-Ogqf-csn.js} +6 -6
  167. package/dist/src/{openai-DhbB7eWK.js → openai-BMcwgD5C.js} +2 -2
  168. package/dist/src/{openai-j-sE2O7r.js → openai-BcB5KlTk.js} +2 -2
  169. package/dist/src/{openai-Cuif0GEt.cjs → openai-CoxGAQwn.cjs} +2 -2
  170. package/dist/src/{openai-DElQ-fPX.js → openai-D6wITiVn.js} +2 -2
  171. package/dist/src/{openclaw-Bv1DINsX.js → openclaw-0Sv7AK3O.js} +172 -109
  172. package/dist/src/{openclaw-DAfWQn-o.cjs → openclaw-CXxbKgDH.cjs} +174 -110
  173. package/dist/src/{openclaw-BiSZPL7J.js → openclaw-D1FSCps-.js} +172 -109
  174. package/dist/src/{openclaw-D1D_ej1z.js → openclaw-D2ENvu7a.js} +173 -110
  175. package/dist/src/{opencode-sdk-D95s6SnR.js → opencode-sdk-C71Z0ehR.js} +13 -13
  176. package/dist/src/{opencode-sdk-DxUPkLT7.js → opencode-sdk-CHCs7dEb.js} +12 -12
  177. package/dist/src/{opencode-sdk-C7m-wRfI.js → opencode-sdk-DDxj4QqH.js} +12 -12
  178. package/dist/src/{opencode-sdk-CfaLN8PY.cjs → opencode-sdk-WWJhnbKr.cjs} +16 -16
  179. package/dist/src/{otlpReceiver-g3ByGaXs.js → otlpReceiver-C9KlUtxh.js} +6 -6
  180. package/dist/src/{otlpReceiver--AIRW_S4.js → otlpReceiver-CZL48YfC.js} +6 -6
  181. package/dist/src/{otlpReceiver-Bn5wGB1v.js → otlpReceiver-CavGAA6k.js} +6 -6
  182. package/dist/src/{otlpReceiver-Diec4cln.cjs → otlpReceiver-DHKqJlsz.cjs} +6 -6
  183. package/dist/src/{providerRegistry-B0RUOLI_.js → providerRegistry-B9lh-_tx.js} +2 -2
  184. package/dist/src/{providerRegistry-Civky8Ar.cjs → providerRegistry-BTDgfV5h.cjs} +2 -2
  185. package/dist/src/{providerRegistry-CD8MEar9.js → providerRegistry-BkzVH5Ba.js} +2 -2
  186. package/dist/src/{providerRegistry-DM8rZYol.js → providerRegistry-CUWki5mQ.js} +2 -2
  187. package/dist/src/providers-BSLEaIQG.js +32 -0
  188. package/dist/src/{providers-CFu-TZl-.cjs → providers-CScd1wN6.cjs} +733 -464
  189. package/dist/src/{providers-CFLy1_ji.js → providers-Ch6Mr0gn.js} +795 -526
  190. package/dist/src/{providers-BKRJTjBz.js → providers-Cn73d5sr.js} +795 -526
  191. package/dist/src/providers-D-FnDg8k.cjs +31 -0
  192. package/dist/src/providers-DEYiFVAo.js +30 -0
  193. package/dist/src/{providers-B3HvufyI.js → providers-DvddrgxL.js} +795 -526
  194. package/dist/src/providers-sS2WI8YD.js +30 -0
  195. package/dist/src/{pythonUtils-D6fwaDSg.js → pythonUtils-Bzwbgpbg.js} +3 -3
  196. package/dist/src/{pythonUtils-D5nxkQ0P.js → pythonUtils-Cpo0Ez1p.js} +3 -3
  197. package/dist/src/{pythonUtils-CTU3Y3lw.cjs → pythonUtils-dAVigVK-.cjs} +3 -3
  198. package/dist/src/{pythonUtils-C3py6GC1.js → pythonUtils-wIqk7zAf.js} +3 -3
  199. package/dist/src/{quiverai-CI6gYJVI.js → quiverai-BeofbLVc.js} +4 -4
  200. package/dist/src/{quiverai-MHSxbmmZ.js → quiverai-CCQn73lq.js} +5 -5
  201. package/dist/src/{quiverai-CLkWkyZc.cjs → quiverai-CcUhPIBg.cjs} +4 -4
  202. package/dist/src/{quiverai-C2jVwbH1.js → quiverai-DVSEqJiq.js} +4 -4
  203. package/dist/src/{render-Drod8m7K.js → render-BHl6QVq9.js} +3 -3
  204. package/dist/src/{responses-CGw0DCzh.js → responses-BKP_WYis.js} +16 -12
  205. package/dist/src/{responses-BKqJmhhc.js → responses-CQb1Tj69.js} +16 -12
  206. package/dist/src/{responses-jxdehPkC.js → responses-CgNyTPsY.js} +16 -12
  207. package/dist/src/{responses-tD4Bd4dc.cjs → responses-mo0KQDbu.cjs} +16 -12
  208. package/dist/src/rubyUtils-B1HXG4ej.cjs +4 -0
  209. package/dist/src/{rubyUtils-DhCAlxZr.cjs → rubyUtils-CGeUtCfW.cjs} +3 -3
  210. package/dist/src/{rubyUtils-Boc4HZzX.js → rubyUtils-CiVfln3g.js} +3 -3
  211. package/dist/src/{rubyUtils-BcuGX77l.js → rubyUtils-DECSbsfY.js} +3 -3
  212. package/dist/src/{rubyUtils-BUVePouc.js → rubyUtils-PgU-gHmx.js} +3 -3
  213. package/dist/src/rubyUtils-Rt6pKA96.js +5 -0
  214. package/dist/src/{sagemaker-BK4Zb993.js → sagemaker-CVv8W7so.js} +17 -17
  215. package/dist/src/{sagemaker-D2Q1c-sD.js → sagemaker-CqeASYE5.js} +17 -17
  216. package/dist/src/{sagemaker-BfiWTmvn.js → sagemaker-MUbD5V3v.js} +18 -18
  217. package/dist/src/{sagemaker-CcQHM1jV.cjs → sagemaker-jiw1wQa-.cjs} +17 -17
  218. package/dist/src/{scanner-J8CA3LsV.js → scanner-DVDeUz1r.js} +10 -10
  219. package/dist/src/server/index.js +864 -112
  220. package/dist/src/server-B0Xh1Gx-.js +7 -0
  221. package/dist/src/{server-B0PPuDw-.cjs → server-BtoCXeXI.cjs} +4 -4
  222. package/dist/src/{server-BC7XJFgr.js → server-CP9qKM40.js} +4 -4
  223. package/dist/src/{server-OAs3nBRT.js → server-Cns05F1j.js} +5 -5
  224. package/dist/src/server-DJTKu9IR.cjs +5 -0
  225. package/dist/src/{server-DbFphssR.js → server-DZ9MtCn0.js} +6 -6
  226. package/dist/src/{signal-BOTbd53Z.js → signal-C3ZTsUgi.js} +3 -3
  227. package/dist/src/{slack-DXMKtA-f.js → slack-2sdpGzbt.js} +2 -2
  228. package/dist/src/{slack-BmVAVGaK.cjs → slack-94iG3T0s.cjs} +2 -2
  229. package/dist/src/{slack-DCUPTzS2.js → slack-BR0HtO3K.js} +2 -2
  230. package/dist/src/{slack-DOdy_kyv.js → slack-DCEV-vWP.js} +2 -2
  231. package/dist/src/store-C5u6MgC8.js +6 -0
  232. package/dist/src/{store-BSc-TF2w.cjs → store-CLyU7AtI.cjs} +17 -5
  233. package/dist/src/store-CNHk-De4.cjs +5 -0
  234. package/dist/src/{store-DQLEjuEO.js → store-Cj258DgL.js} +17 -5
  235. package/dist/src/{store-D1tv90v3.js → store-P8OKm19S.js} +17 -5
  236. package/dist/src/{store-Ub2vaGJ1.js → store-VB0GP46K.js} +17 -5
  237. package/dist/src/{tables-xKANLRBD.js → tables-BEIFz2tM.js} +3 -3
  238. package/dist/src/{tables-C7K-XKWp.cjs → tables-BdZQEpRz.cjs} +3 -3
  239. package/dist/src/{tables-D36WTqKX.js → tables-DmzvLbeZ.js} +3 -3
  240. package/dist/src/{tables-5EvT_Bwn.js → tables-kC7R5kiK.js} +3 -3
  241. package/dist/src/{telemetry-C2YDkUQH.js → telemetry-BnH5VJAU.js} +4 -4
  242. package/dist/src/{telemetry-C15ziL8u.js → telemetry-BugWqKiu.js} +4 -4
  243. package/dist/src/{telemetry-DMb2Mpfm.js → telemetry-DPXLd7UE.js} +4 -4
  244. package/dist/src/telemetry-Yig0Tino.js +7 -0
  245. package/dist/src/telemetry-p8Pwqm1i.cjs +5 -0
  246. package/dist/src/{telemetry-CbrnxHp_.cjs → telemetry-re627Lre.cjs} +4 -4
  247. package/dist/src/{transcription-CL78qbOU.cjs → transcription-BvtsrzRG.cjs} +13 -13
  248. package/dist/src/{transcription-DAtxHhAM.js → transcription-CaMivnjG.js} +13 -13
  249. package/dist/src/{transcription-QHh3AH6Z.js → transcription-DOMMTu01.js} +14 -14
  250. package/dist/src/{transcription-LNZTNUUL.js → transcription-Hb3VnC4M.js} +13 -13
  251. package/dist/src/{transform-DOcQeLld.cjs → transform-0BwoBsvO.cjs} +19 -5
  252. package/dist/src/{transform-DGxXocjk.js → transform-B2-jIv68.js} +8 -6
  253. package/dist/src/{transform-DECvGmzp.js → transform-BqPkNPYm.js} +4 -4
  254. package/dist/src/{transform-aa6tmVpZ.js → transform-BzK09Q_9.js} +4 -4
  255. package/dist/src/transform-ChNIpHz7.js +6 -0
  256. package/dist/src/{transform-Cgi24fJ7.js → transform-DrleutM3.js} +8 -6
  257. package/dist/src/{transform-DGLazrMm.js → transform-DyDAwEpE.js} +8 -6
  258. package/dist/src/transform-PtQ6rAE3.cjs +5 -0
  259. package/dist/src/{transform-CzK1Q0zl.cjs → transform-ZrG2dvlo.cjs} +4 -4
  260. package/dist/src/{transform-DilY9wbS.js → transform-ljLYHEPh.js} +4 -4
  261. package/dist/src/{transformersAvailability-CEVM2GNQ.js → transformersAvailability-BGkzavwb.js} +1 -1
  262. package/dist/src/{transformersAvailability-CwayUSlh.cjs → transformersAvailability-DKoRtQLy.cjs} +1 -1
  263. package/dist/src/{types-CH3Ge2sE.js → types-CIhFeUC4.js} +45 -11
  264. package/dist/src/{types-CN_TZ2GJ.js → types-Cd3ygw8W.js} +45 -11
  265. package/dist/src/{types-LJ0r3wbR.cjs → types-D8cGDZbL.cjs} +46 -12
  266. package/dist/src/{types-CLKiCBW3.js → types-q8GXGF65.js} +45 -11
  267. package/dist/src/{util-CchiqXh_.cjs → util--9u9UVCt.cjs} +3 -3
  268. package/dist/src/{util-5cB-L7U3.js → util-BLvy9qfE.js} +7 -11
  269. package/dist/src/{util-YT5HPZaS.js → util-Bm3E9jpK.js} +7 -11
  270. package/dist/src/{util-6-GqIvzS.js → util-BtoGs5Cb.js} +18 -4
  271. package/dist/src/{util-Db0a0AFH.cjs → util-CFj4YKIn.cjs} +18 -4
  272. package/dist/src/{util-Dlz_Wvgm.js → util-CMMkIxfU.js} +7 -11
  273. package/dist/src/{util-Betm42rL.js → util-CgDCK4KI.js} +18 -4
  274. package/dist/src/{util-Yz-1aEhW.cjs → util-CuLo2pMR.cjs} +7 -11
  275. package/dist/src/{util-C-PPYSMq.js → util-DM2rTn_6.js} +18 -4
  276. package/dist/src/{util-B7T3SiBS.js → util-DMFeUvLz.js} +3 -3
  277. package/dist/src/{util-ZZH-3QZz.js → util-DbVG-yZU.js} +3 -3
  278. package/dist/src/{util-DaWTWKBK.js → util-vNmDL5DT.js} +3 -3
  279. package/dist/src/{utils-XiOAgly5.js → utils-CFxO9KGo.js} +2 -2
  280. package/dist/src/{utils-f2-Moju7.js → utils-DEuL4VNB.js} +2 -2
  281. package/dist/src/{utils-Cz9qXqII.cjs → utils-DKw8mrgr.cjs} +3 -3
  282. package/dist/src/{utils-dLokC-eR.js → utils-DOjD4dTC.js} +2 -2
  283. package/dist/tsconfig.tsbuildinfo +1 -1
  284. package/package.json +38 -38
  285. package/dist/src/app/assets/index-BFCZg7hQ.js +0 -439
  286. package/dist/src/app/assets/index-NCn4eVBv.css +0 -1
  287. package/dist/src/app/assets/sync-9qqYcY-B.js +0 -4
  288. package/dist/src/app/assets/vendor-charts-CCl15Imd.js +0 -36
  289. package/dist/src/app/assets/vendor-markdown-0tekx3KX.js +0 -29
  290. package/dist/src/cache-Bbn1Nyrd.cjs +0 -5
  291. package/dist/src/cache-BwsMSda7.js +0 -6
  292. package/dist/src/cloud-DmE0EwsY.js +0 -4
  293. package/dist/src/eval-17JizQIv.js +0 -15
  294. package/dist/src/evalResult-Cqj8pldJ.js +0 -12
  295. package/dist/src/evalResult-DvcJAWJU.cjs +0 -10
  296. package/dist/src/evalResult-Hftn-S_i.js +0 -10
  297. package/dist/src/evaluator-B2CFNt-P.js +0 -36
  298. package/dist/src/fetch-KV5kNASw.js +0 -5
  299. package/dist/src/graders-Bu0H9nXi.js +0 -32
  300. package/dist/src/graders-Cfhkvx-e.js +0 -34
  301. package/dist/src/graders-DClJVpGP.cjs +0 -32
  302. package/dist/src/graders-DcnJsrMO.js +0 -32
  303. package/dist/src/providers-C1rOSHiR.js +0 -32
  304. package/dist/src/providers-CxmDwEFf.cjs +0 -31
  305. package/dist/src/providers-Dodakqr0.js +0 -30
  306. package/dist/src/providers-GIQ2TcsA.js +0 -30
  307. package/dist/src/rubyUtils-BUHu6PhO.js +0 -5
  308. package/dist/src/rubyUtils-CP42kMvq.cjs +0 -4
  309. package/dist/src/server-B1vi21hA.js +0 -7
  310. package/dist/src/server-Cm9Kai_h.cjs +0 -5
  311. package/dist/src/store-BNmZ1KAz.cjs +0 -5
  312. package/dist/src/store-BltJg2cd.js +0 -6
  313. package/dist/src/telemetry-5BCRNBbe.cjs +0 -5
  314. package/dist/src/telemetry-D4W5hboe.js +0 -7
  315. package/dist/src/transform-DTGDnAzW.js +0 -6
  316. package/dist/src/transform-m3qNw4KP.cjs +0 -5
@@ -1,36 +1,36 @@
1
- const require_logger = require("./logger-Cp1GPUjj.cjs");
1
+ const require_logger = require("./logger-D5iKBpu_.cjs");
2
2
  const require_invariant = require("./invariant-kfQ8Bu82.cjs");
3
- const require_esm = require("./esm-CnNt7sI4.cjs");
4
- const require_pythonUtils = require("./pythonUtils-CTU3Y3lw.cjs");
3
+ const require_esm = require("./esm-CipptfDu.cjs");
4
+ const require_pythonUtils = require("./pythonUtils-dAVigVK-.cjs");
5
5
  const require_fileExtensions = require("./fileExtensions-bYh77CN8.cjs");
6
- const require_transform = require("./transform-CzK1Q0zl.cjs");
7
- const require_types = require("./types-LJ0r3wbR.cjs");
8
- const require_util = require("./util-Yz-1aEhW.cjs");
9
- const require_fetch = require("./fetch-BxUk8odA.cjs");
10
- const require_cache = require("./cache-COish3-W.cjs");
11
- const require_createHash = require("./createHash-CfZSc0b4.cjs");
12
- const require_genaiTracer = require("./genaiTracer-DN4dQywX.cjs");
13
- const require_chat = require("./chat-DaqekjFr.cjs");
6
+ const require_transform = require("./transform-ZrG2dvlo.cjs");
7
+ const require_types = require("./types-D8cGDZbL.cjs");
8
+ const require_util = require("./util-CuLo2pMR.cjs");
9
+ const require_fetch = require("./fetch-BnR9wSnm.cjs");
10
+ const require_cache = require("./cache-C5yFZ4gC.cjs");
11
+ const require_createHash = require("./createHash-BYwImsYv.cjs");
12
+ const require_genaiTracer = require("./genaiTracer-BfxrvSUb.cjs");
13
+ const require_chat = require("./chat-CM8qWR3_.cjs");
14
14
  const require_tokenUsageUtils = require("./tokenUsageUtils-bVa1ga6f.cjs");
15
- const require_transform$1 = require("./transform-DOcQeLld.cjs");
16
- const require_messages = require("./messages-1JrJs91T.cjs");
17
- const require_util$1 = require("./util-CchiqXh_.cjs");
18
- const require_responses = require("./responses-tD4Bd4dc.cjs");
19
- const require_openai = require("./openai-Cuif0GEt.cjs");
20
- const require_util$2 = require("./util-Db0a0AFH.cjs");
21
- const require_completion = require("./completion-CDOouNzq.cjs");
22
- const require_accounts = require("./accounts-Bx-x3bmW.cjs");
23
- const require_server = require("./server-B0PPuDw-.cjs");
24
- const require_blobs = require("./blobs-DvS-O6be.cjs");
25
- const require_tables = require("./tables-C7K-XKWp.cjs");
26
- const require_extractor = require("./extractor-DX36oYEv.cjs");
27
- const require_telemetry = require("./telemetry-CbrnxHp_.cjs");
15
+ const require_transform$1 = require("./transform-0BwoBsvO.cjs");
16
+ const require_messages = require("./messages-HJsyEh4o.cjs");
17
+ const require_util$1 = require("./util--9u9UVCt.cjs");
18
+ const require_responses = require("./responses-mo0KQDbu.cjs");
19
+ const require_openai = require("./openai-CoxGAQwn.cjs");
20
+ const require_util$2 = require("./util-CFj4YKIn.cjs");
21
+ const require_completion = require("./completion-DlXUhj5c.cjs");
22
+ const require_accounts = require("./accounts-BPyfpSeU.cjs");
23
+ const require_server = require("./server-BtoCXeXI.cjs");
24
+ const require_blobs = require("./blobs-C6j0bvFz.cjs");
25
+ const require_tables = require("./tables-BdZQEpRz.cjs");
26
+ const require_extractor = require("./extractor-DG3sSfXE.cjs");
27
+ const require_telemetry = require("./telemetry-re627Lre.cjs");
28
28
  const require_text = require("./text-CW1cyrwj.cjs");
29
- const require_store = require("./store-BSc-TF2w.cjs");
30
- const require_base = require("./base-DBtwl2FR.cjs");
31
- const require_image = require("./image-DTedmQPg.cjs");
32
- const require_providerRegistry = require("./providerRegistry-Civky8Ar.cjs");
33
- const require_rubyUtils = require("./rubyUtils-DhCAlxZr.cjs");
29
+ const require_store = require("./store-CLyU7AtI.cjs");
30
+ const require_base = require("./base-BboXIF_0.cjs");
31
+ const require_image = require("./image--F58eEIn.cjs");
32
+ const require_providerRegistry = require("./providerRegistry-BTDgfV5h.cjs");
33
+ const require_rubyUtils = require("./rubyUtils-CGeUtCfW.cjs");
34
34
  let fs = require("fs");
35
35
  fs = require_logger.__toESM(fs);
36
36
  let path = require("path");
@@ -229,6 +229,62 @@ const AZURE_MODELS = [
229
229
  output: 20 / 1e6
230
230
  }
231
231
  },
232
+ {
233
+ id: "gpt-5.4",
234
+ cost: {
235
+ input: 2.5 / 1e6,
236
+ output: 10 / 1e6
237
+ }
238
+ },
239
+ {
240
+ id: "gpt-5.4-2026-03-05",
241
+ cost: {
242
+ input: 2.5 / 1e6,
243
+ output: 10 / 1e6
244
+ }
245
+ },
246
+ {
247
+ id: "gpt-5.4-pro",
248
+ cost: {
249
+ input: 5 / 1e6,
250
+ output: 20 / 1e6
251
+ }
252
+ },
253
+ {
254
+ id: "gpt-5.4-pro-2026-03-05",
255
+ cost: {
256
+ input: 5 / 1e6,
257
+ output: 20 / 1e6
258
+ }
259
+ },
260
+ {
261
+ id: "gpt-5.4-mini",
262
+ cost: {
263
+ input: .4 / 1e6,
264
+ output: 1.6 / 1e6
265
+ }
266
+ },
267
+ {
268
+ id: "gpt-5.4-mini-2026-03-17",
269
+ cost: {
270
+ input: .4 / 1e6,
271
+ output: 1.6 / 1e6
272
+ }
273
+ },
274
+ {
275
+ id: "gpt-5.4-nano",
276
+ cost: {
277
+ input: .1 / 1e6,
278
+ output: .4 / 1e6
279
+ }
280
+ },
281
+ {
282
+ id: "gpt-5.4-nano-2026-03-17",
283
+ cost: {
284
+ input: .1 / 1e6,
285
+ output: .4 / 1e6
286
+ }
287
+ },
232
288
  {
233
289
  id: "gpt-5-mini",
234
290
  cost: {
@@ -2332,7 +2388,7 @@ var AIStudioChatProvider = class extends GoogleGenericProvider {
2332
2388
  rejectedPrediction: 0
2333
2389
  } }
2334
2390
  };
2335
- const completionForCost = data.usageMetadata?.candidatesTokenCount != null ? data.usageMetadata.candidatesTokenCount + (data.usageMetadata?.thoughtsTokenCount ?? 0) : void 0;
2391
+ const completionForCost = data.usageMetadata?.candidatesTokenCount == null ? void 0 : data.usageMetadata.candidatesTokenCount + (data.usageMetadata?.thoughtsTokenCount ?? 0);
2336
2392
  return {
2337
2393
  output,
2338
2394
  tokenUsage,
@@ -2429,7 +2485,7 @@ var AIStudioChatProvider = class extends GoogleGenericProvider {
2429
2485
  rejectedPrediction: 0
2430
2486
  } }
2431
2487
  };
2432
- const completionForCost = data.usageMetadata?.candidatesTokenCount != null ? data.usageMetadata.candidatesTokenCount + (data.usageMetadata?.thoughtsTokenCount ?? 0) : void 0;
2488
+ const completionForCost = data.usageMetadata?.candidatesTokenCount == null ? void 0 : data.usageMetadata.candidatesTokenCount + (data.usageMetadata?.thoughtsTokenCount ?? 0);
2433
2489
  const cost = cached ? void 0 : require_transform$1.calculateGoogleCost(this.modelName, config, data.usageMetadata?.promptTokenCount, completionForCost);
2434
2490
  return {
2435
2491
  output,
@@ -2853,7 +2909,7 @@ var VertexChatProvider = class extends GoogleGenericProvider {
2853
2909
  rejectedPrediction: 0
2854
2910
  } }
2855
2911
  };
2856
- const completionForCost = completionTokenCount != null ? completionTokenCount + (thoughtsTokenCount ?? 0) : void 0;
2912
+ const completionForCost = completionTokenCount == null ? void 0 : completionTokenCount + (thoughtsTokenCount ?? 0);
2857
2913
  const cost = require_transform$1.calculateGoogleCost(this.modelName, config, promptTokenCount, completionForCost, true);
2858
2914
  response = {
2859
2915
  cached: false,
@@ -3336,12 +3392,14 @@ var MistralChatCompletionProvider = class MistralChatCompletionProvider {
3336
3392
  };
3337
3393
  return require_genaiTracer.withGenAISpan(spanContext, () => this.callApiInternal(prompt, context, config), resultExtractor);
3338
3394
  }
3339
- async callApiInternal(prompt, _context, config = {}) {
3395
+ async callApiInternal(prompt, context, config = {}) {
3340
3396
  if (!this.getApiKey()) throw new Error("Mistral API key is not set. Set the MISTRAL_API_KEY environment variable or add `apiKey` or `apiKeyEnvar` to the provider config.");
3341
3397
  const messages = require_fetch.parseChatPrompt(prompt, [{
3342
3398
  role: "user",
3343
3399
  content: prompt
3344
3400
  }]);
3401
+ const loadedTools = config.tools ? await require_util.maybeLoadToolsFromExternalFile(config.tools, context?.vars) : void 0;
3402
+ const hasTools = Array.isArray(loadedTools) ? loadedTools.length > 0 : loadedTools !== void 0;
3345
3403
  const params = {
3346
3404
  model: this.modelName,
3347
3405
  messages,
@@ -3350,6 +3408,9 @@ var MistralChatCompletionProvider = class MistralChatCompletionProvider {
3350
3408
  max_tokens: config?.max_tokens || 1024,
3351
3409
  safe_prompt: config?.safe_prompt || false,
3352
3410
  random_seed: config?.random_seed || null,
3411
+ ...hasTools ? { tools: loadedTools } : {},
3412
+ ...config?.tool_choice ? { tool_choice: config.tool_choice } : {},
3413
+ ..."parallel_tool_calls" in config ? { parallel_tool_calls: Boolean(config.parallel_tool_calls) } : {},
3353
3414
  ...config?.response_format ? { response_format: config.response_format } : {}
3354
3415
  };
3355
3416
  const cacheKey = `mistral:${JSON.stringify(params)}`;
@@ -3390,9 +3451,14 @@ var MistralChatCompletionProvider = class MistralChatCompletionProvider {
3390
3451
  }
3391
3452
  require_logger.logger.debug("Mistral API response", { data });
3392
3453
  if (data.error) return { error: `API call error: ${data.error}` };
3393
- if (!data.choices || !data.choices[0] || !data.choices[0].message.content) return { error: `Malformed response data: ${JSON.stringify(data)}` };
3454
+ if (!data.choices || !data.choices[0] || !data.choices[0].message) return { error: `Malformed response data: ${JSON.stringify(data)}` };
3455
+ const message = data.choices[0].message;
3456
+ let output;
3457
+ if (message.content && message.tool_calls?.length) output = message;
3458
+ else if (message.tool_calls?.length) output = message.tool_calls;
3459
+ else output = message.content;
3394
3460
  const result = {
3395
- output: data.choices[0].message.content,
3461
+ output,
3396
3462
  tokenUsage: getTokenUsage$1(data, cached),
3397
3463
  cached,
3398
3464
  cost: calculateMistralCost(this.modelName, config, data.usage?.prompt_tokens, data.usage?.completion_tokens)
@@ -3723,9 +3789,9 @@ function normalizeEvalConfig(config) {
3723
3789
  const tests = Array.isArray(config.tests) ? config.tests : Array.isArray(config.testCases) ? config.testCases : [];
3724
3790
  const commandLineOptions = {
3725
3791
  ...isRecord(config.commandLineOptions) ? config.commandLineOptions : {},
3726
- ...config.maxConcurrency != null ? { maxConcurrency: config.maxConcurrency } : {},
3727
- ...config.delay != null ? { delay: config.delay } : {},
3728
- ...config.verbose != null ? { verbose: config.verbose } : {}
3792
+ ...config.maxConcurrency == null ? {} : { maxConcurrency: config.maxConcurrency },
3793
+ ...config.delay == null ? {} : { delay: config.delay },
3794
+ ...config.verbose == null ? {} : { verbose: config.verbose }
3729
3795
  };
3730
3796
  const normalizedConfig = {
3731
3797
  ...config,
@@ -5355,7 +5421,7 @@ async function loadRedteamProvider({ provider, jsonOnly = false, preferSmallMode
5355
5421
  ret = redteamProvider;
5356
5422
  } else if (typeof redteamProvider === "string" || require_types.isProviderOptions(redteamProvider)) {
5357
5423
  require_logger.logger.debug(`Loading ${purpose} provider`, { provider: redteamProvider });
5358
- ret = (await (await Promise.resolve().then(() => require("./providers-CxmDwEFf.cjs"))).loadApiProviders([redteamProvider]))[0];
5424
+ ret = (await (await Promise.resolve().then(() => require("./providers-D-FnDg8k.cjs"))).loadApiProviders([redteamProvider]))[0];
5359
5425
  } else {
5360
5426
  const defaultModel = preferSmallModel ? ATTACKER_MODEL_SMALL : ATTACKER_MODEL;
5361
5427
  require_logger.logger.debug(`Using default ${purpose} provider: ${defaultModel}`);
@@ -5642,7 +5708,7 @@ async function externalizeResponseForRedteamHistory(response, context) {
5642
5708
  */
5643
5709
  async function tryUnblocking({ messages, lastResponse, goal, purpose }) {
5644
5710
  try {
5645
- const { checkServerFeatureSupport } = await Promise.resolve().then(() => require("./server-Cm9Kai_h.cjs"));
5711
+ const { checkServerFeatureSupport } = await Promise.resolve().then(() => require("./server-DJTKu9IR.cjs"));
5646
5712
  const supportsUnblocking = await checkServerFeatureSupport("blocking-question-analysis", "2025-06-16T14:49:11-07:00");
5647
5713
  if (!require_logger.getEnvBool("PROMPTFOO_ENABLE_UNBLOCKING")) {
5648
5714
  require_logger.logger.debug("[Unblocking] Disabled by default (set PROMPTFOO_ENABLE_UNBLOCKING=true to enable)");
@@ -9551,7 +9617,15 @@ async function generateCompositePrompts(testCases, injectVar, config) {
9551
9617
  email: require_accounts.getUserEmail(),
9552
9618
  ...config.n && { n: config.n },
9553
9619
  ...config.modelFamily && { modelFamily: config.modelFamily },
9554
- ...inputs && { inputs }
9620
+ ...inputs && { inputs },
9621
+ ...config.techniques && { techniques: config.techniques },
9622
+ ...config.evasions && { evasions: config.evasions },
9623
+ ...config.alwaysIncludeTechniques && { alwaysIncludeTechniques: config.alwaysIncludeTechniques },
9624
+ ...config.compositionOrder && { compositionOrder: config.compositionOrder },
9625
+ ...config.combinationMode && { combinationMode: config.combinationMode },
9626
+ ...config.includeEvasionGuidance != null && { includeEvasionGuidance: config.includeEvasionGuidance },
9627
+ ...config.evasionGuidance && { evasionGuidance: config.evasionGuidance },
9628
+ ...config.targetContext && { targetContext: config.targetContext }
9555
9629
  };
9556
9630
  const { data } = await require_cache.fetchWithCache(require_server.getRemoteGenerationUrl(), {
9557
9631
  method: "POST",
@@ -10682,7 +10756,7 @@ var CrescendoProvider = class {
10682
10756
  });
10683
10757
  let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
10684
10758
  if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
10685
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
10759
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
10686
10760
  let graderPassed;
10687
10761
  const additionalRubric = getGoalRubric(this.userGoal);
10688
10762
  while (roundNum < this.maxTurns) try {
@@ -10788,18 +10862,7 @@ var CrescendoProvider = class {
10788
10862
  if (grader) {
10789
10863
  const gradingTraceSummary = tracingOptions.includeInGrading ? response.traceSummary ?? (response.traceContext ? formatTraceSummary(response.traceContext) : void 0) : void 0;
10790
10864
  let gradingContext;
10791
- if (lastResponse.metadata?.wasExfiltrated !== void 0) {
10792
- require_logger.logger.debug("[Crescendo] Using exfil data from provider response metadata");
10793
- gradingContext = {
10794
- ...tracingOptions.includeInGrading ? {
10795
- traceContext: response.traceContext,
10796
- traceSummary: gradingTraceSummary
10797
- } : {},
10798
- wasExfiltrated: Boolean(lastResponse.metadata.wasExfiltrated),
10799
- exfilCount: Number(lastResponse.metadata.exfilCount) || 0,
10800
- exfilRecords: []
10801
- };
10802
- } else {
10865
+ if (lastResponse.metadata?.wasExfiltrated === void 0) {
10803
10866
  const webPageUuid = test.metadata?.webPageUuid;
10804
10867
  if (webPageUuid) {
10805
10868
  const evalId = context?.evaluationId ?? test.metadata?.evaluationId;
@@ -10818,6 +10881,17 @@ var CrescendoProvider = class {
10818
10881
  exfilRecords: exfilData.exfilRecords
10819
10882
  };
10820
10883
  }
10884
+ } else {
10885
+ require_logger.logger.debug("[Crescendo] Using exfil data from provider response metadata");
10886
+ gradingContext = {
10887
+ ...tracingOptions.includeInGrading ? {
10888
+ traceContext: response.traceContext,
10889
+ traceSummary: gradingTraceSummary
10890
+ } : {},
10891
+ wasExfiltrated: Boolean(lastResponse.metadata.wasExfiltrated),
10892
+ exfilCount: Number(lastResponse.metadata.exfilCount) || 0,
10893
+ exfilRecords: []
10894
+ };
10821
10895
  }
10822
10896
  if (!gradingContext && tracingOptions.includeInGrading) gradingContext = {
10823
10897
  traceContext: response.traceContext,
@@ -11373,7 +11447,7 @@ var CustomProvider = class {
11373
11447
  let lastTransformResult;
11374
11448
  let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
11375
11449
  if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
11376
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
11450
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
11377
11451
  let graderPassed;
11378
11452
  let storedGraderResult;
11379
11453
  const additionalRubric = getGoalRubric(this.userGoal);
@@ -11871,7 +11945,7 @@ var GoatProvider = class {
11871
11945
  let assertToUse;
11872
11946
  let graderPassed;
11873
11947
  let storedGraderResult;
11874
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
11948
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
11875
11949
  let test;
11876
11950
  if (context?.test) {
11877
11951
  test = context?.test;
@@ -12154,18 +12228,7 @@ var GoatProvider = class {
12154
12228
  const grader = assertToUse ? getGraderById(assertToUse.type) : void 0;
12155
12229
  if (test && grader && finalOutput) {
12156
12230
  let gradingContext;
12157
- if (finalResponse.metadata?.wasExfiltrated !== void 0) {
12158
- require_logger.logger.debug("[GOAT] Using exfil data from provider response metadata");
12159
- gradingContext = {
12160
- ...tracingOptions.includeInGrading ? {
12161
- traceContext: targetResponse.traceContext,
12162
- traceSummary: gradingTraceSummary
12163
- } : {},
12164
- wasExfiltrated: Boolean(finalResponse.metadata.wasExfiltrated),
12165
- exfilCount: Number(finalResponse.metadata.exfilCount) || 0,
12166
- exfilRecords: []
12167
- };
12168
- } else {
12231
+ if (finalResponse.metadata?.wasExfiltrated === void 0) {
12169
12232
  const webPageUuid = test.metadata?.webPageUuid;
12170
12233
  if (webPageUuid) {
12171
12234
  const evalId = context?.evaluationId ?? test.metadata?.evaluationId;
@@ -12184,6 +12247,17 @@ var GoatProvider = class {
12184
12247
  exfilRecords: exfilData.exfilRecords
12185
12248
  };
12186
12249
  }
12250
+ } else {
12251
+ require_logger.logger.debug("[GOAT] Using exfil data from provider response metadata");
12252
+ gradingContext = {
12253
+ ...tracingOptions.includeInGrading ? {
12254
+ traceContext: targetResponse.traceContext,
12255
+ traceSummary: gradingTraceSummary
12256
+ } : {},
12257
+ wasExfiltrated: Boolean(finalResponse.metadata.wasExfiltrated),
12258
+ exfilCount: Number(finalResponse.metadata.exfilCount) || 0,
12259
+ exfilRecords: []
12260
+ };
12187
12261
  }
12188
12262
  if (!gradingContext && tracingOptions.includeInGrading) gradingContext = {
12189
12263
  traceContext: targetResponse.traceContext,
@@ -12344,7 +12418,7 @@ var HydraProvider = class {
12344
12418
  let lastTransformResult;
12345
12419
  let lastTransformDisplayVars;
12346
12420
  let lastFinalAttackPrompt;
12347
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
12421
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
12348
12422
  let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
12349
12423
  if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
12350
12424
  let previousTraceSummary;
@@ -13198,7 +13272,7 @@ async function runRedteamConversation$2({ context, filters, injectVar, numIterat
13198
13272
  if (sessionId) sessionIds.push(sessionId);
13199
13273
  let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
13200
13274
  if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
13201
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
13275
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
13202
13276
  if (test && assertToUse) {
13203
13277
  const grader = getGraderById(assertToUse.type);
13204
13278
  if (grader) {
@@ -14025,7 +14099,7 @@ async function runMetaAgentRedteam({ context, filters, injectVar, numIterations,
14025
14099
  previousTraceSummary = attackTraceSummary;
14026
14100
  let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
14027
14101
  if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
14028
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
14102
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
14029
14103
  if (test && assertToUse) {
14030
14104
  const grader = getGraderById(assertToUse.type);
14031
14105
  if (grader) {
@@ -14609,7 +14683,7 @@ async function runRedteamConversation({ context, filters, injectVar, options, pr
14609
14683
  noImprovementCount++;
14610
14684
  if (noImprovementCount % 5 === 0) require_logger.logger.debug(`[Depth ${depth}, Attempt ${attempts}] No improvement for ${noImprovementCount} consecutive iterations. Max score: ${maxScore}`);
14611
14685
  }
14612
- const { getGraderById } = await Promise.resolve().then(() => require("./graders-DClJVpGP.cjs"));
14686
+ const { getGraderById } = await Promise.resolve().then(() => require("./graders-DjCXfj0l.cjs"));
14613
14687
  let graderPassed;
14614
14688
  let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
14615
14689
  if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
@@ -15283,7 +15357,7 @@ var AI21ChatCompletionProvider = class AI21ChatCompletionProvider {
15283
15357
  messages,
15284
15358
  temperature: config?.temperature ?? .1,
15285
15359
  top_p: config?.top_p || 1,
15286
- max_tokens: config?.max_tokens || 1024,
15360
+ max_tokens: config?.max_tokens ?? 1024,
15287
15361
  n: 1,
15288
15362
  stop: [],
15289
15363
  response_format: config.response_format || { type: "text" }
@@ -15464,7 +15538,7 @@ var AnthropicCompletionProvider = class extends require_messages.AnthropicGeneri
15464
15538
  const params = {
15465
15539
  model: this.modelName,
15466
15540
  prompt: `${_anthropic_ai_sdk.default.HUMAN_PROMPT} ${prompt} ${_anthropic_ai_sdk.default.AI_PROMPT}`,
15467
- max_tokens_to_sample: this.config?.max_tokens_to_sample || require_logger.getEnvInt("ANTHROPIC_MAX_TOKENS", 1024),
15541
+ max_tokens_to_sample: this.config?.max_tokens_to_sample ?? require_logger.getEnvInt("ANTHROPIC_MAX_TOKENS", 1024),
15468
15542
  temperature: this.config.temperature ?? require_logger.getEnvFloat("ANTHROPIC_TEMPERATURE", 0),
15469
15543
  stop_sequences: stop
15470
15544
  };
@@ -16003,61 +16077,65 @@ var AzureCompletionProvider = class extends AzureGenericProvider {
16003
16077
  var AzureFoundryAgentProvider = class extends AzureGenericProvider {
16004
16078
  assistantConfig;
16005
16079
  loadedFunctionCallbacks = {};
16080
+ processor;
16006
16081
  projectClient = null;
16007
16082
  projectUrl;
16083
+ resolvedAgent = null;
16084
+ warnedUnsupportedFields = /* @__PURE__ */ new Set();
16008
16085
  constructor(deploymentName, options = {}) {
16009
16086
  super(deploymentName, options);
16010
16087
  this.assistantConfig = options.config || {};
16011
16088
  this.projectUrl = options.config?.projectUrl || process.env.AZURE_AI_PROJECT_URL || "";
16012
16089
  if (!this.projectUrl) throw new Error("Azure AI Project URL must be provided via projectUrl option or AZURE_AI_PROJECT_URL environment variable");
16090
+ this.processor = new require_responses.ResponsesProcessor({
16091
+ modelName: this.assistantConfig.modelName || deploymentName,
16092
+ providerType: "azure",
16093
+ functionCallbackHandler: new require_responses.FunctionCallbackHandler(),
16094
+ costCalculator: (_modelName, usage, requestConfig) => calculateAzureCost(requestConfig?.model || this.assistantConfig.modelName || this.deploymentName, usage) ?? 0
16095
+ });
16013
16096
  if (this.assistantConfig.functionToolCallbacks) this.preloadFunctionCallbacks();
16014
16097
  }
16015
- /**
16016
- * Initialize the Azure AI Project client
16017
- */
16018
16098
  async initializeClient() {
16019
16099
  if (this.projectClient) return this.projectClient;
16020
16100
  try {
16021
16101
  const { AIProjectClient } = await import("@azure/ai-projects");
16022
16102
  const { DefaultAzureCredential } = await import("@azure/identity");
16023
- this.projectClient = new AIProjectClient(this.projectUrl, new DefaultAzureCredential());
16103
+ const projectClient = new AIProjectClient(this.projectUrl, new DefaultAzureCredential());
16104
+ this.projectClient = projectClient;
16024
16105
  require_logger.logger.debug("Azure AI Project client initialized successfully");
16025
- return this.projectClient;
16106
+ return projectClient;
16026
16107
  } catch (error) {
16027
- require_logger.logger.error(`Failed to initialize Azure AI Project client: ${error instanceof Error ? error.message : String(error)}`);
16028
- throw new Error(`Failed to initialize Azure AI Project client: ${error instanceof Error ? error.message : String(error)}`);
16108
+ const errorMessage = error instanceof Error ? error.message : String(error);
16109
+ require_logger.logger.error(`Failed to initialize Azure AI Project client: ${errorMessage}`);
16110
+ throw new Error(`Failed to initialize Azure AI Project client: ${errorMessage}`);
16029
16111
  }
16030
16112
  }
16031
- /**
16032
- * Preloads all function callbacks to ensure they're ready when needed
16033
- */
16113
+ async resolveAgent(client) {
16114
+ if (this.resolvedAgent) return this.resolvedAgent;
16115
+ try {
16116
+ const agent = await client.agents.get(this.deploymentName);
16117
+ this.resolvedAgent = agent;
16118
+ return agent;
16119
+ } catch (error) {
16120
+ require_logger.logger.debug(`[AzureFoundryAgentProvider] Direct agent lookup failed for '${this.deploymentName}', falling back to list lookup`, { error: error instanceof Error ? error.message : String(error) });
16121
+ }
16122
+ for await (const agent of client.agents.list()) if (agent.id === this.deploymentName || agent.name === this.deploymentName) {
16123
+ this.resolvedAgent = agent;
16124
+ return agent;
16125
+ }
16126
+ throw new Error(`Azure Foundry agent '${this.deploymentName}' was not found by name or legacy ID in project '${this.projectUrl}'. The Azure AI Projects v2 SDK resolves agents by name. Update the provider to use azure:foundry-agent:<agent-name>, or keep using the legacy ID format and ensure the agent still exists in this project.`);
16127
+ }
16034
16128
  async preloadFunctionCallbacks() {
16035
16129
  if (!this.assistantConfig.functionToolCallbacks) return;
16036
16130
  const callbacks = this.assistantConfig.functionToolCallbacks;
16037
16131
  for (const [name, callback] of Object.entries(callbacks)) try {
16038
- if (typeof callback === "string") {
16039
- const callbackStr = callback;
16040
- if (callbackStr.startsWith("file://")) {
16041
- const fn = await this.loadExternalFunction(callbackStr);
16042
- this.loadedFunctionCallbacks[name] = fn;
16043
- require_logger.logger.debug(`Successfully preloaded function callback '${name}' from file`);
16044
- } else {
16045
- this.loadedFunctionCallbacks[name] = new Function("return " + callbackStr)();
16046
- require_logger.logger.debug(`Successfully preloaded inline function callback '${name}'`);
16047
- }
16048
- } else if (typeof callback === "function") {
16049
- this.loadedFunctionCallbacks[name] = callback;
16050
- require_logger.logger.debug(`Successfully stored function callback '${name}'`);
16051
- }
16132
+ if (typeof callback === "string") if (callback.startsWith("file://")) this.loadedFunctionCallbacks[name] = await this.loadExternalFunction(callback);
16133
+ else this.loadedFunctionCallbacks[name] = new Function("return " + callback)();
16134
+ else if (typeof callback === "function") this.loadedFunctionCallbacks[name] = callback;
16052
16135
  } catch (error) {
16053
16136
  require_logger.logger.error(`Failed to preload function callback '${name}': ${error}`);
16054
16137
  }
16055
16138
  }
16056
- /**
16057
- * Loads a function from an external file
16058
- * @param fileRef The file reference in the format 'file://path/to/file:functionName'
16059
- * @returns The loaded function
16060
- */
16061
16139
  async loadExternalFunction(fileRef) {
16062
16140
  let filePath = fileRef.slice(7);
16063
16141
  let functionName;
@@ -16066,11 +16144,9 @@ var AzureFoundryAgentProvider = class extends AzureGenericProvider {
16066
16144
  if (splits[0] && require_fileExtensions.isJavascriptFile(splits[0])) [filePath, functionName] = splits;
16067
16145
  }
16068
16146
  try {
16069
- const resolvedPath = path.default.resolve(require_logger.state.basePath || "", filePath);
16070
- require_logger.logger.debug(`Loading function from ${resolvedPath}${functionName ? `:${functionName}` : ""}`);
16071
- const requiredModule = await require_esm.importModule(resolvedPath, functionName);
16147
+ const requiredModule = await require_esm.importModule(path.default.resolve(require_logger.state.basePath || "", filePath), functionName);
16072
16148
  if (typeof requiredModule === "function") return requiredModule;
16073
- else if (requiredModule && typeof requiredModule === "object" && functionName && functionName in requiredModule) {
16149
+ if (requiredModule && typeof requiredModule === "object" && functionName && functionName in requiredModule) {
16074
16150
  const fn = requiredModule[functionName];
16075
16151
  if (typeof fn === "function") return fn;
16076
16152
  }
@@ -16079,139 +16155,197 @@ var AzureFoundryAgentProvider = class extends AzureGenericProvider {
16079
16155
  throw new Error(`Error loading function from ${filePath}: ${error.message || String(error)}`);
16080
16156
  }
16081
16157
  }
16082
- /**
16083
- * Executes a function callback with proper error handling
16084
- */
16085
- async executeFunctionCallback(functionName, args, context) {
16158
+ async executeFunctionCallback(functionName, args, context, callbacks) {
16086
16159
  try {
16087
16160
  let callback = this.loadedFunctionCallbacks[functionName];
16161
+ const effectiveCallbacks = callbacks || this.assistantConfig.functionToolCallbacks;
16088
16162
  if (!callback) {
16089
- const callbackRef = this.assistantConfig.functionToolCallbacks?.[functionName];
16090
- if (callbackRef && typeof callbackRef === "string") {
16091
- const callbackStr = callbackRef;
16092
- if (callbackStr.startsWith("file://")) callback = await this.loadExternalFunction(callbackStr);
16093
- else callback = new Function("return " + callbackStr)();
16094
- this.loadedFunctionCallbacks[functionName] = callback;
16095
- } else if (typeof callbackRef === "function") {
16096
- callback = callbackRef;
16097
- this.loadedFunctionCallbacks[functionName] = callback;
16098
- }
16163
+ const callbackRef = effectiveCallbacks?.[functionName];
16164
+ if (callbackRef && typeof callbackRef === "string") if (callbackRef.startsWith("file://")) callback = await this.loadExternalFunction(callbackRef);
16165
+ else callback = new Function("return " + callbackRef)();
16166
+ else if (typeof callbackRef === "function") callback = callbackRef;
16167
+ if (callback) this.loadedFunctionCallbacks[functionName] = callback;
16099
16168
  }
16100
16169
  if (!callback) throw new Error(`No callback found for function '${functionName}'`);
16101
- require_logger.logger.debug(`Executing function '${functionName}' with args: ${args}${context ? ` and context: ${JSON.stringify(context)}` : ""}`);
16102
16170
  const result = await callback(args, context);
16103
16171
  if (result === void 0 || result === null) return "";
16104
- else if (typeof result === "object") try {
16105
- return JSON.stringify(result);
16106
- } catch (error) {
16107
- require_logger.logger.warn(`Error stringifying result from function '${functionName}': ${error}`);
16108
- return String(result);
16109
- }
16110
- else return String(result);
16172
+ if (typeof result === "object") return JSON.stringify(result);
16173
+ return String(result);
16111
16174
  } catch (error) {
16112
16175
  require_logger.logger.error(`Error executing function '${functionName}': ${error.message || String(error)}`);
16113
16176
  return JSON.stringify({ error: `Error in ${functionName}: ${error.message || String(error)}` });
16114
16177
  }
16115
16178
  }
16179
+ parsePromptInput(prompt) {
16180
+ try {
16181
+ const parsedJson = JSON.parse(prompt);
16182
+ if (Array.isArray(parsedJson)) return parsedJson;
16183
+ } catch {}
16184
+ return [{
16185
+ type: "message",
16186
+ role: "user",
16187
+ content: prompt
16188
+ }];
16189
+ }
16190
+ warnForUnsupportedConfig(config) {
16191
+ const unsupportedFields = [
16192
+ config.frequency_penalty === void 0 ? null : "frequency_penalty",
16193
+ config.presence_penalty === void 0 ? null : "presence_penalty",
16194
+ config.retryOptions ? "retryOptions" : null,
16195
+ config.seed === void 0 ? null : "seed",
16196
+ config.stop?.length ? "stop" : null,
16197
+ config.timeoutMs === void 0 ? null : "timeoutMs",
16198
+ config.tool_resources ? "tool_resources" : null
16199
+ ].filter(Boolean);
16200
+ if (unsupportedFields.length === 0) return;
16201
+ const warningKey = unsupportedFields.sort().join(",");
16202
+ if (this.warnedUnsupportedFields.has(warningKey)) return;
16203
+ this.warnedUnsupportedFields.add(warningKey);
16204
+ require_logger.logger.warn(`[AzureFoundryAgentProvider] The Azure AI Projects v2 agent runtime ignores these per-request settings: ${unsupportedFields.join(", ")}. Configure them on the agent itself, or pass supported Responses API fields instead.`);
16205
+ }
16206
+ async buildResponsesBody(prompt, context) {
16207
+ const config = {
16208
+ ...this.assistantConfig,
16209
+ ...context?.prompt?.config
16210
+ };
16211
+ this.warnForUnsupportedConfig(config);
16212
+ const responseFormat = require_util.maybeLoadResponseFormatFromExternalFile(config.response_format, context?.vars);
16213
+ const loadedTools = config.tools ? await require_util.maybeLoadToolsFromExternalFile(config.tools, context?.vars) : void 0;
16214
+ const reasoningEffort = config.reasoning_effort ? require_util.renderVarsInObject(config.reasoning_effort, context?.vars) : void 0;
16215
+ const maxOutputTokens = config.max_output_tokens ?? config.max_completion_tokens ?? config.max_tokens;
16216
+ let text;
16217
+ if (responseFormat?.type === "json_object") text = { format: { type: "json_object" } };
16218
+ else if (responseFormat?.type === "json_schema") {
16219
+ const schema = responseFormat.schema || responseFormat.json_schema?.schema;
16220
+ text = { format: {
16221
+ type: "json_schema",
16222
+ name: responseFormat.json_schema?.name || responseFormat.name || "response_schema",
16223
+ schema,
16224
+ strict: responseFormat.json_schema?.strict ?? responseFormat.strict ?? true
16225
+ } };
16226
+ }
16227
+ if (config.verbosity) text = {
16228
+ ...text || {},
16229
+ verbosity: config.verbosity
16230
+ };
16231
+ return {
16232
+ body: {
16233
+ input: this.parsePromptInput(prompt),
16234
+ ...config.instructions ? { instructions: config.instructions } : {},
16235
+ ...config.metadata ? { metadata: config.metadata } : {},
16236
+ ...config.modelName ? { model: config.modelName } : {},
16237
+ ...maxOutputTokens === void 0 ? {} : { max_output_tokens: maxOutputTokens },
16238
+ ...reasoningEffort ? { reasoning: { effort: reasoningEffort } } : {},
16239
+ ...config.temperature === void 0 ? {} : { temperature: config.temperature },
16240
+ ...config.top_p === void 0 ? {} : { top_p: config.top_p },
16241
+ ...config.tool_choice ? { tool_choice: config.tool_choice } : {},
16242
+ ...loadedTools ? { tools: loadedTools } : {},
16243
+ ...text ? { text } : {},
16244
+ ...config.passthrough || {}
16245
+ },
16246
+ effectiveConfig: {
16247
+ ...config,
16248
+ response_format: responseFormat,
16249
+ tools: loadedTools
16250
+ }
16251
+ };
16252
+ }
16253
+ getFunctionCalls(response) {
16254
+ return (response.output || []).filter((item) => {
16255
+ return item?.type === "function_call" && typeof item.id === "string" && typeof item.call_id === "string" && typeof item.name === "string" && typeof item.arguments === "string";
16256
+ });
16257
+ }
16258
+ getCallableFunctionCalls(response, callbacks) {
16259
+ const functionCalls = this.getFunctionCalls(response);
16260
+ if (functionCalls.length === 0 || !callbacks || Object.keys(callbacks).length === 0) return [];
16261
+ const missingCallbacks = functionCalls.filter((call) => !(call.name in callbacks));
16262
+ if (missingCallbacks.length > 0) {
16263
+ require_logger.logger.debug(`[AzureFoundryAgentProvider] Returning unresolved function calls because callbacks are missing for: ${missingCallbacks.map((call) => call.name).join(", ")}`);
16264
+ return [];
16265
+ }
16266
+ return functionCalls;
16267
+ }
16268
+ async buildFunctionCallOutputs(functionCalls, response, agent, callbacks) {
16269
+ const callbackContext = {
16270
+ threadId: response.conversation?.id || response.id,
16271
+ runId: response.id,
16272
+ assistantId: agent.id,
16273
+ provider: "azure-foundry"
16274
+ };
16275
+ return Promise.all(functionCalls.map(async (call) => ({
16276
+ type: "function_call_output",
16277
+ call_id: call.call_id,
16278
+ output: await this.executeFunctionCallback(call.name, call.arguments, callbackContext, callbacks)
16279
+ })));
16280
+ }
16281
+ getAgentReference(agent) {
16282
+ return { body: { agent: {
16283
+ name: agent.name,
16284
+ type: "agent_reference"
16285
+ } } };
16286
+ }
16287
+ async processResponse(response, effectiveConfig) {
16288
+ const result = await this.processor.processResponseOutput(response, effectiveConfig, false);
16289
+ if (!result.error) return result;
16290
+ if (response.output_text) {
16291
+ require_logger.logger.debug(`[AzureFoundryAgentProvider] ResponsesProcessor returned an error, falling back to output_text`, { processorError: result.error });
16292
+ return {
16293
+ ...result,
16294
+ error: void 0,
16295
+ output: response.output_text,
16296
+ raw: response
16297
+ };
16298
+ }
16299
+ return result;
16300
+ }
16116
16301
  async callApi(prompt, context, _callApiOptions) {
16117
- const cacheKey = `azure_foundry_agent:${this.deploymentName}:${JSON.stringify({
16118
- frequency_penalty: this.assistantConfig.frequency_penalty,
16119
- instructions: this.assistantConfig.instructions,
16120
- max_completion_tokens: this.assistantConfig.max_completion_tokens,
16121
- max_tokens: this.assistantConfig.max_tokens,
16122
- model: this.assistantConfig.modelName,
16123
- presence_penalty: this.assistantConfig.presence_penalty,
16124
- prompt,
16125
- response_format: this.assistantConfig.response_format,
16126
- seed: this.assistantConfig.seed,
16127
- stop: this.assistantConfig.stop,
16128
- temperature: this.assistantConfig.temperature,
16129
- tool_choice: this.assistantConfig.tool_choice,
16130
- tool_resources: this.assistantConfig.tool_resources,
16131
- tools: JSON.stringify(await require_util.maybeLoadToolsFromExternalFile(this.assistantConfig.tools, context?.vars)),
16132
- top_p: this.assistantConfig.top_p
16133
- })}`;
16302
+ const { body, effectiveConfig } = await this.buildResponsesBody(prompt, context);
16303
+ const cacheKey = `azure_foundry_agent:${this.deploymentName}:${JSON.stringify(body)}`;
16134
16304
  if (require_cache.isCacheEnabled()) try {
16135
16305
  const cachedResult = await (await require_cache.getCache()).get(cacheKey);
16136
16306
  if (cachedResult) {
16137
- require_logger.logger.debug(`Cache hit for agent prompt: ${prompt.substring(0, 50)}...`);
16307
+ require_logger.logger.debug(`Cache hit for Foundry agent prompt: ${prompt.substring(0, 50)}...`);
16138
16308
  return {
16139
16309
  ...cachedResult,
16140
16310
  cached: true
16141
16311
  };
16142
16312
  }
16143
- } catch (err) {
16144
- require_logger.logger.warn(`Error checking cache: ${err}`);
16313
+ } catch (error) {
16314
+ require_logger.logger.warn(`Error checking cache for Azure Foundry agent response: ${error}`);
16145
16315
  }
16146
16316
  try {
16147
16317
  const client = await this.initializeClient();
16148
- if (!client) throw new Error("Failed to initialize Azure AI Project client");
16149
- const agent = await client.agents.getAgent(this.deploymentName);
16150
- require_logger.logger.debug(`Retrieved agent: ${agent.name}`);
16151
- const thread = await client.agents.threads.create();
16152
- require_logger.logger.debug(`Created thread: ${thread.id}`);
16153
- const message = await client.agents.messages.create(thread.id, "user", prompt);
16154
- require_logger.logger.debug(`Created message: ${message.id}`);
16155
- const runOptions = {};
16156
- if (this.assistantConfig.temperature !== void 0) runOptions.temperature = this.assistantConfig.temperature;
16157
- if (this.assistantConfig.top_p !== void 0) runOptions.top_p = this.assistantConfig.top_p;
16158
- if (this.assistantConfig.frequency_penalty !== void 0) runOptions.frequency_penalty = this.assistantConfig.frequency_penalty;
16159
- if (this.assistantConfig.presence_penalty !== void 0) runOptions.presence_penalty = this.assistantConfig.presence_penalty;
16160
- if (this.assistantConfig.max_completion_tokens !== void 0) runOptions.max_completion_tokens = this.assistantConfig.max_completion_tokens;
16161
- if (this.assistantConfig.max_tokens !== void 0) runOptions.max_tokens = this.assistantConfig.max_tokens;
16162
- if (this.assistantConfig.response_format) runOptions.response_format = this.assistantConfig.response_format;
16163
- if (this.assistantConfig.stop) runOptions.stop = this.assistantConfig.stop;
16164
- if (this.assistantConfig.seed !== void 0) runOptions.seed = this.assistantConfig.seed;
16165
- if (this.assistantConfig.tool_resources) runOptions.tool_resources = this.assistantConfig.tool_resources;
16166
- if (this.assistantConfig.tool_choice) runOptions.tool_choice = this.assistantConfig.tool_choice;
16167
- if (this.assistantConfig.tools) {
16168
- const loadedTools = await require_util.maybeLoadToolsFromExternalFile(this.assistantConfig.tools, context?.vars);
16169
- if (loadedTools !== void 0) runOptions.tools = loadedTools;
16170
- }
16171
- if (this.assistantConfig.modelName) runOptions.model = this.assistantConfig.modelName;
16172
- if (this.assistantConfig.instructions) runOptions.instructions = this.assistantConfig.instructions;
16173
- const run = await client.agents.runs.create(thread.id, agent.id, runOptions);
16174
- require_logger.logger.debug(`Created run: ${run.id}`);
16175
- let result;
16176
- if (this.assistantConfig.functionToolCallbacks && Object.keys(this.assistantConfig.functionToolCallbacks).length > 0) result = await this.pollRunWithToolCallHandling(client, thread.id, run);
16177
- else {
16178
- const completedRun = await this.pollRun(client, thread.id, run.id);
16179
- if (completedRun.status === "completed") result = await this.processCompletedRun(client, thread.id, completedRun);
16180
- else if (completedRun.lastError) {
16181
- const errorCode = completedRun.lastError.code || "";
16182
- const errorMessage = completedRun.lastError.message || "";
16183
- if (errorCode === "content_filter" || this.isContentFilterError(errorMessage)) {
16184
- const lowerErrorMessage = errorMessage.toLowerCase();
16185
- const isInputFiltered = lowerErrorMessage.includes("prompt") || lowerErrorMessage.includes("input");
16186
- const isOutputFiltered = lowerErrorMessage.includes("output") || lowerErrorMessage.includes("response");
16187
- result = {
16188
- output: "The generated content was filtered due to triggering Azure OpenAI Service's content filtering system.",
16189
- guardrails: {
16190
- flagged: true,
16191
- flaggedInput: isInputFiltered,
16192
- flaggedOutput: !isInputFiltered && (isOutputFiltered || !isOutputFiltered)
16193
- }
16194
- };
16195
- } else result = { error: `Thread run failed: ${errorCode} - ${errorMessage}` };
16196
- } else result = { error: `Thread run failed with status: ${completedRun.status}` };
16197
- }
16318
+ const agent = await this.resolveAgent(client);
16319
+ const openAIClient = client.getOpenAIClient();
16320
+ const responseOptions = this.getAgentReference(agent);
16321
+ const maxLoopTimeMs = this.assistantConfig.maxPollTimeMs || 3e5;
16322
+ const startTime = Date.now();
16323
+ let response = await openAIClient.responses.create(body, responseOptions);
16324
+ while (Date.now() - startTime <= maxLoopTimeMs) {
16325
+ const functionCalls = this.getCallableFunctionCalls(response, effectiveConfig.functionToolCallbacks);
16326
+ if (functionCalls.length === 0) break;
16327
+ const outputs = await this.buildFunctionCallOutputs(functionCalls, response, agent, effectiveConfig.functionToolCallbacks);
16328
+ require_logger.logger.debug(`[AzureFoundryAgentProvider] Submitting ${outputs.length} function_call_output item(s)`);
16329
+ response = await openAIClient.responses.create({
16330
+ input: outputs,
16331
+ previous_response_id: response.id
16332
+ }, responseOptions);
16333
+ }
16334
+ if (Date.now() - startTime > maxLoopTimeMs) return { error: `Azure Foundry agent tool-calling loop timed out after ${maxLoopTimeMs}ms.` };
16335
+ const result = await this.processResponse(response, effectiveConfig);
16198
16336
  if (require_cache.isCacheEnabled() && !result.error) try {
16199
16337
  await (await require_cache.getCache()).set(cacheKey, result);
16200
- require_logger.logger.debug(`Cached agent response for prompt: ${prompt.substring(0, 50)}...`);
16201
- } catch (err) {
16202
- require_logger.logger.warn(`Error caching result: ${err}`);
16338
+ } catch (error) {
16339
+ require_logger.logger.warn(`Error caching Azure Foundry agent response: ${error}`);
16203
16340
  }
16204
16341
  return result;
16205
- } catch (err) {
16206
- require_logger.logger.error(`Error in Azure Foundry Agent API call: ${err}`);
16207
- return this.formatError(err);
16342
+ } catch (error) {
16343
+ require_logger.logger.error(`Error in Azure Foundry Agent API call: ${error}`);
16344
+ return this.formatError(error);
16208
16345
  }
16209
16346
  }
16210
- /**
16211
- * Format error responses consistently
16212
- */
16213
- formatError(err) {
16214
- const errorMessage = err.message || String(err);
16347
+ formatError(error) {
16348
+ const errorMessage = error instanceof Error ? error.message : String(error);
16215
16349
  if (this.isContentFilterError(errorMessage)) {
16216
16350
  const lowerErrorMessage = errorMessage.toLowerCase();
16217
16351
  const isInputFiltered = lowerErrorMessage.includes("prompt") || lowerErrorMessage.includes("input");
@@ -16225,14 +16359,10 @@ var AzureFoundryAgentProvider = class extends AzureGenericProvider {
16225
16359
  }
16226
16360
  };
16227
16361
  }
16228
- if (errorMessage.includes("Can't add messages to thread") && errorMessage.includes("while a run")) return { error: `Error in Azure Foundry Agent API call: ${errorMessage}` };
16229
16362
  if (this.isRateLimitError(errorMessage)) return { error: `Rate limit exceeded: ${errorMessage}` };
16230
16363
  if (this.isServiceError(errorMessage)) return { error: `Service error: ${errorMessage}` };
16231
16364
  return { error: `Error in Azure Foundry Agent API call: ${errorMessage}` };
16232
16365
  }
16233
- /**
16234
- * Helper methods to check for specific error types
16235
- */
16236
16366
  isContentFilterError(errorMessage) {
16237
16367
  const lowerErrorMessage = errorMessage.toLowerCase();
16238
16368
  return lowerErrorMessage.includes("content_filter") || lowerErrorMessage.includes("content filter") || lowerErrorMessage.includes("filtered due to") || lowerErrorMessage.includes("content filtering") || lowerErrorMessage.includes("inappropriate content") || lowerErrorMessage.includes("safety guidelines") || lowerErrorMessage.includes("guardrail");
@@ -16243,160 +16373,6 @@ var AzureFoundryAgentProvider = class extends AzureGenericProvider {
16243
16373
  isServiceError(errorMessage) {
16244
16374
  return errorMessage.includes("Service unavailable") || errorMessage.includes("Bad gateway") || errorMessage.includes("Gateway timeout") || errorMessage.includes("Server is busy") || errorMessage.includes("Sorry, something went wrong");
16245
16375
  }
16246
- isServerError(errorMessage) {
16247
- return errorMessage.includes("500") || errorMessage.includes("502") || errorMessage.includes("503") || errorMessage.includes("504");
16248
- }
16249
- isRetryableError(code, message) {
16250
- if (code === "rate_limit_exceeded") return true;
16251
- if (!message) return false;
16252
- return this.isRateLimitError(message) || this.isServiceError(message) || this.isServerError(message);
16253
- }
16254
- /**
16255
- * Poll a run until it completes or fails
16256
- */
16257
- async pollRun(client, threadId, runId, pollIntervalMs = 1e3) {
16258
- const maxPollTime = this.assistantConfig.maxPollTimeMs || 3e5;
16259
- const startTime = Date.now();
16260
- let run = await client.agents.runs.get(threadId, runId);
16261
- while (["queued", "in_progress"].includes(run.status)) {
16262
- if (Date.now() - startTime > maxPollTime) throw new Error(`Run polling timed out after ${maxPollTime}ms. Last status: ${run.status}`);
16263
- await require_fetch.sleep(pollIntervalMs);
16264
- run = await client.agents.runs.get(threadId, runId);
16265
- if (Date.now() - startTime > 3e4) pollIntervalMs = Math.min(pollIntervalMs * 1.5, 5e3);
16266
- }
16267
- return run;
16268
- }
16269
- /**
16270
- * Handle tool calls during run polling
16271
- */
16272
- async pollRunWithToolCallHandling(client, threadId, initialRun) {
16273
- const maxPollTime = this.assistantConfig.maxPollTimeMs || 3e5;
16274
- const startTime = Date.now();
16275
- let pollIntervalMs = 1e3;
16276
- let run = initialRun;
16277
- while (true) {
16278
- if (Date.now() - startTime > maxPollTime) return { error: `Run polling timed out after ${maxPollTime}ms. The operation may still be in progress.` };
16279
- try {
16280
- run = await client.agents.runs.get(threadId, run.id);
16281
- require_logger.logger.debug(`Run status: ${run.status}`);
16282
- if (run.status === "requires_action") if (run.requiredAction?.type === "submit_tool_outputs" && run.requiredAction.submitToolOutputs?.toolCalls) {
16283
- const toolCalls = run.requiredAction.submitToolOutputs.toolCalls;
16284
- const functionCallsWithCallbacks = toolCalls.filter((toolCall) => {
16285
- return toolCall.type === "function" && toolCall.function && toolCall.function.name in (this.assistantConfig.functionToolCallbacks ?? {});
16286
- });
16287
- if (functionCallsWithCallbacks.length === 0) {
16288
- require_logger.logger.debug(`No matching callbacks found for tool calls. Available functions: ${Object.keys(this.assistantConfig.functionToolCallbacks || {}).join(", ")}. Tool calls: ${JSON.stringify(toolCalls)}`);
16289
- const emptyOutputs = toolCalls.map((toolCall) => ({
16290
- toolCallId: toolCall.id,
16291
- output: JSON.stringify({ message: `No callback registered for function ${toolCall.type === "function" ? toolCall.function?.name : toolCall.type}` })
16292
- }));
16293
- try {
16294
- await client.agents.runs.submitToolOutputs(threadId, run.id, emptyOutputs);
16295
- await require_fetch.sleep(pollIntervalMs);
16296
- continue;
16297
- } catch (error) {
16298
- require_logger.logger.error(`Error submitting empty tool outputs: ${error.message}`);
16299
- return { error: `Error submitting empty tool outputs: ${error.message}` };
16300
- }
16301
- }
16302
- const callbackContext = {
16303
- threadId,
16304
- runId: run.id,
16305
- assistantId: this.deploymentName,
16306
- provider: "azure-foundry"
16307
- };
16308
- const toolOutputs = await Promise.all(functionCallsWithCallbacks.map(async (toolCall) => {
16309
- const functionName = toolCall.function.name;
16310
- const functionArgs = toolCall.function.arguments;
16311
- try {
16312
- require_logger.logger.debug(`Calling function ${functionName} with args: ${functionArgs}`);
16313
- const outputResult = await this.executeFunctionCallback(functionName, functionArgs, callbackContext);
16314
- require_logger.logger.debug(`Function ${functionName} result: ${outputResult}`);
16315
- return {
16316
- toolCallId: toolCall.id,
16317
- output: outputResult
16318
- };
16319
- } catch (error) {
16320
- require_logger.logger.error(`Error calling function ${functionName}: ${error}`);
16321
- return {
16322
- toolCallId: toolCall.id,
16323
- output: JSON.stringify({ error: String(error) })
16324
- };
16325
- }
16326
- }));
16327
- if (toolOutputs.length === 0) {
16328
- require_logger.logger.error("No valid tool outputs to submit");
16329
- break;
16330
- }
16331
- require_logger.logger.debug(`Submitting tool outputs: ${JSON.stringify(toolOutputs)}`);
16332
- try {
16333
- await client.agents.runs.submitToolOutputs(threadId, run.id, toolOutputs);
16334
- } catch (error) {
16335
- require_logger.logger.error(`Error submitting tool outputs: ${error.message}`);
16336
- return { error: `Error submitting tool outputs: ${error.message}` };
16337
- }
16338
- } else {
16339
- require_logger.logger.error(`Unknown required action type: ${run.requiredAction?.type}`);
16340
- break;
16341
- }
16342
- else if ([
16343
- "completed",
16344
- "failed",
16345
- "cancelled",
16346
- "expired"
16347
- ].includes(run.status)) {
16348
- if (run.status !== "completed") {
16349
- if (run.lastError) {
16350
- const errorCode = run.lastError.code || "";
16351
- const errorMessage = run.lastError.message || "";
16352
- if (errorCode === "content_filter" || this.isContentFilterError(errorMessage)) {
16353
- const lowerErrorMessage = errorMessage.toLowerCase();
16354
- const isInputFiltered = lowerErrorMessage.includes("prompt") || lowerErrorMessage.includes("input");
16355
- const isOutputFiltered = lowerErrorMessage.includes("output") || lowerErrorMessage.includes("response");
16356
- return {
16357
- output: "The generated content was filtered due to triggering Azure OpenAI Service's content filtering system.",
16358
- guardrails: {
16359
- flagged: true,
16360
- flaggedInput: isInputFiltered,
16361
- flaggedOutput: !isInputFiltered && (isOutputFiltered || !isOutputFiltered)
16362
- }
16363
- };
16364
- }
16365
- return { error: `Thread run failed: ${errorCode} - ${errorMessage}` };
16366
- }
16367
- return { error: `Thread run failed with status: ${run.status}` };
16368
- }
16369
- break;
16370
- }
16371
- await require_fetch.sleep(pollIntervalMs);
16372
- if (Date.now() - startTime > 3e4) pollIntervalMs = Math.min(pollIntervalMs * 1.5, 5e3);
16373
- } catch (error) {
16374
- require_logger.logger.error(`Error polling run status: ${error}`);
16375
- const errorMessage = error.message || String(error);
16376
- if (this.isRetryableError("", errorMessage)) return { error: `Error polling run status: ${errorMessage}` };
16377
- return { error: `Error polling run status: ${errorMessage}` };
16378
- }
16379
- }
16380
- return await this.processCompletedRun(client, threadId, run);
16381
- }
16382
- /**
16383
- * Process a completed run to extract messages
16384
- */
16385
- async processCompletedRun(client, threadId, _run) {
16386
- try {
16387
- const messages = [];
16388
- for await (const message of client.agents.messages.list(threadId, { order: "asc" })) messages.push(message);
16389
- const outputBlocks = [];
16390
- messages.forEach((message) => {
16391
- const contentBlocks = message.content.map((content) => content.type === "text" && content.text ? content.text.value : `<${content.type} output>`).join("\n");
16392
- outputBlocks.push(`[${require_fetch.toTitleCase(message.role)}] ${contentBlocks}`);
16393
- });
16394
- return { output: outputBlocks.join("\n\n").trim() };
16395
- } catch (err) {
16396
- require_logger.logger.error(`Error processing run results: ${err}`);
16397
- return { error: `Error processing run results: ${err.message || String(err)}` };
16398
- }
16399
- }
16400
16376
  };
16401
16377
  //#endregion
16402
16378
  //#region src/providers/azure/responses.ts
@@ -16466,9 +16442,9 @@ var AzureResponsesProvider = class extends AzureGenericProvider {
16466
16442
  const body = {
16467
16443
  model: this.deploymentName,
16468
16444
  input,
16469
- ...maxOutputTokens !== void 0 ? { max_output_tokens: maxOutputTokens } : {},
16445
+ ...maxOutputTokens === void 0 ? {} : { max_output_tokens: maxOutputTokens },
16470
16446
  ...reasoningEffort ? { reasoning: { effort: reasoningEffort } } : {},
16471
- ...temperature !== void 0 ? { temperature } : {},
16447
+ ...temperature === void 0 ? {} : { temperature },
16472
16448
  ...instructions ? { instructions } : {},
16473
16449
  ...config.top_p !== void 0 || require_logger.getEnvString("OPENAI_TOP_P") ? { top_p: config.top_p ?? require_logger.getEnvFloat("OPENAI_TOP_P", 1) } : {},
16474
16450
  ...config.tools ? { tools: await require_util.maybeLoadToolsFromExternalFile(config.tools, context?.vars) } : {},
@@ -17503,9 +17479,9 @@ var AwsBedrockConverseProvider = class extends require_base.AwsBedrockGenericPro
17503
17479
  const temperature = reasoningEnabled ? void 0 : temperatureValue;
17504
17480
  const topP = reasoningEnabled ? void 0 : topPValue;
17505
17481
  if (maxTokens !== void 0 || temperature !== void 0 || topP !== void 0 || stopSequences) return {
17506
- ...maxTokens !== void 0 ? { maxTokens } : {},
17507
- ...temperature !== void 0 ? { temperature } : {},
17508
- ...topP !== void 0 ? { topP } : {},
17482
+ ...maxTokens === void 0 ? {} : { maxTokens },
17483
+ ...temperature === void 0 ? {} : { temperature },
17484
+ ...topP === void 0 ? {} : { topP },
17509
17485
  ...stopSequences ? { stopSequences } : {}
17510
17486
  };
17511
17487
  }
@@ -17725,7 +17701,7 @@ var AwsBedrockConverseProvider = class extends require_base.AwsBedrockGenericPro
17725
17701
  if (hasSuccessfulCallback && results.length > 0) return {
17726
17702
  output: results.join("\n"),
17727
17703
  tokenUsage,
17728
- ...cost !== void 0 ? { cost } : {},
17704
+ ...cost === void 0 ? {} : { cost },
17729
17705
  ...Object.keys(metadata).length > 0 ? { metadata } : {},
17730
17706
  ...guardrails ? { guardrails } : {},
17731
17707
  ...malformedError ? { error: malformedError } : {}
@@ -17735,7 +17711,7 @@ var AwsBedrockConverseProvider = class extends require_base.AwsBedrockGenericPro
17735
17711
  return {
17736
17712
  output: extractTextFromContentBlocks(content, showThinking),
17737
17713
  tokenUsage,
17738
- ...cost !== void 0 ? { cost } : {},
17714
+ ...cost === void 0 ? {} : { cost },
17739
17715
  ...Object.keys(metadata).length > 0 ? { metadata } : {},
17740
17716
  ...guardrails ? { guardrails } : {},
17741
17717
  ...malformedError ? { error: malformedError } : {}
@@ -17849,7 +17825,7 @@ var AwsBedrockConverseProvider = class extends require_base.AwsBedrockGenericPro
17849
17825
  return {
17850
17826
  output: finalOutput,
17851
17827
  tokenUsage,
17852
- ...cost !== void 0 ? { cost } : {},
17828
+ ...cost === void 0 ? {} : { cost },
17853
17829
  ...Object.keys(metadata).length > 0 ? { metadata } : {},
17854
17830
  ...malformedError ? { error: malformedError } : {}
17855
17831
  };
@@ -20484,7 +20460,7 @@ var ElevenLabsAgentsProvider = class {
20484
20460
  promptLength: prompt.length
20485
20461
  });
20486
20462
  const simulationRequest = buildSimulationRequest(parseConversation(prompt, context), this.config.simulatedUser, this.config.evaluationCriteria, this.config.toolMockConfig);
20487
- simulationRequest.new_turns_limit = this.config.maxTurns || 10;
20463
+ simulationRequest.new_turns_limit = this.config.maxTurns ?? 10;
20488
20464
  require_logger.logger.debug("[ElevenLabs Agents] Request payload", {
20489
20465
  endpoint: `/convai/agents/${agentId}/simulate-conversation`,
20490
20466
  payload: simulationRequest
@@ -20611,7 +20587,7 @@ var ElevenLabsAgentsProvider = class {
20611
20587
  simulatedUser: config?.simulatedUser,
20612
20588
  evaluationCriteria: config?.evaluationCriteria,
20613
20589
  toolMockConfig: config?.toolMockConfig,
20614
- maxTurns: config?.maxTurns || 10,
20590
+ maxTurns: config?.maxTurns ?? 10,
20615
20591
  label: options.label || options.id
20616
20592
  };
20617
20593
  }
@@ -23256,6 +23232,8 @@ const DEFAULT_RESOLUTION$1 = "720p";
23256
23232
  const DEFAULT_DURATION$1 = 8;
23257
23233
  const DEFAULT_POLL_INTERVAL_MS$1 = 1e4;
23258
23234
  const DEFAULT_MAX_POLL_TIME_MS$1 = 6e5;
23235
+ const REQUEST_TIMEOUT_MS = 3e5;
23236
+ const AI_STUDIO_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
23259
23237
  function validateAspectRatio$1(ratio) {
23260
23238
  if (!["16:9", "9:16"].includes(ratio)) return {
23261
23239
  valid: false,
@@ -23307,6 +23285,13 @@ var GoogleVideoProvider = class {
23307
23285
  async getProjectId() {
23308
23286
  return await require_transform$1.resolveProjectId(this.config, this.env);
23309
23287
  }
23288
+ isVertexMode(config = this.config) {
23289
+ return require_transform$1.determineGoogleVertexMode(config, this.env);
23290
+ }
23291
+ getApiKey(config = this.config) {
23292
+ const { apiKey } = require_transform$1.getGoogleApiKey(config, this.env, this.isVertexMode(config));
23293
+ return apiKey;
23294
+ }
23310
23295
  async getClientWithCredentials() {
23311
23296
  const { client } = await require_transform$1.getGoogleClient({ credentials: require_transform$1.loadCredentials(this.config.credentials) });
23312
23297
  return client;
@@ -23315,6 +23300,17 @@ var GoogleVideoProvider = class {
23315
23300
  const location = this.getLocation();
23316
23301
  return `https://${location}-aiplatform.googleapis.com/v1/projects/${await this.getProjectId()}/locations/${location}/publishers/google/models/${this.modelName}:${action}`;
23317
23302
  }
23303
+ getAiStudioEndpoint(pathSuffix) {
23304
+ return `${AI_STUDIO_BASE_URL}/${pathSuffix}`;
23305
+ }
23306
+ async getAiStudioHeaders(config) {
23307
+ const apiKey = this.getApiKey(config);
23308
+ if (!apiKey) throw new Error("Google API key is not set. Set GOOGLE_API_KEY or GEMINI_API_KEY, or add `apiKey` to the provider config.");
23309
+ return {
23310
+ "Content-Type": "application/json",
23311
+ "x-goog-api-key": apiKey
23312
+ };
23313
+ }
23318
23314
  /**
23319
23315
  * Load image data from file:// path or return as-is if base64
23320
23316
  */
@@ -23327,10 +23323,24 @@ var GoogleVideoProvider = class {
23327
23323
  return { data: imagePath };
23328
23324
  }
23329
23325
  /**
23326
+ * Load video data from file:// path or return as-is if base64
23327
+ */
23328
+ loadVideoData(videoPath) {
23329
+ if (videoPath.startsWith("file://")) {
23330
+ const filePath = videoPath.slice(7);
23331
+ if (!fs.default.existsSync(filePath)) return { error: `Video file not found: ${filePath}` };
23332
+ return { data: fs.default.readFileSync(filePath).toString("base64") };
23333
+ }
23334
+ return { data: videoPath };
23335
+ }
23336
+ /**
23330
23337
  * Create a new video generation job
23331
23338
  */
23332
23339
  async createVideoJob(prompt, config) {
23333
- const url = await this.getVertexEndpoint("predictLongRunning");
23340
+ if (this.isVertexMode(config)) return this.createVertexVideoJob(prompt, config);
23341
+ return this.createAiStudioVideoJob(prompt, config);
23342
+ }
23343
+ buildVertexRequestBody(prompt, config) {
23334
23344
  const instance = { prompt };
23335
23345
  if (config.aspectRatio) instance.aspectRatio = config.aspectRatio;
23336
23346
  if (config.resolution) instance.resolution = config.resolution;
@@ -23374,7 +23384,69 @@ var GoogleVideoProvider = class {
23374
23384
  }
23375
23385
  const extendVideoId = config.extendVideoId || config.sourceVideo;
23376
23386
  if (extendVideoId) instance.video = { operationName: extendVideoId };
23387
+ return { body: { instances: [instance] } };
23388
+ }
23389
+ buildAiStudioRequestBody(prompt, config) {
23390
+ const instance = { prompt };
23391
+ const parameters = {};
23392
+ if (config.aspectRatio) parameters.aspectRatio = config.aspectRatio;
23393
+ if (config.resolution) parameters.resolution = config.resolution;
23394
+ if (config.durationSeconds) parameters.durationSeconds = config.durationSeconds;
23395
+ if (config.negativePrompt) parameters.negativePrompt = config.negativePrompt;
23396
+ if (config.personGeneration) parameters.personGeneration = config.personGeneration;
23397
+ if (config.seed !== void 0) parameters.seed = config.seed;
23398
+ if (config.image) {
23399
+ const { data: imageData, error } = this.loadImageData(config.image);
23400
+ if (error) return { error };
23401
+ instance.image = { inlineData: {
23402
+ mimeType: "image/png",
23403
+ data: imageData
23404
+ } };
23405
+ }
23406
+ const lastFrame = config.lastFrame || config.lastImage;
23407
+ if (lastFrame) {
23408
+ const { data: lastFrameData, error } = this.loadImageData(lastFrame);
23409
+ if (error) return { error };
23410
+ instance.lastFrame = { inlineData: {
23411
+ mimeType: "image/png",
23412
+ data: lastFrameData
23413
+ } };
23414
+ }
23415
+ if (config.referenceImages && config.referenceImages.length > 0) {
23416
+ const refs = [];
23417
+ for (const ref of config.referenceImages.slice(0, 3)) {
23418
+ const imagePath = typeof ref === "string" ? ref : ref.image;
23419
+ const referenceType = typeof ref === "string" ? "asset" : ref.referenceType || "asset";
23420
+ const { data: imageData, error } = this.loadImageData(imagePath);
23421
+ if (error) return { error };
23422
+ refs.push({
23423
+ image: { inlineData: {
23424
+ mimeType: "image/png",
23425
+ data: imageData
23426
+ } },
23427
+ referenceType
23428
+ });
23429
+ }
23430
+ instance.referenceImages = refs;
23431
+ }
23432
+ const sourceVideo = config.extendVideoId || config.sourceVideo;
23433
+ if (sourceVideo) {
23434
+ if (sourceVideo.includes("/operations/")) return { error: "Google AI Studio Veo does not accept operation IDs for video extension. Use `vertex:video:*` with `extendVideoId`, or provide base64/file:// video data via `sourceVideo`." };
23435
+ const { data: videoData, error } = this.loadVideoData(sourceVideo);
23436
+ if (error) return { error };
23437
+ instance.video = { inlineData: {
23438
+ mimeType: "video/mp4",
23439
+ data: videoData
23440
+ } };
23441
+ }
23377
23442
  const body = { instances: [instance] };
23443
+ if (Object.keys(parameters).length > 0) body.parameters = parameters;
23444
+ return { body };
23445
+ }
23446
+ async createVertexVideoJob(prompt, config) {
23447
+ const url = await this.getVertexEndpoint("predictLongRunning");
23448
+ const { body, error: bodyError } = this.buildVertexRequestBody(prompt, config);
23449
+ if (bodyError || !body) return { error: bodyError || "Failed to build Vertex Veo request" };
23378
23450
  try {
23379
23451
  const client = await this.getClientWithCredentials();
23380
23452
  require_logger.logger.debug("[Google Video] Creating video job", {
@@ -23392,10 +23464,37 @@ var GoogleVideoProvider = class {
23392
23464
  return { error: `Failed to create video job: ${error.response?.data?.error?.message || error.message || String(err)}` };
23393
23465
  }
23394
23466
  }
23467
+ async createAiStudioVideoJob(prompt, config) {
23468
+ const { body, error: bodyError } = this.buildAiStudioRequestBody(prompt, config);
23469
+ if (bodyError || !body) return { error: bodyError || "Failed to build Google AI Studio Veo request" };
23470
+ try {
23471
+ const headers = await this.getAiStudioHeaders(config);
23472
+ const url = this.getAiStudioEndpoint(`models/${this.modelName}:predictLongRunning`);
23473
+ require_logger.logger.debug("[Google Video] Creating video job", {
23474
+ url,
23475
+ model: this.modelName,
23476
+ transport: "google-ai-studio"
23477
+ });
23478
+ const response = await require_fetch.fetchWithTimeout(url, {
23479
+ method: "POST",
23480
+ headers,
23481
+ body: JSON.stringify(body)
23482
+ }, REQUEST_TIMEOUT_MS);
23483
+ const data = await response.json();
23484
+ if (!response.ok) return { error: `Failed to create video job: ${data.error?.message || response.statusText}` };
23485
+ return { operation: data };
23486
+ } catch (err) {
23487
+ return { error: `Failed to create video job: ${err.message || String(err)}` };
23488
+ }
23489
+ }
23395
23490
  /**
23396
23491
  * Poll for video job completion using fetchPredictOperation endpoint
23397
23492
  */
23398
- async pollOperationStatus(operationName, pollIntervalMs, maxPollTimeMs) {
23493
+ async pollOperationStatus(operationName, pollIntervalMs, maxPollTimeMs, config) {
23494
+ if (this.isVertexMode(config)) return this.pollVertexOperationStatus(operationName, pollIntervalMs, maxPollTimeMs);
23495
+ return this.pollAiStudioOperationStatus(operationName, pollIntervalMs, maxPollTimeMs, config);
23496
+ }
23497
+ async pollVertexOperationStatus(operationName, pollIntervalMs, maxPollTimeMs) {
23399
23498
  const startTime = Date.now();
23400
23499
  const location = this.getLocation();
23401
23500
  const url = `https://${location}-aiplatform.googleapis.com/v1/projects/${await this.getProjectId()}/locations/${location}/publishers/google/models/${this.modelName}:fetchPredictOperation`;
@@ -23420,10 +23519,37 @@ var GoogleVideoProvider = class {
23420
23519
  }
23421
23520
  return { error: `Video generation timed out after ${maxPollTimeMs / 1e3} seconds` };
23422
23521
  }
23522
+ async pollAiStudioOperationStatus(operationName, pollIntervalMs, maxPollTimeMs, config) {
23523
+ const startTime = Date.now();
23524
+ const url = this.getAiStudioEndpoint(operationName);
23525
+ const headers = await this.getAiStudioHeaders(config);
23526
+ require_logger.logger.debug(`[Google Video] Polling operation via Google AI Studio: ${url}`);
23527
+ while (Date.now() - startTime < maxPollTimeMs) try {
23528
+ const response = await require_fetch.fetchWithTimeout(url, {
23529
+ method: "GET",
23530
+ headers
23531
+ }, REQUEST_TIMEOUT_MS);
23532
+ const operation = await response.json();
23533
+ if (!response.ok) return { error: `Polling error: ${operation.error?.message || response.statusText}` };
23534
+ require_logger.logger.debug(`[Google Video] Operation status: done=${operation.done}, progress=${operation.metadata?.progress}%`);
23535
+ if (operation.done) {
23536
+ if (operation.error) return { error: `Video generation failed: ${operation.error.message}` };
23537
+ return { operation };
23538
+ }
23539
+ await require_fetch.sleep(pollIntervalMs);
23540
+ } catch (err) {
23541
+ return { error: `Polling error: ${err.message || String(err)}` };
23542
+ }
23543
+ return { error: `Video generation timed out after ${maxPollTimeMs / 1e3} seconds` };
23544
+ }
23423
23545
  /**
23424
23546
  * Download video from URI and store to blob storage
23425
23547
  */
23426
- async downloadVideoToBlob(videoUri) {
23548
+ async downloadVideoToBlob(videoUri, config) {
23549
+ if (this.isVertexMode(config)) return this.downloadVertexVideoToBlob(videoUri);
23550
+ return this.downloadAiStudioVideoToBlob(videoUri, config);
23551
+ }
23552
+ async downloadVertexVideoToBlob(videoUri) {
23427
23553
  try {
23428
23554
  const response = await (await this.getClientWithCredentials()).request({
23429
23555
  url: videoUri,
@@ -23440,6 +23566,23 @@ var GoogleVideoProvider = class {
23440
23566
  return { error: `Download error: ${err.message || String(err)}` };
23441
23567
  }
23442
23568
  }
23569
+ async downloadAiStudioVideoToBlob(videoUri, config) {
23570
+ try {
23571
+ const response = await require_fetch.fetchWithTimeout(videoUri, {
23572
+ method: "GET",
23573
+ headers: await this.getAiStudioHeaders(config)
23574
+ }, REQUEST_TIMEOUT_MS);
23575
+ if (!response.ok) return { error: `Download error: ${response.statusText}` };
23576
+ const { ref } = await require_blobs.storeBlob(Buffer.from(await response.arrayBuffer()), "video/mp4", {
23577
+ kind: "video",
23578
+ location: "response.video"
23579
+ });
23580
+ require_logger.logger.debug(`[Google Video] Stored video to blob storage: ${ref.uri}`);
23581
+ return { blobRef: ref };
23582
+ } catch (err) {
23583
+ return { error: `Download error: ${err.message || String(err)}` };
23584
+ }
23585
+ }
23443
23586
  /**
23444
23587
  * Store base64 encoded video to blob storage
23445
23588
  */
@@ -23457,20 +23600,40 @@ var GoogleVideoProvider = class {
23457
23600
  }
23458
23601
  async callApi(prompt, context) {
23459
23602
  if (!prompt || prompt.trim() === "") return { error: "Prompt is required for video generation" };
23460
- let projectId = this.config.projectId || require_logger.getEnvString("GOOGLE_CLOUD_PROJECT") || require_logger.getEnvString("GOOGLE_PROJECT_ID") || this.env?.GOOGLE_CLOUD_PROJECT || this.env?.GOOGLE_PROJECT_ID;
23461
- if (!projectId) try {
23462
- projectId = await require_transform$1.resolveProjectId(this.config, this.env);
23463
- } catch {
23464
- return { error: "Google Veo video generation requires Vertex AI. Set GOOGLE_CLOUD_PROJECT environment variable or add `projectId` to the provider config, then run \"gcloud auth application-default login\"." };
23465
- }
23466
- const config = {
23603
+ let effectiveConfig = {
23467
23604
  ...this.config,
23468
23605
  ...context?.prompt?.config
23469
23606
  };
23470
- const model = config.model || this.modelName;
23471
- const aspectRatio = config.aspectRatio || DEFAULT_ASPECT_RATIO$1;
23472
- const resolution = config.resolution || DEFAULT_RESOLUTION$1;
23473
- const durationSeconds = config.durationSeconds || config.duration || DEFAULT_DURATION$1;
23607
+ let isVertexMode = this.isVertexMode(effectiveConfig);
23608
+ if (isVertexMode) {
23609
+ let projectId = effectiveConfig.projectId || require_logger.getEnvString("GOOGLE_CLOUD_PROJECT") || require_logger.getEnvString("GOOGLE_PROJECT_ID") || this.env?.GOOGLE_CLOUD_PROJECT || this.env?.GOOGLE_PROJECT_ID;
23610
+ if (!projectId) try {
23611
+ projectId = await require_transform$1.resolveProjectId(effectiveConfig, this.env);
23612
+ } catch {
23613
+ return { error: "Google Veo video generation via Vertex AI requires a project ID. Set GOOGLE_CLOUD_PROJECT or add `projectId` to the provider config, then run \"gcloud auth application-default login\"." };
23614
+ }
23615
+ effectiveConfig = {
23616
+ ...effectiveConfig,
23617
+ vertexai: true,
23618
+ ...projectId ? { projectId } : {}
23619
+ };
23620
+ } else if (!this.getApiKey(effectiveConfig)) try {
23621
+ const adcProjectId = await require_transform$1.resolveProjectId(effectiveConfig, this.env);
23622
+ if (adcProjectId) {
23623
+ isVertexMode = true;
23624
+ effectiveConfig = {
23625
+ ...effectiveConfig,
23626
+ vertexai: true,
23627
+ projectId: adcProjectId
23628
+ };
23629
+ } else return { error: "Google Veo video generation via Google AI Studio requires an API key. Set GOOGLE_API_KEY or GEMINI_API_KEY, or add `apiKey` to the provider config." };
23630
+ } catch {
23631
+ return { error: "Google Veo video generation via Google AI Studio requires an API key. Set GOOGLE_API_KEY or GEMINI_API_KEY, or add `apiKey` to the provider config." };
23632
+ }
23633
+ const model = effectiveConfig.model || this.modelName;
23634
+ const aspectRatio = effectiveConfig.aspectRatio || DEFAULT_ASPECT_RATIO$1;
23635
+ const resolution = effectiveConfig.resolution || DEFAULT_RESOLUTION$1;
23636
+ const durationSeconds = effectiveConfig.durationSeconds || effectiveConfig.duration || DEFAULT_DURATION$1;
23474
23637
  const ratioValidation = validateAspectRatio$1(aspectRatio);
23475
23638
  if (!ratioValidation.valid) return { error: ratioValidation.message };
23476
23639
  const durationValidation = validateDuration$1(model, durationSeconds);
@@ -23480,7 +23643,7 @@ var GoogleVideoProvider = class {
23480
23643
  const startTime = Date.now();
23481
23644
  require_logger.logger.info(`[Google Video] Creating video job for model ${model}...`);
23482
23645
  const { operation: createdOp, error: createError } = await this.createVideoJob(prompt, {
23483
- ...config,
23646
+ ...effectiveConfig,
23484
23647
  aspectRatio,
23485
23648
  resolution,
23486
23649
  durationSeconds
@@ -23488,9 +23651,9 @@ var GoogleVideoProvider = class {
23488
23651
  if (createError || !createdOp) return { error: createError || "Failed to create video job" };
23489
23652
  const operationName = createdOp.name;
23490
23653
  require_logger.logger.info(`[Google Video] Video job created: ${operationName}`);
23491
- const pollIntervalMs = config.pollIntervalMs || DEFAULT_POLL_INTERVAL_MS$1;
23492
- const maxPollTimeMs = config.maxPollTimeMs || DEFAULT_MAX_POLL_TIME_MS$1;
23493
- const { operation: completedOp, error: pollError } = await this.pollOperationStatus(operationName, pollIntervalMs, maxPollTimeMs);
23654
+ const pollIntervalMs = effectiveConfig.pollIntervalMs || DEFAULT_POLL_INTERVAL_MS$1;
23655
+ const maxPollTimeMs = effectiveConfig.maxPollTimeMs || DEFAULT_MAX_POLL_TIME_MS$1;
23656
+ const { operation: completedOp, error: pollError } = await this.pollOperationStatus(operationName, pollIntervalMs, maxPollTimeMs, effectiveConfig);
23494
23657
  if (pollError || !completedOp) return { error: pollError || "Polling failed" };
23495
23658
  let blobRef;
23496
23659
  const base64Video = completedOp.response?.videos?.[0]?.bytesBase64Encoded;
@@ -23505,7 +23668,7 @@ var GoogleVideoProvider = class {
23505
23668
  require_logger.logger.debug(`[Google Video] Response: ${JSON.stringify(completedOp.response)}`);
23506
23669
  return { error: "No video data in response" };
23507
23670
  }
23508
- const { blobRef: ref, error: downloadError } = await this.downloadVideoToBlob(videoUri);
23671
+ const { blobRef: ref, error: downloadError } = await this.downloadVideoToBlob(videoUri, effectiveConfig);
23509
23672
  if (downloadError) return { error: downloadError };
23510
23673
  blobRef = ref;
23511
23674
  }
@@ -24195,13 +24358,22 @@ const ApiKeyAuthSchema = zod.z.object({
24195
24358
  placement: zod.z.enum(["header", "query"]),
24196
24359
  keyName: zod.z.string()
24197
24360
  });
24361
+ const FileAuthSchema = zod.z.object({
24362
+ type: zod.z.literal("file"),
24363
+ path: zod.z.string().min(1)
24364
+ });
24198
24365
  const AuthSchema = zod.z.union([
24199
24366
  OAuthClientCredentialsSchema,
24200
24367
  OAuthPasswordSchema,
24201
24368
  BasicAuthSchema,
24202
24369
  BearerAuthSchema,
24203
- ApiKeyAuthSchema
24370
+ ApiKeyAuthSchema,
24371
+ FileAuthSchema
24204
24372
  ]);
24373
+ const FileAuthResultSchema = zod.z.object({
24374
+ token: zod.z.string().min(1),
24375
+ expiration: zod.z.number().finite().nullable().optional()
24376
+ });
24205
24377
  /**
24206
24378
  * Configuration for a separate session endpoint that must be called before the main API.
24207
24379
  * The session endpoint returns a session ID that is then used in the main request.
@@ -24290,6 +24462,12 @@ async function loadTransformModule(transform) {
24290
24462
  }
24291
24463
  return transform;
24292
24464
  }
24465
+ function hasOwnProperty(obj, key) {
24466
+ return Object.prototype.hasOwnProperty.call(obj, key);
24467
+ }
24468
+ function parseFileAuthReference(filePath) {
24469
+ return filePath.startsWith("file://") ? require_util.parseFileUrl(filePath) : { filePath };
24470
+ }
24293
24471
  async function createSessionParser(parser) {
24294
24472
  if (!parser) return () => "";
24295
24473
  if (typeof parser === "function") return (response) => parser(response);
@@ -24650,20 +24828,11 @@ var HttpProvider = class {
24650
24828
  password: this.config.auth.password ? nunjucks.renderString(this.config.auth.password, vars) : void 0
24651
24829
  } : baseConfig;
24652
24830
  const now = Date.now();
24653
- if (this.lastToken && this.lastTokenExpiresAt && now + 6e4 < this.lastTokenExpiresAt) {
24831
+ if (this.hasValidCachedToken(now)) {
24654
24832
  require_logger.logger.debug("[HTTP Provider Auth]: Using cached OAuth token");
24655
24833
  return;
24656
24834
  }
24657
- if (this.tokenRefreshPromise != null) {
24658
- require_logger.logger.debug("[HTTP Provider Auth]: Token refresh already in progress, waiting...");
24659
- try {
24660
- await this.tokenRefreshPromise;
24661
- if (this.lastToken && this.lastTokenExpiresAt && Date.now() + 6e4 < this.lastTokenExpiresAt) return;
24662
- require_logger.logger.debug("[HTTP Provider Auth]: Token expired while waiting, refreshing again...");
24663
- } catch {
24664
- require_logger.logger.debug("[HTTP Provider Auth]: Previous token refresh failed, retrying...");
24665
- }
24666
- }
24835
+ if (this.tokenRefreshPromise != null && await this.waitForInFlightTokenRefresh()) return;
24667
24836
  require_logger.logger.debug("[HTTP Provider Auth]: Refreshing OAuth token");
24668
24837
  const refreshPromise = this.performTokenRefresh(oauthConfig, now);
24669
24838
  this.tokenRefreshPromise = refreshPromise;
@@ -24705,6 +24874,70 @@ var HttpProvider = class {
24705
24874
  }
24706
24875
  require_invariant.invariant(this.lastToken, "OAuth token should be defined at this point");
24707
24876
  }
24877
+ hasValidCachedToken(now = Date.now()) {
24878
+ if (!this.lastToken) return false;
24879
+ if (this.lastTokenExpiresAt == null) return this.config.auth?.type === "file";
24880
+ return now + require_transform$1.TOKEN_REFRESH_BUFFER_MS < this.lastTokenExpiresAt;
24881
+ }
24882
+ async waitForInFlightTokenRefresh() {
24883
+ if (this.tokenRefreshPromise == null) return false;
24884
+ require_logger.logger.debug("[HTTP Provider Auth]: Token refresh already in progress, waiting...");
24885
+ try {
24886
+ await this.tokenRefreshPromise;
24887
+ if (this.hasValidCachedToken()) return true;
24888
+ require_logger.logger.debug("[HTTP Provider Auth]: Token expired while waiting, refreshing again...");
24889
+ } catch {
24890
+ require_logger.logger.debug("[HTTP Provider Auth]: Previous token refresh failed, retrying...");
24891
+ }
24892
+ return false;
24893
+ }
24894
+ async refreshFileTokenIfNeeded(prompt, vars, context) {
24895
+ if (!this.config.auth || this.config.auth.type !== "file") {
24896
+ require_logger.logger.debug("[HTTP Provider Auth]: No file auth configured");
24897
+ return;
24898
+ }
24899
+ if (this.hasValidCachedToken()) {
24900
+ require_logger.logger.debug("[HTTP Provider Auth]: Using cached file auth token");
24901
+ return;
24902
+ }
24903
+ if (this.tokenRefreshPromise != null && await this.waitForInFlightTokenRefresh()) return;
24904
+ require_logger.logger.debug("[HTTP Provider Auth]: Refreshing file auth token");
24905
+ const refreshPromise = this.performFileTokenRefresh(prompt, vars, context);
24906
+ this.tokenRefreshPromise = refreshPromise;
24907
+ try {
24908
+ await refreshPromise;
24909
+ } finally {
24910
+ if (this.tokenRefreshPromise === refreshPromise) this.tokenRefreshPromise = void 0;
24911
+ }
24912
+ }
24913
+ async performFileTokenRefresh(prompt, vars, context) {
24914
+ require_invariant.invariant(this.config.auth?.type === "file", "File auth should be configured");
24915
+ const { filePath, functionName } = parseFileAuthReference(this.config.auth.path);
24916
+ const defaultFunctionName = filePath.endsWith(".py") ? "get_auth" : "default";
24917
+ const authContext = {
24918
+ ...context ?? {},
24919
+ prompt: context?.prompt ?? {
24920
+ raw: prompt,
24921
+ label: prompt
24922
+ },
24923
+ vars
24924
+ };
24925
+ try {
24926
+ const authFn = await require_util.loadFunction({
24927
+ filePath,
24928
+ functionName,
24929
+ defaultFunctionName
24930
+ });
24931
+ const result = FileAuthResultSchema.parse(await authFn(authContext));
24932
+ this.lastToken = result.token;
24933
+ this.lastTokenExpiresAt = result.expiration ?? void 0;
24934
+ require_logger.logger.debug("[HTTP Provider Auth]: Successfully refreshed file auth token");
24935
+ } catch (err) {
24936
+ require_logger.logger.error(`[HTTP Provider Auth]: Failed to refresh file auth token: ${String(err)}`);
24937
+ throw new Error(`Failed to refresh file auth token: ${String(err)}`);
24938
+ }
24939
+ require_invariant.invariant(this.lastToken, "File auth token should be defined at this point");
24940
+ }
24708
24941
  async refreshSignatureIfNeeded(vars) {
24709
24942
  if (!this.config.signatureAuth) {
24710
24943
  require_logger.logger.debug("[HTTP Provider Auth]: No signature auth configured");
@@ -24886,12 +25119,21 @@ var HttpProvider = class {
24886
25119
  ...context?.vars || {},
24887
25120
  prompt,
24888
25121
  ...context?.evaluationId ? { evaluationId: context.evaluationId } : {},
24889
- ...transformedTools !== void 0 ? { tools: serializeForTemplate(transformedTools) } : {},
24890
- ...transformedToolChoice !== void 0 ? { tool_choice: serializeForTemplate(transformedToolChoice) } : {}
25122
+ ...transformedTools === void 0 ? {} : { tools: serializeForTemplate(transformedTools) },
25123
+ ...transformedToolChoice === void 0 ? {} : { tool_choice: serializeForTemplate(transformedToolChoice) }
24891
25124
  };
24892
25125
  if (this.config.auth?.type === "oauth") {
24893
25126
  await this.refreshOAuthTokenIfNeeded(vars);
24894
25127
  require_invariant.invariant(this.lastToken, "OAuth token should be defined at this point");
25128
+ if (hasOwnProperty(vars, "token")) require_logger.logger.warn("[HTTP Provider Auth]: `token` is already defined in vars and will be overwritten");
25129
+ vars.token = this.lastToken;
25130
+ } else if (this.config.auth?.type === "file") {
25131
+ await this.refreshFileTokenIfNeeded(prompt, vars, context);
25132
+ require_invariant.invariant(this.lastToken, "File auth token should be defined at this point");
25133
+ if (hasOwnProperty(vars, "token")) require_logger.logger.warn("[HTTP Provider Auth]: `token` is already defined in vars and will be overwritten");
25134
+ if (hasOwnProperty(vars, "expiration")) require_logger.logger.warn("[HTTP Provider Auth]: `expiration` is already defined in vars and will be overwritten");
25135
+ vars.token = this.lastToken;
25136
+ vars.expiration = this.lastTokenExpiresAt;
24895
25137
  }
24896
25138
  if (this.config.signatureAuth) {
24897
25139
  await this.refreshSignatureIfNeeded(vars);
@@ -25728,13 +25970,20 @@ function createLlamaApiProvider(providerPath, options = {}) {
25728
25970
  }
25729
25971
  //#endregion
25730
25972
  //#region src/providers/localai.ts
25973
+ function parseEnvFloat(value) {
25974
+ if (value === void 0) return;
25975
+ const parsed = Number.parseFloat(value);
25976
+ return Number.isNaN(parsed) ? void 0 : parsed;
25977
+ }
25731
25978
  var LocalAiGenericProvider = class {
25732
25979
  modelName;
25733
25980
  apiBaseUrl;
25734
25981
  config;
25982
+ env;
25735
25983
  constructor(modelName, options = {}) {
25736
25984
  const { id, config, env } = options;
25737
25985
  this.modelName = modelName;
25986
+ this.env = env;
25738
25987
  this.apiBaseUrl = config?.apiBaseUrl || env?.LOCALAI_BASE_URL || require_logger.getEnvString("LOCALAI_BASE_URL") || "http://localhost:8080/v1";
25739
25988
  this.config = config || {};
25740
25989
  this.id = id ? () => id : this.id;
@@ -25758,7 +26007,7 @@ var LocalAiChatProvider = class extends LocalAiGenericProvider {
25758
26007
  const body = {
25759
26008
  model: this.modelName,
25760
26009
  messages,
25761
- temperature: this.config.temperature || require_logger.getEnvFloat("LOCALAI_TEMPERATURE") || .7
26010
+ temperature: this.config.temperature ?? parseEnvFloat(this.env?.LOCALAI_TEMPERATURE) ?? require_logger.getEnvFloat("LOCALAI_TEMPERATURE") ?? .7
25762
26011
  };
25763
26012
  let data;
25764
26013
  try {
@@ -25807,7 +26056,7 @@ var LocalAiCompletionProvider = class extends LocalAiGenericProvider {
25807
26056
  const body = {
25808
26057
  model: this.modelName,
25809
26058
  prompt,
25810
- temperature: this.config.temperature || require_logger.getEnvFloat("LOCALAI_TEMPERATURE") || .7
26059
+ temperature: this.config.temperature ?? parseEnvFloat(this.env?.LOCALAI_TEMPERATURE) ?? require_logger.getEnvFloat("LOCALAI_TEMPERATURE") ?? .7
25811
26060
  };
25812
26061
  let data;
25813
26062
  try {
@@ -26225,7 +26474,7 @@ var OllamaCompletionProvider = class {
26225
26474
  if (OllamaCompletionOptionKeys.has(optionName) && optionName !== "think" && optionName !== "tools" && optionName !== "passthrough") options[optionName] = this.config[optionName];
26226
26475
  return options;
26227
26476
  }, {}),
26228
- ...this.config.think !== void 0 ? { think: this.config.think } : {},
26477
+ ...this.config.think === void 0 ? {} : { think: this.config.think },
26229
26478
  ...this.config.passthrough || {}
26230
26479
  };
26231
26480
  if (this.config.think !== void 0) params.think = this.config.think;
@@ -26324,7 +26573,7 @@ var OllamaChatProvider = class {
26324
26573
  if (OllamaCompletionOptionKeys.has(optionName) && optionName !== "tools") options[optionName] = this.config[optionName];
26325
26574
  return options;
26326
26575
  }, {}),
26327
- ...this.config.think !== void 0 ? { think: this.config.think } : {},
26576
+ ...this.config.think === void 0 ? {} : { think: this.config.think },
26328
26577
  ...this.config.passthrough || {}
26329
26578
  };
26330
26579
  if (this.config.tools) {
@@ -27666,7 +27915,12 @@ const SORA_COSTS = {
27666
27915
  /**
27667
27916
  * Valid video sizes (aspect ratios) for OpenAI Sora
27668
27917
  */
27669
- const VALID_VIDEO_SIZES = ["1280x720", "720x1280"];
27918
+ const VALID_VIDEO_SIZES = [
27919
+ "1280x720",
27920
+ "720x1280",
27921
+ "1792x1024",
27922
+ "1024x1792"
27923
+ ];
27670
27924
  /**
27671
27925
  * Valid video durations in seconds for OpenAI Sora
27672
27926
  */
@@ -27834,7 +28088,7 @@ var OpenAiVideoProvider = class extends require_openai.OpenAiGenericProvider {
27834
28088
  * Download video content and store in media storage
27835
28089
  */
27836
28090
  async downloadVideoContent(soraVideoId, variant, cacheKey, evalId) {
27837
- const url = `${this.getApiUrl()}/videos/${soraVideoId}/content${variant !== "video" ? `?variant=${variant}` : ""}`;
28091
+ const url = `${this.getApiUrl()}/videos/${soraVideoId}/content${variant === "video" ? "" : `?variant=${variant}`}`;
27838
28092
  const headers = this.getAuthHeaders();
27839
28093
  try {
27840
28094
  const response = await require_fetch.fetchWithProxy(url, {
@@ -28872,7 +29126,7 @@ var ReplicateProvider = class {
28872
29126
  providerId: this.id(),
28873
29127
  temperature: this.config.temperature,
28874
29128
  topP: this.config.top_p,
28875
- maxTokens: this.config.max_tokens || this.config.max_length || this.config.max_new_tokens,
29129
+ maxTokens: this.config.max_tokens ?? this.config.max_length ?? this.config.max_new_tokens,
28876
29130
  testIndex: context?.test?.vars?.__testIdx,
28877
29131
  promptLabel: context?.prompt?.label,
28878
29132
  traceparent: context?.traceparent
@@ -28916,14 +29170,14 @@ var ReplicateProvider = class {
28916
29170
  let response;
28917
29171
  try {
28918
29172
  const inputOptions = {
28919
- max_length: this.config.max_length || require_logger.getEnvInt("REPLICATE_MAX_LENGTH"),
28920
- max_new_tokens: this.config.max_new_tokens || require_logger.getEnvInt("REPLICATE_MAX_NEW_TOKENS"),
28921
- temperature: this.config.temperature || require_logger.getEnvFloat("REPLICATE_TEMPERATURE"),
28922
- top_p: this.config.top_p || require_logger.getEnvFloat("REPLICATE_TOP_P"),
28923
- top_k: this.config.top_k || require_logger.getEnvInt("REPLICATE_TOP_K"),
28924
- repetition_penalty: this.config.repetition_penalty || require_logger.getEnvFloat("REPLICATE_REPETITION_PENALTY"),
28925
- stop_sequences: this.config.stop_sequences || require_logger.getEnvString("REPLICATE_STOP_SEQUENCES"),
28926
- seed: this.config.seed || require_logger.getEnvInt("REPLICATE_SEED"),
29173
+ max_length: this.config.max_length ?? require_logger.getEnvInt("REPLICATE_MAX_LENGTH"),
29174
+ max_new_tokens: this.config.max_new_tokens ?? require_logger.getEnvInt("REPLICATE_MAX_NEW_TOKENS"),
29175
+ temperature: this.config.temperature ?? require_logger.getEnvFloat("REPLICATE_TEMPERATURE"),
29176
+ top_p: this.config.top_p ?? require_logger.getEnvFloat("REPLICATE_TOP_P"),
29177
+ top_k: this.config.top_k ?? require_logger.getEnvInt("REPLICATE_TOP_K"),
29178
+ repetition_penalty: this.config.repetition_penalty ?? require_logger.getEnvFloat("REPLICATE_REPETITION_PENALTY"),
29179
+ stop_sequences: this.config.stop_sequences ?? require_logger.getEnvString("REPLICATE_STOP_SEQUENCES"),
29180
+ seed: this.config.seed ?? require_logger.getEnvInt("REPLICATE_SEED"),
28927
29181
  system_prompt: systemPrompt,
28928
29182
  prompt: userPrompt
28929
29183
  };
@@ -30731,7 +30985,7 @@ var WebSocketProvider = class {
30731
30985
  prompt
30732
30986
  };
30733
30987
  const message = nunjucks.renderString(this.config.messageTemplate, vars);
30734
- const streamResponse = this.streamResponse != null ? await this.streamResponse : void 0;
30988
+ const streamResponse = this.streamResponse == null ? void 0 : await this.streamResponse;
30735
30989
  require_logger.logger.debug(`Sending WebSocket message to ${this.url}: ${message}`);
30736
30990
  let accumulator = { error: "unknown error occurred" };
30737
30991
  return new Promise((resolve, reject) => {
@@ -31293,10 +31547,10 @@ var XAIResponsesProvider = class {
31293
31547
  const body = {
31294
31548
  model: this.modelName,
31295
31549
  input,
31296
- ...maxOutputTokens !== void 0 ? { max_output_tokens: maxOutputTokens } : {},
31297
- ...temperature !== void 0 ? { temperature } : {},
31550
+ ...maxOutputTokens === void 0 ? {} : { max_output_tokens: maxOutputTokens },
31551
+ ...temperature === void 0 ? {} : { temperature },
31298
31552
  ...config.instructions ? { instructions: config.instructions } : {},
31299
- ...config.top_p !== void 0 ? { top_p: config.top_p } : {},
31553
+ ...config.top_p === void 0 ? {} : { top_p: config.top_p },
31300
31554
  ...loadedTools && loadedTools.length > 0 ? { tools: loadedTools } : {},
31301
31555
  ...config.tool_choice ? { tool_choice: config.tool_choice } : {},
31302
31556
  ...config.previous_response_id ? { previous_response_id: config.previous_response_id } : {},
@@ -32119,7 +32373,7 @@ const providerMap = [
32119
32373
  {
32120
32374
  test: (providerPath) => providerPath.startsWith("opencode:") || providerPath === "opencode",
32121
32375
  create: async (providerPath, providerOptions, context) => {
32122
- const { OpenCodeSDKProvider } = await Promise.resolve().then(() => require("./opencode-sdk-CfaLN8PY.cjs"));
32376
+ const { OpenCodeSDKProvider } = await Promise.resolve().then(() => require("./opencode-sdk-WWJhnbKr.cjs"));
32123
32377
  return new OpenCodeSDKProvider({
32124
32378
  ...providerOptions,
32125
32379
  id: providerPath,
@@ -32131,18 +32385,15 @@ const providerMap = [
32131
32385
  {
32132
32386
  test: (providerPath) => providerPath.startsWith("openclaw:") || providerPath === "openclaw",
32133
32387
  create: async (providerPath, providerOptions, context) => {
32134
- const { createOpenClawProvider } = await Promise.resolve().then(() => require("./openclaw-DAfWQn-o.cjs"));
32388
+ const { createOpenClawProvider } = await Promise.resolve().then(() => require("./openclaw-CXxbKgDH.cjs"));
32135
32389
  return createOpenClawProvider(providerPath, providerOptions, context.env);
32136
32390
  }
32137
32391
  },
32138
32392
  {
32139
32393
  test: (providerPath) => providerPath.startsWith("anthropic:claude-agent-sdk") || providerPath.startsWith("anthropic:claude-code"),
32140
- create: async (_providerPath, providerOptions, context) => {
32141
- const { ClaudeCodeSDKProvider } = await Promise.resolve().then(() => require("./claude-agent-sdk-CJH22shf.cjs"));
32142
- return new ClaudeCodeSDKProvider({
32143
- ...providerOptions,
32144
- env: context.env
32145
- });
32394
+ create: async (_providerPath, providerOptions, _context) => {
32395
+ const { ClaudeCodeSDKProvider } = await Promise.resolve().then(() => require("./claude-agent-sdk-8ddRp1L2.cjs"));
32396
+ return new ClaudeCodeSDKProvider({ ...providerOptions });
32146
32397
  }
32147
32398
  },
32148
32399
  {
@@ -32195,25 +32446,25 @@ const providerMap = [
32195
32446
  const modelName = splits.slice(2).join(":");
32196
32447
  if (modelType === "converse") return new AwsBedrockConverseProvider(modelName, providerOptions);
32197
32448
  if (modelType === "nova-sonic" || modelType.includes("amazon.nova-sonic")) {
32198
- const { NovaSonicProvider } = await Promise.resolve().then(() => require("./nova-sonic-DVu3mMIy.cjs"));
32449
+ const { NovaSonicProvider } = await Promise.resolve().then(() => require("./nova-sonic-N0yCm0vb.cjs"));
32199
32450
  return new NovaSonicProvider("amazon.nova-sonic-v1:0", providerOptions);
32200
32451
  }
32201
32452
  if (modelType.includes("luma.ray") || modelName.includes("luma.ray")) {
32202
- const { LumaRayVideoProvider } = await Promise.resolve().then(() => require("./luma-ray-B0GGNRc1.cjs"));
32453
+ const { LumaRayVideoProvider } = await Promise.resolve().then(() => require("./luma-ray-m9Ku2meV.cjs"));
32203
32454
  return new LumaRayVideoProvider(modelName.includes("luma.ray") ? modelName : splits.slice(1).join(":") || "luma.ray-v2:0", providerOptions);
32204
32455
  }
32205
32456
  if (modelType.includes("amazon.nova-reel") || modelType === "video" && (modelName.includes("amazon.nova-reel") || modelName === "")) {
32206
- const { NovaReelVideoProvider } = await Promise.resolve().then(() => require("./nova-reel-D9xfaMBs.cjs"));
32457
+ const { NovaReelVideoProvider } = await Promise.resolve().then(() => require("./nova-reel-CE5etkv9.cjs"));
32207
32458
  return new NovaReelVideoProvider(modelName || "amazon.nova-reel-v1:1", providerOptions);
32208
32459
  }
32209
32460
  if (modelType === "agents") {
32210
- const { AwsBedrockAgentsProvider } = await Promise.resolve().then(() => require("./agents-CErsqg5U.cjs"));
32461
+ const { AwsBedrockAgentsProvider } = await Promise.resolve().then(() => require("./agents-BBWxKSM0.cjs"));
32211
32462
  return new AwsBedrockAgentsProvider(modelName, providerOptions);
32212
32463
  }
32213
32464
  if (modelType === "completion") return new AwsBedrockCompletionProvider(modelName, providerOptions);
32214
32465
  if (modelType === "embeddings" || modelType === "embedding") return new AwsBedrockEmbeddingProvider(modelName, providerOptions);
32215
32466
  if (modelType === "kb" || modelType === "knowledge-base") {
32216
- const { AwsBedrockKnowledgeBaseProvider } = await Promise.resolve().then(() => require("./knowledgeBase-wkxuRFhA.cjs"));
32467
+ const { AwsBedrockKnowledgeBaseProvider } = await Promise.resolve().then(() => require("./knowledgeBase-DqrLX8fy.cjs"));
32217
32468
  return new AwsBedrockKnowledgeBaseProvider(modelName, providerOptions);
32218
32469
  }
32219
32470
  return new AwsBedrockCompletionProvider(splits.slice(1).join(":"), providerOptions);
@@ -32223,7 +32474,7 @@ const providerMap = [
32223
32474
  test: (providerPath) => providerPath.startsWith("bedrock-agent:"),
32224
32475
  create: async (providerPath, providerOptions, _context) => {
32225
32476
  const agentId = providerPath.substring(14);
32226
- const { AwsBedrockAgentsProvider } = await Promise.resolve().then(() => require("./agents-CErsqg5U.cjs"));
32477
+ const { AwsBedrockAgentsProvider } = await Promise.resolve().then(() => require("./agents-BBWxKSM0.cjs"));
32227
32478
  return new AwsBedrockAgentsProvider(agentId, providerOptions);
32228
32479
  }
32229
32480
  },
@@ -32233,7 +32484,7 @@ const providerMap = [
32233
32484
  const splits = providerPath.split(":");
32234
32485
  const modelType = splits[1];
32235
32486
  const endpointName = splits.slice(2).join(":");
32236
- const { SageMakerCompletionProvider, SageMakerEmbeddingProvider } = await Promise.resolve().then(() => require("./sagemaker-CcQHM1jV.cjs"));
32487
+ const { SageMakerCompletionProvider, SageMakerEmbeddingProvider } = await Promise.resolve().then(() => require("./sagemaker-jiw1wQa-.cjs"));
32237
32488
  if (modelType === "embedding" || modelType === "embeddings") return new SageMakerEmbeddingProvider(endpointName || modelType, providerOptions);
32238
32489
  if (splits.length === 2) return new SageMakerCompletionProvider(modelType, providerOptions);
32239
32490
  if (endpointName.includes("jumpstart") || modelType === "jumpstart") return new SageMakerCompletionProvider(endpointName, {
@@ -32274,7 +32525,7 @@ const providerMap = [
32274
32525
  {
32275
32526
  test: (providerPath) => providerPath.startsWith("cloudflare-ai:"),
32276
32527
  create: async (providerPath, providerOptions, context) => {
32277
- const { createCloudflareAiProvider } = await Promise.resolve().then(() => require("./cloudflare-ai-ClWSdor4.cjs"));
32528
+ const { createCloudflareAiProvider } = await Promise.resolve().then(() => require("./cloudflare-ai-C62x6MQG.cjs"));
32278
32529
  return createCloudflareAiProvider(providerPath, {
32279
32530
  ...providerOptions,
32280
32531
  env: context.env
@@ -32284,7 +32535,7 @@ const providerMap = [
32284
32535
  {
32285
32536
  test: (providerPath) => providerPath.startsWith("cloudflare-gateway:"),
32286
32537
  create: async (providerPath, providerOptions, context) => {
32287
- const { createCloudflareGatewayProvider } = await Promise.resolve().then(() => require("./cloudflare-gateway-C2_-KG5o.cjs"));
32538
+ const { createCloudflareGatewayProvider } = await Promise.resolve().then(() => require("./cloudflare-gateway-Dx36ftqF.cjs"));
32288
32539
  return createCloudflareGatewayProvider(providerPath, {
32289
32540
  ...providerOptions,
32290
32541
  env: context.env
@@ -32436,27 +32687,27 @@ const providerMap = [
32436
32687
  create: async (providerPath, providerOptions, context) => {
32437
32688
  const modelType = providerPath.split(":")[1];
32438
32689
  if (modelType === "image") {
32439
- const { createHyperbolicImageProvider } = await Promise.resolve().then(() => require("./image-CDLQOcqT.cjs"));
32690
+ const { createHyperbolicImageProvider } = await Promise.resolve().then(() => require("./image-fza3zuKs.cjs"));
32440
32691
  return createHyperbolicImageProvider(providerPath, {
32441
32692
  ...providerOptions,
32442
32693
  env: context.env
32443
32694
  });
32444
32695
  }
32445
32696
  if (modelType === "audio") {
32446
- const { createHyperbolicAudioProvider } = await Promise.resolve().then(() => require("./audio-BWeaWovU.cjs"));
32697
+ const { createHyperbolicAudioProvider } = await Promise.resolve().then(() => require("./audio-DVFjQ67_.cjs"));
32447
32698
  return createHyperbolicAudioProvider(providerPath, {
32448
32699
  ...providerOptions,
32449
32700
  env: context.env
32450
32701
  });
32451
32702
  }
32452
- const { createHyperbolicProvider } = await Promise.resolve().then(() => require("./chat-2K608PeQ.cjs"));
32703
+ const { createHyperbolicProvider } = await Promise.resolve().then(() => require("./chat-BtIKkLKx.cjs"));
32453
32704
  return createHyperbolicProvider(providerPath, providerOptions);
32454
32705
  }
32455
32706
  },
32456
32707
  {
32457
32708
  test: (providerPath) => providerPath.startsWith("litellm:"),
32458
32709
  create: async (providerPath, providerOptions, context) => {
32459
- const { createLiteLLMProvider } = await Promise.resolve().then(() => require("./litellm-NYpQ8RQu.cjs"));
32710
+ const { createLiteLLMProvider } = await Promise.resolve().then(() => require("./litellm-CnHI69aj.cjs"));
32460
32711
  return createLiteLLMProvider(providerPath, {
32461
32712
  config: providerOptions,
32462
32713
  env: context.env
@@ -32513,9 +32764,16 @@ const providerMap = [
32513
32764
  const modelName = splits.slice(2).join(":");
32514
32765
  const configuredModel = getConfiguredOpenAiModel(providerOptions);
32515
32766
  if (modelType === "codex-sdk" || modelType === "codex") {
32516
- const { OpenAICodexSDKProvider } = await Promise.resolve().then(() => require("./codex-sdk-fAO0c3yA.cjs"));
32767
+ const { OpenAICodexSDKProvider } = await Promise.resolve().then(() => require("./codex-sdk-ZLKfDjqP.cjs"));
32768
+ const codexModel = modelName || configuredModel;
32769
+ const codexProviderId = providerOptions.id ?? providerPath;
32517
32770
  return new OpenAICodexSDKProvider({
32518
32771
  ...providerOptions,
32772
+ id: codexProviderId,
32773
+ config: codexModel ? {
32774
+ ...providerOptions.config,
32775
+ model: codexModel
32776
+ } : providerOptions.config,
32519
32777
  env: context.env
32520
32778
  });
32521
32779
  }
@@ -32526,7 +32784,7 @@ const providerMap = [
32526
32784
  if (modelType === "realtime") return new OpenAiRealtimeProvider(modelName || configuredModel || "gpt-4o-realtime-preview-2024-12-17", providerOptions);
32527
32785
  if (modelType === "responses") return new require_responses.OpenAiResponsesProvider(modelName || configuredModel || "gpt-4.1-2025-04-14", providerOptions);
32528
32786
  if (modelType === "transcription") {
32529
- const { OpenAiTranscriptionProvider } = await Promise.resolve().then(() => require("./transcription-CL78qbOU.cjs"));
32787
+ const { OpenAiTranscriptionProvider } = await Promise.resolve().then(() => require("./transcription-BvtsrzRG.cjs"));
32530
32788
  return new OpenAiTranscriptionProvider(modelName || configuredModel || "gpt-4o-transcribe-diarize", providerOptions);
32531
32789
  }
32532
32790
  if (require_chat.OpenAiChatCompletionProvider.OPENAI_CHAT_MODEL_NAMES.includes(modelType)) return new require_chat.OpenAiChatCompletionProvider(modelType, providerOptions);
@@ -32534,11 +32792,11 @@ const providerMap = [
32534
32792
  if (OpenAiRealtimeProvider.OPENAI_REALTIME_MODEL_NAMES.includes(modelType)) return new OpenAiRealtimeProvider(modelType, providerOptions);
32535
32793
  if (require_responses.OpenAiResponsesProvider.OPENAI_RESPONSES_MODEL_NAMES.includes(modelType)) return new require_responses.OpenAiResponsesProvider(modelType, providerOptions);
32536
32794
  if (modelType === "agents") {
32537
- const { OpenAiAgentsProvider } = await Promise.resolve().then(() => require("./agents-B0f4HICh.cjs"));
32795
+ const { OpenAiAgentsProvider } = await Promise.resolve().then(() => require("./agents-CAYbM7qD.cjs"));
32538
32796
  return new OpenAiAgentsProvider(modelName || "default-agent", providerOptions);
32539
32797
  }
32540
32798
  if (modelType === "chatkit") {
32541
- const { OpenAiChatKitProvider } = await Promise.resolve().then(() => require("./chatkit-DKyPi1Gs.cjs"));
32799
+ const { OpenAiChatKitProvider } = await Promise.resolve().then(() => require("./chatkit-Cx174XI3.cjs"));
32542
32800
  return new OpenAiChatKitProvider(modelName || "", providerOptions);
32543
32801
  }
32544
32802
  if (modelType === "assistant") return new OpenAiAssistantProvider(modelName, providerOptions);
@@ -32581,7 +32839,7 @@ const providerMap = [
32581
32839
  {
32582
32840
  test: (providerPath) => providerPath.startsWith("quiverai:"),
32583
32841
  create: async (providerPath, providerOptions, context) => {
32584
- const { createQuiverAiProvider } = await Promise.resolve().then(() => require("./quiverai-CLkWkyZc.cjs"));
32842
+ const { createQuiverAiProvider } = await Promise.resolve().then(() => require("./quiverai-CcUhPIBg.cjs"));
32585
32843
  return createQuiverAiProvider(providerPath, providerOptions, context.env);
32586
32844
  }
32587
32845
  },
@@ -32599,7 +32857,7 @@ const providerMap = [
32599
32857
  {
32600
32858
  test: (providerPath) => providerPath.startsWith("modelslab:"),
32601
32859
  create: async (providerPath, providerOptions, context) => {
32602
- const { ModelsLabImageProvider } = await Promise.resolve().then(() => require("./modelslab-DcOSFwKh.cjs"));
32860
+ const { ModelsLabImageProvider } = await Promise.resolve().then(() => require("./modelslab-IQbNg-r7.cjs"));
32603
32861
  const splits = providerPath.split(":");
32604
32862
  const modelType = splits[1];
32605
32863
  const modelName = splits.slice(2).join(":");
@@ -32643,7 +32901,7 @@ const providerMap = [
32643
32901
  {
32644
32902
  test: (providerPath) => providerPath.startsWith("aimlapi:"),
32645
32903
  create: async (providerPath, providerOptions, context) => {
32646
- const { createAimlApiProvider } = await Promise.resolve().then(() => require("./aimlapi-tg0Gkcvr.cjs"));
32904
+ const { createAimlApiProvider } = await Promise.resolve().then(() => require("./aimlapi-Bv8Fmc-b.cjs"));
32647
32905
  return createAimlApiProvider(providerPath, {
32648
32906
  ...providerOptions,
32649
32907
  env: context.env
@@ -32653,7 +32911,7 @@ const providerMap = [
32653
32911
  {
32654
32912
  test: (providerPath) => providerPath.startsWith("cometapi:"),
32655
32913
  create: async (providerPath, providerOptions, context) => {
32656
- const { createCometApiProvider } = await Promise.resolve().then(() => require("./cometapi-vY6aDZgo.cjs"));
32914
+ const { createCometApiProvider } = await Promise.resolve().then(() => require("./cometapi-C3hOlM7-.cjs"));
32657
32915
  return createCometApiProvider(providerPath, {
32658
32916
  ...providerOptions,
32659
32917
  env: context.env
@@ -32663,7 +32921,7 @@ const providerMap = [
32663
32921
  {
32664
32922
  test: (providerPath) => providerPath.startsWith("docker:"),
32665
32923
  create: async (providerPath, providerOptions, context) => {
32666
- const { createDockerProvider } = await Promise.resolve().then(() => require("./docker-BwsKwxFs.cjs"));
32924
+ const { createDockerProvider } = await Promise.resolve().then(() => require("./docker-Cqj2-QVi.cjs"));
32667
32925
  return createDockerProvider(providerPath, {
32668
32926
  ...providerOptions,
32669
32927
  env: context.env
@@ -32684,6 +32942,14 @@ const providerMap = [
32684
32942
  create: async (providerPath, providerOptions, _context) => {
32685
32943
  const splits = providerPath.split(":");
32686
32944
  const firstPart = splits[1];
32945
+ if (firstPart === "video") return new GoogleVideoProvider(splits.slice(2).join(":"), {
32946
+ ...providerOptions,
32947
+ id: providerPath,
32948
+ config: {
32949
+ ...providerOptions.config,
32950
+ vertexai: true
32951
+ }
32952
+ });
32687
32953
  if (firstPart === "chat") return new VertexChatProvider(splits.slice(2).join(":"), providerOptions);
32688
32954
  if (firstPart === "embedding" || firstPart === "embeddings") return new VertexEmbeddingProvider(splits.slice(2).join(":"), providerOptions);
32689
32955
  return new VertexChatProvider(splits.slice(1).join(":"), providerOptions);
@@ -32750,7 +33016,10 @@ const providerMap = [
32750
33016
  const modelName = splits.slice(2).join(":");
32751
33017
  if (serviceType === "live") return new GoogleLiveProvider(modelName, providerOptions);
32752
33018
  else if (serviceType === "image") return new GoogleImageProvider(modelName, providerOptions);
32753
- else if (serviceType === "video") return new GoogleVideoProvider(modelName, providerOptions);
33019
+ else if (serviceType === "video") return new GoogleVideoProvider(modelName, {
33020
+ ...providerOptions,
33021
+ id: providerPath
33022
+ });
32754
33023
  }
32755
33024
  const modelName = splits[1];
32756
33025
  if (modelName.includes("-image")) return new GeminiImageProvider(modelName, providerOptions);
@@ -32929,7 +33198,7 @@ const providerMap = [
32929
33198
  {
32930
33199
  test: (providerPath) => providerPath.startsWith("transformers:") || providerPath.startsWith("transformers.js:"),
32931
33200
  create: async (providerPath, providerOptions, _context) => {
32932
- const { validateTransformersDependency } = await Promise.resolve().then(() => require("./transformersAvailability-CwayUSlh.cjs"));
33201
+ const { validateTransformersDependency } = await Promise.resolve().then(() => require("./transformersAvailability-DKoRtQLy.cjs"));
32933
33202
  await validateTransformersDependency();
32934
33203
  const splits = providerPath.split(":");
32935
33204
  if (splits.length < 3) throw new Error(`Invalid Transformers.js provider path: ${providerPath}. Format: transformers:<task>:<model>
@@ -32949,7 +33218,7 @@ Example: transformers:feature-extraction:Xenova/all-MiniLM-L6-v2`);
32949
33218
  test: (providerPath) => providerPath === "slack" || providerPath.startsWith("slack:"),
32950
33219
  create: async (providerPath, providerOptions, _context) => {
32951
33220
  try {
32952
- const { SlackProvider } = await Promise.resolve().then(() => require("./slack-BmVAVGaK.cjs"));
33221
+ const { SlackProvider } = await Promise.resolve().then(() => require("./slack-94iG3T0s.cjs"));
32953
33222
  if (providerPath === "slack") return new SlackProvider(providerOptions);
32954
33223
  const splits = providerPath.split(":");
32955
33224
  if (splits.length < 2) throw new Error("Invalid Slack provider path. Use slack:<channel_id> or slack:channel:<channel_id>");
@@ -33592,4 +33861,4 @@ Object.defineProperty(exports, "validateStrategies", {
33592
33861
  }
33593
33862
  });
33594
33863
 
33595
- //# sourceMappingURL=providers-CFu-TZl-.cjs.map
33864
+ //# sourceMappingURL=providers-CScd1wN6.cjs.map