@mastra/core 0.18.1-alpha.0 → 0.19.0

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 (281) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/dist/agent/agent.d.ts +19 -9
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/index.cjs +11 -11
  5. package/dist/agent/index.d.ts +1 -1
  6. package/dist/agent/index.d.ts.map +1 -1
  7. package/dist/agent/index.js +2 -2
  8. package/dist/agent/input-processor/index.cjs +6 -6
  9. package/dist/agent/input-processor/index.js +1 -1
  10. package/dist/agent/types.d.ts +13 -8
  11. package/dist/agent/types.d.ts.map +1 -1
  12. package/dist/ai-tracing/exporters/default.d.ts +2 -2
  13. package/dist/ai-tracing/exporters/default.d.ts.map +1 -1
  14. package/dist/ai-tracing/index.cjs +32 -32
  15. package/dist/ai-tracing/index.js +1 -1
  16. package/dist/ai-tracing/types.d.ts +2 -2
  17. package/dist/ai-tracing/types.d.ts.map +1 -1
  18. package/dist/{chunk-ITD7IHN5.js → chunk-2DGWSOVQ.js} +23 -5
  19. package/dist/chunk-2DGWSOVQ.js.map +1 -0
  20. package/dist/{chunk-4PK4GBYZ.cjs → chunk-2GHLV754.cjs} +5 -4
  21. package/dist/chunk-2GHLV754.cjs.map +1 -0
  22. package/dist/{chunk-LL2X7QT7.js → chunk-3WFH6YRI.js} +4 -4
  23. package/dist/{chunk-LL2X7QT7.js.map → chunk-3WFH6YRI.js.map} +1 -1
  24. package/dist/chunk-45CV4JYJ.cjs +4 -0
  25. package/dist/{chunk-VBPPPQO3.cjs.map → chunk-45CV4JYJ.cjs.map} +1 -1
  26. package/dist/{chunk-SEZBEL3U.js → chunk-4BEHJSL6.js} +4 -4
  27. package/dist/{chunk-SEZBEL3U.js.map → chunk-4BEHJSL6.js.map} +1 -1
  28. package/dist/chunk-4LSFAAZW.js +3 -0
  29. package/dist/{chunk-CE73R5W7.js.map → chunk-4LSFAAZW.js.map} +1 -1
  30. package/dist/{chunk-XUAWHRUO.cjs → chunk-4R2TBRS7.cjs} +37 -112
  31. package/dist/chunk-4R2TBRS7.cjs.map +1 -0
  32. package/dist/{chunk-ITBUHG4U.cjs → chunk-4VNAMG7K.cjs} +6 -6
  33. package/dist/{chunk-ITBUHG4U.cjs.map → chunk-4VNAMG7K.cjs.map} +1 -1
  34. package/dist/{chunk-B4REUTZB.js → chunk-5BQOHHCI.js} +5 -5
  35. package/dist/{chunk-B4REUTZB.js.map → chunk-5BQOHHCI.js.map} +1 -1
  36. package/dist/{chunk-FXLZYRV7.js → chunk-5HCVPQTD.js} +3 -3
  37. package/dist/{chunk-FXLZYRV7.js.map → chunk-5HCVPQTD.js.map} +1 -1
  38. package/dist/chunk-5M6ZTQJN.js +1374 -0
  39. package/dist/chunk-5M6ZTQJN.js.map +1 -0
  40. package/dist/{chunk-SW7WPHZ2.cjs → chunk-7E4ESNZS.cjs} +5 -5
  41. package/dist/{chunk-SW7WPHZ2.cjs.map → chunk-7E4ESNZS.cjs.map} +1 -1
  42. package/dist/{chunk-NTS6B2I2.cjs → chunk-A4RAEU6X.cjs} +2 -2
  43. package/dist/{chunk-NTS6B2I2.cjs.map → chunk-A4RAEU6X.cjs.map} +1 -1
  44. package/dist/{chunk-QUB6MWXZ.cjs → chunk-BCWRUNMS.cjs} +38 -37
  45. package/dist/chunk-BCWRUNMS.cjs.map +1 -0
  46. package/dist/{chunk-245ANI3P.js → chunk-BUY5X7DT.js} +4 -4
  47. package/dist/{chunk-245ANI3P.js.map → chunk-BUY5X7DT.js.map} +1 -1
  48. package/dist/{chunk-6ZVNL435.js → chunk-COC64XPP.js} +9 -8
  49. package/dist/chunk-COC64XPP.js.map +1 -0
  50. package/dist/{chunk-6X4FZVGT.cjs → chunk-CQ73JM2N.cjs} +10 -10
  51. package/dist/{chunk-6X4FZVGT.cjs.map → chunk-CQ73JM2N.cjs.map} +1 -1
  52. package/dist/{chunk-7UEBC5KM.cjs → chunk-DRVSEV5Y.cjs} +25 -65
  53. package/dist/chunk-DRVSEV5Y.cjs.map +1 -0
  54. package/dist/{chunk-2TQHRYRK.cjs → chunk-EPMJYNEK.cjs} +4 -4
  55. package/dist/{chunk-2TQHRYRK.cjs.map → chunk-EPMJYNEK.cjs.map} +1 -1
  56. package/dist/{chunk-TKFLL33F.cjs → chunk-F6EJEELE.cjs} +9 -9
  57. package/dist/{chunk-TKFLL33F.cjs.map → chunk-F6EJEELE.cjs.map} +1 -1
  58. package/dist/{chunk-4DNSY645.js → chunk-FV3SA5TI.js} +3 -3
  59. package/dist/{chunk-4DNSY645.js.map → chunk-FV3SA5TI.js.map} +1 -1
  60. package/dist/{chunk-EJ2FU45N.js → chunk-FV4QVXO4.js} +2 -2
  61. package/dist/{chunk-EJ2FU45N.js.map → chunk-FV4QVXO4.js.map} +1 -1
  62. package/dist/{chunk-CKZK2EPZ.cjs → chunk-HNBU4PI7.cjs} +4 -4
  63. package/dist/{chunk-CKZK2EPZ.cjs.map → chunk-HNBU4PI7.cjs.map} +1 -1
  64. package/dist/{chunk-O6PQYYT6.cjs → chunk-HQPFM22N.cjs} +63 -45
  65. package/dist/chunk-HQPFM22N.cjs.map +1 -0
  66. package/dist/{chunk-36DRWGP4.js → chunk-IAXAPVOP.js} +4 -4
  67. package/dist/{chunk-36DRWGP4.js.map → chunk-IAXAPVOP.js.map} +1 -1
  68. package/dist/{chunk-5ZMC3NEO.js → chunk-JKLLXBOY.js} +46 -39
  69. package/dist/chunk-JKLLXBOY.js.map +1 -0
  70. package/dist/{chunk-WVRSMHE5.cjs → chunk-K4AYIXVH.cjs} +4 -4
  71. package/dist/{chunk-WVRSMHE5.cjs.map → chunk-K4AYIXVH.cjs.map} +1 -1
  72. package/dist/{chunk-SALFMUAY.cjs → chunk-LZBVDMVQ.cjs} +19 -19
  73. package/dist/{chunk-SALFMUAY.cjs.map → chunk-LZBVDMVQ.cjs.map} +1 -1
  74. package/dist/{chunk-RPFJBB5X.js → chunk-N4PK4MOG.js} +4 -4
  75. package/dist/{chunk-RPFJBB5X.js.map → chunk-N4PK4MOG.js.map} +1 -1
  76. package/dist/{chunk-QBTRGHUF.cjs → chunk-NHJVMZIL.cjs} +19 -19
  77. package/dist/{chunk-QBTRGHUF.cjs.map → chunk-NHJVMZIL.cjs.map} +1 -1
  78. package/dist/{chunk-BJZWMVNW.js → chunk-OBIF7QD5.js} +3 -3
  79. package/dist/{chunk-BJZWMVNW.js.map → chunk-OBIF7QD5.js.map} +1 -1
  80. package/dist/{chunk-VZLNVGYM.cjs → chunk-PG6ZNDSR.cjs} +21 -21
  81. package/dist/{chunk-VZLNVGYM.cjs.map → chunk-PG6ZNDSR.cjs.map} +1 -1
  82. package/dist/{chunk-XWJWU5OM.js → chunk-PJ6HF3KW.js} +16 -56
  83. package/dist/chunk-PJ6HF3KW.js.map +1 -0
  84. package/dist/{chunk-NG2XDPDY.js → chunk-RAXBZZKS.js} +4 -3
  85. package/dist/chunk-RAXBZZKS.js.map +1 -0
  86. package/dist/chunk-RFGQ3EQV.js +3 -0
  87. package/dist/chunk-RFGQ3EQV.js.map +1 -0
  88. package/dist/{chunk-73S2WYSD.cjs → chunk-RNIY63FP.cjs} +85 -78
  89. package/dist/chunk-RNIY63FP.cjs.map +1 -0
  90. package/dist/{chunk-ROU7YJLG.js → chunk-RYFQKXXS.js} +3 -3
  91. package/dist/{chunk-ROU7YJLG.js.map → chunk-RYFQKXXS.js.map} +1 -1
  92. package/dist/{chunk-C73WLCY3.cjs → chunk-S7UXT3V4.cjs} +21 -3
  93. package/dist/chunk-S7UXT3V4.cjs.map +1 -0
  94. package/dist/{chunk-R5GESRGB.js → chunk-SJMKDSRF.js} +37 -112
  95. package/dist/chunk-SJMKDSRF.js.map +1 -0
  96. package/dist/{chunk-YWXSGDDO.cjs → chunk-SQQMX4VC.cjs} +6 -6
  97. package/dist/{chunk-YWXSGDDO.cjs.map → chunk-SQQMX4VC.cjs.map} +1 -1
  98. package/dist/chunk-TCHOIK53.cjs +4 -0
  99. package/dist/chunk-TCHOIK53.cjs.map +1 -0
  100. package/dist/chunk-TIBULEK6.cjs +1379 -0
  101. package/dist/chunk-TIBULEK6.cjs.map +1 -0
  102. package/dist/{chunk-WECJNCGT.cjs → chunk-UTEH2LCJ.cjs} +19 -19
  103. package/dist/{chunk-WECJNCGT.cjs.map → chunk-UTEH2LCJ.cjs.map} +1 -1
  104. package/dist/{chunk-VGU5ZYYG.js → chunk-VWO3JJXC.js} +4 -4
  105. package/dist/{chunk-VGU5ZYYG.js.map → chunk-VWO3JJXC.js.map} +1 -1
  106. package/dist/{chunk-MCOVMKIS.js → chunk-WHFNGECY.js} +21 -4
  107. package/dist/chunk-WHFNGECY.js.map +1 -0
  108. package/dist/{chunk-NTXNE4YR.js → chunk-XG3SFWOH.js} +3 -3
  109. package/dist/{chunk-NTXNE4YR.js.map → chunk-XG3SFWOH.js.map} +1 -1
  110. package/dist/error/index.cjs +5 -5
  111. package/dist/error/index.d.ts.map +1 -1
  112. package/dist/error/index.js +1 -1
  113. package/dist/error/utils.d.ts +8 -0
  114. package/dist/error/utils.d.ts.map +1 -0
  115. package/dist/eval/index.cjs +3 -3
  116. package/dist/eval/index.js +1 -1
  117. package/dist/index.cjs +84 -67
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.js +18 -17
  120. package/dist/index.js.map +1 -1
  121. package/dist/integration/index.cjs +3 -3
  122. package/dist/integration/index.js +1 -1
  123. package/dist/llm/index.cjs +20 -0
  124. package/dist/llm/index.d.ts +3 -1
  125. package/dist/llm/index.d.ts.map +1 -1
  126. package/dist/llm/index.js +1 -1
  127. package/dist/llm/model/gateways/base.d.ts +42 -0
  128. package/dist/llm/model/gateways/base.d.ts.map +1 -0
  129. package/dist/llm/model/gateways/index.d.ts +3 -0
  130. package/dist/llm/model/gateways/index.d.ts.map +1 -0
  131. package/dist/llm/model/gateways/models-dev.d.ts +11 -0
  132. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -0
  133. package/dist/llm/model/index.d.ts +2 -0
  134. package/dist/llm/model/index.d.ts.map +1 -1
  135. package/dist/llm/model/model.loop.d.ts.map +1 -1
  136. package/dist/llm/model/openai-compatible.d.ts +32 -0
  137. package/dist/llm/model/openai-compatible.d.ts.map +1 -0
  138. package/dist/llm/model/provider-registry.generated.d.ts +462 -0
  139. package/dist/llm/model/provider-registry.generated.d.ts.map +1 -0
  140. package/dist/llm/model/shared.types.d.ts +8 -0
  141. package/dist/llm/model/shared.types.d.ts.map +1 -1
  142. package/dist/loop/index.cjs +2 -2
  143. package/dist/loop/index.js +1 -1
  144. package/dist/loop/network/index.d.ts.map +1 -1
  145. package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
  146. package/dist/loop/test-utils/generateText.d.ts.map +1 -1
  147. package/dist/loop/test-utils/options.d.ts.map +1 -1
  148. package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
  149. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  150. package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
  151. package/dist/loop/test-utils/tools.d.ts.map +1 -1
  152. package/dist/loop/workflows/agentic-execution/index.d.ts +99 -0
  153. package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
  154. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +66 -0
  155. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  156. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +33 -0
  157. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  158. package/dist/loop/workflows/agentic-loop/index.d.ts +99 -0
  159. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  160. package/dist/loop/workflows/run-state.d.ts +5 -0
  161. package/dist/loop/workflows/run-state.d.ts.map +1 -1
  162. package/dist/loop/workflows/schema.d.ts +38 -0
  163. package/dist/loop/workflows/schema.d.ts.map +1 -1
  164. package/dist/mastra/index.cjs +2 -2
  165. package/dist/mastra/index.d.ts.map +1 -1
  166. package/dist/mastra/index.js +1 -1
  167. package/dist/memory/index.cjs +4 -4
  168. package/dist/memory/index.js +1 -1
  169. package/dist/network/vNext/index.cjs +30 -30
  170. package/dist/network/vNext/index.cjs.map +1 -1
  171. package/dist/network/vNext/index.js +3 -3
  172. package/dist/network/vNext/index.js.map +1 -1
  173. package/dist/processors/index.cjs +10 -10
  174. package/dist/processors/index.js +1 -1
  175. package/dist/processors/processors/language-detector.d.ts.map +1 -1
  176. package/dist/processors/processors/moderation.d.ts.map +1 -1
  177. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  178. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  179. package/dist/processors/processors/structured-output.d.ts.map +1 -1
  180. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  181. package/dist/relevance/index.cjs +4 -4
  182. package/dist/relevance/index.js +1 -1
  183. package/dist/scores/index.cjs +9 -9
  184. package/dist/scores/index.js +2 -2
  185. package/dist/scores/scoreTraces/index.cjs +57 -68
  186. package/dist/scores/scoreTraces/index.cjs.map +1 -1
  187. package/dist/scores/scoreTraces/index.js +48 -59
  188. package/dist/scores/scoreTraces/index.js.map +1 -1
  189. package/dist/scores/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
  190. package/dist/scores/scoreTraces/utils.d.ts +4 -8
  191. package/dist/scores/scoreTraces/utils.d.ts.map +1 -1
  192. package/dist/scores/types.d.ts +8 -4
  193. package/dist/scores/types.d.ts.map +1 -1
  194. package/dist/server/index.cjs +7 -7
  195. package/dist/server/index.js +2 -2
  196. package/dist/storage/base.d.ts +14 -5
  197. package/dist/storage/base.d.ts.map +1 -1
  198. package/dist/storage/constants.d.ts.map +1 -1
  199. package/dist/storage/domains/observability/base.d.ts +5 -5
  200. package/dist/storage/domains/observability/base.d.ts.map +1 -1
  201. package/dist/storage/domains/observability/inmemory.d.ts +7 -7
  202. package/dist/storage/domains/observability/inmemory.d.ts.map +1 -1
  203. package/dist/storage/domains/scores/base.d.ts +8 -0
  204. package/dist/storage/domains/scores/base.d.ts.map +1 -1
  205. package/dist/storage/domains/scores/inmemory.d.ts +8 -0
  206. package/dist/storage/domains/scores/inmemory.d.ts.map +1 -1
  207. package/dist/storage/index.cjs +94 -64
  208. package/dist/storage/index.cjs.map +1 -1
  209. package/dist/storage/index.js +59 -29
  210. package/dist/storage/index.js.map +1 -1
  211. package/dist/storage/mock.d.ts +9 -0
  212. package/dist/storage/mock.d.ts.map +1 -1
  213. package/dist/storage/types.d.ts +2 -0
  214. package/dist/storage/types.d.ts.map +1 -1
  215. package/dist/stream/MastraWorkflowStream.d.ts.map +1 -1
  216. package/dist/stream/aisdk/v5/input.d.ts.map +1 -1
  217. package/dist/stream/aisdk/v5/output.d.ts +7 -0
  218. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  219. package/dist/stream/base/output.d.ts.map +1 -1
  220. package/dist/stream/index.cjs +4 -4
  221. package/dist/stream/index.js +1 -1
  222. package/dist/stream/types.d.ts +12 -12
  223. package/dist/stream/types.d.ts.map +1 -1
  224. package/dist/telemetry/index.cjs +7 -7
  225. package/dist/telemetry/index.js +1 -1
  226. package/dist/test-utils/llm-mock.cjs +2 -2
  227. package/dist/test-utils/llm-mock.js +1 -1
  228. package/dist/tools/index.cjs +4 -4
  229. package/dist/tools/index.js +1 -1
  230. package/dist/tools/is-vercel-tool.cjs +2 -2
  231. package/dist/tools/is-vercel-tool.js +1 -1
  232. package/dist/tools/tool.d.ts +2 -4
  233. package/dist/tools/tool.d.ts.map +1 -1
  234. package/dist/tools/types.d.ts +1 -1
  235. package/dist/tools/types.d.ts.map +1 -1
  236. package/dist/tts/index.cjs +2 -2
  237. package/dist/tts/index.js +1 -1
  238. package/dist/{types.d.ts → types/dynamic-argument.d.ts} +3 -3
  239. package/dist/types/dynamic-argument.d.ts.map +1 -0
  240. package/dist/types/index.cjs +4 -0
  241. package/dist/types/index.cjs.map +1 -0
  242. package/dist/types/index.d.ts +2 -0
  243. package/dist/types/index.d.ts.map +1 -0
  244. package/dist/types/index.js +3 -0
  245. package/dist/types/index.js.map +1 -0
  246. package/dist/utils.cjs +17 -17
  247. package/dist/utils.js +1 -1
  248. package/dist/vector/index.cjs +4 -4
  249. package/dist/vector/index.js +1 -1
  250. package/dist/voice/index.cjs +4 -4
  251. package/dist/voice/index.js +1 -1
  252. package/dist/workflows/default.d.ts.map +1 -1
  253. package/dist/workflows/evented/index.cjs +10 -10
  254. package/dist/workflows/evented/index.js +1 -1
  255. package/dist/workflows/index.cjs +12 -12
  256. package/dist/workflows/index.js +1 -1
  257. package/dist/workflows/legacy/index.cjs +22 -22
  258. package/dist/workflows/legacy/index.js +1 -1
  259. package/dist/workflows/types.d.ts +11 -1
  260. package/dist/workflows/types.d.ts.map +1 -1
  261. package/dist/workflows/workflow.d.ts +6 -3
  262. package/dist/workflows/workflow.d.ts.map +1 -1
  263. package/package.json +4 -4
  264. package/types.d.ts +1 -0
  265. package/dist/chunk-4PK4GBYZ.cjs.map +0 -1
  266. package/dist/chunk-5ZMC3NEO.js.map +0 -1
  267. package/dist/chunk-6ZVNL435.js.map +0 -1
  268. package/dist/chunk-73S2WYSD.cjs.map +0 -1
  269. package/dist/chunk-7UEBC5KM.cjs.map +0 -1
  270. package/dist/chunk-C73WLCY3.cjs.map +0 -1
  271. package/dist/chunk-CE73R5W7.js +0 -3
  272. package/dist/chunk-ITD7IHN5.js.map +0 -1
  273. package/dist/chunk-MCOVMKIS.js.map +0 -1
  274. package/dist/chunk-NG2XDPDY.js.map +0 -1
  275. package/dist/chunk-O6PQYYT6.cjs.map +0 -1
  276. package/dist/chunk-QUB6MWXZ.cjs.map +0 -1
  277. package/dist/chunk-R5GESRGB.js.map +0 -1
  278. package/dist/chunk-VBPPPQO3.cjs +0 -4
  279. package/dist/chunk-XUAWHRUO.cjs.map +0 -1
  280. package/dist/chunk-XWJWU5OM.js.map +0 -1
  281. package/dist/types.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/llm/model/provider-registry.generated.ts","../src/llm/model/openai-compatible.ts"],"names":["providerConfig","buffer"],"mappings":"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","file":"chunk-TIBULEK6.cjs","sourcesContent":["/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\n/**\n * Provider configurations for OpenAI-compatible APIs\n */\nexport const PROVIDER_REGISTRY = {\n 'moonshotai-cn': {\n url: 'https://api.moonshot.cn/v1/chat/completions',\n apiKeyEnvVar: 'MOONSHOT_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Moonshot AI (China)',\n models: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n docUrl: 'https://platform.moonshot.cn/docs/api/chat',\n },\n lucidquery: {\n url: 'https://lucidquery.com/api/v1/chat/completions',\n apiKeyEnvVar: 'LUCIDQUERY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'LucidQuery AI',\n models: ['lucidnova-rf1-100b', 'lucidquery-nexus-coder'],\n docUrl: 'https://lucidquery.com/api/docs',\n },\n moonshotai: {\n url: 'https://api.moonshot.ai/v1/chat/completions',\n apiKeyEnvVar: 'MOONSHOT_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Moonshot AI',\n models: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n docUrl: 'https://platform.moonshot.ai/docs/api/chat',\n },\n 'zai-coding-plan': {\n url: 'https://api.z.ai/api/coding/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Z.AI Coding Plan',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/devpack/overview',\n },\n alibaba: {\n url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',\n apiKeyEnvVar: 'DASHSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Alibaba',\n models: ['qwen3-coder-plus'],\n docUrl: 'https://www.alibabacloud.com/help/en/model-studio/models',\n },\n xai: {\n url: 'https://api.x.ai/v1/chat/completions',\n apiKeyEnvVar: 'XAI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'xAI',\n models: [\n 'grok-2',\n 'grok-2-1212',\n 'grok-2-latest',\n 'grok-2-vision',\n 'grok-2-vision-1212',\n 'grok-2-vision-latest',\n 'grok-3',\n 'grok-3-fast',\n 'grok-3-fast-latest',\n 'grok-3-latest',\n 'grok-3-mini',\n 'grok-3-mini-fast',\n 'grok-3-mini-fast-latest',\n 'grok-3-mini-latest',\n 'grok-4',\n 'grok-4-fast',\n 'grok-4-fast-non-reasoning',\n 'grok-beta',\n 'grok-code-fast-1',\n 'grok-vision-beta',\n ],\n docUrl: 'https://docs.x.ai/docs/models',\n },\n nvidia: {\n url: 'https://integrate.api.nvidia.com/v1/chat/completions',\n apiKeyEnvVar: 'NVIDIA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Nvidia',\n models: [\n 'black-forest-labs/flux.1-dev',\n 'deepseek-ai/deepseek-v3.1',\n 'google/gemma-3-27b-it',\n 'microsoft/phi-4-mini-instruct',\n 'moonshotai/kimi-k2-instruct',\n 'nvidia/cosmos-nemotron-34b',\n 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n 'nvidia/nemoretriever-ocr-v1',\n 'nvidia/parakeet-tdt-0.6b-v2',\n 'openai/gpt-oss-120b',\n 'openai/whisper-large-v3',\n 'qwen/qwen3-235b-a22b',\n 'qwen/qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://docs.api.nvidia.com/nim/',\n },\n upstage: {\n url: 'https://api.upstage.ai/chat/completions',\n apiKeyEnvVar: 'UPSTAGE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Upstage',\n models: ['solar-mini', 'solar-pro2'],\n docUrl: 'https://developers.upstage.ai/docs/apis/chat',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1/chat/completions',\n apiKeyEnvVar: 'GROQ_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Groq',\n models: [\n 'deepseek-r1-distill-llama-70b',\n 'gemma2-9b-it',\n 'llama-3.1-8b-instant',\n 'llama-3.3-70b-versatile',\n 'llama-guard-3-8b',\n 'llama3-70b-8192',\n 'llama3-8b-8192',\n 'meta-llama/llama-4-maverick-17b-128e-instruct',\n 'meta-llama/llama-4-scout-17b-16e-instruct',\n 'meta-llama/llama-guard-4-12b',\n 'mistral-saba-24b',\n 'moonshotai/kimi-k2-instruct',\n 'moonshotai/kimi-k2-instruct-0905',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen-qwq-32b',\n 'qwen/qwen3-32b',\n ],\n docUrl: 'https://console.groq.com/docs/models',\n },\n 'github-copilot': {\n url: 'https://api.githubcopilot.com/chat/completions',\n apiKeyEnvVar: 'GITHUB_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'GitHub Copilot',\n models: [\n 'claude-3.5-sonnet',\n 'claude-3.7-sonnet',\n 'claude-3.7-sonnet-thought',\n 'claude-opus-4',\n 'claude-opus-41',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'gemini-2.0-flash-001',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-4o',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'grok-code-fast-1',\n 'o3',\n 'o3-mini',\n 'o4-mini',\n ],\n docUrl: 'https://docs.github.com/en/copilot',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1/chat/completions',\n apiKeyEnvVar: 'MISTRAL_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Mistral',\n models: [\n 'codestral-latest',\n 'devstral-medium-2507',\n 'devstral-small-2505',\n 'devstral-small-2507',\n 'magistral-medium-latest',\n 'magistral-small',\n 'ministral-3b-latest',\n 'ministral-8b-latest',\n 'mistral-large-latest',\n 'mistral-medium-2505',\n 'mistral-medium-2508',\n 'mistral-medium-latest',\n 'mistral-nemo',\n 'mistral-small-latest',\n 'open-mistral-7b',\n 'open-mixtral-8x22b',\n 'open-mixtral-8x7b',\n 'pixtral-12b',\n 'pixtral-large-latest',\n ],\n docUrl: 'https://docs.mistral.ai/getting-started/models/',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1/chat/completions',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Vercel AI Gateway',\n models: [\n 'amazon/nova-lite',\n 'amazon/nova-micro',\n 'amazon/nova-pro',\n 'anthropic/claude-3-5-haiku',\n 'anthropic/claude-3-haiku',\n 'anthropic/claude-3-opus',\n 'anthropic/claude-3.5-sonnet',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-4-1-opus',\n 'anthropic/claude-4-opus',\n 'anthropic/claude-4-sonnet',\n 'anthropic/claude-4.5-sonnet',\n 'cerebras/qwen3-coder',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.0-flash',\n 'google/gemini-2.0-flash-lite',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'meta/llama-3.3-70b',\n 'meta/llama-4-maverick',\n 'meta/llama-4-scout',\n 'mistral/codestral',\n 'mistral/magistral-medium',\n 'mistral/magistral-small',\n 'mistral/ministral-3b',\n 'mistral/ministral-8b',\n 'mistral/mistral-large',\n 'mistral/mistral-small',\n 'mistral/mixtral-8x22b-instruct',\n 'mistral/pixtral-12b',\n 'mistral/pixtral-large',\n 'moonshotai/kimi-k2',\n 'morph/morph-v3-fast',\n 'morph/morph-v3-large',\n 'openai/gpt-4-turbo',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o1',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'vercel/v0-1.0-md',\n 'vercel/v0-1.5-md',\n 'xai/grok-2',\n 'xai/grok-2-vision',\n 'xai/grok-3',\n 'xai/grok-3-fast',\n 'xai/grok-3-mini',\n 'xai/grok-3-mini-fast',\n 'xai/grok-4',\n 'xai/grok-4-fast',\n 'xai/grok-4-fast-non-reasoning',\n 'xai/grok-code-fast-1',\n ],\n docUrl: 'https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway',\n },\n deepseek: {\n url: 'https://api.deepseek.com/chat/completions',\n apiKeyEnvVar: 'DEEPSEEK_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'DeepSeek',\n models: ['deepseek-chat', 'deepseek-reasoner'],\n docUrl: 'https://platform.deepseek.com/api-docs/pricing',\n },\n 'alibaba-cn': {\n url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',\n apiKeyEnvVar: 'DASHSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Alibaba (China)',\n models: ['qwen3-coder-plus'],\n docUrl: 'https://www.alibabacloud.com/help/en/model-studio/models',\n },\n venice: {\n url: 'https://api.venice.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'VENICE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Venice AI',\n models: [\n 'deepseek-coder-v2-lite',\n 'deepseek-r1-671b',\n 'dolphin-2.9.2-qwen2-72b',\n 'llama-3.1-405b',\n 'llama-3.2-3b',\n 'llama-3.3-70b',\n 'mistral-31-24b',\n 'qwen-2.5-coder-32b',\n 'qwen-2.5-qwq-32b',\n 'qwen-2.5-vl',\n 'qwen3-235b',\n 'qwen3-4b',\n 'venice-uncensored',\n ],\n docUrl: 'https://docs.venice.ai',\n },\n chutes: {\n url: 'https://llm.chutes.ai/v1/chat/completions',\n apiKeyEnvVar: 'CHUTES_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Chutes',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'chutesai/Devstral-Small-2505',\n 'chutesai/Mistral-Small-3.2-24B-Instruct-2506',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-R1-0528-Qwen3-8B',\n 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'deepseek-ai/DeepSeek-V3.1-Terminus',\n 'deepseek-ai/DeepSeek-V3.1-turbo',\n 'deepseek-ai/DeepSeek-V3.1:THINKING',\n 'meituan-longcat/LongCat-Flash-Chat-FP8',\n 'moonshotai/Kimi-Dev-72B',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'moonshotai/Kimi-K2-Instruct-75k',\n 'moonshotai/Kimi-VL-A3B-Thinking',\n 'openai/gpt-oss-120b',\n 'tngtech/DeepSeek-R1T-Chimera',\n 'tngtech/DeepSeek-TNG-R1T2-Chimera',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n 'zai-org/GLM-4.5-turbo',\n ],\n docUrl: 'https://llm.chutes.ai/v1/models',\n },\n cortecs: {\n url: 'https://api.cortecs.ai/v1/chat/completions',\n apiKeyEnvVar: 'CORTECS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Cortecs',\n models: [\n 'claude-sonnet-4',\n 'deepseek-v3-0324',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-oss-120b',\n 'kimi-k2-instruct',\n 'llama-3.1-405b-instruct',\n 'nova-pro-v1',\n 'qwen3-32b',\n 'qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://api.cortecs.ai/v1/models',\n },\n 'github-models': {\n url: 'https://models.github.ai/inference/chat/completions',\n apiKeyEnvVar: 'GITHUB_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'GitHub Models',\n models: [\n 'ai21-labs/ai21-jamba-1.5-large',\n 'ai21-labs/ai21-jamba-1.5-mini',\n 'cohere/cohere-command-a',\n 'cohere/cohere-command-r',\n 'cohere/cohere-command-r-08-2024',\n 'cohere/cohere-command-r-plus',\n 'cohere/cohere-command-r-plus-08-2024',\n 'core42/jais-30b-chat',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-0528',\n 'deepseek/deepseek-v3-0324',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-90b-vision-instruct',\n 'meta/llama-3.3-70b-instruct',\n 'meta/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta/llama-4-scout-17b-16e-instruct',\n 'meta/meta-llama-3-70b-instruct',\n 'meta/meta-llama-3-8b-instruct',\n 'meta/meta-llama-3.1-405b-instruct',\n 'meta/meta-llama-3.1-70b-instruct',\n 'meta/meta-llama-3.1-8b-instruct',\n 'microsoft/mai-ds-r1',\n 'microsoft/phi-3-medium-128k-instruct',\n 'microsoft/phi-3-medium-4k-instruct',\n 'microsoft/phi-3-mini-128k-instruct',\n 'microsoft/phi-3-mini-4k-instruct',\n 'microsoft/phi-3-small-128k-instruct',\n 'microsoft/phi-3-small-8k-instruct',\n 'microsoft/phi-3.5-mini-instruct',\n 'microsoft/phi-3.5-moe-instruct',\n 'microsoft/phi-3.5-vision-instruct',\n 'microsoft/phi-4',\n 'microsoft/phi-4-mini-instruct',\n 'microsoft/phi-4-mini-reasoning',\n 'microsoft/phi-4-multimodal-instruct',\n 'microsoft/phi-4-reasoning',\n 'mistral-ai/codestral-2501',\n 'mistral-ai/ministral-3b',\n 'mistral-ai/mistral-large-2411',\n 'mistral-ai/mistral-medium-2505',\n 'mistral-ai/mistral-nemo',\n 'mistral-ai/mistral-small-2503',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/o1',\n 'openai/o1-mini',\n 'openai/o1-preview',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'xai/grok-3',\n 'xai/grok-3-mini',\n ],\n docUrl: 'https://docs.github.com/en/github-models',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1/chat/completions',\n apiKeyEnvVar: 'TOGETHER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Together AI',\n models: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1',\n 'deepseek-ai/DeepSeek-V3',\n 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'openai/gpt-oss-120b',\n ],\n docUrl: 'https://docs.together.ai/docs/serverless-models',\n },\n baseten: {\n url: 'https://inference.baseten.co/v1/chat/completions',\n apiKeyEnvVar: 'BASETEN_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Baseten',\n models: ['Qwen3/Qwen3-Coder-480B-A35B-Instruct', 'moonshotai/Kimi-K2-Instruct-0905'],\n docUrl: 'https://docs.baseten.co/development/model-apis/overview',\n },\n huggingface: {\n url: 'https://router.huggingface.co/v1/chat/completions',\n apiKeyEnvVar: 'HF_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'Hugging Face',\n models: [\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/Deepseek-V3-0324',\n 'moonshotai/Kimi-K2-Instruct',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'zai-org/GLM-4.5',\n 'zai-org/GLM-4.5-Air',\n ],\n docUrl: 'https://huggingface.co/docs/inference-providers',\n },\n opencode: {\n url: 'https://opencode.ai/zen/v1/chat/completions',\n apiKeyEnvVar: 'OPENCODE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'opencode zen',\n models: [\n 'claude-3-5-haiku',\n 'claude-opus-4-1',\n 'claude-sonnet-4',\n 'claude-sonnet-4-5',\n 'code-supernova',\n 'gpt-5',\n 'gpt-5-codex',\n 'grok-code',\n 'kimi-k2',\n 'qwen3-coder',\n 'qwen3-max',\n ],\n docUrl: 'https://opencode.ai/docs',\n },\n fastrouter: {\n url: 'https://go.fastrouter.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'FASTROUTER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'FastRouter',\n models: [\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'deepseek-ai/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'moonshotai/kimi-k2',\n 'openai/gpt-4.1',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen/qwen3-coder',\n 'x-ai/grok-4',\n ],\n docUrl: 'https://fastrouter.ai/models',\n },\n google: {\n url: 'https://generativelanguage.googleapis.com/v1beta/chat/completions',\n apiKeyEnvVar: 'GOOGLE_GENERATIVE_AI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Google',\n models: [\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-2.5-flash-lite-preview-06-17',\n 'gemini-2.5-flash-lite-preview-09-2025',\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-flash-preview-05-20',\n 'gemini-2.5-flash-preview-09-2025',\n 'gemini-2.5-pro',\n 'gemini-2.5-pro-preview-05-06',\n 'gemini-2.5-pro-preview-06-05',\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-live-2.5-flash-preview-native-audio',\n ],\n docUrl: 'https://ai.google.dev/gemini-api/docs/pricing',\n },\n inception: {\n url: 'https://api.inceptionlabs.ai/v1/chat/completions',\n apiKeyEnvVar: 'INCEPTION_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Inception',\n models: ['mercury', 'mercury-coder'],\n docUrl: 'https://platform.inceptionlabs.ai/docs',\n },\n wandb: {\n url: 'https://api.inference.wandb.ai/v1/chat/completions',\n apiKeyEnvVar: 'WANDB_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Weights & Biases',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'meta-llama/Llama-3.1-8B-Instruct',\n 'meta-llama/Llama-3.3-70B-Instruct',\n 'meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'microsoft/Phi-4-mini-instruct',\n 'moonshotai/Kimi-K2-Instruct',\n ],\n docUrl: 'https://weave-docs.wandb.ai/guides/integrations/inference/',\n },\n openai: {\n url: 'https://api.openai.com/v1/chat/completions',\n apiKeyEnvVar: 'OPENAI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'OpenAI',\n models: [\n 'codex-mini-latest',\n 'gpt-3.5-turbo',\n 'gpt-4',\n 'gpt-4-turbo',\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-2024-05-13',\n 'gpt-4o-2024-08-06',\n 'gpt-4o-2024-11-20',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-chat-latest',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'o1',\n 'o1-mini',\n 'o1-preview',\n 'o1-pro',\n 'o3',\n 'o3-deep-research',\n 'o3-mini',\n 'o3-pro',\n 'o4-mini',\n 'o4-mini-deep-research',\n ],\n docUrl: 'https://platform.openai.com/docs/models',\n },\n 'zhipuai-coding-plan': {\n url: 'https://open.bigmodel.cn/api/coding/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Zhipu AI Coding Plan',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.bigmodel.cn/cn/coding-plan/overview',\n },\n perplexity: {\n url: 'https://api.perplexity.ai/chat/completions',\n apiKeyEnvVar: 'PERPLEXITY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Perplexity',\n models: ['sonar', 'sonar-pro', 'sonar-reasoning', 'sonar-reasoning-pro'],\n docUrl: 'https://docs.perplexity.ai',\n },\n openrouter: {\n url: 'https://openrouter.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'OPENROUTER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'OpenRouter',\n models: [\n 'anthropic/claude-3.5-haiku',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'anthropic/claude-sonnet-4.5',\n 'cognitivecomputations/dolphin3.0-mistral-24b',\n 'cognitivecomputations/dolphin3.0-r1-mistral-24b',\n 'deepseek/deepseek-chat-v3-0324',\n 'deepseek/deepseek-chat-v3.1',\n 'deepseek/deepseek-r1-0528-qwen3-8b:free',\n 'deepseek/deepseek-r1-0528:free',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'deepseek/deepseek-r1-distill-qwen-14b',\n 'deepseek/deepseek-r1:free',\n 'deepseek/deepseek-v3-base:free',\n 'deepseek/deepseek-v3.1-terminus',\n 'featherless/qwerky-72b',\n 'google/gemini-2.0-flash-001',\n 'google/gemini-2.0-flash-exp:free',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-pro-preview-05-06',\n 'google/gemini-2.5-pro-preview-06-05',\n 'google/gemma-2-9b-it:free',\n 'google/gemma-3-12b-it',\n 'google/gemma-3-27b-it',\n 'google/gemma-3n-e4b-it',\n 'google/gemma-3n-e4b-it:free',\n 'meta-llama/llama-3.2-11b-vision-instruct',\n 'meta-llama/llama-3.3-70b-instruct:free',\n 'meta-llama/llama-4-scout:free',\n 'microsoft/mai-ds-r1:free',\n 'mistralai/codestral-2508',\n 'mistralai/devstral-medium-2507',\n 'mistralai/devstral-small-2505',\n 'mistralai/devstral-small-2505:free',\n 'mistralai/devstral-small-2507',\n 'mistralai/mistral-7b-instruct:free',\n 'mistralai/mistral-medium-3',\n 'mistralai/mistral-medium-3.1',\n 'mistralai/mistral-nemo:free',\n 'mistralai/mistral-small-3.1-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct:free',\n 'moonshotai/kimi-dev-72b:free',\n 'moonshotai/kimi-k2',\n 'moonshotai/kimi-k2-0905',\n 'moonshotai/kimi-k2:free',\n 'nousresearch/deephermes-3-llama-3-8b-preview',\n 'nousresearch/hermes-4-405b',\n 'nousresearch/hermes-4-70b',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-chat',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o4-mini',\n 'openrouter/cypher-alpha:free',\n 'openrouter/horizon-alpha',\n 'openrouter/horizon-beta',\n 'openrouter/sonoma-dusk-alpha',\n 'openrouter/sonoma-sky-alpha',\n 'qwen/qwen-2.5-coder-32b-instruct',\n 'qwen/qwen2.5-vl-32b-instruct:free',\n 'qwen/qwen2.5-vl-72b-instruct',\n 'qwen/qwen2.5-vl-72b-instruct:free',\n 'qwen/qwen3-14b:free',\n 'qwen/qwen3-235b-a22b-07-25',\n 'qwen/qwen3-235b-a22b-07-25:free',\n 'qwen/qwen3-235b-a22b-thinking-2507',\n 'qwen/qwen3-235b-a22b:free',\n 'qwen/qwen3-30b-a3b-instruct-2507',\n 'qwen/qwen3-30b-a3b:free',\n 'qwen/qwen3-32b:free',\n 'qwen/qwen3-8b:free',\n 'qwen/qwen3-coder',\n 'qwen/qwen3-coder:free',\n 'qwen/qwen3-max',\n 'qwen/qwen3-next-80b-a3b-instruct',\n 'qwen/qwq-32b:free',\n 'rekaai/reka-flash-3',\n 'sarvamai/sarvam-m:free',\n 'thudm/glm-z1-32b:free',\n 'tngtech/deepseek-r1t2-chimera:free',\n 'x-ai/grok-3',\n 'x-ai/grok-3-beta',\n 'x-ai/grok-3-mini',\n 'x-ai/grok-3-mini-beta',\n 'x-ai/grok-4',\n 'x-ai/grok-4-fast',\n 'x-ai/grok-4-fast:free',\n 'x-ai/grok-code-fast-1',\n 'z-ai/glm-4.5',\n 'z-ai/glm-4.5-air',\n 'z-ai/glm-4.5-air:free',\n 'z-ai/glm-4.5v',\n ],\n docUrl: 'https://openrouter.ai/models',\n },\n synthetic: {\n url: 'https://api.synthetic.new/v1/chat/completions',\n apiKeyEnvVar: 'SYNTHETIC_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Synthetic',\n models: [\n 'hf:Qwen/Qwen2.5-Coder-32B-Instruct',\n 'hf:Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'hf:Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'hf:Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'hf:deepseek-ai/DeepSeek-R1',\n 'hf:deepseek-ai/DeepSeek-R1-0528',\n 'hf:deepseek-ai/DeepSeek-V3',\n 'hf:deepseek-ai/DeepSeek-V3-0324',\n 'hf:deepseek-ai/DeepSeek-V3.1',\n 'hf:deepseek-ai/DeepSeek-V3.1-Terminus',\n 'hf:meta-llama/Llama-3.1-405B-Instruct',\n 'hf:meta-llama/Llama-3.1-70B-Instruct',\n 'hf:meta-llama/Llama-3.1-8B-Instruct',\n 'hf:meta-llama/Llama-3.3-70B-Instruct',\n 'hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8',\n 'hf:meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct-0905',\n 'hf:openai/gpt-oss-120b',\n 'hf:zai-org/GLM-4.5',\n ],\n docUrl: 'https://synthetic.new/pricing',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai/chat/completions',\n apiKeyEnvVar: 'DEEPINFRA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Deep Infra',\n models: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'zai-org/GLM-4.5',\n ],\n docUrl: 'https://deepinfra.com/models',\n },\n zhipuai: {\n url: 'https://open.bigmodel.cn/api/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Zhipu AI',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/guides/overview/pricing',\n },\n submodel: {\n url: 'https://llm.submodel.ai/v1/chat/completions',\n apiKeyEnvVar: 'SUBMODEL_INSTAGEN_ACCESS_KEY',\n apiKeyHeader: 'Authorization',\n name: 'submodel',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'openai/gpt-oss-120b',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n ],\n docUrl: 'https://submodel.gitbook.io',\n },\n zai: {\n url: 'https://api.z.ai/api/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Z.AI',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/guides/overview/pricing',\n },\n inference: {\n url: 'https://inference.net/v1/chat/completions',\n apiKeyEnvVar: 'INFERENCE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Inference',\n models: [\n 'google/gemma-3',\n 'meta/llama-3.1-8b-instruct',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-1b-instruct',\n 'meta/llama-3.2-3b-instruct',\n 'mistral/mistral-nemo-12b-instruct',\n 'osmosis/osmosis-structure-0.6b',\n 'qwen/qwen-2.5-7b-vision-instruct',\n 'qwen/qwen3-embedding-4b',\n ],\n docUrl: 'https://inference.net/models',\n },\n requesty: {\n url: 'https://router.requesty.ai/v1/chat/completions',\n apiKeyEnvVar: 'REQUESTY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Requesty',\n models: [\n 'anthropic/claude-3-7-sonnet',\n 'anthropic/claude-4-sonnet-20250522',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4-1-20250805',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/o4-mini',\n ],\n docUrl: 'https://requesty.ai/solution/llm-routing/models',\n },\n morph: {\n url: 'https://api.morphllm.com/v1/chat/completions',\n apiKeyEnvVar: 'MORPH_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Morph',\n models: ['auto', 'morph-v3-fast', 'morph-v3-large'],\n docUrl: 'https://docs.morphllm.com/api-reference/introduction',\n },\n lmstudio: {\n url: 'http://127.0.0.1:1234/v1/chat/completions',\n apiKeyEnvVar: 'LMSTUDIO_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'LMStudio',\n models: ['openai/gpt-oss-20b', 'qwen/qwen3-30b-a3b-2507', 'qwen/qwen3-coder-30b'],\n docUrl: 'https://lmstudio.ai/models',\n },\n anthropic: {\n url: 'https://api.anthropic.com/v1/chat/completions',\n apiKeyEnvVar: 'ANTHROPIC_API_KEY',\n apiKeyHeader: 'x-api-key',\n name: 'Anthropic',\n models: [\n 'claude-3-5-haiku-20241022',\n 'claude-3-5-sonnet-20240620',\n 'claude-3-5-sonnet-20241022',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-haiku-20240307',\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-opus-4-1-20250805',\n 'claude-opus-4-20250514',\n 'claude-sonnet-4-20250514',\n 'claude-sonnet-4-5-20250929',\n ],\n docUrl: 'https://docs.anthropic.com/en/docs/about-claude/models',\n },\n 'fireworks-ai': {\n url: 'https://api.fireworks.ai/inference/v1/chat/completions',\n apiKeyEnvVar: 'FIREWORKS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Fireworks AI',\n models: [\n 'accounts/fireworks/models/deepseek-r1-0528',\n 'accounts/fireworks/models/deepseek-v3-0324',\n 'accounts/fireworks/models/deepseek-v3p1',\n 'accounts/fireworks/models/glm-4p5',\n 'accounts/fireworks/models/glm-4p5-air',\n 'accounts/fireworks/models/gpt-oss-120b',\n 'accounts/fireworks/models/gpt-oss-20b',\n 'accounts/fireworks/models/kimi-k2-instruct',\n 'accounts/fireworks/models/qwen3-235b-a22b',\n 'accounts/fireworks/models/qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://fireworks.ai/docs/',\n },\n modelscope: {\n url: 'https://api-inference.modelscope.cn/v1/chat/completions',\n apiKeyEnvVar: 'MODELSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'ModelScope',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'ZhipuAI/GLM-4.5',\n ],\n docUrl: 'https://modelscope.cn/docs/model-service/API-Inference/intro',\n },\n llama: {\n url: 'https://api.llama.com/compat/v1/chat/completions',\n apiKeyEnvVar: 'LLAMA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Llama',\n models: [\n 'cerebras-llama-4-maverick-17b-128e-instruct',\n 'cerebras-llama-4-scout-17b-16e-instruct',\n 'groq-llama-4-maverick-17b-128e-instruct',\n 'llama-3.3-70b-instruct',\n 'llama-3.3-8b-instruct',\n 'llama-4-maverick-17b-128e-instruct-fp8',\n 'llama-4-scout-17b-16e-instruct-fp8',\n ],\n docUrl: 'https://llama.developer.meta.com/docs/models',\n },\n cerebras: {\n url: 'https://api.cerebras.ai/v1/chat/completions',\n apiKeyEnvVar: 'CEREBRAS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Cerebras',\n models: ['gpt-oss-120b', 'qwen-3-235b-a22b-instruct-2507', 'qwen-3-coder-480b'],\n docUrl: 'https://inference-docs.cerebras.ai/models/overview',\n },\n} as const;\n\n/**\n * Available models per provider\n */\nexport const PROVIDER_MODELS = {\n 'moonshotai-cn': ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n lucidquery: ['lucidnova-rf1-100b', 'lucidquery-nexus-coder'],\n moonshotai: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n 'zai-coding-plan': ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n alibaba: ['qwen3-coder-plus'],\n xai: [\n 'grok-2',\n 'grok-2-1212',\n 'grok-2-latest',\n 'grok-2-vision',\n 'grok-2-vision-1212',\n 'grok-2-vision-latest',\n 'grok-3',\n 'grok-3-fast',\n 'grok-3-fast-latest',\n 'grok-3-latest',\n 'grok-3-mini',\n 'grok-3-mini-fast',\n 'grok-3-mini-fast-latest',\n 'grok-3-mini-latest',\n 'grok-4',\n 'grok-4-fast',\n 'grok-4-fast-non-reasoning',\n 'grok-beta',\n 'grok-code-fast-1',\n 'grok-vision-beta',\n ],\n nvidia: [\n 'black-forest-labs/flux.1-dev',\n 'deepseek-ai/deepseek-v3.1',\n 'google/gemma-3-27b-it',\n 'microsoft/phi-4-mini-instruct',\n 'moonshotai/kimi-k2-instruct',\n 'nvidia/cosmos-nemotron-34b',\n 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n 'nvidia/nemoretriever-ocr-v1',\n 'nvidia/parakeet-tdt-0.6b-v2',\n 'openai/gpt-oss-120b',\n 'openai/whisper-large-v3',\n 'qwen/qwen3-235b-a22b',\n 'qwen/qwen3-coder-480b-a35b-instruct',\n ],\n upstage: ['solar-mini', 'solar-pro2'],\n groq: [\n 'deepseek-r1-distill-llama-70b',\n 'gemma2-9b-it',\n 'llama-3.1-8b-instant',\n 'llama-3.3-70b-versatile',\n 'llama-guard-3-8b',\n 'llama3-70b-8192',\n 'llama3-8b-8192',\n 'meta-llama/llama-4-maverick-17b-128e-instruct',\n 'meta-llama/llama-4-scout-17b-16e-instruct',\n 'meta-llama/llama-guard-4-12b',\n 'mistral-saba-24b',\n 'moonshotai/kimi-k2-instruct',\n 'moonshotai/kimi-k2-instruct-0905',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen-qwq-32b',\n 'qwen/qwen3-32b',\n ],\n 'github-copilot': [\n 'claude-3.5-sonnet',\n 'claude-3.7-sonnet',\n 'claude-3.7-sonnet-thought',\n 'claude-opus-4',\n 'claude-opus-41',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'gemini-2.0-flash-001',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-4o',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'grok-code-fast-1',\n 'o3',\n 'o3-mini',\n 'o4-mini',\n ],\n mistral: [\n 'codestral-latest',\n 'devstral-medium-2507',\n 'devstral-small-2505',\n 'devstral-small-2507',\n 'magistral-medium-latest',\n 'magistral-small',\n 'ministral-3b-latest',\n 'ministral-8b-latest',\n 'mistral-large-latest',\n 'mistral-medium-2505',\n 'mistral-medium-2508',\n 'mistral-medium-latest',\n 'mistral-nemo',\n 'mistral-small-latest',\n 'open-mistral-7b',\n 'open-mixtral-8x22b',\n 'open-mixtral-8x7b',\n 'pixtral-12b',\n 'pixtral-large-latest',\n ],\n vercel: [\n 'amazon/nova-lite',\n 'amazon/nova-micro',\n 'amazon/nova-pro',\n 'anthropic/claude-3-5-haiku',\n 'anthropic/claude-3-haiku',\n 'anthropic/claude-3-opus',\n 'anthropic/claude-3.5-sonnet',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-4-1-opus',\n 'anthropic/claude-4-opus',\n 'anthropic/claude-4-sonnet',\n 'anthropic/claude-4.5-sonnet',\n 'cerebras/qwen3-coder',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.0-flash',\n 'google/gemini-2.0-flash-lite',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'meta/llama-3.3-70b',\n 'meta/llama-4-maverick',\n 'meta/llama-4-scout',\n 'mistral/codestral',\n 'mistral/magistral-medium',\n 'mistral/magistral-small',\n 'mistral/ministral-3b',\n 'mistral/ministral-8b',\n 'mistral/mistral-large',\n 'mistral/mistral-small',\n 'mistral/mixtral-8x22b-instruct',\n 'mistral/pixtral-12b',\n 'mistral/pixtral-large',\n 'moonshotai/kimi-k2',\n 'morph/morph-v3-fast',\n 'morph/morph-v3-large',\n 'openai/gpt-4-turbo',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o1',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'vercel/v0-1.0-md',\n 'vercel/v0-1.5-md',\n 'xai/grok-2',\n 'xai/grok-2-vision',\n 'xai/grok-3',\n 'xai/grok-3-fast',\n 'xai/grok-3-mini',\n 'xai/grok-3-mini-fast',\n 'xai/grok-4',\n 'xai/grok-4-fast',\n 'xai/grok-4-fast-non-reasoning',\n 'xai/grok-code-fast-1',\n ],\n deepseek: ['deepseek-chat', 'deepseek-reasoner'],\n 'alibaba-cn': ['qwen3-coder-plus'],\n venice: [\n 'deepseek-coder-v2-lite',\n 'deepseek-r1-671b',\n 'dolphin-2.9.2-qwen2-72b',\n 'llama-3.1-405b',\n 'llama-3.2-3b',\n 'llama-3.3-70b',\n 'mistral-31-24b',\n 'qwen-2.5-coder-32b',\n 'qwen-2.5-qwq-32b',\n 'qwen-2.5-vl',\n 'qwen3-235b',\n 'qwen3-4b',\n 'venice-uncensored',\n ],\n chutes: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'chutesai/Devstral-Small-2505',\n 'chutesai/Mistral-Small-3.2-24B-Instruct-2506',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-R1-0528-Qwen3-8B',\n 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'deepseek-ai/DeepSeek-V3.1-Terminus',\n 'deepseek-ai/DeepSeek-V3.1-turbo',\n 'deepseek-ai/DeepSeek-V3.1:THINKING',\n 'meituan-longcat/LongCat-Flash-Chat-FP8',\n 'moonshotai/Kimi-Dev-72B',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'moonshotai/Kimi-K2-Instruct-75k',\n 'moonshotai/Kimi-VL-A3B-Thinking',\n 'openai/gpt-oss-120b',\n 'tngtech/DeepSeek-R1T-Chimera',\n 'tngtech/DeepSeek-TNG-R1T2-Chimera',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n 'zai-org/GLM-4.5-turbo',\n ],\n cortecs: [\n 'claude-sonnet-4',\n 'deepseek-v3-0324',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-oss-120b',\n 'kimi-k2-instruct',\n 'llama-3.1-405b-instruct',\n 'nova-pro-v1',\n 'qwen3-32b',\n 'qwen3-coder-480b-a35b-instruct',\n ],\n 'github-models': [\n 'ai21-labs/ai21-jamba-1.5-large',\n 'ai21-labs/ai21-jamba-1.5-mini',\n 'cohere/cohere-command-a',\n 'cohere/cohere-command-r',\n 'cohere/cohere-command-r-08-2024',\n 'cohere/cohere-command-r-plus',\n 'cohere/cohere-command-r-plus-08-2024',\n 'core42/jais-30b-chat',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-0528',\n 'deepseek/deepseek-v3-0324',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-90b-vision-instruct',\n 'meta/llama-3.3-70b-instruct',\n 'meta/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta/llama-4-scout-17b-16e-instruct',\n 'meta/meta-llama-3-70b-instruct',\n 'meta/meta-llama-3-8b-instruct',\n 'meta/meta-llama-3.1-405b-instruct',\n 'meta/meta-llama-3.1-70b-instruct',\n 'meta/meta-llama-3.1-8b-instruct',\n 'microsoft/mai-ds-r1',\n 'microsoft/phi-3-medium-128k-instruct',\n 'microsoft/phi-3-medium-4k-instruct',\n 'microsoft/phi-3-mini-128k-instruct',\n 'microsoft/phi-3-mini-4k-instruct',\n 'microsoft/phi-3-small-128k-instruct',\n 'microsoft/phi-3-small-8k-instruct',\n 'microsoft/phi-3.5-mini-instruct',\n 'microsoft/phi-3.5-moe-instruct',\n 'microsoft/phi-3.5-vision-instruct',\n 'microsoft/phi-4',\n 'microsoft/phi-4-mini-instruct',\n 'microsoft/phi-4-mini-reasoning',\n 'microsoft/phi-4-multimodal-instruct',\n 'microsoft/phi-4-reasoning',\n 'mistral-ai/codestral-2501',\n 'mistral-ai/ministral-3b',\n 'mistral-ai/mistral-large-2411',\n 'mistral-ai/mistral-medium-2505',\n 'mistral-ai/mistral-nemo',\n 'mistral-ai/mistral-small-2503',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/o1',\n 'openai/o1-mini',\n 'openai/o1-preview',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'xai/grok-3',\n 'xai/grok-3-mini',\n ],\n togetherai: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1',\n 'deepseek-ai/DeepSeek-V3',\n 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'openai/gpt-oss-120b',\n ],\n baseten: ['Qwen3/Qwen3-Coder-480B-A35B-Instruct', 'moonshotai/Kimi-K2-Instruct-0905'],\n huggingface: [\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/Deepseek-V3-0324',\n 'moonshotai/Kimi-K2-Instruct',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'zai-org/GLM-4.5',\n 'zai-org/GLM-4.5-Air',\n ],\n opencode: [\n 'claude-3-5-haiku',\n 'claude-opus-4-1',\n 'claude-sonnet-4',\n 'claude-sonnet-4-5',\n 'code-supernova',\n 'gpt-5',\n 'gpt-5-codex',\n 'grok-code',\n 'kimi-k2',\n 'qwen3-coder',\n 'qwen3-max',\n ],\n fastrouter: [\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'deepseek-ai/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'moonshotai/kimi-k2',\n 'openai/gpt-4.1',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen/qwen3-coder',\n 'x-ai/grok-4',\n ],\n google: [\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-2.5-flash-lite-preview-06-17',\n 'gemini-2.5-flash-lite-preview-09-2025',\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-flash-preview-05-20',\n 'gemini-2.5-flash-preview-09-2025',\n 'gemini-2.5-pro',\n 'gemini-2.5-pro-preview-05-06',\n 'gemini-2.5-pro-preview-06-05',\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-live-2.5-flash-preview-native-audio',\n ],\n inception: ['mercury', 'mercury-coder'],\n wandb: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'meta-llama/Llama-3.1-8B-Instruct',\n 'meta-llama/Llama-3.3-70B-Instruct',\n 'meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'microsoft/Phi-4-mini-instruct',\n 'moonshotai/Kimi-K2-Instruct',\n ],\n openai: [\n 'codex-mini-latest',\n 'gpt-3.5-turbo',\n 'gpt-4',\n 'gpt-4-turbo',\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-2024-05-13',\n 'gpt-4o-2024-08-06',\n 'gpt-4o-2024-11-20',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-chat-latest',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'o1',\n 'o1-mini',\n 'o1-preview',\n 'o1-pro',\n 'o3',\n 'o3-deep-research',\n 'o3-mini',\n 'o3-pro',\n 'o4-mini',\n 'o4-mini-deep-research',\n ],\n 'zhipuai-coding-plan': ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n perplexity: ['sonar', 'sonar-pro', 'sonar-reasoning', 'sonar-reasoning-pro'],\n openrouter: [\n 'anthropic/claude-3.5-haiku',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'anthropic/claude-sonnet-4.5',\n 'cognitivecomputations/dolphin3.0-mistral-24b',\n 'cognitivecomputations/dolphin3.0-r1-mistral-24b',\n 'deepseek/deepseek-chat-v3-0324',\n 'deepseek/deepseek-chat-v3.1',\n 'deepseek/deepseek-r1-0528-qwen3-8b:free',\n 'deepseek/deepseek-r1-0528:free',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'deepseek/deepseek-r1-distill-qwen-14b',\n 'deepseek/deepseek-r1:free',\n 'deepseek/deepseek-v3-base:free',\n 'deepseek/deepseek-v3.1-terminus',\n 'featherless/qwerky-72b',\n 'google/gemini-2.0-flash-001',\n 'google/gemini-2.0-flash-exp:free',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-pro-preview-05-06',\n 'google/gemini-2.5-pro-preview-06-05',\n 'google/gemma-2-9b-it:free',\n 'google/gemma-3-12b-it',\n 'google/gemma-3-27b-it',\n 'google/gemma-3n-e4b-it',\n 'google/gemma-3n-e4b-it:free',\n 'meta-llama/llama-3.2-11b-vision-instruct',\n 'meta-llama/llama-3.3-70b-instruct:free',\n 'meta-llama/llama-4-scout:free',\n 'microsoft/mai-ds-r1:free',\n 'mistralai/codestral-2508',\n 'mistralai/devstral-medium-2507',\n 'mistralai/devstral-small-2505',\n 'mistralai/devstral-small-2505:free',\n 'mistralai/devstral-small-2507',\n 'mistralai/mistral-7b-instruct:free',\n 'mistralai/mistral-medium-3',\n 'mistralai/mistral-medium-3.1',\n 'mistralai/mistral-nemo:free',\n 'mistralai/mistral-small-3.1-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct:free',\n 'moonshotai/kimi-dev-72b:free',\n 'moonshotai/kimi-k2',\n 'moonshotai/kimi-k2-0905',\n 'moonshotai/kimi-k2:free',\n 'nousresearch/deephermes-3-llama-3-8b-preview',\n 'nousresearch/hermes-4-405b',\n 'nousresearch/hermes-4-70b',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-chat',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o4-mini',\n 'openrouter/cypher-alpha:free',\n 'openrouter/horizon-alpha',\n 'openrouter/horizon-beta',\n 'openrouter/sonoma-dusk-alpha',\n 'openrouter/sonoma-sky-alpha',\n 'qwen/qwen-2.5-coder-32b-instruct',\n 'qwen/qwen2.5-vl-32b-instruct:free',\n 'qwen/qwen2.5-vl-72b-instruct',\n 'qwen/qwen2.5-vl-72b-instruct:free',\n 'qwen/qwen3-14b:free',\n 'qwen/qwen3-235b-a22b-07-25',\n 'qwen/qwen3-235b-a22b-07-25:free',\n 'qwen/qwen3-235b-a22b-thinking-2507',\n 'qwen/qwen3-235b-a22b:free',\n 'qwen/qwen3-30b-a3b-instruct-2507',\n 'qwen/qwen3-30b-a3b:free',\n 'qwen/qwen3-32b:free',\n 'qwen/qwen3-8b:free',\n 'qwen/qwen3-coder',\n 'qwen/qwen3-coder:free',\n 'qwen/qwen3-max',\n 'qwen/qwen3-next-80b-a3b-instruct',\n 'qwen/qwq-32b:free',\n 'rekaai/reka-flash-3',\n 'sarvamai/sarvam-m:free',\n 'thudm/glm-z1-32b:free',\n 'tngtech/deepseek-r1t2-chimera:free',\n 'x-ai/grok-3',\n 'x-ai/grok-3-beta',\n 'x-ai/grok-3-mini',\n 'x-ai/grok-3-mini-beta',\n 'x-ai/grok-4',\n 'x-ai/grok-4-fast',\n 'x-ai/grok-4-fast:free',\n 'x-ai/grok-code-fast-1',\n 'z-ai/glm-4.5',\n 'z-ai/glm-4.5-air',\n 'z-ai/glm-4.5-air:free',\n 'z-ai/glm-4.5v',\n ],\n synthetic: [\n 'hf:Qwen/Qwen2.5-Coder-32B-Instruct',\n 'hf:Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'hf:Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'hf:Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'hf:deepseek-ai/DeepSeek-R1',\n 'hf:deepseek-ai/DeepSeek-R1-0528',\n 'hf:deepseek-ai/DeepSeek-V3',\n 'hf:deepseek-ai/DeepSeek-V3-0324',\n 'hf:deepseek-ai/DeepSeek-V3.1',\n 'hf:deepseek-ai/DeepSeek-V3.1-Terminus',\n 'hf:meta-llama/Llama-3.1-405B-Instruct',\n 'hf:meta-llama/Llama-3.1-70B-Instruct',\n 'hf:meta-llama/Llama-3.1-8B-Instruct',\n 'hf:meta-llama/Llama-3.3-70B-Instruct',\n 'hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8',\n 'hf:meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct-0905',\n 'hf:openai/gpt-oss-120b',\n 'hf:zai-org/GLM-4.5',\n ],\n deepinfra: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'zai-org/GLM-4.5',\n ],\n zhipuai: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n submodel: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'openai/gpt-oss-120b',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n ],\n zai: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n inference: [\n 'google/gemma-3',\n 'meta/llama-3.1-8b-instruct',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-1b-instruct',\n 'meta/llama-3.2-3b-instruct',\n 'mistral/mistral-nemo-12b-instruct',\n 'osmosis/osmosis-structure-0.6b',\n 'qwen/qwen-2.5-7b-vision-instruct',\n 'qwen/qwen3-embedding-4b',\n ],\n requesty: [\n 'anthropic/claude-3-7-sonnet',\n 'anthropic/claude-4-sonnet-20250522',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4-1-20250805',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/o4-mini',\n ],\n morph: ['auto', 'morph-v3-fast', 'morph-v3-large'],\n lmstudio: ['openai/gpt-oss-20b', 'qwen/qwen3-30b-a3b-2507', 'qwen/qwen3-coder-30b'],\n anthropic: [\n 'claude-3-5-haiku-20241022',\n 'claude-3-5-sonnet-20240620',\n 'claude-3-5-sonnet-20241022',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-haiku-20240307',\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-opus-4-1-20250805',\n 'claude-opus-4-20250514',\n 'claude-sonnet-4-20250514',\n 'claude-sonnet-4-5-20250929',\n ],\n 'fireworks-ai': [\n 'accounts/fireworks/models/deepseek-r1-0528',\n 'accounts/fireworks/models/deepseek-v3-0324',\n 'accounts/fireworks/models/deepseek-v3p1',\n 'accounts/fireworks/models/glm-4p5',\n 'accounts/fireworks/models/glm-4p5-air',\n 'accounts/fireworks/models/gpt-oss-120b',\n 'accounts/fireworks/models/gpt-oss-20b',\n 'accounts/fireworks/models/kimi-k2-instruct',\n 'accounts/fireworks/models/qwen3-235b-a22b',\n 'accounts/fireworks/models/qwen3-coder-480b-a35b-instruct',\n ],\n modelscope: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'ZhipuAI/GLM-4.5',\n ],\n llama: [\n 'cerebras-llama-4-maverick-17b-128e-instruct',\n 'cerebras-llama-4-scout-17b-16e-instruct',\n 'groq-llama-4-maverick-17b-128e-instruct',\n 'llama-3.3-70b-instruct',\n 'llama-3.3-8b-instruct',\n 'llama-4-maverick-17b-128e-instruct-fp8',\n 'llama-4-scout-17b-16e-instruct-fp8',\n ],\n cerebras: ['gpt-oss-120b', 'qwen-3-235b-a22b-instruct-2507', 'qwen-3-coder-480b'],\n} as const;\n\n/**\n * Type definitions for autocomplete support\n */\nexport type ProviderModels = typeof PROVIDER_MODELS;\nexport type Provider = keyof ProviderModels;\nexport type ModelForProvider<P extends Provider> = ProviderModels[P][number];\n\n/**\n * OpenAI-compatible model ID type\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId = { [P in Provider]: `${P}/${ModelForProvider<P>}` }[Provider] | (string & {});\n\n/**\n * Get provider configuration by provider ID\n */\nexport function getProviderConfig(providerId: string): ProviderConfig | undefined {\n return PROVIDER_REGISTRY[providerId as keyof typeof PROVIDER_REGISTRY];\n}\n\n/**\n * Check if a provider is registered\n */\nexport function isProviderRegistered(providerId: string): boolean {\n return providerId in PROVIDER_REGISTRY;\n}\n\n/**\n * Get all registered provider IDs\n */\nexport function getRegisteredProviders(): string[] {\n return Object.keys(PROVIDER_REGISTRY);\n}\n\n/**\n * Provider configuration interface\n */\nexport interface ProviderConfig {\n url: string;\n apiKeyEnvVar: string;\n apiKeyHeader?: string;\n name: string;\n models: readonly string[];\n docUrl?: string;\n}\n\n/**\n * Parse a model string to extract provider and model ID\n * Examples:\n * \"openai/gpt-4o\" -> { provider: \"openai\", modelId: \"gpt-4o\" }\n * \"fireworks/accounts/etc/model\" -> { provider: \"fireworks\", modelId: \"accounts/etc/model\" }\n * \"gpt-4o\" -> { provider: null, modelId: \"gpt-4o\" }\n */\nexport function parseModelString(modelString: string): { provider: string | null; modelId: string } {\n const firstSlashIndex = modelString.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n // Has at least one slash - extract everything before first slash as provider\n const provider = modelString.substring(0, firstSlashIndex);\n const modelId = modelString.substring(firstSlashIndex + 1);\n\n if (provider && modelId) {\n return {\n provider,\n modelId,\n };\n }\n }\n\n // No slash or invalid format\n return {\n provider: null,\n modelId: modelString,\n };\n}\n\n/**\n * Type guard to check if a string is a valid OpenAI-compatible model ID\n */\nexport function isValidModelId(modelId: string): modelId is ModelRouterModelId {\n const { provider } = parseModelString(modelId);\n return provider !== null && isProviderRegistered(provider);\n}\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider-v5';\nimport { parseModelString, getProviderConfig } from './provider-registry.generated';\nimport type { ModelRouterModelId } from './provider-registry.generated';\nimport type { OpenAICompatibleConfig } from './shared.types';\n\n// Helper function to resolve API key from environment\nfunction resolveApiKey({ provider, apiKey }: { provider?: string; apiKey?: string }): string | undefined {\n if (apiKey) return apiKey;\n\n if (provider) {\n const config = getProviderConfig(provider);\n if (config?.apiKeyEnvVar) {\n return process.env[config.apiKeyEnvVar];\n }\n }\n\n return undefined;\n}\n\n// Helper function to build headers for the request\nfunction buildHeaders(\n apiKey?: string,\n apiKeyHeader?: string,\n customHeaders?: Record<string, string>,\n provider?: string,\n): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...customHeaders,\n };\n\n if (apiKey) {\n // Use custom API key header if specified (e.g., 'x-api-key' for Anthropic)\n if (apiKeyHeader === 'x-api-key') {\n headers['x-api-key'] = apiKey;\n } else {\n // Default to Authorization Bearer format\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n }\n\n // Add provider-specific headers\n if (provider === 'anthropic') {\n headers['anthropic-version'] = '2023-06-01';\n }\n\n return headers;\n}\n\n// TODO: get these types from openai\ninterface OpenAIStreamChunk {\n id?: string;\n object?: string;\n created?: number;\n model?: string;\n choices?: Array<{\n index: number;\n delta?: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n}\n\nexport class OpenAICompatibleModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly defaultObjectGenerationMode = 'json' as const;\n readonly supportsStructuredOutputs = true;\n readonly supportsImageUrls = true;\n readonly supportedUrls = {} as Record<string, RegExp[]>;\n\n readonly modelId: string;\n readonly provider: string;\n\n private url: string;\n private headers: Record<string, string>;\n private apiKey: string | undefined;\n\n constructor(config: ModelRouterModelId | OpenAICompatibleConfig) {\n // Parse configuration\n let parsedConfig: OpenAICompatibleConfig;\n\n if (typeof config === 'string') {\n // First check if it's a valid URL\n let isUrl = false;\n try {\n new URL(config);\n isUrl = true;\n } catch {\n // Not a URL, continue with provider parsing\n }\n\n if (isUrl) {\n // If it's a direct URL\n parsedConfig = {\n id: 'unknown',\n url: config,\n };\n this.provider = 'openai-compatible';\n } else {\n // Handle magic strings like \"openai/gpt-4o\" or \"chutes/Qwen/Qwen3-235B-A22B-Instruct-2507\"\n // For multi-slash strings, extract just the provider (first part)\n const firstSlashIndex = config.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n const provider = config.substring(0, firstSlashIndex);\n const modelId = config.substring(firstSlashIndex + 1);\n\n const providerConfig = getProviderConfig(provider);\n if (!providerConfig) {\n throw new Error(`Unknown provider: ${provider}. Use a custom URL instead.`);\n }\n\n parsedConfig = {\n id: modelId,\n url: providerConfig.url,\n apiKey: resolveApiKey({ provider }),\n };\n\n this.provider = provider;\n } else {\n // No slash at all, treat as direct model ID\n throw new Error(`Invalid model string: \"${config}\". Use \"provider/model\" format or a direct URL.`);\n }\n }\n } else {\n // Handle config object\n parsedConfig = config;\n\n // Extract provider from id if present\n const parsed = parseModelString(config.id);\n\n if (!config.url && parsed.provider) {\n // Use provider preset\n const providerConfig = getProviderConfig(parsed.provider);\n if (!providerConfig) {\n throw new Error(`Unknown provider: ${parsed.provider}. Please provide a URL.`);\n }\n parsedConfig.url = providerConfig.url;\n parsedConfig.id = parsed.modelId;\n this.provider = parsed.provider;\n } else {\n this.provider = parsed.provider || 'openai-compatible';\n }\n\n // Resolve API key if not provided\n if (!parsedConfig.apiKey) {\n parsedConfig.apiKey = resolveApiKey({ provider: parsed.provider || undefined });\n }\n }\n\n // Validate we have a URL\n if (!parsedConfig.url) {\n throw new Error('URL is required for OpenAI-compatible model');\n }\n\n // Get provider config for headers\n const providerConfig = this.provider !== 'openai-compatible' ? getProviderConfig(this.provider) : undefined;\n\n // Set final properties\n this.modelId = parsedConfig.id;\n this.url = parsedConfig.url;\n this.apiKey = parsedConfig.apiKey; // Store API key for later validation\n this.headers = buildHeaders(parsedConfig.apiKey, providerConfig?.apiKeyHeader, parsedConfig.headers, this.provider);\n }\n\n private convertMessagesToOpenAI(messages: LanguageModelV2CallOptions['prompt']): any[] {\n return messages\n .map(msg => {\n if (msg.role === 'system') {\n return {\n role: 'system',\n content: msg.content,\n };\n }\n\n if (msg.role === 'user') {\n // Handle content parts\n const contentParts = msg.content\n .map(part => {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n // Note: v2 uses 'file' type with image property\n if (part.type === 'file') {\n return {\n type: 'image_url',\n image_url: { url: part.data },\n };\n }\n return null;\n })\n .filter(Boolean);\n\n // If only text parts, flatten to string\n if (contentParts.every(p => p?.type === 'text')) {\n return {\n role: 'user',\n content: contentParts.map(p => p?.text || '').join(''),\n };\n }\n\n return {\n role: 'user',\n content: contentParts,\n };\n }\n\n if (msg.role === 'assistant') {\n const textContent = msg.content\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n const toolCalls = msg.content\n .filter(part => part.type === 'tool-call')\n .map(part => ({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input || {}),\n },\n }));\n\n return {\n role: 'assistant',\n content: textContent || null,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n };\n }\n\n if (msg.role === 'tool') {\n return msg.content.map(toolResponse => ({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.output),\n }));\n }\n\n return msg;\n })\n .flat();\n }\n\n private convertToolsToOpenAI(tools: LanguageModelV2CallOptions['tools']): any[] | undefined {\n if (!tools || Object.keys(tools).length === 0) return undefined;\n\n return Object.entries(tools).map(([name, tool]) => {\n if (tool.type === 'function') {\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema || {},\n },\n };\n }\n // For provider-defined tools, use minimal definition\n return {\n type: 'function',\n function: {\n name,\n description: `Provider tool: ${name}`,\n parameters: {},\n },\n };\n });\n }\n\n private mapFinishReason(reason: string | null): LanguageModelV2FinishReason {\n switch (reason) {\n case 'stop':\n return 'stop';\n case 'length':\n case 'max_tokens':\n return 'length';\n case 'tool_calls':\n case 'function_call':\n return 'tool-calls';\n case 'content_filter':\n return 'content-filter';\n default:\n return 'unknown';\n }\n }\n\n private validateApiKey(): void {\n // Check if API key is required and missing\n if (!this.apiKey && this.provider !== 'openai-compatible') {\n // Get the provider config to find the env var name\n const providerConfig = getProviderConfig(this.provider);\n if (providerConfig?.apiKeyEnvVar) {\n throw new Error(\n `API key not found for provider \"${this.provider}\". Please set the ${providerConfig.apiKeyEnvVar} environment variable.`,\n );\n } else {\n throw new Error(\n `API key not found for provider \"${this.provider}\". Please provide an API key in the configuration.`,\n );\n }\n }\n }\n\n async doGenerate(): Promise<never> {\n throw new Error(\n 'doGenerate is not supported by OpenAICompatibleModel. ' +\n 'Mastra only uses streaming (doStream) for all LLM calls.',\n );\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<{\n stream: ReadableStream<LanguageModelV2StreamPart>;\n request?: { body: string };\n response?: { headers: Record<string, string> };\n warnings: LanguageModelV2CallWarning[];\n }> {\n this.validateApiKey(); // Validate API key before making the request\n const { prompt, tools, toolChoice, providerOptions } = options;\n\n // TODO: real body type, not any\n const body: any = {\n messages: this.convertMessagesToOpenAI(prompt),\n model: this.modelId,\n stream: true,\n ...providerOptions,\n };\n\n const openAITools = this.convertToolsToOpenAI(tools);\n if (openAITools) {\n body.tools = openAITools;\n if (toolChoice) {\n body.tool_choice =\n toolChoice.type === 'none'\n ? 'none'\n : toolChoice.type === 'required'\n ? 'required'\n : toolChoice.type === 'auto'\n ? 'auto'\n : toolChoice.type === 'tool'\n ? { type: 'function', function: { name: toolChoice.toolName } }\n : 'auto';\n }\n }\n\n // Handle structured output\n if (options.responseFormat?.type === 'json') {\n body.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n strict: true,\n schema: options.responseFormat.schema,\n },\n };\n }\n\n const fetchArgs = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n signal: options.abortSignal,\n };\n const response = await fetch(this.url, fetchArgs);\n\n if (!response.ok) {\n const error = await response.text();\n\n // Check for authentication errors\n if (response.status === 401 || response.status === 403) {\n const providerConfig = getProviderConfig(this.provider);\n if (providerConfig?.apiKeyEnvVar) {\n throw new Error(\n `Authentication failed for provider \"${this.provider}\". Please ensure the ${providerConfig.apiKeyEnvVar} environment variable is set with a valid API key.`,\n );\n }\n }\n\n throw new Error(`OpenAI-compatible API error: ${response.status} - ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let sentStart = false;\n const toolCallBuffers = new Map<number, { id: string; name: string; args: string; sent?: boolean }>();\n const mapFinishReason = this.mapFinishReason.bind(this);\n const modelId = this.modelId; // Capture modelId for use in stream\n\n let isActiveText = false;\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\n async start(controller) {\n try {\n // Send stream-start\n controller.enqueue({\n type: 'stream-start',\n warnings: [],\n });\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n // Parse and send any buffered tool calls that haven't been sent yet\n for (const [_, toolCall] of toolCallBuffers) {\n if (!toolCall.sent && toolCall.id && toolCall.name && toolCall.args) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.args || '{}',\n });\n }\n }\n\n controller.close();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim() === '' || line.trim() === 'data: [DONE]') {\n continue;\n }\n\n if (line.startsWith('data: ')) {\n try {\n const data: OpenAIStreamChunk = JSON.parse(line.slice(6));\n\n // Send response metadata from first chunk\n if (!sentStart && data.id) {\n controller.enqueue({\n type: 'response-metadata',\n id: data.id,\n modelId: data.model || modelId,\n timestamp: new Date(data.created ? data.created * 1000 : Date.now()),\n });\n sentStart = true;\n }\n\n const choice = data.choices?.[0];\n if (!choice) continue;\n\n // Handle text delta\n if (choice.delta?.content) {\n if (!isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n isActiveText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: choice.delta.content,\n });\n } else if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n isActiveText = false;\n }\n\n // Handle tool call deltas\n if (choice.delta?.tool_calls) {\n for (const toolCall of choice.delta.tool_calls) {\n const index = toolCall.index;\n\n if (!toolCallBuffers.has(index)) {\n // Send tool-input-start when we first see a tool call\n if (toolCall.id && toolCall.function?.name) {\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.id,\n toolName: toolCall.function.name,\n });\n }\n\n toolCallBuffers.set(index, {\n id: toolCall.id || '',\n name: toolCall.function?.name || '',\n args: '',\n });\n }\n\n const buffer = toolCallBuffers.get(index)!;\n\n if (toolCall.id) {\n buffer.id = toolCall.id;\n }\n\n if (toolCall.function?.name) {\n buffer.name = toolCall.function.name;\n }\n\n if (toolCall.function?.arguments) {\n buffer.args += toolCall.function.arguments;\n controller.enqueue({\n type: 'tool-input-delta',\n id: buffer.id,\n delta: toolCall.function.arguments,\n });\n\n // Check if tool call is complete (parsable JSON)\n try {\n JSON.parse(buffer.args);\n if (buffer.id && buffer.name) {\n controller.enqueue({\n type: 'tool-input-end',\n id: buffer.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.args,\n });\n\n toolCallBuffers.set(index, {\n id: buffer.id,\n name: buffer.name,\n args: buffer.args,\n sent: true,\n });\n }\n } catch {\n // Not complete JSON yet, continue buffering\n }\n }\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // Don't send tool calls again - they've already been sent when complete\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: 'finish',\n finishReason: mapFinishReason(choice.finish_reason),\n usage: data.usage\n ? {\n inputTokens: data.usage.prompt_tokens || 0,\n outputTokens: data.usage.completion_tokens || 0,\n totalTokens: data.usage.total_tokens || 0,\n }\n : {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n },\n });\n }\n } catch (e) {\n console.error('Error parsing SSE data:', e);\n }\n }\n }\n }\n } catch (error) {\n controller.error(error);\n }\n },\n });\n\n return {\n stream,\n request: { body: JSON.stringify(body) },\n response: { headers: Object.fromEntries(response.headers.entries()) },\n warnings: [],\n };\n }\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkTKFLL33F_cjs = require('./chunk-TKFLL33F.cjs');
4
- var chunkC73WLCY3_cjs = require('./chunk-C73WLCY3.cjs');
3
+ var chunkF6EJEELE_cjs = require('./chunk-F6EJEELE.cjs');
4
+ var chunkS7UXT3V4_cjs = require('./chunk-S7UXT3V4.cjs');
5
5
  var chunk4L3P3PCP_cjs = require('./chunk-4L3P3PCP.cjs');
6
6
  var chunkEBVYYC2Q_cjs = require('./chunk-EBVYYC2Q.cjs');
7
7
 
8
8
  // src/voice/voice.ts
9
9
  var _MastraVoice_decorators, _init, _a;
10
- _MastraVoice_decorators = [chunkTKFLL33F_cjs.InstrumentClass({
10
+ _MastraVoice_decorators = [chunkF6EJEELE_cjs.InstrumentClass({
11
11
  prefix: "voice",
12
12
  excludeMethods: ["__setTools", "__setLogger", "__setTelemetry", "#log"]
13
13
  })];
@@ -155,7 +155,7 @@ var CompositeVoice = class extends exports.MastraVoice {
155
155
  } else if (this.speakProvider) {
156
156
  return this.speakProvider.speak(input, options);
157
157
  }
158
- throw new chunkC73WLCY3_cjs.MastraError({
158
+ throw new chunkS7UXT3V4_cjs.MastraError({
159
159
  id: "VOICE_COMPOSITE_NO_SPEAK_PROVIDER",
160
160
  text: "No speak provider or realtime provider configured",
161
161
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -168,7 +168,7 @@ var CompositeVoice = class extends exports.MastraVoice {
168
168
  } else if (this.listenProvider) {
169
169
  return await this.listenProvider.listen(audioStream, options);
170
170
  }
171
- throw new chunkC73WLCY3_cjs.MastraError({
171
+ throw new chunkS7UXT3V4_cjs.MastraError({
172
172
  id: "VOICE_COMPOSITE_NO_LISTEN_PROVIDER",
173
173
  text: "No listen provider or realtime provider configured",
174
174
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -181,7 +181,7 @@ var CompositeVoice = class extends exports.MastraVoice {
181
181
  } else if (this.speakProvider) {
182
182
  return this.speakProvider.getSpeakers();
183
183
  }
184
- throw new chunkC73WLCY3_cjs.MastraError({
184
+ throw new chunkS7UXT3V4_cjs.MastraError({
185
185
  id: "VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER",
186
186
  text: "No speak provider or realtime provider configured",
187
187
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -194,7 +194,7 @@ var CompositeVoice = class extends exports.MastraVoice {
194
194
  } else if (this.listenProvider) {
195
195
  return this.listenProvider.getListener();
196
196
  }
197
- throw new chunkC73WLCY3_cjs.MastraError({
197
+ throw new chunkS7UXT3V4_cjs.MastraError({
198
198
  id: "VOICE_COMPOSITE_NO_LISTENER_PROVIDER",
199
199
  text: "No listener provider or realtime provider configured",
200
200
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -213,7 +213,7 @@ var CompositeVoice = class extends exports.MastraVoice {
213
213
  */
214
214
  connect(options) {
215
215
  if (!this.realtimeProvider) {
216
- throw new chunkC73WLCY3_cjs.MastraError({
216
+ throw new chunkS7UXT3V4_cjs.MastraError({
217
217
  id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT",
218
218
  text: "No realtime provider configured",
219
219
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -228,7 +228,7 @@ var CompositeVoice = class extends exports.MastraVoice {
228
228
  */
229
229
  send(audioData) {
230
230
  if (!this.realtimeProvider) {
231
- throw new chunkC73WLCY3_cjs.MastraError({
231
+ throw new chunkS7UXT3V4_cjs.MastraError({
232
232
  id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND",
233
233
  text: "No realtime provider configured",
234
234
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -242,7 +242,7 @@ var CompositeVoice = class extends exports.MastraVoice {
242
242
  */
243
243
  answer(options) {
244
244
  if (!this.realtimeProvider) {
245
- throw new chunkC73WLCY3_cjs.MastraError({
245
+ throw new chunkS7UXT3V4_cjs.MastraError({
246
246
  id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER",
247
247
  text: "No realtime provider configured",
248
248
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -276,7 +276,7 @@ var CompositeVoice = class extends exports.MastraVoice {
276
276
  */
277
277
  close() {
278
278
  if (!this.realtimeProvider) {
279
- throw new chunkC73WLCY3_cjs.MastraError({
279
+ throw new chunkS7UXT3V4_cjs.MastraError({
280
280
  id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE",
281
281
  text: "No realtime provider configured",
282
282
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -292,7 +292,7 @@ var CompositeVoice = class extends exports.MastraVoice {
292
292
  */
293
293
  on(event, callback) {
294
294
  if (!this.realtimeProvider) {
295
- throw new chunkC73WLCY3_cjs.MastraError({
295
+ throw new chunkS7UXT3V4_cjs.MastraError({
296
296
  id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON",
297
297
  text: "No realtime provider configured",
298
298
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -308,7 +308,7 @@ var CompositeVoice = class extends exports.MastraVoice {
308
308
  */
309
309
  off(event, callback) {
310
310
  if (!this.realtimeProvider) {
311
- throw new chunkC73WLCY3_cjs.MastraError({
311
+ throw new chunkS7UXT3V4_cjs.MastraError({
312
312
  id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF",
313
313
  text: "No realtime provider configured",
314
314
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -325,7 +325,7 @@ var DefaultVoice = class extends exports.MastraVoice {
325
325
  super();
326
326
  }
327
327
  async speak(_input) {
328
- throw new chunkC73WLCY3_cjs.MastraError({
328
+ throw new chunkS7UXT3V4_cjs.MastraError({
329
329
  id: "VOICE_DEFAULT_NO_SPEAK_PROVIDER",
330
330
  text: "No voice provider configured",
331
331
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -333,7 +333,7 @@ var DefaultVoice = class extends exports.MastraVoice {
333
333
  });
334
334
  }
335
335
  async listen(_input) {
336
- throw new chunkC73WLCY3_cjs.MastraError({
336
+ throw new chunkS7UXT3V4_cjs.MastraError({
337
337
  id: "VOICE_DEFAULT_NO_LISTEN_PROVIDER",
338
338
  text: "No voice provider configured",
339
339
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -341,7 +341,7 @@ var DefaultVoice = class extends exports.MastraVoice {
341
341
  });
342
342
  }
343
343
  async getSpeakers() {
344
- throw new chunkC73WLCY3_cjs.MastraError({
344
+ throw new chunkS7UXT3V4_cjs.MastraError({
345
345
  id: "VOICE_DEFAULT_NO_SPEAKERS_PROVIDER",
346
346
  text: "No voice provider configured",
347
347
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -349,7 +349,7 @@ var DefaultVoice = class extends exports.MastraVoice {
349
349
  });
350
350
  }
351
351
  async getListener() {
352
- throw new chunkC73WLCY3_cjs.MastraError({
352
+ throw new chunkS7UXT3V4_cjs.MastraError({
353
353
  id: "VOICE_DEFAULT_NO_LISTENER_PROVIDER",
354
354
  text: "No voice provider configured",
355
355
  domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
@@ -360,5 +360,5 @@ var DefaultVoice = class extends exports.MastraVoice {
360
360
 
361
361
  exports.CompositeVoice = CompositeVoice;
362
362
  exports.DefaultVoice = DefaultVoice;
363
- //# sourceMappingURL=chunk-WECJNCGT.cjs.map
364
- //# sourceMappingURL=chunk-WECJNCGT.cjs.map
363
+ //# sourceMappingURL=chunk-UTEH2LCJ.cjs.map
364
+ //# sourceMappingURL=chunk-UTEH2LCJ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/voice/voice.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":["MastraVoice","__decoratorStart","__decorateElement","__runInitializers","MastraError"],"mappings":"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","file":"chunk-WECJNCGT.cjs","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice;\n output?: MastraVoice;\n realtime?: MastraVoice;\n }) {\n super();\n this.speakProvider = output || speakProvider;\n this.listenProvider = input || listenProvider;\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/voice/voice.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":["MastraVoice","__decoratorStart","__decorateElement","__runInitializers","MastraError"],"mappings":"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","file":"chunk-UTEH2LCJ.cjs","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice;\n output?: MastraVoice;\n realtime?: MastraVoice;\n }) {\n super();\n this.speakProvider = output || speakProvider;\n this.listenProvider = input || listenProvider;\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { createStep, createWorkflow, Agent, Workflow } from './chunk-5ZMC3NEO.js';
2
- import { MastraError } from './chunk-MCOVMKIS.js';
1
+ import { createStep, createWorkflow, Agent, Workflow } from './chunk-JKLLXBOY.js';
2
+ import { MastraError } from './chunk-WHFNGECY.js';
3
3
  import { randomUUID } from 'crypto';
4
4
  import { z } from 'zod';
5
5
 
@@ -642,5 +642,5 @@ async function runScorers(scorers, targetResult, item) {
642
642
  }
643
643
 
644
644
  export { MastraScorer, createScorer, runExperiment };
645
- //# sourceMappingURL=chunk-VGU5ZYYG.js.map
646
- //# sourceMappingURL=chunk-VGU5ZYYG.js.map
645
+ //# sourceMappingURL=chunk-VWO3JJXC.js.map
646
+ //# sourceMappingURL=chunk-VWO3JJXC.js.map