promptfoo 0.120.26 → 0.121.1

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 (366) hide show
  1. package/README.md +1 -1
  2. package/dist/drizzle/0023_wooden_mandrill.sql +2 -0
  3. package/dist/drizzle/meta/0023_snapshot.json +1496 -0
  4. package/dist/drizzle/meta/_journal.json +7 -0
  5. package/dist/src/{ListApp-D3DG0F8h.js → ListApp-Du7YVwj5.js} +2 -4
  6. package/dist/src/accounts-BgNJDBE6.js +206 -0
  7. package/dist/src/{accounts-BzEY8H3v.cjs → accounts-Bx-x3bmW.cjs} +99 -80
  8. package/dist/src/{accounts-DHHiXsy6.js → accounts-CMqkzrVf.js} +61 -36
  9. package/dist/src/{accounts-R3gfCR_g.js → accounts-xrUGFA6n.js} +60 -35
  10. package/dist/src/{agentic-utils-D6_gzOUF.js → agentic-utils-BKIN5PKu.js} +9 -10
  11. package/dist/src/{agents-CwM7re15.cjs → agents-B0f4HICh.cjs} +37 -40
  12. package/dist/src/{agents-Cnph5GLD.js → agents-C-dDThPK.js} +37 -37
  13. package/dist/src/{agents-C7BiinFI.cjs → agents-CErsqg5U.cjs} +19 -27
  14. package/dist/src/{agents-v4cW_ZgC.js → agents-CVIn-Utx.js} +19 -22
  15. package/dist/src/{agents-GiUianme.js → agents-CXknwsFX.js} +37 -40
  16. package/dist/src/{agents-DETIQHqF.js → agents-DeH4Gu94.js} +21 -28
  17. package/dist/src/{agents-DYIT-hQy.js → agents-Dy2YpZpa.js} +38 -41
  18. package/dist/src/{agents-Cao4i7AX.js → agents-aF4-T121.js} +19 -30
  19. package/dist/src/{aimlapi-DMF6v_vb.js → aimlapi-BAGZDo5G.js} +16 -18
  20. package/dist/src/{aimlapi-CMJpKK-B.js → aimlapi-BNfTBexL.js} +15 -17
  21. package/dist/src/{aimlapi-DtSf1ykJ.js → aimlapi-DHRKlBEA.js} +15 -4
  22. package/dist/src/{aimlapi-DoGLcQW_.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
  23. package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
  24. package/dist/src/app/assets/index-NCn4eVBv.css +1 -0
  25. package/dist/src/app/assets/{vendor-charts-CYyo8R8v.js → vendor-charts-CCl15Imd.js} +1 -1
  26. package/dist/src/app/assets/{vendor-markdown-DSmzq4Jh.js → vendor-markdown-0tekx3KX.js} +1 -1
  27. package/dist/src/app/index.html +4 -34
  28. package/dist/src/{audio-DUH4q0Xq.js → audio-BRODU0UK.js} +7 -9
  29. package/dist/src/{audio-BWjyvHn9.cjs → audio-BWeaWovU.cjs} +6 -7
  30. package/dist/src/{audio-U580w8jM.js → audio-CHQ4r-RV.js} +6 -5
  31. package/dist/src/{audio-BrJBFN2b.js → audio-tf_NBjlC.js} +6 -8
  32. package/dist/src/base-B0tcrnq_.js +193 -0
  33. package/dist/src/base-B4QJRyFS.js +194 -0
  34. package/dist/src/base-DBtwl2FR.cjs +222 -0
  35. package/dist/src/base-fEDN28WM.js +193 -0
  36. package/dist/src/{blobs-kt8v3UyH.js → blobs-BAU-dXan.js} +9 -12
  37. package/dist/src/{blobs-C9J2mVgo.js → blobs-Bpg5rH6i.js} +9 -12
  38. package/dist/src/{blobs-673H0jCl.cjs → blobs-DvS-O6be.cjs} +34 -37
  39. package/dist/src/blobs-qTYm-1PY.js +236 -0
  40. package/dist/src/{cache-BLLayYEN.js → cache-8XhNqPKW.js} +64 -67
  41. package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
  42. package/dist/src/cache-BwsMSda7.js +6 -0
  43. package/dist/src/{cache-mIszOnuz.js → cache-CG0SlR1d.js} +64 -66
  44. package/dist/src/{cache-7xULbvt3.cjs → cache-COish3-W.cjs} +114 -117
  45. package/dist/src/cache-D3eqDYGU.js +739 -0
  46. package/dist/src/{chat-Fl6TZJRS.cjs → chat-2K608PeQ.cjs} +20 -21
  47. package/dist/src/chat-BKm79wib.js +764 -0
  48. package/dist/src/{chat-XPN9YHhr.js → chat-CM_kyI8B.js} +20 -9
  49. package/dist/src/{chat-DIywASPG.js → chat-CRWNNq73.js} +49 -49
  50. package/dist/src/{chat-C8Ei4f87.js → chat-CznLWr_D.js} +49 -49
  51. package/dist/src/{chat-CgyGj2hC.js → chat-DHMH-N64.js} +20 -22
  52. package/dist/src/{chat-C4zqjObh.cjs → chat-DaqekjFr.cjs} +69 -69
  53. package/dist/src/{chat-Cpz3O-Xl.js → chat-DxysjBvt.js} +21 -23
  54. package/dist/src/{chatkit-Dpxrq4eD.js → chatkit-65VXf5SR.js} +58 -58
  55. package/dist/src/{chatkit-DIrJX8xk.js → chatkit-Be-Q-a9F.js} +58 -60
  56. package/dist/src/{chatkit-DEls11hE.js → chatkit-BxFvW8KY.js} +58 -60
  57. package/dist/src/{chatkit-e25Ziu17.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
  58. package/dist/src/chunk-DEq-mXcV.js +15 -0
  59. package/dist/src/chunk-DRamLcfz.js +16 -0
  60. package/dist/src/{claude-agent-sdk-6-xTaLwM.js → claude-agent-sdk-BLTu0WBO.js} +45 -31
  61. package/dist/src/{claude-agent-sdk-BzxF6NIJ.cjs → claude-agent-sdk-CJH22shf.cjs} +44 -29
  62. package/dist/src/{claude-agent-sdk-CmkTnKGH.js → claude-agent-sdk-D6_k9FKA.js} +45 -33
  63. package/dist/src/{claude-agent-sdk-rXCBLK_o.js → claude-agent-sdk-Dy5lT-Tx.js} +46 -21
  64. package/dist/src/{cloud-BMbRVJFw.js → cloud-Bc9526yV.js} +32 -12
  65. package/dist/src/cloud-DmE0EwsY.js +4 -0
  66. package/dist/src/{cloudflare-ai-CUg4BTcj.js → cloudflare-ai-C9r2sRhw.js} +16 -18
  67. package/dist/src/{cloudflare-ai-Z9X219gp.js → cloudflare-ai-CWWJCRim.js} +16 -4
  68. package/dist/src/{cloudflare-ai-BAQ0u_dg.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
  69. package/dist/src/{cloudflare-ai-CobxMTR4.js → cloudflare-ai-ICsOuD-z.js} +17 -19
  70. package/dist/src/{cloudflare-gateway-C0sgfr_z.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
  71. package/dist/src/{cloudflare-gateway-_itGuXry.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
  72. package/dist/src/{cloudflare-gateway-D2_yi-Fh.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
  73. package/dist/src/{cloudflare-gateway-Djf3F3_H.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
  74. package/dist/src/{codex-sdk-ibXwdglL.js → codex-sdk-C6UMlxwV.js} +49 -32
  75. package/dist/src/{codex-sdk-BASDNkIl.js → codex-sdk-DUwKWezN.js} +49 -30
  76. package/dist/src/{codex-sdk-dSnGdgIp.js → codex-sdk-GGAw0qbD.js} +49 -32
  77. package/dist/src/{codex-sdk-wTEpMM_X.cjs → codex-sdk-fAO0c3yA.cjs} +49 -32
  78. package/dist/src/{cometapi-B01btbfb.js → cometapi-BasUi7-_.js} +17 -19
  79. package/dist/src/{cometapi-DHUAH6nK.js → cometapi-Bbjp5V4x.js} +16 -4
  80. package/dist/src/{cometapi-ChAaRjg5.js → cometapi-DkXrKi5z.js} +21 -24
  81. package/dist/src/{cometapi-JbvOJSCO.cjs → cometapi-vY6aDZgo.cjs} +21 -22
  82. package/dist/src/{completion-D9_MDlnd.js → completion-6Mx_iXxK.js} +11 -13
  83. package/dist/src/{completion-BBJ6zmG3.js → completion-C5rtR_9P.js} +11 -13
  84. package/dist/src/{completion-DDyL3Cb2.cjs → completion-CDOouNzq.cjs} +21 -23
  85. package/dist/src/completion-C_P3ypkJ.js +120 -0
  86. package/dist/src/createHash-CTQmL3G2.js +15 -0
  87. package/dist/src/createHash-CfZSc0b4.cjs +27 -0
  88. package/dist/src/createHash-Da8fMwqB.js +16 -0
  89. package/dist/src/createHash-DmPQkvBh.js +15 -0
  90. package/dist/src/{docker-JAAubMw3.js → docker-5KcG-_86.js} +18 -20
  91. package/dist/src/{docker-Ckw-j7Rr.cjs → docker-BwsKwxFs.cjs} +18 -19
  92. package/dist/src/{docker-vnOg96gi.js → docker-CZnqU1XV.js} +18 -7
  93. package/dist/src/{docker-BuButc4D.js → docker-DzxyDPIj.js} +19 -21
  94. package/dist/src/entrypoint.js +2 -3
  95. package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
  96. package/dist/src/{esm-CYhseqj4.js → esm-C03C-mv3.js} +17 -20
  97. package/dist/src/{esm-rDtG_2rg.js → esm-CaIwzWR5.js} +18 -21
  98. package/dist/src/esm-Cd1AjG1D.js +379 -0
  99. package/dist/src/{esm-BQkx5roy.cjs → esm-CnNt7sI4.cjs} +47 -49
  100. package/dist/src/eval-17JizQIv.js +15 -0
  101. package/dist/src/{eval-CYrbG57o.js → eval-DmFyWU7i.js} +49 -55
  102. package/dist/src/{evalResult-COsVttMA.js → evalResult-CDQiuUuf.js} +16 -12
  103. package/dist/src/{evalResult-6JaUIStC.js → evalResult-CTG2AHOS.js} +10 -11
  104. package/dist/src/evalResult-Cqj8pldJ.js +12 -0
  105. package/dist/src/{evalResult-DlRfu_Rq.cjs → evalResult-Dap2CekP.cjs} +20 -21
  106. package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
  107. package/dist/src/evalResult-Hftn-S_i.js +10 -0
  108. package/dist/src/evaluator-B2CFNt-P.js +36 -0
  109. package/dist/src/{evaluator-3EJCMTs0.js → evaluator-DPFRbFIL.js} +210 -232
  110. package/dist/src/{extractor-LSYjrhK0.js → extractor-CFG6bcWJ.js} +23 -38
  111. package/dist/src/{extractor-DbhlYEeo.cjs → extractor-DX36oYEv.cjs} +37 -64
  112. package/dist/src/{extractor-Hs7la_19.js → extractor-M67RUtg6.js} +23 -38
  113. package/dist/src/extractor-YMU_Gvt8.js +374 -0
  114. package/dist/src/fetch-4M3YRaqL.js +780 -0
  115. package/dist/src/{fetch-18MuNu9i.js → fetch-60Gzydls.js} +60 -46
  116. package/dist/src/{fetch-SRsE6Ctl.js → fetch-BMv0O527.js} +41 -35
  117. package/dist/src/{fetch-ZMn_oemb.cjs → fetch-BxUk8odA.cjs} +268 -279
  118. package/dist/src/fetch-KV5kNASw.js +5 -0
  119. package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
  120. package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
  121. package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
  122. package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
  123. package/dist/src/{formatDuration-Doo0xq-z.js → formatDuration-DgBVMN65.js} +2 -2
  124. package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
  125. package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
  126. package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
  127. package/dist/src/{genaiTracer-CQlpZkrp.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
  128. package/dist/src/graders-Bu0H9nXi.js +32 -0
  129. package/dist/src/{graders-BaMCwIKp.js → graders-CHO8EPM4.js} +385 -417
  130. package/dist/src/graders-Cfhkvx-e.js +34 -0
  131. package/dist/src/{graders-QsALpIdy.js → graders-CpdqD9PI.js} +385 -417
  132. package/dist/src/graders-DClJVpGP.cjs +32 -0
  133. package/dist/src/{graders-DzUUnUjC.cjs → graders-DOXycdlG.cjs} +721 -753
  134. package/dist/src/graders-DcnJsrMO.js +32 -0
  135. package/dist/src/graders-R9rYUM0d.js +13466 -0
  136. package/dist/src/{image-BiEVdpdP.js → image-BmEZqVmk.js} +57 -18
  137. package/dist/src/{image-mhAGP07h.js → image-CBBVXWuT.js} +57 -18
  138. package/dist/src/{image-D10zEe1f.cjs → image-CDLQOcqT.cjs} +6 -7
  139. package/dist/src/{image-COCWy5dX.js → image-DJEvKveK.js} +6 -5
  140. package/dist/src/{image-C3BjJUAU.cjs → image-DTedmQPg.cjs} +77 -32
  141. package/dist/src/{image-DB4sHxdJ.js → image-gvmivTEe.js} +7 -9
  142. package/dist/src/image-pAX56tPG.js +257 -0
  143. package/dist/src/{image-BXt_7u0v.js → image-tL5hIOFh.js} +6 -8
  144. package/dist/src/index.cjs +696 -693
  145. package/dist/src/index.d.cts +113 -10
  146. package/dist/src/index.d.ts +113 -6
  147. package/dist/src/index.js +657 -658
  148. package/dist/src/{interactiveCheck-DU-MAhp5.js → interactiveCheck-BgLZUIt3.js} +7 -8
  149. package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
  150. package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
  151. package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
  152. package/dist/src/invariant-vgHWClmd.js +25 -0
  153. package/dist/src/{knowledgeBase-DotRBzUE.js → knowledgeBase-CLJybhnF.js} +19 -34
  154. package/dist/src/{knowledgeBase-XJQ0Qyez.js → knowledgeBase-CoU-UQBg.js} +17 -41
  155. package/dist/src/{knowledgeBase-CMvMlLZR.js → knowledgeBase-DjWPVqSb.js} +17 -43
  156. package/dist/src/{knowledgeBase-Bnb00xKs.cjs → knowledgeBase-wkxuRFhA.cjs} +17 -40
  157. package/dist/src/{litellm-CHrRmPAe.js → litellm-B9Hysuri.js} +16 -18
  158. package/dist/src/{litellm-CrLJrPIm.js → litellm-CTfa0hqi.js} +15 -17
  159. package/dist/src/{litellm-BrnZhMcL.cjs → litellm-NYpQ8RQu.cjs} +15 -16
  160. package/dist/src/{litellm-BECdjOTx.js → litellm-ePxtr9F1.js} +15 -4
  161. package/dist/src/{logger-w8Ozp0Td.js → logger-CT3IKMKA.js} +24 -41
  162. package/dist/src/{logger-BdZ-IqBc.cjs → logger-Cp1GPUjj.cjs} +166 -192
  163. package/dist/src/logger-DLcq4dWf.js +713 -0
  164. package/dist/src/{logger-BotXmWKW.js → logger-KkObSCzq.js} +27 -43
  165. package/dist/src/{luma-ray-C0RkI3lt.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
  166. package/dist/src/{luma-ray-C-w6EsJm.js → luma-ray-BE2mOt6N.js} +20 -13
  167. package/dist/src/{luma-ray-BOeX-h0M.js → luma-ray-BW9IRGIc.js} +22 -21
  168. package/dist/src/{luma-ray-DgKLS0BF.js → luma-ray-Cm1KZBhs.js} +20 -23
  169. package/dist/src/main.js +1985 -2055
  170. package/dist/src/{messages-DXV3Qh8_.cjs → messages-1JrJs91T.cjs} +35 -34
  171. package/dist/src/{messages-D61tPFQo.js → messages-1x9atZmP.js} +25 -24
  172. package/dist/src/{messages-CDZYGNlS.js → messages-BLbWdsyt.js} +25 -24
  173. package/dist/src/messages-D8EA0oDc.js +240 -0
  174. package/dist/src/{meteor-P2rUE-Uz.js → meteor-44VjEACX.js} +3 -4
  175. package/dist/src/{meteor-SLNTgmXm.js → meteor-D-SotUw9.js} +3 -4
  176. package/dist/src/{meteor-odmwVbyG.cjs → meteor-DLZZ3osF.cjs} +3 -4
  177. package/dist/src/{meteor-Dj8cTkU_.js → meteor-DUiCJRC-.js} +3 -4
  178. package/dist/src/modelslab-C1OLRmVX.js +166 -0
  179. package/dist/src/modelslab-CqXBy3U8.js +168 -0
  180. package/dist/src/modelslab-DcOSFwKh.cjs +166 -0
  181. package/dist/src/modelslab-X5-4LroM.js +166 -0
  182. package/dist/src/{nova-reel-C2LFfVTf.js → nova-reel-BgS1ZWuK.js} +20 -13
  183. package/dist/src/{nova-reel-DtCjbD5O.js → nova-reel-D2ZkOSyr.js} +22 -21
  184. package/dist/src/{nova-reel-D9FXq3Mt.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
  185. package/dist/src/{nova-reel-Bk5npr2q.js → nova-reel-DihqLeol.js} +20 -23
  186. package/dist/src/{nova-sonic-BoRSY_U6.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
  187. package/dist/src/{nova-sonic-D_qERM-K.js → nova-sonic-DezhVUYT.js} +30 -26
  188. package/dist/src/{nova-sonic-CgaWLDM1.js → nova-sonic-P-CdUMlV.js} +30 -31
  189. package/dist/src/{nova-sonic-BXRfQyF-.js → nova-sonic-Q3BOJeig.js} +31 -32
  190. package/dist/src/{openai-Bigwjgo1.cjs → openai-Cuif0GEt.cjs} +8 -9
  191. package/dist/src/{openai-Dz3surb_.js → openai-DElQ-fPX.js} +3 -4
  192. package/dist/src/{openai-CT5fwbve.js → openai-DhbB7eWK.js} +3 -4
  193. package/dist/src/openai-j-sE2O7r.js +44 -0
  194. package/dist/src/{openclaw-dHLcXUWZ.js → openclaw-BiSZPL7J.js} +20 -14
  195. package/dist/src/{openclaw-CpPrXwf6.js → openclaw-Bv1DINsX.js} +20 -27
  196. package/dist/src/{openclaw-B6XY2kUf.js → openclaw-D1D_ej1z.js} +21 -28
  197. package/dist/src/{openclaw-DDSfq5fp.cjs → openclaw-DAfWQn-o.cjs} +33 -39
  198. package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
  199. package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
  200. package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
  201. package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
  202. package/dist/src/{otlpReceiver-DmRb0NBj.js → otlpReceiver--AIRW_S4.js} +53 -51
  203. package/dist/src/{otlpReceiver-Dg817agV.js → otlpReceiver-Bn5wGB1v.js} +53 -55
  204. package/dist/src/{otlpReceiver-B6Xo4KZM.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
  205. package/dist/src/{otlpReceiver-BO0rbDzh.js → otlpReceiver-g3ByGaXs.js} +53 -55
  206. package/dist/src/{providerRegistry-Xf0qdqGQ.js → providerRegistry-B0RUOLI_.js} +7 -8
  207. package/dist/src/{providerRegistry-wCWd7sKQ.js → providerRegistry-CD8MEar9.js} +7 -8
  208. package/dist/src/{providerRegistry-lc7a7utN.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
  209. package/dist/src/providerRegistry-DM8rZYol.js +45 -0
  210. package/dist/src/providers-B3HvufyI.js +33246 -0
  211. package/dist/src/{providers-BiNq_Iyc.js → providers-BKRJTjBz.js} +1743 -1795
  212. package/dist/src/providers-C1rOSHiR.js +32 -0
  213. package/dist/src/{providers-BlEhY5mi.js → providers-CFLy1_ji.js} +1750 -1802
  214. package/dist/src/{providers-BNKVY53V.cjs → providers-CFu-TZl-.cjs} +2111 -2163
  215. package/dist/src/providers-CxmDwEFf.cjs +31 -0
  216. package/dist/src/providers-Dodakqr0.js +30 -0
  217. package/dist/src/providers-GIQ2TcsA.js +30 -0
  218. package/dist/src/{pythonUtils-r1uBuA0n.js → pythonUtils-C3py6GC1.js} +18 -19
  219. package/dist/src/{pythonUtils-DZ6EbdY4.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
  220. package/dist/src/{pythonUtils-vMlk9Qp5.js → pythonUtils-D5nxkQ0P.js} +18 -19
  221. package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
  222. package/dist/src/quiverai-C2jVwbH1.js +213 -0
  223. package/dist/src/quiverai-CI6gYJVI.js +213 -0
  224. package/dist/src/quiverai-CLkWkyZc.cjs +213 -0
  225. package/dist/src/quiverai-MHSxbmmZ.js +215 -0
  226. package/dist/src/{render-CAZvKKkB.js → render-Drod8m7K.js} +4 -5
  227. package/dist/src/{responses-DLLjADw5.js → responses-BKqJmhhc.js} +34 -27
  228. package/dist/src/{responses-TsdODUpm.js → responses-CGw0DCzh.js} +34 -27
  229. package/dist/src/responses-jxdehPkC.js +660 -0
  230. package/dist/src/{responses-zOtKtnY_.cjs → responses-tD4Bd4dc.cjs} +49 -42
  231. package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
  232. package/dist/src/{rubyUtils-Cs35SDYa.js → rubyUtils-BUVePouc.js} +27 -20
  233. package/dist/src/rubyUtils-BcuGX77l.js +222 -0
  234. package/dist/src/{rubyUtils-BtjlqyXt.js → rubyUtils-Boc4HZzX.js} +18 -19
  235. package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
  236. package/dist/src/{rubyUtils-DCVaJ3mc.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
  237. package/dist/src/{sagemaker-Du4LIR97.js → sagemaker-BK4Zb993.js} +75 -70
  238. package/dist/src/{sagemaker-CLdUAv5z.js → sagemaker-BfiWTmvn.js} +77 -77
  239. package/dist/src/{sagemaker-DwNnEVYt.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
  240. package/dist/src/{sagemaker-BcgLu0U4.js → sagemaker-D2Q1c-sD.js} +75 -79
  241. package/dist/src/{scanner-Dyw21Wg_.js → scanner-J8CA3LsV.js} +149 -122
  242. package/dist/src/server/index.js +5620 -67302
  243. package/dist/src/{server-CgUQ25qW.cjs → server-B0PPuDw-.cjs} +57 -67
  244. package/dist/src/server-B1vi21hA.js +7 -0
  245. package/dist/src/{server-CbMTRQkg.js → server-BC7XJFgr.js} +19 -24
  246. package/dist/src/server-Cm9Kai_h.cjs +5 -0
  247. package/dist/src/{server-DWmZLfCy.js → server-DbFphssR.js} +26 -29
  248. package/dist/src/server-OAs3nBRT.js +229 -0
  249. package/dist/src/{signal-Bl32q42d.js → signal-BOTbd53Z.js} +9 -11
  250. package/dist/src/{slack-BtMkB6xP.cjs → slack-BmVAVGaK.cjs} +7 -8
  251. package/dist/src/{slack-OZYxoVON.js → slack-DCUPTzS2.js} +8 -8
  252. package/dist/src/{slack-DPqj42Ts.js → slack-DOdy_kyv.js} +7 -8
  253. package/dist/src/{slack-BfdBx2tO.js → slack-DXMKtA-f.js} +7 -9
  254. package/dist/src/store-BNmZ1KAz.cjs +5 -0
  255. package/dist/src/{store-BqwfFEyF.cjs → store-BSc-TF2w.cjs} +44 -45
  256. package/dist/src/store-BltJg2cd.js +6 -0
  257. package/dist/src/{store-D4gdn9ih.js → store-D1tv90v3.js} +34 -35
  258. package/dist/src/{store-2ocbYY9D.js → store-DQLEjuEO.js} +40 -36
  259. package/dist/src/store-Ub2vaGJ1.js +228 -0
  260. package/dist/src/{tables-D-NSwNIb.js → tables-5EvT_Bwn.js} +23 -23
  261. package/dist/src/{tables-B9E1kRp-.cjs → tables-C7K-XKWp.cjs} +93 -93
  262. package/dist/src/{tables-C7TT2XVn.js → tables-D36WTqKX.js} +25 -25
  263. package/dist/src/tables-xKANLRBD.js +288 -0
  264. package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
  265. package/dist/src/{telemetry-DZ_7PaVq.js → telemetry-C15ziL8u.js} +17 -14
  266. package/dist/src/{telemetry-BXyVqyAg.js → telemetry-C2YDkUQH.js} +11 -13
  267. package/dist/src/{telemetry-D0_yFdtU.cjs → telemetry-CbrnxHp_.cjs} +21 -24
  268. package/dist/src/telemetry-D4W5hboe.js +7 -0
  269. package/dist/src/telemetry-DMb2Mpfm.js +171 -0
  270. package/dist/src/{text-Dm78AVGG.js → text-B_UCRPp2.js} +2 -2
  271. package/dist/src/{text-DF2hMKdg.cjs → text-CW1cyrwj.cjs} +12 -13
  272. package/dist/src/{text-DgMr_tiM.js → text-Db-Wt2u2.js} +2 -2
  273. package/dist/src/text-TIv0QYnd.js +22 -0
  274. package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
  275. package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
  276. package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
  277. package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
  278. package/dist/src/{transcription-FNIz3YOe.cjs → transcription-CL78qbOU.cjs} +14 -15
  279. package/dist/src/{transcription-C-M81iDA.js → transcription-DAtxHhAM.js} +14 -7
  280. package/dist/src/{transcription-CYuY5sFO.js → transcription-LNZTNUUL.js} +14 -16
  281. package/dist/src/{transcription-Ch7S-LWw.js → transcription-QHh3AH6Z.js} +15 -17
  282. package/dist/src/{transform-CoP2bJ7P.js → transform-Cgi24fJ7.js} +94 -66
  283. package/dist/src/{transform-Kd6u-oNm.cjs → transform-CzK1Q0zl.cjs} +24 -26
  284. package/dist/src/{transform-D8dILpfZ.js → transform-DECvGmzp.js} +15 -13
  285. package/dist/src/{transform-DMaxQwDx.js → transform-DGLazrMm.js} +94 -66
  286. package/dist/src/transform-DGxXocjk.js +1506 -0
  287. package/dist/src/{transform-ivxEY4f7.cjs → transform-DOcQeLld.cjs} +234 -206
  288. package/dist/src/transform-DTGDnAzW.js +6 -0
  289. package/dist/src/{transform-CqTFr7KR.js → transform-DilY9wbS.js} +10 -12
  290. package/dist/src/transform-aa6tmVpZ.js +216 -0
  291. package/dist/src/transform-m3qNw4KP.cjs +5 -0
  292. package/dist/src/{transformersAvailability-DEU2naS1.js → transformersAvailability-CEVM2GNQ.js} +2 -2
  293. package/dist/src/{transformersAvailability-Bkep3ka7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
  294. package/dist/src/{transformersAvailability-DwmezkVe.js → transformersAvailability-D6c6ROpT.js} +2 -2
  295. package/dist/src/{types-t52w-XsS.js → types-CH3Ge2sE.js} +103 -92
  296. package/dist/src/{types-DMVjYLpx.js → types-CLKiCBW3.js} +98 -91
  297. package/dist/src/types-CN_TZ2GJ.js +3260 -0
  298. package/dist/src/{types-BIfttHrT.cjs → types-LJ0r3wbR.cjs} +573 -566
  299. package/dist/src/util-5cB-L7U3.js +1430 -0
  300. package/dist/src/util-6-GqIvzS.js +599 -0
  301. package/dist/src/{util-vjscpUzy.js → util-B7T3SiBS.js} +5 -6
  302. package/dist/src/{util-Cl0zfT3V.js → util-Betm42rL.js} +44 -17
  303. package/dist/src/{util-CUEt0Vum.js → util-C-PPYSMq.js} +44 -17
  304. package/dist/src/{util-DkFTvieG.cjs → util-CchiqXh_.cjs} +35 -36
  305. package/dist/src/{util-mJ58qbbw.js → util-DaWTWKBK.js} +5 -6
  306. package/dist/src/{util-C08Kns6-.cjs → util-Db0a0AFH.cjs} +89 -62
  307. package/dist/src/{util-DiCePfDu.js → util-Dlz_Wvgm.js} +102 -53
  308. package/dist/src/{util-BSh4a_Q8.js → util-YT5HPZaS.js} +102 -53
  309. package/dist/src/{util-DUYOvxAy.cjs → util-Yz-1aEhW.cjs} +274 -219
  310. package/dist/src/util-ZZH-3QZz.js +293 -0
  311. package/dist/src/{utils-DFaZa6Rf.cjs → utils-Cz9qXqII.cjs} +32 -35
  312. package/dist/src/{utils-CVzb4YiI.js → utils-XiOAgly5.js} +4 -7
  313. package/dist/src/utils-dLokC-eR.js +94 -0
  314. package/dist/src/{utils-JaY9veb5.js → utils-f2-Moju7.js} +4 -7
  315. package/dist/tsconfig.tsbuildinfo +1 -1
  316. package/package.json +59 -53
  317. package/dist/src/app/assets/index-BOgkICuY.css +0 -1
  318. package/dist/src/app/assets/index-CSgqn_Vd.js +0 -428
  319. package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
  320. package/dist/src/base-BaXmtXYp.js +0 -107
  321. package/dist/src/base-Dtp8b4_N.js +0 -106
  322. package/dist/src/base-f71xxWai.cjs +0 -111
  323. package/dist/src/cache-BUPcq0Ad.js +0 -6
  324. package/dist/src/cache-CVfRb-HD.cjs +0 -6
  325. package/dist/src/cache-O4EuX2JV.js +0 -8
  326. package/dist/src/chunk-DHDDz29n.js +0 -22
  327. package/dist/src/chunk-FhC4c-0y.js +0 -21
  328. package/dist/src/cloud-CZ4hytdm.js +0 -5
  329. package/dist/src/eval-CKHWqG9f.js +0 -16
  330. package/dist/src/evalResult-CxTP-LMm.cjs +0 -11
  331. package/dist/src/evalResult-CzLURDcP.js +0 -13
  332. package/dist/src/evalResult-DyttNQ_G.js +0 -11
  333. package/dist/src/evaluator-0PvfeBYh.js +0 -38
  334. package/dist/src/fetch-Bi0o-fdp.js +0 -4
  335. package/dist/src/fetch-CMptBDVg.cjs +0 -4
  336. package/dist/src/fetch-DAZkv3gV.js +0 -6
  337. package/dist/src/graders-BCytzXrb.js +0 -34
  338. package/dist/src/graders-CGZQShfJ.cjs +0 -33
  339. package/dist/src/graders-spkuVC-E.js +0 -36
  340. package/dist/src/opencode-sdk-CImWVqy9.js +0 -382
  341. package/dist/src/opencode-sdk-CuCztr4P.js +0 -380
  342. package/dist/src/opencode-sdk-DhcfRbBH.js +0 -376
  343. package/dist/src/opencode-sdk-mqF-Oj3f.cjs +0 -383
  344. package/dist/src/providers-BMZZmPBJ.cjs +0 -32
  345. package/dist/src/providers-CQQrNaJk.js +0 -32
  346. package/dist/src/providers-Ck8HyrC-.js +0 -34
  347. package/dist/src/quiverai-BNfIwKCO.cjs +0 -54
  348. package/dist/src/quiverai-BQigKdIH.js +0 -57
  349. package/dist/src/quiverai-Bfy2WnE2.js +0 -55
  350. package/dist/src/quiverai-CedIP0PJ.js +0 -43
  351. package/dist/src/rubyUtils-D7--T12C.js +0 -6
  352. package/dist/src/rubyUtils-DRRiMFV2.js +0 -5
  353. package/dist/src/rubyUtils-vb8OYFC-.cjs +0 -5
  354. package/dist/src/server-BUbS0Qfh.js +0 -6
  355. package/dist/src/server-XpGXFHkS.cjs +0 -6
  356. package/dist/src/server-gfOx5Zrk.js +0 -8
  357. package/dist/src/store-5u2yriTV.js +0 -7
  358. package/dist/src/store-D_lq_8oQ.js +0 -6
  359. package/dist/src/store-m5KT6Ly7.cjs +0 -6
  360. package/dist/src/telemetry-5RHFoCJh.js +0 -6
  361. package/dist/src/telemetry-Do8wMnA-.js +0 -8
  362. package/dist/src/telemetry-LojxPoFq.cjs +0 -6
  363. package/dist/src/transform-8eGmaH-7.js +0 -7
  364. package/dist/src/transform-BRVvWaG4.cjs +0 -6
  365. package/dist/src/transform-GybT0X0u.js +0 -8
  366. package/dist/src/transformersAvailability-DkAWaK5B.js +0 -35
@@ -0,0 +1,213 @@
1
+ const require_logger = require("./logger-Cp1GPUjj.cjs");
2
+ const require_fetch = require("./fetch-BxUk8odA.cjs");
3
+ const require_cache = require("./cache-COish3-W.cjs");
4
+ //#region src/providers/quiverai.ts
5
+ const QUIVERAI_API_BASE_URL = "https://api.quiver.ai/v1";
6
+ const QUIVERAI_DEFAULT_MODEL = "arrow-preview";
7
+ /**
8
+ * QuiverAI provider for SVG vector graphics generation using the Arrow model.
9
+ * Uses QuiverAI's native SVG generation API (POST /v1/svgs/generations).
10
+ * Streams by default for faster time-to-first-token.
11
+ */
12
+ var QuiverAiProvider = class {
13
+ config;
14
+ modelName;
15
+ apiKey;
16
+ apiBaseUrl;
17
+ constructor(modelName, options = {}) {
18
+ const { config, id, env } = options;
19
+ this.modelName = modelName;
20
+ this.apiKey = config?.apiKey || env?.QUIVERAI_API_KEY || require_logger.getEnvString("QUIVERAI_API_KEY") || "";
21
+ this.apiBaseUrl = config?.apiBaseUrl || QUIVERAI_API_BASE_URL;
22
+ if (id) this.id = () => id;
23
+ this.config = config || {};
24
+ }
25
+ id() {
26
+ return `quiverai:${this.modelName}`;
27
+ }
28
+ toString() {
29
+ return `[QuiverAI Provider ${this.modelName}]`;
30
+ }
31
+ getApiUrl() {
32
+ return `${this.apiBaseUrl}/svgs/generations`;
33
+ }
34
+ getHeaders() {
35
+ return {
36
+ "Content-Type": "application/json",
37
+ Authorization: `Bearer ${this.apiKey}`
38
+ };
39
+ }
40
+ async callApi(prompt, context) {
41
+ if (!this.apiKey) return { error: "QuiverAI API key is not set. Set the QUIVERAI_API_KEY environment variable or add apiKey to the provider config. Get a key at https://app.quiver.ai/settings/api-keys" };
42
+ const config = {
43
+ ...this.config,
44
+ ...context?.prompt?.config
45
+ };
46
+ const useStream = config.stream !== false;
47
+ const body = {
48
+ model: this.modelName,
49
+ prompt,
50
+ stream: useStream,
51
+ ...pickDefined(config, [
52
+ "instructions",
53
+ "references",
54
+ "n",
55
+ "temperature",
56
+ "top_p",
57
+ "presence_penalty",
58
+ "max_output_tokens"
59
+ ])
60
+ };
61
+ try {
62
+ if (useStream) return await this.callApiStreaming(body);
63
+ return await this.callApiNonStreaming(body, context);
64
+ } catch (error) {
65
+ require_logger.logger.error(`QuiverAI API call error: ${error}`);
66
+ return { error: `QuiverAI API call error: ${error}` };
67
+ }
68
+ }
69
+ async callApiNonStreaming(body, context) {
70
+ const { data, cached, status, statusText } = await require_cache.fetchWithCache(this.getApiUrl(), {
71
+ method: "POST",
72
+ headers: this.getHeaders(),
73
+ body: JSON.stringify(body)
74
+ }, require_fetch.REQUEST_TIMEOUT_MS, "json", context?.bustCache ?? context?.debug);
75
+ if (status < 200 || status >= 300) {
76
+ if (data && typeof data === "object" && "code" in data && "message" in data) return { error: formatError(data) };
77
+ return { error: `API error: ${status} ${statusText}\n${typeof data === "string" ? data : JSON.stringify(data)}` };
78
+ }
79
+ const response = data;
80
+ return {
81
+ cached,
82
+ output: extractSvgOutput(response),
83
+ tokenUsage: mapTokenUsage(response.usage, cached ? 0 : 1)
84
+ };
85
+ }
86
+ async callApiStreaming(body) {
87
+ const maxRetries = 3;
88
+ let lastResp;
89
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
90
+ const controller = new AbortController();
91
+ const timeout = setTimeout(() => controller.abort(), require_fetch.REQUEST_TIMEOUT_MS);
92
+ let reader;
93
+ try {
94
+ lastResp = await require_fetch.fetchWithProxy(this.getApiUrl(), {
95
+ method: "POST",
96
+ headers: this.getHeaders(),
97
+ body: JSON.stringify(body),
98
+ signal: controller.signal
99
+ });
100
+ if (lastResp.status === 429 && attempt < maxRetries) {
101
+ const waitMs = getRetryAfterMs(lastResp.headers, attempt);
102
+ require_logger.logger.debug(`QuiverAI: rate limited, retry ${attempt + 1}/${maxRetries} in ${waitMs}ms`);
103
+ await lastResp.body?.cancel();
104
+ await new Promise((resolve) => setTimeout(resolve, waitMs));
105
+ continue;
106
+ }
107
+ if (!lastResp.ok) return await handleStreamingError(lastResp);
108
+ if (!lastResp.body) return { error: "QuiverAI streaming response has no body" };
109
+ reader = lastResp.body.getReader();
110
+ return await readSSEStream(reader);
111
+ } finally {
112
+ reader?.cancel().catch(() => {});
113
+ clearTimeout(timeout);
114
+ }
115
+ }
116
+ return handleStreamingError(lastResp);
117
+ }
118
+ };
119
+ async function handleStreamingError(resp) {
120
+ try {
121
+ return { error: formatError(await resp.json()) };
122
+ } catch {
123
+ return { error: `QuiverAI API error: HTTP ${resp.status}` };
124
+ }
125
+ }
126
+ async function readSSEStream(reader) {
127
+ const decoder = new TextDecoder();
128
+ let buffer = "";
129
+ let finalSvg = "";
130
+ let usage;
131
+ while (true) {
132
+ const { done, value } = await reader.read();
133
+ if (done) break;
134
+ buffer += decoder.decode(value, { stream: true });
135
+ const lines = buffer.split("\n");
136
+ buffer = lines.pop() || "";
137
+ for (const line of lines) {
138
+ const parsed = parseSSELine(line);
139
+ if (parsed.svg) finalSvg = parsed.svg;
140
+ if (parsed.usage) usage = parsed.usage;
141
+ }
142
+ }
143
+ if (buffer.trim()) {
144
+ const parsed = parseSSELine(buffer);
145
+ if (parsed.svg) finalSvg = parsed.svg;
146
+ if (parsed.usage) usage = parsed.usage;
147
+ }
148
+ if (!finalSvg) return { error: "QuiverAI streaming response contained no SVG content" };
149
+ return {
150
+ output: finalSvg,
151
+ tokenUsage: mapTokenUsage(usage, 1)
152
+ };
153
+ }
154
+ function pickDefined(obj, keys) {
155
+ return Object.fromEntries(keys.filter((k) => obj[k] != null).map((k) => [k, obj[k]]));
156
+ }
157
+ function formatError(err) {
158
+ const base = `${err.message} [${err.code}]`;
159
+ return err.request_id ? `${base} (request_id: ${err.request_id})` : base;
160
+ }
161
+ function mapTokenUsage(usage, numRequests) {
162
+ return {
163
+ total: usage?.total_tokens || 0,
164
+ prompt: usage?.input_tokens || 0,
165
+ completion: usage?.output_tokens || 0,
166
+ numRequests
167
+ };
168
+ }
169
+ const MAX_RETRY_AFTER_MS = 6e4;
170
+ function getRetryAfterMs(headers, attempt) {
171
+ const retryAfter = headers.get("retry-after");
172
+ if (retryAfter) {
173
+ const seconds = Number(retryAfter);
174
+ if (!Number.isNaN(seconds)) return Math.min(seconds * 1e3, MAX_RETRY_AFTER_MS);
175
+ const date = new Date(retryAfter);
176
+ if (!Number.isNaN(date.getTime())) return Math.min(Math.max(0, date.getTime() - Date.now()), MAX_RETRY_AFTER_MS);
177
+ }
178
+ return Math.pow(2, attempt) * 1e3;
179
+ }
180
+ function parseSSELine(line) {
181
+ if (!line.startsWith("data:")) return {};
182
+ const payload = line.slice(line.startsWith("data: ") ? 6 : 5).trim();
183
+ if (!payload || payload === "[DONE]") return {};
184
+ try {
185
+ const event = JSON.parse(payload);
186
+ return {
187
+ svg: event.type === "content" && event.svg ? event.svg : void 0,
188
+ usage: event.usage
189
+ };
190
+ } catch {
191
+ require_logger.logger.debug(`QuiverAI: failed to parse SSE data: ${payload}`);
192
+ return {};
193
+ }
194
+ }
195
+ function extractSvgOutput(response) {
196
+ if (Array.isArray(response.data)) {
197
+ const svgs = response.data.map((item) => item.svg).filter(Boolean);
198
+ return svgs.length === 1 ? svgs[0] : svgs.join("\n\n");
199
+ }
200
+ return JSON.stringify(response);
201
+ }
202
+ function createQuiverAiProvider(providerPath, providerOptions = {}, env) {
203
+ const splits = providerPath.split(":");
204
+ return new QuiverAiProvider((splits[1] === "chat" ? splits.slice(2) : splits.slice(1)).join(":") || QUIVERAI_DEFAULT_MODEL, {
205
+ config: providerOptions.config,
206
+ id: providerOptions.id,
207
+ env: providerOptions.env ?? env
208
+ });
209
+ }
210
+ //#endregion
211
+ exports.createQuiverAiProvider = createQuiverAiProvider;
212
+
213
+ //# sourceMappingURL=quiverai-CLkWkyZc.cjs.map
@@ -0,0 +1,215 @@
1
+ #!/usr/bin/env node
2
+ import { C as getEnvString, o as logger } from "./logger-KkObSCzq.js";
3
+ import { f as REQUEST_TIMEOUT_MS, n as fetchWithProxy } from "./fetch-BMv0O527.js";
4
+ import "./cloud-Bc9526yV.js";
5
+ import { a as fetchWithCache } from "./cache-CG0SlR1d.js";
6
+ //#region src/providers/quiverai.ts
7
+ const QUIVERAI_API_BASE_URL = "https://api.quiver.ai/v1";
8
+ const QUIVERAI_DEFAULT_MODEL = "arrow-preview";
9
+ /**
10
+ * QuiverAI provider for SVG vector graphics generation using the Arrow model.
11
+ * Uses QuiverAI's native SVG generation API (POST /v1/svgs/generations).
12
+ * Streams by default for faster time-to-first-token.
13
+ */
14
+ var QuiverAiProvider = class {
15
+ config;
16
+ modelName;
17
+ apiKey;
18
+ apiBaseUrl;
19
+ constructor(modelName, options = {}) {
20
+ const { config, id, env } = options;
21
+ this.modelName = modelName;
22
+ this.apiKey = config?.apiKey || env?.QUIVERAI_API_KEY || getEnvString("QUIVERAI_API_KEY") || "";
23
+ this.apiBaseUrl = config?.apiBaseUrl || QUIVERAI_API_BASE_URL;
24
+ if (id) this.id = () => id;
25
+ this.config = config || {};
26
+ }
27
+ id() {
28
+ return `quiverai:${this.modelName}`;
29
+ }
30
+ toString() {
31
+ return `[QuiverAI Provider ${this.modelName}]`;
32
+ }
33
+ getApiUrl() {
34
+ return `${this.apiBaseUrl}/svgs/generations`;
35
+ }
36
+ getHeaders() {
37
+ return {
38
+ "Content-Type": "application/json",
39
+ Authorization: `Bearer ${this.apiKey}`
40
+ };
41
+ }
42
+ async callApi(prompt, context) {
43
+ if (!this.apiKey) return { error: "QuiverAI API key is not set. Set the QUIVERAI_API_KEY environment variable or add apiKey to the provider config. Get a key at https://app.quiver.ai/settings/api-keys" };
44
+ const config = {
45
+ ...this.config,
46
+ ...context?.prompt?.config
47
+ };
48
+ const useStream = config.stream !== false;
49
+ const body = {
50
+ model: this.modelName,
51
+ prompt,
52
+ stream: useStream,
53
+ ...pickDefined(config, [
54
+ "instructions",
55
+ "references",
56
+ "n",
57
+ "temperature",
58
+ "top_p",
59
+ "presence_penalty",
60
+ "max_output_tokens"
61
+ ])
62
+ };
63
+ try {
64
+ if (useStream) return await this.callApiStreaming(body);
65
+ return await this.callApiNonStreaming(body, context);
66
+ } catch (error) {
67
+ logger.error(`QuiverAI API call error: ${error}`);
68
+ return { error: `QuiverAI API call error: ${error}` };
69
+ }
70
+ }
71
+ async callApiNonStreaming(body, context) {
72
+ const { data, cached, status, statusText } = await fetchWithCache(this.getApiUrl(), {
73
+ method: "POST",
74
+ headers: this.getHeaders(),
75
+ body: JSON.stringify(body)
76
+ }, REQUEST_TIMEOUT_MS, "json", context?.bustCache ?? context?.debug);
77
+ if (status < 200 || status >= 300) {
78
+ if (data && typeof data === "object" && "code" in data && "message" in data) return { error: formatError(data) };
79
+ return { error: `API error: ${status} ${statusText}\n${typeof data === "string" ? data : JSON.stringify(data)}` };
80
+ }
81
+ const response = data;
82
+ return {
83
+ cached,
84
+ output: extractSvgOutput(response),
85
+ tokenUsage: mapTokenUsage(response.usage, cached ? 0 : 1)
86
+ };
87
+ }
88
+ async callApiStreaming(body) {
89
+ const maxRetries = 3;
90
+ let lastResp;
91
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
92
+ const controller = new AbortController();
93
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
94
+ let reader;
95
+ try {
96
+ lastResp = await fetchWithProxy(this.getApiUrl(), {
97
+ method: "POST",
98
+ headers: this.getHeaders(),
99
+ body: JSON.stringify(body),
100
+ signal: controller.signal
101
+ });
102
+ if (lastResp.status === 429 && attempt < maxRetries) {
103
+ const waitMs = getRetryAfterMs(lastResp.headers, attempt);
104
+ logger.debug(`QuiverAI: rate limited, retry ${attempt + 1}/${maxRetries} in ${waitMs}ms`);
105
+ await lastResp.body?.cancel();
106
+ await new Promise((resolve) => setTimeout(resolve, waitMs));
107
+ continue;
108
+ }
109
+ if (!lastResp.ok) return await handleStreamingError(lastResp);
110
+ if (!lastResp.body) return { error: "QuiverAI streaming response has no body" };
111
+ reader = lastResp.body.getReader();
112
+ return await readSSEStream(reader);
113
+ } finally {
114
+ reader?.cancel().catch(() => {});
115
+ clearTimeout(timeout);
116
+ }
117
+ }
118
+ return handleStreamingError(lastResp);
119
+ }
120
+ };
121
+ async function handleStreamingError(resp) {
122
+ try {
123
+ return { error: formatError(await resp.json()) };
124
+ } catch {
125
+ return { error: `QuiverAI API error: HTTP ${resp.status}` };
126
+ }
127
+ }
128
+ async function readSSEStream(reader) {
129
+ const decoder = new TextDecoder();
130
+ let buffer = "";
131
+ let finalSvg = "";
132
+ let usage;
133
+ while (true) {
134
+ const { done, value } = await reader.read();
135
+ if (done) break;
136
+ buffer += decoder.decode(value, { stream: true });
137
+ const lines = buffer.split("\n");
138
+ buffer = lines.pop() || "";
139
+ for (const line of lines) {
140
+ const parsed = parseSSELine(line);
141
+ if (parsed.svg) finalSvg = parsed.svg;
142
+ if (parsed.usage) usage = parsed.usage;
143
+ }
144
+ }
145
+ if (buffer.trim()) {
146
+ const parsed = parseSSELine(buffer);
147
+ if (parsed.svg) finalSvg = parsed.svg;
148
+ if (parsed.usage) usage = parsed.usage;
149
+ }
150
+ if (!finalSvg) return { error: "QuiverAI streaming response contained no SVG content" };
151
+ return {
152
+ output: finalSvg,
153
+ tokenUsage: mapTokenUsage(usage, 1)
154
+ };
155
+ }
156
+ function pickDefined(obj, keys) {
157
+ return Object.fromEntries(keys.filter((k) => obj[k] != null).map((k) => [k, obj[k]]));
158
+ }
159
+ function formatError(err) {
160
+ const base = `${err.message} [${err.code}]`;
161
+ return err.request_id ? `${base} (request_id: ${err.request_id})` : base;
162
+ }
163
+ function mapTokenUsage(usage, numRequests) {
164
+ return {
165
+ total: usage?.total_tokens || 0,
166
+ prompt: usage?.input_tokens || 0,
167
+ completion: usage?.output_tokens || 0,
168
+ numRequests
169
+ };
170
+ }
171
+ const MAX_RETRY_AFTER_MS = 6e4;
172
+ function getRetryAfterMs(headers, attempt) {
173
+ const retryAfter = headers.get("retry-after");
174
+ if (retryAfter) {
175
+ const seconds = Number(retryAfter);
176
+ if (!Number.isNaN(seconds)) return Math.min(seconds * 1e3, MAX_RETRY_AFTER_MS);
177
+ const date = new Date(retryAfter);
178
+ if (!Number.isNaN(date.getTime())) return Math.min(Math.max(0, date.getTime() - Date.now()), MAX_RETRY_AFTER_MS);
179
+ }
180
+ return Math.pow(2, attempt) * 1e3;
181
+ }
182
+ function parseSSELine(line) {
183
+ if (!line.startsWith("data:")) return {};
184
+ const payload = line.slice(line.startsWith("data: ") ? 6 : 5).trim();
185
+ if (!payload || payload === "[DONE]") return {};
186
+ try {
187
+ const event = JSON.parse(payload);
188
+ return {
189
+ svg: event.type === "content" && event.svg ? event.svg : void 0,
190
+ usage: event.usage
191
+ };
192
+ } catch {
193
+ logger.debug(`QuiverAI: failed to parse SSE data: ${payload}`);
194
+ return {};
195
+ }
196
+ }
197
+ function extractSvgOutput(response) {
198
+ if (Array.isArray(response.data)) {
199
+ const svgs = response.data.map((item) => item.svg).filter(Boolean);
200
+ return svgs.length === 1 ? svgs[0] : svgs.join("\n\n");
201
+ }
202
+ return JSON.stringify(response);
203
+ }
204
+ function createQuiverAiProvider(providerPath, providerOptions = {}, env) {
205
+ const splits = providerPath.split(":");
206
+ return new QuiverAiProvider((splits[1] === "chat" ? splits.slice(2) : splits.slice(1)).join(":") || QUIVERAI_DEFAULT_MODEL, {
207
+ config: providerOptions.config,
208
+ id: providerOptions.id,
209
+ env: providerOptions.env ?? env
210
+ });
211
+ }
212
+ //#endregion
213
+ export { createQuiverAiProvider };
214
+
215
+ //# sourceMappingURL=quiverai-MHSxbmmZ.js.map
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import "./logger-BotXmWKW.js";
3
- import { t as canUseInteractiveUI } from "./interactiveCheck-DU-MAhp5.js";
4
-
2
+ import "./logger-KkObSCzq.js";
3
+ import { t as canUseInteractiveUI } from "./interactiveCheck-BgLZUIt3.js";
5
4
  //#region src/ui/render.ts
6
5
  /**
7
6
  * Process exit codes for signal handling.
@@ -112,7 +111,7 @@ function supportsColor() {
112
111
  if (process.env.FORCE_COLOR) return true;
113
112
  return process.stdout.isTTY && process.stdout.hasColors?.() !== false;
114
113
  }
115
-
116
114
  //#endregion
117
115
  export { canUseInteractiveUI, getTerminalSize, renderInteractive, runInteractive, supportsColor };
118
- //# sourceMappingURL=render-CAZvKKkB.js.map
116
+
117
+ //# sourceMappingURL=render-Drod8m7K.js.map
@@ -1,13 +1,12 @@
1
- import { b as getEnvString, i as logger_default, v as getEnvFloat, w as cliState_default, y as getEnvInt } from "./logger-w8Ozp0Td.js";
2
- import { r as importModule } from "./esm-rDtG_2rg.js";
3
- import { i as isJavascriptFile } from "./fileExtensions-ePDqouxn.js";
4
- import { d as maybeLoadToolsFromExternalFile, g as renderVarsInObject, u as maybeLoadResponseFormatFromExternalFile } from "./util-DiCePfDu.js";
5
- import { h as REQUEST_TIMEOUT_MS, m as LONG_RUNNING_MODEL_TIMEOUT_MS } from "./fetch-18MuNu9i.js";
6
- import { a as fetchWithCache } from "./cache-BLLayYEN.js";
7
- import { t as OpenAiGenericProvider } from "./openai-Dz3surb_.js";
8
- import { a as calculateOpenAICost, c as getTokenUsage$1, s as formatOpenAiError } from "./util-Cl0zfT3V.js";
1
+ import { b as getEnvString, i as logger, v as getEnvFloat, w as state, y as getEnvInt } from "./logger-CT3IKMKA.js";
2
+ import { r as importModule } from "./esm-Cd1AjG1D.js";
3
+ import { i as isJavascriptFile } from "./fileExtensions-DnqA1y9x.js";
4
+ import { d as maybeLoadToolsFromExternalFile, g as renderVarsInObject, u as maybeLoadResponseFormatFromExternalFile } from "./util-Dlz_Wvgm.js";
5
+ import { f as LONG_RUNNING_MODEL_TIMEOUT_MS, p as REQUEST_TIMEOUT_MS } from "./fetch-60Gzydls.js";
6
+ import { r as fetchWithCache } from "./cache-8XhNqPKW.js";
7
+ import { t as OpenAiGenericProvider } from "./openai-DElQ-fPX.js";
8
+ import { a as calculateOpenAICost, c as getTokenUsage$1, s as formatOpenAiError } from "./util-Betm42rL.js";
9
9
  import path from "path";
10
-
11
10
  //#region src/providers/functionCallbackUtils.ts
12
11
  /**
13
12
  * Handles function callback execution for AI providers.
@@ -45,7 +44,7 @@ var FunctionCallbackHandler = class {
45
44
  isError: false
46
45
  };
47
46
  } catch (error) {
48
- logger_default.debug(`Function callback failed for ${functionInfo.name}: ${error}`);
47
+ logger.debug(`Function callback failed for ${functionInfo.name}: ${error}`);
49
48
  return {
50
49
  output: typeof call === "string" ? call : JSON.stringify(call),
51
50
  isError: true
@@ -115,8 +114,8 @@ var FunctionCallbackHandler = class {
115
114
  if (splits[0] && isJavascriptFile(splits[0])) [filePath, functionName] = splits;
116
115
  }
117
116
  try {
118
- const resolvedPath = path.resolve(cliState_default.basePath || "", filePath);
119
- logger_default.debug(`Loading function from ${resolvedPath}${functionName ? `:${functionName}` : ""}`);
117
+ const resolvedPath = path.resolve(state.basePath || "", filePath);
118
+ logger.debug(`Loading function from ${resolvedPath}${functionName ? `:${functionName}` : ""}`);
120
119
  const mod = await importModule(resolvedPath);
121
120
  const func = functionName && mod[functionName] ? mod[functionName] : mod.default || mod;
122
121
  if (typeof func !== "function") throw new Error(`Expected ${resolvedPath}${functionName ? `:${functionName}` : ""} to export a function, got ${typeof func}`);
@@ -158,7 +157,7 @@ var FunctionCallbackHandler = class {
158
157
  };
159
158
  } catch (error) {
160
159
  const errorMessage = error instanceof Error ? error.message : String(error);
161
- logger_default.debug(`MCP tool execution failed for ${toolName}: ${errorMessage}`);
160
+ logger.debug(`MCP tool execution failed for ${toolName}: ${errorMessage}`);
162
161
  return {
163
162
  output: `MCP Tool Error (${toolName}): ${errorMessage}`,
164
163
  isError: true
@@ -179,7 +178,6 @@ var FunctionCallbackHandler = class {
179
178
  this.loadedCallbacks = {};
180
179
  }
181
180
  };
182
-
183
181
  //#endregion
184
182
  //#region src/providers/responses/processor.ts
185
183
  /**
@@ -231,7 +229,7 @@ var ResponsesProcessor = class {
231
229
  this.config = config;
232
230
  }
233
231
  async processResponseOutput(data, requestConfig, cached) {
234
- logger_default.debug(`Processing ${this.config.providerType} responses output`, {
232
+ logger.debug(`Processing ${this.config.providerType} responses output`, {
235
233
  responseId: data.id,
236
234
  model: data.model
237
235
  });
@@ -256,7 +254,7 @@ var ResponsesProcessor = class {
256
254
  if (requestConfig.response_format?.type === "json_schema" && typeof finalOutput === "string") try {
257
255
  finalOutput = JSON.parse(finalOutput);
258
256
  } catch (error) {
259
- logger_default.error(`Failed to parse JSON output: ${error}`);
257
+ logger.error(`Failed to parse JSON output: ${error}`);
260
258
  }
261
259
  const result = {
262
260
  output: finalOutput,
@@ -276,7 +274,7 @@ var ResponsesProcessor = class {
276
274
  }
277
275
  }
278
276
  async processOutput(output, context) {
279
- if (this.config.modelName.includes("deep-research")) logger_default.debug(`Deep research response structure: ${JSON.stringify(context.data, null, 2)}`);
277
+ if (this.config.modelName.includes("deep-research")) logger.debug(`Deep research response structure: ${JSON.stringify(context.data, null, 2)}`);
280
278
  if (!output || !Array.isArray(output) || output.length === 0) throw new Error("Invalid response format: Missing output array");
281
279
  let result = "";
282
280
  let refusal = "";
@@ -284,7 +282,7 @@ var ResponsesProcessor = class {
284
282
  const annotations = [];
285
283
  for (const item of output) {
286
284
  if (!item || typeof item !== "object") {
287
- logger_default.warn(`Skipping invalid output item: ${JSON.stringify(item)}`);
285
+ logger.warn(`Skipping invalid output item: ${JSON.stringify(item)}`);
288
286
  continue;
289
287
  }
290
288
  const processed = await this.processOutputItem(item, context);
@@ -314,7 +312,7 @@ var ResponsesProcessor = class {
314
312
  case "mcp_call": return this.processMcpCall(item);
315
313
  case "mcp_approval_request": return this.processMcpApprovalRequest(item);
316
314
  default:
317
- logger_default.debug(`Unknown output item type: ${item.type}`);
315
+ logger.debug(`Unknown output item type: ${item.type}`);
318
316
  return {};
319
317
  }
320
318
  }
@@ -337,7 +335,7 @@ var ResponsesProcessor = class {
337
335
  const annotations = [];
338
336
  if (item.content) for (const contentItem of item.content) {
339
337
  if (!contentItem || typeof contentItem !== "object") {
340
- logger_default.warn(`Skipping invalid content item: ${JSON.stringify(contentItem)}`);
338
+ logger.warn(`Skipping invalid content item: ${JSON.stringify(contentItem)}`);
341
339
  continue;
342
340
  }
343
341
  if (contentItem.type === "output_text") {
@@ -398,7 +396,6 @@ var ResponsesProcessor = class {
398
396
  return Promise.resolve({ content });
399
397
  }
400
398
  };
401
-
402
399
  //#endregion
403
400
  //#region src/providers/openai/responses.ts
404
401
  var OpenAiResponsesProvider = class extends OpenAiGenericProvider {
@@ -437,8 +434,17 @@ var OpenAiResponsesProvider = class extends OpenAiGenericProvider {
437
434
  "gpt-5.1-chat-latest",
438
435
  "gpt-5.2",
439
436
  "gpt-5.2-2025-12-11",
437
+ "gpt-5.2-chat-latest",
438
+ "gpt-5.2-codex",
439
+ "gpt-5.2-pro",
440
+ "gpt-5.2-pro-2025-12-11",
441
+ "gpt-5.3-chat-latest",
440
442
  "gpt-5.3-codex",
441
443
  "gpt-5.3-codex-spark",
444
+ "gpt-5.4",
445
+ "gpt-5.4-2026-03-05",
446
+ "gpt-5.4-pro",
447
+ "gpt-5.4-pro-2026-03-05",
442
448
  "gpt-audio",
443
449
  "gpt-audio-2025-08-28",
444
450
  "gpt-audio-mini",
@@ -531,7 +537,7 @@ var OpenAiResponsesProvider = class extends OpenAiGenericProvider {
531
537
  ...reasoningEffort ? { reasoning: { effort: reasoningEffort } } : {},
532
538
  ...temperature !== void 0 ? { temperature } : {},
533
539
  ...instructions ? { instructions } : {},
534
- ...config.top_p !== void 0 || getEnvString("OPENAI_TOP_P") ? { top_p: config.top_p ?? getEnvFloat("OPENAI_TOP_P", 1) } : {},
540
+ ...(!reasoningEffort || reasoningEffort === "none") && (config.top_p !== void 0 || getEnvString("OPENAI_TOP_P")) ? { top_p: config.top_p ?? getEnvFloat("OPENAI_TOP_P", 1) } : {},
535
541
  ...loadedTools ? { tools: loadedTools } : {},
536
542
  ...config.tool_choice ? { tool_choice: config.tool_choice } : {},
537
543
  ...config.max_tool_calls ? { max_tool_calls: config.max_tool_calls } : {},
@@ -567,10 +573,11 @@ var OpenAiResponsesProvider = class extends OpenAiGenericProvider {
567
573
  for (const mcpTool of mcpTools) if (mcpTool.require_approval !== "never") return { error: `Deep research model ${this.modelName} requires MCP tools to have require_approval: 'never'. Update your MCP tool configuration:\ntools:\n - type: mcp\n require_approval: never` };
568
574
  }
569
575
  let timeout = REQUEST_TIMEOUT_MS;
570
- if (isDeepResearchModel || this.modelName.includes("gpt-5-pro")) {
576
+ const isGpt5ProModel = /(^|\/)gpt-5(?:\.\d+)?-pro(?:-|$)/.test(this.modelName);
577
+ if (isDeepResearchModel || isGpt5ProModel) {
571
578
  const evalTimeout = getEnvInt("PROMPTFOO_EVAL_TIMEOUT_MS", 0);
572
579
  timeout = evalTimeout > 0 ? evalTimeout : LONG_RUNNING_MODEL_TIMEOUT_MS;
573
- logger_default.debug(`Using timeout of ${timeout}ms for long-running model ${this.modelName}`);
580
+ logger.debug(`Using timeout of ${timeout}ms for long-running model ${this.modelName}`);
574
581
  }
575
582
  let data;
576
583
  let status;
@@ -611,7 +618,7 @@ var OpenAiResponsesProvider = class extends OpenAiGenericProvider {
611
618
  };
612
619
  }
613
620
  } catch (err) {
614
- logger_default.error(`API call error: ${String(err)}`);
621
+ logger.error(`API call error: ${String(err)}`);
615
622
  await deleteFromCache?.();
616
623
  return {
617
624
  error: `API call error: ${String(err)}`,
@@ -647,7 +654,7 @@ var OpenAiResponsesProvider = class extends OpenAiGenericProvider {
647
654
  };
648
655
  }
649
656
  };
650
-
651
657
  //#endregion
652
658
  export { ResponsesProcessor as n, FunctionCallbackHandler as r, OpenAiResponsesProvider as t };
653
- //# sourceMappingURL=responses-DLLjADw5.js.map
659
+
660
+ //# sourceMappingURL=responses-BKqJmhhc.js.map