promptfoo 0.121.3 → 0.121.5

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 (394) hide show
  1. package/README.md +1 -1
  2. package/dist/src/{ListApp-Du7YVwj5.js → ListApp-BRUsT43Y.js} +1 -1
  3. package/dist/src/{accounts-BPyfpSeU.cjs → accounts-BIFntVWB.cjs} +5 -5
  4. package/dist/src/{accounts-CFLK3mnD.js → accounts-CLJHCDDb.js} +6 -6
  5. package/dist/src/{accounts-B2XmGjty.js → accounts-CaLNYnf7.js} +5 -5
  6. package/dist/src/{accounts-Xatc0RYb.js → accounts-bnyHT7Ju.js} +5 -5
  7. package/dist/src/{agentic-utils-36epdqwB.js → agentic-utils-B5krlibj.js} +3 -3
  8. package/dist/src/{agentic-utils-DIYAAYE7.js → agentic-utils-Ba67xmgs.js} +3 -3
  9. package/dist/src/{agentic-utils-D8yXo5Lm.js → agentic-utils-BclbiXiq.js} +4 -4
  10. package/dist/src/{agentic-utils-DAVsChuB.cjs → agentic-utils-D2x0wGhB.cjs} +3 -3
  11. package/dist/src/{agents-CLQ-P15P.js → agents-BGqaTDnr.js} +5 -7
  12. package/dist/src/{agents-wg3ohknq.js → agents-BV9yFpXX.js} +6 -7
  13. package/dist/src/{agents-CgBniSlI.js → agents-BYdMl1UE.js} +5 -9
  14. package/dist/src/{agents-Bqgfdokm.js → agents-DhxWMCtH.js} +35 -14
  15. package/dist/src/{agents-BBWxKSM0.cjs → agents-DiWmQYH9.cjs} +5 -7
  16. package/dist/src/{agents-CAYbM7qD.cjs → agents-WULPVjbH.cjs} +34 -12
  17. package/dist/src/{agents-DSSTV4bv.js → agents-emVcx3yh.js} +35 -13
  18. package/dist/src/{agents-BBVJCIYr.js → agents-n6vPqV3i.js} +35 -13
  19. package/dist/src/{aimlapi-BwGC1TtS.js → aimlapi-BxqK9HF_.js} +8 -14
  20. package/dist/src/{aimlapi-Bv8Fmc-b.cjs → aimlapi-BzLjZI_m.cjs} +8 -15
  21. package/dist/src/{aimlapi-MgSLdvy7.js → aimlapi-DR4pgeiC.js} +7 -14
  22. package/dist/src/{aimlapi-DaC3qZ-o.js → aimlapi-uPGp0Zdo.js} +7 -16
  23. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -0
  24. package/dist/src/app/assets/Report-vjzrbgce.js +1 -0
  25. package/dist/src/app/assets/index-B3NQ8HTd.js +385 -0
  26. package/dist/src/app/assets/index-Cli2yAXv.css +1 -0
  27. package/dist/src/app/assets/rolldown-runtime-COnpUsM8.js +1 -0
  28. package/dist/src/app/assets/scroll-timeline-D9IT_e8Z.js +1 -0
  29. package/dist/src/app/assets/sync-IjzpWrOE.js +4 -0
  30. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +36 -0
  31. package/dist/src/app/assets/vendor-markdown-Ch00wnNI.js +29 -0
  32. package/dist/src/app/assets/vendor-react-CVvmk1UB.js +9 -0
  33. package/dist/src/app/assets/vendor-utils-BnEYbx2Q.js +37 -0
  34. package/dist/src/app/index.html +32 -7
  35. package/dist/src/{audio-Bn44pQxv.js → audio-BvpTOArF.js} +4 -4
  36. package/dist/src/{audio-DVFjQ67_.cjs → audio-C0vDeS0j.cjs} +4 -4
  37. package/dist/src/{audio-DjU9GswO.js → audio-CScmnmEB.js} +4 -5
  38. package/dist/src/{audio-DDA5WHdx.js → audio-Da8U9IS5.js} +4 -4
  39. package/dist/src/{base-CKjwebIH.js → base-BOMaNEes.js} +3 -3
  40. package/dist/src/{base-CqzQ4K8j.js → base-BTux96b1.js} +3 -3
  41. package/dist/src/{base-BboXIF_0.cjs → base-Tw6uhH8K.cjs} +3 -3
  42. package/dist/src/{base-Cz2ZC_iA.js → base-dYsl2hmL.js} +3 -3
  43. package/dist/src/{blobs-C6j0bvFz.cjs → blobs-B95F_7vE.cjs} +3 -3
  44. package/dist/src/{blobs-DXTl6J3H.js → blobs-BW4U31ue.js} +3 -3
  45. package/dist/src/{blobs-BUWmKWzo.js → blobs-D_gg8nbm.js} +4 -4
  46. package/dist/src/{blobs-B1JriOyi.js → blobs-DjLby-uP.js} +4 -4
  47. package/dist/src/cache-BI5BY7ey.js +280 -0
  48. package/dist/src/cache-BRkhlH3k.cjs +3 -0
  49. package/dist/src/cache-BlC6aeJ0.js +3 -0
  50. package/dist/src/cache-Bzttsk0X.js +310 -0
  51. package/dist/src/cache-Cr-qWIbP.js +310 -0
  52. package/dist/src/cache-DGg-yTZG.cjs +376 -0
  53. package/dist/src/{chat-BEwdgGEg.js → chat-BLOdH60v.js} +63 -37
  54. package/dist/src/{chat-B0iaWhoh.js → chat-Cx_LkwvZ.js} +63 -37
  55. package/dist/src/{chat-DK1U-eZ-.js → chat-D9nudO9b.js} +5 -14
  56. package/dist/src/{chat-pxmiVpWe.js → chat-DChSH_Es.js} +63 -37
  57. package/dist/src/{chat-B-52XYI1.js → chat-DG2LkwLq.js} +3 -13
  58. package/dist/src/{chat-BtIKkLKx.cjs → chat-DH97tVV9.cjs} +3 -13
  59. package/dist/src/{chat-BE0qTA8e.js → chat-aMQZw6R7.js} +4 -16
  60. package/dist/src/{chat-CM8qWR3_.cjs → chat-vYqqv1gP.cjs} +64 -38
  61. package/dist/src/{chatkit-_8eJqKcD.js → chatkit-B8X34dQc.js} +4 -4
  62. package/dist/src/{chatkit-BYGQlHlV.js → chatkit-BXu42Qwt.js} +4 -4
  63. package/dist/src/{chatkit-a2D6mY6s.js → chatkit-CbMRoeYw.js} +4 -4
  64. package/dist/src/{chatkit-Cx174XI3.cjs → chatkit-D44VyUyB.cjs} +4 -4
  65. package/dist/src/{claude-agent-sdk-8ddRp1L2.cjs → claude-agent-sdk-BRq0bbIK.cjs} +23 -18
  66. package/dist/src/{claude-agent-sdk-CMjh4LFH.js → claude-agent-sdk-BjriSVRZ.js} +20 -15
  67. package/dist/src/{claude-agent-sdk-HgbFioFw.js → claude-agent-sdk-BzNZeZ0N.js} +20 -15
  68. package/dist/src/{claude-agent-sdk-Bq5EArsX.js → claude-agent-sdk-DYv_AJ8u.js} +21 -17
  69. package/dist/src/cloud-CoD5OacT.js +3 -0
  70. package/dist/src/{cloud-z8KZpUoa.js → cloud-Da0bofJd.js} +25 -13
  71. package/dist/src/{cloudflare-ai-Bbp26N0L.js → cloudflare-ai-CXC4b1EU.js} +5 -14
  72. package/dist/src/{cloudflare-ai-BGyXlpXJ.js → cloudflare-ai-CyBoIs1Q.js} +7 -15
  73. package/dist/src/{cloudflare-ai-DdKP9TKT.js → cloudflare-ai-DGOwgexC.js} +6 -17
  74. package/dist/src/{cloudflare-ai-C62x6MQG.cjs → cloudflare-ai-DJv5qnyb.cjs} +6 -15
  75. package/dist/src/{cloudflare-gateway-DXhtXDRb.js → cloudflare-gateway-1sAoOyft.js} +6 -16
  76. package/dist/src/{cloudflare-gateway-D-e9i1Sn.js → cloudflare-gateway-D-dnkzCF.js} +5 -18
  77. package/dist/src/{cloudflare-gateway-Dx36ftqF.cjs → cloudflare-gateway-DKVjkDav.cjs} +4 -15
  78. package/dist/src/{cloudflare-gateway-BwAaUgeW.js → cloudflare-gateway-TJkVrZlB.js} +4 -15
  79. package/dist/src/codex-app-server-CCLjqCh9.js +1915 -0
  80. package/dist/src/codex-app-server-CCe0TiDc.js +1915 -0
  81. package/dist/src/codex-app-server-CPW1LFwh.js +1916 -0
  82. package/dist/src/codex-app-server-VMRnjZ68.cjs +1920 -0
  83. package/dist/src/codex-sdk-1jm_qPHf.js +3 -0
  84. package/dist/src/codex-sdk-Bd8UbO9q.cjs +1172 -0
  85. package/dist/src/codex-sdk-BgEFQ70r.js +1164 -0
  86. package/dist/src/codex-sdk-Bzb_TqX9.js +1165 -0
  87. package/dist/src/codex-sdk-Danroptg.cjs +2 -0
  88. package/dist/src/codex-sdk-DfvDTN33.js +1165 -0
  89. package/dist/src/{cometapi-BDyV-NNm.js → cometapi-B5ImDlSm.js} +9 -15
  90. package/dist/src/{cometapi-C3hOlM7-.cjs → cometapi-BgAkuYCw.cjs} +9 -16
  91. package/dist/src/{cometapi-hhL4TAh3.js → cometapi-CC7hWxmX.js} +8 -15
  92. package/dist/src/{cometapi-sp7sJpBD.js → cometapi-CCbpHkuF.js} +8 -17
  93. package/dist/src/{completion-DoYy49ti.js → completion-2iuYVxwi.js} +8 -57
  94. package/dist/src/{completion-BCimtq-h.js → completion-CrD6MQ93.js} +8 -57
  95. package/dist/src/{completion-DlXUhj5c.cjs → completion-DtQ72Bm3.cjs} +7 -62
  96. package/dist/src/{completion-DCjv7RZ3.js → completion-Vq_ad618.js} +8 -57
  97. package/dist/src/{createHash-CTQmL3G2.js → createHash-4gFQpDDv.js} +3 -3
  98. package/dist/src/{createHash-Da8fMwqB.js → createHash-DPpsZgFF.js} +3 -3
  99. package/dist/src/{createHash-DmPQkvBh.js → createHash-Un4Q_huE.js} +3 -3
  100. package/dist/src/{createHash-BYwImsYv.cjs → createHash-VvBIc-AW.cjs} +4 -4
  101. package/dist/src/{docker-CxCkwMzc.js → docker--3qzPa-6.js} +6 -14
  102. package/dist/src/{docker-Cqj2-QVi.cjs → docker-D3AY-5F5.cjs} +7 -15
  103. package/dist/src/{docker-FeBni2dw.js → docker-DCsCDvwM.js} +7 -14
  104. package/dist/src/{docker-DpguQj-w.js → docker-Dorv4_Dg.js} +6 -16
  105. package/dist/src/embedding-BXhN5lCH.cjs +63 -0
  106. package/dist/src/embedding-ChS1ivFS.js +58 -0
  107. package/dist/src/embedding-DNRvZwRN.js +59 -0
  108. package/dist/src/embedding-D_bI4NDq.js +58 -0
  109. package/dist/src/entrypoint.js +69 -6
  110. package/dist/src/{errors-P6ll7XSJ.js → errors-DFHe4L-n.js} +1 -1
  111. package/dist/src/{esm-SUNIX1x3.js → esm-B6whoAcf.js} +15 -6
  112. package/dist/src/{esm-CKWP3u_P.js → esm-BRkfNsYs.js} +16 -7
  113. package/dist/src/{esm-7UIl0pPM.js → esm-BX8fwlAO.js} +27 -18
  114. package/dist/src/{esm-CipptfDu.cjs → esm-B_rGuPTo.cjs} +15 -6
  115. package/dist/src/eval-BQPLBJbw.js +3 -0
  116. package/dist/src/{eval-BTqTn7lb.js → eval-DJ_4A-tr.js} +50 -21
  117. package/dist/src/evalResult-BBJAHAtw.cjs +2 -0
  118. package/dist/src/evalResult-BBK58h2B.js +3 -0
  119. package/dist/src/{evalResult-DpARzUCb.cjs → evalResult-Cx-8OWkb.cjs} +29 -11
  120. package/dist/src/{evalResult-DUDShQrm.js → evalResult-D6P5I5il.js} +29 -11
  121. package/dist/src/{evalResult-BkIhRdTe.js → evalResult-pSvGWFMo.js} +29 -11
  122. package/dist/src/evalResult-spPqh1G_.js +2 -0
  123. package/dist/src/{evaluator-BcvOGaam.js → evaluator-D-UIbbYq.js} +3975 -2152
  124. package/dist/src/evaluator-DgLKaZk8.js +3 -0
  125. package/dist/src/{extractor-D_wd8jxt.js → extractor-BM3jRERL.js} +6 -6
  126. package/dist/src/{extractor-DG3sSfXE.cjs → extractor-Dxr2J_wK.cjs} +6 -6
  127. package/dist/src/{extractor-CAZ2G3Kh.js → extractor-DxyiFhPk.js} +6 -6
  128. package/dist/src/{extractor-C8XwivI9.js → extractor-YlZbUMsL.js} +6 -6
  129. package/dist/src/fetch-8viavNv8.js +3 -0
  130. package/dist/src/{fetch-DoVRJZhJ.js → fetch-B6ch2nU2.js} +199 -60
  131. package/dist/src/{fetch-CVAtKnI3.js → fetch-D9xxyC1p.js} +404 -252
  132. package/dist/src/{fetch-BnR9wSnm.cjs → fetch-NuqXW1Xb.cjs} +415 -263
  133. package/dist/src/{fetch-BiYv2BZc.js → fetch-Y5qX_kST.js} +222 -70
  134. package/dist/src/{fileExtensions-LcDYkU4v.js → fileExtensions-8CjoL7vB.js} +1 -1
  135. package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-BGh-W-HT.js} +1 -1
  136. package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-D9h-8Wxg.cjs} +1 -1
  137. package/dist/src/{fileExtensions-Ds-foDzt.js → fileExtensions-DysCsxNG.js} +1 -1
  138. package/dist/src/{formatDuration-DgBVMN65.js → formatDuration-Ch4A7G3o.js} +1 -1
  139. package/dist/src/{genaiTracer-BfxrvSUb.cjs → genaiTracer-BokHC-MW.cjs} +7 -3
  140. package/dist/src/{genaiTracer-C1rxGO8Q.js → genaiTracer-C3ZPQU60.js} +6 -2
  141. package/dist/src/{genaiTracer-70Z8BIuV.js → genaiTracer-CFny3gOy.js} +6 -2
  142. package/dist/src/{genaiTracer-D3fD9dNV.js → genaiTracer-DxODqT9e.js} +6 -2
  143. package/dist/src/golang/wrapper.go +1 -1
  144. package/dist/src/{graders-DG7mhg-b.js → graders-BoUqsCEm.js} +7402 -5699
  145. package/dist/src/{graders-BElhu9ZY.cjs → graders-Bw1wk_21.cjs} +5220 -3437
  146. package/dist/src/graders-C84JI-m5.js +2 -0
  147. package/dist/src/graders-CBbd0K0Q.cjs +2 -0
  148. package/dist/src/graders-CbQqpHSN.js +3 -0
  149. package/dist/src/{graders-RjHF8VfG.js → graders-CgPn32yp.js} +7400 -5697
  150. package/dist/src/{graders-BXAJ0sbS.js → graders-CwrbifOo.js} +6136 -4433
  151. package/dist/src/graders-DS42d3ZG.js +2 -0
  152. package/dist/src/{image-6WQXK8m8.js → image-BeWaInPF.js} +4 -4
  153. package/dist/src/{image-PoF6DN3x.js → image-BmilRNqO.js} +8 -8
  154. package/dist/src/{image--F58eEIn.cjs → image-CxJoa3aW.cjs} +8 -8
  155. package/dist/src/{image-fza3zuKs.cjs → image-D10dNAav.cjs} +4 -4
  156. package/dist/src/{image-DO0RYnjH.js → image-Dr_3I3nK.js} +4 -5
  157. package/dist/src/{image-B8b6f36E.js → image-DsGRlkh7.js} +8 -8
  158. package/dist/src/{image-CoxZp9PZ.js → image-a_SGUobh.js} +8 -8
  159. package/dist/src/{image-xNbw5ph2.js → image-qjO6FWPs.js} +4 -4
  160. package/dist/src/index.cjs +4835 -2582
  161. package/dist/src/index.d.cts +2782 -31
  162. package/dist/src/index.d.ts +2783 -32
  163. package/dist/src/index.js +4817 -2564
  164. package/dist/src/{interactiveCheck-BnMYOjMu.js → interactiveCheck-CCICw2cy.js} +2 -2
  165. package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
  166. package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
  167. package/dist/src/{knowledgeBase-Bi7CmDbx.js → knowledgeBase-BBETc5-S.js} +6 -8
  168. package/dist/src/{knowledgeBase-DqrLX8fy.cjs → knowledgeBase-C8qOo26M.cjs} +6 -8
  169. package/dist/src/{knowledgeBase-DFRXPZl_.js → knowledgeBase-CzAi2rUI.js} +7 -8
  170. package/dist/src/{knowledgeBase-Ce3ofVan.js → knowledgeBase-Dr3Kib7F.js} +6 -10
  171. package/dist/src/{litellm-CKiAxnoM.js → litellm-BLSiANhk.js} +6 -14
  172. package/dist/src/{litellm-CnHI69aj.cjs → litellm-CaUmV7Mk.cjs} +6 -15
  173. package/dist/src/{litellm-Tc294Jhj.js → litellm-DQGo_juI.js} +5 -14
  174. package/dist/src/{litellm-Bo2gQXpo.js → litellm-DRc4qWfc.js} +5 -16
  175. package/dist/src/{logger-BcJBzSSA.js → logger-BbY6ypFL.js} +41 -12
  176. package/dist/src/{logger-D5iKBpu_.cjs → logger-COuQb2xB.cjs} +51 -10
  177. package/dist/src/{logger-DO8_zM18.js → logger-Ct2S6Yx-.js} +40 -11
  178. package/dist/src/{logger-BnkjG2jt.js → logger-KD8JjCRJ.js} +41 -12
  179. package/dist/src/{luma-ray-C9q8rdQe.js → luma-ray-B-tNZzqW.js} +6 -10
  180. package/dist/src/{luma-ray-DP0QA9qn.js → luma-ray-CtS3OlGq.js} +6 -10
  181. package/dist/src/{luma-ray-0ehMPt5N.js → luma-ray-PJJgUjOc.js} +6 -11
  182. package/dist/src/{luma-ray-m9Ku2meV.cjs → luma-ray-if-Ml4R9.cjs} +6 -10
  183. package/dist/src/main.d.ts +1 -26
  184. package/dist/src/main.js +1188 -679
  185. package/dist/src/messages-B9dSjrNf.js +544 -0
  186. package/dist/src/messages-BnsVHUnm.cjs +558 -0
  187. package/dist/src/messages-CI69Lasb.js +543 -0
  188. package/dist/src/messages-CewuNcNS.js +543 -0
  189. package/dist/src/{meteor-DLZZ3osF.cjs → meteor-BBGcGeCa.cjs} +1 -1
  190. package/dist/src/{meteor-DUiCJRC-.js → meteor-BKTM-7KS.js} +1 -1
  191. package/dist/src/{meteor-44VjEACX.js → meteor-CeGo0Lu2.js} +2 -2
  192. package/dist/src/{meteor-D-SotUw9.js → meteor-Wc_aUVvu.js} +2 -2
  193. package/dist/src/{modelslab-B5J-ZM5c.js → modelslab-BCLOtfek.js} +8 -10
  194. package/dist/src/{modelslab-IQbNg-r7.cjs → modelslab-BkapYJhh.cjs} +7 -10
  195. package/dist/src/{modelslab-BTOT8FUO.js → modelslab-D73OnKSx.js} +7 -10
  196. package/dist/src/{modelslab-BI458moT.js → modelslab-zpz9JcK0.js} +7 -12
  197. package/dist/src/{nova-reel-BZ9y-Y5s.js → nova-reel-B8F_TK5w.js} +7 -10
  198. package/dist/src/{nova-reel-Xw1SXLpg.js → nova-reel-Bx0NFV2f.js} +6 -10
  199. package/dist/src/{nova-reel-DEeQlnOJ.js → nova-reel-CNGJTLtG.js} +6 -12
  200. package/dist/src/{nova-reel-CE5etkv9.cjs → nova-reel-DkT7tnoB.cjs} +6 -10
  201. package/dist/src/{nova-sonic-Ogqf-csn.js → nova-sonic-BaXRN1cr.js} +5 -7
  202. package/dist/src/{nova-sonic-DXTLpi-r.js → nova-sonic-BeTRaFOh.js} +4 -7
  203. package/dist/src/{nova-sonic-DWswpN1E.js → nova-sonic-CL7Zqv0G.js} +4 -9
  204. package/dist/src/{nova-sonic-N0yCm0vb.cjs → nova-sonic-YT426juD.cjs} +4 -7
  205. package/dist/src/{openai-BcB5KlTk.js → openai-BMHD2Huo.js} +6 -3
  206. package/dist/src/{openai-BMcwgD5C.js → openai-BT-JvDse.js} +6 -3
  207. package/dist/src/{openai-CoxGAQwn.cjs → openai-Cy1XLs0c.cjs} +6 -3
  208. package/dist/src/{openai-D6wITiVn.js → openai-D4fxGvRx.js} +6 -3
  209. package/dist/src/openclaw-Bq7RVR3k.js +1200 -0
  210. package/dist/src/openclaw-DA8U4DsD.js +1201 -0
  211. package/dist/src/openclaw-DObVgpjC.js +1200 -0
  212. package/dist/src/openclaw-DUBZP3GL.cjs +1206 -0
  213. package/dist/src/{opencode-sdk-CHCs7dEb.js → opencode-sdk-BB40Wir1.js} +6 -8
  214. package/dist/src/{opencode-sdk-DDxj4QqH.js → opencode-sdk-BM1UAIv1.js} +6 -8
  215. package/dist/src/{opencode-sdk-WWJhnbKr.cjs → opencode-sdk-CeqiOcOU.cjs} +7 -9
  216. package/dist/src/{opencode-sdk-C71Z0ehR.js → opencode-sdk-ChdK7F7z.js} +6 -9
  217. package/dist/src/{otlpReceiver-CZL48YfC.js → otlpReceiver-C6thJRXi.js} +154 -98
  218. package/dist/src/{otlpReceiver-C9KlUtxh.js → otlpReceiver-CcdIikOu.js} +154 -98
  219. package/dist/src/{otlpReceiver-DHKqJlsz.cjs → otlpReceiver-DNSQj6bf.cjs} +154 -98
  220. package/dist/src/{otlpReceiver-CavGAA6k.js → otlpReceiver-UYMQx3sy.js} +154 -98
  221. package/dist/src/{providerRegistry-BkzVH5Ba.js → providerRegistry-1gB5vtzQ.js} +2 -2
  222. package/dist/src/{providerRegistry-BTDgfV5h.cjs → providerRegistry-BESeALrr.cjs} +2 -2
  223. package/dist/src/{providerRegistry-CUWki5mQ.js → providerRegistry-DoACwqhD.js} +2 -2
  224. package/dist/src/{providerRegistry-B9lh-_tx.js → providerRegistry-PMsleEzs.js} +2 -2
  225. package/dist/src/providers-BuyzKt7C.js +2 -0
  226. package/dist/src/providers-C7lNVBjX.cjs +3 -0
  227. package/dist/src/providers-CCE2COJi2.js +2 -0
  228. package/dist/src/{providers-Cn73d5sr.js → providers-CJh7iriU.js} +17180 -16823
  229. package/dist/src/providers-Ctcc592x.js +3 -0
  230. package/dist/src/{providers-DvddrgxL.js → providers-DRrerKra.js} +1052 -695
  231. package/dist/src/{providers-Ch6Mr0gn.js → providers-DT-GtF2t.js} +16716 -16359
  232. package/dist/src/{providers-CScd1wN6.cjs → providers-eDShy16E.cjs} +19893 -19506
  233. package/dist/src/python/persistent_wrapper.py +0 -5
  234. package/dist/src/{pythonUtils-Cpo0Ez1p.js → pythonUtils-C4tltmIn.js} +4 -4
  235. package/dist/src/{pythonUtils-dAVigVK-.cjs → pythonUtils-CoLaCwNY.cjs} +4 -4
  236. package/dist/src/{pythonUtils-Bzwbgpbg.js → pythonUtils-DMO68Jg7.js} +3 -3
  237. package/dist/src/{pythonUtils-wIqk7zAf.js → pythonUtils-DNqbnRdx.js} +3 -3
  238. package/dist/src/{quiverai-BeofbLVc.js → quiverai-BSS9a7wV.js} +4 -4
  239. package/dist/src/{quiverai-DVSEqJiq.js → quiverai-Bk1KrvL6.js} +4 -4
  240. package/dist/src/{quiverai-CcUhPIBg.cjs → quiverai-Bpx6MZ7T.cjs} +4 -4
  241. package/dist/src/{quiverai-CCQn73lq.js → quiverai-CPKhWgaT.js} +4 -5
  242. package/dist/src/render-7uNJ2V14.js +135 -0
  243. package/dist/src/render-DlscvAUJ.js +135 -0
  244. package/dist/src/render-eui5p5mL.js +136 -0
  245. package/dist/src/{render-BHl6QVq9.js → render-nj-UaPdn.js} +2 -3
  246. package/dist/src/render-tG6ir9_g.cjs +165 -0
  247. package/dist/src/{responses-CgNyTPsY.js → responses-1ztiVYsx.js} +56 -17
  248. package/dist/src/{responses-BKP_WYis.js → responses-B8haB-mD.js} +56 -17
  249. package/dist/src/{responses-CQb1Tj69.js → responses-BiaBguAu.js} +56 -17
  250. package/dist/src/{responses-mo0KQDbu.cjs → responses-CF-ayauu.cjs} +56 -17
  251. package/dist/src/rubyUtils-4hjGxvju.js +3 -0
  252. package/dist/src/{rubyUtils-DECSbsfY.js → rubyUtils-BI0p46eZ.js} +3 -3
  253. package/dist/src/{rubyUtils-CiVfln3g.js → rubyUtils-CIQFnVz4.js} +3 -3
  254. package/dist/src/rubyUtils-CO-tuszQ.cjs +2 -0
  255. package/dist/src/{rubyUtils-PgU-gHmx.js → rubyUtils-DGnoCYL2.js} +4 -4
  256. package/dist/src/{rubyUtils-CGeUtCfW.cjs → rubyUtils-DoifqkiA.cjs} +5 -4
  257. package/dist/src/{sagemaker-CqeASYE5.js → sagemaker-BDLeW29y.js} +14 -18
  258. package/dist/src/{sagemaker-MUbD5V3v.js → sagemaker-C5T60MKf.js} +14 -19
  259. package/dist/src/{sagemaker-CVv8W7so.js → sagemaker-ClS_NB07.js} +14 -18
  260. package/dist/src/{sagemaker-jiw1wQa-.cjs → sagemaker-ljtY12VM.cjs} +14 -18
  261. package/dist/src/{scanner-DVDeUz1r.js → scanner-nOCWNIXa.js} +130 -35
  262. package/dist/src/server/golang/wrapper.go +1 -1
  263. package/dist/src/server/index.js +4829 -2529
  264. package/dist/src/server/python/persistent_wrapper.py +0 -5
  265. package/dist/src/{server-BtoCXeXI.cjs → server-BEECpeGG.cjs} +140 -6
  266. package/dist/src/{server-DZ9MtCn0.js → server-ByiF3qlg.js} +129 -9
  267. package/dist/src/{server-Cns05F1j.js → server-ByxbqAcQ.js} +128 -8
  268. package/dist/src/server-C0XKRNB_.cjs +2 -0
  269. package/dist/src/server-C_15p79-.js +3 -0
  270. package/dist/src/{server-CP9qKM40.js → server-gyd6d4Hc.js} +126 -7
  271. package/dist/src/{signal-C3ZTsUgi.js → signal-DTtUuU3l.js} +3 -3
  272. package/dist/src/{slack-DCEV-vWP.js → slack-4zZX1OKP.js} +2 -2
  273. package/dist/src/{slack-94iG3T0s.cjs → slack-BLlsDpfG.cjs} +2 -2
  274. package/dist/src/{slack-BR0HtO3K.js → slack-BPYLQLgb.js} +2 -2
  275. package/dist/src/{slack-2sdpGzbt.js → slack-Bamy_7te.js} +2 -2
  276. package/dist/src/{store-CLyU7AtI.cjs → store-2K0kDi80.cjs} +3 -3
  277. package/dist/src/{store-VB0GP46K.js → store-2OXm_eBY.js} +3 -3
  278. package/dist/src/store-BELqNwvz.js +3 -0
  279. package/dist/src/{store-Cj258DgL.js → store-BPkzEyFM.js} +3 -3
  280. package/dist/src/{store-P8OKm19S.js → store-CPh25336.js} +3 -3
  281. package/dist/src/store-uQZ4AjPe.cjs +2 -0
  282. package/dist/src/{tables-BEIFz2tM.js → tables-BMSOS2Gg.js} +3 -3
  283. package/dist/src/{tables-BdZQEpRz.cjs → tables-CXbaZ9y1.cjs} +3 -3
  284. package/dist/src/{tables-DmzvLbeZ.js → tables-NlvH23ky.js} +3 -3
  285. package/dist/src/{tables-kC7R5kiK.js → tables-WgdUZ8Ck.js} +3 -3
  286. package/dist/src/{telemetry-DPXLd7UE.js → telemetry--iqaGyaS.js} +5 -4
  287. package/dist/src/{telemetry-re627Lre.cjs → telemetry-CEQxGnMZ.cjs} +8 -7
  288. package/dist/src/{telemetry-BugWqKiu.js → telemetry-CgdVGV8N.js} +5 -4
  289. package/dist/src/{telemetry-BnH5VJAU.js → telemetry-DWdGHvEf.js} +5 -4
  290. package/dist/src/telemetry-DjNoC_n3.cjs +2 -0
  291. package/dist/src/telemetry-ZdPZc0fm.js +3 -0
  292. package/dist/src/{text-CW1cyrwj.cjs → text-BiNME7QG.cjs} +1 -1
  293. package/dist/src/{text-Db-Wt2u2.js → text-D4lz-Jg_.js} +1 -1
  294. package/dist/src/{text-TIv0QYnd.js → text-DDQP0tuQ.js} +1 -1
  295. package/dist/src/{text-B_UCRPp2.js → text-NWvfMfkF.js} +1 -1
  296. package/dist/src/{tokenUsageUtils-DflFMjS0.js → tokenUsageUtils-2wIvAhB3.js} +7 -3
  297. package/dist/src/{tokenUsageUtils-BDGe-iyI.js → tokenUsageUtils-4c780gFd.js} +7 -3
  298. package/dist/src/{tokenUsageUtils-NYT-WKS6.js → tokenUsageUtils-BjVkdk18.js} +7 -3
  299. package/dist/src/{tokenUsageUtils-bVa1ga6f.cjs → tokenUsageUtils-C9odhsbW.cjs} +7 -3
  300. package/dist/src/{transcription-CaMivnjG.js → transcription-84t4ALo2.js} +7 -11
  301. package/dist/src/{transcription-Hb3VnC4M.js → transcription-Bm2emLmJ.js} +8 -11
  302. package/dist/src/{transcription-BvtsrzRG.cjs → transcription-CZ4LG5hQ.cjs} +9 -13
  303. package/dist/src/{transcription-DOMMTu01.js → transcription-D7Q0vJsh.js} +7 -13
  304. package/dist/src/{transform-DrleutM3.js → transform-B-b6Cq-q.js} +8 -6
  305. package/dist/src/transform-BQt0BeAW.js +3 -0
  306. package/dist/src/transform-Bq5oqC0s.cjs +2 -0
  307. package/dist/src/{transform-ZrG2dvlo.cjs → transform-C9izGX54.cjs} +5 -5
  308. package/dist/src/{transform-BzK09Q_9.js → transform-CwbAZ84V.js} +5 -5
  309. package/dist/src/{transform-0BwoBsvO.cjs → transform-Dg4LcO1Y.cjs} +18 -10
  310. package/dist/src/{transform-B2-jIv68.js → transform-DtooZqYY.js} +8 -6
  311. package/dist/src/{transform-ljLYHEPh.js → transform-DzCF-wqV.js} +5 -5
  312. package/dist/src/{transform-DyDAwEpE.js → transform-_DpNB4qp.js} +9 -7
  313. package/dist/src/{transform-BqPkNPYm.js → transform-eGiUAv86.js} +5 -5
  314. package/dist/src/{transformersAvailability-DKoRtQLy.cjs → transformersAvailability-B22swDxr.cjs} +1 -1
  315. package/dist/src/{transformersAvailability-BGkzavwb.js → transformersAvailability-lvCCvuPT.js} +1 -1
  316. package/dist/src/{transformersAvailability-D6c6ROpT.js → transformersAvailability-rJGPccjr.js} +1 -1
  317. package/dist/src/{types-Cd3ygw8W.js → types-BDjGOq4E.js} +354 -24
  318. package/dist/src/{types-CIhFeUC4.js → types-BVH9hjgW.js} +364 -23
  319. package/dist/src/{types-D8cGDZbL.cjs → types-CgG2rKiW.cjs} +534 -167
  320. package/dist/src/{types-q8GXGF65.js → types-DNRZVOue.js} +498 -167
  321. package/dist/src/{util-BLvy9qfE.js → util-3pBZZb_H.js} +151 -149
  322. package/dist/src/{util-CFj4YKIn.cjs → util-A5_ZsQUn.cjs} +66 -44
  323. package/dist/src/{util-BtoGs5Cb.js → util-B9CNhyac.js} +66 -44
  324. package/dist/src/{util-Bm3E9jpK.js → util-BQOCAHQC.js} +692 -690
  325. package/dist/src/{util-vNmDL5DT.js → util-BVXcTwXu.js} +138 -36
  326. package/dist/src/{util-CgDCK4KI.js → util-BlFVL0UF.js} +66 -44
  327. package/dist/src/{util-DM2rTn_6.js → util-C-kmRosx.js} +66 -44
  328. package/dist/src/{util-DbVG-yZU.js → util-DFPeFkiV.js} +138 -36
  329. package/dist/src/{util-DMFeUvLz.js → util-DN0-b81k.js} +138 -36
  330. package/dist/src/{util--9u9UVCt.cjs → util-Dpmm_dAI.cjs} +143 -35
  331. package/dist/src/{util-CMMkIxfU.js → util-Dub0f_ej.js} +693 -691
  332. package/dist/src/{util-CuLo2pMR.cjs → util-DvpHnLt0.cjs} +714 -719
  333. package/dist/src/{utils-DOjD4dTC.js → utils-BUMN8orw.js} +6 -4
  334. package/dist/src/{utils-DKw8mrgr.cjs → utils-DkVeShIB.cjs} +6 -4
  335. package/dist/src/{utils-DEuL4VNB.js → utils-kt7lv30R.js} +6 -4
  336. package/dist/src/{utils-CFxO9KGo.js → utils-o8S5huU2.js} +6 -4
  337. package/dist/src/version-0frU0UTr.js +16 -0
  338. package/dist/src/version-CbpiUINz.js +17 -0
  339. package/dist/src/version-CbuBKu2U.js +16 -0
  340. package/dist/src/version-D9zu9FWB.cjs +27 -0
  341. package/dist/tsconfig.tsbuildinfo +1 -1
  342. package/package.json +57 -46
  343. package/dist/src/app/assets/index-B6l9CVVb.js +0 -439
  344. package/dist/src/app/assets/index-DyZ0Ep37.css +0 -1
  345. package/dist/src/app/assets/scroll-timeline-BdJZVXlz.js +0 -1
  346. package/dist/src/app/assets/sync-CStkzc6u.js +0 -4
  347. package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +0 -36
  348. package/dist/src/app/assets/vendor-markdown-Bz7N-ca6.js +0 -29
  349. package/dist/src/app/assets/vendor-react-AtKqiNEf.js +0 -4
  350. package/dist/src/app/assets/vendor-syntax-D06x6TQF.js +0 -2
  351. package/dist/src/app/assets/vendor-utils-BvMHZmO7.js +0 -37
  352. package/dist/src/cache-C5yFZ4gC.cjs +0 -816
  353. package/dist/src/cache-CaT5tPgo.js +0 -756
  354. package/dist/src/cache-CyCanoMu.js +0 -6
  355. package/dist/src/cache-DSqR6ezl.js +0 -726
  356. package/dist/src/cache-Df_QFDNu.cjs +0 -5
  357. package/dist/src/cache-HP0NP4k3.js +0 -756
  358. package/dist/src/cloud-DE3t1-ZI.js +0 -4
  359. package/dist/src/codex-sdk-BQEw16R_.js +0 -834
  360. package/dist/src/codex-sdk-C_07GuVS.js +0 -834
  361. package/dist/src/codex-sdk-DE5G18dx.js +0 -835
  362. package/dist/src/codex-sdk-ZLKfDjqP.cjs +0 -838
  363. package/dist/src/eval-7aEqoMs3.js +0 -15
  364. package/dist/src/evalResult-CYNHkk5A.js +0 -12
  365. package/dist/src/evalResult-CuvJeNiM.js +0 -10
  366. package/dist/src/evalResult-tGdilrWt.cjs +0 -10
  367. package/dist/src/evaluator-BBUqRhz1.js +0 -36
  368. package/dist/src/fetch-UWU706qb.js +0 -5
  369. package/dist/src/graders-BxfEguVY.js +0 -32
  370. package/dist/src/graders-CzVMbEnv.js +0 -34
  371. package/dist/src/graders-DjCXfj0l.cjs +0 -32
  372. package/dist/src/graders-kHzIWOKu.js +0 -32
  373. package/dist/src/messages-DJNo37Ko.js +0 -246
  374. package/dist/src/messages-Dy9QecMs.js +0 -245
  375. package/dist/src/messages-HJsyEh4o.cjs +0 -257
  376. package/dist/src/messages-biC_ex-p.js +0 -245
  377. package/dist/src/openclaw-0Sv7AK3O.js +0 -580
  378. package/dist/src/openclaw-CXxbKgDH.cjs +0 -586
  379. package/dist/src/openclaw-D1FSCps-.js +0 -580
  380. package/dist/src/openclaw-D2ENvu7a.js +0 -582
  381. package/dist/src/providers-BSLEaIQG.js +0 -32
  382. package/dist/src/providers-D-FnDg8k.cjs +0 -31
  383. package/dist/src/providers-DEYiFVAo.js +0 -30
  384. package/dist/src/providers-sS2WI8YD.js +0 -30
  385. package/dist/src/rubyUtils-B1HXG4ej.cjs +0 -4
  386. package/dist/src/rubyUtils-Rt6pKA96.js +0 -5
  387. package/dist/src/server-B0Xh1Gx-.js +0 -7
  388. package/dist/src/server-DJTKu9IR.cjs +0 -5
  389. package/dist/src/store-C5u6MgC8.js +0 -6
  390. package/dist/src/store-CNHk-De4.cjs +0 -5
  391. package/dist/src/telemetry-Yig0Tino.js +0 -7
  392. package/dist/src/telemetry-p8Pwqm1i.cjs +0 -5
  393. package/dist/src/transform-ChNIpHz7.js +0 -6
  394. package/dist/src/transform-PtQ6rAE3.cjs +0 -5
@@ -1,21 +1,24 @@
1
- import { D as state, a as logger, b as getEnvBool, u as sanitizeObject } from "./logger-BnkjG2jt.js";
2
- import { O as TERMINAL_MAX_WIDTH, P as VERSION, t as fetchWithProxy } from "./fetch-BiYv2BZc.js";
3
- import { t as invariant } from "./invariant-vgHWClmd.js";
4
- import { o as safeResolve, r as importModule, t as getDirectory } from "./esm-CKWP3u_P.js";
5
- import { m as isProviderOptions, o as OutputFileExtension, p as isApiProvider, s as ResultFailureReason } from "./types-Cd3ygw8W.js";
6
- import { i as isJavascriptFile, t as JAVASCRIPT_EXTENSIONS } from "./fileExtensions-LcDYkU4v.js";
7
- import { r as runPython } from "./pythonUtils-Bzwbgpbg.js";
1
+ import { S as getEnvBool, a as logger, f as sanitizeObject, k as state } from "./logger-KD8JjCRJ.js";
2
+ import { A as TERMINAL_MAX_WIDTH, t as fetchWithProxy } from "./fetch-Y5qX_kST.js";
3
+ import { n as VERSION } from "./version-0frU0UTr.js";
4
+ import { t as invariant } from "./invariant-DIYf9sP1.js";
5
+ import { o as safeResolve, r as importModule, t as getDirectory } from "./esm-B6whoAcf.js";
6
+ import { a as getNunjucksEngine, n as renderVarsInObject } from "./render-7uNJ2V14.js";
7
+ import { m as isProviderOptions, o as OutputFileExtension, p as isApiProvider, s as ResultFailureReason } from "./types-BDjGOq4E.js";
8
+ import { i as isJavascriptFile, t as JAVASCRIPT_EXTENSIONS } from "./fileExtensions-BGh-W-HT.js";
9
+ import { r as runPython } from "./pythonUtils-C4tltmIn.js";
8
10
  import dotenv from "dotenv";
9
- import * as fs$1 from "fs";
11
+ import * as fs$2 from "fs";
12
+ import fs from "fs";
10
13
  import * as path$1 from "path";
11
14
  import path from "path";
12
15
  import * as os$1 from "os";
13
16
  import yaml from "js-yaml";
14
17
  import * as fsPromises from "fs/promises";
15
18
  import dedent from "dedent";
19
+ import nunjucks from "nunjucks";
16
20
  import { parse as parse$1 } from "csv-parse/sync";
17
21
  import { globSync, hasMagic } from "glob";
18
- import nunjucks from "nunjucks";
19
22
  import deepEqual from "fast-deep-equal";
20
23
  import { XMLBuilder } from "fast-xml-parser";
21
24
  import { stringify } from "csv-stringify/sync";
@@ -67,130 +70,6 @@ function parseFileUrl(fileUrl) {
67
70
  return { filePath: urlWithoutProtocol };
68
71
  }
69
72
  //#endregion
70
- //#region src/util/templates.ts
71
- /**
72
- * Get a Nunjucks engine instance with optional filters and configuration.
73
- * @param filters - Optional map of custom Nunjucks filters.
74
- * @param throwOnUndefined - Whether to throw an error on undefined variables.
75
- * @param isGrader - Whether this engine is being used in a grader context.
76
- * Nunjucks is always enabled in grader mode.
77
- * @returns A configured Nunjucks environment.
78
- */
79
- function getNunjucksEngine(filters, throwOnUndefined = false, isGrader = false) {
80
- if (!isGrader && getEnvBool("PROMPTFOO_DISABLE_TEMPLATING")) return { renderString: (template) => template };
81
- const env = nunjucks.configure({
82
- autoescape: false,
83
- throwOnUndefined
84
- });
85
- const envGlobals = {
86
- ...getEnvBool("PROMPTFOO_DISABLE_TEMPLATE_ENV_VARS", getEnvBool("PROMPTFOO_SELF_HOSTED", false)) ? {} : process.env,
87
- ...state.config?.env
88
- };
89
- env.addGlobal("env", envGlobals);
90
- env.addFilter("load", function(str) {
91
- return JSON.parse(str);
92
- });
93
- if (filters) for (const [name, filter] of Object.entries(filters)) env.addFilter(name, filter);
94
- return env;
95
- }
96
- /**
97
- * Parse Nunjucks template to extract variables.
98
- * @param template - The Nunjucks template string.
99
- * @returns An array of variables used in the template.
100
- */
101
- function extractVariablesFromTemplate(template) {
102
- const variableSet = /* @__PURE__ */ new Set();
103
- const regex = /\{\{[\s]*([^{}\s|]+)[\s]*(?:\|[^}]+)?\}\}|\{%[\s]*(?:if|for)[\s]+([^{}\s]+)[\s]*.*?%\}/g;
104
- template = template.replace(/\{#[\s\S]*?#\}/g, "");
105
- let match;
106
- while ((match = regex.exec(template)) !== null) {
107
- const variable = match[1] || match[2];
108
- if (variable) variableSet.add(variable);
109
- }
110
- const forLoopRegex = /\{%[\s]*for[\s]+(\w+)[\s]+in[\s]+(\w+)[\s]*%\}/g;
111
- while ((match = forLoopRegex.exec(template)) !== null) {
112
- variableSet.delete(match[1]);
113
- variableSet.add(match[2]);
114
- }
115
- return Array.from(variableSet);
116
- }
117
- /**
118
- * Extract variables from multiple Nunjucks templates.
119
- * @param templates - An array of Nunjucks template strings.
120
- * @returns An array of variables used in the templates.
121
- */
122
- function extractVariablesFromTemplates(templates) {
123
- const variableSet = /* @__PURE__ */ new Set();
124
- for (const template of templates) extractVariablesFromTemplate(template).forEach((variable) => variableSet.add(variable));
125
- return Array.from(variableSet);
126
- }
127
- //#endregion
128
- //#region src/util/render.ts
129
- /**
130
- * Renders ONLY environment variable templates in an object, leaving all other templates untouched.
131
- * This allows env vars to be resolved at provider load time while preserving runtime var templates.
132
- *
133
- * Supports full Nunjucks syntax for env vars including filters and expressions:
134
- * - {{ env.VAR_NAME }}
135
- * - {{ env['VAR-NAME'] }}
136
- * - {{ env["VAR-NAME"] }}
137
- * - {{ env.VAR | default('fallback') }}
138
- * - {{ env.VAR | upper }}
139
- *
140
- * Preserves non-env templates for runtime rendering:
141
- * - {{ vars.x }} - preserved as literal
142
- * - {{ prompt }} - preserved as literal
143
- *
144
- * Implementation: Uses regex to find env templates, delegates to Nunjucks for rendering.
145
- * This ensures full Nunjucks feature support while preserving non-env templates.
146
- *
147
- * @param obj - The object to process
148
- * @param envOverrides - Optional env vars to merge with (or replace) the base env
149
- * @param replaceBase - If true, envOverrides replaces the base env entirely instead of merging
150
- * @returns The object with only env templates rendered
151
- */
152
- function renderEnvOnlyInObject(obj, envOverrides, replaceBase) {
153
- if (getEnvBool("PROMPTFOO_DISABLE_TEMPLATING")) return obj;
154
- if (typeof obj === "string") {
155
- const nunjucks = getNunjucksEngine();
156
- const baseEnvGlobals = nunjucks.getGlobal("env");
157
- const envGlobals = replaceBase ? envOverrides ?? {} : envOverrides ? {
158
- ...baseEnvGlobals,
159
- ...envOverrides
160
- } : baseEnvGlobals;
161
- return obj.replace(/\{\{(?:[^}]|\}(?!\}))*\}\}/g, (match) => {
162
- if (!match.match(/\benv\.|env\[/)) return match;
163
- const varMatch = match.match(/env\.(\w+)|env\[['"]([^'"]+)['"]\]/);
164
- const varName = varMatch?.[1] || varMatch?.[2];
165
- if (match.includes("|") || varName && varName in envGlobals && envGlobals[varName] !== void 0) try {
166
- return nunjucks.renderString(match, { env: envGlobals });
167
- } catch (error) {
168
- logger.debug(`Failed to render env template "${match}": ${error instanceof Error ? error.message : String(error)}`);
169
- return match;
170
- }
171
- return match;
172
- });
173
- }
174
- if (Array.isArray(obj)) return obj.map((item) => renderEnvOnlyInObject(item, envOverrides, replaceBase));
175
- if (typeof obj === "object" && obj !== null) {
176
- const result = {};
177
- for (const key in obj) result[key] = renderEnvOnlyInObject(obj[key], envOverrides, replaceBase);
178
- return result;
179
- }
180
- return obj;
181
- }
182
- function renderVarsInObject(obj, vars) {
183
- if (!vars || getEnvBool("PROMPTFOO_DISABLE_TEMPLATING")) return obj;
184
- if (typeof obj === "string") return getNunjucksEngine().renderString(obj, vars);
185
- if (Array.isArray(obj)) return obj.map((item) => renderVarsInObject(item, vars));
186
- if (typeof obj === "object" && obj !== null) {
187
- const result = {};
188
- for (const key in obj) result[key] = renderVarsInObject(obj[key], vars);
189
- return result;
190
- } else if (typeof obj === "function") return renderVarsInObject(obj({ vars }));
191
- return obj;
192
- }
193
- //#endregion
194
73
  //#region src/util/file.ts
195
74
  /**
196
75
  * Simple Nunjucks engine specifically for file paths
@@ -244,7 +123,7 @@ function maybeLoadFromExternalFile(filePath, context) {
244
123
  for (const matchedFile of matchedFiles) {
245
124
  let contents;
246
125
  try {
247
- contents = fs$1.readFileSync(matchedFile, "utf8");
126
+ contents = fs$2.readFileSync(matchedFile, "utf8");
248
127
  } catch (error) {
249
128
  if (error.code === "ENOENT") {
250
129
  logger.debug(`File disappeared during glob expansion: ${matchedFile}`);
@@ -272,7 +151,7 @@ function maybeLoadFromExternalFile(filePath, context) {
272
151
  const finalPath = resolvedPath;
273
152
  let contents;
274
153
  try {
275
- contents = fs$1.readFileSync(finalPath, "utf8");
154
+ contents = fs$2.readFileSync(finalPath, "utf8");
276
155
  } catch (error) {
277
156
  if (error.code === "ENOENT") throw new Error(`File does not exist: ${finalPath}`);
278
157
  throw new Error(`Failed to read file ${finalPath}: ${error}`);
@@ -315,10 +194,10 @@ function getResolvedRelativePath(filePath, isCloudConfig) {
315
194
  */
316
195
  function maybeLoadConfigFromExternalFile(config, context) {
317
196
  if (Array.isArray(config)) return config.map((item) => maybeLoadConfigFromExternalFile(item, context));
318
- if (config && typeof config === "object" && config !== null) {
197
+ if (typeof config === "object" && config !== null) {
319
198
  const result = {};
320
199
  for (const key of Object.keys(config)) {
321
- const childContext = key === "value" && typeof config === "object" && config && "type" in config && typeof config.type === "string" && (config.type === "python" || config.type === "javascript") ? "assertion" : key === "vars" ? "vars" : context;
200
+ const childContext = key === "value" && "type" in config && typeof config.type === "string" && (config.type === "python" || config.type === "javascript") ? "assertion" : key === "vars" ? "vars" : context;
322
201
  result[key] = maybeLoadConfigFromExternalFile(config[key], childContext);
323
202
  }
324
203
  return result;
@@ -350,7 +229,7 @@ function parsePathOrGlob(basePath, promptPath) {
350
229
  }
351
230
  let stats;
352
231
  try {
353
- stats = fs$1.statSync(path$1.join(basePath, filename));
232
+ stats = fs$2.statSync(path$1.join(basePath, filename));
354
233
  } catch (err) {
355
234
  if (getEnvBool("PROMPTFOO_STRICT_FILES")) throw err;
356
235
  }
@@ -367,7 +246,7 @@ function parsePathOrGlob(basePath, promptPath) {
367
246
  function readOutput(outputPath) {
368
247
  const ext = path$1.parse(outputPath).ext.slice(1);
369
248
  switch (ext) {
370
- case "json": return JSON.parse(fs$1.readFileSync(outputPath, "utf-8"));
249
+ case "json": return JSON.parse(fs$2.readFileSync(outputPath, "utf-8"));
371
250
  default: throw new Error(`Unsupported output file format: ${ext} currently only supports json`);
372
251
  }
373
252
  }
@@ -506,11 +385,32 @@ async function maybeLoadToolsFromExternalFile(tools, vars) {
506
385
  return loaded;
507
386
  }
508
387
  //#endregion
509
- //#region src/util/provider.ts
388
+ //#region src/util/providerRef.ts
389
+ const PROVIDER_OPTION_KEYS = new Set([
390
+ "id",
391
+ "label",
392
+ "config",
393
+ "prompts",
394
+ "transform",
395
+ "delay",
396
+ "env",
397
+ "inputs"
398
+ ]);
399
+ /** Returns true if the value is a non-empty string suitable as a provider identifier. */
400
+ function isValidProviderId(id) {
401
+ return typeof id === "string" && id !== "";
402
+ }
403
+ function getProviderLabel(provider) {
404
+ if ((typeof provider === "object" || typeof provider === "function") && provider !== null && "label" in provider && typeof provider.label === "string") return provider.label;
405
+ }
406
+ /**
407
+ * Resolves relative file paths in provider IDs to absolute paths for consistent matching.
408
+ * Handles file://, exec:, python:, golang: prefixes and bare .js/.ts/.mjs paths.
409
+ */
510
410
  function canonicalizeProviderId(id) {
511
411
  if (id.startsWith("file://")) {
512
412
  const filePath = id.slice(7);
513
- return path$1.isAbsolute(filePath) ? id : `file://${path$1.resolve(filePath)}`;
413
+ return path.isAbsolute(filePath) ? id : `file://${path.resolve(filePath)}`;
514
414
  }
515
415
  for (const prefix of [
516
416
  "exec:",
@@ -518,19 +418,121 @@ function canonicalizeProviderId(id) {
518
418
  "golang:"
519
419
  ]) if (id.startsWith(prefix)) {
520
420
  const filePath = id.slice(prefix.length);
521
- if (filePath.includes("/") || filePath.includes("\\")) return `${prefix}${path$1.resolve(filePath)}`;
421
+ if (filePath.includes("/") || filePath.includes("\\")) return `${prefix}${path.resolve(filePath)}`;
522
422
  return id;
523
423
  }
524
- if ((id.endsWith(".js") || id.endsWith(".ts") || id.endsWith(".mjs")) && (id.includes("/") || id.includes("\\"))) return `file://${path$1.resolve(id)}`;
424
+ if ((id.endsWith(".js") || id.endsWith(".ts") || id.endsWith(".mjs")) && (id.includes("/") || id.includes("\\"))) return `file://${path.resolve(id)}`;
525
425
  return id;
526
426
  }
527
- function getProviderLabel(provider) {
528
- return provider?.label && typeof provider.label === "string" ? provider.label : void 0;
427
+ /**
428
+ * Returns true for provider refs that should be expanded from YAML/JSON config files.
429
+ */
430
+ function isProviderConfigFileReference(providerPath) {
431
+ return providerPath.startsWith("file://") && (providerPath.endsWith(".yaml") || providerPath.endsWith(".yml") || providerPath.endsWith(".json"));
432
+ }
433
+ /**
434
+ * Reads a provider config file and normalizes single-provider and multi-provider files.
435
+ * Returns a `wasArray` flag so callers can detect multi-provider files that require
436
+ * `loadApiProviders` instead of `loadApiProvider`.
437
+ */
438
+ function readProviderConfigFile(providerPath, basePath) {
439
+ const relativePath = providerPath.slice(7);
440
+ const resolvedPath = path.isAbsolute(relativePath) ? relativePath : path.join(basePath || process.cwd(), relativePath);
441
+ let rawContent;
442
+ try {
443
+ rawContent = yaml.load(fs.readFileSync(resolvedPath, "utf8"));
444
+ } catch (err) {
445
+ throw new Error(`Failed to load provider config ${relativePath}: ${err instanceof Error ? err.message : err}`);
446
+ }
447
+ const fileContent = maybeLoadConfigFromExternalFile(rawContent);
448
+ invariant(fileContent, `Provider config ${relativePath} is undefined`);
449
+ return {
450
+ configs: [fileContent].flat(),
451
+ relativePath,
452
+ wasArray: Array.isArray(fileContent)
453
+ };
454
+ }
455
+ /**
456
+ * Loads provider config objects from a file-backed provider reference.
457
+ */
458
+ function loadProviderConfigsFromFile(providerPath, basePath) {
459
+ return readProviderConfigFile(providerPath, basePath).configs;
529
460
  }
461
+ /**
462
+ * Pure, synchronous classifier that converts every supported provider reference shape
463
+ * into a discriminated descriptor. Does not read files or instantiate providers.
464
+ */
465
+ function normalizeProviderRef(provider, options = {}) {
466
+ const { index } = options;
467
+ if (typeof provider === "string") {
468
+ if (!isValidProviderId(provider)) return {
469
+ kind: "unknown",
470
+ id: index === void 0 ? "unknown" : `unknown-${index}`
471
+ };
472
+ if (isProviderConfigFileReference(provider)) return {
473
+ kind: "file",
474
+ id: provider,
475
+ loadProviderPath: provider
476
+ };
477
+ return {
478
+ kind: "named",
479
+ id: provider,
480
+ loadProviderPath: provider
481
+ };
482
+ }
483
+ if (typeof provider === "function") {
484
+ const label = getProviderLabel(provider);
485
+ return {
486
+ kind: "function",
487
+ id: label ?? (index === void 0 ? "custom-function" : `custom-function-${index}`),
488
+ label
489
+ };
490
+ }
491
+ if (typeof provider === "object" && provider !== null && !Array.isArray(provider)) {
492
+ const providerId = provider.id;
493
+ const label = getProviderLabel(provider);
494
+ if (isValidProviderId(providerId)) return {
495
+ kind: "options",
496
+ id: providerId,
497
+ label,
498
+ loadOptions: provider,
499
+ loadProviderPath: providerId
500
+ };
501
+ const keys = Object.keys(provider);
502
+ if (keys.length === 1 && !PROVIDER_OPTION_KEYS.has(keys[0])) {
503
+ const originalId = keys[0];
504
+ const providerObject = provider[originalId];
505
+ if (typeof providerObject === "object" && providerObject !== null && !Array.isArray(providerObject) && isValidProviderId(originalId)) {
506
+ const id = isValidProviderId(providerObject.id) ? providerObject.id : originalId;
507
+ return {
508
+ kind: "map",
509
+ id,
510
+ label: getProviderLabel(providerObject),
511
+ loadOptions: {
512
+ ...providerObject,
513
+ id
514
+ },
515
+ loadProviderPath: originalId
516
+ };
517
+ }
518
+ }
519
+ if (isValidProviderId(label)) return {
520
+ kind: "unknown",
521
+ id: label,
522
+ label
523
+ };
524
+ }
525
+ return {
526
+ kind: "unknown",
527
+ id: index === void 0 ? "unknown" : `unknown-${index}`
528
+ };
529
+ }
530
+ //#endregion
531
+ //#region src/util/provider.ts
530
532
  function providerToIdentifier(provider) {
531
533
  if (!provider) return;
532
534
  if (typeof provider === "string") return canonicalizeProviderId(provider);
533
- const label = getProviderLabel(provider);
535
+ const { label } = normalizeProviderRef(provider);
534
536
  if (label) return label;
535
537
  if (isApiProvider(provider)) return canonicalizeProviderId(provider.id());
536
538
  if (isProviderOptions(provider)) {
@@ -797,7 +799,7 @@ function setupEnv(envPath) {
797
799
  dotenv.config({ quiet: true });
798
800
  return;
799
801
  }
800
- for (const p of paths) if (!fs$1.existsSync(p)) throw new Error(`Environment file not found: ${p}`);
802
+ for (const p of paths) if (!fs$2.existsSync(p)) throw new Error(`Environment file not found: ${p}`);
801
803
  if (paths.length === 1) logger.info(`Loading environment variables from ${paths[0]}`);
802
804
  else logger.info(`Loading environment variables from: ${paths.join(", ")}`);
803
805
  const pathArg = paths.length === 1 ? paths[0] : paths;
@@ -1421,6 +1423,6 @@ function printBorder() {
1421
1423
  logger.info(border);
1422
1424
  }
1423
1425
  //#endregion
1424
- export { readFilters as A, getResolvedRelativePath as C, maybeLoadResponseFormatFromExternalFile as D, maybeLoadFromExternalFileWithVars as E, extractVariablesFromTemplates as F, getNunjucksEngine as I, loadFunction as L, renderEnvOnlyInObject as M, renderVarsInObject as N, maybeLoadToolsFromExternalFile as O, extractVariablesFromTemplate as P, parseFileUrl as R, getNunjucksEngineForFilePath as S, maybeLoadFromExternalFile as T, getProviderDescription as _, evalTableToJson as a, isOpenAiProvider as b, fetchCsvFromGoogleSheet as c, extractRuntimeVars as d, filterRuntimeVars as f, doesProviderRefMatch as g, checkProviderApiKeys as h, ComparisonEvalNotFoundError as i, readOutput as j, parsePathOrGlob as k, setupEnv as l, resultIsForTestCase as m, writeMultipleOutputs as n, generateEvalCsv as o, getTestCaseDeduplicationKey as p, writeOutput as r, mergeComparisonTables as s, printBorder as t, deduplicateTestCases as u, isAnthropicProvider as v, maybeLoadConfigFromExternalFile as w, isProviderAllowed as x, isGoogleProvider as y };
1426
+ export { maybeLoadFromExternalFileWithVars as A, loadProviderConfigsFromFile as C, getResolvedRelativePath as D, getNunjucksEngineForFilePath as E, readOutput as F, loadFunction as I, parseFileUrl as L, maybeLoadToolsFromExternalFile as M, parsePathOrGlob as N, maybeLoadConfigFromExternalFile as O, readFilters as P, isProviderConfigFileReference as S, readProviderConfigFile as T, getProviderDescription as _, evalTableToJson as a, isOpenAiProvider as b, fetchCsvFromGoogleSheet as c, extractRuntimeVars as d, filterRuntimeVars as f, doesProviderRefMatch as g, checkProviderApiKeys as h, ComparisonEvalNotFoundError as i, maybeLoadResponseFormatFromExternalFile as j, maybeLoadFromExternalFile as k, setupEnv as l, resultIsForTestCase as m, writeMultipleOutputs as n, generateEvalCsv as o, getTestCaseDeduplicationKey as p, writeOutput as r, mergeComparisonTables as s, printBorder as t, deduplicateTestCases as u, isAnthropicProvider as v, normalizeProviderRef as w, isProviderAllowed as x, isGoogleProvider as y };
1425
1427
 
1426
- //# sourceMappingURL=util-BLvy9qfE.js.map
1428
+ //# sourceMappingURL=util-3pBZZb_H.js.map
@@ -1,19 +1,20 @@
1
- const require_logger = require("./logger-D5iKBpu_.cjs");
2
- const require_util = require("./util-CuLo2pMR.cjs");
3
- const require_fetch = require("./fetch-BnR9wSnm.cjs");
1
+ const require_logger = require("./logger-COuQb2xB.cjs");
2
+ const require_fetch = require("./fetch-NuqXW1Xb.cjs");
3
+ const require_util = require("./util-DvpHnLt0.cjs");
4
4
  let openai = require("openai");
5
5
  openai = require_logger.__toESM(openai);
6
6
  //#region src/providers/openai/util.ts
7
7
  const ajv = require_logger.getAjv();
8
+ const GPT_5_4_LONG_CONTEXT_THRESHOLD = 272e3;
8
9
  const OPENAI_CHAT_MODELS = [
9
- {
10
- id: "gpt-4o-mini-tts",
10
+ ...["gpt-4o-mini-tts", "gpt-4o-mini-tts-2025-12-15"].map((model) => ({
11
+ id: model,
11
12
  cost: {
12
13
  input: .6 / 1e6,
13
14
  output: 0 / 1e6,
14
15
  audioOutput: 12 / 1e6
15
16
  }
16
- },
17
+ })),
17
18
  ...["gpt-4o-search-preview", "gpt-4o-search-preview-2025-03-11"].map((model) => ({
18
19
  id: model,
19
20
  cost: {
@@ -360,7 +361,12 @@ const OPENAI_CHAT_MODELS = [
360
361
  id: model,
361
362
  cost: {
362
363
  input: 2.5 / 1e6,
363
- output: 15 / 1e6
364
+ output: 15 / 1e6,
365
+ longContext: {
366
+ threshold: GPT_5_4_LONG_CONTEXT_THRESHOLD,
367
+ input: 5 / 1e6,
368
+ output: 22.5 / 1e6
369
+ }
364
370
  }
365
371
  })),
366
372
  ...["gpt-5.4-mini", "gpt-5.4-mini-2026-03-17"].map((model) => ({
@@ -377,13 +383,6 @@ const OPENAI_CHAT_MODELS = [
377
383
  output: 1.25 / 1e6
378
384
  }
379
385
  })),
380
- ...["gpt-5.4-pro", "gpt-5.4-pro-2026-03-05"].map((model) => ({
381
- id: model,
382
- cost: {
383
- input: 30 / 1e6,
384
- output: 180 / 1e6
385
- }
386
- })),
387
386
  ...["gpt-audio", "gpt-audio-2025-08-28"].map((model) => ({
388
387
  id: model,
389
388
  cost: {
@@ -393,7 +392,20 @@ const OPENAI_CHAT_MODELS = [
393
392
  audioOutput: 80 / 1e6
394
393
  }
395
394
  })),
396
- ...["gpt-audio-mini", "gpt-audio-mini-2025-10-06"].map((model) => ({
395
+ {
396
+ id: "gpt-audio-1.5",
397
+ cost: {
398
+ input: 2.5 / 1e6,
399
+ output: 10 / 1e6,
400
+ audioInput: 32 / 1e6,
401
+ audioOutput: 64 / 1e6
402
+ }
403
+ },
404
+ ...[
405
+ "gpt-audio-mini",
406
+ "gpt-audio-mini-2025-12-15",
407
+ "gpt-audio-mini-2025-10-06"
408
+ ].map((model) => ({
397
409
  id: model,
398
410
  cost: {
399
411
  input: .6 / 1e6,
@@ -403,6 +415,18 @@ const OPENAI_CHAT_MODELS = [
403
415
  }
404
416
  }))
405
417
  ];
418
+ const OPENAI_RESPONSES_ONLY_MODELS = [...["gpt-5.4-pro", "gpt-5.4-pro-2026-03-05"].map((model) => ({
419
+ id: model,
420
+ cost: {
421
+ input: 30 / 1e6,
422
+ output: 180 / 1e6,
423
+ longContext: {
424
+ threshold: GPT_5_4_LONG_CONTEXT_THRESHOLD,
425
+ input: 60 / 1e6,
426
+ output: 270 / 1e6
427
+ }
428
+ }
429
+ }))];
406
430
  const OPENAI_DEEP_RESEARCH_MODELS = [...["o3-deep-research", "o3-deep-research-2025-06-26"].map((model) => ({
407
431
  id: model,
408
432
  cost: {
@@ -428,26 +452,20 @@ const OPENAI_COMPLETION_MODELS = [
428
452
  { id: "text-babbage-002" }
429
453
  ];
430
454
  const OPENAI_REALTIME_MODELS = [
431
- {
432
- id: "gpt-realtime",
433
- type: "chat",
434
- cost: {
435
- input: 32 / 1e6,
436
- output: 64 / 1e6,
437
- audioInput: 32 / 1e6,
438
- audioOutput: 64 / 1e6
439
- }
440
- },
441
- {
442
- id: "gpt-realtime",
455
+ ...[
456
+ "gpt-realtime",
457
+ "gpt-realtime-2025-08-28",
458
+ "gpt-realtime-1.5"
459
+ ].map((model) => ({
460
+ id: model,
443
461
  type: "chat",
444
462
  cost: {
445
463
  input: 4 / 1e6,
446
464
  output: 16 / 1e6,
447
- audioInput: 40 / 1e6,
448
- audioOutput: 80 / 1e6
465
+ audioInput: 32 / 1e6,
466
+ audioOutput: 64 / 1e6
449
467
  }
450
- },
468
+ })),
451
469
  {
452
470
  id: "gpt-4o-realtime-preview",
453
471
  type: "chat",
@@ -498,18 +516,12 @@ const OPENAI_REALTIME_MODELS = [
498
516
  audioOutput: 20 / 1e6
499
517
  }
500
518
  },
501
- {
502
- id: "gpt-realtime-mini",
503
- type: "chat",
504
- cost: {
505
- input: .6 / 1e6,
506
- output: 2.4 / 1e6,
507
- audioInput: 10 / 1e6,
508
- audioOutput: 20 / 1e6
509
- }
510
- },
511
- {
512
- id: "gpt-realtime-mini-2025-10-06",
519
+ ...[
520
+ "gpt-realtime-mini",
521
+ "gpt-realtime-mini-2025-12-15",
522
+ "gpt-realtime-mini-2025-10-06"
523
+ ].map((model) => ({
524
+ id: model,
513
525
  type: "chat",
514
526
  cost: {
515
527
  input: .6 / 1e6,
@@ -517,7 +529,7 @@ const OPENAI_REALTIME_MODELS = [
517
529
  audioInput: 10 / 1e6,
518
530
  audioOutput: 20 / 1e6
519
531
  }
520
- }
532
+ }))
521
533
  ];
522
534
  const OPENAI_TRANSCRIPTION_MODELS = [
523
535
  {
@@ -528,10 +540,18 @@ const OPENAI_TRANSCRIPTION_MODELS = [
528
540
  id: "gpt-4o-mini-transcribe",
529
541
  cost: { perMinute: .003 }
530
542
  },
543
+ {
544
+ id: "gpt-4o-mini-transcribe-2025-12-15",
545
+ cost: { perMinute: .003 }
546
+ },
531
547
  {
532
548
  id: "gpt-4o-transcribe-diarize",
533
549
  cost: { perMinute: .006 }
534
550
  },
551
+ {
552
+ id: "gpt-4o-transcribe-diarize-2025-10-15",
553
+ cost: { perMinute: .006 }
554
+ },
535
555
  {
536
556
  id: "whisper-1",
537
557
  cost: { perMinute: .006 }
@@ -542,6 +562,7 @@ function calculateOpenAICost(modelName, config, promptTokens, completionTokens,
542
562
  ...OPENAI_CHAT_MODELS,
543
563
  ...OPENAI_COMPLETION_MODELS,
544
564
  ...OPENAI_REALTIME_MODELS,
565
+ ...OPENAI_RESPONSES_ONLY_MODELS,
545
566
  ...OPENAI_DEEP_RESEARCH_MODELS
546
567
  ]);
547
568
  if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || !Number.isFinite(audioPromptTokens) || !Number.isFinite(audioCompletionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined" || typeof audioPromptTokens === "undefined" || typeof audioCompletionTokens === "undefined") return;
@@ -549,6 +570,7 @@ function calculateOpenAICost(modelName, config, promptTokens, completionTokens,
549
570
  ...OPENAI_CHAT_MODELS,
550
571
  ...OPENAI_COMPLETION_MODELS,
551
572
  ...OPENAI_REALTIME_MODELS,
573
+ ...OPENAI_RESPONSES_ONLY_MODELS,
552
574
  ...OPENAI_DEEP_RESEARCH_MODELS
553
575
  ].find((m) => m.id === modelName);
554
576
  if (!model || !model.cost) return;
@@ -664,4 +686,4 @@ Object.defineProperty(exports, "validateFunctionCall", {
664
686
  }
665
687
  });
666
688
 
667
- //# sourceMappingURL=util-CFj4YKIn.cjs.map
689
+ //# sourceMappingURL=util-A5_ZsQUn.cjs.map