@mastra/core 0.20.2 → 0.21.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +30 -121
  3. package/dist/agent/agent.d.ts +5 -10
  4. package/dist/agent/agent.d.ts.map +1 -1
  5. package/dist/agent/agent.types.d.ts +12 -14
  6. package/dist/agent/agent.types.d.ts.map +1 -1
  7. package/dist/agent/index.cjs +19 -11
  8. package/dist/agent/index.d.ts +2 -1
  9. package/dist/agent/index.d.ts.map +1 -1
  10. package/dist/agent/index.js +2 -2
  11. package/dist/agent/input-processor/index.cjs +6 -6
  12. package/dist/agent/input-processor/index.js +1 -1
  13. package/dist/agent/message-list/index.d.ts +4 -4
  14. package/dist/agent/message-list/index.d.ts.map +1 -1
  15. package/dist/agent/message-list/prompt/attachments-to-parts.d.ts +1 -1
  16. package/dist/agent/message-list/prompt/attachments-to-parts.d.ts.map +1 -1
  17. package/dist/agent/message-list/prompt/convert-file.d.ts +2 -2
  18. package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -1
  19. package/dist/agent/message-list/types.d.ts +2 -2
  20. package/dist/agent/message-list/types.d.ts.map +1 -1
  21. package/dist/agent/message-list/utils/convert-messages.d.ts +2 -2
  22. package/dist/agent/types.d.ts +13 -5
  23. package/dist/agent/types.d.ts.map +1 -1
  24. package/dist/agent/utils.d.ts +110 -0
  25. package/dist/agent/utils.d.ts.map +1 -0
  26. package/dist/agent/workflows/prepare-stream/index.d.ts +2 -2
  27. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  28. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
  29. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +2 -2
  30. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +1 -2
  31. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
  32. package/dist/agent/workflows/prepare-stream/schema.d.ts +2 -2
  33. package/dist/ai-tracing/index.cjs +32 -32
  34. package/dist/ai-tracing/index.js +1 -1
  35. package/dist/ai-tracing/spans/base.d.ts +2 -0
  36. package/dist/ai-tracing/spans/base.d.ts.map +1 -1
  37. package/dist/ai-tracing/types.d.ts +24 -0
  38. package/dist/ai-tracing/types.d.ts.map +1 -1
  39. package/dist/{chunk-BWC4WQTS.js → chunk-24L3LVID.js} +21 -14
  40. package/dist/chunk-24L3LVID.js.map +1 -0
  41. package/dist/{chunk-7ZXDZXGD.cjs → chunk-2BTTHMDJ.cjs} +14 -2
  42. package/dist/chunk-2BTTHMDJ.cjs.map +1 -0
  43. package/dist/{chunk-KK5LUATU.js → chunk-2VSJYKJF.js} +4 -4
  44. package/dist/{chunk-KK5LUATU.js.map → chunk-2VSJYKJF.js.map} +1 -1
  45. package/dist/chunk-33JJWAVI.js +2077 -0
  46. package/dist/chunk-33JJWAVI.js.map +1 -0
  47. package/dist/chunk-3ZEJSGTJ.cjs +9289 -0
  48. package/dist/chunk-3ZEJSGTJ.cjs.map +1 -0
  49. package/dist/{chunk-6ZSVXXMJ.js → chunk-624FF2ZG.js} +14 -2
  50. package/dist/chunk-624FF2ZG.js.map +1 -0
  51. package/dist/{chunk-2QV245Q5.cjs → chunk-6OJROHMC.cjs} +25 -18
  52. package/dist/chunk-6OJROHMC.cjs.map +1 -0
  53. package/dist/{chunk-T5SM2HLV.cjs → chunk-74P72XBM.cjs} +4 -4
  54. package/dist/chunk-74P72XBM.cjs.map +1 -0
  55. package/dist/chunk-75CDUY5G.js +158 -0
  56. package/dist/chunk-75CDUY5G.js.map +1 -0
  57. package/dist/chunk-BLPOOPRL.js +3164 -0
  58. package/dist/chunk-BLPOOPRL.js.map +1 -0
  59. package/dist/{chunk-JZ5MQXUL.cjs → chunk-DUMAWQ7I.cjs} +4 -4
  60. package/dist/{chunk-JZ5MQXUL.cjs.map → chunk-DUMAWQ7I.cjs.map} +1 -1
  61. package/dist/chunk-EQV7XSTY.cjs +2090 -0
  62. package/dist/chunk-EQV7XSTY.cjs.map +1 -0
  63. package/dist/chunk-ILZI4MEU.js +9263 -0
  64. package/dist/chunk-ILZI4MEU.js.map +1 -0
  65. package/dist/{chunk-4PRV2Y55.cjs → chunk-LOUJSR3F.cjs} +5 -5
  66. package/dist/{chunk-4PRV2Y55.cjs.map → chunk-LOUJSR3F.cjs.map} +1 -1
  67. package/dist/{chunk-M2MHQQGJ.js → chunk-ONHTH5RH.js} +4 -4
  68. package/dist/chunk-ONHTH5RH.js.map +1 -0
  69. package/dist/{chunk-YBC4V5GE.js → chunk-PPW3SAWO.js} +5 -9
  70. package/dist/{chunk-YBC4V5GE.js.map → chunk-PPW3SAWO.js.map} +1 -1
  71. package/dist/{chunk-DBYLVMIV.js → chunk-Q4YVANA4.js} +25 -7
  72. package/dist/chunk-Q4YVANA4.js.map +1 -0
  73. package/dist/chunk-QMKBXESK.cjs +3186 -0
  74. package/dist/chunk-QMKBXESK.cjs.map +1 -0
  75. package/dist/{chunk-EB2KTBHB.js → chunk-R3W5CNKP.js} +100 -82
  76. package/dist/chunk-R3W5CNKP.js.map +1 -0
  77. package/dist/{chunk-ECMIW6W2.cjs → chunk-RXGL66T6.cjs} +134 -111
  78. package/dist/chunk-RXGL66T6.cjs.map +1 -0
  79. package/dist/{chunk-PPCSJI73.cjs → chunk-SL534RIL.cjs} +33 -14
  80. package/dist/chunk-SL534RIL.cjs.map +1 -0
  81. package/dist/{chunk-YICS4NNU.cjs → chunk-SQXKJWFX.cjs} +12 -12
  82. package/dist/{chunk-YICS4NNU.cjs.map → chunk-SQXKJWFX.cjs.map} +1 -1
  83. package/dist/{chunk-X5SB7NR3.cjs → chunk-SSDFGDFJ.cjs} +9 -10
  84. package/dist/chunk-SSDFGDFJ.cjs.map +1 -0
  85. package/dist/{chunk-OC7MSESV.cjs → chunk-TTJM3STK.cjs} +7 -11
  86. package/dist/{chunk-OC7MSESV.cjs.map → chunk-TTJM3STK.cjs.map} +1 -1
  87. package/dist/{chunk-RE7SRMBE.cjs → chunk-UPRLKS2E.cjs} +16 -16
  88. package/dist/chunk-UPRLKS2E.cjs.map +1 -0
  89. package/dist/{chunk-7H72OAZ3.js → chunk-UQCUAYWV.js} +3 -3
  90. package/dist/{chunk-7H72OAZ3.js.map → chunk-UQCUAYWV.js.map} +1 -1
  91. package/dist/{chunk-SWNIMD7I.js → chunk-XL5MZTLP.js} +3 -3
  92. package/dist/chunk-XL5MZTLP.js.map +1 -0
  93. package/dist/{chunk-HTX7EHW5.js → chunk-XQ5A3ISB.js} +3 -3
  94. package/dist/{chunk-HTX7EHW5.js.map → chunk-XQ5A3ISB.js.map} +1 -1
  95. package/dist/chunk-Y2PKC5BX.cjs +160 -0
  96. package/dist/chunk-Y2PKC5BX.cjs.map +1 -0
  97. package/dist/{chunk-VSTMNPZJ.js → chunk-YUV3LZMY.js} +7 -8
  98. package/dist/chunk-YUV3LZMY.js.map +1 -0
  99. package/dist/index.cjs +53 -49
  100. package/dist/index.js +10 -10
  101. package/dist/llm/index.cjs +9 -5
  102. package/dist/llm/index.d.ts +4 -3
  103. package/dist/llm/index.d.ts.map +1 -1
  104. package/dist/llm/index.js +1 -1
  105. package/dist/llm/model/base.types.d.ts +2 -2
  106. package/dist/llm/model/base.types.d.ts.map +1 -1
  107. package/dist/llm/model/gateways/base.d.ts +1 -1
  108. package/dist/llm/model/gateways/base.d.ts.map +1 -1
  109. package/dist/llm/model/gateways/models-dev.d.ts +1 -1
  110. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  111. package/dist/llm/model/gateways/netlify.d.ts +1 -1
  112. package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
  113. package/dist/llm/model/index.d.ts +2 -1
  114. package/dist/llm/model/index.d.ts.map +1 -1
  115. package/dist/llm/model/model.d.ts +2 -2
  116. package/dist/llm/model/model.d.ts.map +1 -1
  117. package/dist/llm/model/model.loop.d.ts +3 -3
  118. package/dist/llm/model/model.loop.d.ts.map +1 -1
  119. package/dist/llm/model/model.loop.types.d.ts +2 -3
  120. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  121. package/dist/llm/model/provider-registry.d.ts +98 -0
  122. package/dist/llm/model/provider-registry.d.ts.map +1 -0
  123. package/dist/llm/model/provider-types.generated.d.ts +679 -0
  124. package/dist/llm/model/registry-generator.d.ts +29 -0
  125. package/dist/llm/model/registry-generator.d.ts.map +1 -0
  126. package/dist/llm/model/resolve-model.d.ts +46 -0
  127. package/dist/llm/model/resolve-model.d.ts.map +1 -0
  128. package/dist/llm/model/router.d.ts +2 -2
  129. package/dist/llm/model/router.d.ts.map +1 -1
  130. package/dist/llm/model/shared.types.d.ts +10 -4
  131. package/dist/llm/model/shared.types.d.ts.map +1 -1
  132. package/dist/loop/index.cjs +2 -2
  133. package/dist/loop/index.js +1 -1
  134. package/dist/loop/loop.d.ts +1 -1
  135. package/dist/loop/loop.d.ts.map +1 -1
  136. package/dist/loop/network/index.d.ts.map +1 -1
  137. package/dist/loop/telemetry/index.d.ts +1 -1
  138. package/dist/loop/telemetry/index.d.ts.map +1 -1
  139. package/dist/loop/test-utils/options.d.ts.map +1 -1
  140. package/dist/loop/test-utils/streamObject.d.ts +1 -1
  141. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  142. package/dist/loop/test-utils/utils.d.ts +2 -2
  143. package/dist/loop/test-utils/utils.d.ts.map +1 -1
  144. package/dist/loop/types.d.ts +4 -3
  145. package/dist/loop/types.d.ts.map +1 -1
  146. package/dist/loop/workflows/agentic-execution/index.d.ts +73 -73
  147. package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
  148. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +50 -50
  149. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  150. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +25 -25
  151. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  152. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +1 -1
  153. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
  154. package/dist/loop/workflows/agentic-loop/index.d.ts +73 -73
  155. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  156. package/dist/loop/workflows/run-state.d.ts +1 -1
  157. package/dist/loop/workflows/run-state.d.ts.map +1 -1
  158. package/dist/loop/workflows/schema.d.ts +33 -33
  159. package/dist/loop/workflows/schema.d.ts.map +1 -1
  160. package/dist/loop/workflows/stream.d.ts +1 -1
  161. package/dist/loop/workflows/stream.d.ts.map +1 -1
  162. package/dist/mastra/hooks.d.ts.map +1 -1
  163. package/dist/mastra/index.cjs +2 -2
  164. package/dist/mastra/index.js +1 -1
  165. package/dist/memory/index.cjs +4 -4
  166. package/dist/memory/index.js +1 -1
  167. package/dist/memory/memory.d.ts +3 -3
  168. package/dist/memory/memory.d.ts.map +1 -1
  169. package/dist/memory/types.d.ts +3 -3
  170. package/dist/memory/types.d.ts.map +1 -1
  171. package/dist/models-dev-A334FF64.js +3 -0
  172. package/dist/models-dev-A334FF64.js.map +1 -0
  173. package/dist/models-dev-ECOIQLLK.cjs +12 -0
  174. package/dist/models-dev-ECOIQLLK.cjs.map +1 -0
  175. package/dist/netlify-CEYZ5O54.js +3 -0
  176. package/dist/netlify-CEYZ5O54.js.map +1 -0
  177. package/dist/netlify-WFAL2AA4.cjs +12 -0
  178. package/dist/netlify-WFAL2AA4.cjs.map +1 -0
  179. package/dist/processors/index.cjs +11 -11
  180. package/dist/processors/index.js +1 -1
  181. package/dist/processors/processors/language-detector.d.ts +2 -0
  182. package/dist/processors/processors/language-detector.d.ts.map +1 -1
  183. package/dist/processors/processors/moderation.d.ts +6 -3
  184. package/dist/processors/processors/moderation.d.ts.map +1 -1
  185. package/dist/processors/processors/pii-detector.d.ts +8 -4
  186. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  187. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  188. package/dist/processors/processors/structured-output.d.ts +4 -2
  189. package/dist/processors/processors/structured-output.d.ts.map +1 -1
  190. package/dist/processors/processors/system-prompt-scrubber.d.ts +2 -1
  191. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  192. package/dist/processors/runner.d.ts +8 -2
  193. package/dist/processors/runner.d.ts.map +1 -1
  194. package/dist/provider-registry.json +1625 -0
  195. package/dist/registry-generator-7XDUEFUT.cjs +111 -0
  196. package/dist/registry-generator-7XDUEFUT.cjs.map +1 -0
  197. package/dist/registry-generator-ZKIT6I3E.js +103 -0
  198. package/dist/registry-generator-ZKIT6I3E.js.map +1 -0
  199. package/dist/relevance/index.cjs +4 -4
  200. package/dist/relevance/index.js +1 -1
  201. package/dist/relevance/mastra-agent/index.d.ts +2 -2
  202. package/dist/relevance/mastra-agent/index.d.ts.map +1 -1
  203. package/dist/scores/base.d.ts +6 -6
  204. package/dist/scores/base.d.ts.map +1 -1
  205. package/dist/scores/index.cjs +9 -9
  206. package/dist/scores/index.js +2 -2
  207. package/dist/scores/run-experiment/index.d.ts +1 -1
  208. package/dist/scores/run-experiment/index.d.ts.map +1 -1
  209. package/dist/scores/scoreTraces/index.cjs +10 -10
  210. package/dist/scores/scoreTraces/index.cjs.map +1 -1
  211. package/dist/scores/scoreTraces/index.js +5 -5
  212. package/dist/scores/scoreTraces/index.js.map +1 -1
  213. package/dist/scores/types.d.ts +1 -1
  214. package/dist/scores/types.d.ts.map +1 -1
  215. package/dist/storage/index.cjs +3 -3
  216. package/dist/storage/index.js +1 -1
  217. package/dist/stream/aisdk/v4/input.d.ts +1 -1
  218. package/dist/stream/aisdk/v4/input.d.ts.map +1 -1
  219. package/dist/stream/aisdk/v5/compat/content.d.ts +2 -2
  220. package/dist/stream/aisdk/v5/compat/content.d.ts.map +1 -1
  221. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts +2 -2
  222. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
  223. package/dist/stream/aisdk/v5/compat/ui-message.d.ts +1 -1
  224. package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -1
  225. package/dist/stream/aisdk/v5/compat/validation.d.ts +1 -1
  226. package/dist/stream/aisdk/v5/compat/validation.d.ts.map +1 -1
  227. package/dist/stream/aisdk/v5/execute.d.ts +5 -4
  228. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  229. package/dist/stream/aisdk/v5/input.d.ts +1 -1
  230. package/dist/stream/aisdk/v5/input.d.ts.map +1 -1
  231. package/dist/stream/aisdk/v5/output-helpers.d.ts +9 -9
  232. package/dist/stream/aisdk/v5/output-helpers.d.ts.map +1 -1
  233. package/dist/stream/aisdk/v5/output.d.ts +40 -39
  234. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  235. package/dist/stream/aisdk/v5/test-utils.d.ts +1 -1
  236. package/dist/stream/aisdk/v5/test-utils.d.ts.map +1 -1
  237. package/dist/stream/aisdk/v5/transform.d.ts +2 -2
  238. package/dist/stream/aisdk/v5/transform.d.ts.map +1 -1
  239. package/dist/stream/base/input.d.ts +1 -1
  240. package/dist/stream/base/input.d.ts.map +1 -1
  241. package/dist/stream/base/output-format-handlers.d.ts +5 -2
  242. package/dist/stream/base/output-format-handlers.d.ts.map +1 -1
  243. package/dist/stream/base/output.d.ts +31 -25
  244. package/dist/stream/base/output.d.ts.map +1 -1
  245. package/dist/stream/base/schema.d.ts +1 -1
  246. package/dist/stream/base/schema.d.ts.map +1 -1
  247. package/dist/stream/index.cjs +13 -9
  248. package/dist/stream/index.d.ts +1 -0
  249. package/dist/stream/index.d.ts.map +1 -1
  250. package/dist/stream/index.js +2 -2
  251. package/dist/stream/types.d.ts +19 -6
  252. package/dist/stream/types.d.ts.map +1 -1
  253. package/dist/test-utils/llm-mock.cjs +6 -6
  254. package/dist/test-utils/llm-mock.cjs.map +1 -1
  255. package/dist/test-utils/llm-mock.d.ts +1 -1
  256. package/dist/test-utils/llm-mock.d.ts.map +1 -1
  257. package/dist/test-utils/llm-mock.js +3 -3
  258. package/dist/test-utils/llm-mock.js.map +1 -1
  259. package/dist/tools/types.d.ts +2 -2
  260. package/dist/tools/types.d.ts.map +1 -1
  261. package/dist/utils.cjs +17 -17
  262. package/dist/utils.d.ts +3 -2
  263. package/dist/utils.d.ts.map +1 -1
  264. package/dist/utils.js +1 -1
  265. package/dist/vector/embed.d.ts +2 -2
  266. package/dist/vector/embed.d.ts.map +1 -1
  267. package/dist/vector/index.cjs +4 -4
  268. package/dist/vector/index.js +1 -1
  269. package/dist/vector/vector.d.ts +2 -2
  270. package/dist/vector/vector.d.ts.map +1 -1
  271. package/dist/workflows/default.d.ts +2 -2
  272. package/dist/workflows/default.d.ts.map +1 -1
  273. package/dist/workflows/evented/execution-engine.d.ts +1 -1
  274. package/dist/workflows/evented/execution-engine.d.ts.map +1 -1
  275. package/dist/workflows/evented/index.cjs +10 -10
  276. package/dist/workflows/evented/index.js +1 -1
  277. package/dist/workflows/execution-engine.d.ts +1 -1
  278. package/dist/workflows/execution-engine.d.ts.map +1 -1
  279. package/dist/workflows/index.cjs +12 -12
  280. package/dist/workflows/index.js +1 -1
  281. package/dist/workflows/legacy/index.cjs +22 -22
  282. package/dist/workflows/legacy/index.js +1 -1
  283. package/dist/workflows/legacy/machine.d.ts +1 -1
  284. package/dist/workflows/legacy/workflow.d.ts +1 -1
  285. package/dist/workflows/step.d.ts +1 -1
  286. package/dist/workflows/step.d.ts.map +1 -1
  287. package/dist/workflows/types.d.ts +1 -1
  288. package/dist/workflows/types.d.ts.map +1 -1
  289. package/dist/workflows/workflow.d.ts +25 -8
  290. package/dist/workflows/workflow.d.ts.map +1 -1
  291. package/package.json +24 -19
  292. package/src/llm/model/provider-types.generated.d.ts +679 -0
  293. package/dist/chunk-2QV245Q5.cjs.map +0 -1
  294. package/dist/chunk-6ZSVXXMJ.js.map +0 -1
  295. package/dist/chunk-7ZXDZXGD.cjs.map +0 -1
  296. package/dist/chunk-BWC4WQTS.js.map +0 -1
  297. package/dist/chunk-BZ6BIHLE.js +0 -1418
  298. package/dist/chunk-BZ6BIHLE.js.map +0 -1
  299. package/dist/chunk-DBYLVMIV.js.map +0 -1
  300. package/dist/chunk-EB2KTBHB.js.map +0 -1
  301. package/dist/chunk-ECMIW6W2.cjs.map +0 -1
  302. package/dist/chunk-M2MHQQGJ.js.map +0 -1
  303. package/dist/chunk-PPCSJI73.cjs.map +0 -1
  304. package/dist/chunk-RE7SRMBE.cjs.map +0 -1
  305. package/dist/chunk-REVAU76X.cjs +0 -1423
  306. package/dist/chunk-REVAU76X.cjs.map +0 -1
  307. package/dist/chunk-SWNIMD7I.js.map +0 -1
  308. package/dist/chunk-T5SM2HLV.cjs.map +0 -1
  309. package/dist/chunk-VSTMNPZJ.js.map +0 -1
  310. package/dist/chunk-X5SB7NR3.cjs.map +0 -1
  311. package/dist/llm/model/provider-registry.generated.d.ts +0 -99
  312. package/dist/llm/model/provider-registry.generated.d.ts.map +0 -1
  313. package/dist/stream/aisdk/v5/model-supports.d.ts +0 -25
  314. package/dist/stream/aisdk/v5/model-supports.d.ts.map +0 -1
@@ -0,0 +1,2090 @@
1
+ 'use strict';
2
+
3
+ var chunkQMKBXESK_cjs = require('./chunk-QMKBXESK.cjs');
4
+ var chunkY2PKC5BX_cjs = require('./chunk-Y2PKC5BX.cjs');
5
+ var chunk3ZEJSGTJ_cjs = require('./chunk-3ZEJSGTJ.cjs');
6
+ var chunkGPWMM745_cjs = require('./chunk-GPWMM745.cjs');
7
+ var chunkWM4VQWOZ_cjs = require('./chunk-WM4VQWOZ.cjs');
8
+ var crypto = require('crypto');
9
+ var fs = require('fs');
10
+ var module$1 = require('module');
11
+ var os = require('os');
12
+ var path = require('path');
13
+
14
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
15
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
+
17
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
18
+ var os__default = /*#__PURE__*/_interopDefault(os);
19
+ var path__default = /*#__PURE__*/_interopDefault(path);
20
+
21
+ // src/llm/model/gateways/index.ts
22
+ function findGatewayForModel(gatewayId, gateways2) {
23
+ const prefixedGateway = gateways2.find((g) => g.prefix && gatewayId.startsWith(`${g.prefix}/`));
24
+ if (prefixedGateway) {
25
+ return prefixedGateway;
26
+ }
27
+ const unprefixedGateways = gateways2.filter((g) => !g.prefix);
28
+ for (const gateway of unprefixedGateways) {
29
+ return gateway;
30
+ }
31
+ throw new chunkWM4VQWOZ_cjs.MastraError({
32
+ id: "MODEL_ROUTER_NO_GATEWAY_FOUND",
33
+ category: "USER",
34
+ domain: "MODEL_ROUTER",
35
+ text: `No Mastra model router gateway found for model id ${gatewayId}`
36
+ });
37
+ }
38
+
39
+ // src/llm/model/provider-registry.json
40
+ var provider_registry_default = {
41
+ providers: {
42
+ "moonshotai-cn": {
43
+ url: "https://api.moonshot.cn/v1",
44
+ apiKeyEnvVar: "MOONSHOT_API_KEY",
45
+ apiKeyHeader: "Authorization",
46
+ name: "Moonshot AI (China)",
47
+ models: ["kimi-k2-0711-preview", "kimi-k2-0905-preview", "kimi-k2-turbo-preview"],
48
+ docUrl: "https://platform.moonshot.cn/docs/api/chat",
49
+ gateway: "models.dev"
50
+ },
51
+ lucidquery: {
52
+ url: "https://lucidquery.com/api/v1",
53
+ apiKeyEnvVar: "LUCIDQUERY_API_KEY",
54
+ apiKeyHeader: "Authorization",
55
+ name: "LucidQuery AI",
56
+ models: ["lucidnova-rf1-100b", "lucidquery-nexus-coder"],
57
+ docUrl: "https://lucidquery.com/api/docs",
58
+ gateway: "models.dev"
59
+ },
60
+ moonshotai: {
61
+ url: "https://api.moonshot.ai/v1",
62
+ apiKeyEnvVar: "MOONSHOT_API_KEY",
63
+ apiKeyHeader: "Authorization",
64
+ name: "Moonshot AI",
65
+ models: ["kimi-k2-0711-preview", "kimi-k2-0905-preview", "kimi-k2-turbo-preview"],
66
+ docUrl: "https://platform.moonshot.ai/docs/api/chat",
67
+ gateway: "models.dev"
68
+ },
69
+ "zai-coding-plan": {
70
+ url: "https://api.z.ai/api/coding/paas/v4",
71
+ apiKeyEnvVar: "ZHIPU_API_KEY",
72
+ apiKeyHeader: "Authorization",
73
+ name: "Z.AI Coding Plan",
74
+ models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
75
+ docUrl: "https://docs.z.ai/devpack/overview",
76
+ gateway: "models.dev"
77
+ },
78
+ alibaba: {
79
+ url: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
80
+ apiKeyEnvVar: "DASHSCOPE_API_KEY",
81
+ apiKeyHeader: "Authorization",
82
+ name: "Alibaba",
83
+ models: ["qwen3-coder-plus"],
84
+ docUrl: "https://www.alibabacloud.com/help/en/model-studio/models",
85
+ gateway: "models.dev"
86
+ },
87
+ xai: {
88
+ apiKeyEnvVar: "XAI_API_KEY",
89
+ name: "xAI",
90
+ models: [
91
+ "grok-2",
92
+ "grok-2-1212",
93
+ "grok-2-latest",
94
+ "grok-2-vision",
95
+ "grok-2-vision-1212",
96
+ "grok-2-vision-latest",
97
+ "grok-3",
98
+ "grok-3-fast",
99
+ "grok-3-fast-latest",
100
+ "grok-3-latest",
101
+ "grok-3-mini",
102
+ "grok-3-mini-fast",
103
+ "grok-3-mini-fast-latest",
104
+ "grok-3-mini-latest",
105
+ "grok-4",
106
+ "grok-4-fast",
107
+ "grok-4-fast-non-reasoning",
108
+ "grok-beta",
109
+ "grok-code-fast-1",
110
+ "grok-vision-beta"
111
+ ],
112
+ docUrl: "https://docs.x.ai/docs/models",
113
+ gateway: "models.dev"
114
+ },
115
+ nvidia: {
116
+ url: "https://integrate.api.nvidia.com/v1",
117
+ apiKeyEnvVar: "NVIDIA_API_KEY",
118
+ apiKeyHeader: "Authorization",
119
+ name: "Nvidia",
120
+ models: [
121
+ "black-forest-labs/flux.1-dev",
122
+ "deepseek-ai/deepseek-v3.1",
123
+ "google/gemma-3-27b-it",
124
+ "microsoft/phi-4-mini-instruct",
125
+ "moonshotai/kimi-k2-instruct",
126
+ "nvidia/cosmos-nemotron-34b",
127
+ "nvidia/llama-3.1-nemotron-ultra-253b-v1",
128
+ "nvidia/nemoretriever-ocr-v1",
129
+ "nvidia/parakeet-tdt-0.6b-v2",
130
+ "openai/gpt-oss-120b",
131
+ "openai/whisper-large-v3",
132
+ "qwen/qwen3-235b-a22b",
133
+ "qwen/qwen3-coder-480b-a35b-instruct"
134
+ ],
135
+ docUrl: "https://docs.api.nvidia.com/nim/",
136
+ gateway: "models.dev"
137
+ },
138
+ upstage: {
139
+ url: "https://api.upstage.ai",
140
+ apiKeyEnvVar: "UPSTAGE_API_KEY",
141
+ apiKeyHeader: "Authorization",
142
+ name: "Upstage",
143
+ models: ["solar-mini", "solar-pro2"],
144
+ docUrl: "https://developers.upstage.ai/docs/apis/chat",
145
+ gateway: "models.dev"
146
+ },
147
+ groq: {
148
+ url: "https://api.groq.com/openai/v1",
149
+ apiKeyEnvVar: "GROQ_API_KEY",
150
+ apiKeyHeader: "Authorization",
151
+ name: "Groq",
152
+ models: [
153
+ "deepseek-r1-distill-llama-70b",
154
+ "gemma2-9b-it",
155
+ "llama-3.1-8b-instant",
156
+ "llama-3.3-70b-versatile",
157
+ "llama-guard-3-8b",
158
+ "llama3-70b-8192",
159
+ "llama3-8b-8192",
160
+ "meta-llama/llama-4-maverick-17b-128e-instruct",
161
+ "meta-llama/llama-4-scout-17b-16e-instruct",
162
+ "meta-llama/llama-guard-4-12b",
163
+ "mistral-saba-24b",
164
+ "moonshotai/kimi-k2-instruct",
165
+ "moonshotai/kimi-k2-instruct-0905",
166
+ "openai/gpt-oss-120b",
167
+ "openai/gpt-oss-20b",
168
+ "qwen-qwq-32b",
169
+ "qwen/qwen3-32b"
170
+ ],
171
+ docUrl: "https://console.groq.com/docs/models",
172
+ gateway: "models.dev"
173
+ },
174
+ mistral: {
175
+ url: "https://api.mistral.ai/v1",
176
+ apiKeyEnvVar: "MISTRAL_API_KEY",
177
+ apiKeyHeader: "Authorization",
178
+ name: "Mistral",
179
+ models: [
180
+ "codestral-latest",
181
+ "devstral-medium-2507",
182
+ "devstral-small-2505",
183
+ "devstral-small-2507",
184
+ "magistral-medium-latest",
185
+ "magistral-small",
186
+ "ministral-3b-latest",
187
+ "ministral-8b-latest",
188
+ "mistral-large-latest",
189
+ "mistral-medium-2505",
190
+ "mistral-medium-2508",
191
+ "mistral-medium-latest",
192
+ "mistral-nemo",
193
+ "mistral-small-latest",
194
+ "open-mistral-7b",
195
+ "open-mixtral-8x22b",
196
+ "open-mixtral-8x7b",
197
+ "pixtral-12b",
198
+ "pixtral-large-latest"
199
+ ],
200
+ docUrl: "https://docs.mistral.ai/getting-started/models/",
201
+ gateway: "models.dev"
202
+ },
203
+ vercel: {
204
+ url: "https://ai-gateway.vercel.sh/v1",
205
+ apiKeyEnvVar: "AI_GATEWAY_API_KEY",
206
+ apiKeyHeader: "Authorization",
207
+ name: "Vercel AI Gateway",
208
+ models: [
209
+ "amazon/nova-lite",
210
+ "amazon/nova-micro",
211
+ "amazon/nova-pro",
212
+ "anthropic/claude-3-5-haiku",
213
+ "anthropic/claude-3-haiku",
214
+ "anthropic/claude-3-opus",
215
+ "anthropic/claude-3.5-sonnet",
216
+ "anthropic/claude-3.7-sonnet",
217
+ "anthropic/claude-4-1-opus",
218
+ "anthropic/claude-4-opus",
219
+ "anthropic/claude-4-sonnet",
220
+ "anthropic/claude-4.5-sonnet",
221
+ "cerebras/qwen3-coder",
222
+ "deepseek/deepseek-r1",
223
+ "deepseek/deepseek-r1-distill-llama-70b",
224
+ "google/gemini-2.0-flash",
225
+ "google/gemini-2.0-flash-lite",
226
+ "google/gemini-2.5-flash",
227
+ "google/gemini-2.5-pro",
228
+ "meta/llama-3.3-70b",
229
+ "meta/llama-4-maverick",
230
+ "meta/llama-4-scout",
231
+ "mistral/codestral",
232
+ "mistral/magistral-medium",
233
+ "mistral/magistral-small",
234
+ "mistral/ministral-3b",
235
+ "mistral/ministral-8b",
236
+ "mistral/mistral-large",
237
+ "mistral/mistral-small",
238
+ "mistral/mixtral-8x22b-instruct",
239
+ "mistral/pixtral-12b",
240
+ "mistral/pixtral-large",
241
+ "moonshotai/kimi-k2",
242
+ "morph/morph-v3-fast",
243
+ "morph/morph-v3-large",
244
+ "openai/gpt-4-turbo",
245
+ "openai/gpt-4.1",
246
+ "openai/gpt-4.1-mini",
247
+ "openai/gpt-4.1-nano",
248
+ "openai/gpt-4o",
249
+ "openai/gpt-4o-mini",
250
+ "openai/gpt-5",
251
+ "openai/gpt-5-codex",
252
+ "openai/gpt-5-mini",
253
+ "openai/gpt-5-nano",
254
+ "openai/gpt-oss-120b",
255
+ "openai/gpt-oss-20b",
256
+ "openai/o1",
257
+ "openai/o3",
258
+ "openai/o3-mini",
259
+ "openai/o4-mini",
260
+ "vercel/v0-1.0-md",
261
+ "vercel/v0-1.5-md",
262
+ "xai/grok-2",
263
+ "xai/grok-2-vision",
264
+ "xai/grok-3",
265
+ "xai/grok-3-fast",
266
+ "xai/grok-3-mini",
267
+ "xai/grok-3-mini-fast",
268
+ "xai/grok-4",
269
+ "xai/grok-4-fast",
270
+ "xai/grok-4-fast-non-reasoning",
271
+ "xai/grok-code-fast-1"
272
+ ],
273
+ docUrl: "https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway",
274
+ gateway: "models.dev"
275
+ },
276
+ deepseek: {
277
+ url: "https://api.deepseek.com",
278
+ apiKeyEnvVar: "DEEPSEEK_API_KEY",
279
+ apiKeyHeader: "Authorization",
280
+ name: "DeepSeek",
281
+ models: ["deepseek-chat", "deepseek-reasoner"],
282
+ docUrl: "https://platform.deepseek.com/api-docs/pricing",
283
+ gateway: "models.dev"
284
+ },
285
+ "alibaba-cn": {
286
+ url: "https://dashscope.aliyuncs.com/compatible-mode/v1",
287
+ apiKeyEnvVar: "DASHSCOPE_API_KEY",
288
+ apiKeyHeader: "Authorization",
289
+ name: "Alibaba (China)",
290
+ models: ["qwen3-coder-plus"],
291
+ docUrl: "https://www.alibabacloud.com/help/en/model-studio/models",
292
+ gateway: "models.dev"
293
+ },
294
+ venice: {
295
+ url: "https://api.venice.ai/api/v1",
296
+ apiKeyEnvVar: "VENICE_API_KEY",
297
+ apiKeyHeader: "Authorization",
298
+ name: "Venice AI",
299
+ models: [
300
+ "deepseek-coder-v2-lite",
301
+ "deepseek-r1-671b",
302
+ "dolphin-2.9.2-qwen2-72b",
303
+ "llama-3.1-405b",
304
+ "llama-3.2-3b",
305
+ "llama-3.3-70b",
306
+ "mistral-31-24b",
307
+ "qwen-2.5-coder-32b",
308
+ "qwen-2.5-qwq-32b",
309
+ "qwen-2.5-vl",
310
+ "qwen3-235b",
311
+ "qwen3-4b",
312
+ "venice-uncensored"
313
+ ],
314
+ docUrl: "https://docs.venice.ai",
315
+ gateway: "models.dev"
316
+ },
317
+ chutes: {
318
+ url: "https://llm.chutes.ai/v1",
319
+ apiKeyEnvVar: "CHUTES_API_KEY",
320
+ apiKeyHeader: "Authorization",
321
+ name: "Chutes",
322
+ models: [
323
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
324
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
325
+ "Qwen/Qwen3-30B-A3B",
326
+ "Qwen/Qwen3-30B-A3B-Instruct-2507",
327
+ "Qwen/Qwen3-30B-A3B-Thinking-2507",
328
+ "Qwen/Qwen3-Coder-30B-A3B-Instruct",
329
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
330
+ "Qwen/Qwen3-Next-80B-A3B-Instruct",
331
+ "Qwen/Qwen3-Next-80B-A3B-Thinking",
332
+ "chutesai/Devstral-Small-2505",
333
+ "chutesai/Mistral-Small-3.2-24B-Instruct-2506",
334
+ "deepseek-ai/DeepSeek-R1-0528",
335
+ "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
336
+ "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
337
+ "deepseek-ai/DeepSeek-V3-0324",
338
+ "deepseek-ai/DeepSeek-V3.1",
339
+ "deepseek-ai/DeepSeek-V3.1-Terminus",
340
+ "deepseek-ai/DeepSeek-V3.1-turbo",
341
+ "deepseek-ai/DeepSeek-V3.1:THINKING",
342
+ "deepseek-ai/DeepSeek-V3.2-Exp",
343
+ "meituan-longcat/LongCat-Flash-Chat-FP8",
344
+ "moonshotai/Kimi-Dev-72B",
345
+ "moonshotai/Kimi-K2-Instruct-0905",
346
+ "moonshotai/Kimi-K2-Instruct-75k",
347
+ "moonshotai/Kimi-VL-A3B-Thinking",
348
+ "openai/gpt-oss-120b",
349
+ "tngtech/DeepSeek-R1T-Chimera",
350
+ "tngtech/DeepSeek-TNG-R1T2-Chimera",
351
+ "zai-org/GLM-4.5-Air",
352
+ "zai-org/GLM-4.5-FP8",
353
+ "zai-org/GLM-4.5-turbo",
354
+ "zai-org/GLM-4.6-FP8",
355
+ "zai-org/GLM-4.6-turbo"
356
+ ],
357
+ docUrl: "https://llm.chutes.ai/v1/models",
358
+ gateway: "models.dev"
359
+ },
360
+ cortecs: {
361
+ url: "https://api.cortecs.ai/v1",
362
+ apiKeyEnvVar: "CORTECS_API_KEY",
363
+ apiKeyHeader: "Authorization",
364
+ name: "Cortecs",
365
+ models: [
366
+ "claude-sonnet-4",
367
+ "deepseek-v3-0324",
368
+ "gemini-2.5-pro",
369
+ "gpt-4.1",
370
+ "gpt-oss-120b",
371
+ "kimi-k2-instruct",
372
+ "llama-3.1-405b-instruct",
373
+ "nova-pro-v1",
374
+ "qwen3-32b",
375
+ "qwen3-coder-480b-a35b-instruct"
376
+ ],
377
+ docUrl: "https://api.cortecs.ai/v1/models",
378
+ gateway: "models.dev"
379
+ },
380
+ "github-models": {
381
+ url: "https://models.github.ai/inference",
382
+ apiKeyEnvVar: "GITHUB_TOKEN",
383
+ apiKeyHeader: "Authorization",
384
+ name: "GitHub Models",
385
+ models: [
386
+ "ai21-labs/ai21-jamba-1.5-large",
387
+ "ai21-labs/ai21-jamba-1.5-mini",
388
+ "cohere/cohere-command-a",
389
+ "cohere/cohere-command-r",
390
+ "cohere/cohere-command-r-08-2024",
391
+ "cohere/cohere-command-r-plus",
392
+ "cohere/cohere-command-r-plus-08-2024",
393
+ "core42/jais-30b-chat",
394
+ "deepseek/deepseek-r1",
395
+ "deepseek/deepseek-r1-0528",
396
+ "deepseek/deepseek-v3-0324",
397
+ "meta/llama-3.2-11b-vision-instruct",
398
+ "meta/llama-3.2-90b-vision-instruct",
399
+ "meta/llama-3.3-70b-instruct",
400
+ "meta/llama-4-maverick-17b-128e-instruct-fp8",
401
+ "meta/llama-4-scout-17b-16e-instruct",
402
+ "meta/meta-llama-3-70b-instruct",
403
+ "meta/meta-llama-3-8b-instruct",
404
+ "meta/meta-llama-3.1-405b-instruct",
405
+ "meta/meta-llama-3.1-70b-instruct",
406
+ "meta/meta-llama-3.1-8b-instruct",
407
+ "microsoft/mai-ds-r1",
408
+ "microsoft/phi-3-medium-128k-instruct",
409
+ "microsoft/phi-3-medium-4k-instruct",
410
+ "microsoft/phi-3-mini-128k-instruct",
411
+ "microsoft/phi-3-mini-4k-instruct",
412
+ "microsoft/phi-3-small-128k-instruct",
413
+ "microsoft/phi-3-small-8k-instruct",
414
+ "microsoft/phi-3.5-mini-instruct",
415
+ "microsoft/phi-3.5-moe-instruct",
416
+ "microsoft/phi-3.5-vision-instruct",
417
+ "microsoft/phi-4",
418
+ "microsoft/phi-4-mini-instruct",
419
+ "microsoft/phi-4-mini-reasoning",
420
+ "microsoft/phi-4-multimodal-instruct",
421
+ "microsoft/phi-4-reasoning",
422
+ "mistral-ai/codestral-2501",
423
+ "mistral-ai/ministral-3b",
424
+ "mistral-ai/mistral-large-2411",
425
+ "mistral-ai/mistral-medium-2505",
426
+ "mistral-ai/mistral-nemo",
427
+ "mistral-ai/mistral-small-2503",
428
+ "openai/gpt-4.1",
429
+ "openai/gpt-4.1-mini",
430
+ "openai/gpt-4.1-nano",
431
+ "openai/gpt-4o",
432
+ "openai/gpt-4o-mini",
433
+ "openai/o1",
434
+ "openai/o1-mini",
435
+ "openai/o1-preview",
436
+ "openai/o3",
437
+ "openai/o3-mini",
438
+ "openai/o4-mini",
439
+ "xai/grok-3",
440
+ "xai/grok-3-mini"
441
+ ],
442
+ docUrl: "https://docs.github.com/en/github-models",
443
+ gateway: "models.dev"
444
+ },
445
+ togetherai: {
446
+ url: "https://api.together.xyz/v1",
447
+ apiKeyEnvVar: "TOGETHER_API_KEY",
448
+ apiKeyHeader: "Authorization",
449
+ name: "Together AI",
450
+ models: [
451
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
452
+ "deepseek-ai/DeepSeek-R1",
453
+ "deepseek-ai/DeepSeek-V3",
454
+ "meta-llama/Llama-3.3-70B-Instruct-Turbo",
455
+ "moonshotai/Kimi-K2-Instruct",
456
+ "openai/gpt-oss-120b"
457
+ ],
458
+ docUrl: "https://docs.together.ai/docs/serverless-models",
459
+ gateway: "models.dev"
460
+ },
461
+ baseten: {
462
+ url: "https://inference.baseten.co/v1",
463
+ apiKeyEnvVar: "BASETEN_API_KEY",
464
+ apiKeyHeader: "Authorization",
465
+ name: "Baseten",
466
+ models: ["Qwen3/Qwen3-Coder-480B-A35B-Instruct", "moonshotai/Kimi-K2-Instruct-0905"],
467
+ docUrl: "https://docs.baseten.co/development/model-apis/overview",
468
+ gateway: "models.dev"
469
+ },
470
+ huggingface: {
471
+ url: "https://router.huggingface.co/v1",
472
+ apiKeyEnvVar: "HF_TOKEN",
473
+ apiKeyHeader: "Authorization",
474
+ name: "Hugging Face",
475
+ models: [
476
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
477
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
478
+ "Qwen/Qwen3-Next-80B-A3B-Instruct",
479
+ "Qwen/Qwen3-Next-80B-A3B-Thinking",
480
+ "deepseek-ai/DeepSeek-R1-0528",
481
+ "deepseek-ai/Deepseek-V3-0324",
482
+ "moonshotai/Kimi-K2-Instruct",
483
+ "moonshotai/Kimi-K2-Instruct-0905",
484
+ "zai-org/GLM-4.5",
485
+ "zai-org/GLM-4.5-Air",
486
+ "zai-org/GLM-4.6"
487
+ ],
488
+ docUrl: "https://huggingface.co/docs/inference-providers",
489
+ gateway: "models.dev"
490
+ },
491
+ opencode: {
492
+ url: "https://opencode.ai/zen/v1",
493
+ apiKeyEnvVar: "OPENCODE_API_KEY",
494
+ apiKeyHeader: "Authorization",
495
+ name: "OpenCode Zen",
496
+ models: [
497
+ "claude-3-5-haiku",
498
+ "claude-opus-4-1",
499
+ "claude-sonnet-4",
500
+ "claude-sonnet-4-5",
501
+ "code-supernova",
502
+ "glm-4.6",
503
+ "gpt-5",
504
+ "gpt-5-codex",
505
+ "grok-code",
506
+ "kimi-k2",
507
+ "qwen3-coder"
508
+ ],
509
+ docUrl: "https://opencode.ai/docs/zen",
510
+ gateway: "models.dev"
511
+ },
512
+ fastrouter: {
513
+ url: "https://go.fastrouter.ai/api/v1",
514
+ apiKeyEnvVar: "FASTROUTER_API_KEY",
515
+ apiKeyHeader: "Authorization",
516
+ name: "FastRouter",
517
+ models: [
518
+ "anthropic/claude-opus-4.1",
519
+ "anthropic/claude-sonnet-4",
520
+ "deepseek-ai/deepseek-r1-distill-llama-70b",
521
+ "google/gemini-2.5-flash",
522
+ "google/gemini-2.5-pro",
523
+ "moonshotai/kimi-k2",
524
+ "openai/gpt-4.1",
525
+ "openai/gpt-5",
526
+ "openai/gpt-5-mini",
527
+ "openai/gpt-5-nano",
528
+ "openai/gpt-oss-120b",
529
+ "openai/gpt-oss-20b",
530
+ "qwen/qwen3-coder",
531
+ "x-ai/grok-4"
532
+ ],
533
+ docUrl: "https://fastrouter.ai/models",
534
+ gateway: "models.dev"
535
+ },
536
+ google: {
537
+ apiKeyEnvVar: "GOOGLE_GENERATIVE_AI_API_KEY",
538
+ name: "Google",
539
+ models: [
540
+ "gemini-1.5-flash",
541
+ "gemini-1.5-flash-8b",
542
+ "gemini-1.5-pro",
543
+ "gemini-2.0-flash",
544
+ "gemini-2.0-flash-lite",
545
+ "gemini-2.5-flash",
546
+ "gemini-2.5-flash-lite",
547
+ "gemini-2.5-flash-lite-preview-06-17",
548
+ "gemini-2.5-flash-lite-preview-09-2025",
549
+ "gemini-2.5-flash-preview-04-17",
550
+ "gemini-2.5-flash-preview-05-20",
551
+ "gemini-2.5-flash-preview-09-2025",
552
+ "gemini-2.5-pro",
553
+ "gemini-2.5-pro-preview-05-06",
554
+ "gemini-2.5-pro-preview-06-05",
555
+ "gemini-flash-latest",
556
+ "gemini-flash-lite-latest",
557
+ "gemini-live-2.5-flash-preview-native-audio"
558
+ ],
559
+ docUrl: "https://ai.google.dev/gemini-api/docs/pricing",
560
+ gateway: "models.dev"
561
+ },
562
+ inception: {
563
+ url: "https://api.inceptionlabs.ai/v1/",
564
+ apiKeyEnvVar: "INCEPTION_API_KEY",
565
+ apiKeyHeader: "Authorization",
566
+ name: "Inception",
567
+ models: ["mercury", "mercury-coder"],
568
+ docUrl: "https://platform.inceptionlabs.ai/docs",
569
+ gateway: "models.dev"
570
+ },
571
+ wandb: {
572
+ url: "https://api.inference.wandb.ai/v1",
573
+ apiKeyEnvVar: "WANDB_API_KEY",
574
+ apiKeyHeader: "Authorization",
575
+ name: "Weights & Biases",
576
+ models: [
577
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
578
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
579
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
580
+ "deepseek-ai/DeepSeek-R1-0528",
581
+ "deepseek-ai/DeepSeek-V3-0324",
582
+ "meta-llama/Llama-3.1-8B-Instruct",
583
+ "meta-llama/Llama-3.3-70B-Instruct",
584
+ "meta-llama/Llama-4-Scout-17B-16E-Instruct",
585
+ "microsoft/Phi-4-mini-instruct",
586
+ "moonshotai/Kimi-K2-Instruct"
587
+ ],
588
+ docUrl: "https://weave-docs.wandb.ai/guides/integrations/inference/",
589
+ gateway: "models.dev"
590
+ },
591
+ openai: {
592
+ apiKeyEnvVar: "OPENAI_API_KEY",
593
+ name: "OpenAI",
594
+ models: [
595
+ "codex-mini-latest",
596
+ "gpt-3.5-turbo",
597
+ "gpt-4",
598
+ "gpt-4-turbo",
599
+ "gpt-4.1",
600
+ "gpt-4.1-mini",
601
+ "gpt-4.1-nano",
602
+ "gpt-4o",
603
+ "gpt-4o-2024-05-13",
604
+ "gpt-4o-2024-08-06",
605
+ "gpt-4o-2024-11-20",
606
+ "gpt-4o-mini",
607
+ "gpt-5",
608
+ "gpt-5-chat-latest",
609
+ "gpt-5-codex",
610
+ "gpt-5-mini",
611
+ "gpt-5-nano",
612
+ "o1",
613
+ "o1-mini",
614
+ "o1-preview",
615
+ "o1-pro",
616
+ "o3",
617
+ "o3-deep-research",
618
+ "o3-mini",
619
+ "o3-pro",
620
+ "o4-mini",
621
+ "o4-mini-deep-research"
622
+ ],
623
+ docUrl: "https://platform.openai.com/docs/models",
624
+ gateway: "models.dev"
625
+ },
626
+ "zhipuai-coding-plan": {
627
+ url: "https://open.bigmodel.cn/api/coding/paas/v4",
628
+ apiKeyEnvVar: "ZHIPU_API_KEY",
629
+ apiKeyHeader: "Authorization",
630
+ name: "Zhipu AI Coding Plan",
631
+ models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
632
+ docUrl: "https://docs.bigmodel.cn/cn/coding-plan/overview",
633
+ gateway: "models.dev"
634
+ },
635
+ perplexity: {
636
+ url: "https://api.perplexity.ai",
637
+ apiKeyEnvVar: "PERPLEXITY_API_KEY",
638
+ apiKeyHeader: "Authorization",
639
+ name: "Perplexity",
640
+ models: ["sonar", "sonar-pro", "sonar-reasoning", "sonar-reasoning-pro"],
641
+ docUrl: "https://docs.perplexity.ai",
642
+ gateway: "models.dev"
643
+ },
644
+ openrouter: {
645
+ url: "https://openrouter.ai/api/v1",
646
+ apiKeyEnvVar: "OPENROUTER_API_KEY",
647
+ name: "OpenRouter",
648
+ models: [
649
+ "anthropic/claude-3.5-haiku",
650
+ "anthropic/claude-3.7-sonnet",
651
+ "anthropic/claude-opus-4",
652
+ "anthropic/claude-opus-4.1",
653
+ "anthropic/claude-sonnet-4",
654
+ "anthropic/claude-sonnet-4.5",
655
+ "cognitivecomputations/dolphin3.0-mistral-24b",
656
+ "cognitivecomputations/dolphin3.0-r1-mistral-24b",
657
+ "deepseek/deepseek-chat-v3-0324",
658
+ "deepseek/deepseek-chat-v3.1",
659
+ "deepseek/deepseek-r1-0528-qwen3-8b:free",
660
+ "deepseek/deepseek-r1-0528:free",
661
+ "deepseek/deepseek-r1-distill-llama-70b",
662
+ "deepseek/deepseek-r1-distill-qwen-14b",
663
+ "deepseek/deepseek-r1:free",
664
+ "deepseek/deepseek-v3-base:free",
665
+ "deepseek/deepseek-v3.1-terminus",
666
+ "featherless/qwerky-72b",
667
+ "google/gemini-2.0-flash-001",
668
+ "google/gemini-2.0-flash-exp:free",
669
+ "google/gemini-2.5-flash",
670
+ "google/gemini-2.5-pro",
671
+ "google/gemini-2.5-pro-preview-05-06",
672
+ "google/gemini-2.5-pro-preview-06-05",
673
+ "google/gemma-2-9b-it:free",
674
+ "google/gemma-3-12b-it",
675
+ "google/gemma-3-27b-it",
676
+ "google/gemma-3n-e4b-it",
677
+ "google/gemma-3n-e4b-it:free",
678
+ "meta-llama/llama-3.2-11b-vision-instruct",
679
+ "meta-llama/llama-3.3-70b-instruct:free",
680
+ "meta-llama/llama-4-scout:free",
681
+ "microsoft/mai-ds-r1:free",
682
+ "mistralai/codestral-2508",
683
+ "mistralai/devstral-medium-2507",
684
+ "mistralai/devstral-small-2505",
685
+ "mistralai/devstral-small-2505:free",
686
+ "mistralai/devstral-small-2507",
687
+ "mistralai/mistral-7b-instruct:free",
688
+ "mistralai/mistral-medium-3",
689
+ "mistralai/mistral-medium-3.1",
690
+ "mistralai/mistral-nemo:free",
691
+ "mistralai/mistral-small-3.1-24b-instruct",
692
+ "mistralai/mistral-small-3.2-24b-instruct",
693
+ "mistralai/mistral-small-3.2-24b-instruct:free",
694
+ "moonshotai/kimi-dev-72b:free",
695
+ "moonshotai/kimi-k2",
696
+ "moonshotai/kimi-k2-0905",
697
+ "moonshotai/kimi-k2:free",
698
+ "nousresearch/deephermes-3-llama-3-8b-preview",
699
+ "nousresearch/hermes-4-405b",
700
+ "nousresearch/hermes-4-70b",
701
+ "openai/gpt-4.1",
702
+ "openai/gpt-4.1-mini",
703
+ "openai/gpt-4o-mini",
704
+ "openai/gpt-5",
705
+ "openai/gpt-5-chat",
706
+ "openai/gpt-5-codex",
707
+ "openai/gpt-5-mini",
708
+ "openai/gpt-5-nano",
709
+ "openai/gpt-oss-120b",
710
+ "openai/gpt-oss-20b",
711
+ "openai/o4-mini",
712
+ "openrouter/cypher-alpha:free",
713
+ "openrouter/horizon-alpha",
714
+ "openrouter/horizon-beta",
715
+ "openrouter/sonoma-dusk-alpha",
716
+ "openrouter/sonoma-sky-alpha",
717
+ "qwen/qwen-2.5-coder-32b-instruct",
718
+ "qwen/qwen2.5-vl-32b-instruct:free",
719
+ "qwen/qwen2.5-vl-72b-instruct",
720
+ "qwen/qwen2.5-vl-72b-instruct:free",
721
+ "qwen/qwen3-14b:free",
722
+ "qwen/qwen3-235b-a22b-07-25",
723
+ "qwen/qwen3-235b-a22b-07-25:free",
724
+ "qwen/qwen3-235b-a22b-thinking-2507",
725
+ "qwen/qwen3-235b-a22b:free",
726
+ "qwen/qwen3-30b-a3b-instruct-2507",
727
+ "qwen/qwen3-30b-a3b:free",
728
+ "qwen/qwen3-32b:free",
729
+ "qwen/qwen3-8b:free",
730
+ "qwen/qwen3-coder",
731
+ "qwen/qwen3-coder:free",
732
+ "qwen/qwen3-max",
733
+ "qwen/qwen3-next-80b-a3b-instruct",
734
+ "qwen/qwq-32b:free",
735
+ "rekaai/reka-flash-3",
736
+ "sarvamai/sarvam-m:free",
737
+ "thudm/glm-z1-32b:free",
738
+ "tngtech/deepseek-r1t2-chimera:free",
739
+ "x-ai/grok-3",
740
+ "x-ai/grok-3-beta",
741
+ "x-ai/grok-3-mini",
742
+ "x-ai/grok-3-mini-beta",
743
+ "x-ai/grok-4",
744
+ "x-ai/grok-4-fast",
745
+ "x-ai/grok-4-fast:free",
746
+ "x-ai/grok-code-fast-1",
747
+ "z-ai/glm-4.5",
748
+ "z-ai/glm-4.5-air",
749
+ "z-ai/glm-4.5-air:free",
750
+ "z-ai/glm-4.5v",
751
+ "z-ai/glm-4.6"
752
+ ],
753
+ docUrl: "https://openrouter.ai/models",
754
+ gateway: "models.dev"
755
+ },
756
+ synthetic: {
757
+ url: "https://api.synthetic.new/v1",
758
+ apiKeyEnvVar: "SYNTHETIC_API_KEY",
759
+ apiKeyHeader: "Authorization",
760
+ name: "Synthetic",
761
+ models: [
762
+ "hf:Qwen/Qwen2.5-Coder-32B-Instruct",
763
+ "hf:Qwen/Qwen3-235B-A22B-Instruct-2507",
764
+ "hf:Qwen/Qwen3-235B-A22B-Thinking-2507",
765
+ "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct",
766
+ "hf:deepseek-ai/DeepSeek-R1",
767
+ "hf:deepseek-ai/DeepSeek-R1-0528",
768
+ "hf:deepseek-ai/DeepSeek-V3",
769
+ "hf:deepseek-ai/DeepSeek-V3-0324",
770
+ "hf:deepseek-ai/DeepSeek-V3.1",
771
+ "hf:deepseek-ai/DeepSeek-V3.1-Terminus",
772
+ "hf:meta-llama/Llama-3.1-405B-Instruct",
773
+ "hf:meta-llama/Llama-3.1-70B-Instruct",
774
+ "hf:meta-llama/Llama-3.1-8B-Instruct",
775
+ "hf:meta-llama/Llama-3.3-70B-Instruct",
776
+ "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",
777
+ "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct",
778
+ "hf:moonshotai/Kimi-K2-Instruct",
779
+ "hf:moonshotai/Kimi-K2-Instruct-0905",
780
+ "hf:openai/gpt-oss-120b",
781
+ "hf:zai-org/GLM-4.5",
782
+ "hf:zai-org/GLM-4.6"
783
+ ],
784
+ docUrl: "https://synthetic.new/pricing",
785
+ gateway: "models.dev"
786
+ },
787
+ deepinfra: {
788
+ url: "https://api.deepinfra.com/v1/openai",
789
+ apiKeyEnvVar: "DEEPINFRA_API_KEY",
790
+ apiKeyHeader: "Authorization",
791
+ name: "Deep Infra",
792
+ models: [
793
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
794
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo",
795
+ "moonshotai/Kimi-K2-Instruct",
796
+ "zai-org/GLM-4.5"
797
+ ],
798
+ docUrl: "https://deepinfra.com/models",
799
+ gateway: "models.dev"
800
+ },
801
+ zhipuai: {
802
+ url: "https://open.bigmodel.cn/api/paas/v4",
803
+ apiKeyEnvVar: "ZHIPU_API_KEY",
804
+ apiKeyHeader: "Authorization",
805
+ name: "Zhipu AI",
806
+ models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
807
+ docUrl: "https://docs.z.ai/guides/overview/pricing",
808
+ gateway: "models.dev"
809
+ },
810
+ submodel: {
811
+ url: "https://llm.submodel.ai/v1",
812
+ apiKeyEnvVar: "SUBMODEL_INSTAGEN_ACCESS_KEY",
813
+ apiKeyHeader: "Authorization",
814
+ name: "submodel",
815
+ models: [
816
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
817
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
818
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
819
+ "deepseek-ai/DeepSeek-R1-0528",
820
+ "deepseek-ai/DeepSeek-V3-0324",
821
+ "deepseek-ai/DeepSeek-V3.1",
822
+ "openai/gpt-oss-120b",
823
+ "zai-org/GLM-4.5-Air",
824
+ "zai-org/GLM-4.5-FP8"
825
+ ],
826
+ docUrl: "https://submodel.gitbook.io",
827
+ gateway: "models.dev"
828
+ },
829
+ zai: {
830
+ url: "https://api.z.ai/api/paas/v4",
831
+ apiKeyEnvVar: "ZHIPU_API_KEY",
832
+ apiKeyHeader: "Authorization",
833
+ name: "Z.AI",
834
+ models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
835
+ docUrl: "https://docs.z.ai/guides/overview/pricing",
836
+ gateway: "models.dev"
837
+ },
838
+ inference: {
839
+ url: "https://inference.net/v1",
840
+ apiKeyEnvVar: "INFERENCE_API_KEY",
841
+ apiKeyHeader: "Authorization",
842
+ name: "Inference",
843
+ models: [
844
+ "google/gemma-3",
845
+ "meta/llama-3.1-8b-instruct",
846
+ "meta/llama-3.2-11b-vision-instruct",
847
+ "meta/llama-3.2-1b-instruct",
848
+ "meta/llama-3.2-3b-instruct",
849
+ "mistral/mistral-nemo-12b-instruct",
850
+ "osmosis/osmosis-structure-0.6b",
851
+ "qwen/qwen-2.5-7b-vision-instruct",
852
+ "qwen/qwen3-embedding-4b"
853
+ ],
854
+ docUrl: "https://inference.net/models",
855
+ gateway: "models.dev"
856
+ },
857
+ requesty: {
858
+ url: "https://router.requesty.ai/v1",
859
+ apiKeyEnvVar: "REQUESTY_API_KEY",
860
+ apiKeyHeader: "Authorization",
861
+ name: "Requesty",
862
+ models: [
863
+ "anthropic/claude-3-7-sonnet",
864
+ "anthropic/claude-4-sonnet-20250522",
865
+ "anthropic/claude-opus-4",
866
+ "anthropic/claude-opus-4-1-20250805",
867
+ "google/gemini-2.5-flash",
868
+ "google/gemini-2.5-pro",
869
+ "openai/gpt-4.1",
870
+ "openai/gpt-4.1-mini",
871
+ "openai/gpt-4o-mini",
872
+ "openai/gpt-5",
873
+ "openai/gpt-5-mini",
874
+ "openai/gpt-5-nano",
875
+ "openai/o4-mini"
876
+ ],
877
+ docUrl: "https://requesty.ai/solution/llm-routing/models",
878
+ gateway: "models.dev"
879
+ },
880
+ morph: {
881
+ url: "https://api.morphllm.com/v1",
882
+ apiKeyEnvVar: "MORPH_API_KEY",
883
+ apiKeyHeader: "Authorization",
884
+ name: "Morph",
885
+ models: ["auto", "morph-v3-fast", "morph-v3-large"],
886
+ docUrl: "https://docs.morphllm.com/api-reference/introduction",
887
+ gateway: "models.dev"
888
+ },
889
+ lmstudio: {
890
+ url: "http://127.0.0.1:1234/v1",
891
+ apiKeyEnvVar: "LMSTUDIO_API_KEY",
892
+ apiKeyHeader: "Authorization",
893
+ name: "LMStudio",
894
+ models: ["openai/gpt-oss-20b", "qwen/qwen3-30b-a3b-2507", "qwen/qwen3-coder-30b"],
895
+ docUrl: "https://lmstudio.ai/models",
896
+ gateway: "models.dev"
897
+ },
898
+ anthropic: {
899
+ apiKeyEnvVar: "ANTHROPIC_API_KEY",
900
+ name: "Anthropic",
901
+ models: [
902
+ "claude-3-5-haiku-20241022",
903
+ "claude-3-5-sonnet-20240620",
904
+ "claude-3-5-sonnet-20241022",
905
+ "claude-3-7-sonnet-20250219",
906
+ "claude-3-haiku-20240307",
907
+ "claude-3-opus-20240229",
908
+ "claude-3-sonnet-20240229",
909
+ "claude-opus-4-1-20250805",
910
+ "claude-opus-4-20250514",
911
+ "claude-sonnet-4-20250514",
912
+ "claude-sonnet-4-5-20250929"
913
+ ],
914
+ docUrl: "https://docs.anthropic.com/en/docs/about-claude/models",
915
+ gateway: "models.dev"
916
+ },
917
+ "fireworks-ai": {
918
+ url: "https://api.fireworks.ai/inference/v1/",
919
+ apiKeyEnvVar: "FIREWORKS_API_KEY",
920
+ apiKeyHeader: "Authorization",
921
+ name: "Fireworks AI",
922
+ models: [
923
+ "accounts/fireworks/models/deepseek-r1-0528",
924
+ "accounts/fireworks/models/deepseek-v3-0324",
925
+ "accounts/fireworks/models/deepseek-v3p1",
926
+ "accounts/fireworks/models/glm-4p5",
927
+ "accounts/fireworks/models/glm-4p5-air",
928
+ "accounts/fireworks/models/gpt-oss-120b",
929
+ "accounts/fireworks/models/gpt-oss-20b",
930
+ "accounts/fireworks/models/kimi-k2-instruct",
931
+ "accounts/fireworks/models/qwen3-235b-a22b",
932
+ "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct"
933
+ ],
934
+ docUrl: "https://fireworks.ai/docs/",
935
+ gateway: "models.dev"
936
+ },
937
+ modelscope: {
938
+ url: "https://api-inference.modelscope.cn/v1",
939
+ apiKeyEnvVar: "MODELSCOPE_API_KEY",
940
+ apiKeyHeader: "Authorization",
941
+ name: "ModelScope",
942
+ models: [
943
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
944
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
945
+ "Qwen/Qwen3-30B-A3B-Instruct-2507",
946
+ "Qwen/Qwen3-30B-A3B-Thinking-2507",
947
+ "Qwen/Qwen3-Coder-30B-A3B-Instruct",
948
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
949
+ "ZhipuAI/GLM-4.5"
950
+ ],
951
+ docUrl: "https://modelscope.cn/docs/model-service/API-Inference/intro",
952
+ gateway: "models.dev"
953
+ },
954
+ llama: {
955
+ url: "https://api.llama.com/compat/v1/",
956
+ apiKeyEnvVar: "LLAMA_API_KEY",
957
+ apiKeyHeader: "Authorization",
958
+ name: "Llama",
959
+ models: [
960
+ "cerebras-llama-4-maverick-17b-128e-instruct",
961
+ "cerebras-llama-4-scout-17b-16e-instruct",
962
+ "groq-llama-4-maverick-17b-128e-instruct",
963
+ "llama-3.3-70b-instruct",
964
+ "llama-3.3-8b-instruct",
965
+ "llama-4-maverick-17b-128e-instruct-fp8",
966
+ "llama-4-scout-17b-16e-instruct-fp8"
967
+ ],
968
+ docUrl: "https://llama.developer.meta.com/docs/models",
969
+ gateway: "models.dev"
970
+ },
971
+ cerebras: {
972
+ url: "https://api.cerebras.ai/v1",
973
+ apiKeyEnvVar: "CEREBRAS_API_KEY",
974
+ apiKeyHeader: "Authorization",
975
+ name: "Cerebras",
976
+ models: ["gpt-oss-120b", "qwen-3-235b-a22b-instruct-2507", "qwen-3-coder-480b"],
977
+ docUrl: "https://inference-docs.cerebras.ai/models/overview",
978
+ gateway: "models.dev"
979
+ },
980
+ netlify: {
981
+ apiKeyEnvVar: ["NETLIFY_TOKEN", "NETLIFY_SITE_ID"],
982
+ apiKeyHeader: "Authorization",
983
+ name: "Netlify",
984
+ gateway: "netlify",
985
+ models: [
986
+ "anthropic/claude-3-5-haiku-20241022",
987
+ "anthropic/claude-3-5-haiku-latest",
988
+ "anthropic/claude-3-7-sonnet-20250219",
989
+ "anthropic/claude-3-7-sonnet-latest",
990
+ "anthropic/claude-3-haiku-20240307",
991
+ "anthropic/claude-opus-4-1-20250805",
992
+ "anthropic/claude-opus-4-20250514",
993
+ "anthropic/claude-sonnet-4-20250514",
994
+ "anthropic/claude-sonnet-4-5-20250929",
995
+ "gemini/gemini-2.0-flash",
996
+ "gemini/gemini-2.0-flash-lite",
997
+ "gemini/gemini-2.5-flash",
998
+ "gemini/gemini-2.5-flash-image-preview",
999
+ "gemini/gemini-2.5-flash-lite",
1000
+ "gemini/gemini-2.5-flash-lite-preview-09-2025",
1001
+ "gemini/gemini-2.5-flash-preview-09-2025",
1002
+ "gemini/gemini-2.5-pro",
1003
+ "gemini/gemini-flash-latest",
1004
+ "gemini/gemini-flash-lite-latest",
1005
+ "openai/codex-mini-latest",
1006
+ "openai/gpt-4.1",
1007
+ "openai/gpt-4.1-mini",
1008
+ "openai/gpt-4.1-nano",
1009
+ "openai/gpt-4o",
1010
+ "openai/gpt-4o-mini",
1011
+ "openai/gpt-5",
1012
+ "openai/gpt-5-codex",
1013
+ "openai/gpt-5-mini",
1014
+ "openai/gpt-5-nano",
1015
+ "openai/gpt-5-pro",
1016
+ "openai/o3",
1017
+ "openai/o3-mini",
1018
+ "openai/o4-mini"
1019
+ ],
1020
+ docUrl: "https://docs.netlify.com/build/ai-gateway/overview/"
1021
+ }
1022
+ },
1023
+ models: {
1024
+ "moonshotai-cn": ["kimi-k2-0711-preview", "kimi-k2-0905-preview", "kimi-k2-turbo-preview"],
1025
+ lucidquery: ["lucidnova-rf1-100b", "lucidquery-nexus-coder"],
1026
+ moonshotai: ["kimi-k2-0711-preview", "kimi-k2-0905-preview", "kimi-k2-turbo-preview"],
1027
+ "zai-coding-plan": ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
1028
+ alibaba: ["qwen3-coder-plus"],
1029
+ xai: [
1030
+ "grok-2",
1031
+ "grok-2-1212",
1032
+ "grok-2-latest",
1033
+ "grok-2-vision",
1034
+ "grok-2-vision-1212",
1035
+ "grok-2-vision-latest",
1036
+ "grok-3",
1037
+ "grok-3-fast",
1038
+ "grok-3-fast-latest",
1039
+ "grok-3-latest",
1040
+ "grok-3-mini",
1041
+ "grok-3-mini-fast",
1042
+ "grok-3-mini-fast-latest",
1043
+ "grok-3-mini-latest",
1044
+ "grok-4",
1045
+ "grok-4-fast",
1046
+ "grok-4-fast-non-reasoning",
1047
+ "grok-beta",
1048
+ "grok-code-fast-1",
1049
+ "grok-vision-beta"
1050
+ ],
1051
+ nvidia: [
1052
+ "black-forest-labs/flux.1-dev",
1053
+ "deepseek-ai/deepseek-v3.1",
1054
+ "google/gemma-3-27b-it",
1055
+ "microsoft/phi-4-mini-instruct",
1056
+ "moonshotai/kimi-k2-instruct",
1057
+ "nvidia/cosmos-nemotron-34b",
1058
+ "nvidia/llama-3.1-nemotron-ultra-253b-v1",
1059
+ "nvidia/nemoretriever-ocr-v1",
1060
+ "nvidia/parakeet-tdt-0.6b-v2",
1061
+ "openai/gpt-oss-120b",
1062
+ "openai/whisper-large-v3",
1063
+ "qwen/qwen3-235b-a22b",
1064
+ "qwen/qwen3-coder-480b-a35b-instruct"
1065
+ ],
1066
+ upstage: ["solar-mini", "solar-pro2"],
1067
+ groq: [
1068
+ "deepseek-r1-distill-llama-70b",
1069
+ "gemma2-9b-it",
1070
+ "llama-3.1-8b-instant",
1071
+ "llama-3.3-70b-versatile",
1072
+ "llama-guard-3-8b",
1073
+ "llama3-70b-8192",
1074
+ "llama3-8b-8192",
1075
+ "meta-llama/llama-4-maverick-17b-128e-instruct",
1076
+ "meta-llama/llama-4-scout-17b-16e-instruct",
1077
+ "meta-llama/llama-guard-4-12b",
1078
+ "mistral-saba-24b",
1079
+ "moonshotai/kimi-k2-instruct",
1080
+ "moonshotai/kimi-k2-instruct-0905",
1081
+ "openai/gpt-oss-120b",
1082
+ "openai/gpt-oss-20b",
1083
+ "qwen-qwq-32b",
1084
+ "qwen/qwen3-32b"
1085
+ ],
1086
+ mistral: [
1087
+ "codestral-latest",
1088
+ "devstral-medium-2507",
1089
+ "devstral-small-2505",
1090
+ "devstral-small-2507",
1091
+ "magistral-medium-latest",
1092
+ "magistral-small",
1093
+ "ministral-3b-latest",
1094
+ "ministral-8b-latest",
1095
+ "mistral-large-latest",
1096
+ "mistral-medium-2505",
1097
+ "mistral-medium-2508",
1098
+ "mistral-medium-latest",
1099
+ "mistral-nemo",
1100
+ "mistral-small-latest",
1101
+ "open-mistral-7b",
1102
+ "open-mixtral-8x22b",
1103
+ "open-mixtral-8x7b",
1104
+ "pixtral-12b",
1105
+ "pixtral-large-latest"
1106
+ ],
1107
+ vercel: [
1108
+ "amazon/nova-lite",
1109
+ "amazon/nova-micro",
1110
+ "amazon/nova-pro",
1111
+ "anthropic/claude-3-5-haiku",
1112
+ "anthropic/claude-3-haiku",
1113
+ "anthropic/claude-3-opus",
1114
+ "anthropic/claude-3.5-sonnet",
1115
+ "anthropic/claude-3.7-sonnet",
1116
+ "anthropic/claude-4-1-opus",
1117
+ "anthropic/claude-4-opus",
1118
+ "anthropic/claude-4-sonnet",
1119
+ "anthropic/claude-4.5-sonnet",
1120
+ "cerebras/qwen3-coder",
1121
+ "deepseek/deepseek-r1",
1122
+ "deepseek/deepseek-r1-distill-llama-70b",
1123
+ "google/gemini-2.0-flash",
1124
+ "google/gemini-2.0-flash-lite",
1125
+ "google/gemini-2.5-flash",
1126
+ "google/gemini-2.5-pro",
1127
+ "meta/llama-3.3-70b",
1128
+ "meta/llama-4-maverick",
1129
+ "meta/llama-4-scout",
1130
+ "mistral/codestral",
1131
+ "mistral/magistral-medium",
1132
+ "mistral/magistral-small",
1133
+ "mistral/ministral-3b",
1134
+ "mistral/ministral-8b",
1135
+ "mistral/mistral-large",
1136
+ "mistral/mistral-small",
1137
+ "mistral/mixtral-8x22b-instruct",
1138
+ "mistral/pixtral-12b",
1139
+ "mistral/pixtral-large",
1140
+ "moonshotai/kimi-k2",
1141
+ "morph/morph-v3-fast",
1142
+ "morph/morph-v3-large",
1143
+ "openai/gpt-4-turbo",
1144
+ "openai/gpt-4.1",
1145
+ "openai/gpt-4.1-mini",
1146
+ "openai/gpt-4.1-nano",
1147
+ "openai/gpt-4o",
1148
+ "openai/gpt-4o-mini",
1149
+ "openai/gpt-5",
1150
+ "openai/gpt-5-codex",
1151
+ "openai/gpt-5-mini",
1152
+ "openai/gpt-5-nano",
1153
+ "openai/gpt-oss-120b",
1154
+ "openai/gpt-oss-20b",
1155
+ "openai/o1",
1156
+ "openai/o3",
1157
+ "openai/o3-mini",
1158
+ "openai/o4-mini",
1159
+ "vercel/v0-1.0-md",
1160
+ "vercel/v0-1.5-md",
1161
+ "xai/grok-2",
1162
+ "xai/grok-2-vision",
1163
+ "xai/grok-3",
1164
+ "xai/grok-3-fast",
1165
+ "xai/grok-3-mini",
1166
+ "xai/grok-3-mini-fast",
1167
+ "xai/grok-4",
1168
+ "xai/grok-4-fast",
1169
+ "xai/grok-4-fast-non-reasoning",
1170
+ "xai/grok-code-fast-1"
1171
+ ],
1172
+ deepseek: ["deepseek-chat", "deepseek-reasoner"],
1173
+ "alibaba-cn": ["qwen3-coder-plus"],
1174
+ venice: [
1175
+ "deepseek-coder-v2-lite",
1176
+ "deepseek-r1-671b",
1177
+ "dolphin-2.9.2-qwen2-72b",
1178
+ "llama-3.1-405b",
1179
+ "llama-3.2-3b",
1180
+ "llama-3.3-70b",
1181
+ "mistral-31-24b",
1182
+ "qwen-2.5-coder-32b",
1183
+ "qwen-2.5-qwq-32b",
1184
+ "qwen-2.5-vl",
1185
+ "qwen3-235b",
1186
+ "qwen3-4b",
1187
+ "venice-uncensored"
1188
+ ],
1189
+ chutes: [
1190
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
1191
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
1192
+ "Qwen/Qwen3-30B-A3B",
1193
+ "Qwen/Qwen3-30B-A3B-Instruct-2507",
1194
+ "Qwen/Qwen3-30B-A3B-Thinking-2507",
1195
+ "Qwen/Qwen3-Coder-30B-A3B-Instruct",
1196
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
1197
+ "Qwen/Qwen3-Next-80B-A3B-Instruct",
1198
+ "Qwen/Qwen3-Next-80B-A3B-Thinking",
1199
+ "chutesai/Devstral-Small-2505",
1200
+ "chutesai/Mistral-Small-3.2-24B-Instruct-2506",
1201
+ "deepseek-ai/DeepSeek-R1-0528",
1202
+ "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
1203
+ "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
1204
+ "deepseek-ai/DeepSeek-V3-0324",
1205
+ "deepseek-ai/DeepSeek-V3.1",
1206
+ "deepseek-ai/DeepSeek-V3.1-Terminus",
1207
+ "deepseek-ai/DeepSeek-V3.1-turbo",
1208
+ "deepseek-ai/DeepSeek-V3.1:THINKING",
1209
+ "deepseek-ai/DeepSeek-V3.2-Exp",
1210
+ "meituan-longcat/LongCat-Flash-Chat-FP8",
1211
+ "moonshotai/Kimi-Dev-72B",
1212
+ "moonshotai/Kimi-K2-Instruct-0905",
1213
+ "moonshotai/Kimi-K2-Instruct-75k",
1214
+ "moonshotai/Kimi-VL-A3B-Thinking",
1215
+ "openai/gpt-oss-120b",
1216
+ "tngtech/DeepSeek-R1T-Chimera",
1217
+ "tngtech/DeepSeek-TNG-R1T2-Chimera",
1218
+ "zai-org/GLM-4.5-Air",
1219
+ "zai-org/GLM-4.5-FP8",
1220
+ "zai-org/GLM-4.5-turbo",
1221
+ "zai-org/GLM-4.6-FP8",
1222
+ "zai-org/GLM-4.6-turbo"
1223
+ ],
1224
+ cortecs: [
1225
+ "claude-sonnet-4",
1226
+ "deepseek-v3-0324",
1227
+ "gemini-2.5-pro",
1228
+ "gpt-4.1",
1229
+ "gpt-oss-120b",
1230
+ "kimi-k2-instruct",
1231
+ "llama-3.1-405b-instruct",
1232
+ "nova-pro-v1",
1233
+ "qwen3-32b",
1234
+ "qwen3-coder-480b-a35b-instruct"
1235
+ ],
1236
+ "github-models": [
1237
+ "ai21-labs/ai21-jamba-1.5-large",
1238
+ "ai21-labs/ai21-jamba-1.5-mini",
1239
+ "cohere/cohere-command-a",
1240
+ "cohere/cohere-command-r",
1241
+ "cohere/cohere-command-r-08-2024",
1242
+ "cohere/cohere-command-r-plus",
1243
+ "cohere/cohere-command-r-plus-08-2024",
1244
+ "core42/jais-30b-chat",
1245
+ "deepseek/deepseek-r1",
1246
+ "deepseek/deepseek-r1-0528",
1247
+ "deepseek/deepseek-v3-0324",
1248
+ "meta/llama-3.2-11b-vision-instruct",
1249
+ "meta/llama-3.2-90b-vision-instruct",
1250
+ "meta/llama-3.3-70b-instruct",
1251
+ "meta/llama-4-maverick-17b-128e-instruct-fp8",
1252
+ "meta/llama-4-scout-17b-16e-instruct",
1253
+ "meta/meta-llama-3-70b-instruct",
1254
+ "meta/meta-llama-3-8b-instruct",
1255
+ "meta/meta-llama-3.1-405b-instruct",
1256
+ "meta/meta-llama-3.1-70b-instruct",
1257
+ "meta/meta-llama-3.1-8b-instruct",
1258
+ "microsoft/mai-ds-r1",
1259
+ "microsoft/phi-3-medium-128k-instruct",
1260
+ "microsoft/phi-3-medium-4k-instruct",
1261
+ "microsoft/phi-3-mini-128k-instruct",
1262
+ "microsoft/phi-3-mini-4k-instruct",
1263
+ "microsoft/phi-3-small-128k-instruct",
1264
+ "microsoft/phi-3-small-8k-instruct",
1265
+ "microsoft/phi-3.5-mini-instruct",
1266
+ "microsoft/phi-3.5-moe-instruct",
1267
+ "microsoft/phi-3.5-vision-instruct",
1268
+ "microsoft/phi-4",
1269
+ "microsoft/phi-4-mini-instruct",
1270
+ "microsoft/phi-4-mini-reasoning",
1271
+ "microsoft/phi-4-multimodal-instruct",
1272
+ "microsoft/phi-4-reasoning",
1273
+ "mistral-ai/codestral-2501",
1274
+ "mistral-ai/ministral-3b",
1275
+ "mistral-ai/mistral-large-2411",
1276
+ "mistral-ai/mistral-medium-2505",
1277
+ "mistral-ai/mistral-nemo",
1278
+ "mistral-ai/mistral-small-2503",
1279
+ "openai/gpt-4.1",
1280
+ "openai/gpt-4.1-mini",
1281
+ "openai/gpt-4.1-nano",
1282
+ "openai/gpt-4o",
1283
+ "openai/gpt-4o-mini",
1284
+ "openai/o1",
1285
+ "openai/o1-mini",
1286
+ "openai/o1-preview",
1287
+ "openai/o3",
1288
+ "openai/o3-mini",
1289
+ "openai/o4-mini",
1290
+ "xai/grok-3",
1291
+ "xai/grok-3-mini"
1292
+ ],
1293
+ togetherai: [
1294
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
1295
+ "deepseek-ai/DeepSeek-R1",
1296
+ "deepseek-ai/DeepSeek-V3",
1297
+ "meta-llama/Llama-3.3-70B-Instruct-Turbo",
1298
+ "moonshotai/Kimi-K2-Instruct",
1299
+ "openai/gpt-oss-120b"
1300
+ ],
1301
+ baseten: ["Qwen3/Qwen3-Coder-480B-A35B-Instruct", "moonshotai/Kimi-K2-Instruct-0905"],
1302
+ huggingface: [
1303
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
1304
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
1305
+ "Qwen/Qwen3-Next-80B-A3B-Instruct",
1306
+ "Qwen/Qwen3-Next-80B-A3B-Thinking",
1307
+ "deepseek-ai/DeepSeek-R1-0528",
1308
+ "deepseek-ai/Deepseek-V3-0324",
1309
+ "moonshotai/Kimi-K2-Instruct",
1310
+ "moonshotai/Kimi-K2-Instruct-0905",
1311
+ "zai-org/GLM-4.5",
1312
+ "zai-org/GLM-4.5-Air",
1313
+ "zai-org/GLM-4.6"
1314
+ ],
1315
+ opencode: [
1316
+ "claude-3-5-haiku",
1317
+ "claude-opus-4-1",
1318
+ "claude-sonnet-4",
1319
+ "claude-sonnet-4-5",
1320
+ "code-supernova",
1321
+ "glm-4.6",
1322
+ "gpt-5",
1323
+ "gpt-5-codex",
1324
+ "grok-code",
1325
+ "kimi-k2",
1326
+ "qwen3-coder"
1327
+ ],
1328
+ fastrouter: [
1329
+ "anthropic/claude-opus-4.1",
1330
+ "anthropic/claude-sonnet-4",
1331
+ "deepseek-ai/deepseek-r1-distill-llama-70b",
1332
+ "google/gemini-2.5-flash",
1333
+ "google/gemini-2.5-pro",
1334
+ "moonshotai/kimi-k2",
1335
+ "openai/gpt-4.1",
1336
+ "openai/gpt-5",
1337
+ "openai/gpt-5-mini",
1338
+ "openai/gpt-5-nano",
1339
+ "openai/gpt-oss-120b",
1340
+ "openai/gpt-oss-20b",
1341
+ "qwen/qwen3-coder",
1342
+ "x-ai/grok-4"
1343
+ ],
1344
+ google: [
1345
+ "gemini-1.5-flash",
1346
+ "gemini-1.5-flash-8b",
1347
+ "gemini-1.5-pro",
1348
+ "gemini-2.0-flash",
1349
+ "gemini-2.0-flash-lite",
1350
+ "gemini-2.5-flash",
1351
+ "gemini-2.5-flash-lite",
1352
+ "gemini-2.5-flash-lite-preview-06-17",
1353
+ "gemini-2.5-flash-lite-preview-09-2025",
1354
+ "gemini-2.5-flash-preview-04-17",
1355
+ "gemini-2.5-flash-preview-05-20",
1356
+ "gemini-2.5-flash-preview-09-2025",
1357
+ "gemini-2.5-pro",
1358
+ "gemini-2.5-pro-preview-05-06",
1359
+ "gemini-2.5-pro-preview-06-05",
1360
+ "gemini-flash-latest",
1361
+ "gemini-flash-lite-latest",
1362
+ "gemini-live-2.5-flash-preview-native-audio"
1363
+ ],
1364
+ inception: ["mercury", "mercury-coder"],
1365
+ wandb: [
1366
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
1367
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
1368
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
1369
+ "deepseek-ai/DeepSeek-R1-0528",
1370
+ "deepseek-ai/DeepSeek-V3-0324",
1371
+ "meta-llama/Llama-3.1-8B-Instruct",
1372
+ "meta-llama/Llama-3.3-70B-Instruct",
1373
+ "meta-llama/Llama-4-Scout-17B-16E-Instruct",
1374
+ "microsoft/Phi-4-mini-instruct",
1375
+ "moonshotai/Kimi-K2-Instruct"
1376
+ ],
1377
+ openai: [
1378
+ "codex-mini-latest",
1379
+ "gpt-3.5-turbo",
1380
+ "gpt-4",
1381
+ "gpt-4-turbo",
1382
+ "gpt-4.1",
1383
+ "gpt-4.1-mini",
1384
+ "gpt-4.1-nano",
1385
+ "gpt-4o",
1386
+ "gpt-4o-2024-05-13",
1387
+ "gpt-4o-2024-08-06",
1388
+ "gpt-4o-2024-11-20",
1389
+ "gpt-4o-mini",
1390
+ "gpt-5",
1391
+ "gpt-5-chat-latest",
1392
+ "gpt-5-codex",
1393
+ "gpt-5-mini",
1394
+ "gpt-5-nano",
1395
+ "o1",
1396
+ "o1-mini",
1397
+ "o1-preview",
1398
+ "o1-pro",
1399
+ "o3",
1400
+ "o3-deep-research",
1401
+ "o3-mini",
1402
+ "o3-pro",
1403
+ "o4-mini",
1404
+ "o4-mini-deep-research"
1405
+ ],
1406
+ "zhipuai-coding-plan": ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
1407
+ perplexity: ["sonar", "sonar-pro", "sonar-reasoning", "sonar-reasoning-pro"],
1408
+ openrouter: [
1409
+ "anthropic/claude-3.5-haiku",
1410
+ "anthropic/claude-3.7-sonnet",
1411
+ "anthropic/claude-opus-4",
1412
+ "anthropic/claude-opus-4.1",
1413
+ "anthropic/claude-sonnet-4",
1414
+ "anthropic/claude-sonnet-4.5",
1415
+ "cognitivecomputations/dolphin3.0-mistral-24b",
1416
+ "cognitivecomputations/dolphin3.0-r1-mistral-24b",
1417
+ "deepseek/deepseek-chat-v3-0324",
1418
+ "deepseek/deepseek-chat-v3.1",
1419
+ "deepseek/deepseek-r1-0528-qwen3-8b:free",
1420
+ "deepseek/deepseek-r1-0528:free",
1421
+ "deepseek/deepseek-r1-distill-llama-70b",
1422
+ "deepseek/deepseek-r1-distill-qwen-14b",
1423
+ "deepseek/deepseek-r1:free",
1424
+ "deepseek/deepseek-v3-base:free",
1425
+ "deepseek/deepseek-v3.1-terminus",
1426
+ "featherless/qwerky-72b",
1427
+ "google/gemini-2.0-flash-001",
1428
+ "google/gemini-2.0-flash-exp:free",
1429
+ "google/gemini-2.5-flash",
1430
+ "google/gemini-2.5-pro",
1431
+ "google/gemini-2.5-pro-preview-05-06",
1432
+ "google/gemini-2.5-pro-preview-06-05",
1433
+ "google/gemma-2-9b-it:free",
1434
+ "google/gemma-3-12b-it",
1435
+ "google/gemma-3-27b-it",
1436
+ "google/gemma-3n-e4b-it",
1437
+ "google/gemma-3n-e4b-it:free",
1438
+ "meta-llama/llama-3.2-11b-vision-instruct",
1439
+ "meta-llama/llama-3.3-70b-instruct:free",
1440
+ "meta-llama/llama-4-scout:free",
1441
+ "microsoft/mai-ds-r1:free",
1442
+ "mistralai/codestral-2508",
1443
+ "mistralai/devstral-medium-2507",
1444
+ "mistralai/devstral-small-2505",
1445
+ "mistralai/devstral-small-2505:free",
1446
+ "mistralai/devstral-small-2507",
1447
+ "mistralai/mistral-7b-instruct:free",
1448
+ "mistralai/mistral-medium-3",
1449
+ "mistralai/mistral-medium-3.1",
1450
+ "mistralai/mistral-nemo:free",
1451
+ "mistralai/mistral-small-3.1-24b-instruct",
1452
+ "mistralai/mistral-small-3.2-24b-instruct",
1453
+ "mistralai/mistral-small-3.2-24b-instruct:free",
1454
+ "moonshotai/kimi-dev-72b:free",
1455
+ "moonshotai/kimi-k2",
1456
+ "moonshotai/kimi-k2-0905",
1457
+ "moonshotai/kimi-k2:free",
1458
+ "nousresearch/deephermes-3-llama-3-8b-preview",
1459
+ "nousresearch/hermes-4-405b",
1460
+ "nousresearch/hermes-4-70b",
1461
+ "openai/gpt-4.1",
1462
+ "openai/gpt-4.1-mini",
1463
+ "openai/gpt-4o-mini",
1464
+ "openai/gpt-5",
1465
+ "openai/gpt-5-chat",
1466
+ "openai/gpt-5-codex",
1467
+ "openai/gpt-5-mini",
1468
+ "openai/gpt-5-nano",
1469
+ "openai/gpt-oss-120b",
1470
+ "openai/gpt-oss-20b",
1471
+ "openai/o4-mini",
1472
+ "openrouter/cypher-alpha:free",
1473
+ "openrouter/horizon-alpha",
1474
+ "openrouter/horizon-beta",
1475
+ "openrouter/sonoma-dusk-alpha",
1476
+ "openrouter/sonoma-sky-alpha",
1477
+ "qwen/qwen-2.5-coder-32b-instruct",
1478
+ "qwen/qwen2.5-vl-32b-instruct:free",
1479
+ "qwen/qwen2.5-vl-72b-instruct",
1480
+ "qwen/qwen2.5-vl-72b-instruct:free",
1481
+ "qwen/qwen3-14b:free",
1482
+ "qwen/qwen3-235b-a22b-07-25",
1483
+ "qwen/qwen3-235b-a22b-07-25:free",
1484
+ "qwen/qwen3-235b-a22b-thinking-2507",
1485
+ "qwen/qwen3-235b-a22b:free",
1486
+ "qwen/qwen3-30b-a3b-instruct-2507",
1487
+ "qwen/qwen3-30b-a3b:free",
1488
+ "qwen/qwen3-32b:free",
1489
+ "qwen/qwen3-8b:free",
1490
+ "qwen/qwen3-coder",
1491
+ "qwen/qwen3-coder:free",
1492
+ "qwen/qwen3-max",
1493
+ "qwen/qwen3-next-80b-a3b-instruct",
1494
+ "qwen/qwq-32b:free",
1495
+ "rekaai/reka-flash-3",
1496
+ "sarvamai/sarvam-m:free",
1497
+ "thudm/glm-z1-32b:free",
1498
+ "tngtech/deepseek-r1t2-chimera:free",
1499
+ "x-ai/grok-3",
1500
+ "x-ai/grok-3-beta",
1501
+ "x-ai/grok-3-mini",
1502
+ "x-ai/grok-3-mini-beta",
1503
+ "x-ai/grok-4",
1504
+ "x-ai/grok-4-fast",
1505
+ "x-ai/grok-4-fast:free",
1506
+ "x-ai/grok-code-fast-1",
1507
+ "z-ai/glm-4.5",
1508
+ "z-ai/glm-4.5-air",
1509
+ "z-ai/glm-4.5-air:free",
1510
+ "z-ai/glm-4.5v",
1511
+ "z-ai/glm-4.6"
1512
+ ],
1513
+ synthetic: [
1514
+ "hf:Qwen/Qwen2.5-Coder-32B-Instruct",
1515
+ "hf:Qwen/Qwen3-235B-A22B-Instruct-2507",
1516
+ "hf:Qwen/Qwen3-235B-A22B-Thinking-2507",
1517
+ "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct",
1518
+ "hf:deepseek-ai/DeepSeek-R1",
1519
+ "hf:deepseek-ai/DeepSeek-R1-0528",
1520
+ "hf:deepseek-ai/DeepSeek-V3",
1521
+ "hf:deepseek-ai/DeepSeek-V3-0324",
1522
+ "hf:deepseek-ai/DeepSeek-V3.1",
1523
+ "hf:deepseek-ai/DeepSeek-V3.1-Terminus",
1524
+ "hf:meta-llama/Llama-3.1-405B-Instruct",
1525
+ "hf:meta-llama/Llama-3.1-70B-Instruct",
1526
+ "hf:meta-llama/Llama-3.1-8B-Instruct",
1527
+ "hf:meta-llama/Llama-3.3-70B-Instruct",
1528
+ "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",
1529
+ "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct",
1530
+ "hf:moonshotai/Kimi-K2-Instruct",
1531
+ "hf:moonshotai/Kimi-K2-Instruct-0905",
1532
+ "hf:openai/gpt-oss-120b",
1533
+ "hf:zai-org/GLM-4.5",
1534
+ "hf:zai-org/GLM-4.6"
1535
+ ],
1536
+ deepinfra: [
1537
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
1538
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo",
1539
+ "moonshotai/Kimi-K2-Instruct",
1540
+ "zai-org/GLM-4.5"
1541
+ ],
1542
+ zhipuai: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
1543
+ submodel: [
1544
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
1545
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
1546
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
1547
+ "deepseek-ai/DeepSeek-R1-0528",
1548
+ "deepseek-ai/DeepSeek-V3-0324",
1549
+ "deepseek-ai/DeepSeek-V3.1",
1550
+ "openai/gpt-oss-120b",
1551
+ "zai-org/GLM-4.5-Air",
1552
+ "zai-org/GLM-4.5-FP8"
1553
+ ],
1554
+ zai: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
1555
+ inference: [
1556
+ "google/gemma-3",
1557
+ "meta/llama-3.1-8b-instruct",
1558
+ "meta/llama-3.2-11b-vision-instruct",
1559
+ "meta/llama-3.2-1b-instruct",
1560
+ "meta/llama-3.2-3b-instruct",
1561
+ "mistral/mistral-nemo-12b-instruct",
1562
+ "osmosis/osmosis-structure-0.6b",
1563
+ "qwen/qwen-2.5-7b-vision-instruct",
1564
+ "qwen/qwen3-embedding-4b"
1565
+ ],
1566
+ requesty: [
1567
+ "anthropic/claude-3-7-sonnet",
1568
+ "anthropic/claude-4-sonnet-20250522",
1569
+ "anthropic/claude-opus-4",
1570
+ "anthropic/claude-opus-4-1-20250805",
1571
+ "google/gemini-2.5-flash",
1572
+ "google/gemini-2.5-pro",
1573
+ "openai/gpt-4.1",
1574
+ "openai/gpt-4.1-mini",
1575
+ "openai/gpt-4o-mini",
1576
+ "openai/gpt-5",
1577
+ "openai/gpt-5-mini",
1578
+ "openai/gpt-5-nano",
1579
+ "openai/o4-mini"
1580
+ ],
1581
+ morph: ["auto", "morph-v3-fast", "morph-v3-large"],
1582
+ lmstudio: ["openai/gpt-oss-20b", "qwen/qwen3-30b-a3b-2507", "qwen/qwen3-coder-30b"],
1583
+ anthropic: [
1584
+ "claude-3-5-haiku-20241022",
1585
+ "claude-3-5-sonnet-20240620",
1586
+ "claude-3-5-sonnet-20241022",
1587
+ "claude-3-7-sonnet-20250219",
1588
+ "claude-3-haiku-20240307",
1589
+ "claude-3-opus-20240229",
1590
+ "claude-3-sonnet-20240229",
1591
+ "claude-opus-4-1-20250805",
1592
+ "claude-opus-4-20250514",
1593
+ "claude-sonnet-4-20250514",
1594
+ "claude-sonnet-4-5-20250929"
1595
+ ],
1596
+ "fireworks-ai": [
1597
+ "accounts/fireworks/models/deepseek-r1-0528",
1598
+ "accounts/fireworks/models/deepseek-v3-0324",
1599
+ "accounts/fireworks/models/deepseek-v3p1",
1600
+ "accounts/fireworks/models/glm-4p5",
1601
+ "accounts/fireworks/models/glm-4p5-air",
1602
+ "accounts/fireworks/models/gpt-oss-120b",
1603
+ "accounts/fireworks/models/gpt-oss-20b",
1604
+ "accounts/fireworks/models/kimi-k2-instruct",
1605
+ "accounts/fireworks/models/qwen3-235b-a22b",
1606
+ "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct"
1607
+ ],
1608
+ modelscope: [
1609
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
1610
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
1611
+ "Qwen/Qwen3-30B-A3B-Instruct-2507",
1612
+ "Qwen/Qwen3-30B-A3B-Thinking-2507",
1613
+ "Qwen/Qwen3-Coder-30B-A3B-Instruct",
1614
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
1615
+ "ZhipuAI/GLM-4.5"
1616
+ ],
1617
+ llama: [
1618
+ "cerebras-llama-4-maverick-17b-128e-instruct",
1619
+ "cerebras-llama-4-scout-17b-16e-instruct",
1620
+ "groq-llama-4-maverick-17b-128e-instruct",
1621
+ "llama-3.3-70b-instruct",
1622
+ "llama-3.3-8b-instruct",
1623
+ "llama-4-maverick-17b-128e-instruct-fp8",
1624
+ "llama-4-scout-17b-16e-instruct-fp8"
1625
+ ],
1626
+ cerebras: ["gpt-oss-120b", "qwen-3-235b-a22b-instruct-2507", "qwen-3-coder-480b"],
1627
+ netlify: [
1628
+ "anthropic/claude-3-5-haiku-20241022",
1629
+ "anthropic/claude-3-5-haiku-latest",
1630
+ "anthropic/claude-3-7-sonnet-20250219",
1631
+ "anthropic/claude-3-7-sonnet-latest",
1632
+ "anthropic/claude-3-haiku-20240307",
1633
+ "anthropic/claude-opus-4-1-20250805",
1634
+ "anthropic/claude-opus-4-20250514",
1635
+ "anthropic/claude-sonnet-4-20250514",
1636
+ "anthropic/claude-sonnet-4-5-20250929",
1637
+ "gemini/gemini-2.0-flash",
1638
+ "gemini/gemini-2.0-flash-lite",
1639
+ "gemini/gemini-2.5-flash",
1640
+ "gemini/gemini-2.5-flash-image-preview",
1641
+ "gemini/gemini-2.5-flash-lite",
1642
+ "gemini/gemini-2.5-flash-lite-preview-09-2025",
1643
+ "gemini/gemini-2.5-flash-preview-09-2025",
1644
+ "gemini/gemini-2.5-pro",
1645
+ "gemini/gemini-flash-latest",
1646
+ "gemini/gemini-flash-lite-latest",
1647
+ "openai/codex-mini-latest",
1648
+ "openai/gpt-4.1",
1649
+ "openai/gpt-4.1-mini",
1650
+ "openai/gpt-4.1-nano",
1651
+ "openai/gpt-4o",
1652
+ "openai/gpt-4o-mini",
1653
+ "openai/gpt-5",
1654
+ "openai/gpt-5-codex",
1655
+ "openai/gpt-5-mini",
1656
+ "openai/gpt-5-nano",
1657
+ "openai/gpt-5-pro",
1658
+ "openai/o3",
1659
+ "openai/o3-mini",
1660
+ "openai/o4-mini"
1661
+ ]
1662
+ },
1663
+ version: "1.0.0"
1664
+ };
1665
+
1666
+ // src/llm/model/provider-registry.ts
1667
+ var registryData = null;
1668
+ var CACHE_DIR = path__default.default.join(os__default.default.homedir(), ".cache", "mastra");
1669
+ var CACHE_FILE = path__default.default.join(CACHE_DIR, "gateway-refresh-time");
1670
+ var modelRouterCacheFailed = false;
1671
+ function getLastRefreshTimeFromDisk() {
1672
+ try {
1673
+ if (!fs__default.default.existsSync(CACHE_FILE)) {
1674
+ return null;
1675
+ }
1676
+ const timestamp = fs__default.default.readFileSync(CACHE_FILE, "utf-8").trim();
1677
+ return new Date(parseInt(timestamp, 10));
1678
+ } catch (err) {
1679
+ console.warn("[GatewayRegistry] Failed to read cache file:", err);
1680
+ modelRouterCacheFailed = true;
1681
+ return null;
1682
+ }
1683
+ }
1684
+ function saveLastRefreshTimeToDisk(date) {
1685
+ try {
1686
+ if (!fs__default.default.existsSync(CACHE_DIR)) {
1687
+ fs__default.default.mkdirSync(CACHE_DIR, { recursive: true });
1688
+ }
1689
+ fs__default.default.writeFileSync(CACHE_FILE, date.getTime().toString(), "utf-8");
1690
+ } catch (err) {
1691
+ modelRouterCacheFailed = true;
1692
+ console.warn("[GatewayRegistry] Failed to write cache file:", err);
1693
+ }
1694
+ }
1695
+ function getPackageRoot() {
1696
+ try {
1697
+ const require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-EQV7XSTY.cjs', document.baseURI).href)) || "file://");
1698
+ const packageJsonPath = require2.resolve("@mastra/core/package.json");
1699
+ return path__default.default.dirname(packageJsonPath);
1700
+ } catch {
1701
+ return process.cwd();
1702
+ }
1703
+ }
1704
+ function loadRegistry(useDynamicLoading) {
1705
+ if (!useDynamicLoading) {
1706
+ return provider_registry_default;
1707
+ }
1708
+ if (registryData) {
1709
+ return registryData;
1710
+ }
1711
+ const packageRoot = getPackageRoot();
1712
+ const possiblePaths = [
1713
+ // Built: in dist/ relative to package root (first priority - what gets distributed)
1714
+ path__default.default.join(packageRoot, "dist", "provider-registry.json"),
1715
+ // Development: in src/ relative to package root
1716
+ path__default.default.join(packageRoot, "src", "llm", "model", "provider-registry.json"),
1717
+ // Fallback: relative to cwd (for monorepo setups)
1718
+ path__default.default.join(process.cwd(), "packages/core/src/llm/model/provider-registry.json"),
1719
+ path__default.default.join(process.cwd(), "src/llm/model/provider-registry.json")
1720
+ ];
1721
+ const errors = [];
1722
+ for (const jsonPath of possiblePaths) {
1723
+ try {
1724
+ const content = fs__default.default.readFileSync(jsonPath, "utf-8");
1725
+ registryData = JSON.parse(content);
1726
+ return registryData;
1727
+ } catch (err) {
1728
+ errors.push(`${jsonPath}: ${err instanceof Error ? err.message : String(err)}`);
1729
+ continue;
1730
+ }
1731
+ }
1732
+ throw new Error(
1733
+ `Failed to load provider registry with dynamic loading. Make sure provider-registry.json is generated by running: npm run generate:providers
1734
+
1735
+ Tried paths:
1736
+ ${errors.join("\n")}`
1737
+ );
1738
+ }
1739
+ var PROVIDER_REGISTRY = new Proxy({}, {
1740
+ get(_target, prop) {
1741
+ const registry = GatewayRegistry.getInstance();
1742
+ const providers = registry.getProviders();
1743
+ return providers[prop];
1744
+ },
1745
+ ownKeys() {
1746
+ const registry = GatewayRegistry.getInstance();
1747
+ const providers = registry.getProviders();
1748
+ return Object.keys(providers);
1749
+ },
1750
+ has(_target, prop) {
1751
+ const registry = GatewayRegistry.getInstance();
1752
+ const providers = registry.getProviders();
1753
+ return prop in providers;
1754
+ },
1755
+ getOwnPropertyDescriptor(_target, prop) {
1756
+ const registry = GatewayRegistry.getInstance();
1757
+ const providers = registry.getProviders();
1758
+ if (prop in providers) {
1759
+ return {
1760
+ enumerable: true,
1761
+ configurable: true
1762
+ };
1763
+ }
1764
+ return void 0;
1765
+ }
1766
+ });
1767
+ new Proxy({}, {
1768
+ get(_target, prop) {
1769
+ const registry = GatewayRegistry.getInstance();
1770
+ const models = registry.getModels();
1771
+ return models[prop];
1772
+ },
1773
+ ownKeys() {
1774
+ const registry = GatewayRegistry.getInstance();
1775
+ const models = registry.getModels();
1776
+ return Object.keys(models);
1777
+ },
1778
+ has(_target, prop) {
1779
+ const registry = GatewayRegistry.getInstance();
1780
+ const models = registry.getModels();
1781
+ return prop in models;
1782
+ },
1783
+ getOwnPropertyDescriptor(_target, prop) {
1784
+ const registry = GatewayRegistry.getInstance();
1785
+ const models = registry.getModels();
1786
+ if (prop in models) {
1787
+ return {
1788
+ enumerable: true,
1789
+ configurable: true
1790
+ };
1791
+ }
1792
+ return void 0;
1793
+ }
1794
+ });
1795
+ function parseModelString(modelString) {
1796
+ const firstSlashIndex = modelString.indexOf("/");
1797
+ if (firstSlashIndex !== -1) {
1798
+ const provider = modelString.substring(0, firstSlashIndex);
1799
+ const modelId = modelString.substring(firstSlashIndex + 1);
1800
+ if (provider && modelId) {
1801
+ return {
1802
+ provider,
1803
+ modelId
1804
+ };
1805
+ }
1806
+ }
1807
+ return {
1808
+ provider: null,
1809
+ modelId: modelString
1810
+ };
1811
+ }
1812
+ function getProviderConfig(providerId) {
1813
+ const registry = GatewayRegistry.getInstance();
1814
+ return registry.getProviderConfig(providerId);
1815
+ }
1816
+ var GatewayRegistry = class _GatewayRegistry {
1817
+ static instance = null;
1818
+ lastRefreshTime = null;
1819
+ refreshInterval = null;
1820
+ isRefreshing = false;
1821
+ useDynamicLoading;
1822
+ constructor(options = {}) {
1823
+ const isDev2 = process.env.MASTRA_DEV === "true" || process.env.MASTRA_DEV === "1";
1824
+ this.useDynamicLoading = options.useDynamicLoading ?? isDev2;
1825
+ }
1826
+ /**
1827
+ * Get the singleton instance
1828
+ */
1829
+ static getInstance(options) {
1830
+ if (!_GatewayRegistry.instance) {
1831
+ _GatewayRegistry.instance = new _GatewayRegistry(options);
1832
+ }
1833
+ return _GatewayRegistry.instance;
1834
+ }
1835
+ /**
1836
+ * Sync providers from all gateways
1837
+ * Requires dynamic loading to be enabled (useDynamicLoading=true).
1838
+ * @param forceRefresh - Force refresh even if recently synced
1839
+ * @param writeToSrc - Write to src/ directory in addition to dist/ (useful for manual generation in repo)
1840
+ */
1841
+ async syncGateways(forceRefresh = false, writeToSrc = false) {
1842
+ if (!this.useDynamicLoading && !writeToSrc) {
1843
+ return;
1844
+ }
1845
+ if (this.isRefreshing && !forceRefresh) {
1846
+ return;
1847
+ }
1848
+ this.isRefreshing = true;
1849
+ try {
1850
+ const { ModelsDevGateway: ModelsDevGateway2 } = await import('./models-dev-ECOIQLLK.cjs');
1851
+ const { NetlifyGateway: NetlifyGateway2 } = await import('./netlify-WFAL2AA4.cjs');
1852
+ const { fetchProvidersFromGateways, writeRegistryFiles } = await import('./registry-generator-7XDUEFUT.cjs');
1853
+ const gateways2 = [new ModelsDevGateway2({}), new NetlifyGateway2()];
1854
+ const { providers, models } = await fetchProvidersFromGateways(gateways2);
1855
+ const packageRoot = getPackageRoot();
1856
+ const distJsonPath = path__default.default.join(packageRoot, "dist", "provider-registry.json");
1857
+ const distTypesPath = path__default.default.join(packageRoot, "dist", "llm", "model", "provider-types.generated.d.ts");
1858
+ await writeRegistryFiles(distJsonPath, distTypesPath, providers, models);
1859
+ if (writeToSrc || this.useDynamicLoading) {
1860
+ const srcJsonPath = path__default.default.join(packageRoot, "src", "llm", "model", "provider-registry.json");
1861
+ const srcTypesPath = path__default.default.join(packageRoot, "src", "llm", "model", "provider-types.generated.d.ts");
1862
+ await fs__default.default.promises.copyFile(distJsonPath, srcJsonPath);
1863
+ await fs__default.default.promises.copyFile(distTypesPath, srcTypesPath);
1864
+ }
1865
+ if (this.useDynamicLoading) {
1866
+ registryData = null;
1867
+ }
1868
+ this.lastRefreshTime = /* @__PURE__ */ new Date();
1869
+ saveLastRefreshTimeToDisk(this.lastRefreshTime);
1870
+ } catch (error) {
1871
+ console.error("[GatewayRegistry] \u274C Gateway sync failed:", error);
1872
+ throw error;
1873
+ } finally {
1874
+ this.isRefreshing = false;
1875
+ }
1876
+ }
1877
+ /**
1878
+ * Get the last refresh time (from memory or disk cache)
1879
+ */
1880
+ getLastRefreshTime() {
1881
+ return this.lastRefreshTime || getLastRefreshTimeFromDisk();
1882
+ }
1883
+ /**
1884
+ * Start auto-refresh on an interval
1885
+ * Requires dynamic loading to be enabled (useDynamicLoading=true).
1886
+ * @param intervalMs - Interval in milliseconds (default: 1 hour)
1887
+ */
1888
+ startAutoRefresh(intervalMs = 60 * 60 * 1e3) {
1889
+ if (!this.useDynamicLoading) {
1890
+ return;
1891
+ }
1892
+ if (this.refreshInterval) {
1893
+ return;
1894
+ }
1895
+ const lastRefresh = getLastRefreshTimeFromDisk();
1896
+ const now = Date.now();
1897
+ const shouldRefresh = !modelRouterCacheFailed && (!lastRefresh || now - lastRefresh.getTime() > intervalMs);
1898
+ if (shouldRefresh) {
1899
+ this.syncGateways().catch((err) => {
1900
+ console.error("[GatewayRegistry] Initial auto-refresh failed:", err);
1901
+ });
1902
+ }
1903
+ this.refreshInterval = setInterval(() => {
1904
+ if (modelRouterCacheFailed && this.refreshInterval) {
1905
+ clearInterval(this.refreshInterval);
1906
+ this.refreshInterval = null;
1907
+ return;
1908
+ }
1909
+ this.syncGateways().catch((err) => {
1910
+ console.error("[GatewayRegistry] Auto-refresh failed:", err);
1911
+ });
1912
+ }, intervalMs);
1913
+ if (this.refreshInterval.unref) {
1914
+ this.refreshInterval.unref();
1915
+ }
1916
+ }
1917
+ /**
1918
+ * Stop auto-refresh
1919
+ */
1920
+ stopAutoRefresh() {
1921
+ if (this.refreshInterval) {
1922
+ clearInterval(this.refreshInterval);
1923
+ this.refreshInterval = null;
1924
+ }
1925
+ }
1926
+ /**
1927
+ * Get provider configuration by ID
1928
+ */
1929
+ getProviderConfig(providerId) {
1930
+ const data = loadRegistry(this.useDynamicLoading);
1931
+ return data.providers[providerId];
1932
+ }
1933
+ /**
1934
+ * Check if a provider is registered
1935
+ */
1936
+ isProviderRegistered(providerId) {
1937
+ const data = loadRegistry(this.useDynamicLoading);
1938
+ return providerId in data.providers;
1939
+ }
1940
+ /**
1941
+ * Get all registered providers
1942
+ */
1943
+ getProviders() {
1944
+ const data = loadRegistry(this.useDynamicLoading);
1945
+ return data.providers;
1946
+ }
1947
+ /**
1948
+ * Get all models
1949
+ */
1950
+ getModels() {
1951
+ return loadRegistry(this.useDynamicLoading).models;
1952
+ }
1953
+ };
1954
+ var isDev = process.env.MASTRA_DEV === "true" || process.env.MASTRA_DEV === "1";
1955
+ var autoRefreshEnabled = process.env.MASTRA_AUTO_REFRESH_PROVIDERS === "true" || process.env.MASTRA_AUTO_REFRESH_PROVIDERS !== "false" && isDev;
1956
+ if (autoRefreshEnabled) {
1957
+ GatewayRegistry.getInstance({ useDynamicLoading: isDev }).startAutoRefresh();
1958
+ }
1959
+
1960
+ // src/llm/model/router.ts
1961
+ function getStaticProvidersByGateway(name) {
1962
+ return Object.fromEntries(Object.entries(PROVIDER_REGISTRY).filter(([_provider, config]) => config.gateway === name));
1963
+ }
1964
+ var gateways = [new chunkY2PKC5BX_cjs.NetlifyGateway(), new chunkQMKBXESK_cjs.ModelsDevGateway(getStaticProvidersByGateway(`models.dev`))];
1965
+ var ModelRouterLanguageModel = class _ModelRouterLanguageModel {
1966
+ specificationVersion = "v2";
1967
+ defaultObjectGenerationMode = "json";
1968
+ supportsStructuredOutputs = true;
1969
+ supportsImageUrls = true;
1970
+ supportedUrls = {};
1971
+ modelId;
1972
+ provider;
1973
+ config;
1974
+ gateway;
1975
+ constructor(config) {
1976
+ let normalizedConfig;
1977
+ if (typeof config === "string") {
1978
+ normalizedConfig = { id: config };
1979
+ } else if ("providerId" in config && "modelId" in config) {
1980
+ normalizedConfig = {
1981
+ id: `${config.providerId}/${config.modelId}`,
1982
+ url: config.url,
1983
+ apiKey: config.apiKey,
1984
+ headers: config.headers
1985
+ };
1986
+ } else {
1987
+ normalizedConfig = {
1988
+ id: config.id,
1989
+ url: config.url,
1990
+ apiKey: config.apiKey,
1991
+ headers: config.headers
1992
+ };
1993
+ }
1994
+ const parsedConfig = {
1995
+ ...normalizedConfig,
1996
+ routerId: normalizedConfig.id
1997
+ };
1998
+ this.gateway = findGatewayForModel(normalizedConfig.id, gateways);
1999
+ const parsed = chunkQMKBXESK_cjs.parseModelRouterId(normalizedConfig.id, this.gateway.prefix);
2000
+ this.provider = parsed.providerId || "openai-compatible";
2001
+ if (parsed.providerId && parsed.modelId !== normalizedConfig.id) {
2002
+ parsedConfig.id = parsed.modelId;
2003
+ }
2004
+ this.modelId = parsedConfig.id;
2005
+ this.config = parsedConfig;
2006
+ }
2007
+ async doGenerate() {
2008
+ throw new Error(
2009
+ "doGenerate is not supported by Mastra model router. Mastra only uses streaming (doStream) for all LLM calls."
2010
+ );
2011
+ }
2012
+ async doStream(options) {
2013
+ let apiKey;
2014
+ try {
2015
+ apiKey = this.config.apiKey || await this.gateway.getApiKey(this.config.routerId);
2016
+ } catch (error) {
2017
+ return {
2018
+ stream: new ReadableStream({
2019
+ start(controller) {
2020
+ controller.enqueue({
2021
+ type: "error",
2022
+ error: error instanceof Error ? error.message : String(error)
2023
+ });
2024
+ }
2025
+ })
2026
+ };
2027
+ }
2028
+ const model = await this.resolveLanguageModel({
2029
+ apiKey,
2030
+ ...chunkQMKBXESK_cjs.parseModelRouterId(this.config.routerId, this.gateway.prefix)
2031
+ });
2032
+ return model.doStream(options);
2033
+ }
2034
+ async resolveLanguageModel({
2035
+ modelId,
2036
+ providerId,
2037
+ apiKey
2038
+ }) {
2039
+ const key = crypto.createHash("sha256").update(this.gateway.name + modelId + providerId + apiKey + (this.config.url || "")).digest("hex");
2040
+ if (_ModelRouterLanguageModel.modelInstances.has(key)) return _ModelRouterLanguageModel.modelInstances.get(key);
2041
+ if (this.config.url) {
2042
+ const modelInstance2 = chunk3ZEJSGTJ_cjs.createOpenAICompatible({
2043
+ name: providerId,
2044
+ apiKey,
2045
+ baseURL: this.config.url,
2046
+ headers: this.config.headers
2047
+ }).chatModel(modelId);
2048
+ _ModelRouterLanguageModel.modelInstances.set(key, modelInstance2);
2049
+ return modelInstance2;
2050
+ }
2051
+ const modelInstance = await this.gateway.resolveLanguageModel({ modelId, providerId, apiKey });
2052
+ _ModelRouterLanguageModel.modelInstances.set(key, modelInstance);
2053
+ return modelInstance;
2054
+ }
2055
+ static modelInstances = /* @__PURE__ */ new Map();
2056
+ };
2057
+
2058
+ // src/llm/model/resolve-model.ts
2059
+ function isOpenAICompatibleObjectConfig(modelConfig) {
2060
+ if (typeof modelConfig === "object" && "specificationVersion" in modelConfig) return false;
2061
+ if (typeof modelConfig === "object" && !("model" in modelConfig)) {
2062
+ if ("id" in modelConfig) return true;
2063
+ if ("providerId" in modelConfig && "modelId" in modelConfig) return true;
2064
+ }
2065
+ return false;
2066
+ }
2067
+ async function resolveModelConfig(modelConfig, runtimeContext = new chunkGPWMM745_cjs.RuntimeContext(), mastra) {
2068
+ if (typeof modelConfig === "object" && "specificationVersion" in modelConfig) {
2069
+ return modelConfig;
2070
+ }
2071
+ if (typeof modelConfig === "string" || isOpenAICompatibleObjectConfig(modelConfig)) {
2072
+ return new ModelRouterLanguageModel(modelConfig);
2073
+ }
2074
+ if (typeof modelConfig === "function") {
2075
+ const fromDynamic = await modelConfig({ runtimeContext, mastra });
2076
+ if (typeof fromDynamic === "string" || isOpenAICompatibleObjectConfig(fromDynamic)) {
2077
+ return new ModelRouterLanguageModel(fromDynamic);
2078
+ }
2079
+ return fromDynamic;
2080
+ }
2081
+ throw new Error("Invalid model configuration provided");
2082
+ }
2083
+
2084
+ exports.ModelRouterLanguageModel = ModelRouterLanguageModel;
2085
+ exports.PROVIDER_REGISTRY = PROVIDER_REGISTRY;
2086
+ exports.getProviderConfig = getProviderConfig;
2087
+ exports.parseModelString = parseModelString;
2088
+ exports.resolveModelConfig = resolveModelConfig;
2089
+ //# sourceMappingURL=chunk-EQV7XSTY.cjs.map
2090
+ //# sourceMappingURL=chunk-EQV7XSTY.cjs.map