@mastra/core 0.20.2 → 0.21.0-alpha.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 (271) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/agent/agent.d.ts +4 -9
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.types.d.ts +8 -13
  5. package/dist/agent/agent.types.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +19 -11
  7. package/dist/agent/index.d.ts +2 -1
  8. package/dist/agent/index.d.ts.map +1 -1
  9. package/dist/agent/index.js +2 -2
  10. package/dist/agent/input-processor/index.cjs +6 -6
  11. package/dist/agent/input-processor/index.js +1 -1
  12. package/dist/agent/message-list/index.d.ts +4 -4
  13. package/dist/agent/message-list/index.d.ts.map +1 -1
  14. package/dist/agent/message-list/prompt/attachments-to-parts.d.ts +1 -1
  15. package/dist/agent/message-list/prompt/attachments-to-parts.d.ts.map +1 -1
  16. package/dist/agent/message-list/prompt/convert-file.d.ts +2 -2
  17. package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -1
  18. package/dist/agent/message-list/types.d.ts +2 -2
  19. package/dist/agent/message-list/types.d.ts.map +1 -1
  20. package/dist/agent/message-list/utils/convert-messages.d.ts +2 -2
  21. package/dist/agent/types.d.ts +13 -5
  22. package/dist/agent/types.d.ts.map +1 -1
  23. package/dist/agent/utils.d.ts +110 -0
  24. package/dist/agent/utils.d.ts.map +1 -0
  25. package/dist/agent/workflows/prepare-stream/index.d.ts +2 -2
  26. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  27. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
  28. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +2 -2
  29. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +1 -2
  30. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
  31. package/dist/agent/workflows/prepare-stream/schema.d.ts +2 -2
  32. package/dist/ai-tracing/index.cjs +32 -32
  33. package/dist/ai-tracing/index.js +1 -1
  34. package/dist/ai-tracing/types.d.ts +8 -0
  35. package/dist/ai-tracing/types.d.ts.map +1 -1
  36. package/dist/{chunk-KK5LUATU.js → chunk-2VSJYKJF.js} +4 -4
  37. package/dist/{chunk-KK5LUATU.js.map → chunk-2VSJYKJF.js.map} +1 -1
  38. package/dist/{chunk-2QV245Q5.cjs → chunk-37ZKH5YV.cjs} +25 -18
  39. package/dist/chunk-37ZKH5YV.cjs.map +1 -0
  40. package/dist/{chunk-JZ5MQXUL.cjs → chunk-46URAIGN.cjs} +4 -4
  41. package/dist/{chunk-JZ5MQXUL.cjs.map → chunk-46URAIGN.cjs.map} +1 -1
  42. package/dist/{chunk-X5SB7NR3.cjs → chunk-5SQ4LGZX.cjs} +9 -10
  43. package/dist/chunk-5SQ4LGZX.cjs.map +1 -0
  44. package/dist/{chunk-T5SM2HLV.cjs → chunk-6E3YXNS2.cjs} +4 -4
  45. package/dist/chunk-6E3YXNS2.cjs.map +1 -0
  46. package/dist/{chunk-HTX7EHW5.js → chunk-7G7VIPVE.js} +3 -3
  47. package/dist/{chunk-HTX7EHW5.js.map → chunk-7G7VIPVE.js.map} +1 -1
  48. package/dist/{chunk-YBC4V5GE.js → chunk-ACQCDLM5.js} +4 -4
  49. package/dist/{chunk-YBC4V5GE.js.map → chunk-ACQCDLM5.js.map} +1 -1
  50. package/dist/{chunk-7ZXDZXGD.cjs → chunk-CHGLK2EE.cjs} +2 -2
  51. package/dist/chunk-CHGLK2EE.cjs.map +1 -0
  52. package/dist/chunk-CMEDBCQI.cjs +13738 -0
  53. package/dist/chunk-CMEDBCQI.cjs.map +1 -0
  54. package/dist/chunk-CN3DPBSR.js +13713 -0
  55. package/dist/chunk-CN3DPBSR.js.map +1 -0
  56. package/dist/{chunk-BWC4WQTS.js → chunk-HY7VW2VD.js} +21 -14
  57. package/dist/chunk-HY7VW2VD.js.map +1 -0
  58. package/dist/{chunk-PPCSJI73.cjs → chunk-IWYVLIYC.cjs} +33 -14
  59. package/dist/chunk-IWYVLIYC.cjs.map +1 -0
  60. package/dist/{chunk-4PRV2Y55.cjs → chunk-LOUJSR3F.cjs} +5 -5
  61. package/dist/{chunk-4PRV2Y55.cjs.map → chunk-LOUJSR3F.cjs.map} +1 -1
  62. package/dist/{chunk-YICS4NNU.cjs → chunk-LPXWG36P.cjs} +12 -12
  63. package/dist/{chunk-YICS4NNU.cjs.map → chunk-LPXWG36P.cjs.map} +1 -1
  64. package/dist/{chunk-VSTMNPZJ.js → chunk-O2WF4GIK.js} +7 -8
  65. package/dist/chunk-O2WF4GIK.js.map +1 -0
  66. package/dist/{chunk-7H72OAZ3.js → chunk-PVVDB5IT.js} +3 -3
  67. package/dist/{chunk-7H72OAZ3.js.map → chunk-PVVDB5IT.js.map} +1 -1
  68. package/dist/{chunk-SWNIMD7I.js → chunk-RLLLUDY3.js} +3 -3
  69. package/dist/chunk-RLLLUDY3.js.map +1 -0
  70. package/dist/{chunk-DBYLVMIV.js → chunk-TUEJ2F25.js} +25 -7
  71. package/dist/chunk-TUEJ2F25.js.map +1 -0
  72. package/dist/{chunk-RE7SRMBE.cjs → chunk-U27VX7MI.cjs} +16 -16
  73. package/dist/chunk-U27VX7MI.cjs.map +1 -0
  74. package/dist/{chunk-6ZSVXXMJ.js → chunk-UAU56I6S.js} +2 -2
  75. package/dist/chunk-UAU56I6S.js.map +1 -0
  76. package/dist/{chunk-M2MHQQGJ.js → chunk-UJXD5L66.js} +4 -4
  77. package/dist/chunk-UJXD5L66.js.map +1 -0
  78. package/dist/{chunk-OC7MSESV.cjs → chunk-W5SR3JVW.cjs} +6 -6
  79. package/dist/{chunk-OC7MSESV.cjs.map → chunk-W5SR3JVW.cjs.map} +1 -1
  80. package/dist/{chunk-ECMIW6W2.cjs → chunk-W6OYSIHF.cjs} +99 -94
  81. package/dist/chunk-W6OYSIHF.cjs.map +1 -0
  82. package/dist/{chunk-EB2KTBHB.js → chunk-WYJFP2MU.js} +65 -62
  83. package/dist/chunk-WYJFP2MU.js.map +1 -0
  84. package/dist/index.cjs +53 -49
  85. package/dist/index.js +10 -10
  86. package/dist/llm/index.cjs +9 -5
  87. package/dist/llm/index.d.ts +3 -2
  88. package/dist/llm/index.d.ts.map +1 -1
  89. package/dist/llm/index.js +1 -1
  90. package/dist/llm/model/base.types.d.ts +2 -2
  91. package/dist/llm/model/base.types.d.ts.map +1 -1
  92. package/dist/llm/model/gateways/base.d.ts +1 -1
  93. package/dist/llm/model/gateways/base.d.ts.map +1 -1
  94. package/dist/llm/model/gateways/models-dev.d.ts +1 -1
  95. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  96. package/dist/llm/model/gateways/netlify.d.ts +1 -1
  97. package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
  98. package/dist/llm/model/index.d.ts +1 -0
  99. package/dist/llm/model/index.d.ts.map +1 -1
  100. package/dist/llm/model/model.d.ts +2 -2
  101. package/dist/llm/model/model.d.ts.map +1 -1
  102. package/dist/llm/model/model.loop.d.ts +3 -3
  103. package/dist/llm/model/model.loop.d.ts.map +1 -1
  104. package/dist/llm/model/model.loop.types.d.ts +2 -3
  105. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  106. package/dist/llm/model/resolve-model.d.ts +46 -0
  107. package/dist/llm/model/resolve-model.d.ts.map +1 -0
  108. package/dist/llm/model/router.d.ts +1 -1
  109. package/dist/llm/model/router.d.ts.map +1 -1
  110. package/dist/llm/model/shared.types.d.ts +9 -3
  111. package/dist/llm/model/shared.types.d.ts.map +1 -1
  112. package/dist/loop/index.cjs +2 -2
  113. package/dist/loop/index.js +1 -1
  114. package/dist/loop/loop.d.ts +1 -1
  115. package/dist/loop/loop.d.ts.map +1 -1
  116. package/dist/loop/network/index.d.ts.map +1 -1
  117. package/dist/loop/telemetry/index.d.ts +1 -1
  118. package/dist/loop/telemetry/index.d.ts.map +1 -1
  119. package/dist/loop/test-utils/streamObject.d.ts +1 -1
  120. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  121. package/dist/loop/test-utils/utils.d.ts +2 -2
  122. package/dist/loop/test-utils/utils.d.ts.map +1 -1
  123. package/dist/loop/types.d.ts +4 -3
  124. package/dist/loop/types.d.ts.map +1 -1
  125. package/dist/loop/workflows/agentic-execution/index.d.ts +73 -73
  126. package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
  127. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +50 -50
  128. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  129. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +25 -25
  130. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  131. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +1 -1
  132. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
  133. package/dist/loop/workflows/agentic-loop/index.d.ts +73 -73
  134. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  135. package/dist/loop/workflows/run-state.d.ts +1 -1
  136. package/dist/loop/workflows/run-state.d.ts.map +1 -1
  137. package/dist/loop/workflows/schema.d.ts +33 -33
  138. package/dist/loop/workflows/schema.d.ts.map +1 -1
  139. package/dist/loop/workflows/stream.d.ts +1 -1
  140. package/dist/loop/workflows/stream.d.ts.map +1 -1
  141. package/dist/mastra/hooks.d.ts.map +1 -1
  142. package/dist/mastra/index.cjs +2 -2
  143. package/dist/mastra/index.js +1 -1
  144. package/dist/memory/index.cjs +4 -4
  145. package/dist/memory/index.js +1 -1
  146. package/dist/memory/memory.d.ts +2 -2
  147. package/dist/memory/memory.d.ts.map +1 -1
  148. package/dist/memory/types.d.ts +3 -3
  149. package/dist/memory/types.d.ts.map +1 -1
  150. package/dist/processors/index.cjs +11 -11
  151. package/dist/processors/index.js +1 -1
  152. package/dist/processors/processors/language-detector.d.ts.map +1 -1
  153. package/dist/processors/processors/moderation.d.ts +6 -3
  154. package/dist/processors/processors/moderation.d.ts.map +1 -1
  155. package/dist/processors/processors/pii-detector.d.ts +6 -3
  156. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  157. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  158. package/dist/processors/processors/structured-output.d.ts +2 -2
  159. package/dist/processors/processors/structured-output.d.ts.map +1 -1
  160. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  161. package/dist/relevance/index.cjs +4 -4
  162. package/dist/relevance/index.js +1 -1
  163. package/dist/relevance/mastra-agent/index.d.ts +2 -2
  164. package/dist/relevance/mastra-agent/index.d.ts.map +1 -1
  165. package/dist/scores/base.d.ts +6 -6
  166. package/dist/scores/base.d.ts.map +1 -1
  167. package/dist/scores/index.cjs +9 -9
  168. package/dist/scores/index.js +2 -2
  169. package/dist/scores/run-experiment/index.d.ts +1 -1
  170. package/dist/scores/run-experiment/index.d.ts.map +1 -1
  171. package/dist/scores/scoreTraces/index.cjs +8 -8
  172. package/dist/scores/scoreTraces/index.cjs.map +1 -1
  173. package/dist/scores/scoreTraces/index.js +3 -3
  174. package/dist/scores/scoreTraces/index.js.map +1 -1
  175. package/dist/scores/types.d.ts +1 -1
  176. package/dist/scores/types.d.ts.map +1 -1
  177. package/dist/storage/index.cjs +3 -3
  178. package/dist/storage/index.js +1 -1
  179. package/dist/stream/aisdk/v4/input.d.ts +1 -1
  180. package/dist/stream/aisdk/v4/input.d.ts.map +1 -1
  181. package/dist/stream/aisdk/v5/compat/content.d.ts +2 -2
  182. package/dist/stream/aisdk/v5/compat/content.d.ts.map +1 -1
  183. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts +2 -2
  184. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
  185. package/dist/stream/aisdk/v5/compat/ui-message.d.ts +1 -1
  186. package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -1
  187. package/dist/stream/aisdk/v5/compat/validation.d.ts +1 -1
  188. package/dist/stream/aisdk/v5/compat/validation.d.ts.map +1 -1
  189. package/dist/stream/aisdk/v5/execute.d.ts +5 -4
  190. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  191. package/dist/stream/aisdk/v5/input.d.ts +1 -1
  192. package/dist/stream/aisdk/v5/input.d.ts.map +1 -1
  193. package/dist/stream/aisdk/v5/output-helpers.d.ts +9 -9
  194. package/dist/stream/aisdk/v5/output-helpers.d.ts.map +1 -1
  195. package/dist/stream/aisdk/v5/output.d.ts +40 -39
  196. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  197. package/dist/stream/aisdk/v5/test-utils.d.ts +1 -1
  198. package/dist/stream/aisdk/v5/test-utils.d.ts.map +1 -1
  199. package/dist/stream/aisdk/v5/transform.d.ts +2 -2
  200. package/dist/stream/aisdk/v5/transform.d.ts.map +1 -1
  201. package/dist/stream/base/input.d.ts +1 -1
  202. package/dist/stream/base/input.d.ts.map +1 -1
  203. package/dist/stream/base/output-format-handlers.d.ts +3 -2
  204. package/dist/stream/base/output-format-handlers.d.ts.map +1 -1
  205. package/dist/stream/base/output.d.ts +31 -25
  206. package/dist/stream/base/output.d.ts.map +1 -1
  207. package/dist/stream/base/schema.d.ts +1 -1
  208. package/dist/stream/base/schema.d.ts.map +1 -1
  209. package/dist/stream/index.cjs +9 -9
  210. package/dist/stream/index.js +2 -2
  211. package/dist/stream/types.d.ts +12 -6
  212. package/dist/stream/types.d.ts.map +1 -1
  213. package/dist/test-utils/llm-mock.cjs +6 -6
  214. package/dist/test-utils/llm-mock.cjs.map +1 -1
  215. package/dist/test-utils/llm-mock.d.ts +1 -1
  216. package/dist/test-utils/llm-mock.d.ts.map +1 -1
  217. package/dist/test-utils/llm-mock.js +3 -3
  218. package/dist/test-utils/llm-mock.js.map +1 -1
  219. package/dist/tools/types.d.ts +2 -2
  220. package/dist/tools/types.d.ts.map +1 -1
  221. package/dist/utils.cjs +17 -17
  222. package/dist/utils.d.ts +3 -2
  223. package/dist/utils.d.ts.map +1 -1
  224. package/dist/utils.js +1 -1
  225. package/dist/vector/embed.d.ts +2 -2
  226. package/dist/vector/embed.d.ts.map +1 -1
  227. package/dist/vector/index.cjs +4 -4
  228. package/dist/vector/index.js +1 -1
  229. package/dist/vector/vector.d.ts +2 -2
  230. package/dist/vector/vector.d.ts.map +1 -1
  231. package/dist/workflows/default.d.ts +2 -2
  232. package/dist/workflows/default.d.ts.map +1 -1
  233. package/dist/workflows/evented/execution-engine.d.ts +1 -1
  234. package/dist/workflows/evented/execution-engine.d.ts.map +1 -1
  235. package/dist/workflows/evented/index.cjs +10 -10
  236. package/dist/workflows/evented/index.js +1 -1
  237. package/dist/workflows/execution-engine.d.ts +1 -1
  238. package/dist/workflows/execution-engine.d.ts.map +1 -1
  239. package/dist/workflows/index.cjs +12 -12
  240. package/dist/workflows/index.js +1 -1
  241. package/dist/workflows/legacy/index.cjs +22 -22
  242. package/dist/workflows/legacy/index.js +1 -1
  243. package/dist/workflows/legacy/machine.d.ts +1 -1
  244. package/dist/workflows/legacy/workflow.d.ts +1 -1
  245. package/dist/workflows/step.d.ts +1 -1
  246. package/dist/workflows/step.d.ts.map +1 -1
  247. package/dist/workflows/types.d.ts +1 -1
  248. package/dist/workflows/types.d.ts.map +1 -1
  249. package/dist/workflows/workflow.d.ts +5 -7
  250. package/dist/workflows/workflow.d.ts.map +1 -1
  251. package/package.json +22 -19
  252. package/dist/chunk-2QV245Q5.cjs.map +0 -1
  253. package/dist/chunk-6ZSVXXMJ.js.map +0 -1
  254. package/dist/chunk-7ZXDZXGD.cjs.map +0 -1
  255. package/dist/chunk-BWC4WQTS.js.map +0 -1
  256. package/dist/chunk-BZ6BIHLE.js +0 -1418
  257. package/dist/chunk-BZ6BIHLE.js.map +0 -1
  258. package/dist/chunk-DBYLVMIV.js.map +0 -1
  259. package/dist/chunk-EB2KTBHB.js.map +0 -1
  260. package/dist/chunk-ECMIW6W2.cjs.map +0 -1
  261. package/dist/chunk-M2MHQQGJ.js.map +0 -1
  262. package/dist/chunk-PPCSJI73.cjs.map +0 -1
  263. package/dist/chunk-RE7SRMBE.cjs.map +0 -1
  264. package/dist/chunk-REVAU76X.cjs +0 -1423
  265. package/dist/chunk-REVAU76X.cjs.map +0 -1
  266. package/dist/chunk-SWNIMD7I.js.map +0 -1
  267. package/dist/chunk-T5SM2HLV.cjs.map +0 -1
  268. package/dist/chunk-VSTMNPZJ.js.map +0 -1
  269. package/dist/chunk-X5SB7NR3.cjs.map +0 -1
  270. package/dist/stream/aisdk/v5/model-supports.d.ts +0 -25
  271. package/dist/stream/aisdk/v5/model-supports.d.ts.map +0 -1
@@ -1,1423 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkUU5L5GDY_cjs = require('./chunk-UU5L5GDY.cjs');
4
- var chunkWM4VQWOZ_cjs = require('./chunk-WM4VQWOZ.cjs');
5
- var crypto = require('crypto');
6
- var anthropicV5 = require('@ai-sdk/anthropic-v5');
7
- var googleV5 = require('@ai-sdk/google-v5');
8
- var openaiCompatibleV5 = require('@ai-sdk/openai-compatible-v5');
9
- var openaiV5 = require('@ai-sdk/openai-v5');
10
- var xaiV5 = require('@ai-sdk/xai-v5');
11
- var aiSdkProviderV5 = require('@openrouter/ai-sdk-provider-v5');
12
-
13
- // src/llm/model/gateway-resolver.ts
14
- function parseModelRouterId(routerId, gatewayPrefix) {
15
- if (gatewayPrefix && !routerId.startsWith(`${gatewayPrefix}/`)) {
16
- throw new Error(`Expected ${gatewayPrefix}/ in model router ID ${routerId}`);
17
- }
18
- const idParts = routerId.split("/");
19
- if (gatewayPrefix && idParts.length < 3) {
20
- throw new Error(
21
- `Expected atleast 3 id parts ${gatewayPrefix}/provider/model, but only saw ${idParts.length} in ${routerId}`
22
- );
23
- }
24
- const providerId = idParts.at(gatewayPrefix ? 1 : 0);
25
- const modelId = idParts.slice(gatewayPrefix ? 2 : 1).join(`/`);
26
- if (!routerId.includes(`/`) || !providerId || !modelId) {
27
- throw new Error(
28
- `Attempted to parse provider/model from ${routerId} but this ID doesn't appear to contain a provider`
29
- );
30
- }
31
- return {
32
- providerId,
33
- modelId
34
- };
35
- }
36
-
37
- // src/llm/model/gateways/base.ts
38
- var MastraModelGateway = class {
39
- };
40
-
41
- // src/llm/model/gateways/constants.ts
42
- var PROVIDERS_WITH_INSTALLED_PACKAGES = ["anthropic", "google", "openai", "openrouter", "xai"];
43
- var EXCLUDED_PROVIDERS = ["github-copilot"];
44
-
45
- // src/llm/model/gateways/models-dev.ts
46
- var OPENAI_COMPATIBLE_OVERRIDES = {
47
- cerebras: {
48
- url: "https://api.cerebras.ai/v1"
49
- },
50
- mistral: {
51
- url: "https://api.mistral.ai/v1"
52
- },
53
- groq: {
54
- url: "https://api.groq.com/openai/v1"
55
- },
56
- togetherai: {
57
- url: "https://api.together.xyz/v1"
58
- },
59
- deepinfra: {
60
- url: "https://api.deepinfra.com/v1/openai"
61
- },
62
- perplexity: {
63
- url: "https://api.perplexity.ai"
64
- },
65
- vercel: {
66
- url: "https://ai-gateway.vercel.sh/v1",
67
- apiKeyEnvVar: "AI_GATEWAY_API_KEY"
68
- }
69
- };
70
- var ModelsDevGateway = class extends MastraModelGateway {
71
- name = "models.dev";
72
- prefix = void 0;
73
- // No prefix for registry gateway
74
- providerConfigs = {};
75
- constructor(providerConfigs) {
76
- super();
77
- if (providerConfigs) this.providerConfigs = providerConfigs;
78
- }
79
- async fetchProviders() {
80
- console.info("Fetching providers from models.dev API...");
81
- const response = await fetch("https://models.dev/api.json");
82
- if (!response.ok) {
83
- throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);
84
- }
85
- const data = await response.json();
86
- const providerConfigs = {};
87
- for (const [providerId, providerInfo] of Object.entries(data)) {
88
- if (EXCLUDED_PROVIDERS.includes(providerId)) continue;
89
- if (!providerInfo || typeof providerInfo !== "object" || !providerInfo.models) continue;
90
- const normalizedId = providerId;
91
- const isOpenAICompatible = providerInfo.npm === "@ai-sdk/openai-compatible" || providerInfo.npm === "@ai-sdk/gateway" || // Vercel AI Gateway is OpenAI-compatible
92
- normalizedId in OPENAI_COMPATIBLE_OVERRIDES;
93
- const hasInstalledPackage = PROVIDERS_WITH_INSTALLED_PACKAGES.includes(providerId);
94
- const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;
95
- if (isOpenAICompatible || hasInstalledPackage || hasApiAndEnv) {
96
- const modelIds = Object.keys(providerInfo.models).sort();
97
- const url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;
98
- if (!hasInstalledPackage && !url) {
99
- console.info(`Skipping ${normalizedId}: No API URL available`);
100
- continue;
101
- }
102
- const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, "_")}_API_KEY`;
103
- const apiKeyHeader = !hasInstalledPackage ? OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || "Authorization" : void 0;
104
- providerConfigs[normalizedId] = {
105
- url,
106
- apiKeyEnvVar,
107
- apiKeyHeader,
108
- name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),
109
- models: modelIds,
110
- docUrl: providerInfo.doc,
111
- // Include documentation URL if available
112
- gateway: `models.dev`
113
- };
114
- } else {
115
- console.info(`Skipped provider ${providerInfo.name}`);
116
- }
117
- }
118
- this.providerConfigs = providerConfigs;
119
- console.info(`Found ${Object.keys(providerConfigs).length} OpenAI-compatible providers`);
120
- console.info("Providers:", Object.keys(providerConfigs).sort());
121
- return providerConfigs;
122
- }
123
- buildUrl(routerId, envVars) {
124
- const { providerId } = parseModelRouterId(routerId);
125
- const config = this.providerConfigs[providerId];
126
- if (!config?.url) {
127
- return;
128
- }
129
- const baseUrlEnvVar = `${providerId.toUpperCase().replace(/-/g, "_")}_BASE_URL`;
130
- const customBaseUrl = envVars?.[baseUrlEnvVar] || process.env[baseUrlEnvVar];
131
- return customBaseUrl || config.url;
132
- }
133
- getApiKey(modelId) {
134
- const [provider, model] = modelId.split("/");
135
- if (!provider || !model) {
136
- throw new Error(`Could not identify provider from model id ${modelId}`);
137
- }
138
- const config = this.providerConfigs[provider];
139
- if (!config) {
140
- throw new Error(`Could not find config for provider ${provider} with model id ${modelId}`);
141
- }
142
- const apiKey = typeof config.apiKeyEnvVar === `string` ? process.env[config.apiKeyEnvVar] : void 0;
143
- if (!apiKey) {
144
- throw new Error(`Could not find API key process.env.${config.apiKeyEnvVar} for model id ${modelId}`);
145
- }
146
- return Promise.resolve(apiKey);
147
- }
148
- async resolveLanguageModel({
149
- modelId,
150
- providerId,
151
- apiKey
152
- }) {
153
- const baseURL = this.buildUrl(`${providerId}/${modelId}`);
154
- switch (providerId) {
155
- case "openai":
156
- return openaiV5.createOpenAI({ apiKey }).responses(modelId);
157
- case "gemini":
158
- case "google":
159
- return googleV5.createGoogleGenerativeAI({
160
- apiKey
161
- }).chat(modelId);
162
- case "anthropic":
163
- return anthropicV5.createAnthropic({ apiKey })(modelId);
164
- case "openrouter":
165
- return aiSdkProviderV5.createOpenRouter({ apiKey })(modelId);
166
- case "xai":
167
- return xaiV5.createXai({
168
- apiKey
169
- })(modelId);
170
- default:
171
- if (!baseURL) throw new Error(`No API URL found for ${providerId}/${modelId}`);
172
- return openaiCompatibleV5.createOpenAICompatible({ name: providerId, apiKey, baseURL }).chatModel(modelId);
173
- }
174
- }
175
- };
176
- var NetlifyGateway = class extends MastraModelGateway {
177
- name = "netlify";
178
- prefix = "netlify";
179
- // All providers will be prefixed with "netlify/"
180
- tokenCache = new chunkUU5L5GDY_cjs.InMemoryServerCache();
181
- async fetchProviders() {
182
- console.info("Fetching providers from Netlify AI Gateway...");
183
- const response = await fetch("https://api.netlify.com/api/v1/ai-gateway/providers");
184
- if (!response.ok) {
185
- throw new Error(`Failed to fetch from Netlify: ${response.statusText}`);
186
- }
187
- const data = await response.json();
188
- const netlify = {
189
- apiKeyEnvVar: ["NETLIFY_TOKEN", "NETLIFY_SITE_ID"],
190
- apiKeyHeader: "Authorization",
191
- // Netlify uses standard Bearer auth
192
- name: `Netlify`,
193
- gateway: `netlify`,
194
- models: [],
195
- docUrl: "https://docs.netlify.com/build/ai-gateway/overview/"
196
- };
197
- for (const [providerId, provider] of Object.entries(data.providers)) {
198
- for (const model of provider.models) {
199
- netlify.models.push(`${providerId}/${model}`);
200
- }
201
- }
202
- console.info(`Found ${Object.keys(data.providers).length} models via Netlify Gateway`);
203
- return { netlify };
204
- }
205
- async buildUrl(routerId, envVars) {
206
- const siteId = envVars?.["NETLIFY_SITE_ID"] || process.env["NETLIFY_SITE_ID"];
207
- const netlifyToken = envVars?.["NETLIFY_TOKEN"] || process.env["NETLIFY_TOKEN"];
208
- if (!netlifyToken) {
209
- throw new chunkWM4VQWOZ_cjs.MastraError({
210
- id: "NETLIFY_GATEWAY_NO_TOKEN",
211
- domain: "LLM",
212
- category: "UNKNOWN",
213
- text: `Missing NETLIFY_TOKEN environment variable required for model: ${routerId}`
214
- });
215
- }
216
- if (!siteId) {
217
- throw new chunkWM4VQWOZ_cjs.MastraError({
218
- id: "NETLIFY_GATEWAY_NO_SITE_ID",
219
- domain: "LLM",
220
- category: "UNKNOWN",
221
- text: `Missing NETLIFY_SITE_ID environment variable required for model: ${routerId}`
222
- });
223
- }
224
- try {
225
- const tokenData = await this.getOrFetchToken(siteId, netlifyToken);
226
- return tokenData.url.endsWith(`/`) ? tokenData.url.substring(0, tokenData.url.length - 1) : tokenData.url;
227
- } catch (error) {
228
- throw new chunkWM4VQWOZ_cjs.MastraError({
229
- id: "NETLIFY_GATEWAY_TOKEN_ERROR",
230
- domain: "LLM",
231
- category: "UNKNOWN",
232
- text: `Failed to get Netlify AI Gateway token for model ${routerId}: ${error instanceof Error ? error.message : String(error)}`
233
- });
234
- }
235
- }
236
- /**
237
- * Get cached token or fetch a new site-specific AI Gateway token from Netlify
238
- */
239
- async getOrFetchToken(siteId, netlifyToken) {
240
- const cacheKey = `netlify-token:${siteId}:${netlifyToken}`;
241
- const cached = await this.tokenCache.get(cacheKey);
242
- if (cached && cached.expiresAt > Date.now() / 1e3 + 60) {
243
- return { token: cached.token, url: cached.url };
244
- }
245
- const response = await fetch(`https://api.netlify.com/api/v1/sites/${siteId}/ai-gateway/token`, {
246
- method: "GET",
247
- headers: {
248
- Authorization: `Bearer ${netlifyToken}`
249
- }
250
- });
251
- if (!response.ok) {
252
- const error = await response.text();
253
- throw new Error(`Failed to get Netlify AI Gateway token: ${response.status} ${error}`);
254
- }
255
- const tokenResponse = await response.json();
256
- await this.tokenCache.set(cacheKey, {
257
- token: tokenResponse.token,
258
- url: tokenResponse.url,
259
- expiresAt: tokenResponse.expires_at
260
- });
261
- return { token: tokenResponse.token, url: tokenResponse.url };
262
- }
263
- /**
264
- * Get cached token or fetch a new site-specific AI Gateway token from Netlify
265
- */
266
- async getApiKey(modelId) {
267
- const siteId = process.env["NETLIFY_SITE_ID"];
268
- const netlifyToken = process.env["NETLIFY_TOKEN"];
269
- if (!netlifyToken) {
270
- throw new chunkWM4VQWOZ_cjs.MastraError({
271
- id: "NETLIFY_GATEWAY_NO_TOKEN",
272
- domain: "LLM",
273
- category: "UNKNOWN",
274
- text: `Missing NETLIFY_TOKEN environment variable required for model: ${modelId}`
275
- });
276
- }
277
- if (!siteId) {
278
- throw new chunkWM4VQWOZ_cjs.MastraError({
279
- id: "NETLIFY_GATEWAY_NO_SITE_ID",
280
- domain: "LLM",
281
- category: "UNKNOWN",
282
- text: `Missing NETLIFY_SITE_ID environment variable required for model: ${modelId}`
283
- });
284
- }
285
- try {
286
- return (await this.getOrFetchToken(siteId, netlifyToken)).token;
287
- } catch (error) {
288
- throw new chunkWM4VQWOZ_cjs.MastraError({
289
- id: "NETLIFY_GATEWAY_TOKEN_ERROR",
290
- domain: "LLM",
291
- category: "UNKNOWN",
292
- text: `Failed to get Netlify AI Gateway token for model ${modelId}: ${error instanceof Error ? error.message : String(error)}`
293
- });
294
- }
295
- }
296
- async resolveLanguageModel({
297
- modelId,
298
- providerId,
299
- apiKey
300
- }) {
301
- const baseURL = await this.buildUrl(`${providerId}/${modelId}`);
302
- switch (providerId) {
303
- case "openai":
304
- return openaiV5.createOpenAI({ apiKey, baseURL }).responses(modelId);
305
- case "gemini":
306
- return googleV5.createGoogleGenerativeAI({
307
- baseURL: `${baseURL}/v1beta/`,
308
- apiKey,
309
- headers: {
310
- "user-agent": "google-genai-sdk/"
311
- }
312
- }).chat(modelId);
313
- case "anthropic":
314
- return anthropicV5.createAnthropic({
315
- apiKey,
316
- baseURL: `${baseURL}/v1/`,
317
- headers: {
318
- "anthropic-version": "2023-06-01",
319
- "user-agent": "anthropic/"
320
- }
321
- })(modelId);
322
- default:
323
- return openaiCompatibleV5.createOpenAICompatible({ name: providerId, apiKey, baseURL }).chatModel(modelId);
324
- }
325
- }
326
- };
327
-
328
- // src/llm/model/gateways/index.ts
329
- function findGatewayForModel(gatewayId, gateways2) {
330
- const prefixedGateway = gateways2.find((g) => g.prefix && gatewayId.startsWith(`${g.prefix}/`));
331
- if (prefixedGateway) {
332
- return prefixedGateway;
333
- }
334
- const unprefixedGateways = gateways2.filter((g) => !g.prefix);
335
- for (const gateway of unprefixedGateways) {
336
- return gateway;
337
- }
338
- throw new chunkWM4VQWOZ_cjs.MastraError({
339
- id: "MODEL_ROUTER_NO_GATEWAY_FOUND",
340
- category: "USER",
341
- domain: "MODEL_ROUTER",
342
- text: `No Mastra model router gateway found for model id ${gatewayId}`
343
- });
344
- }
345
-
346
- // src/llm/model/provider-registry.generated.ts
347
- var PROVIDER_REGISTRY = {
348
- "moonshotai-cn": {
349
- url: "https://api.moonshot.cn/v1",
350
- apiKeyEnvVar: "MOONSHOT_API_KEY",
351
- apiKeyHeader: "Authorization",
352
- name: "Moonshot AI (China)",
353
- models: ["kimi-k2-0711-preview", "kimi-k2-0905-preview", "kimi-k2-turbo-preview"],
354
- docUrl: "https://platform.moonshot.cn/docs/api/chat",
355
- gateway: "models.dev"
356
- },
357
- lucidquery: {
358
- url: "https://lucidquery.com/api/v1",
359
- apiKeyEnvVar: "LUCIDQUERY_API_KEY",
360
- apiKeyHeader: "Authorization",
361
- name: "LucidQuery AI",
362
- models: ["lucidnova-rf1-100b", "lucidquery-nexus-coder"],
363
- docUrl: "https://lucidquery.com/api/docs",
364
- gateway: "models.dev"
365
- },
366
- moonshotai: {
367
- url: "https://api.moonshot.ai/v1",
368
- apiKeyEnvVar: "MOONSHOT_API_KEY",
369
- apiKeyHeader: "Authorization",
370
- name: "Moonshot AI",
371
- models: ["kimi-k2-0711-preview", "kimi-k2-0905-preview", "kimi-k2-turbo-preview"],
372
- docUrl: "https://platform.moonshot.ai/docs/api/chat",
373
- gateway: "models.dev"
374
- },
375
- "zai-coding-plan": {
376
- url: "https://api.z.ai/api/coding/paas/v4",
377
- apiKeyEnvVar: "ZHIPU_API_KEY",
378
- apiKeyHeader: "Authorization",
379
- name: "Z.AI Coding Plan",
380
- models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
381
- docUrl: "https://docs.z.ai/devpack/overview",
382
- gateway: "models.dev"
383
- },
384
- alibaba: {
385
- url: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
386
- apiKeyEnvVar: "DASHSCOPE_API_KEY",
387
- apiKeyHeader: "Authorization",
388
- name: "Alibaba",
389
- models: ["qwen3-coder-plus"],
390
- docUrl: "https://www.alibabacloud.com/help/en/model-studio/models",
391
- gateway: "models.dev"
392
- },
393
- xai: {
394
- apiKeyEnvVar: "XAI_API_KEY",
395
- name: "xAI",
396
- models: [
397
- "grok-2",
398
- "grok-2-1212",
399
- "grok-2-latest",
400
- "grok-2-vision",
401
- "grok-2-vision-1212",
402
- "grok-2-vision-latest",
403
- "grok-3",
404
- "grok-3-fast",
405
- "grok-3-fast-latest",
406
- "grok-3-latest",
407
- "grok-3-mini",
408
- "grok-3-mini-fast",
409
- "grok-3-mini-fast-latest",
410
- "grok-3-mini-latest",
411
- "grok-4",
412
- "grok-4-fast",
413
- "grok-4-fast-non-reasoning",
414
- "grok-beta",
415
- "grok-code-fast-1",
416
- "grok-vision-beta"
417
- ],
418
- docUrl: "https://docs.x.ai/docs/models",
419
- gateway: "models.dev"
420
- },
421
- nvidia: {
422
- url: "https://integrate.api.nvidia.com/v1",
423
- apiKeyEnvVar: "NVIDIA_API_KEY",
424
- apiKeyHeader: "Authorization",
425
- name: "Nvidia",
426
- models: [
427
- "black-forest-labs/flux.1-dev",
428
- "deepseek-ai/deepseek-v3.1",
429
- "google/gemma-3-27b-it",
430
- "microsoft/phi-4-mini-instruct",
431
- "moonshotai/kimi-k2-instruct",
432
- "nvidia/cosmos-nemotron-34b",
433
- "nvidia/llama-3.1-nemotron-ultra-253b-v1",
434
- "nvidia/nemoretriever-ocr-v1",
435
- "nvidia/parakeet-tdt-0.6b-v2",
436
- "openai/gpt-oss-120b",
437
- "openai/whisper-large-v3",
438
- "qwen/qwen3-235b-a22b",
439
- "qwen/qwen3-coder-480b-a35b-instruct"
440
- ],
441
- docUrl: "https://docs.api.nvidia.com/nim/",
442
- gateway: "models.dev"
443
- },
444
- upstage: {
445
- url: "https://api.upstage.ai",
446
- apiKeyEnvVar: "UPSTAGE_API_KEY",
447
- apiKeyHeader: "Authorization",
448
- name: "Upstage",
449
- models: ["solar-mini", "solar-pro2"],
450
- docUrl: "https://developers.upstage.ai/docs/apis/chat",
451
- gateway: "models.dev"
452
- },
453
- groq: {
454
- url: "https://api.groq.com/openai/v1",
455
- apiKeyEnvVar: "GROQ_API_KEY",
456
- apiKeyHeader: "Authorization",
457
- name: "Groq",
458
- models: [
459
- "deepseek-r1-distill-llama-70b",
460
- "gemma2-9b-it",
461
- "llama-3.1-8b-instant",
462
- "llama-3.3-70b-versatile",
463
- "llama-guard-3-8b",
464
- "llama3-70b-8192",
465
- "llama3-8b-8192",
466
- "meta-llama/llama-4-maverick-17b-128e-instruct",
467
- "meta-llama/llama-4-scout-17b-16e-instruct",
468
- "meta-llama/llama-guard-4-12b",
469
- "mistral-saba-24b",
470
- "moonshotai/kimi-k2-instruct",
471
- "moonshotai/kimi-k2-instruct-0905",
472
- "openai/gpt-oss-120b",
473
- "openai/gpt-oss-20b",
474
- "qwen-qwq-32b",
475
- "qwen/qwen3-32b"
476
- ],
477
- docUrl: "https://console.groq.com/docs/models",
478
- gateway: "models.dev"
479
- },
480
- mistral: {
481
- url: "https://api.mistral.ai/v1",
482
- apiKeyEnvVar: "MISTRAL_API_KEY",
483
- apiKeyHeader: "Authorization",
484
- name: "Mistral",
485
- models: [
486
- "codestral-latest",
487
- "devstral-medium-2507",
488
- "devstral-small-2505",
489
- "devstral-small-2507",
490
- "magistral-medium-latest",
491
- "magistral-small",
492
- "ministral-3b-latest",
493
- "ministral-8b-latest",
494
- "mistral-large-latest",
495
- "mistral-medium-2505",
496
- "mistral-medium-2508",
497
- "mistral-medium-latest",
498
- "mistral-nemo",
499
- "mistral-small-latest",
500
- "open-mistral-7b",
501
- "open-mixtral-8x22b",
502
- "open-mixtral-8x7b",
503
- "pixtral-12b",
504
- "pixtral-large-latest"
505
- ],
506
- docUrl: "https://docs.mistral.ai/getting-started/models/",
507
- gateway: "models.dev"
508
- },
509
- vercel: {
510
- url: "https://ai-gateway.vercel.sh/v1",
511
- apiKeyEnvVar: "AI_GATEWAY_API_KEY",
512
- apiKeyHeader: "Authorization",
513
- name: "Vercel AI Gateway",
514
- models: [
515
- "amazon/nova-lite",
516
- "amazon/nova-micro",
517
- "amazon/nova-pro",
518
- "anthropic/claude-3-5-haiku",
519
- "anthropic/claude-3-haiku",
520
- "anthropic/claude-3-opus",
521
- "anthropic/claude-3.5-sonnet",
522
- "anthropic/claude-3.7-sonnet",
523
- "anthropic/claude-4-1-opus",
524
- "anthropic/claude-4-opus",
525
- "anthropic/claude-4-sonnet",
526
- "anthropic/claude-4.5-sonnet",
527
- "cerebras/qwen3-coder",
528
- "deepseek/deepseek-r1",
529
- "deepseek/deepseek-r1-distill-llama-70b",
530
- "google/gemini-2.0-flash",
531
- "google/gemini-2.0-flash-lite",
532
- "google/gemini-2.5-flash",
533
- "google/gemini-2.5-pro",
534
- "meta/llama-3.3-70b",
535
- "meta/llama-4-maverick",
536
- "meta/llama-4-scout",
537
- "mistral/codestral",
538
- "mistral/magistral-medium",
539
- "mistral/magistral-small",
540
- "mistral/ministral-3b",
541
- "mistral/ministral-8b",
542
- "mistral/mistral-large",
543
- "mistral/mistral-small",
544
- "mistral/mixtral-8x22b-instruct",
545
- "mistral/pixtral-12b",
546
- "mistral/pixtral-large",
547
- "moonshotai/kimi-k2",
548
- "morph/morph-v3-fast",
549
- "morph/morph-v3-large",
550
- "openai/gpt-4-turbo",
551
- "openai/gpt-4.1",
552
- "openai/gpt-4.1-mini",
553
- "openai/gpt-4.1-nano",
554
- "openai/gpt-4o",
555
- "openai/gpt-4o-mini",
556
- "openai/gpt-5",
557
- "openai/gpt-5-codex",
558
- "openai/gpt-5-mini",
559
- "openai/gpt-5-nano",
560
- "openai/gpt-oss-120b",
561
- "openai/gpt-oss-20b",
562
- "openai/o1",
563
- "openai/o3",
564
- "openai/o3-mini",
565
- "openai/o4-mini",
566
- "vercel/v0-1.0-md",
567
- "vercel/v0-1.5-md",
568
- "xai/grok-2",
569
- "xai/grok-2-vision",
570
- "xai/grok-3",
571
- "xai/grok-3-fast",
572
- "xai/grok-3-mini",
573
- "xai/grok-3-mini-fast",
574
- "xai/grok-4",
575
- "xai/grok-4-fast",
576
- "xai/grok-4-fast-non-reasoning",
577
- "xai/grok-code-fast-1"
578
- ],
579
- docUrl: "https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway",
580
- gateway: "models.dev"
581
- },
582
- deepseek: {
583
- url: "https://api.deepseek.com",
584
- apiKeyEnvVar: "DEEPSEEK_API_KEY",
585
- apiKeyHeader: "Authorization",
586
- name: "DeepSeek",
587
- models: ["deepseek-chat", "deepseek-reasoner"],
588
- docUrl: "https://platform.deepseek.com/api-docs/pricing",
589
- gateway: "models.dev"
590
- },
591
- "alibaba-cn": {
592
- url: "https://dashscope.aliyuncs.com/compatible-mode/v1",
593
- apiKeyEnvVar: "DASHSCOPE_API_KEY",
594
- apiKeyHeader: "Authorization",
595
- name: "Alibaba (China)",
596
- models: ["qwen3-coder-plus"],
597
- docUrl: "https://www.alibabacloud.com/help/en/model-studio/models",
598
- gateway: "models.dev"
599
- },
600
- venice: {
601
- url: "https://api.venice.ai/api/v1",
602
- apiKeyEnvVar: "VENICE_API_KEY",
603
- apiKeyHeader: "Authorization",
604
- name: "Venice AI",
605
- models: [
606
- "deepseek-coder-v2-lite",
607
- "deepseek-r1-671b",
608
- "dolphin-2.9.2-qwen2-72b",
609
- "llama-3.1-405b",
610
- "llama-3.2-3b",
611
- "llama-3.3-70b",
612
- "mistral-31-24b",
613
- "qwen-2.5-coder-32b",
614
- "qwen-2.5-qwq-32b",
615
- "qwen-2.5-vl",
616
- "qwen3-235b",
617
- "qwen3-4b",
618
- "venice-uncensored"
619
- ],
620
- docUrl: "https://docs.venice.ai",
621
- gateway: "models.dev"
622
- },
623
- chutes: {
624
- url: "https://llm.chutes.ai/v1",
625
- apiKeyEnvVar: "CHUTES_API_KEY",
626
- apiKeyHeader: "Authorization",
627
- name: "Chutes",
628
- models: [
629
- "Qwen/Qwen3-235B-A22B-Instruct-2507",
630
- "Qwen/Qwen3-235B-A22B-Thinking-2507",
631
- "Qwen/Qwen3-30B-A3B",
632
- "Qwen/Qwen3-30B-A3B-Instruct-2507",
633
- "Qwen/Qwen3-30B-A3B-Thinking-2507",
634
- "Qwen/Qwen3-Coder-30B-A3B-Instruct",
635
- "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
636
- "Qwen/Qwen3-Next-80B-A3B-Instruct",
637
- "Qwen/Qwen3-Next-80B-A3B-Thinking",
638
- "chutesai/Devstral-Small-2505",
639
- "chutesai/Mistral-Small-3.2-24B-Instruct-2506",
640
- "deepseek-ai/DeepSeek-R1-0528",
641
- "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
642
- "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
643
- "deepseek-ai/DeepSeek-V3-0324",
644
- "deepseek-ai/DeepSeek-V3.1",
645
- "deepseek-ai/DeepSeek-V3.1-Terminus",
646
- "deepseek-ai/DeepSeek-V3.1-turbo",
647
- "deepseek-ai/DeepSeek-V3.1:THINKING",
648
- "meituan-longcat/LongCat-Flash-Chat-FP8",
649
- "moonshotai/Kimi-Dev-72B",
650
- "moonshotai/Kimi-K2-Instruct-0905",
651
- "moonshotai/Kimi-K2-Instruct-75k",
652
- "moonshotai/Kimi-VL-A3B-Thinking",
653
- "openai/gpt-oss-120b",
654
- "tngtech/DeepSeek-R1T-Chimera",
655
- "tngtech/DeepSeek-TNG-R1T2-Chimera",
656
- "zai-org/GLM-4.5-Air",
657
- "zai-org/GLM-4.5-FP8",
658
- "zai-org/GLM-4.5-turbo",
659
- "zai-org/GLM-4.6-FP8"
660
- ],
661
- docUrl: "https://llm.chutes.ai/v1/models",
662
- gateway: "models.dev"
663
- },
664
- cortecs: {
665
- url: "https://api.cortecs.ai/v1",
666
- apiKeyEnvVar: "CORTECS_API_KEY",
667
- apiKeyHeader: "Authorization",
668
- name: "Cortecs",
669
- models: [
670
- "claude-sonnet-4",
671
- "deepseek-v3-0324",
672
- "gemini-2.5-pro",
673
- "gpt-4.1",
674
- "gpt-oss-120b",
675
- "kimi-k2-instruct",
676
- "llama-3.1-405b-instruct",
677
- "nova-pro-v1",
678
- "qwen3-32b",
679
- "qwen3-coder-480b-a35b-instruct"
680
- ],
681
- docUrl: "https://api.cortecs.ai/v1/models",
682
- gateway: "models.dev"
683
- },
684
- "github-models": {
685
- url: "https://models.github.ai/inference",
686
- apiKeyEnvVar: "GITHUB_TOKEN",
687
- apiKeyHeader: "Authorization",
688
- name: "GitHub Models",
689
- models: [
690
- "ai21-labs/ai21-jamba-1.5-large",
691
- "ai21-labs/ai21-jamba-1.5-mini",
692
- "cohere/cohere-command-a",
693
- "cohere/cohere-command-r",
694
- "cohere/cohere-command-r-08-2024",
695
- "cohere/cohere-command-r-plus",
696
- "cohere/cohere-command-r-plus-08-2024",
697
- "core42/jais-30b-chat",
698
- "deepseek/deepseek-r1",
699
- "deepseek/deepseek-r1-0528",
700
- "deepseek/deepseek-v3-0324",
701
- "meta/llama-3.2-11b-vision-instruct",
702
- "meta/llama-3.2-90b-vision-instruct",
703
- "meta/llama-3.3-70b-instruct",
704
- "meta/llama-4-maverick-17b-128e-instruct-fp8",
705
- "meta/llama-4-scout-17b-16e-instruct",
706
- "meta/meta-llama-3-70b-instruct",
707
- "meta/meta-llama-3-8b-instruct",
708
- "meta/meta-llama-3.1-405b-instruct",
709
- "meta/meta-llama-3.1-70b-instruct",
710
- "meta/meta-llama-3.1-8b-instruct",
711
- "microsoft/mai-ds-r1",
712
- "microsoft/phi-3-medium-128k-instruct",
713
- "microsoft/phi-3-medium-4k-instruct",
714
- "microsoft/phi-3-mini-128k-instruct",
715
- "microsoft/phi-3-mini-4k-instruct",
716
- "microsoft/phi-3-small-128k-instruct",
717
- "microsoft/phi-3-small-8k-instruct",
718
- "microsoft/phi-3.5-mini-instruct",
719
- "microsoft/phi-3.5-moe-instruct",
720
- "microsoft/phi-3.5-vision-instruct",
721
- "microsoft/phi-4",
722
- "microsoft/phi-4-mini-instruct",
723
- "microsoft/phi-4-mini-reasoning",
724
- "microsoft/phi-4-multimodal-instruct",
725
- "microsoft/phi-4-reasoning",
726
- "mistral-ai/codestral-2501",
727
- "mistral-ai/ministral-3b",
728
- "mistral-ai/mistral-large-2411",
729
- "mistral-ai/mistral-medium-2505",
730
- "mistral-ai/mistral-nemo",
731
- "mistral-ai/mistral-small-2503",
732
- "openai/gpt-4.1",
733
- "openai/gpt-4.1-mini",
734
- "openai/gpt-4.1-nano",
735
- "openai/gpt-4o",
736
- "openai/gpt-4o-mini",
737
- "openai/o1",
738
- "openai/o1-mini",
739
- "openai/o1-preview",
740
- "openai/o3",
741
- "openai/o3-mini",
742
- "openai/o4-mini",
743
- "xai/grok-3",
744
- "xai/grok-3-mini"
745
- ],
746
- docUrl: "https://docs.github.com/en/github-models",
747
- gateway: "models.dev"
748
- },
749
- togetherai: {
750
- url: "https://api.together.xyz/v1",
751
- apiKeyEnvVar: "TOGETHER_API_KEY",
752
- apiKeyHeader: "Authorization",
753
- name: "Together AI",
754
- models: [
755
- "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
756
- "deepseek-ai/DeepSeek-R1",
757
- "deepseek-ai/DeepSeek-V3",
758
- "meta-llama/Llama-3.3-70B-Instruct-Turbo",
759
- "moonshotai/Kimi-K2-Instruct",
760
- "openai/gpt-oss-120b"
761
- ],
762
- docUrl: "https://docs.together.ai/docs/serverless-models",
763
- gateway: "models.dev"
764
- },
765
- baseten: {
766
- url: "https://inference.baseten.co/v1",
767
- apiKeyEnvVar: "BASETEN_API_KEY",
768
- apiKeyHeader: "Authorization",
769
- name: "Baseten",
770
- models: ["Qwen3/Qwen3-Coder-480B-A35B-Instruct", "moonshotai/Kimi-K2-Instruct-0905"],
771
- docUrl: "https://docs.baseten.co/development/model-apis/overview",
772
- gateway: "models.dev"
773
- },
774
- huggingface: {
775
- url: "https://router.huggingface.co/v1",
776
- apiKeyEnvVar: "HF_TOKEN",
777
- apiKeyHeader: "Authorization",
778
- name: "Hugging Face",
779
- models: [
780
- "Qwen/Qwen3-235B-A22B-Thinking-2507",
781
- "Qwen/Qwen3-Coder-480B-A35B-Instruct",
782
- "Qwen/Qwen3-Next-80B-A3B-Instruct",
783
- "Qwen/Qwen3-Next-80B-A3B-Thinking",
784
- "deepseek-ai/DeepSeek-R1-0528",
785
- "deepseek-ai/Deepseek-V3-0324",
786
- "moonshotai/Kimi-K2-Instruct",
787
- "moonshotai/Kimi-K2-Instruct-0905",
788
- "zai-org/GLM-4.5",
789
- "zai-org/GLM-4.5-Air",
790
- "zai-org/GLM-4.6"
791
- ],
792
- docUrl: "https://huggingface.co/docs/inference-providers",
793
- gateway: "models.dev"
794
- },
795
- opencode: {
796
- url: "https://opencode.ai/zen/v1",
797
- apiKeyEnvVar: "OPENCODE_API_KEY",
798
- apiKeyHeader: "Authorization",
799
- name: "OpenCode Zen",
800
- models: [
801
- "claude-3-5-haiku",
802
- "claude-opus-4-1",
803
- "claude-sonnet-4",
804
- "claude-sonnet-4-5",
805
- "code-supernova",
806
- "glm-4.6",
807
- "gpt-5",
808
- "gpt-5-codex",
809
- "grok-code",
810
- "kimi-k2",
811
- "qwen3-coder",
812
- "qwen3-max"
813
- ],
814
- docUrl: "https://opencode.ai/docs/zen",
815
- gateway: "models.dev"
816
- },
817
- fastrouter: {
818
- url: "https://go.fastrouter.ai/api/v1",
819
- apiKeyEnvVar: "FASTROUTER_API_KEY",
820
- apiKeyHeader: "Authorization",
821
- name: "FastRouter",
822
- models: [
823
- "anthropic/claude-opus-4.1",
824
- "anthropic/claude-sonnet-4",
825
- "deepseek-ai/deepseek-r1-distill-llama-70b",
826
- "google/gemini-2.5-flash",
827
- "google/gemini-2.5-pro",
828
- "moonshotai/kimi-k2",
829
- "openai/gpt-4.1",
830
- "openai/gpt-5",
831
- "openai/gpt-5-mini",
832
- "openai/gpt-5-nano",
833
- "openai/gpt-oss-120b",
834
- "openai/gpt-oss-20b",
835
- "qwen/qwen3-coder",
836
- "x-ai/grok-4"
837
- ],
838
- docUrl: "https://fastrouter.ai/models",
839
- gateway: "models.dev"
840
- },
841
- google: {
842
- apiKeyEnvVar: "GOOGLE_GENERATIVE_AI_API_KEY",
843
- name: "Google",
844
- models: [
845
- "gemini-1.5-flash",
846
- "gemini-1.5-flash-8b",
847
- "gemini-1.5-pro",
848
- "gemini-2.0-flash",
849
- "gemini-2.0-flash-lite",
850
- "gemini-2.5-flash",
851
- "gemini-2.5-flash-lite",
852
- "gemini-2.5-flash-lite-preview-06-17",
853
- "gemini-2.5-flash-lite-preview-09-2025",
854
- "gemini-2.5-flash-preview-04-17",
855
- "gemini-2.5-flash-preview-05-20",
856
- "gemini-2.5-flash-preview-09-2025",
857
- "gemini-2.5-pro",
858
- "gemini-2.5-pro-preview-05-06",
859
- "gemini-2.5-pro-preview-06-05",
860
- "gemini-flash-latest",
861
- "gemini-flash-lite-latest",
862
- "gemini-live-2.5-flash-preview-native-audio"
863
- ],
864
- docUrl: "https://ai.google.dev/gemini-api/docs/pricing",
865
- gateway: "models.dev"
866
- },
867
- inception: {
868
- url: "https://api.inceptionlabs.ai/v1/",
869
- apiKeyEnvVar: "INCEPTION_API_KEY",
870
- apiKeyHeader: "Authorization",
871
- name: "Inception",
872
- models: ["mercury", "mercury-coder"],
873
- docUrl: "https://platform.inceptionlabs.ai/docs",
874
- gateway: "models.dev"
875
- },
876
- wandb: {
877
- url: "https://api.inference.wandb.ai/v1",
878
- apiKeyEnvVar: "WANDB_API_KEY",
879
- apiKeyHeader: "Authorization",
880
- name: "Weights & Biases",
881
- models: [
882
- "Qwen/Qwen3-235B-A22B-Instruct-2507",
883
- "Qwen/Qwen3-235B-A22B-Thinking-2507",
884
- "Qwen/Qwen3-Coder-480B-A35B-Instruct",
885
- "deepseek-ai/DeepSeek-R1-0528",
886
- "deepseek-ai/DeepSeek-V3-0324",
887
- "meta-llama/Llama-3.1-8B-Instruct",
888
- "meta-llama/Llama-3.3-70B-Instruct",
889
- "meta-llama/Llama-4-Scout-17B-16E-Instruct",
890
- "microsoft/Phi-4-mini-instruct",
891
- "moonshotai/Kimi-K2-Instruct"
892
- ],
893
- docUrl: "https://weave-docs.wandb.ai/guides/integrations/inference/",
894
- gateway: "models.dev"
895
- },
896
- openai: {
897
- apiKeyEnvVar: "OPENAI_API_KEY",
898
- name: "OpenAI",
899
- models: [
900
- "codex-mini-latest",
901
- "gpt-3.5-turbo",
902
- "gpt-4",
903
- "gpt-4-turbo",
904
- "gpt-4.1",
905
- "gpt-4.1-mini",
906
- "gpt-4.1-nano",
907
- "gpt-4o",
908
- "gpt-4o-2024-05-13",
909
- "gpt-4o-2024-08-06",
910
- "gpt-4o-2024-11-20",
911
- "gpt-4o-mini",
912
- "gpt-5",
913
- "gpt-5-chat-latest",
914
- "gpt-5-codex",
915
- "gpt-5-mini",
916
- "gpt-5-nano",
917
- "o1",
918
- "o1-mini",
919
- "o1-preview",
920
- "o1-pro",
921
- "o3",
922
- "o3-deep-research",
923
- "o3-mini",
924
- "o3-pro",
925
- "o4-mini",
926
- "o4-mini-deep-research"
927
- ],
928
- docUrl: "https://platform.openai.com/docs/models",
929
- gateway: "models.dev"
930
- },
931
- "zhipuai-coding-plan": {
932
- url: "https://open.bigmodel.cn/api/coding/paas/v4",
933
- apiKeyEnvVar: "ZHIPU_API_KEY",
934
- apiKeyHeader: "Authorization",
935
- name: "Zhipu AI Coding Plan",
936
- models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
937
- docUrl: "https://docs.bigmodel.cn/cn/coding-plan/overview",
938
- gateway: "models.dev"
939
- },
940
- perplexity: {
941
- url: "https://api.perplexity.ai",
942
- apiKeyEnvVar: "PERPLEXITY_API_KEY",
943
- apiKeyHeader: "Authorization",
944
- name: "Perplexity",
945
- models: ["sonar", "sonar-pro", "sonar-reasoning", "sonar-reasoning-pro"],
946
- docUrl: "https://docs.perplexity.ai",
947
- gateway: "models.dev"
948
- },
949
- openrouter: {
950
- url: "https://openrouter.ai/api/v1",
951
- apiKeyEnvVar: "OPENROUTER_API_KEY",
952
- name: "OpenRouter",
953
- models: [
954
- "anthropic/claude-3.5-haiku",
955
- "anthropic/claude-3.7-sonnet",
956
- "anthropic/claude-opus-4",
957
- "anthropic/claude-opus-4.1",
958
- "anthropic/claude-sonnet-4",
959
- "anthropic/claude-sonnet-4.5",
960
- "cognitivecomputations/dolphin3.0-mistral-24b",
961
- "cognitivecomputations/dolphin3.0-r1-mistral-24b",
962
- "deepseek/deepseek-chat-v3-0324",
963
- "deepseek/deepseek-chat-v3.1",
964
- "deepseek/deepseek-r1-0528-qwen3-8b:free",
965
- "deepseek/deepseek-r1-0528:free",
966
- "deepseek/deepseek-r1-distill-llama-70b",
967
- "deepseek/deepseek-r1-distill-qwen-14b",
968
- "deepseek/deepseek-r1:free",
969
- "deepseek/deepseek-v3-base:free",
970
- "deepseek/deepseek-v3.1-terminus",
971
- "featherless/qwerky-72b",
972
- "google/gemini-2.0-flash-001",
973
- "google/gemini-2.0-flash-exp:free",
974
- "google/gemini-2.5-flash",
975
- "google/gemini-2.5-pro",
976
- "google/gemini-2.5-pro-preview-05-06",
977
- "google/gemini-2.5-pro-preview-06-05",
978
- "google/gemma-2-9b-it:free",
979
- "google/gemma-3-12b-it",
980
- "google/gemma-3-27b-it",
981
- "google/gemma-3n-e4b-it",
982
- "google/gemma-3n-e4b-it:free",
983
- "meta-llama/llama-3.2-11b-vision-instruct",
984
- "meta-llama/llama-3.3-70b-instruct:free",
985
- "meta-llama/llama-4-scout:free",
986
- "microsoft/mai-ds-r1:free",
987
- "mistralai/codestral-2508",
988
- "mistralai/devstral-medium-2507",
989
- "mistralai/devstral-small-2505",
990
- "mistralai/devstral-small-2505:free",
991
- "mistralai/devstral-small-2507",
992
- "mistralai/mistral-7b-instruct:free",
993
- "mistralai/mistral-medium-3",
994
- "mistralai/mistral-medium-3.1",
995
- "mistralai/mistral-nemo:free",
996
- "mistralai/mistral-small-3.1-24b-instruct",
997
- "mistralai/mistral-small-3.2-24b-instruct",
998
- "mistralai/mistral-small-3.2-24b-instruct:free",
999
- "moonshotai/kimi-dev-72b:free",
1000
- "moonshotai/kimi-k2",
1001
- "moonshotai/kimi-k2-0905",
1002
- "moonshotai/kimi-k2:free",
1003
- "nousresearch/deephermes-3-llama-3-8b-preview",
1004
- "nousresearch/hermes-4-405b",
1005
- "nousresearch/hermes-4-70b",
1006
- "openai/gpt-4.1",
1007
- "openai/gpt-4.1-mini",
1008
- "openai/gpt-4o-mini",
1009
- "openai/gpt-5",
1010
- "openai/gpt-5-chat",
1011
- "openai/gpt-5-codex",
1012
- "openai/gpt-5-mini",
1013
- "openai/gpt-5-nano",
1014
- "openai/gpt-oss-120b",
1015
- "openai/gpt-oss-20b",
1016
- "openai/o4-mini",
1017
- "openrouter/cypher-alpha:free",
1018
- "openrouter/horizon-alpha",
1019
- "openrouter/horizon-beta",
1020
- "openrouter/sonoma-dusk-alpha",
1021
- "openrouter/sonoma-sky-alpha",
1022
- "qwen/qwen-2.5-coder-32b-instruct",
1023
- "qwen/qwen2.5-vl-32b-instruct:free",
1024
- "qwen/qwen2.5-vl-72b-instruct",
1025
- "qwen/qwen2.5-vl-72b-instruct:free",
1026
- "qwen/qwen3-14b:free",
1027
- "qwen/qwen3-235b-a22b-07-25",
1028
- "qwen/qwen3-235b-a22b-07-25:free",
1029
- "qwen/qwen3-235b-a22b-thinking-2507",
1030
- "qwen/qwen3-235b-a22b:free",
1031
- "qwen/qwen3-30b-a3b-instruct-2507",
1032
- "qwen/qwen3-30b-a3b:free",
1033
- "qwen/qwen3-32b:free",
1034
- "qwen/qwen3-8b:free",
1035
- "qwen/qwen3-coder",
1036
- "qwen/qwen3-coder:free",
1037
- "qwen/qwen3-max",
1038
- "qwen/qwen3-next-80b-a3b-instruct",
1039
- "qwen/qwq-32b:free",
1040
- "rekaai/reka-flash-3",
1041
- "sarvamai/sarvam-m:free",
1042
- "thudm/glm-z1-32b:free",
1043
- "tngtech/deepseek-r1t2-chimera:free",
1044
- "x-ai/grok-3",
1045
- "x-ai/grok-3-beta",
1046
- "x-ai/grok-3-mini",
1047
- "x-ai/grok-3-mini-beta",
1048
- "x-ai/grok-4",
1049
- "x-ai/grok-4-fast",
1050
- "x-ai/grok-4-fast:free",
1051
- "x-ai/grok-code-fast-1",
1052
- "z-ai/glm-4.5",
1053
- "z-ai/glm-4.5-air",
1054
- "z-ai/glm-4.5-air:free",
1055
- "z-ai/glm-4.5v",
1056
- "z-ai/glm-4.6"
1057
- ],
1058
- docUrl: "https://openrouter.ai/models",
1059
- gateway: "models.dev"
1060
- },
1061
- synthetic: {
1062
- url: "https://api.synthetic.new/v1",
1063
- apiKeyEnvVar: "SYNTHETIC_API_KEY",
1064
- apiKeyHeader: "Authorization",
1065
- name: "Synthetic",
1066
- models: [
1067
- "hf:Qwen/Qwen2.5-Coder-32B-Instruct",
1068
- "hf:Qwen/Qwen3-235B-A22B-Instruct-2507",
1069
- "hf:Qwen/Qwen3-235B-A22B-Thinking-2507",
1070
- "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct",
1071
- "hf:deepseek-ai/DeepSeek-R1",
1072
- "hf:deepseek-ai/DeepSeek-R1-0528",
1073
- "hf:deepseek-ai/DeepSeek-V3",
1074
- "hf:deepseek-ai/DeepSeek-V3-0324",
1075
- "hf:deepseek-ai/DeepSeek-V3.1",
1076
- "hf:deepseek-ai/DeepSeek-V3.1-Terminus",
1077
- "hf:meta-llama/Llama-3.1-405B-Instruct",
1078
- "hf:meta-llama/Llama-3.1-70B-Instruct",
1079
- "hf:meta-llama/Llama-3.1-8B-Instruct",
1080
- "hf:meta-llama/Llama-3.3-70B-Instruct",
1081
- "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",
1082
- "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct",
1083
- "hf:moonshotai/Kimi-K2-Instruct",
1084
- "hf:moonshotai/Kimi-K2-Instruct-0905",
1085
- "hf:openai/gpt-oss-120b",
1086
- "hf:zai-org/GLM-4.5",
1087
- "hf:zai-org/GLM-4.6"
1088
- ],
1089
- docUrl: "https://synthetic.new/pricing",
1090
- gateway: "models.dev"
1091
- },
1092
- deepinfra: {
1093
- url: "https://api.deepinfra.com/v1/openai",
1094
- apiKeyEnvVar: "DEEPINFRA_API_KEY",
1095
- apiKeyHeader: "Authorization",
1096
- name: "Deep Infra",
1097
- models: [
1098
- "Qwen/Qwen3-Coder-480B-A35B-Instruct",
1099
- "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo",
1100
- "moonshotai/Kimi-K2-Instruct",
1101
- "zai-org/GLM-4.5"
1102
- ],
1103
- docUrl: "https://deepinfra.com/models",
1104
- gateway: "models.dev"
1105
- },
1106
- zhipuai: {
1107
- url: "https://open.bigmodel.cn/api/paas/v4",
1108
- apiKeyEnvVar: "ZHIPU_API_KEY",
1109
- apiKeyHeader: "Authorization",
1110
- name: "Zhipu AI",
1111
- models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
1112
- docUrl: "https://docs.z.ai/guides/overview/pricing",
1113
- gateway: "models.dev"
1114
- },
1115
- submodel: {
1116
- url: "https://llm.submodel.ai/v1",
1117
- apiKeyEnvVar: "SUBMODEL_INSTAGEN_ACCESS_KEY",
1118
- apiKeyHeader: "Authorization",
1119
- name: "submodel",
1120
- models: [
1121
- "Qwen/Qwen3-235B-A22B-Instruct-2507",
1122
- "Qwen/Qwen3-235B-A22B-Thinking-2507",
1123
- "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
1124
- "deepseek-ai/DeepSeek-R1-0528",
1125
- "deepseek-ai/DeepSeek-V3-0324",
1126
- "deepseek-ai/DeepSeek-V3.1",
1127
- "openai/gpt-oss-120b",
1128
- "zai-org/GLM-4.5-Air",
1129
- "zai-org/GLM-4.5-FP8"
1130
- ],
1131
- docUrl: "https://submodel.gitbook.io",
1132
- gateway: "models.dev"
1133
- },
1134
- zai: {
1135
- url: "https://api.z.ai/api/paas/v4",
1136
- apiKeyEnvVar: "ZHIPU_API_KEY",
1137
- apiKeyHeader: "Authorization",
1138
- name: "Z.AI",
1139
- models: ["glm-4.5", "glm-4.5-air", "glm-4.5-flash", "glm-4.5v", "glm-4.6"],
1140
- docUrl: "https://docs.z.ai/guides/overview/pricing",
1141
- gateway: "models.dev"
1142
- },
1143
- inference: {
1144
- url: "https://inference.net/v1",
1145
- apiKeyEnvVar: "INFERENCE_API_KEY",
1146
- apiKeyHeader: "Authorization",
1147
- name: "Inference",
1148
- models: [
1149
- "google/gemma-3",
1150
- "meta/llama-3.1-8b-instruct",
1151
- "meta/llama-3.2-11b-vision-instruct",
1152
- "meta/llama-3.2-1b-instruct",
1153
- "meta/llama-3.2-3b-instruct",
1154
- "mistral/mistral-nemo-12b-instruct",
1155
- "osmosis/osmosis-structure-0.6b",
1156
- "qwen/qwen-2.5-7b-vision-instruct",
1157
- "qwen/qwen3-embedding-4b"
1158
- ],
1159
- docUrl: "https://inference.net/models",
1160
- gateway: "models.dev"
1161
- },
1162
- requesty: {
1163
- url: "https://router.requesty.ai/v1",
1164
- apiKeyEnvVar: "REQUESTY_API_KEY",
1165
- apiKeyHeader: "Authorization",
1166
- name: "Requesty",
1167
- models: [
1168
- "anthropic/claude-3-7-sonnet",
1169
- "anthropic/claude-4-sonnet-20250522",
1170
- "anthropic/claude-opus-4",
1171
- "anthropic/claude-opus-4-1-20250805",
1172
- "google/gemini-2.5-flash",
1173
- "google/gemini-2.5-pro",
1174
- "openai/gpt-4.1",
1175
- "openai/gpt-4.1-mini",
1176
- "openai/gpt-4o-mini",
1177
- "openai/gpt-5",
1178
- "openai/gpt-5-mini",
1179
- "openai/gpt-5-nano",
1180
- "openai/o4-mini"
1181
- ],
1182
- docUrl: "https://requesty.ai/solution/llm-routing/models",
1183
- gateway: "models.dev"
1184
- },
1185
- morph: {
1186
- url: "https://api.morphllm.com/v1",
1187
- apiKeyEnvVar: "MORPH_API_KEY",
1188
- apiKeyHeader: "Authorization",
1189
- name: "Morph",
1190
- models: ["auto", "morph-v3-fast", "morph-v3-large"],
1191
- docUrl: "https://docs.morphllm.com/api-reference/introduction",
1192
- gateway: "models.dev"
1193
- },
1194
- lmstudio: {
1195
- url: "http://127.0.0.1:1234/v1",
1196
- apiKeyEnvVar: "LMSTUDIO_API_KEY",
1197
- apiKeyHeader: "Authorization",
1198
- name: "LMStudio",
1199
- models: ["openai/gpt-oss-20b", "qwen/qwen3-30b-a3b-2507", "qwen/qwen3-coder-30b"],
1200
- docUrl: "https://lmstudio.ai/models",
1201
- gateway: "models.dev"
1202
- },
1203
- anthropic: {
1204
- apiKeyEnvVar: "ANTHROPIC_API_KEY",
1205
- name: "Anthropic",
1206
- models: [
1207
- "claude-3-5-haiku-20241022",
1208
- "claude-3-5-sonnet-20240620",
1209
- "claude-3-5-sonnet-20241022",
1210
- "claude-3-7-sonnet-20250219",
1211
- "claude-3-haiku-20240307",
1212
- "claude-3-opus-20240229",
1213
- "claude-3-sonnet-20240229",
1214
- "claude-opus-4-1-20250805",
1215
- "claude-opus-4-20250514",
1216
- "claude-sonnet-4-20250514",
1217
- "claude-sonnet-4-5-20250929"
1218
- ],
1219
- docUrl: "https://docs.anthropic.com/en/docs/about-claude/models",
1220
- gateway: "models.dev"
1221
- },
1222
- "fireworks-ai": {
1223
- url: "https://api.fireworks.ai/inference/v1/",
1224
- apiKeyEnvVar: "FIREWORKS_API_KEY",
1225
- apiKeyHeader: "Authorization",
1226
- name: "Fireworks AI",
1227
- models: [
1228
- "accounts/fireworks/models/deepseek-r1-0528",
1229
- "accounts/fireworks/models/deepseek-v3-0324",
1230
- "accounts/fireworks/models/deepseek-v3p1",
1231
- "accounts/fireworks/models/glm-4p5",
1232
- "accounts/fireworks/models/glm-4p5-air",
1233
- "accounts/fireworks/models/gpt-oss-120b",
1234
- "accounts/fireworks/models/gpt-oss-20b",
1235
- "accounts/fireworks/models/kimi-k2-instruct",
1236
- "accounts/fireworks/models/qwen3-235b-a22b",
1237
- "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct"
1238
- ],
1239
- docUrl: "https://fireworks.ai/docs/",
1240
- gateway: "models.dev"
1241
- },
1242
- modelscope: {
1243
- url: "https://api-inference.modelscope.cn/v1",
1244
- apiKeyEnvVar: "MODELSCOPE_API_KEY",
1245
- apiKeyHeader: "Authorization",
1246
- name: "ModelScope",
1247
- models: [
1248
- "Qwen/Qwen3-235B-A22B-Instruct-2507",
1249
- "Qwen/Qwen3-235B-A22B-Thinking-2507",
1250
- "Qwen/Qwen3-30B-A3B-Instruct-2507",
1251
- "Qwen/Qwen3-30B-A3B-Thinking-2507",
1252
- "Qwen/Qwen3-Coder-30B-A3B-Instruct",
1253
- "Qwen/Qwen3-Coder-480B-A35B-Instruct",
1254
- "ZhipuAI/GLM-4.5"
1255
- ],
1256
- docUrl: "https://modelscope.cn/docs/model-service/API-Inference/intro",
1257
- gateway: "models.dev"
1258
- },
1259
- llama: {
1260
- url: "https://api.llama.com/compat/v1/",
1261
- apiKeyEnvVar: "LLAMA_API_KEY",
1262
- apiKeyHeader: "Authorization",
1263
- name: "Llama",
1264
- models: [
1265
- "cerebras-llama-4-maverick-17b-128e-instruct",
1266
- "cerebras-llama-4-scout-17b-16e-instruct",
1267
- "groq-llama-4-maverick-17b-128e-instruct",
1268
- "llama-3.3-70b-instruct",
1269
- "llama-3.3-8b-instruct",
1270
- "llama-4-maverick-17b-128e-instruct-fp8",
1271
- "llama-4-scout-17b-16e-instruct-fp8"
1272
- ],
1273
- docUrl: "https://llama.developer.meta.com/docs/models",
1274
- gateway: "models.dev"
1275
- },
1276
- cerebras: {
1277
- url: "https://api.cerebras.ai/v1",
1278
- apiKeyEnvVar: "CEREBRAS_API_KEY",
1279
- apiKeyHeader: "Authorization",
1280
- name: "Cerebras",
1281
- models: ["gpt-oss-120b", "qwen-3-235b-a22b-instruct-2507", "qwen-3-coder-480b"],
1282
- docUrl: "https://inference-docs.cerebras.ai/models/overview",
1283
- gateway: "models.dev"
1284
- },
1285
- netlify: {
1286
- apiKeyEnvVar: ["NETLIFY_TOKEN", "NETLIFY_SITE_ID"],
1287
- apiKeyHeader: "Authorization",
1288
- name: "Netlify",
1289
- gateway: "netlify",
1290
- models: [
1291
- "anthropic/claude-opus-4-20250514",
1292
- "anthropic/claude-3-7-sonnet-20250219",
1293
- "anthropic/claude-3-7-sonnet-latest",
1294
- "anthropic/claude-3-haiku-20240307",
1295
- "anthropic/claude-opus-4-1-20250805",
1296
- "anthropic/claude-sonnet-4-5-20250929",
1297
- "anthropic/claude-sonnet-4-20250514",
1298
- "anthropic/claude-3-5-haiku-20241022",
1299
- "anthropic/claude-3-5-haiku-latest",
1300
- "gemini/gemini-2.0-flash-lite",
1301
- "gemini/gemini-2.5-flash-image-preview",
1302
- "gemini/gemini-2.5-pro",
1303
- "gemini/gemini-flash-latest",
1304
- "gemini/gemini-2.5-flash-preview-09-2025",
1305
- "gemini/gemini-flash-lite-latest",
1306
- "gemini/gemini-2.5-flash",
1307
- "gemini/gemini-2.5-flash-lite-preview-09-2025",
1308
- "gemini/gemini-2.5-flash-lite",
1309
- "gemini/gemini-2.0-flash",
1310
- "openai/gpt-4o",
1311
- "openai/gpt-4o-mini",
1312
- "openai/o4-mini",
1313
- "openai/o3",
1314
- "openai/gpt-5-pro",
1315
- "openai/gpt-5",
1316
- "openai/gpt-5-codex",
1317
- "openai/gpt-5-mini",
1318
- "openai/gpt-5-nano",
1319
- "openai/gpt-4.1",
1320
- "openai/o3-mini",
1321
- "openai/codex-mini-latest",
1322
- "openai/gpt-4.1-mini",
1323
- "openai/gpt-4.1-nano"
1324
- ],
1325
- docUrl: "https://docs.netlify.com/build/ai-gateway/overview/"
1326
- }
1327
- };
1328
- function getProviderConfig(providerId) {
1329
- return PROVIDER_REGISTRY[providerId];
1330
- }
1331
- function parseModelString(modelString) {
1332
- const firstSlashIndex = modelString.indexOf("/");
1333
- if (firstSlashIndex !== -1) {
1334
- const provider = modelString.substring(0, firstSlashIndex);
1335
- const modelId = modelString.substring(firstSlashIndex + 1);
1336
- if (provider && modelId) {
1337
- return {
1338
- provider,
1339
- modelId
1340
- };
1341
- }
1342
- }
1343
- return {
1344
- provider: null,
1345
- modelId: modelString
1346
- };
1347
- }
1348
-
1349
- // src/llm/model/router.ts
1350
- function getStaticProvidersByGateway(name) {
1351
- return Object.fromEntries(Object.entries(PROVIDER_REGISTRY).filter(([_provider, config]) => config.gateway === name));
1352
- }
1353
- var gateways = [new NetlifyGateway(), new ModelsDevGateway(getStaticProvidersByGateway(`models.dev`))];
1354
- var ModelRouterLanguageModel = class _ModelRouterLanguageModel {
1355
- specificationVersion = "v2";
1356
- defaultObjectGenerationMode = "json";
1357
- supportsStructuredOutputs = true;
1358
- supportsImageUrls = true;
1359
- supportedUrls = {};
1360
- modelId;
1361
- provider;
1362
- config;
1363
- gateway;
1364
- constructor(config) {
1365
- if (typeof config === `string`) config = { id: config };
1366
- const parsedConfig = { ...config, routerId: config.id };
1367
- this.gateway = findGatewayForModel(config.id, gateways);
1368
- const parsed = parseModelRouterId(config.id, this.gateway.prefix);
1369
- this.provider = parsed.providerId || "openai-compatible";
1370
- if (parsed.providerId && parsed.modelId !== config.id) {
1371
- parsedConfig.id = parsed.modelId;
1372
- }
1373
- this.modelId = parsedConfig.id;
1374
- this.config = parsedConfig;
1375
- this.gateway = findGatewayForModel(parsedConfig.routerId, gateways);
1376
- }
1377
- async doGenerate() {
1378
- throw new Error(
1379
- "doGenerate is not supported by Mastra model router. Mastra only uses streaming (doStream) for all LLM calls."
1380
- );
1381
- }
1382
- async doStream(options) {
1383
- let apiKey;
1384
- try {
1385
- apiKey = await this.gateway.getApiKey(this.config.routerId);
1386
- } catch (error) {
1387
- return {
1388
- stream: new ReadableStream({
1389
- start(controller) {
1390
- controller.enqueue({
1391
- type: "error",
1392
- error: error instanceof Error ? error.message : String(error)
1393
- });
1394
- }
1395
- })
1396
- };
1397
- }
1398
- const model = await this.resolveLanguageModel({
1399
- apiKey,
1400
- ...parseModelRouterId(this.config.routerId, this.gateway.prefix)
1401
- });
1402
- return model.doStream(options);
1403
- }
1404
- async resolveLanguageModel({
1405
- modelId,
1406
- providerId,
1407
- apiKey
1408
- }) {
1409
- const key = crypto.createHash("sha256").update(this.gateway.name + modelId + providerId + apiKey).digest("hex");
1410
- if (_ModelRouterLanguageModel.modelInstances.has(key)) return _ModelRouterLanguageModel.modelInstances.get(key);
1411
- const modelInstance = await this.gateway.resolveLanguageModel({ modelId, providerId, apiKey });
1412
- _ModelRouterLanguageModel.modelInstances.set(key, modelInstance);
1413
- return modelInstance;
1414
- }
1415
- static modelInstances = /* @__PURE__ */ new Map();
1416
- };
1417
-
1418
- exports.ModelRouterLanguageModel = ModelRouterLanguageModel;
1419
- exports.PROVIDER_REGISTRY = PROVIDER_REGISTRY;
1420
- exports.getProviderConfig = getProviderConfig;
1421
- exports.parseModelString = parseModelString;
1422
- //# sourceMappingURL=chunk-REVAU76X.cjs.map
1423
- //# sourceMappingURL=chunk-REVAU76X.cjs.map