@mastra/core 0.22.2 → 0.23.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 (199) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/agent/agent.d.ts +5 -1
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.types.d.ts +5 -1
  5. package/dist/agent/agent.types.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +13 -13
  7. package/dist/agent/index.js +2 -2
  8. package/dist/agent/input-processor/index.cjs +6 -6
  9. package/dist/agent/input-processor/index.js +1 -1
  10. package/dist/agent/message-list/index.d.ts +32 -0
  11. package/dist/agent/message-list/index.d.ts.map +1 -1
  12. package/dist/agent/utils.d.ts +2 -8
  13. package/dist/agent/utils.d.ts.map +1 -1
  14. package/dist/agent/workflows/prepare-stream/index.d.ts +6 -2
  15. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  16. package/dist/agent/workflows/prepare-stream/stream-step.d.ts +6 -2
  17. package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
  18. package/dist/ai-tracing/chunk-tracing.d.ts +10 -10
  19. package/dist/ai-tracing/chunk-tracing.d.ts.map +1 -1
  20. package/dist/ai-tracing/index.cjs +36 -36
  21. package/dist/ai-tracing/index.js +1 -1
  22. package/dist/ai-tracing/types.d.ts +17 -17
  23. package/dist/ai-tracing/types.d.ts.map +1 -1
  24. package/dist/{chunk-5CHZUAZV.cjs → chunk-34WQUECJ.cjs} +98 -98
  25. package/dist/chunk-34WQUECJ.cjs.map +1 -0
  26. package/dist/{chunk-VQLW7LPO.js → chunk-34ZCWSUA.js} +3 -3
  27. package/dist/{chunk-VQLW7LPO.js.map → chunk-34ZCWSUA.js.map} +1 -1
  28. package/dist/{chunk-YGL6E6PD.cjs → chunk-3JX2Y3WH.cjs} +9 -9
  29. package/dist/{chunk-YGL6E6PD.cjs.map → chunk-3JX2Y3WH.cjs.map} +1 -1
  30. package/dist/{chunk-RWWOJXMF.cjs → chunk-4XE7GVZM.cjs} +23 -23
  31. package/dist/{chunk-RWWOJXMF.cjs.map → chunk-4XE7GVZM.cjs.map} +1 -1
  32. package/dist/{chunk-FMNZ3BPT.cjs → chunk-4YHU6R7W.cjs} +96 -12
  33. package/dist/chunk-4YHU6R7W.cjs.map +1 -0
  34. package/dist/{chunk-WM4VQWOZ.cjs → chunk-5NTO7S5I.cjs} +72 -2
  35. package/dist/chunk-5NTO7S5I.cjs.map +1 -0
  36. package/dist/{chunk-MQ67HP3O.cjs → chunk-5P4S4AVU.cjs} +4 -4
  37. package/dist/{chunk-MQ67HP3O.cjs.map → chunk-5P4S4AVU.cjs.map} +1 -1
  38. package/dist/{chunk-576KDLXN.cjs → chunk-6KOL2B3A.cjs} +5 -5
  39. package/dist/{chunk-576KDLXN.cjs.map → chunk-6KOL2B3A.cjs.map} +1 -1
  40. package/dist/{chunk-T2RDWNN6.js → chunk-7KYNQSR4.js} +38 -39
  41. package/dist/chunk-7KYNQSR4.js.map +1 -0
  42. package/dist/{chunk-AMHNTB4N.cjs → chunk-7XAVBWZI.cjs} +19 -19
  43. package/dist/{chunk-AMHNTB4N.cjs.map → chunk-7XAVBWZI.cjs.map} +1 -1
  44. package/dist/{chunk-HZIF7HQC.js → chunk-A55YFHFT.js} +8 -8
  45. package/dist/{chunk-HZIF7HQC.js.map → chunk-A55YFHFT.js.map} +1 -1
  46. package/dist/{chunk-2JUDZXVI.cjs → chunk-AQGLVU53.cjs} +6 -6
  47. package/dist/{chunk-2JUDZXVI.cjs.map → chunk-AQGLVU53.cjs.map} +1 -1
  48. package/dist/{chunk-2DVGQK2L.js → chunk-BLUDYAPI.js} +3 -3
  49. package/dist/{chunk-2DVGQK2L.js.map → chunk-BLUDYAPI.js.map} +1 -1
  50. package/dist/{chunk-ROBLMWF6.cjs → chunk-DMBN72QF.cjs} +4 -4
  51. package/dist/{chunk-ROBLMWF6.cjs.map → chunk-DMBN72QF.cjs.map} +1 -1
  52. package/dist/{chunk-HD455BM6.cjs → chunk-DPE27ECD.cjs} +23 -23
  53. package/dist/{chunk-HD455BM6.cjs.map → chunk-DPE27ECD.cjs.map} +1 -1
  54. package/dist/{chunk-CGT36GQE.cjs → chunk-HANVMC6C.cjs} +36 -36
  55. package/dist/{chunk-CGT36GQE.cjs.map → chunk-HANVMC6C.cjs.map} +1 -1
  56. package/dist/{chunk-5NYWRAJN.js → chunk-HFXV34OE.js} +3 -3
  57. package/dist/{chunk-5NYWRAJN.js.map → chunk-HFXV34OE.js.map} +1 -1
  58. package/dist/{chunk-KQBF5ZEN.js → chunk-ITCG6QJR.js} +5 -5
  59. package/dist/{chunk-KQBF5ZEN.js.map → chunk-ITCG6QJR.js.map} +1 -1
  60. package/dist/{chunk-634YFL42.cjs → chunk-JTI6TVDV.cjs} +63 -12
  61. package/dist/chunk-JTI6TVDV.cjs.map +1 -0
  62. package/dist/{chunk-RBO5BUGG.js → chunk-JVV5LREI.js} +3 -3
  63. package/dist/{chunk-RBO5BUGG.js.map → chunk-JVV5LREI.js.map} +1 -1
  64. package/dist/{chunk-A3TQYIIR.js → chunk-JZ7I64PK.js} +93 -9
  65. package/dist/chunk-JZ7I64PK.js.map +1 -0
  66. package/dist/{chunk-PJDIDFKV.js → chunk-MRJUTTCU.js} +3 -3
  67. package/dist/{chunk-PJDIDFKV.js.map → chunk-MRJUTTCU.js.map} +1 -1
  68. package/dist/{chunk-NFIADRH5.js → chunk-NPNGPMT2.js} +3 -3
  69. package/dist/{chunk-NFIADRH5.js.map → chunk-NPNGPMT2.js.map} +1 -1
  70. package/dist/{chunk-IQGDOBME.cjs → chunk-NUAURT4I.cjs} +6 -6
  71. package/dist/{chunk-IQGDOBME.cjs.map → chunk-NUAURT4I.cjs.map} +1 -1
  72. package/dist/{chunk-4PMF7QUH.js → chunk-NVDVFJWA.js} +4 -4
  73. package/dist/{chunk-4PMF7QUH.js.map → chunk-NVDVFJWA.js.map} +1 -1
  74. package/dist/{chunk-M4AX46DS.js → chunk-OIT3PCWA.js} +3 -3
  75. package/dist/{chunk-M4AX46DS.js.map → chunk-OIT3PCWA.js.map} +1 -1
  76. package/dist/{chunk-3CVE7NQC.js → chunk-ONKGWHY6.js} +17 -17
  77. package/dist/chunk-ONKGWHY6.js.map +1 -0
  78. package/dist/{chunk-5GIAZ3CH.cjs → chunk-PDST7KX7.cjs} +22 -22
  79. package/dist/chunk-PDST7KX7.cjs.map +1 -0
  80. package/dist/{chunk-VD27FF3L.js → chunk-PS4ABZY7.js} +7 -7
  81. package/dist/{chunk-VD27FF3L.js.map → chunk-PS4ABZY7.js.map} +1 -1
  82. package/dist/{chunk-T3JFFQH2.js → chunk-PZUZNPFM.js} +72 -3
  83. package/dist/chunk-PZUZNPFM.js.map +1 -0
  84. package/dist/{chunk-VX7NIAMW.js → chunk-QOTPNUIA.js} +5 -5
  85. package/dist/{chunk-VX7NIAMW.js.map → chunk-QOTPNUIA.js.map} +1 -1
  86. package/dist/{chunk-TKYKL7Y4.cjs → chunk-TX4TTPYJ.cjs} +16 -16
  87. package/dist/{chunk-TKYKL7Y4.cjs.map → chunk-TX4TTPYJ.cjs.map} +1 -1
  88. package/dist/{chunk-ZDW322JC.cjs → chunk-TYWQLUF6.cjs} +8 -8
  89. package/dist/{chunk-ZDW322JC.cjs.map → chunk-TYWQLUF6.cjs.map} +1 -1
  90. package/dist/{chunk-A4B6IAKN.cjs → chunk-VTNVK7HN.cjs} +4 -4
  91. package/dist/{chunk-A4B6IAKN.cjs.map → chunk-VTNVK7HN.cjs.map} +1 -1
  92. package/dist/{chunk-I7KJDXUK.cjs → chunk-WBAXXG34.cjs} +19 -19
  93. package/dist/{chunk-I7KJDXUK.cjs.map → chunk-WBAXXG34.cjs.map} +1 -1
  94. package/dist/{chunk-LBEV3YZ2.js → chunk-WCHE6FJ7.js} +4 -4
  95. package/dist/{chunk-LBEV3YZ2.js.map → chunk-WCHE6FJ7.js.map} +1 -1
  96. package/dist/{chunk-Z2OK2JM2.js → chunk-ZISECZZO.js} +3 -3
  97. package/dist/{chunk-Z2OK2JM2.js.map → chunk-ZISECZZO.js.map} +1 -1
  98. package/dist/{chunk-AGD5B3FB.js → chunk-ZWF7AVLU.js} +55 -4
  99. package/dist/chunk-ZWF7AVLU.js.map +1 -0
  100. package/dist/error/index.cjs +9 -5
  101. package/dist/error/index.d.ts +1 -1
  102. package/dist/error/index.d.ts.map +1 -1
  103. package/dist/error/index.js +1 -1
  104. package/dist/error/utils.d.ts +28 -0
  105. package/dist/error/utils.d.ts.map +1 -1
  106. package/dist/eval/index.cjs +3 -3
  107. package/dist/eval/index.js +1 -1
  108. package/dist/index.cjs +72 -68
  109. package/dist/index.js +15 -15
  110. package/dist/llm/index.cjs +7 -7
  111. package/dist/llm/index.js +1 -1
  112. package/dist/llm/model/model.loop.d.ts +1 -1
  113. package/dist/llm/model/model.loop.d.ts.map +1 -1
  114. package/dist/llm/model/provider-registry.d.ts.map +1 -1
  115. package/dist/llm/model/provider-types.generated.d.ts +14 -0
  116. package/dist/loop/index.cjs +2 -2
  117. package/dist/loop/index.js +1 -1
  118. package/dist/loop/loop.d.ts.map +1 -1
  119. package/dist/loop/types.d.ts +6 -3
  120. package/dist/loop/types.d.ts.map +1 -1
  121. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  122. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +1 -1
  123. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
  124. package/dist/loop/workflows/stream.d.ts +1 -1
  125. package/dist/loop/workflows/stream.d.ts.map +1 -1
  126. package/dist/mastra/index.cjs +2 -2
  127. package/dist/mastra/index.js +1 -1
  128. package/dist/memory/index.cjs +4 -4
  129. package/dist/memory/index.js +1 -1
  130. package/dist/netlify-TX6V7SJJ.cjs +12 -0
  131. package/dist/{netlify-F3MVGV4Y.cjs.map → netlify-TX6V7SJJ.cjs.map} +1 -1
  132. package/dist/netlify-VJXBII33.js +3 -0
  133. package/dist/{netlify-26MMY5X4.js.map → netlify-VJXBII33.js.map} +1 -1
  134. package/dist/processors/index.cjs +11 -11
  135. package/dist/processors/index.js +1 -1
  136. package/dist/provider-registry.json +38 -2
  137. package/dist/relevance/index.cjs +4 -4
  138. package/dist/relevance/index.js +1 -1
  139. package/dist/scores/index.cjs +9 -9
  140. package/dist/scores/index.js +2 -2
  141. package/dist/scores/scoreTraces/index.cjs +15 -15
  142. package/dist/scores/scoreTraces/index.cjs.map +1 -1
  143. package/dist/scores/scoreTraces/index.js +6 -6
  144. package/dist/scores/scoreTraces/index.js.map +1 -1
  145. package/dist/server/index.cjs +7 -7
  146. package/dist/server/index.js +2 -2
  147. package/dist/storage/index.cjs +25 -25
  148. package/dist/storage/index.js +4 -4
  149. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  150. package/dist/stream/aisdk/v5/output.d.ts +2 -8
  151. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  152. package/dist/stream/base/output.d.ts +31 -13
  153. package/dist/stream/base/output.d.ts.map +1 -1
  154. package/dist/stream/index.cjs +11 -11
  155. package/dist/stream/index.js +2 -2
  156. package/dist/telemetry/index.cjs +7 -7
  157. package/dist/telemetry/index.js +1 -1
  158. package/dist/test-utils/llm-mock.cjs +2 -2
  159. package/dist/test-utils/llm-mock.js +1 -1
  160. package/dist/tts/index.cjs +2 -2
  161. package/dist/tts/index.js +1 -1
  162. package/dist/utils.cjs +17 -17
  163. package/dist/utils.js +1 -1
  164. package/dist/vector/index.cjs +4 -4
  165. package/dist/vector/index.js +1 -1
  166. package/dist/voice/index.cjs +4 -4
  167. package/dist/voice/index.js +1 -1
  168. package/dist/workflows/default.d.ts +11 -1
  169. package/dist/workflows/default.d.ts.map +1 -1
  170. package/dist/workflows/evented/index.cjs +10 -10
  171. package/dist/workflows/evented/index.js +1 -1
  172. package/dist/workflows/execution-engine.d.ts +3 -0
  173. package/dist/workflows/execution-engine.d.ts.map +1 -1
  174. package/dist/workflows/index.cjs +16 -12
  175. package/dist/workflows/index.js +1 -1
  176. package/dist/workflows/legacy/index.cjs +22 -22
  177. package/dist/workflows/legacy/index.js +1 -1
  178. package/dist/workflows/step.d.ts +1 -1
  179. package/dist/workflows/step.d.ts.map +1 -1
  180. package/dist/workflows/types.d.ts +16 -1
  181. package/dist/workflows/types.d.ts.map +1 -1
  182. package/dist/workflows/utils.d.ts +7 -0
  183. package/dist/workflows/utils.d.ts.map +1 -1
  184. package/dist/workflows/workflow.d.ts +12 -3
  185. package/dist/workflows/workflow.d.ts.map +1 -1
  186. package/package.json +11 -4
  187. package/src/llm/model/provider-types.generated.d.ts +14 -0
  188. package/dist/chunk-3CVE7NQC.js.map +0 -1
  189. package/dist/chunk-5CHZUAZV.cjs.map +0 -1
  190. package/dist/chunk-5GIAZ3CH.cjs.map +0 -1
  191. package/dist/chunk-634YFL42.cjs.map +0 -1
  192. package/dist/chunk-A3TQYIIR.js.map +0 -1
  193. package/dist/chunk-AGD5B3FB.js.map +0 -1
  194. package/dist/chunk-FMNZ3BPT.cjs.map +0 -1
  195. package/dist/chunk-T2RDWNN6.js.map +0 -1
  196. package/dist/chunk-T3JFFQH2.js.map +0 -1
  197. package/dist/chunk-WM4VQWOZ.cjs.map +0 -1
  198. package/dist/netlify-26MMY5X4.js +0 -3
  199. package/dist/netlify-F3MVGV4Y.cjs +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/llm/model/provider-registry.json","../src/llm/model/provider-registry.ts","../src/llm/model/gateways/index.ts","../src/llm/model/router.ts","../src/llm/model/resolve-model.ts","../src/llm/model/embedding-router.ts"],"names":["path","os","fs","require","createRequire","isDev","ModelsDevGateway","NetlifyGateway","gateways","MastraError","parseModelRouterId","createHash","modelInstance","createOpenAICompatible","RuntimeContext","createOpenAI","createGoogleGenerativeAI"],"mappings":"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","file":"chunk-4YHU6R7W.cjs","sourcesContent":["{\n \"providers\": {\n \"moonshotai-cn\": {\n \"url\": \"https://api.moonshot.cn/v1\",\n \"apiKeyEnvVar\": \"MOONSHOT_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Moonshot AI (China)\",\n \"models\": [\"kimi-k2-0711-preview\", \"kimi-k2-0905-preview\", \"kimi-k2-turbo-preview\"],\n \"docUrl\": \"https://platform.moonshot.cn/docs/api/chat\",\n \"gateway\": \"models.dev\"\n },\n \"lucidquery\": {\n \"url\": \"https://lucidquery.com/api/v1\",\n \"apiKeyEnvVar\": \"LUCIDQUERY_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"LucidQuery AI\",\n \"models\": [\"lucidnova-rf1-100b\", \"lucidquery-nexus-coder\"],\n \"docUrl\": \"https://lucidquery.com/api/docs\",\n \"gateway\": \"models.dev\"\n },\n \"moonshotai\": {\n \"url\": \"https://api.moonshot.ai/v1\",\n \"apiKeyEnvVar\": \"MOONSHOT_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Moonshot AI\",\n \"models\": [\"kimi-k2-0711-preview\", \"kimi-k2-0905-preview\", \"kimi-k2-turbo-preview\"],\n \"docUrl\": \"https://platform.moonshot.ai/docs/api/chat\",\n \"gateway\": \"models.dev\"\n },\n \"zai-coding-plan\": {\n \"url\": \"https://api.z.ai/api/coding/paas/v4\",\n \"apiKeyEnvVar\": \"ZHIPU_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Z.AI Coding Plan\",\n \"models\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"docUrl\": \"https://docs.z.ai/devpack/overview\",\n \"gateway\": \"models.dev\"\n },\n \"alibaba\": {\n \"url\": \"https://dashscope-intl.aliyuncs.com/compatible-mode/v1\",\n \"apiKeyEnvVar\": \"DASHSCOPE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Alibaba\",\n \"models\": [\n \"qvq-max\",\n \"qwen-flash\",\n \"qwen-max\",\n \"qwen-mt-plus\",\n \"qwen-mt-turbo\",\n \"qwen-omni-turbo\",\n \"qwen-omni-turbo-realtime\",\n \"qwen-plus\",\n \"qwen-plus-character-ja\",\n \"qwen-turbo\",\n \"qwen-vl-max\",\n \"qwen-vl-ocr\",\n \"qwen-vl-plus\",\n \"qwen2-5-14b-instruct\",\n \"qwen2-5-32b-instruct\",\n \"qwen2-5-72b-instruct\",\n \"qwen2-5-7b-instruct\",\n \"qwen2-5-omni-7b\",\n \"qwen2-5-vl-72b-instruct\",\n \"qwen2-5-vl-7b-instruct\",\n \"qwen3-14b\",\n \"qwen3-235b-a22b\",\n \"qwen3-32b\",\n \"qwen3-8b\",\n \"qwen3-asr-flash\",\n \"qwen3-coder-30b-a3b-instruct\",\n \"qwen3-coder-480b-a35b-instruct\",\n \"qwen3-coder-flash\",\n \"qwen3-coder-plus\",\n \"qwen3-livetranslate-flash-realtime\",\n \"qwen3-max\",\n \"qwen3-next-80b-a3b-instruct\",\n \"qwen3-next-80b-a3b-thinking\",\n \"qwen3-omni-flash\",\n \"qwen3-omni-flash-realtime\",\n \"qwen3-vl-235b-a22b\",\n \"qwen3-vl-30b-a3b\",\n \"qwen3-vl-plus\",\n \"qwq-plus\"\n ],\n \"docUrl\": \"https://www.alibabacloud.com/help/en/model-studio/models\",\n \"gateway\": \"models.dev\"\n },\n \"xai\": {\n \"apiKeyEnvVar\": \"XAI_API_KEY\",\n \"name\": \"xAI\",\n \"models\": [\n \"grok-2\",\n \"grok-2-1212\",\n \"grok-2-latest\",\n \"grok-2-vision\",\n \"grok-2-vision-1212\",\n \"grok-2-vision-latest\",\n \"grok-3\",\n \"grok-3-fast\",\n \"grok-3-fast-latest\",\n \"grok-3-latest\",\n \"grok-3-mini\",\n \"grok-3-mini-fast\",\n \"grok-3-mini-fast-latest\",\n \"grok-3-mini-latest\",\n \"grok-4\",\n \"grok-4-fast\",\n \"grok-4-fast-non-reasoning\",\n \"grok-beta\",\n \"grok-code-fast-1\",\n \"grok-vision-beta\"\n ],\n \"docUrl\": \"https://docs.x.ai/docs/models\",\n \"gateway\": \"models.dev\"\n },\n \"vultr\": {\n \"url\": \"https://api.vultrinference.com/v1\",\n \"apiKeyEnvVar\": \"VULTR_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Vultr\",\n \"models\": [\n \"deepseek-r1-distill-llama-70b\",\n \"deepseek-r1-distill-qwen-32b\",\n \"gpt-oss-120b\",\n \"kimi-k2-instruct\",\n \"qwen2.5-coder-32b-instruct\"\n ],\n \"docUrl\": \"https://api.vultrinference.com/\",\n \"gateway\": \"models.dev\"\n },\n \"nvidia\": {\n \"url\": \"https://integrate.api.nvidia.com/v1\",\n \"apiKeyEnvVar\": \"NVIDIA_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Nvidia\",\n \"models\": [\n \"black-forest-labs/flux.1-dev\",\n \"deepseek-ai/deepseek-v3.1\",\n \"deepseek-ai/deepseek-v3.1-terminus\",\n \"google/gemma-3-27b-it\",\n \"microsoft/phi-4-mini-instruct\",\n \"moonshotai/kimi-k2-instruct\",\n \"moonshotai/kimi-k2-instruct-0905\",\n \"nvidia/cosmos-nemotron-34b\",\n \"nvidia/llama-3.1-nemotron-ultra-253b-v1\",\n \"nvidia/llama-embed-nemotron-8b\",\n \"nvidia/nemoretriever-ocr-v1\",\n \"nvidia/parakeet-tdt-0.6b-v2\",\n \"openai/gpt-oss-120b\",\n \"openai/whisper-large-v3\",\n \"qwen/qwen3-235b-a22b\",\n \"qwen/qwen3-coder-480b-a35b-instruct\"\n ],\n \"docUrl\": \"https://docs.api.nvidia.com/nim/\",\n \"gateway\": \"models.dev\"\n },\n \"upstage\": {\n \"url\": \"https://api.upstage.ai\",\n \"apiKeyEnvVar\": \"UPSTAGE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Upstage\",\n \"models\": [\"solar-mini\", \"solar-pro2\"],\n \"docUrl\": \"https://developers.upstage.ai/docs/apis/chat\",\n \"gateway\": \"models.dev\"\n },\n \"groq\": {\n \"url\": \"https://api.groq.com/openai/v1\",\n \"apiKeyEnvVar\": \"GROQ_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Groq\",\n \"models\": [\n \"deepseek-r1-distill-llama-70b\",\n \"gemma2-9b-it\",\n \"llama-3.1-8b-instant\",\n \"llama-3.3-70b-versatile\",\n \"llama-guard-3-8b\",\n \"llama3-70b-8192\",\n \"llama3-8b-8192\",\n \"meta-llama/llama-4-maverick-17b-128e-instruct\",\n \"meta-llama/llama-4-scout-17b-16e-instruct\",\n \"meta-llama/llama-guard-4-12b\",\n \"mistral-saba-24b\",\n \"moonshotai/kimi-k2-instruct\",\n \"moonshotai/kimi-k2-instruct-0905\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"qwen-qwq-32b\",\n \"qwen/qwen3-32b\"\n ],\n \"docUrl\": \"https://console.groq.com/docs/models\",\n \"gateway\": \"models.dev\"\n },\n \"mistral\": {\n \"url\": \"https://api.mistral.ai/v1\",\n \"apiKeyEnvVar\": \"MISTRAL_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Mistral\",\n \"models\": [\n \"codestral-latest\",\n \"devstral-medium-2507\",\n \"devstral-small-2505\",\n \"devstral-small-2507\",\n \"magistral-medium-latest\",\n \"magistral-small\",\n \"ministral-3b-latest\",\n \"ministral-8b-latest\",\n \"mistral-large-latest\",\n \"mistral-medium-2505\",\n \"mistral-medium-2508\",\n \"mistral-medium-latest\",\n \"mistral-nemo\",\n \"mistral-small-latest\",\n \"open-mistral-7b\",\n \"open-mixtral-8x22b\",\n \"open-mixtral-8x7b\",\n \"pixtral-12b\",\n \"pixtral-large-latest\"\n ],\n \"docUrl\": \"https://docs.mistral.ai/getting-started/models/\",\n \"gateway\": \"models.dev\"\n },\n \"vercel\": {\n \"url\": \"https://ai-gateway.vercel.sh/v1\",\n \"apiKeyEnvVar\": \"AI_GATEWAY_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Vercel AI Gateway\",\n \"models\": [\n \"alibaba/qwen3-coder-plus\",\n \"alibaba/qwen3-max\",\n \"alibaba/qwen3-next-80b-a3b-instruct\",\n \"alibaba/qwen3-next-80b-a3b-thinking\",\n \"alibaba/qwen3-vl-instruct\",\n \"alibaba/qwen3-vl-thinking\",\n \"amazon/nova-lite\",\n \"amazon/nova-micro\",\n \"amazon/nova-pro\",\n \"anthropic/claude-3-5-haiku\",\n \"anthropic/claude-3-haiku\",\n \"anthropic/claude-3-opus\",\n \"anthropic/claude-3.5-sonnet\",\n \"anthropic/claude-3.7-sonnet\",\n \"anthropic/claude-4-1-opus\",\n \"anthropic/claude-4-opus\",\n \"anthropic/claude-4-sonnet\",\n \"anthropic/claude-4.5-sonnet\",\n \"anthropic/claude-haiku-4.5\",\n \"cerebras/qwen3-coder\",\n \"deepseek/deepseek-r1\",\n \"deepseek/deepseek-r1-distill-llama-70b\",\n \"deepseek/deepseek-v3.1-terminus\",\n \"deepseek/deepseek-v3.2-exp\",\n \"deepseek/deepseek-v3.2-exp-thinking\",\n \"google/gemini-2.0-flash\",\n \"google/gemini-2.0-flash-lite\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-flash-lite\",\n \"google/gemini-2.5-flash-lite-preview-09-2025\",\n \"google/gemini-2.5-flash-preview-09-2025\",\n \"google/gemini-2.5-pro\",\n \"meta/llama-3.3-70b\",\n \"meta/llama-4-maverick\",\n \"meta/llama-4-scout\",\n \"mistral/codestral\",\n \"mistral/magistral-medium\",\n \"mistral/magistral-small\",\n \"mistral/ministral-3b\",\n \"mistral/ministral-8b\",\n \"mistral/mistral-large\",\n \"mistral/mistral-small\",\n \"mistral/mixtral-8x22b-instruct\",\n \"mistral/pixtral-12b\",\n \"mistral/pixtral-large\",\n \"moonshotai/kimi-k2\",\n \"morph/morph-v3-fast\",\n \"morph/morph-v3-large\",\n \"openai/gpt-4-turbo\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4.1-nano\",\n \"openai/gpt-4o\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-codex\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"openai/o1\",\n \"openai/o3\",\n \"openai/o3-mini\",\n \"openai/o4-mini\",\n \"perplexity/sonar\",\n \"perplexity/sonar-pro\",\n \"perplexity/sonar-reasoning\",\n \"perplexity/sonar-reasoning-pro\",\n \"vercel/v0-1.0-md\",\n \"vercel/v0-1.5-md\",\n \"xai/grok-2\",\n \"xai/grok-2-vision\",\n \"xai/grok-3\",\n \"xai/grok-3-fast\",\n \"xai/grok-3-mini\",\n \"xai/grok-3-mini-fast\",\n \"xai/grok-4\",\n \"xai/grok-4-fast\",\n \"xai/grok-4-fast-non-reasoning\",\n \"xai/grok-code-fast-1\",\n \"zai/glm-4.5\",\n \"zai/glm-4.5-air\",\n \"zai/glm-4.5v\",\n \"zai/glm-4.6\"\n ],\n \"docUrl\": \"https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway\",\n \"gateway\": \"models.dev\"\n },\n \"nebius\": {\n \"url\": \"https://api.studio.nebius.com/v1/\",\n \"apiKeyEnvVar\": \"NEBIUS_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Nebius AI Studio\",\n \"models\": [\n \"NousResearch/hermes-4-405b\",\n \"NousResearch/hermes-4-70b\",\n \"deepseek-ai/deepseek-v3\",\n \"meta-llama/llama-3.3-70b-instruct-base\",\n \"meta-llama/llama-3.3-70b-instruct-fast\",\n \"meta-llama/llama-3_1-405b-instruct\",\n \"moonshotai/kimi-k2-instruct\",\n \"nvidia/llama-3_1-nemotron-ultra-253b-v1\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"qwen/qwen3-235b-a22b-instruct-2507\",\n \"qwen/qwen3-235b-a22b-thinking-2507\",\n \"qwen/qwen3-coder-480b-a35b-instruct\",\n \"zai-org/glm-4.5\",\n \"zai-org/glm-4.5-air\"\n ],\n \"docUrl\": \"https://docs.studio.nebius.com/quickstart\",\n \"gateway\": \"models.dev\"\n },\n \"deepseek\": {\n \"url\": \"https://api.deepseek.com\",\n \"apiKeyEnvVar\": \"DEEPSEEK_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"DeepSeek\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"],\n \"docUrl\": \"https://platform.deepseek.com/api-docs/pricing\",\n \"gateway\": \"models.dev\"\n },\n \"alibaba-cn\": {\n \"url\": \"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n \"apiKeyEnvVar\": \"DASHSCOPE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Alibaba (China)\",\n \"models\": [\n \"deepseek-r1\",\n \"deepseek-r1-0528\",\n \"deepseek-r1-distill-llama-70b\",\n \"deepseek-r1-distill-llama-8b\",\n \"deepseek-r1-distill-qwen-1-5b\",\n \"deepseek-r1-distill-qwen-14b\",\n \"deepseek-r1-distill-qwen-32b\",\n \"deepseek-r1-distill-qwen-7b\",\n \"deepseek-v3\",\n \"deepseek-v3-1\",\n \"deepseek-v3-2-exp\",\n \"moonshot-kimi-k2-instruct\",\n \"qvq-max\",\n \"qwen-deep-research\",\n \"qwen-doc-turbo\",\n \"qwen-flash\",\n \"qwen-long\",\n \"qwen-math-plus\",\n \"qwen-math-turbo\",\n \"qwen-max\",\n \"qwen-mt-plus\",\n \"qwen-mt-turbo\",\n \"qwen-omni-turbo\",\n \"qwen-omni-turbo-realtime\",\n \"qwen-plus\",\n \"qwen-plus-character\",\n \"qwen-turbo\",\n \"qwen-vl-max\",\n \"qwen-vl-ocr\",\n \"qwen-vl-plus\",\n \"qwen2-5-14b-instruct\",\n \"qwen2-5-32b-instruct\",\n \"qwen2-5-72b-instruct\",\n \"qwen2-5-7b-instruct\",\n \"qwen2-5-coder-32b-instruct\",\n \"qwen2-5-coder-7b-instruct\",\n \"qwen2-5-math-72b-instruct\",\n \"qwen2-5-math-7b-instruct\",\n \"qwen2-5-omni-7b\",\n \"qwen2-5-vl-72b-instruct\",\n \"qwen2-5-vl-7b-instruct\",\n \"qwen3-14b\",\n \"qwen3-235b-a22b\",\n \"qwen3-32b\",\n \"qwen3-8b\",\n \"qwen3-asr-flash\",\n \"qwen3-coder-30b-a3b-instruct\",\n \"qwen3-coder-480b-a35b-instruct\",\n \"qwen3-coder-flash\",\n \"qwen3-coder-plus\",\n \"qwen3-max\",\n \"qwen3-next-80b-a3b-instruct\",\n \"qwen3-next-80b-a3b-thinking\",\n \"qwen3-omni-flash\",\n \"qwen3-omni-flash-realtime\",\n \"qwen3-vl-235b-a22b\",\n \"qwen3-vl-30b-a3b\",\n \"qwen3-vl-plus\",\n \"qwq-32b\",\n \"qwq-plus\",\n \"tongyi-intent-detect-v3\"\n ],\n \"docUrl\": \"https://www.alibabacloud.com/help/en/model-studio/models\",\n \"gateway\": \"models.dev\"\n },\n \"venice\": {\n \"url\": \"https://api.venice.ai/api/v1\",\n \"apiKeyEnvVar\": \"VENICE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Venice AI\",\n \"models\": [\n \"deepseek-coder-v2-lite\",\n \"deepseek-r1-671b\",\n \"dolphin-2.9.2-qwen2-72b\",\n \"llama-3.1-405b\",\n \"llama-3.2-3b\",\n \"llama-3.3-70b\",\n \"mistral-31-24b\",\n \"qwen-2.5-coder-32b\",\n \"qwen-2.5-qwq-32b\",\n \"qwen-2.5-vl\",\n \"qwen3-235b\",\n \"qwen3-4b\",\n \"venice-uncensored\"\n ],\n \"docUrl\": \"https://docs.venice.ai\",\n \"gateway\": \"models.dev\"\n },\n \"chutes\": {\n \"url\": \"https://llm.chutes.ai/v1\",\n \"apiKeyEnvVar\": \"CHUTES_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Chutes\",\n \"models\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-30B-A3B\",\n \"Qwen/Qwen3-30B-A3B-Instruct-2507\",\n \"Qwen/Qwen3-30B-A3B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-30B-A3B-Instruct\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\",\n \"Qwen/Qwen3-Next-80B-A3B-Instruct\",\n \"Qwen/Qwen3-Next-80B-A3B-Thinking\",\n \"chutesai/Devstral-Small-2505\",\n \"chutesai/Mistral-Small-3.2-24B-Instruct-2506\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/DeepSeek-R1-0528-Qwen3-8B\",\n \"deepseek-ai/DeepSeek-R1-Distill-Llama-70B\",\n \"deepseek-ai/DeepSeek-V3-0324\",\n \"deepseek-ai/DeepSeek-V3.1\",\n \"deepseek-ai/DeepSeek-V3.1-Terminus\",\n \"deepseek-ai/DeepSeek-V3.1-turbo\",\n \"deepseek-ai/DeepSeek-V3.1:THINKING\",\n \"deepseek-ai/DeepSeek-V3.2-Exp\",\n \"meituan-longcat/LongCat-Flash-Chat-FP8\",\n \"moonshotai/Kimi-Dev-72B\",\n \"moonshotai/Kimi-K2-Instruct-0905\",\n \"moonshotai/Kimi-K2-Instruct-75k\",\n \"moonshotai/Kimi-VL-A3B-Thinking\",\n \"openai/gpt-oss-120b\",\n \"tngtech/DeepSeek-R1T-Chimera\",\n \"tngtech/DeepSeek-TNG-R1T2-Chimera\",\n \"zai-org/GLM-4.5-Air\",\n \"zai-org/GLM-4.5-FP8\",\n \"zai-org/GLM-4.5-turbo\",\n \"zai-org/GLM-4.6-FP8\",\n \"zai-org/GLM-4.6-turbo\"\n ],\n \"docUrl\": \"https://llm.chutes.ai/v1/models\",\n \"gateway\": \"models.dev\"\n },\n \"cortecs\": {\n \"url\": \"https://api.cortecs.ai/v1\",\n \"apiKeyEnvVar\": \"CORTECS_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Cortecs\",\n \"models\": [\n \"claude-4-5-sonnet\",\n \"claude-sonnet-4\",\n \"deepseek-v3-0324\",\n \"gemini-2.5-pro\",\n \"gpt-4.1\",\n \"gpt-oss-120b\",\n \"kimi-k2-instruct\",\n \"llama-3.1-405b-instruct\",\n \"nova-pro-v1\",\n \"qwen3-32b\",\n \"qwen3-coder-480b-a35b-instruct\"\n ],\n \"docUrl\": \"https://api.cortecs.ai/v1/models\",\n \"gateway\": \"models.dev\"\n },\n \"github-models\": {\n \"url\": \"https://models.github.ai/inference\",\n \"apiKeyEnvVar\": \"GITHUB_TOKEN\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"GitHub Models\",\n \"models\": [\n \"ai21-labs/ai21-jamba-1.5-large\",\n \"ai21-labs/ai21-jamba-1.5-mini\",\n \"cohere/cohere-command-a\",\n \"cohere/cohere-command-r\",\n \"cohere/cohere-command-r-08-2024\",\n \"cohere/cohere-command-r-plus\",\n \"cohere/cohere-command-r-plus-08-2024\",\n \"core42/jais-30b-chat\",\n \"deepseek/deepseek-r1\",\n \"deepseek/deepseek-r1-0528\",\n \"deepseek/deepseek-v3-0324\",\n \"meta/llama-3.2-11b-vision-instruct\",\n \"meta/llama-3.2-90b-vision-instruct\",\n \"meta/llama-3.3-70b-instruct\",\n \"meta/llama-4-maverick-17b-128e-instruct-fp8\",\n \"meta/llama-4-scout-17b-16e-instruct\",\n \"meta/meta-llama-3-70b-instruct\",\n \"meta/meta-llama-3-8b-instruct\",\n \"meta/meta-llama-3.1-405b-instruct\",\n \"meta/meta-llama-3.1-70b-instruct\",\n \"meta/meta-llama-3.1-8b-instruct\",\n \"microsoft/mai-ds-r1\",\n \"microsoft/phi-3-medium-128k-instruct\",\n \"microsoft/phi-3-medium-4k-instruct\",\n \"microsoft/phi-3-mini-128k-instruct\",\n \"microsoft/phi-3-mini-4k-instruct\",\n \"microsoft/phi-3-small-128k-instruct\",\n \"microsoft/phi-3-small-8k-instruct\",\n \"microsoft/phi-3.5-mini-instruct\",\n \"microsoft/phi-3.5-moe-instruct\",\n \"microsoft/phi-3.5-vision-instruct\",\n \"microsoft/phi-4\",\n \"microsoft/phi-4-mini-instruct\",\n \"microsoft/phi-4-mini-reasoning\",\n \"microsoft/phi-4-multimodal-instruct\",\n \"microsoft/phi-4-reasoning\",\n \"mistral-ai/codestral-2501\",\n \"mistral-ai/ministral-3b\",\n \"mistral-ai/mistral-large-2411\",\n \"mistral-ai/mistral-medium-2505\",\n \"mistral-ai/mistral-nemo\",\n \"mistral-ai/mistral-small-2503\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4.1-nano\",\n \"openai/gpt-4o\",\n \"openai/gpt-4o-mini\",\n \"openai/o1\",\n \"openai/o1-mini\",\n \"openai/o1-preview\",\n \"openai/o3\",\n \"openai/o3-mini\",\n \"openai/o4-mini\",\n \"xai/grok-3\",\n \"xai/grok-3-mini\"\n ],\n \"docUrl\": \"https://docs.github.com/en/github-models\",\n \"gateway\": \"models.dev\"\n },\n \"togetherai\": {\n \"url\": \"https://api.together.xyz/v1\",\n \"apiKeyEnvVar\": \"TOGETHER_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Together AI\",\n \"models\": [\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\",\n \"deepseek-ai/DeepSeek-R1\",\n \"deepseek-ai/DeepSeek-V3\",\n \"meta-llama/Llama-3.3-70B-Instruct-Turbo\",\n \"moonshotai/Kimi-K2-Instruct\",\n \"openai/gpt-oss-120b\"\n ],\n \"docUrl\": \"https://docs.together.ai/docs/serverless-models\",\n \"gateway\": \"models.dev\"\n },\n \"baseten\": {\n \"url\": \"https://inference.baseten.co/v1\",\n \"apiKeyEnvVar\": \"BASETEN_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Baseten\",\n \"models\": [\"Qwen3/Qwen3-Coder-480B-A35B-Instruct\", \"moonshotai/Kimi-K2-Instruct-0905\", \"zai-org/GLM-4.6\"],\n \"docUrl\": \"https://docs.baseten.co/development/model-apis/overview\",\n \"gateway\": \"models.dev\"\n },\n \"huggingface\": {\n \"url\": \"https://router.huggingface.co/v1\",\n \"apiKeyEnvVar\": \"HF_TOKEN\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Hugging Face\",\n \"models\": [\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"Qwen/Qwen3-Embedding-4B\",\n \"Qwen/Qwen3-Embedding-8B\",\n \"Qwen/Qwen3-Next-80B-A3B-Instruct\",\n \"Qwen/Qwen3-Next-80B-A3B-Thinking\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/Deepseek-V3-0324\",\n \"moonshotai/Kimi-K2-Instruct\",\n \"moonshotai/Kimi-K2-Instruct-0905\",\n \"zai-org/GLM-4.5\",\n \"zai-org/GLM-4.5-Air\",\n \"zai-org/GLM-4.6\"\n ],\n \"docUrl\": \"https://huggingface.co/docs/inference-providers\",\n \"gateway\": \"models.dev\"\n },\n \"opencode\": {\n \"url\": \"https://opencode.ai/zen/v1\",\n \"apiKeyEnvVar\": \"OPENCODE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"OpenCode Zen\",\n \"models\": [\n \"an-gbt\",\n \"big-pickle\",\n \"claude-3-5-haiku\",\n \"claude-haiku-4-5\",\n \"claude-opus-4-1\",\n \"claude-sonnet-4\",\n \"claude-sonnet-4-5\",\n \"code-supernova\",\n \"glm-4.6\",\n \"gpt-5\",\n \"gpt-5-codex\",\n \"grok-code\",\n \"kimi-k2\",\n \"qwen3-coder\"\n ],\n \"docUrl\": \"https://opencode.ai/docs/zen\",\n \"gateway\": \"models.dev\"\n },\n \"fastrouter\": {\n \"url\": \"https://go.fastrouter.ai/api/v1\",\n \"apiKeyEnvVar\": \"FASTROUTER_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"FastRouter\",\n \"models\": [\n \"anthropic/claude-opus-4.1\",\n \"anthropic/claude-sonnet-4\",\n \"deepseek-ai/deepseek-r1-distill-llama-70b\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-pro\",\n \"moonshotai/kimi-k2\",\n \"openai/gpt-4.1\",\n \"openai/gpt-5\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"qwen/qwen3-coder\",\n \"x-ai/grok-4\"\n ],\n \"docUrl\": \"https://fastrouter.ai/models\",\n \"gateway\": \"models.dev\"\n },\n \"google\": {\n \"apiKeyEnvVar\": \"GOOGLE_GENERATIVE_AI_API_KEY\",\n \"name\": \"Google\",\n \"models\": [\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-pro\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-lite\",\n \"gemini-2.5-flash\",\n \"gemini-2.5-flash-image\",\n \"gemini-2.5-flash-image-preview\",\n \"gemini-2.5-flash-lite\",\n \"gemini-2.5-flash-lite-preview-06-17\",\n \"gemini-2.5-flash-lite-preview-09-2025\",\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.5-flash-preview-05-20\",\n \"gemini-2.5-flash-preview-09-2025\",\n \"gemini-2.5-flash-preview-tts\",\n \"gemini-2.5-pro\",\n \"gemini-2.5-pro-preview-05-06\",\n \"gemini-2.5-pro-preview-06-05\",\n \"gemini-2.5-pro-preview-tts\",\n \"gemini-embedding-001\",\n \"gemini-flash-latest\",\n \"gemini-flash-lite-latest\",\n \"gemini-live-2.5-flash\",\n \"gemini-live-2.5-flash-preview-native-audio\"\n ],\n \"docUrl\": \"https://ai.google.dev/gemini-api/docs/pricing\",\n \"gateway\": \"models.dev\"\n },\n \"inception\": {\n \"url\": \"https://api.inceptionlabs.ai/v1/\",\n \"apiKeyEnvVar\": \"INCEPTION_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Inception\",\n \"models\": [\"mercury\", \"mercury-coder\"],\n \"docUrl\": \"https://platform.inceptionlabs.ai/docs\",\n \"gateway\": \"models.dev\"\n },\n \"wandb\": {\n \"url\": \"https://api.inference.wandb.ai/v1\",\n \"apiKeyEnvVar\": \"WANDB_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Weights & Biases\",\n \"models\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/DeepSeek-V3-0324\",\n \"meta-llama/Llama-3.1-8B-Instruct\",\n \"meta-llama/Llama-3.3-70B-Instruct\",\n \"meta-llama/Llama-4-Scout-17B-16E-Instruct\",\n \"microsoft/Phi-4-mini-instruct\",\n \"moonshotai/Kimi-K2-Instruct\"\n ],\n \"docUrl\": \"https://weave-docs.wandb.ai/guides/integrations/inference/\",\n \"gateway\": \"models.dev\"\n },\n \"openai\": {\n \"apiKeyEnvVar\": \"OPENAI_API_KEY\",\n \"name\": \"OpenAI\",\n \"models\": [\n \"codex-mini-latest\",\n \"gpt-3.5-turbo\",\n \"gpt-4\",\n \"gpt-4-turbo\",\n \"gpt-4.1\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-nano\",\n \"gpt-4o\",\n \"gpt-4o-2024-05-13\",\n \"gpt-4o-2024-08-06\",\n \"gpt-4o-2024-11-20\",\n \"gpt-4o-mini\",\n \"gpt-5\",\n \"gpt-5-chat-latest\",\n \"gpt-5-codex\",\n \"gpt-5-mini\",\n \"gpt-5-nano\",\n \"o1\",\n \"o1-mini\",\n \"o1-preview\",\n \"o1-pro\",\n \"o3\",\n \"o3-deep-research\",\n \"o3-mini\",\n \"o3-pro\",\n \"o4-mini\",\n \"o4-mini-deep-research\",\n \"text-embedding-3-large\",\n \"text-embedding-3-small\",\n \"text-embedding-ada-002\"\n ],\n \"docUrl\": \"https://platform.openai.com/docs/models\",\n \"gateway\": \"models.dev\"\n },\n \"zhipuai-coding-plan\": {\n \"url\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"apiKeyEnvVar\": \"ZHIPU_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Zhipu AI Coding Plan\",\n \"models\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"docUrl\": \"https://docs.bigmodel.cn/cn/coding-plan/overview\",\n \"gateway\": \"models.dev\"\n },\n \"perplexity\": {\n \"url\": \"https://api.perplexity.ai\",\n \"apiKeyEnvVar\": \"PERPLEXITY_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Perplexity\",\n \"models\": [\"sonar\", \"sonar-pro\", \"sonar-reasoning\", \"sonar-reasoning-pro\"],\n \"docUrl\": \"https://docs.perplexity.ai\",\n \"gateway\": \"models.dev\"\n },\n \"openrouter\": {\n \"url\": \"https://openrouter.ai/api/v1\",\n \"apiKeyEnvVar\": \"OPENROUTER_API_KEY\",\n \"name\": \"OpenRouter\",\n \"models\": [\n \"anthropic/claude-3.5-haiku\",\n \"anthropic/claude-3.7-sonnet\",\n \"anthropic/claude-haiku-4.5\",\n \"anthropic/claude-opus-4\",\n \"anthropic/claude-opus-4.1\",\n \"anthropic/claude-sonnet-4\",\n \"anthropic/claude-sonnet-4.5\",\n \"cognitivecomputations/dolphin3.0-mistral-24b\",\n \"cognitivecomputations/dolphin3.0-r1-mistral-24b\",\n \"deepseek/deepseek-chat-v3-0324\",\n \"deepseek/deepseek-chat-v3.1\",\n \"deepseek/deepseek-r1-0528-qwen3-8b:free\",\n \"deepseek/deepseek-r1-0528:free\",\n \"deepseek/deepseek-r1-distill-llama-70b\",\n \"deepseek/deepseek-r1-distill-qwen-14b\",\n \"deepseek/deepseek-r1:free\",\n \"deepseek/deepseek-v3-base:free\",\n \"deepseek/deepseek-v3.1-terminus\",\n \"featherless/qwerky-72b\",\n \"google/gemini-2.0-flash-001\",\n \"google/gemini-2.0-flash-exp:free\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-flash-lite\",\n \"google/gemini-2.5-flash-lite-preview-09-2025\",\n \"google/gemini-2.5-flash-preview-09-2025\",\n \"google/gemini-2.5-pro\",\n \"google/gemini-2.5-pro-preview-05-06\",\n \"google/gemini-2.5-pro-preview-06-05\",\n \"google/gemma-2-9b-it:free\",\n \"google/gemma-3-12b-it\",\n \"google/gemma-3-27b-it\",\n \"google/gemma-3n-e4b-it\",\n \"google/gemma-3n-e4b-it:free\",\n \"meta-llama/llama-3.2-11b-vision-instruct\",\n \"meta-llama/llama-3.3-70b-instruct:free\",\n \"meta-llama/llama-4-scout:free\",\n \"microsoft/mai-ds-r1:free\",\n \"mistralai/codestral-2508\",\n \"mistralai/devstral-medium-2507\",\n \"mistralai/devstral-small-2505\",\n \"mistralai/devstral-small-2505:free\",\n \"mistralai/devstral-small-2507\",\n \"mistralai/mistral-7b-instruct:free\",\n \"mistralai/mistral-medium-3\",\n \"mistralai/mistral-medium-3.1\",\n \"mistralai/mistral-nemo:free\",\n \"mistralai/mistral-small-3.1-24b-instruct\",\n \"mistralai/mistral-small-3.2-24b-instruct\",\n \"mistralai/mistral-small-3.2-24b-instruct:free\",\n \"moonshotai/kimi-dev-72b:free\",\n \"moonshotai/kimi-k2\",\n \"moonshotai/kimi-k2-0905\",\n \"moonshotai/kimi-k2:free\",\n \"nousresearch/deephermes-3-llama-3-8b-preview\",\n \"nousresearch/hermes-4-405b\",\n \"nousresearch/hermes-4-70b\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-chat\",\n \"openai/gpt-5-codex\",\n \"openai/gpt-5-image\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"openai/o4-mini\",\n \"openrouter/cypher-alpha:free\",\n \"openrouter/horizon-alpha\",\n \"openrouter/horizon-beta\",\n \"openrouter/sonoma-dusk-alpha\",\n \"openrouter/sonoma-sky-alpha\",\n \"qwen/qwen-2.5-coder-32b-instruct\",\n \"qwen/qwen2.5-vl-32b-instruct:free\",\n \"qwen/qwen2.5-vl-72b-instruct\",\n \"qwen/qwen2.5-vl-72b-instruct:free\",\n \"qwen/qwen3-14b:free\",\n \"qwen/qwen3-235b-a22b-07-25\",\n \"qwen/qwen3-235b-a22b-07-25:free\",\n \"qwen/qwen3-235b-a22b-thinking-2507\",\n \"qwen/qwen3-235b-a22b:free\",\n \"qwen/qwen3-30b-a3b-instruct-2507\",\n \"qwen/qwen3-30b-a3b-thinking-2507\",\n \"qwen/qwen3-30b-a3b:free\",\n \"qwen/qwen3-32b:free\",\n \"qwen/qwen3-8b:free\",\n \"qwen/qwen3-coder\",\n \"qwen/qwen3-coder:free\",\n \"qwen/qwen3-max\",\n \"qwen/qwen3-next-80b-a3b-instruct\",\n \"qwen/qwen3-next-80b-a3b-thinking\",\n \"qwen/qwq-32b:free\",\n \"rekaai/reka-flash-3\",\n \"sarvamai/sarvam-m:free\",\n \"thudm/glm-z1-32b:free\",\n \"tngtech/deepseek-r1t2-chimera:free\",\n \"x-ai/grok-3\",\n \"x-ai/grok-3-beta\",\n \"x-ai/grok-3-mini\",\n \"x-ai/grok-3-mini-beta\",\n \"x-ai/grok-4\",\n \"x-ai/grok-4-fast\",\n \"x-ai/grok-4-fast:free\",\n \"x-ai/grok-code-fast-1\",\n \"z-ai/glm-4.5\",\n \"z-ai/glm-4.5-air\",\n \"z-ai/glm-4.5-air:free\",\n \"z-ai/glm-4.5v\",\n \"z-ai/glm-4.6\"\n ],\n \"docUrl\": \"https://openrouter.ai/models\",\n \"gateway\": \"models.dev\"\n },\n \"synthetic\": {\n \"url\": \"https://api.synthetic.new/v1\",\n \"apiKeyEnvVar\": \"SYNTHETIC_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Synthetic\",\n \"models\": [\n \"hf:Qwen/Qwen2.5-Coder-32B-Instruct\",\n \"hf:Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"hf:Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"hf:Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"hf:deepseek-ai/DeepSeek-R1\",\n \"hf:deepseek-ai/DeepSeek-R1-0528\",\n \"hf:deepseek-ai/DeepSeek-V3\",\n \"hf:deepseek-ai/DeepSeek-V3-0324\",\n \"hf:deepseek-ai/DeepSeek-V3.1\",\n \"hf:deepseek-ai/DeepSeek-V3.1-Terminus\",\n \"hf:meta-llama/Llama-3.1-405B-Instruct\",\n \"hf:meta-llama/Llama-3.1-70B-Instruct\",\n \"hf:meta-llama/Llama-3.1-8B-Instruct\",\n \"hf:meta-llama/Llama-3.3-70B-Instruct\",\n \"hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8\",\n \"hf:meta-llama/Llama-4-Scout-17B-16E-Instruct\",\n \"hf:moonshotai/Kimi-K2-Instruct\",\n \"hf:moonshotai/Kimi-K2-Instruct-0905\",\n \"hf:openai/gpt-oss-120b\",\n \"hf:zai-org/GLM-4.5\",\n \"hf:zai-org/GLM-4.6\"\n ],\n \"docUrl\": \"https://synthetic.new/pricing\",\n \"gateway\": \"models.dev\"\n },\n \"deepinfra\": {\n \"url\": \"https://api.deepinfra.com/v1/openai\",\n \"apiKeyEnvVar\": \"DEEPINFRA_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Deep Infra\",\n \"models\": [\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo\",\n \"moonshotai/Kimi-K2-Instruct\",\n \"zai-org/GLM-4.5\"\n ],\n \"docUrl\": \"https://deepinfra.com/models\",\n \"gateway\": \"models.dev\"\n },\n \"zhipuai\": {\n \"url\": \"https://open.bigmodel.cn/api/paas/v4\",\n \"apiKeyEnvVar\": \"ZHIPU_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Zhipu AI\",\n \"models\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"docUrl\": \"https://docs.z.ai/guides/overview/pricing\",\n \"gateway\": \"models.dev\"\n },\n \"submodel\": {\n \"url\": \"https://llm.submodel.ai/v1\",\n \"apiKeyEnvVar\": \"SUBMODEL_INSTAGEN_ACCESS_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"submodel\",\n \"models\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/DeepSeek-V3-0324\",\n \"deepseek-ai/DeepSeek-V3.1\",\n \"openai/gpt-oss-120b\",\n \"zai-org/GLM-4.5-Air\",\n \"zai-org/GLM-4.5-FP8\"\n ],\n \"docUrl\": \"https://submodel.gitbook.io\",\n \"gateway\": \"models.dev\"\n },\n \"zai\": {\n \"url\": \"https://api.z.ai/api/paas/v4\",\n \"apiKeyEnvVar\": \"ZHIPU_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Z.AI\",\n \"models\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"docUrl\": \"https://docs.z.ai/guides/overview/pricing\",\n \"gateway\": \"models.dev\"\n },\n \"inference\": {\n \"url\": \"https://inference.net/v1\",\n \"apiKeyEnvVar\": \"INFERENCE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Inference\",\n \"models\": [\n \"google/gemma-3\",\n \"meta/llama-3.1-8b-instruct\",\n \"meta/llama-3.2-11b-vision-instruct\",\n \"meta/llama-3.2-1b-instruct\",\n \"meta/llama-3.2-3b-instruct\",\n \"mistral/mistral-nemo-12b-instruct\",\n \"osmosis/osmosis-structure-0.6b\",\n \"qwen/qwen-2.5-7b-vision-instruct\",\n \"qwen/qwen3-embedding-4b\"\n ],\n \"docUrl\": \"https://inference.net/models\",\n \"gateway\": \"models.dev\"\n },\n \"requesty\": {\n \"url\": \"https://router.requesty.ai/v1\",\n \"apiKeyEnvVar\": \"REQUESTY_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Requesty\",\n \"models\": [\n \"anthropic/claude-3-7-sonnet\",\n \"anthropic/claude-4-sonnet-20250522\",\n \"anthropic/claude-opus-4\",\n \"anthropic/claude-opus-4-1-20250805\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-pro\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/o4-mini\"\n ],\n \"docUrl\": \"https://requesty.ai/solution/llm-routing/models\",\n \"gateway\": \"models.dev\"\n },\n \"morph\": {\n \"url\": \"https://api.morphllm.com/v1\",\n \"apiKeyEnvVar\": \"MORPH_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Morph\",\n \"models\": [\"auto\", \"morph-v3-fast\", \"morph-v3-large\"],\n \"docUrl\": \"https://docs.morphllm.com/api-reference/introduction\",\n \"gateway\": \"models.dev\"\n },\n \"lmstudio\": {\n \"url\": \"http://127.0.0.1:1234/v1\",\n \"apiKeyEnvVar\": \"LMSTUDIO_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"LMStudio\",\n \"models\": [\"openai/gpt-oss-20b\", \"qwen/qwen3-30b-a3b-2507\", \"qwen/qwen3-coder-30b\"],\n \"docUrl\": \"https://lmstudio.ai/models\",\n \"gateway\": \"models.dev\"\n },\n \"anthropic\": {\n \"apiKeyEnvVar\": \"ANTHROPIC_API_KEY\",\n \"name\": \"Anthropic\",\n \"models\": [\n \"claude-3-5-haiku-20241022\",\n \"claude-3-5-haiku-latest\",\n \"claude-3-5-sonnet-20240620\",\n \"claude-3-5-sonnet-20241022\",\n \"claude-3-7-sonnet-20250219\",\n \"claude-3-7-sonnet-latest\",\n \"claude-3-haiku-20240307\",\n \"claude-3-opus-20240229\",\n \"claude-3-sonnet-20240229\",\n \"claude-haiku-4-5\",\n \"claude-haiku-4-5-20251001\",\n \"claude-opus-4-0\",\n \"claude-opus-4-1\",\n \"claude-opus-4-1-20250805\",\n \"claude-opus-4-20250514\",\n \"claude-sonnet-4-0\",\n \"claude-sonnet-4-20250514\",\n \"claude-sonnet-4-5\",\n \"claude-sonnet-4-5-20250929\"\n ],\n \"docUrl\": \"https://docs.anthropic.com/en/docs/about-claude/models\",\n \"gateway\": \"models.dev\"\n },\n \"fireworks-ai\": {\n \"url\": \"https://api.fireworks.ai/inference/v1/\",\n \"apiKeyEnvVar\": \"FIREWORKS_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Fireworks AI\",\n \"models\": [\n \"accounts/fireworks/models/deepseek-r1-0528\",\n \"accounts/fireworks/models/deepseek-v3-0324\",\n \"accounts/fireworks/models/deepseek-v3p1\",\n \"accounts/fireworks/models/glm-4p5\",\n \"accounts/fireworks/models/glm-4p5-air\",\n \"accounts/fireworks/models/gpt-oss-120b\",\n \"accounts/fireworks/models/gpt-oss-20b\",\n \"accounts/fireworks/models/kimi-k2-instruct\",\n \"accounts/fireworks/models/qwen3-235b-a22b\",\n \"accounts/fireworks/models/qwen3-coder-480b-a35b-instruct\"\n ],\n \"docUrl\": \"https://fireworks.ai/docs/\",\n \"gateway\": \"models.dev\"\n },\n \"modelscope\": {\n \"url\": \"https://api-inference.modelscope.cn/v1\",\n \"apiKeyEnvVar\": \"MODELSCOPE_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"ModelScope\",\n \"models\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-30B-A3B-Instruct-2507\",\n \"Qwen/Qwen3-30B-A3B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-30B-A3B-Instruct\",\n \"ZhipuAI/GLM-4.5\",\n \"ZhipuAI/GLM-4.6\"\n ],\n \"docUrl\": \"https://modelscope.cn/docs/model-service/API-Inference/intro\",\n \"gateway\": \"models.dev\"\n },\n \"llama\": {\n \"url\": \"https://api.llama.com/compat/v1/\",\n \"apiKeyEnvVar\": \"LLAMA_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Llama\",\n \"models\": [\n \"cerebras-llama-4-maverick-17b-128e-instruct\",\n \"cerebras-llama-4-scout-17b-16e-instruct\",\n \"groq-llama-4-maverick-17b-128e-instruct\",\n \"llama-3.3-70b-instruct\",\n \"llama-3.3-8b-instruct\",\n \"llama-4-maverick-17b-128e-instruct-fp8\",\n \"llama-4-scout-17b-16e-instruct-fp8\"\n ],\n \"docUrl\": \"https://llama.developer.meta.com/docs/models\",\n \"gateway\": \"models.dev\"\n },\n \"scaleway\": {\n \"url\": \"https://api.scaleway.ai/v1\",\n \"apiKeyEnvVar\": \"SCALEWAY_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Scaleway\",\n \"models\": [\n \"deepseek-r1-distill-llama-70b\",\n \"gemma-3-27b-it\",\n \"gpt-oss-120b\",\n \"llama-3.1-8b-instruct\",\n \"llama-3.3-70b-instruct\",\n \"mistral-nemo-instruct-2407\",\n \"mistral-small-3.2-24b-instruct-2506\",\n \"pixtral-12b-2409\",\n \"qwen3-235b-a22b-instruct-2507\",\n \"qwen3-coder-30b-a3b-instruct\",\n \"voxtral-small-24b-2507\"\n ],\n \"docUrl\": \"https://www.scaleway.com/en/docs/generative-apis/\",\n \"gateway\": \"models.dev\"\n },\n \"cerebras\": {\n \"url\": \"https://api.cerebras.ai/v1\",\n \"apiKeyEnvVar\": \"CEREBRAS_API_KEY\",\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Cerebras\",\n \"models\": [\"gpt-oss-120b\", \"qwen-3-235b-a22b-instruct-2507\", \"qwen-3-coder-480b\"],\n \"docUrl\": \"https://inference-docs.cerebras.ai/models/overview\",\n \"gateway\": \"models.dev\"\n },\n \"netlify\": {\n \"apiKeyEnvVar\": [\"NETLIFY_TOKEN\", \"NETLIFY_SITE_ID\"],\n \"apiKeyHeader\": \"Authorization\",\n \"name\": \"Netlify\",\n \"gateway\": \"netlify\",\n \"models\": [\n \"anthropic/claude-3-5-haiku-20241022\",\n \"anthropic/claude-3-5-haiku-latest\",\n \"anthropic/claude-3-7-sonnet-20250219\",\n \"anthropic/claude-3-7-sonnet-latest\",\n \"anthropic/claude-3-haiku-20240307\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-opus-4-1-20250805\",\n \"anthropic/claude-opus-4-20250514\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"gemini/gemini-2.0-flash\",\n \"gemini/gemini-2.0-flash-lite\",\n \"gemini/gemini-2.5-flash\",\n \"gemini/gemini-2.5-flash-image-preview\",\n \"gemini/gemini-2.5-flash-lite\",\n \"gemini/gemini-2.5-flash-lite-preview-09-2025\",\n \"gemini/gemini-2.5-flash-preview-09-2025\",\n \"gemini/gemini-2.5-pro\",\n \"gemini/gemini-flash-latest\",\n \"gemini/gemini-flash-lite-latest\",\n \"openai/codex-mini-latest\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4.1-nano\",\n \"openai/gpt-4o\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-codex\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-5-pro\",\n \"openai/o3\",\n \"openai/o3-mini\",\n \"openai/o4-mini\"\n ],\n \"docUrl\": \"https://docs.netlify.com/build/ai-gateway/overview/\"\n }\n },\n \"models\": {\n \"moonshotai-cn\": [\"kimi-k2-0711-preview\", \"kimi-k2-0905-preview\", \"kimi-k2-turbo-preview\"],\n \"lucidquery\": [\"lucidnova-rf1-100b\", \"lucidquery-nexus-coder\"],\n \"moonshotai\": [\"kimi-k2-0711-preview\", \"kimi-k2-0905-preview\", \"kimi-k2-turbo-preview\"],\n \"zai-coding-plan\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"alibaba\": [\n \"qvq-max\",\n \"qwen-flash\",\n \"qwen-max\",\n \"qwen-mt-plus\",\n \"qwen-mt-turbo\",\n \"qwen-omni-turbo\",\n \"qwen-omni-turbo-realtime\",\n \"qwen-plus\",\n \"qwen-plus-character-ja\",\n \"qwen-turbo\",\n \"qwen-vl-max\",\n \"qwen-vl-ocr\",\n \"qwen-vl-plus\",\n \"qwen2-5-14b-instruct\",\n \"qwen2-5-32b-instruct\",\n \"qwen2-5-72b-instruct\",\n \"qwen2-5-7b-instruct\",\n \"qwen2-5-omni-7b\",\n \"qwen2-5-vl-72b-instruct\",\n \"qwen2-5-vl-7b-instruct\",\n \"qwen3-14b\",\n \"qwen3-235b-a22b\",\n \"qwen3-32b\",\n \"qwen3-8b\",\n \"qwen3-asr-flash\",\n \"qwen3-coder-30b-a3b-instruct\",\n \"qwen3-coder-480b-a35b-instruct\",\n \"qwen3-coder-flash\",\n \"qwen3-coder-plus\",\n \"qwen3-livetranslate-flash-realtime\",\n \"qwen3-max\",\n \"qwen3-next-80b-a3b-instruct\",\n \"qwen3-next-80b-a3b-thinking\",\n \"qwen3-omni-flash\",\n \"qwen3-omni-flash-realtime\",\n \"qwen3-vl-235b-a22b\",\n \"qwen3-vl-30b-a3b\",\n \"qwen3-vl-plus\",\n \"qwq-plus\"\n ],\n \"xai\": [\n \"grok-2\",\n \"grok-2-1212\",\n \"grok-2-latest\",\n \"grok-2-vision\",\n \"grok-2-vision-1212\",\n \"grok-2-vision-latest\",\n \"grok-3\",\n \"grok-3-fast\",\n \"grok-3-fast-latest\",\n \"grok-3-latest\",\n \"grok-3-mini\",\n \"grok-3-mini-fast\",\n \"grok-3-mini-fast-latest\",\n \"grok-3-mini-latest\",\n \"grok-4\",\n \"grok-4-fast\",\n \"grok-4-fast-non-reasoning\",\n \"grok-beta\",\n \"grok-code-fast-1\",\n \"grok-vision-beta\"\n ],\n \"vultr\": [\n \"deepseek-r1-distill-llama-70b\",\n \"deepseek-r1-distill-qwen-32b\",\n \"gpt-oss-120b\",\n \"kimi-k2-instruct\",\n \"qwen2.5-coder-32b-instruct\"\n ],\n \"nvidia\": [\n \"black-forest-labs/flux.1-dev\",\n \"deepseek-ai/deepseek-v3.1\",\n \"deepseek-ai/deepseek-v3.1-terminus\",\n \"google/gemma-3-27b-it\",\n \"microsoft/phi-4-mini-instruct\",\n \"moonshotai/kimi-k2-instruct\",\n \"moonshotai/kimi-k2-instruct-0905\",\n \"nvidia/cosmos-nemotron-34b\",\n \"nvidia/llama-3.1-nemotron-ultra-253b-v1\",\n \"nvidia/llama-embed-nemotron-8b\",\n \"nvidia/nemoretriever-ocr-v1\",\n \"nvidia/parakeet-tdt-0.6b-v2\",\n \"openai/gpt-oss-120b\",\n \"openai/whisper-large-v3\",\n \"qwen/qwen3-235b-a22b\",\n \"qwen/qwen3-coder-480b-a35b-instruct\"\n ],\n \"upstage\": [\"solar-mini\", \"solar-pro2\"],\n \"groq\": [\n \"deepseek-r1-distill-llama-70b\",\n \"gemma2-9b-it\",\n \"llama-3.1-8b-instant\",\n \"llama-3.3-70b-versatile\",\n \"llama-guard-3-8b\",\n \"llama3-70b-8192\",\n \"llama3-8b-8192\",\n \"meta-llama/llama-4-maverick-17b-128e-instruct\",\n \"meta-llama/llama-4-scout-17b-16e-instruct\",\n \"meta-llama/llama-guard-4-12b\",\n \"mistral-saba-24b\",\n \"moonshotai/kimi-k2-instruct\",\n \"moonshotai/kimi-k2-instruct-0905\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"qwen-qwq-32b\",\n \"qwen/qwen3-32b\"\n ],\n \"mistral\": [\n \"codestral-latest\",\n \"devstral-medium-2507\",\n \"devstral-small-2505\",\n \"devstral-small-2507\",\n \"magistral-medium-latest\",\n \"magistral-small\",\n \"ministral-3b-latest\",\n \"ministral-8b-latest\",\n \"mistral-large-latest\",\n \"mistral-medium-2505\",\n \"mistral-medium-2508\",\n \"mistral-medium-latest\",\n \"mistral-nemo\",\n \"mistral-small-latest\",\n \"open-mistral-7b\",\n \"open-mixtral-8x22b\",\n \"open-mixtral-8x7b\",\n \"pixtral-12b\",\n \"pixtral-large-latest\"\n ],\n \"vercel\": [\n \"alibaba/qwen3-coder-plus\",\n \"alibaba/qwen3-max\",\n \"alibaba/qwen3-next-80b-a3b-instruct\",\n \"alibaba/qwen3-next-80b-a3b-thinking\",\n \"alibaba/qwen3-vl-instruct\",\n \"alibaba/qwen3-vl-thinking\",\n \"amazon/nova-lite\",\n \"amazon/nova-micro\",\n \"amazon/nova-pro\",\n \"anthropic/claude-3-5-haiku\",\n \"anthropic/claude-3-haiku\",\n \"anthropic/claude-3-opus\",\n \"anthropic/claude-3.5-sonnet\",\n \"anthropic/claude-3.7-sonnet\",\n \"anthropic/claude-4-1-opus\",\n \"anthropic/claude-4-opus\",\n \"anthropic/claude-4-sonnet\",\n \"anthropic/claude-4.5-sonnet\",\n \"anthropic/claude-haiku-4.5\",\n \"cerebras/qwen3-coder\",\n \"deepseek/deepseek-r1\",\n \"deepseek/deepseek-r1-distill-llama-70b\",\n \"deepseek/deepseek-v3.1-terminus\",\n \"deepseek/deepseek-v3.2-exp\",\n \"deepseek/deepseek-v3.2-exp-thinking\",\n \"google/gemini-2.0-flash\",\n \"google/gemini-2.0-flash-lite\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-flash-lite\",\n \"google/gemini-2.5-flash-lite-preview-09-2025\",\n \"google/gemini-2.5-flash-preview-09-2025\",\n \"google/gemini-2.5-pro\",\n \"meta/llama-3.3-70b\",\n \"meta/llama-4-maverick\",\n \"meta/llama-4-scout\",\n \"mistral/codestral\",\n \"mistral/magistral-medium\",\n \"mistral/magistral-small\",\n \"mistral/ministral-3b\",\n \"mistral/ministral-8b\",\n \"mistral/mistral-large\",\n \"mistral/mistral-small\",\n \"mistral/mixtral-8x22b-instruct\",\n \"mistral/pixtral-12b\",\n \"mistral/pixtral-large\",\n \"moonshotai/kimi-k2\",\n \"morph/morph-v3-fast\",\n \"morph/morph-v3-large\",\n \"openai/gpt-4-turbo\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4.1-nano\",\n \"openai/gpt-4o\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-codex\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"openai/o1\",\n \"openai/o3\",\n \"openai/o3-mini\",\n \"openai/o4-mini\",\n \"perplexity/sonar\",\n \"perplexity/sonar-pro\",\n \"perplexity/sonar-reasoning\",\n \"perplexity/sonar-reasoning-pro\",\n \"vercel/v0-1.0-md\",\n \"vercel/v0-1.5-md\",\n \"xai/grok-2\",\n \"xai/grok-2-vision\",\n \"xai/grok-3\",\n \"xai/grok-3-fast\",\n \"xai/grok-3-mini\",\n \"xai/grok-3-mini-fast\",\n \"xai/grok-4\",\n \"xai/grok-4-fast\",\n \"xai/grok-4-fast-non-reasoning\",\n \"xai/grok-code-fast-1\",\n \"zai/glm-4.5\",\n \"zai/glm-4.5-air\",\n \"zai/glm-4.5v\",\n \"zai/glm-4.6\"\n ],\n \"nebius\": [\n \"NousResearch/hermes-4-405b\",\n \"NousResearch/hermes-4-70b\",\n \"deepseek-ai/deepseek-v3\",\n \"meta-llama/llama-3.3-70b-instruct-base\",\n \"meta-llama/llama-3.3-70b-instruct-fast\",\n \"meta-llama/llama-3_1-405b-instruct\",\n \"moonshotai/kimi-k2-instruct\",\n \"nvidia/llama-3_1-nemotron-ultra-253b-v1\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"qwen/qwen3-235b-a22b-instruct-2507\",\n \"qwen/qwen3-235b-a22b-thinking-2507\",\n \"qwen/qwen3-coder-480b-a35b-instruct\",\n \"zai-org/glm-4.5\",\n \"zai-org/glm-4.5-air\"\n ],\n \"deepseek\": [\"deepseek-chat\", \"deepseek-reasoner\"],\n \"alibaba-cn\": [\n \"deepseek-r1\",\n \"deepseek-r1-0528\",\n \"deepseek-r1-distill-llama-70b\",\n \"deepseek-r1-distill-llama-8b\",\n \"deepseek-r1-distill-qwen-1-5b\",\n \"deepseek-r1-distill-qwen-14b\",\n \"deepseek-r1-distill-qwen-32b\",\n \"deepseek-r1-distill-qwen-7b\",\n \"deepseek-v3\",\n \"deepseek-v3-1\",\n \"deepseek-v3-2-exp\",\n \"moonshot-kimi-k2-instruct\",\n \"qvq-max\",\n \"qwen-deep-research\",\n \"qwen-doc-turbo\",\n \"qwen-flash\",\n \"qwen-long\",\n \"qwen-math-plus\",\n \"qwen-math-turbo\",\n \"qwen-max\",\n \"qwen-mt-plus\",\n \"qwen-mt-turbo\",\n \"qwen-omni-turbo\",\n \"qwen-omni-turbo-realtime\",\n \"qwen-plus\",\n \"qwen-plus-character\",\n \"qwen-turbo\",\n \"qwen-vl-max\",\n \"qwen-vl-ocr\",\n \"qwen-vl-plus\",\n \"qwen2-5-14b-instruct\",\n \"qwen2-5-32b-instruct\",\n \"qwen2-5-72b-instruct\",\n \"qwen2-5-7b-instruct\",\n \"qwen2-5-coder-32b-instruct\",\n \"qwen2-5-coder-7b-instruct\",\n \"qwen2-5-math-72b-instruct\",\n \"qwen2-5-math-7b-instruct\",\n \"qwen2-5-omni-7b\",\n \"qwen2-5-vl-72b-instruct\",\n \"qwen2-5-vl-7b-instruct\",\n \"qwen3-14b\",\n \"qwen3-235b-a22b\",\n \"qwen3-32b\",\n \"qwen3-8b\",\n \"qwen3-asr-flash\",\n \"qwen3-coder-30b-a3b-instruct\",\n \"qwen3-coder-480b-a35b-instruct\",\n \"qwen3-coder-flash\",\n \"qwen3-coder-plus\",\n \"qwen3-max\",\n \"qwen3-next-80b-a3b-instruct\",\n \"qwen3-next-80b-a3b-thinking\",\n \"qwen3-omni-flash\",\n \"qwen3-omni-flash-realtime\",\n \"qwen3-vl-235b-a22b\",\n \"qwen3-vl-30b-a3b\",\n \"qwen3-vl-plus\",\n \"qwq-32b\",\n \"qwq-plus\",\n \"tongyi-intent-detect-v3\"\n ],\n \"venice\": [\n \"deepseek-coder-v2-lite\",\n \"deepseek-r1-671b\",\n \"dolphin-2.9.2-qwen2-72b\",\n \"llama-3.1-405b\",\n \"llama-3.2-3b\",\n \"llama-3.3-70b\",\n \"mistral-31-24b\",\n \"qwen-2.5-coder-32b\",\n \"qwen-2.5-qwq-32b\",\n \"qwen-2.5-vl\",\n \"qwen3-235b\",\n \"qwen3-4b\",\n \"venice-uncensored\"\n ],\n \"chutes\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-30B-A3B\",\n \"Qwen/Qwen3-30B-A3B-Instruct-2507\",\n \"Qwen/Qwen3-30B-A3B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-30B-A3B-Instruct\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\",\n \"Qwen/Qwen3-Next-80B-A3B-Instruct\",\n \"Qwen/Qwen3-Next-80B-A3B-Thinking\",\n \"chutesai/Devstral-Small-2505\",\n \"chutesai/Mistral-Small-3.2-24B-Instruct-2506\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/DeepSeek-R1-0528-Qwen3-8B\",\n \"deepseek-ai/DeepSeek-R1-Distill-Llama-70B\",\n \"deepseek-ai/DeepSeek-V3-0324\",\n \"deepseek-ai/DeepSeek-V3.1\",\n \"deepseek-ai/DeepSeek-V3.1-Terminus\",\n \"deepseek-ai/DeepSeek-V3.1-turbo\",\n \"deepseek-ai/DeepSeek-V3.1:THINKING\",\n \"deepseek-ai/DeepSeek-V3.2-Exp\",\n \"meituan-longcat/LongCat-Flash-Chat-FP8\",\n \"moonshotai/Kimi-Dev-72B\",\n \"moonshotai/Kimi-K2-Instruct-0905\",\n \"moonshotai/Kimi-K2-Instruct-75k\",\n \"moonshotai/Kimi-VL-A3B-Thinking\",\n \"openai/gpt-oss-120b\",\n \"tngtech/DeepSeek-R1T-Chimera\",\n \"tngtech/DeepSeek-TNG-R1T2-Chimera\",\n \"zai-org/GLM-4.5-Air\",\n \"zai-org/GLM-4.5-FP8\",\n \"zai-org/GLM-4.5-turbo\",\n \"zai-org/GLM-4.6-FP8\",\n \"zai-org/GLM-4.6-turbo\"\n ],\n \"cortecs\": [\n \"claude-4-5-sonnet\",\n \"claude-sonnet-4\",\n \"deepseek-v3-0324\",\n \"gemini-2.5-pro\",\n \"gpt-4.1\",\n \"gpt-oss-120b\",\n \"kimi-k2-instruct\",\n \"llama-3.1-405b-instruct\",\n \"nova-pro-v1\",\n \"qwen3-32b\",\n \"qwen3-coder-480b-a35b-instruct\"\n ],\n \"github-models\": [\n \"ai21-labs/ai21-jamba-1.5-large\",\n \"ai21-labs/ai21-jamba-1.5-mini\",\n \"cohere/cohere-command-a\",\n \"cohere/cohere-command-r\",\n \"cohere/cohere-command-r-08-2024\",\n \"cohere/cohere-command-r-plus\",\n \"cohere/cohere-command-r-plus-08-2024\",\n \"core42/jais-30b-chat\",\n \"deepseek/deepseek-r1\",\n \"deepseek/deepseek-r1-0528\",\n \"deepseek/deepseek-v3-0324\",\n \"meta/llama-3.2-11b-vision-instruct\",\n \"meta/llama-3.2-90b-vision-instruct\",\n \"meta/llama-3.3-70b-instruct\",\n \"meta/llama-4-maverick-17b-128e-instruct-fp8\",\n \"meta/llama-4-scout-17b-16e-instruct\",\n \"meta/meta-llama-3-70b-instruct\",\n \"meta/meta-llama-3-8b-instruct\",\n \"meta/meta-llama-3.1-405b-instruct\",\n \"meta/meta-llama-3.1-70b-instruct\",\n \"meta/meta-llama-3.1-8b-instruct\",\n \"microsoft/mai-ds-r1\",\n \"microsoft/phi-3-medium-128k-instruct\",\n \"microsoft/phi-3-medium-4k-instruct\",\n \"microsoft/phi-3-mini-128k-instruct\",\n \"microsoft/phi-3-mini-4k-instruct\",\n \"microsoft/phi-3-small-128k-instruct\",\n \"microsoft/phi-3-small-8k-instruct\",\n \"microsoft/phi-3.5-mini-instruct\",\n \"microsoft/phi-3.5-moe-instruct\",\n \"microsoft/phi-3.5-vision-instruct\",\n \"microsoft/phi-4\",\n \"microsoft/phi-4-mini-instruct\",\n \"microsoft/phi-4-mini-reasoning\",\n \"microsoft/phi-4-multimodal-instruct\",\n \"microsoft/phi-4-reasoning\",\n \"mistral-ai/codestral-2501\",\n \"mistral-ai/ministral-3b\",\n \"mistral-ai/mistral-large-2411\",\n \"mistral-ai/mistral-medium-2505\",\n \"mistral-ai/mistral-nemo\",\n \"mistral-ai/mistral-small-2503\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4.1-nano\",\n \"openai/gpt-4o\",\n \"openai/gpt-4o-mini\",\n \"openai/o1\",\n \"openai/o1-mini\",\n \"openai/o1-preview\",\n \"openai/o3\",\n \"openai/o3-mini\",\n \"openai/o4-mini\",\n \"xai/grok-3\",\n \"xai/grok-3-mini\"\n ],\n \"togetherai\": [\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\",\n \"deepseek-ai/DeepSeek-R1\",\n \"deepseek-ai/DeepSeek-V3\",\n \"meta-llama/Llama-3.3-70B-Instruct-Turbo\",\n \"moonshotai/Kimi-K2-Instruct\",\n \"openai/gpt-oss-120b\"\n ],\n \"baseten\": [\"Qwen3/Qwen3-Coder-480B-A35B-Instruct\", \"moonshotai/Kimi-K2-Instruct-0905\", \"zai-org/GLM-4.6\"],\n \"huggingface\": [\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"Qwen/Qwen3-Embedding-4B\",\n \"Qwen/Qwen3-Embedding-8B\",\n \"Qwen/Qwen3-Next-80B-A3B-Instruct\",\n \"Qwen/Qwen3-Next-80B-A3B-Thinking\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/Deepseek-V3-0324\",\n \"moonshotai/Kimi-K2-Instruct\",\n \"moonshotai/Kimi-K2-Instruct-0905\",\n \"zai-org/GLM-4.5\",\n \"zai-org/GLM-4.5-Air\",\n \"zai-org/GLM-4.6\"\n ],\n \"opencode\": [\n \"an-gbt\",\n \"big-pickle\",\n \"claude-3-5-haiku\",\n \"claude-haiku-4-5\",\n \"claude-opus-4-1\",\n \"claude-sonnet-4\",\n \"claude-sonnet-4-5\",\n \"code-supernova\",\n \"glm-4.6\",\n \"gpt-5\",\n \"gpt-5-codex\",\n \"grok-code\",\n \"kimi-k2\",\n \"qwen3-coder\"\n ],\n \"fastrouter\": [\n \"anthropic/claude-opus-4.1\",\n \"anthropic/claude-sonnet-4\",\n \"deepseek-ai/deepseek-r1-distill-llama-70b\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-pro\",\n \"moonshotai/kimi-k2\",\n \"openai/gpt-4.1\",\n \"openai/gpt-5\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"qwen/qwen3-coder\",\n \"x-ai/grok-4\"\n ],\n \"google\": [\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-pro\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-lite\",\n \"gemini-2.5-flash\",\n \"gemini-2.5-flash-image\",\n \"gemini-2.5-flash-image-preview\",\n \"gemini-2.5-flash-lite\",\n \"gemini-2.5-flash-lite-preview-06-17\",\n \"gemini-2.5-flash-lite-preview-09-2025\",\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.5-flash-preview-05-20\",\n \"gemini-2.5-flash-preview-09-2025\",\n \"gemini-2.5-flash-preview-tts\",\n \"gemini-2.5-pro\",\n \"gemini-2.5-pro-preview-05-06\",\n \"gemini-2.5-pro-preview-06-05\",\n \"gemini-2.5-pro-preview-tts\",\n \"gemini-embedding-001\",\n \"gemini-flash-latest\",\n \"gemini-flash-lite-latest\",\n \"gemini-live-2.5-flash\",\n \"gemini-live-2.5-flash-preview-native-audio\"\n ],\n \"inception\": [\"mercury\", \"mercury-coder\"],\n \"wandb\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/DeepSeek-V3-0324\",\n \"meta-llama/Llama-3.1-8B-Instruct\",\n \"meta-llama/Llama-3.3-70B-Instruct\",\n \"meta-llama/Llama-4-Scout-17B-16E-Instruct\",\n \"microsoft/Phi-4-mini-instruct\",\n \"moonshotai/Kimi-K2-Instruct\"\n ],\n \"openai\": [\n \"codex-mini-latest\",\n \"gpt-3.5-turbo\",\n \"gpt-4\",\n \"gpt-4-turbo\",\n \"gpt-4.1\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-nano\",\n \"gpt-4o\",\n \"gpt-4o-2024-05-13\",\n \"gpt-4o-2024-08-06\",\n \"gpt-4o-2024-11-20\",\n \"gpt-4o-mini\",\n \"gpt-5\",\n \"gpt-5-chat-latest\",\n \"gpt-5-codex\",\n \"gpt-5-mini\",\n \"gpt-5-nano\",\n \"o1\",\n \"o1-mini\",\n \"o1-preview\",\n \"o1-pro\",\n \"o3\",\n \"o3-deep-research\",\n \"o3-mini\",\n \"o3-pro\",\n \"o4-mini\",\n \"o4-mini-deep-research\",\n \"text-embedding-3-large\",\n \"text-embedding-3-small\",\n \"text-embedding-ada-002\"\n ],\n \"zhipuai-coding-plan\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"perplexity\": [\"sonar\", \"sonar-pro\", \"sonar-reasoning\", \"sonar-reasoning-pro\"],\n \"openrouter\": [\n \"anthropic/claude-3.5-haiku\",\n \"anthropic/claude-3.7-sonnet\",\n \"anthropic/claude-haiku-4.5\",\n \"anthropic/claude-opus-4\",\n \"anthropic/claude-opus-4.1\",\n \"anthropic/claude-sonnet-4\",\n \"anthropic/claude-sonnet-4.5\",\n \"cognitivecomputations/dolphin3.0-mistral-24b\",\n \"cognitivecomputations/dolphin3.0-r1-mistral-24b\",\n \"deepseek/deepseek-chat-v3-0324\",\n \"deepseek/deepseek-chat-v3.1\",\n \"deepseek/deepseek-r1-0528-qwen3-8b:free\",\n \"deepseek/deepseek-r1-0528:free\",\n \"deepseek/deepseek-r1-distill-llama-70b\",\n \"deepseek/deepseek-r1-distill-qwen-14b\",\n \"deepseek/deepseek-r1:free\",\n \"deepseek/deepseek-v3-base:free\",\n \"deepseek/deepseek-v3.1-terminus\",\n \"featherless/qwerky-72b\",\n \"google/gemini-2.0-flash-001\",\n \"google/gemini-2.0-flash-exp:free\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-flash-lite\",\n \"google/gemini-2.5-flash-lite-preview-09-2025\",\n \"google/gemini-2.5-flash-preview-09-2025\",\n \"google/gemini-2.5-pro\",\n \"google/gemini-2.5-pro-preview-05-06\",\n \"google/gemini-2.5-pro-preview-06-05\",\n \"google/gemma-2-9b-it:free\",\n \"google/gemma-3-12b-it\",\n \"google/gemma-3-27b-it\",\n \"google/gemma-3n-e4b-it\",\n \"google/gemma-3n-e4b-it:free\",\n \"meta-llama/llama-3.2-11b-vision-instruct\",\n \"meta-llama/llama-3.3-70b-instruct:free\",\n \"meta-llama/llama-4-scout:free\",\n \"microsoft/mai-ds-r1:free\",\n \"mistralai/codestral-2508\",\n \"mistralai/devstral-medium-2507\",\n \"mistralai/devstral-small-2505\",\n \"mistralai/devstral-small-2505:free\",\n \"mistralai/devstral-small-2507\",\n \"mistralai/mistral-7b-instruct:free\",\n \"mistralai/mistral-medium-3\",\n \"mistralai/mistral-medium-3.1\",\n \"mistralai/mistral-nemo:free\",\n \"mistralai/mistral-small-3.1-24b-instruct\",\n \"mistralai/mistral-small-3.2-24b-instruct\",\n \"mistralai/mistral-small-3.2-24b-instruct:free\",\n \"moonshotai/kimi-dev-72b:free\",\n \"moonshotai/kimi-k2\",\n \"moonshotai/kimi-k2-0905\",\n \"moonshotai/kimi-k2:free\",\n \"nousresearch/deephermes-3-llama-3-8b-preview\",\n \"nousresearch/hermes-4-405b\",\n \"nousresearch/hermes-4-70b\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-chat\",\n \"openai/gpt-5-codex\",\n \"openai/gpt-5-image\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-oss-120b\",\n \"openai/gpt-oss-20b\",\n \"openai/o4-mini\",\n \"openrouter/cypher-alpha:free\",\n \"openrouter/horizon-alpha\",\n \"openrouter/horizon-beta\",\n \"openrouter/sonoma-dusk-alpha\",\n \"openrouter/sonoma-sky-alpha\",\n \"qwen/qwen-2.5-coder-32b-instruct\",\n \"qwen/qwen2.5-vl-32b-instruct:free\",\n \"qwen/qwen2.5-vl-72b-instruct\",\n \"qwen/qwen2.5-vl-72b-instruct:free\",\n \"qwen/qwen3-14b:free\",\n \"qwen/qwen3-235b-a22b-07-25\",\n \"qwen/qwen3-235b-a22b-07-25:free\",\n \"qwen/qwen3-235b-a22b-thinking-2507\",\n \"qwen/qwen3-235b-a22b:free\",\n \"qwen/qwen3-30b-a3b-instruct-2507\",\n \"qwen/qwen3-30b-a3b-thinking-2507\",\n \"qwen/qwen3-30b-a3b:free\",\n \"qwen/qwen3-32b:free\",\n \"qwen/qwen3-8b:free\",\n \"qwen/qwen3-coder\",\n \"qwen/qwen3-coder:free\",\n \"qwen/qwen3-max\",\n \"qwen/qwen3-next-80b-a3b-instruct\",\n \"qwen/qwen3-next-80b-a3b-thinking\",\n \"qwen/qwq-32b:free\",\n \"rekaai/reka-flash-3\",\n \"sarvamai/sarvam-m:free\",\n \"thudm/glm-z1-32b:free\",\n \"tngtech/deepseek-r1t2-chimera:free\",\n \"x-ai/grok-3\",\n \"x-ai/grok-3-beta\",\n \"x-ai/grok-3-mini\",\n \"x-ai/grok-3-mini-beta\",\n \"x-ai/grok-4\",\n \"x-ai/grok-4-fast\",\n \"x-ai/grok-4-fast:free\",\n \"x-ai/grok-code-fast-1\",\n \"z-ai/glm-4.5\",\n \"z-ai/glm-4.5-air\",\n \"z-ai/glm-4.5-air:free\",\n \"z-ai/glm-4.5v\",\n \"z-ai/glm-4.6\"\n ],\n \"synthetic\": [\n \"hf:Qwen/Qwen2.5-Coder-32B-Instruct\",\n \"hf:Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"hf:Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"hf:Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"hf:deepseek-ai/DeepSeek-R1\",\n \"hf:deepseek-ai/DeepSeek-R1-0528\",\n \"hf:deepseek-ai/DeepSeek-V3\",\n \"hf:deepseek-ai/DeepSeek-V3-0324\",\n \"hf:deepseek-ai/DeepSeek-V3.1\",\n \"hf:deepseek-ai/DeepSeek-V3.1-Terminus\",\n \"hf:meta-llama/Llama-3.1-405B-Instruct\",\n \"hf:meta-llama/Llama-3.1-70B-Instruct\",\n \"hf:meta-llama/Llama-3.1-8B-Instruct\",\n \"hf:meta-llama/Llama-3.3-70B-Instruct\",\n \"hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8\",\n \"hf:meta-llama/Llama-4-Scout-17B-16E-Instruct\",\n \"hf:moonshotai/Kimi-K2-Instruct\",\n \"hf:moonshotai/Kimi-K2-Instruct-0905\",\n \"hf:openai/gpt-oss-120b\",\n \"hf:zai-org/GLM-4.5\",\n \"hf:zai-org/GLM-4.6\"\n ],\n \"deepinfra\": [\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo\",\n \"moonshotai/Kimi-K2-Instruct\",\n \"zai-org/GLM-4.5\"\n ],\n \"zhipuai\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"submodel\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\",\n \"deepseek-ai/DeepSeek-R1-0528\",\n \"deepseek-ai/DeepSeek-V3-0324\",\n \"deepseek-ai/DeepSeek-V3.1\",\n \"openai/gpt-oss-120b\",\n \"zai-org/GLM-4.5-Air\",\n \"zai-org/GLM-4.5-FP8\"\n ],\n \"zai\": [\"glm-4.5\", \"glm-4.5-air\", \"glm-4.5-flash\", \"glm-4.5v\", \"glm-4.6\"],\n \"inference\": [\n \"google/gemma-3\",\n \"meta/llama-3.1-8b-instruct\",\n \"meta/llama-3.2-11b-vision-instruct\",\n \"meta/llama-3.2-1b-instruct\",\n \"meta/llama-3.2-3b-instruct\",\n \"mistral/mistral-nemo-12b-instruct\",\n \"osmosis/osmosis-structure-0.6b\",\n \"qwen/qwen-2.5-7b-vision-instruct\",\n \"qwen/qwen3-embedding-4b\"\n ],\n \"requesty\": [\n \"anthropic/claude-3-7-sonnet\",\n \"anthropic/claude-4-sonnet-20250522\",\n \"anthropic/claude-opus-4\",\n \"anthropic/claude-opus-4-1-20250805\",\n \"google/gemini-2.5-flash\",\n \"google/gemini-2.5-pro\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/o4-mini\"\n ],\n \"morph\": [\"auto\", \"morph-v3-fast\", \"morph-v3-large\"],\n \"lmstudio\": [\"openai/gpt-oss-20b\", \"qwen/qwen3-30b-a3b-2507\", \"qwen/qwen3-coder-30b\"],\n \"anthropic\": [\n \"claude-3-5-haiku-20241022\",\n \"claude-3-5-haiku-latest\",\n \"claude-3-5-sonnet-20240620\",\n \"claude-3-5-sonnet-20241022\",\n \"claude-3-7-sonnet-20250219\",\n \"claude-3-7-sonnet-latest\",\n \"claude-3-haiku-20240307\",\n \"claude-3-opus-20240229\",\n \"claude-3-sonnet-20240229\",\n \"claude-haiku-4-5\",\n \"claude-haiku-4-5-20251001\",\n \"claude-opus-4-0\",\n \"claude-opus-4-1\",\n \"claude-opus-4-1-20250805\",\n \"claude-opus-4-20250514\",\n \"claude-sonnet-4-0\",\n \"claude-sonnet-4-20250514\",\n \"claude-sonnet-4-5\",\n \"claude-sonnet-4-5-20250929\"\n ],\n \"fireworks-ai\": [\n \"accounts/fireworks/models/deepseek-r1-0528\",\n \"accounts/fireworks/models/deepseek-v3-0324\",\n \"accounts/fireworks/models/deepseek-v3p1\",\n \"accounts/fireworks/models/glm-4p5\",\n \"accounts/fireworks/models/glm-4p5-air\",\n \"accounts/fireworks/models/gpt-oss-120b\",\n \"accounts/fireworks/models/gpt-oss-20b\",\n \"accounts/fireworks/models/kimi-k2-instruct\",\n \"accounts/fireworks/models/qwen3-235b-a22b\",\n \"accounts/fireworks/models/qwen3-coder-480b-a35b-instruct\"\n ],\n \"modelscope\": [\n \"Qwen/Qwen3-235B-A22B-Instruct-2507\",\n \"Qwen/Qwen3-235B-A22B-Thinking-2507\",\n \"Qwen/Qwen3-30B-A3B-Instruct-2507\",\n \"Qwen/Qwen3-30B-A3B-Thinking-2507\",\n \"Qwen/Qwen3-Coder-30B-A3B-Instruct\",\n \"ZhipuAI/GLM-4.5\",\n \"ZhipuAI/GLM-4.6\"\n ],\n \"llama\": [\n \"cerebras-llama-4-maverick-17b-128e-instruct\",\n \"cerebras-llama-4-scout-17b-16e-instruct\",\n \"groq-llama-4-maverick-17b-128e-instruct\",\n \"llama-3.3-70b-instruct\",\n \"llama-3.3-8b-instruct\",\n \"llama-4-maverick-17b-128e-instruct-fp8\",\n \"llama-4-scout-17b-16e-instruct-fp8\"\n ],\n \"scaleway\": [\n \"deepseek-r1-distill-llama-70b\",\n \"gemma-3-27b-it\",\n \"gpt-oss-120b\",\n \"llama-3.1-8b-instruct\",\n \"llama-3.3-70b-instruct\",\n \"mistral-nemo-instruct-2407\",\n \"mistral-small-3.2-24b-instruct-2506\",\n \"pixtral-12b-2409\",\n \"qwen3-235b-a22b-instruct-2507\",\n \"qwen3-coder-30b-a3b-instruct\",\n \"voxtral-small-24b-2507\"\n ],\n \"cerebras\": [\"gpt-oss-120b\", \"qwen-3-235b-a22b-instruct-2507\", \"qwen-3-coder-480b\"],\n \"netlify\": [\n \"anthropic/claude-3-5-haiku-20241022\",\n \"anthropic/claude-3-5-haiku-latest\",\n \"anthropic/claude-3-7-sonnet-20250219\",\n \"anthropic/claude-3-7-sonnet-latest\",\n \"anthropic/claude-3-haiku-20240307\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-opus-4-1-20250805\",\n \"anthropic/claude-opus-4-20250514\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"gemini/gemini-2.0-flash\",\n \"gemini/gemini-2.0-flash-lite\",\n \"gemini/gemini-2.5-flash\",\n \"gemini/gemini-2.5-flash-image-preview\",\n \"gemini/gemini-2.5-flash-lite\",\n \"gemini/gemini-2.5-flash-lite-preview-09-2025\",\n \"gemini/gemini-2.5-flash-preview-09-2025\",\n \"gemini/gemini-2.5-pro\",\n \"gemini/gemini-flash-latest\",\n \"gemini/gemini-flash-lite-latest\",\n \"openai/codex-mini-latest\",\n \"openai/gpt-4.1\",\n \"openai/gpt-4.1-mini\",\n \"openai/gpt-4.1-nano\",\n \"openai/gpt-4o\",\n \"openai/gpt-4o-mini\",\n \"openai/gpt-5\",\n \"openai/gpt-5-codex\",\n \"openai/gpt-5-mini\",\n \"openai/gpt-5-nano\",\n \"openai/gpt-5-pro\",\n \"openai/o3\",\n \"openai/o3-mini\",\n \"openai/o4-mini\"\n ]\n },\n \"version\": \"1.0.0\"\n}\n","/**\n * Runtime provider registry loader\n * Loads provider data from JSON file and exports typed interfaces\n */\n\nimport fs from 'fs';\nimport { createRequire } from 'module';\nimport os from 'os';\nimport path from 'path';\nimport type { ProviderConfig } from './gateways/base.js';\nimport staticRegistry from './provider-registry.json';\nimport type { Provider, ModelForProvider, ModelRouterModelId, ProviderModels } from './provider-types.generated.js';\n\n// Re-export types for convenience\nexport type { Provider, ModelForProvider, ModelRouterModelId, ProviderModels };\n\ninterface RegistryData {\n providers: Record<string, ProviderConfig>;\n models: Record<string, string[]>;\n version: string;\n}\n\n// In-memory cache for dynamic loading mode\nlet registryData: RegistryData | null = null;\n\n// Cache file helpers (dev mode only)\nconst CACHE_DIR = path.join(os.homedir(), '.cache', 'mastra');\nconst CACHE_FILE = path.join(CACHE_DIR, 'gateway-refresh-time');\nconst GLOBAL_PROVIDER_REGISTRY_JSON = path.join(CACHE_DIR, 'provider-registry.json');\nconst GLOBAL_PROVIDER_TYPES_DTS = path.join(CACHE_DIR, 'provider-types.generated.d.ts');\n\nlet modelRouterCacheFailed = false;\n\n/**\n * Syncs provider files from global cache to local dist/ directory if needed.\n * Compares file contents to determine if copy is necessary.\n */\nfunction syncGlobalCacheToLocal(): void {\n try {\n // Check if global cache files exist\n const globalJsonExists = fs.existsSync(GLOBAL_PROVIDER_REGISTRY_JSON);\n const globalDtsExists = fs.existsSync(GLOBAL_PROVIDER_TYPES_DTS);\n\n if (!globalJsonExists && !globalDtsExists) {\n // No global cache, nothing to sync\n return;\n }\n\n // Use getPackageRoot() to find the correct location in node_modules or local dev\n const packageRoot = getPackageRoot();\n const localJsonPath = path.join(packageRoot, 'dist', 'provider-registry.json');\n const localDtsPath = path.join(packageRoot, 'dist', 'llm', 'model', 'provider-types.generated.d.ts');\n\n // Ensure local dist directory exists\n fs.mkdirSync(path.dirname(localJsonPath), { recursive: true });\n fs.mkdirSync(path.dirname(localDtsPath), { recursive: true });\n\n // Sync JSON file if global exists and differs from local\n if (globalJsonExists) {\n const globalJsonContent = fs.readFileSync(GLOBAL_PROVIDER_REGISTRY_JSON, 'utf-8');\n let shouldCopyJson = true;\n\n if (fs.existsSync(localJsonPath)) {\n const localJsonContent = fs.readFileSync(localJsonPath, 'utf-8');\n shouldCopyJson = globalJsonContent !== localJsonContent;\n }\n\n if (shouldCopyJson) {\n fs.writeFileSync(localJsonPath, globalJsonContent, 'utf-8');\n }\n }\n\n // Sync .d.ts file if global exists and differs from local\n if (globalDtsExists) {\n const globalDtsContent = fs.readFileSync(GLOBAL_PROVIDER_TYPES_DTS, 'utf-8');\n let shouldCopyDts = true;\n\n if (fs.existsSync(localDtsPath)) {\n const localDtsContent = fs.readFileSync(localDtsPath, 'utf-8');\n shouldCopyDts = globalDtsContent !== localDtsContent;\n }\n\n if (shouldCopyDts) {\n fs.writeFileSync(localDtsPath, globalDtsContent, 'utf-8');\n }\n }\n } catch (error) {\n // Silent fail - backwards compatibility means we fall back to existing files\n console.warn('Failed to sync global cache to local:', error);\n }\n}\n\nfunction getLastRefreshTimeFromDisk(): Date | null {\n try {\n if (!fs.existsSync(CACHE_FILE)) {\n return null;\n }\n const timestamp = fs.readFileSync(CACHE_FILE, 'utf-8').trim();\n return new Date(parseInt(timestamp, 10));\n } catch (err) {\n console.warn('[GatewayRegistry] Failed to read cache file:', err);\n modelRouterCacheFailed = true;\n return null;\n }\n}\n\nfunction saveLastRefreshTimeToDisk(date: Date): void {\n try {\n if (!fs.existsSync(CACHE_DIR)) {\n fs.mkdirSync(CACHE_DIR, { recursive: true });\n }\n fs.writeFileSync(CACHE_FILE, date.getTime().toString(), 'utf-8');\n } catch (err) {\n modelRouterCacheFailed = true;\n console.warn('[GatewayRegistry] Failed to write cache file:', err);\n }\n}\n\nfunction getPackageRoot(): string {\n try {\n // Use require.resolve to find the package root reliably\n const require = createRequire(import.meta.url || 'file://');\n const packageJsonPath = require.resolve('@mastra/core/package.json');\n return path.dirname(packageJsonPath);\n } catch {\n // Fallback to cwd if we can't resolve the package\n return process.cwd();\n }\n}\n\nfunction loadRegistry(useDynamicLoading: boolean): RegistryData {\n // Production: use static import (bundled at build time)\n if (!useDynamicLoading) {\n return staticRegistry;\n }\n\n // Dynamic loading mode: sync global cache to local before loading\n syncGlobalCacheToLocal();\n\n // Dynamic loading mode: check in-memory cache first\n if (registryData) {\n return registryData;\n }\n\n // Dynamic loading mode: load from file system for live updates\n const packageRoot = getPackageRoot();\n const possiblePaths: string[] = [\n // Built: in dist/ relative to package root (first priority - what gets distributed)\n path.join(packageRoot, 'dist', 'provider-registry.json'),\n // Development: in src/ relative to package root\n path.join(packageRoot, 'src', 'llm', 'model', 'provider-registry.json'),\n // Fallback: relative to cwd (for monorepo setups)\n path.join(process.cwd(), 'packages/core/src/llm/model/provider-registry.json'),\n path.join(process.cwd(), 'src/llm/model/provider-registry.json'),\n ];\n\n const errors: string[] = [];\n\n for (const jsonPath of possiblePaths) {\n try {\n const content = fs.readFileSync(jsonPath, 'utf-8');\n registryData = JSON.parse(content);\n return registryData!;\n } catch (err) {\n errors.push(`${jsonPath}: ${err instanceof Error ? err.message : String(err)}`);\n continue;\n }\n }\n\n throw new Error(\n `Failed to load provider registry with dynamic loading. Make sure provider-registry.json is generated by running: npm run generate:providers\n\nTried paths:\n${errors.join('\\n')}`,\n );\n}\n\n// Export registry data via Proxy for lazy loading\nexport const PROVIDER_REGISTRY = new Proxy({} as Record<string, ProviderConfig>, {\n get(_target, prop: string) {\n const registry = GatewayRegistry.getInstance();\n const providers = registry.getProviders();\n return providers[prop];\n },\n ownKeys() {\n const registry = GatewayRegistry.getInstance();\n const providers = registry.getProviders();\n return Object.keys(providers);\n },\n has(_target, prop: string) {\n const registry = GatewayRegistry.getInstance();\n const providers = registry.getProviders();\n return prop in providers;\n },\n getOwnPropertyDescriptor(_target, prop) {\n const registry = GatewayRegistry.getInstance();\n const providers = registry.getProviders();\n if (prop in providers) {\n return {\n enumerable: true,\n configurable: true,\n };\n }\n return undefined;\n },\n}) as Record<Provider, ProviderConfig>;\n\nexport const PROVIDER_MODELS = new Proxy({} as ProviderModels, {\n get(_target, prop: string) {\n const registry = GatewayRegistry.getInstance();\n const models = registry.getModels();\n return models[prop];\n },\n ownKeys() {\n const registry = GatewayRegistry.getInstance();\n const models = registry.getModels();\n return Object.keys(models);\n },\n has(_target, prop: string) {\n const registry = GatewayRegistry.getInstance();\n const models = registry.getModels();\n return prop in models;\n },\n getOwnPropertyDescriptor(_target, prop) {\n const registry = GatewayRegistry.getInstance();\n const models = registry.getModels();\n if (prop in models) {\n return {\n enumerable: true,\n configurable: true,\n };\n }\n return undefined;\n },\n});\n\n/**\n * Parse a model string to extract provider and model ID\n * Examples:\n * \"openai/gpt-4o\" -> { provider: \"openai\", modelId: \"gpt-4o\" }\n * \"fireworks/accounts/etc/model\" -> { provider: \"fireworks\", modelId: \"accounts/etc/model\" }\n * \"gpt-4o\" -> { provider: null, modelId: \"gpt-4o\" }\n */\nexport function parseModelString(modelString: string): { provider: string | null; modelId: string } {\n const firstSlashIndex = modelString.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n // Has at least one slash - extract everything before first slash as provider\n const provider = modelString.substring(0, firstSlashIndex);\n const modelId = modelString.substring(firstSlashIndex + 1);\n\n if (provider && modelId) {\n return {\n provider,\n modelId,\n };\n }\n }\n\n // No slash or invalid format\n return {\n provider: null,\n modelId: modelString,\n };\n}\n\n/**\n * Get provider configuration by provider ID\n */\nexport function getProviderConfig(providerId: string): ProviderConfig | undefined {\n const registry = GatewayRegistry.getInstance();\n return registry.getProviderConfig(providerId);\n}\n\n/**\n * Check if a provider is registered\n */\nexport function isProviderRegistered(providerId: string): boolean {\n const registry = GatewayRegistry.getInstance();\n return registry.isProviderRegistered(providerId);\n}\n\n/**\n * Get all registered provider IDs\n */\nexport function getRegisteredProviders(): string[] {\n const registry = GatewayRegistry.getInstance();\n const providers = registry.getProviders();\n return Object.keys(providers);\n}\n\n/**\n * Type guard to check if a string is a valid OpenAI-compatible model ID\n */\nexport function isValidModelId(modelId: string): modelId is ModelRouterModelId {\n const { provider } = parseModelString(modelId);\n return provider !== null && isProviderRegistered(provider);\n}\n\nexport interface GatewayRegistryOptions {\n /**\n * Enable dynamic loading from file system instead of using static bundled registry.\n * Required for syncGateways() and auto-refresh to work.\n * Defaults to true when MASTRA_DEV=true, false otherwise.\n */\n useDynamicLoading?: boolean;\n}\n\n/**\n * GatewayRegistry - Manages dynamic loading and refreshing of provider data from gateways\n * Singleton class that handles runtime updates to the provider registry\n */\nexport class GatewayRegistry {\n private static instance: GatewayRegistry | null = null;\n private lastRefreshTime: Date | null = null;\n private refreshInterval: NodeJS.Timeout | null = null;\n private isRefreshing = false;\n private useDynamicLoading: boolean;\n\n private constructor(options: GatewayRegistryOptions = {}) {\n const isDev = process.env.MASTRA_DEV === 'true' || process.env.MASTRA_DEV === '1';\n this.useDynamicLoading = options.useDynamicLoading ?? isDev;\n }\n\n /**\n * Get the singleton instance\n */\n static getInstance(options?: GatewayRegistryOptions): GatewayRegistry {\n if (!GatewayRegistry.instance) {\n GatewayRegistry.instance = new GatewayRegistry(options);\n }\n return GatewayRegistry.instance;\n }\n\n /**\n * Sync providers from all gateways\n * Requires dynamic loading to be enabled (useDynamicLoading=true).\n * @param forceRefresh - Force refresh even if recently synced\n * @param writeToSrc - Write to src/ directory in addition to dist/ (useful for manual generation in repo)\n */\n async syncGateways(forceRefresh = false, writeToSrc = false): Promise<void> {\n // Only allow sync when dynamic loading is enabled or when explicitly writing to src (build script)\n if (!this.useDynamicLoading && !writeToSrc) {\n // console.debug('[GatewayRegistry] Skipping sync (dynamic loading disabled, registry is static)');\n return;\n }\n\n if (this.isRefreshing && !forceRefresh) {\n // console.debug('[GatewayRegistry] Sync already in progress, skipping...');\n return;\n }\n\n this.isRefreshing = true;\n\n try {\n // console.debug('[GatewayRegistry] Starting gateway sync...');\n\n // Import gateway classes and generation functions\n const { ModelsDevGateway } = await import('./gateways/models-dev.js');\n const { NetlifyGateway } = await import('./gateways/netlify.js');\n const { fetchProvidersFromGateways, writeRegistryFiles } = await import('./registry-generator.js');\n\n // Initialize gateways\n const gateways = [new ModelsDevGateway({}), new NetlifyGateway()];\n\n // Fetch provider data\n const { providers, models } = await fetchProvidersFromGateways(gateways);\n\n // Get package root for file paths\n const packageRoot = getPackageRoot();\n\n // Write to global cache first (so all projects can benefit)\n try {\n fs.mkdirSync(CACHE_DIR, { recursive: true });\n await writeRegistryFiles(GLOBAL_PROVIDER_REGISTRY_JSON, GLOBAL_PROVIDER_TYPES_DTS, providers, models);\n // console.debug(`[GatewayRegistry] ✅ Updated global cache at ${CACHE_DIR}`);\n } catch (error) {\n console.warn('[GatewayRegistry] Failed to write to global cache:', error);\n }\n\n // Write to dist/ (the bundled location that gets distributed)\n const distJsonPath = path.join(packageRoot, 'dist', 'provider-registry.json');\n const distTypesPath = path.join(packageRoot, 'dist', 'llm', 'model', 'provider-types.generated.d.ts');\n\n await writeRegistryFiles(distJsonPath, distTypesPath, providers, models);\n // console.debug(`[GatewayRegistry] ✅ Updated registry files in dist/`);\n\n // Copy to src/ only when explicitly requested (e.g., running the generation script)\n const shouldWriteToSrc = writeToSrc;\n if (shouldWriteToSrc) {\n const srcJsonPath = path.join(packageRoot, 'src', 'llm', 'model', 'provider-registry.json');\n const srcTypesPath = path.join(packageRoot, 'src', 'llm', 'model', 'provider-types.generated.d.ts');\n\n // Copy the already-generated files\n await fs.promises.copyFile(distJsonPath, srcJsonPath);\n await fs.promises.copyFile(distTypesPath, srcTypesPath);\n // console.debug(`[GatewayRegistry] ✅ Copied registry files to src/ (${writeToSrc ? 'manual' : 'dynamic loading'})`);\n }\n\n // Clear the in-memory cache to force reload (dynamic loading only)\n if (this.useDynamicLoading) {\n registryData = null;\n }\n\n this.lastRefreshTime = new Date();\n saveLastRefreshTimeToDisk(this.lastRefreshTime);\n // console.debug(`[GatewayRegistry] ✅ Gateway sync completed at ${this.lastRefreshTime.toISOString()}`);\n } catch (error) {\n console.error('[GatewayRegistry] ❌ Gateway sync failed:', error);\n throw error;\n } finally {\n this.isRefreshing = false;\n }\n }\n\n /**\n * Get the last refresh time (from memory or disk cache)\n */\n getLastRefreshTime(): Date | null {\n return this.lastRefreshTime || getLastRefreshTimeFromDisk();\n }\n\n /**\n * Start auto-refresh on an interval\n * Requires dynamic loading to be enabled (useDynamicLoading=true).\n * @param intervalMs - Interval in milliseconds (default: 1 hour)\n */\n startAutoRefresh(intervalMs = 60 * 60 * 1000): void {\n // Only allow auto-refresh when dynamic loading is enabled\n if (!this.useDynamicLoading) {\n // console.debug('[GatewayRegistry] Skipping auto-refresh (dynamic loading disabled, registry is static)');\n return;\n }\n\n if (this.refreshInterval) {\n // console.debug('[GatewayRegistry] Auto-refresh already running');\n return;\n }\n\n // console.debug(`[GatewayRegistry] Starting auto-refresh (interval: ${intervalMs}ms)`);\n\n // Check if we need to run an immediate sync\n const lastRefresh = getLastRefreshTimeFromDisk();\n const now = Date.now();\n const shouldRefresh = !modelRouterCacheFailed && (!lastRefresh || now - lastRefresh.getTime() > intervalMs);\n\n if (shouldRefresh) {\n // console.debug(\n // `[GatewayRegistry] Running immediate sync (last refresh: ${lastRefresh ? lastRefresh.toISOString() : 'never'})`,\n // );\n this.syncGateways().catch(err => {\n console.error('[GatewayRegistry] Initial auto-refresh failed:', err);\n });\n } else {\n // console.debug( `[GatewayRegistry] Skipping immediate sync (last refresh: ${lastRefresh.toISOString()}, next in ${Math.round((intervalMs - (now - lastRefresh.getTime())) / 1000)}s)`,\n // );\n }\n\n this.refreshInterval = setInterval(() => {\n if (modelRouterCacheFailed && this.refreshInterval) {\n clearInterval(this.refreshInterval);\n this.refreshInterval = null;\n return;\n }\n this.syncGateways().catch(err => {\n console.error('[GatewayRegistry] Auto-refresh failed:', err);\n });\n }, intervalMs);\n\n // Prevent the interval from keeping the process alive\n if (this.refreshInterval.unref) {\n this.refreshInterval.unref();\n }\n }\n\n /**\n * Stop auto-refresh\n */\n stopAutoRefresh(): void {\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval);\n this.refreshInterval = null;\n // console.debug('[GatewayRegistry] Auto-refresh stopped');\n }\n }\n\n /**\n * Get provider configuration by ID\n */\n getProviderConfig(providerId: string): ProviderConfig | undefined {\n const data = loadRegistry(this.useDynamicLoading);\n return data.providers[providerId];\n }\n\n /**\n * Check if a provider is registered\n */\n isProviderRegistered(providerId: string): boolean {\n const data = loadRegistry(this.useDynamicLoading);\n return providerId in data.providers;\n }\n\n /**\n * Get all registered providers\n */\n getProviders(): Record<string, ProviderConfig> {\n const data = loadRegistry(this.useDynamicLoading);\n return data.providers;\n }\n\n /**\n * Get all models\n */\n getModels(): Record<string, string[]> {\n return loadRegistry(this.useDynamicLoading).models;\n }\n}\n\n// Auto-start refresh if enabled\n// Defaults to enabled when MASTRA_DEV=true (which enables dynamic loading by default)\nconst isDev = process.env.MASTRA_DEV === 'true' || process.env.MASTRA_DEV === '1';\nconst autoRefreshEnabled =\n process.env.MASTRA_AUTO_REFRESH_PROVIDERS === 'true' ||\n (process.env.MASTRA_AUTO_REFRESH_PROVIDERS !== 'false' && isDev);\n\nif (autoRefreshEnabled) {\n // console.debug('[GatewayRegistry] Auto-refresh enabled');\n GatewayRegistry.getInstance({ useDynamicLoading: isDev }).startAutoRefresh();\n}\n","import { MastraError } from '../../../error/index.js';\nimport type { MastraModelGateway } from './base.js';\nexport { MastraModelGateway, type ProviderConfig } from './base.js';\nexport { ModelsDevGateway } from './models-dev.js';\nexport { NetlifyGateway } from './netlify.js';\n\n/**\n * Find the gateway that handles a specific model ID based on prefix\n */\nexport function findGatewayForModel(gatewayId: string, gateways: MastraModelGateway[]): MastraModelGateway {\n // First, check for gateways with specific prefixes\n const prefixedGateway = gateways.find((g: MastraModelGateway) => g.prefix && gatewayId.startsWith(`${g.prefix}/`));\n if (prefixedGateway) {\n return prefixedGateway;\n }\n\n // Then check gateways without prefixes (like models.dev) that might handle the model\n const unprefixedGateways = gateways.filter((g: MastraModelGateway) => !g.prefix);\n for (const gateway of unprefixedGateways) {\n // These gateways will check internally if they can handle the model\n return gateway; // For now, return the first unprefixed gateway (models.dev)\n }\n\n throw new MastraError({\n id: 'MODEL_ROUTER_NO_GATEWAY_FOUND',\n category: 'USER',\n domain: 'MODEL_ROUTER',\n text: `No Mastra model router gateway found for model id ${gatewayId}`,\n });\n}\n","import { createHash } from 'node:crypto';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';\nimport type { LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2StreamPart } from '@ai-sdk/provider-v5';\nimport { parseModelRouterId } from './gateway-resolver.js';\nimport type { MastraModelGateway } from './gateways/base.js';\nimport { findGatewayForModel } from './gateways/index.js';\n\nimport { ModelsDevGateway } from './gateways/models-dev.js';\nimport { NetlifyGateway } from './gateways/netlify.js';\nimport type { ModelRouterModelId } from './provider-registry.js';\nimport { PROVIDER_REGISTRY } from './provider-registry.js';\nimport type { OpenAICompatibleConfig } from './shared.types';\n\nfunction getStaticProvidersByGateway(name: string) {\n return Object.fromEntries(Object.entries(PROVIDER_REGISTRY).filter(([_provider, config]) => config.gateway === name));\n}\n\nexport const gateways = [new NetlifyGateway(), new ModelsDevGateway(getStaticProvidersByGateway(`models.dev`))];\n\nexport class ModelRouterLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly defaultObjectGenerationMode = 'json' as const;\n readonly supportsStructuredOutputs = true;\n readonly supportsImageUrls = true;\n readonly supportedUrls = {} as Record<string, RegExp[]>;\n\n readonly modelId: string;\n readonly provider: string;\n\n private config: OpenAICompatibleConfig & { routerId: string };\n private gateway: MastraModelGateway;\n\n constructor(config: ModelRouterModelId | OpenAICompatibleConfig) {\n // Normalize config to always have an 'id' field for routing\n let normalizedConfig: {\n id: `${string}/${string}`;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n };\n\n if (typeof config === 'string') {\n normalizedConfig = { id: config as `${string}/${string}` };\n } else if ('providerId' in config && 'modelId' in config) {\n // Convert providerId/modelId to id format\n normalizedConfig = {\n id: `${config.providerId}/${config.modelId}` as `${string}/${string}`,\n url: config.url,\n apiKey: config.apiKey,\n headers: config.headers,\n };\n } else {\n // config has 'id' field\n normalizedConfig = {\n id: config.id,\n url: config.url,\n apiKey: config.apiKey,\n headers: config.headers,\n };\n }\n\n const parsedConfig: {\n id: `${string}/${string}`;\n routerId: string;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n } = {\n ...normalizedConfig,\n routerId: normalizedConfig.id,\n };\n\n // Resolve gateway once using the normalized ID\n this.gateway = findGatewayForModel(normalizedConfig.id, gateways);\n // Extract provider from id if present\n const parsed = parseModelRouterId(normalizedConfig.id, this.gateway.prefix);\n\n this.provider = parsed.providerId || 'openai-compatible';\n\n if (parsed.providerId && parsed.modelId !== normalizedConfig.id) {\n parsedConfig.id = parsed.modelId as `${string}/${string}`;\n }\n\n this.modelId = parsedConfig.id;\n this.config = parsedConfig;\n }\n\n async doGenerate(): Promise<never> {\n throw new Error(\n 'doGenerate is not supported by Mastra model router. ' +\n 'Mastra only uses streaming (doStream) for all LLM calls.',\n );\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n // Validate API key and return error stream if validation fails\n let apiKey: string;\n try {\n // If custom URL is provided, skip gateway API key resolution\n // The provider might not be in the registry (e.g., custom providers like ollama)\n if (this.config.url) {\n apiKey = this.config.apiKey || '';\n } else {\n apiKey = this.config.apiKey || (await this.gateway.getApiKey(this.config.routerId));\n }\n } catch (error) {\n // Return an error stream instead of throwing\n return {\n stream: new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: 'error',\n error: error,\n } as LanguageModelV2StreamPart);\n },\n }),\n };\n }\n\n const model = await this.resolveLanguageModel({\n apiKey,\n ...parseModelRouterId(this.config.routerId, this.gateway.prefix),\n });\n\n return model.doStream(options);\n }\n\n private async resolveLanguageModel({\n modelId,\n providerId,\n apiKey,\n }: {\n modelId: string;\n providerId: string;\n apiKey: string;\n }): Promise<LanguageModelV2> {\n const key = createHash('sha256')\n .update(this.gateway.name + modelId + providerId + apiKey + (this.config.url || ''))\n .digest('hex');\n if (ModelRouterLanguageModel.modelInstances.has(key)) return ModelRouterLanguageModel.modelInstances.get(key)!;\n\n // If custom URL is provided, use it directly with openai-compatible\n if (this.config.url) {\n const modelInstance = createOpenAICompatible({\n name: providerId,\n apiKey,\n baseURL: this.config.url,\n headers: this.config.headers,\n supportsStructuredOutputs: true,\n }).chatModel(modelId);\n ModelRouterLanguageModel.modelInstances.set(key, modelInstance);\n return modelInstance;\n }\n\n const modelInstance = await this.gateway.resolveLanguageModel({ modelId, providerId, apiKey });\n ModelRouterLanguageModel.modelInstances.set(key, modelInstance);\n return modelInstance;\n }\n private static modelInstances = new Map<string, LanguageModelV2>();\n}\n","import type { Mastra } from '../../mastra';\nimport { RuntimeContext } from '../../runtime-context';\nimport { ModelRouterLanguageModel } from './router';\nimport type { MastraModelConfig, MastraLanguageModel, OpenAICompatibleConfig } from './shared.types';\n\n/**\n * Type guard to check if a model config is an OpenAICompatibleConfig object\n * @internal\n */\nexport function isOpenAICompatibleObjectConfig(\n modelConfig:\n | MastraModelConfig\n | (({\n runtimeContext,\n mastra,\n }: {\n runtimeContext: RuntimeContext;\n mastra?: Mastra;\n }) => MastraModelConfig | Promise<MastraModelConfig>),\n): modelConfig is OpenAICompatibleConfig {\n if (typeof modelConfig === 'object' && 'specificationVersion' in modelConfig) return false;\n // Check for OpenAICompatibleConfig - it should have either:\n // 1. 'id' field (but NOT 'model' - that's ModelWithRetries)\n // 2. Both 'providerId' and 'modelId' fields\n if (typeof modelConfig === 'object' && !('model' in modelConfig)) {\n if ('id' in modelConfig) return true;\n if ('providerId' in modelConfig && 'modelId' in modelConfig) return true;\n }\n return false;\n}\n\n/**\n * Resolves a model configuration to a LanguageModel instance.\n * Supports:\n * - Magic strings like \"openai/gpt-4o\"\n * - Config objects like { id: \"openai/gpt-4o\", apiKey: \"...\" }\n * - Direct LanguageModel instances\n * - Dynamic functions that return any of the above\n *\n * @param modelConfig The model configuration\n * @param runtimeContext Optional runtime context for dynamic resolution\n * @param mastra Optional Mastra instance for dynamic resolution\n * @returns A resolved LanguageModel instance\n *\n * @example\n * ```typescript\n * // String resolution\n * const model = await resolveModelConfig(\"openai/gpt-4o\");\n *\n * // Config object resolution\n * const model = await resolveModelConfig({\n * id: \"openai/gpt-4o\",\n * apiKey: \"sk-...\"\n * });\n *\n * // Dynamic resolution\n * const model = await resolveModelConfig(\n * ({ runtimeContext }) => runtimeContext.get(\"preferredModel\")\n * );\n * ```\n */\nexport async function resolveModelConfig(\n modelConfig:\n | MastraModelConfig\n | (({\n runtimeContext,\n mastra,\n }: {\n runtimeContext: RuntimeContext;\n mastra?: Mastra;\n }) => MastraModelConfig | Promise<MastraModelConfig>),\n runtimeContext: RuntimeContext = new RuntimeContext(),\n mastra?: Mastra,\n): Promise<MastraLanguageModel> {\n // If it's already a LanguageModel, return it\n if (typeof modelConfig === 'object' && 'specificationVersion' in modelConfig) {\n return modelConfig;\n }\n\n // If it's a string (magic string like \"openai/gpt-4o\") or OpenAICompatibleConfig, create ModelRouterLanguageModel\n if (typeof modelConfig === 'string' || isOpenAICompatibleObjectConfig(modelConfig)) {\n return new ModelRouterLanguageModel(modelConfig);\n }\n\n // If it's a function, resolve it first\n if (typeof modelConfig === 'function') {\n const fromDynamic = await modelConfig({ runtimeContext, mastra });\n if (typeof fromDynamic === 'string' || isOpenAICompatibleObjectConfig(fromDynamic)) {\n return new ModelRouterLanguageModel(fromDynamic);\n }\n return fromDynamic;\n }\n\n throw new Error('Invalid model configuration provided');\n}\n","import { createGoogleGenerativeAI } from '@ai-sdk/google-v5';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';\nimport { createOpenAI } from '@ai-sdk/openai-v5';\nimport type { EmbeddingModelV2 } from '@ai-sdk/provider-v5';\n\nimport { GatewayRegistry } from './provider-registry.js';\nimport type { OpenAICompatibleConfig } from './shared.types.js';\n\n/**\n * Information about a known embedding model\n */\nexport interface EmbeddingModelInfo {\n id: string;\n provider: string;\n dimensions: number;\n maxInputTokens: number;\n description?: string;\n}\n\n/**\n * Hardcoded list of known embedding models\n * This is a curated list that provides autocomplete support\n */\nexport const EMBEDDING_MODELS: EmbeddingModelInfo[] = [\n // OpenAI\n {\n id: 'text-embedding-3-small',\n provider: 'openai',\n dimensions: 1536,\n maxInputTokens: 8191,\n description: 'OpenAI text-embedding-3-small model',\n },\n {\n id: 'text-embedding-3-large',\n provider: 'openai',\n dimensions: 3072,\n maxInputTokens: 8191,\n description: 'OpenAI text-embedding-3-large model',\n },\n {\n id: 'text-embedding-ada-002',\n provider: 'openai',\n dimensions: 1536,\n maxInputTokens: 8191,\n description: 'OpenAI text-embedding-ada-002 model',\n },\n // Google\n {\n id: 'gemini-embedding-001',\n provider: 'google',\n dimensions: 768,\n maxInputTokens: 2048,\n description: 'Google gemini-embedding-001 model',\n },\n {\n id: 'text-embedding-004',\n provider: 'google',\n dimensions: 768,\n maxInputTokens: 3072,\n description: 'Google text-embedding-004 model',\n },\n];\n\n/**\n * Type for embedding model IDs in the format \"provider/model\"\n */\nexport type EmbeddingModelId =\n | 'openai/text-embedding-3-small'\n | 'openai/text-embedding-3-large'\n | 'openai/text-embedding-ada-002'\n | 'google/gemini-embedding-001'\n | 'google/text-embedding-004';\n\n/**\n * Check if a model ID is a known embedding model\n */\nexport function isKnownEmbeddingModel(modelId: string): boolean {\n return EMBEDDING_MODELS.some(m => m.id === modelId);\n}\n\n/**\n * Get information about a known embedding model\n */\nexport function getEmbeddingModelInfo(modelId: string): EmbeddingModelInfo | undefined {\n return EMBEDDING_MODELS.find(m => m.id === modelId);\n}\n\n/**\n * Model router for embedding models that uses the provider/model string format.\n * Automatically resolves the correct AI SDK provider and initializes the embedding model.\n *\n * @example\n * ```ts\n * const embedder = new ModelRouterEmbeddingModel('openai/text-embedding-3-small');\n * const result = await embedder.doEmbed({ values: ['hello world'] });\n * ```\n */\nexport class ModelRouterEmbeddingModel<VALUE extends string = string> implements EmbeddingModelV2<VALUE> {\n readonly specificationVersion = 'v2' as const;\n readonly modelId: string;\n readonly provider: string;\n maxEmbeddingsPerCall: number | PromiseLike<number | undefined> = 2048;\n supportsParallelCalls: boolean | PromiseLike<boolean> = true;\n\n private providerModel: EmbeddingModelV2<VALUE>;\n\n constructor(config: string | OpenAICompatibleConfig) {\n // Normalize config to always have provider and model IDs\n let normalizedConfig: {\n providerId: string;\n modelId: string;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n };\n\n if (typeof config === 'string') {\n // Parse provider/model from string (e.g., \"openai/text-embedding-3-small\")\n const parts = config.split('/');\n if (parts.length !== 2) {\n throw new Error(`Invalid model string format: \"${config}\". Expected format: \"provider/model\"`);\n }\n const [providerId, modelId] = parts as [string, string];\n normalizedConfig = { providerId, modelId };\n } else if ('providerId' in config && 'modelId' in config) {\n normalizedConfig = {\n providerId: config.providerId,\n modelId: config.modelId,\n url: config.url,\n apiKey: config.apiKey,\n headers: config.headers,\n };\n } else {\n // config has 'id' field\n const parts = config.id.split('/');\n if (parts.length !== 2) {\n throw new Error(`Invalid model string format: \"${config.id}\". Expected format: \"provider/model\"`);\n }\n const [providerId, modelId] = parts as [string, string];\n normalizedConfig = {\n providerId,\n modelId,\n url: config.url,\n apiKey: config.apiKey,\n headers: config.headers,\n };\n }\n\n this.provider = normalizedConfig.providerId;\n this.modelId = normalizedConfig.modelId;\n\n // If custom URL is provided, skip provider registry validation\n // and use the provided API key (or empty string if not provided)\n if (normalizedConfig.url) {\n const apiKey = normalizedConfig.apiKey || '';\n this.providerModel = createOpenAICompatible({\n name: normalizedConfig.providerId,\n apiKey,\n baseURL: normalizedConfig.url,\n headers: normalizedConfig.headers,\n }).textEmbeddingModel(normalizedConfig.modelId) as EmbeddingModelV2<VALUE>;\n } else {\n // Get provider config from registry\n const registry = GatewayRegistry.getInstance();\n const providerConfig = registry.getProviderConfig(normalizedConfig.providerId);\n\n if (!providerConfig) {\n throw new Error(`Unknown provider: ${normalizedConfig.providerId}`);\n }\n\n // Get API key from config or environment\n let apiKey = normalizedConfig.apiKey;\n if (!apiKey) {\n const apiKeyEnvVar = providerConfig.apiKeyEnvVar;\n if (Array.isArray(apiKeyEnvVar)) {\n // Try each possible environment variable\n for (const envVar of apiKeyEnvVar) {\n apiKey = process.env[envVar];\n if (apiKey) break;\n }\n } else {\n apiKey = process.env[apiKeyEnvVar];\n }\n }\n\n if (!apiKey) {\n const envVarDisplay = Array.isArray(providerConfig.apiKeyEnvVar)\n ? providerConfig.apiKeyEnvVar.join(' or ')\n : providerConfig.apiKeyEnvVar;\n throw new Error(`API key not found for provider ${normalizedConfig.providerId}. Set ${envVarDisplay}`);\n }\n\n // Initialize the provider model directly in constructor\n if (normalizedConfig.providerId === 'openai') {\n this.providerModel = createOpenAI({ apiKey }).textEmbeddingModel(\n normalizedConfig.modelId,\n ) as EmbeddingModelV2<VALUE>;\n } else if (normalizedConfig.providerId === 'google') {\n this.providerModel = createGoogleGenerativeAI({ apiKey }).textEmbedding(\n normalizedConfig.modelId,\n ) as EmbeddingModelV2<VALUE>;\n } else {\n // Use OpenAI-compatible provider for other providers\n if (!providerConfig.url) {\n throw new Error(`Provider ${normalizedConfig.providerId} does not have a URL configured`);\n }\n this.providerModel = createOpenAICompatible({\n name: normalizedConfig.providerId,\n apiKey,\n baseURL: providerConfig.url,\n }).textEmbeddingModel(normalizedConfig.modelId) as EmbeddingModelV2<VALUE>;\n }\n }\n\n // Copy properties from the provider model if available\n if (this.providerModel.maxEmbeddingsPerCall !== undefined) {\n this.maxEmbeddingsPerCall = this.providerModel.maxEmbeddingsPerCall;\n }\n if (this.providerModel.supportsParallelCalls !== undefined) {\n this.supportsParallelCalls = this.providerModel.supportsParallelCalls;\n }\n }\n\n async doEmbed(\n args: Parameters<EmbeddingModelV2<VALUE>['doEmbed']>[0],\n ): Promise<Awaited<ReturnType<EmbeddingModelV2<VALUE>['doEmbed']>>> {\n return this.providerModel.doEmbed(args);\n }\n}\n"]}
@@ -15,6 +15,75 @@ function safeParseErrorObject(obj) {
15
15
  return String(obj);
16
16
  }
17
17
  }
18
+ function getErrorFromUnknown(unknown, options = {}) {
19
+ const defaultOptions = {
20
+ fallbackMessage: "Unknown error",
21
+ maxDepth: 5,
22
+ supportSerialization: true,
23
+ includeStack: true
24
+ };
25
+ const mergedOptions = options ? { ...defaultOptions, ...options } : defaultOptions;
26
+ const { fallbackMessage, maxDepth, supportSerialization, includeStack } = mergedOptions;
27
+ if (unknown && unknown instanceof Error) {
28
+ if (includeStack === false) {
29
+ unknown.stack = void 0;
30
+ }
31
+ if (supportSerialization) {
32
+ addErrorToJSON(unknown);
33
+ }
34
+ return unknown;
35
+ }
36
+ let error;
37
+ if (unknown && typeof unknown === "object") {
38
+ const errorMessage = unknown && "message" in unknown && typeof unknown.message === "string" ? unknown.message : safeParseErrorObject(unknown);
39
+ const errorCause = "cause" in unknown && unknown.cause !== void 0 ? unknown.cause instanceof Error ? unknown.cause : maxDepth > 0 ? getErrorFromUnknown(unknown.cause, { ...mergedOptions, maxDepth: maxDepth - 1 }) : void 0 : void 0;
40
+ error = new Error(errorMessage, errorCause ? { cause: errorCause } : void 0);
41
+ const { stack: _, ...propsWithoutStack } = unknown;
42
+ Object.assign(error, propsWithoutStack);
43
+ if (includeStack) {
44
+ error.stack = "stack" in unknown && typeof unknown.stack === "string" ? unknown.stack : void 0;
45
+ }
46
+ } else if (unknown && typeof unknown === "string") {
47
+ error = new Error(unknown);
48
+ error.stack = void 0;
49
+ } else {
50
+ error = new Error(fallbackMessage);
51
+ error.stack = void 0;
52
+ }
53
+ if (supportSerialization) {
54
+ addErrorToJSON(error);
55
+ }
56
+ return error;
57
+ }
58
+ function addErrorToJSON(error) {
59
+ if (error.toJSON) {
60
+ return;
61
+ }
62
+ Object.defineProperty(error, "toJSON", {
63
+ value: function() {
64
+ const json = {
65
+ message: this.message,
66
+ name: this.name
67
+ };
68
+ if (this.stack !== void 0) {
69
+ json.stack = this.stack;
70
+ }
71
+ if (this.cause !== void 0) {
72
+ json.cause = this.cause;
73
+ }
74
+ const errorAsAny = this;
75
+ for (const key in errorAsAny) {
76
+ if (errorAsAny.hasOwnProperty(key) && !(key in json) && key !== "toJSON") {
77
+ json[key] = errorAsAny[key];
78
+ }
79
+ }
80
+ return json;
81
+ },
82
+ enumerable: false,
83
+ writable: true,
84
+ configurable: true
85
+ });
86
+ }
18
87
 
19
88
  // src/error/index.ts
20
89
  var ErrorDomain = /* @__PURE__ */ ((ErrorDomain2) => {
@@ -98,6 +167,7 @@ exports.ErrorCategory = ErrorCategory;
98
167
  exports.ErrorDomain = ErrorDomain;
99
168
  exports.MastraBaseError = MastraBaseError;
100
169
  exports.MastraError = MastraError;
170
+ exports.getErrorFromUnknown = getErrorFromUnknown;
101
171
  exports.safeParseErrorObject = safeParseErrorObject;
102
- //# sourceMappingURL=chunk-WM4VQWOZ.cjs.map
103
- //# sourceMappingURL=chunk-WM4VQWOZ.cjs.map
172
+ //# sourceMappingURL=chunk-5NTO7S5I.cjs.map
173
+ //# sourceMappingURL=chunk-5NTO7S5I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error/utils.ts","../src/error/index.ts"],"names":["ErrorDomain","ErrorCategory"],"mappings":"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","file":"chunk-5NTO7S5I.cjs","sourcesContent":["/**\n * Safely converts an object to a string representation.\n * Uses JSON.stringify first, but falls back to String() if:\n * - JSON.stringify fails (e.g., circular references)\n * - JSON.stringify returns \"{}\" (e.g., Error objects with no enumerable properties)\n */\nexport function safeParseErrorObject(obj: unknown): string {\n if (typeof obj !== 'object' || obj === null) {\n return String(obj);\n }\n\n try {\n const stringified = JSON.stringify(obj);\n // If JSON.stringify returns \"{}\", fall back to String() for better representation\n if (stringified === '{}') {\n return String(obj);\n }\n return stringified;\n } catch {\n // Fallback to String() if JSON.stringify fails (e.g., circular references)\n return String(obj);\n }\n}\n\ntype SerializableError = Error & { toJSON: () => Record<string, any> };\n\n/**\n * Safely converts an unknown error to an Error instance.\n */\nexport function getErrorFromUnknown<SERIALIZABLE extends boolean = true>(\n unknown: unknown,\n options: {\n /**\n * The fallback error message to use if the unknown error cannot be parsed.\n */\n fallbackMessage?: string;\n /**\n * The maximum depth to parse the cause of the error.\n */\n maxDepth?: number;\n /**\n * Whether to add .toJSON() method to the error instance to support serialization. (JSON.stringify)\n * @example\n * const error = getErrorFromUnknown(new Error('test'), { supportSerialization: true });\n * JSON.stringify(error) // { message: 'test', name: 'Error', stack: 'Error: test\\n at ...' }\n */\n supportSerialization?: SERIALIZABLE;\n /**\n * Whether to include the stack of the error.\n */\n includeStack?: boolean;\n } = {},\n): SERIALIZABLE extends true ? SerializableError : Error {\n const defaultOptions = {\n fallbackMessage: 'Unknown error',\n maxDepth: 5,\n supportSerialization: true,\n includeStack: true,\n };\n const mergedOptions = options ? { ...defaultOptions, ...options } : defaultOptions;\n const { fallbackMessage, maxDepth, supportSerialization, includeStack } = mergedOptions;\n\n if (unknown && unknown instanceof Error) {\n if (includeStack === false) {\n unknown.stack = undefined;\n }\n if (supportSerialization) {\n addErrorToJSON(unknown);\n }\n return unknown as SERIALIZABLE extends true ? SerializableError : Error;\n }\n\n let error: Error | undefined;\n\n if (unknown && typeof unknown === 'object') {\n const errorMessage =\n unknown && 'message' in unknown && typeof unknown.message === 'string'\n ? unknown.message\n : safeParseErrorObject(unknown);\n\n const errorCause =\n 'cause' in unknown && unknown.cause !== undefined\n ? unknown.cause instanceof Error\n ? unknown.cause\n : maxDepth > 0 // Only process cause if we haven't exceeded max depth\n ? getErrorFromUnknown(unknown.cause, { ...mergedOptions, maxDepth: maxDepth - 1 })\n : undefined\n : undefined;\n\n error = new Error(errorMessage, errorCause ? { cause: errorCause } : undefined);\n\n const { stack: _, ...propsWithoutStack } = unknown as any;\n Object.assign(error as Error, propsWithoutStack);\n if (includeStack) {\n error.stack = 'stack' in unknown && typeof unknown.stack === 'string' ? unknown.stack : undefined;\n }\n } else if (unknown && typeof unknown === 'string') {\n error = new Error(unknown);\n error.stack = undefined;\n } else {\n error = new Error(fallbackMessage);\n error.stack = undefined;\n }\n\n if (supportSerialization) {\n addErrorToJSON(error);\n }\n return error as SERIALIZABLE extends true ? SerializableError : Error;\n}\n\n/**\n * Adds a toJSON method to an Error instance for proper serialization.\n * Ensures that message, name, stack, cause, and custom properties are all serialized.\n */\nfunction addErrorToJSON(error: Error): void {\n if ((error as SerializableError).toJSON) {\n return;\n }\n\n // Define toJSON as non-enumerable to avoid interfering with object comparisons\n Object.defineProperty(error, 'toJSON', {\n value: function (this: Error) {\n const json: Record<string, any> = {\n message: this.message,\n name: this.name,\n };\n if (this.stack !== undefined) {\n json.stack = this.stack;\n }\n if (this.cause !== undefined) {\n json.cause = this.cause;\n }\n // Include all enumerable custom properties\n const errorAsAny = this as any;\n for (const key in errorAsAny) {\n if (errorAsAny.hasOwnProperty(key) && !(key in json) && key !== 'toJSON') {\n json[key] = errorAsAny[key];\n }\n }\n\n return json;\n },\n enumerable: false,\n writable: true,\n configurable: true,\n });\n}\n","import { safeParseErrorObject } from './utils.js';\nexport { getErrorFromUnknown } from './utils.js';\n\nexport enum ErrorDomain {\n TOOL = 'TOOL',\n AGENT = 'AGENT',\n MCP = 'MCP',\n AGENT_NETWORK = 'AGENT_NETWORK',\n MASTRA_SERVER = 'MASTRA_SERVER',\n MASTRA_TELEMETRY = 'MASTRA_TELEMETRY',\n MASTRA_OBSERVABILITY = 'MASTRA_OBSERVABILITY',\n MASTRA_WORKFLOW = 'MASTRA_WORKFLOW',\n MASTRA_VOICE = 'MASTRA_VOICE',\n MASTRA_VECTOR = 'MASTRA_VECTOR',\n LLM = 'LLM',\n EVAL = 'EVAL',\n SCORER = 'SCORER',\n A2A = 'A2A',\n MASTRA_INSTANCE = 'MASTRA_INSTANCE',\n MASTRA = 'MASTRA',\n DEPLOYER = 'DEPLOYER',\n STORAGE = 'STORAGE',\n MODEL_ROUTER = 'MODEL_ROUTER',\n}\n\nexport enum ErrorCategory {\n UNKNOWN = 'UNKNOWN',\n USER = 'USER',\n SYSTEM = 'SYSTEM',\n THIRD_PARTY = 'THIRD_PARTY',\n}\n\ntype Scalar = null | boolean | number | string;\n\ntype Json<T> = [T] extends [Scalar | undefined]\n ? Scalar\n : [T] extends [{ [x: number]: unknown }]\n ? { [K in keyof T]: Json<T[K]> }\n : never;\n\n/**\n * Defines the structure for an error's metadata.\n * This is used to create instances of MastraError.\n */\nexport interface IErrorDefinition<D, C> {\n /** Unique identifier for the error. */\n id: Uppercase<string>;\n /**\n * Optional custom error message that overrides the original error message.\n * If not provided, the original error message will be used, or 'Unknown error' if no error is provided.\n */\n text?: string;\n /**\n * Functional domain of the error (e.g., CONFIG, BUILD, API).\n */\n domain: D;\n /** Broad category of the error (e.g., USER, SYSTEM, THIRD_PARTY). */\n category: C;\n\n details?: Record<string, Json<Scalar>>;\n}\n\n/**\n * Base error class for the Mastra ecosystem.\n * It standardizes error reporting and can be extended for more specific error types.\n */\nexport class MastraBaseError<D, C> extends Error {\n public readonly id: Uppercase<string>;\n public readonly domain: D;\n public readonly category: C;\n public readonly details?: Record<string, Json<Scalar>> = {};\n public readonly message: string;\n\n constructor(\n errorDefinition: IErrorDefinition<D, C>,\n originalError?: string | Error | MastraBaseError<D, C> | unknown,\n ) {\n // Convert originalError to Error instance\n let error: Error | undefined;\n if (originalError instanceof Error) {\n error = originalError;\n } else if (originalError) {\n const errorMessage = safeParseErrorObject(originalError);\n error = new Error(errorMessage);\n }\n\n const message = errorDefinition.text ?? error?.message ?? 'Unknown error';\n\n super(message, { cause: error });\n this.id = errorDefinition.id;\n this.domain = errorDefinition.domain;\n this.category = errorDefinition.category;\n this.details = errorDefinition.details ?? {};\n this.message = message;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Returns a structured representation of the error, useful for logging or API responses.\n */\n public toJSONDetails() {\n return {\n message: this.message,\n domain: this.domain,\n category: this.category,\n details: this.details,\n };\n }\n\n public toJSON() {\n return {\n message: this.message,\n details: this.toJSONDetails(),\n code: this.id,\n };\n }\n\n public toString() {\n return JSON.stringify(this.toJSON());\n }\n}\n\nexport class MastraError extends MastraBaseError<`${ErrorDomain}`, `${ErrorCategory}`> {}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk5CHZUAZV_cjs = require('./chunk-5CHZUAZV.cjs');
3
+ var chunk34WQUECJ_cjs = require('./chunk-34WQUECJ.cjs');
4
4
 
5
5
  // src/relevance/cohere/index.ts
6
6
  var CohereRelevanceScorer = class {
@@ -54,7 +54,7 @@ Relevance score (0-1):`;
54
54
  var MastraAgentRelevanceScorer = class {
55
55
  agent;
56
56
  constructor(name, model) {
57
- this.agent = new chunk5CHZUAZV_cjs.Agent({
57
+ this.agent = new chunk34WQUECJ_cjs.Agent({
58
58
  name: `Relevance Scorer ${name}`,
59
59
  instructions: `You are a specialized agent for evaluating the relevance of text to queries.
60
60
  Your task is to rate how well a text passage answers a given query.
@@ -87,5 +87,5 @@ Always return just the number, no explanation.`,
87
87
  exports.CohereRelevanceScorer = CohereRelevanceScorer;
88
88
  exports.MastraAgentRelevanceScorer = MastraAgentRelevanceScorer;
89
89
  exports.createSimilarityPrompt = createSimilarityPrompt;
90
- //# sourceMappingURL=chunk-MQ67HP3O.cjs.map
91
- //# sourceMappingURL=chunk-MQ67HP3O.cjs.map
90
+ //# sourceMappingURL=chunk-5P4S4AVU.cjs.map
91
+ //# sourceMappingURL=chunk-5P4S4AVU.cjs.map