@mastra/core 0.20.0 → 0.20.1-alpha.2

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 (200) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/agent/agent.d.ts +375 -9
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/index.cjs +11 -11
  5. package/dist/agent/index.js +2 -2
  6. package/dist/agent/input-processor/index.cjs +6 -6
  7. package/dist/agent/input-processor/index.js +1 -1
  8. package/dist/agent/types.d.ts +66 -0
  9. package/dist/agent/types.d.ts.map +1 -1
  10. package/dist/agent/workflows/prepare-stream/index.d.ts +19 -3
  11. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  12. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +5 -1
  13. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts.map +1 -1
  14. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +5 -1
  15. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
  16. package/dist/agent/workflows/prepare-stream/stream-step.d.ts +5 -1
  17. package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
  18. package/dist/ai-tracing/index.cjs +32 -32
  19. package/dist/ai-tracing/index.js +1 -1
  20. package/dist/{chunk-3NNB72OL.cjs → chunk-33DTPWTJ.cjs} +7 -7
  21. package/dist/{chunk-3NNB72OL.cjs.map → chunk-33DTPWTJ.cjs.map} +1 -1
  22. package/dist/{chunk-CJDOU6WP.js → chunk-3KBXOXG6.js} +3 -3
  23. package/dist/{chunk-CJDOU6WP.js.map → chunk-3KBXOXG6.js.map} +1 -1
  24. package/dist/{chunk-ZNK5RN5D.cjs → chunk-3Z3DP6S2.cjs} +6 -6
  25. package/dist/{chunk-ZNK5RN5D.cjs.map → chunk-3Z3DP6S2.cjs.map} +1 -1
  26. package/dist/{chunk-KGBDRSMX.js → chunk-5I6DXBUR.js} +4 -4
  27. package/dist/{chunk-KGBDRSMX.js.map → chunk-5I6DXBUR.js.map} +1 -1
  28. package/dist/{chunk-7EUC32F3.cjs → chunk-6K7IMZVR.cjs} +617 -24
  29. package/dist/chunk-6K7IMZVR.cjs.map +1 -0
  30. package/dist/{chunk-FV4QVXO4.js → chunk-6OLRLZJ3.js} +37 -2
  31. package/dist/chunk-6OLRLZJ3.js.map +1 -0
  32. package/dist/{chunk-OXLN4CWA.js → chunk-B5GBHE4E.js} +3 -3
  33. package/dist/{chunk-OXLN4CWA.js.map → chunk-B5GBHE4E.js.map} +1 -1
  34. package/dist/{chunk-2SH5WPUA.cjs → chunk-BG5FC6ZZ.cjs} +407 -803
  35. package/dist/chunk-BG5FC6ZZ.cjs.map +1 -0
  36. package/dist/{chunk-COYTVUIL.js → chunk-EKFF7JLS.js} +610 -17
  37. package/dist/chunk-EKFF7JLS.js.map +1 -0
  38. package/dist/{chunk-BOJNXNRV.js → chunk-FJIABZVI.js} +3 -3
  39. package/dist/{chunk-BOJNXNRV.js.map → chunk-FJIABZVI.js.map} +1 -1
  40. package/dist/{chunk-RYFQKXXS.js → chunk-H4KO46HZ.js} +3 -3
  41. package/dist/{chunk-RYFQKXXS.js.map → chunk-H4KO46HZ.js.map} +1 -1
  42. package/dist/{chunk-T4H33PBR.cjs → chunk-IKLSJCMT.cjs} +360 -69
  43. package/dist/chunk-IKLSJCMT.cjs.map +1 -0
  44. package/dist/{chunk-K4AYIXVH.cjs → chunk-L5A4MRCK.cjs} +4 -4
  45. package/dist/{chunk-K4AYIXVH.cjs.map → chunk-L5A4MRCK.cjs.map} +1 -1
  46. package/dist/{chunk-DVHBWEYY.cjs → chunk-LCJHFYJS.cjs} +7 -7
  47. package/dist/{chunk-DVHBWEYY.cjs.map → chunk-LCJHFYJS.cjs.map} +1 -1
  48. package/dist/{chunk-I6TOPBP6.cjs → chunk-MHHMY2K4.cjs} +49 -18
  49. package/dist/chunk-MHHMY2K4.cjs.map +1 -0
  50. package/dist/{chunk-DQISKQDE.js → chunk-OBAFLVGD.js} +342 -51
  51. package/dist/chunk-OBAFLVGD.js.map +1 -0
  52. package/dist/{chunk-6R46VE63.js → chunk-OPHFW56S.js} +39 -8
  53. package/dist/chunk-OPHFW56S.js.map +1 -0
  54. package/dist/{chunk-LCJP7LWN.cjs → chunk-P4ZPZKZY.cjs} +6 -6
  55. package/dist/{chunk-LCJP7LWN.cjs.map → chunk-P4ZPZKZY.cjs.map} +1 -1
  56. package/dist/{chunk-QR5VZWWT.js → chunk-P7WEYMRS.js} +3 -3
  57. package/dist/{chunk-QR5VZWWT.js.map → chunk-P7WEYMRS.js.map} +1 -1
  58. package/dist/{chunk-YEEAHLAK.cjs → chunk-PWPESTZZ.cjs} +4 -4
  59. package/dist/{chunk-YEEAHLAK.cjs.map → chunk-PWPESTZZ.cjs.map} +1 -1
  60. package/dist/{chunk-7HUKQ6SZ.cjs → chunk-Q3S3BXHO.cjs} +4 -4
  61. package/dist/{chunk-7HUKQ6SZ.cjs.map → chunk-Q3S3BXHO.cjs.map} +1 -1
  62. package/dist/{chunk-WP2KQXPV.js → chunk-RMMGYPXG.js} +3 -3
  63. package/dist/{chunk-WP2KQXPV.js.map → chunk-RMMGYPXG.js.map} +1 -1
  64. package/dist/{chunk-A4RAEU6X.cjs → chunk-SE4PA467.cjs} +37 -2
  65. package/dist/chunk-SE4PA467.cjs.map +1 -0
  66. package/dist/{chunk-AND6J5LG.js → chunk-W2WXYTYI.js} +407 -803
  67. package/dist/chunk-W2WXYTYI.js.map +1 -0
  68. package/dist/{chunk-OKIHIKXV.cjs → chunk-WE6ILDQY.cjs} +4 -4
  69. package/dist/{chunk-OKIHIKXV.cjs.map → chunk-WE6ILDQY.cjs.map} +1 -1
  70. package/dist/{chunk-ZJ2UFCTS.js → chunk-Y2TIJVKC.js} +3 -3
  71. package/dist/{chunk-ZJ2UFCTS.js.map → chunk-Y2TIJVKC.js.map} +1 -1
  72. package/dist/index.cjs +52 -52
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.js +11 -11
  75. package/dist/index.js.map +1 -1
  76. package/dist/integration/index.cjs +3 -3
  77. package/dist/integration/index.js +1 -1
  78. package/dist/llm/index.cjs +6 -6
  79. package/dist/llm/index.d.ts +1 -1
  80. package/dist/llm/index.d.ts.map +1 -1
  81. package/dist/llm/index.js +1 -1
  82. package/dist/llm/model/gateway-resolver.d.ts +7 -5
  83. package/dist/llm/model/gateway-resolver.d.ts.map +1 -1
  84. package/dist/llm/model/gateways/base.d.ts +8 -6
  85. package/dist/llm/model/gateways/base.d.ts.map +1 -1
  86. package/dist/llm/model/gateways/constants.d.ts +3 -0
  87. package/dist/llm/model/gateways/constants.d.ts.map +1 -0
  88. package/dist/llm/model/gateways/index.d.ts +5 -0
  89. package/dist/llm/model/gateways/index.d.ts.map +1 -1
  90. package/dist/llm/model/gateways/models-dev.d.ts +8 -2
  91. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  92. package/dist/llm/model/gateways/netlify.d.ts +11 -2
  93. package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
  94. package/dist/llm/model/index.d.ts +1 -1
  95. package/dist/llm/model/index.d.ts.map +1 -1
  96. package/dist/llm/model/model.loop.d.ts +1 -1
  97. package/dist/llm/model/model.loop.d.ts.map +1 -1
  98. package/dist/llm/model/provider-registry.generated.d.ts +6 -7
  99. package/dist/llm/model/provider-registry.generated.d.ts.map +1 -1
  100. package/dist/llm/model/router.d.ts +23 -0
  101. package/dist/llm/model/router.d.ts.map +1 -0
  102. package/dist/loop/index.cjs +2 -2
  103. package/dist/loop/index.js +1 -1
  104. package/dist/loop/network/index.d.ts +5 -1
  105. package/dist/loop/network/index.d.ts.map +1 -1
  106. package/dist/loop/workflows/agentic-execution/index.d.ts +5 -1
  107. package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
  108. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +5 -1
  109. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  110. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +5 -1
  111. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  112. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +5 -1
  113. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
  114. package/dist/loop/workflows/agentic-loop/index.d.ts +5 -1
  115. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  116. package/dist/mastra/index.cjs +2 -2
  117. package/dist/mastra/index.d.ts +695 -12
  118. package/dist/mastra/index.d.ts.map +1 -1
  119. package/dist/mastra/index.js +1 -1
  120. package/dist/memory/index.cjs +4 -4
  121. package/dist/memory/index.js +1 -1
  122. package/dist/processors/index.cjs +11 -11
  123. package/dist/processors/index.js +1 -1
  124. package/dist/relevance/index.cjs +4 -4
  125. package/dist/relevance/index.js +1 -1
  126. package/dist/scores/index.cjs +9 -9
  127. package/dist/scores/index.js +2 -2
  128. package/dist/scores/run-experiment/index.d.ts +2 -2
  129. package/dist/scores/run-experiment/index.d.ts.map +1 -1
  130. package/dist/scores/scoreTraces/index.cjs +8 -8
  131. package/dist/scores/scoreTraces/index.js +3 -3
  132. package/dist/scores/scoreTraces/scoreTracesWorkflow.d.ts +10 -2
  133. package/dist/scores/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
  134. package/dist/storage/domains/operations/base.d.ts +6 -0
  135. package/dist/storage/domains/operations/base.d.ts.map +1 -1
  136. package/dist/storage/index.cjs +11 -3
  137. package/dist/storage/index.cjs.map +1 -1
  138. package/dist/storage/index.js +9 -1
  139. package/dist/storage/index.js.map +1 -1
  140. package/dist/stream/MastraAgentNetworkStream.d.ts +5 -1
  141. package/dist/stream/MastraAgentNetworkStream.d.ts.map +1 -1
  142. package/dist/stream/MastraWorkflowStream.d.ts +3 -3
  143. package/dist/stream/MastraWorkflowStream.d.ts.map +1 -1
  144. package/dist/stream/index.cjs +4 -4
  145. package/dist/stream/index.js +1 -1
  146. package/dist/test-utils/llm-mock.cjs +2 -2
  147. package/dist/test-utils/llm-mock.js +1 -1
  148. package/dist/tools/index.cjs +4 -4
  149. package/dist/tools/index.js +1 -1
  150. package/dist/tools/is-vercel-tool.cjs +2 -2
  151. package/dist/tools/is-vercel-tool.js +1 -1
  152. package/dist/tools/tool.d.ts +163 -0
  153. package/dist/tools/tool.d.ts.map +1 -1
  154. package/dist/utils.cjs +17 -17
  155. package/dist/utils.d.ts +1 -1
  156. package/dist/utils.d.ts.map +1 -1
  157. package/dist/utils.js +1 -1
  158. package/dist/workflows/default.d.ts +13 -7
  159. package/dist/workflows/default.d.ts.map +1 -1
  160. package/dist/workflows/evented/index.cjs +10 -10
  161. package/dist/workflows/evented/index.js +1 -1
  162. package/dist/workflows/evented/step-executor.d.ts +7 -3
  163. package/dist/workflows/evented/step-executor.d.ts.map +1 -1
  164. package/dist/workflows/evented/workflow-event-processor/index.d.ts.map +1 -1
  165. package/dist/workflows/evented/workflow-event-processor/loop.d.ts.map +1 -1
  166. package/dist/workflows/evented/workflow-event-processor/parallel.d.ts.map +1 -1
  167. package/dist/workflows/evented/workflow-event-processor/utils.d.ts +1 -1
  168. package/dist/workflows/evented/workflow.d.ts +23 -19
  169. package/dist/workflows/evented/workflow.d.ts.map +1 -1
  170. package/dist/workflows/execution-engine.d.ts +5 -1
  171. package/dist/workflows/execution-engine.d.ts.map +1 -1
  172. package/dist/workflows/index.cjs +12 -12
  173. package/dist/workflows/index.js +1 -1
  174. package/dist/workflows/legacy/index.cjs +22 -22
  175. package/dist/workflows/legacy/index.js +1 -1
  176. package/dist/workflows/step.d.ts +11 -4
  177. package/dist/workflows/step.d.ts.map +1 -1
  178. package/dist/workflows/types.d.ts +33 -9
  179. package/dist/workflows/types.d.ts.map +1 -1
  180. package/dist/workflows/workflow.d.ts +85 -56
  181. package/dist/workflows/workflow.d.ts.map +1 -1
  182. package/dist/workflows/workflow.warning.d.ts +2 -2
  183. package/dist/workflows/workflow.warning.d.ts.map +1 -1
  184. package/package.json +9 -4
  185. package/dist/chunk-2SH5WPUA.cjs.map +0 -1
  186. package/dist/chunk-45CV4JYJ.cjs +0 -4
  187. package/dist/chunk-45CV4JYJ.cjs.map +0 -1
  188. package/dist/chunk-6R46VE63.js.map +0 -1
  189. package/dist/chunk-7EUC32F3.cjs.map +0 -1
  190. package/dist/chunk-A4RAEU6X.cjs.map +0 -1
  191. package/dist/chunk-AND6J5LG.js.map +0 -1
  192. package/dist/chunk-COYTVUIL.js.map +0 -1
  193. package/dist/chunk-DQISKQDE.js.map +0 -1
  194. package/dist/chunk-FV4QVXO4.js.map +0 -1
  195. package/dist/chunk-I6TOPBP6.cjs.map +0 -1
  196. package/dist/chunk-RFGQ3EQV.js +0 -3
  197. package/dist/chunk-RFGQ3EQV.js.map +0 -1
  198. package/dist/chunk-T4H33PBR.cjs.map +0 -1
  199. package/dist/llm/model/openai-compatible.d.ts +0 -37
  200. package/dist/llm/model/openai-compatible.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/llm/model/provider-registry.generated.ts","../src/llm/model/gateways/base.ts","../src/llm/model/gateways/models-dev.ts","../src/llm/model/gateways/netlify.ts","../src/llm/model/gateway-resolver.ts","../src/llm/model/openai-compatible.ts"],"names":["buffer","controller"],"mappings":";;;;AAUO,IAAM,iBAAA,GAAoD;AAAA,EAC/D,eAAA,EAAiB;AAAA,IACf,GAAA,EAAK,6CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,CAAC,sBAAA,EAAwB,sBAAA,EAAwB,uBAAuB,CAAA;AAAA,IAChF,MAAA,EAAQ,4CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,gDAAA;AAAA,IACL,YAAA,EAAc,oBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,CAAC,oBAAA,EAAsB,wBAAwB,CAAA;AAAA,IACvD,MAAA,EAAQ,iCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,6CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,aAAA;AAAA,IACN,MAAA,EAAQ,CAAC,sBAAA,EAAwB,sBAAA,EAAwB,uBAAuB,CAAA;AAAA,IAChF,MAAA,EAAQ,4CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,GAAA,EAAK,sDAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,kBAAA;AAAA,IACN,QAAQ,CAAC,SAAA,EAAW,aAAA,EAAe,eAAA,EAAiB,YAAY,SAAS,CAAA;AAAA,IACzE,MAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,yEAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,CAAC,kBAAkB,CAAA;AAAA,IAC3B,MAAA,EAAQ,0DAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,GAAA,EAAK,sCAAA;AAAA,IACL,YAAA,EAAc,aAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,QAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,oBAAA;AAAA,MACA,sBAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,oBAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,yBAAA;AAAA,MACA,oBAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,2BAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,sDAAA;AAAA,IACL,YAAA,EAAc,gBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,8BAAA;AAAA,MACA,2BAAA;AAAA,MACA,uBAAA;AAAA,MACA,+BAAA;AAAA,MACA,6BAAA;AAAA,MACA,4BAAA;AAAA,MACA,yCAAA;AAAA,MACA,6BAAA;AAAA,MACA,6BAAA;AAAA,MACA,qBAAA;AAAA,MACA,yBAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,kCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,yCAAA;AAAA,IACL,YAAA,EAAc,iBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,CAAC,YAAA,EAAc,YAAY,CAAA;AAAA,IACnC,MAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK,iDAAA;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,+BAAA;AAAA,MACA,cAAA;AAAA,MACA,sBAAA;AAAA,MACA,yBAAA;AAAA,MACA,kBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,+CAAA;AAAA,MACA,2CAAA;AAAA,MACA,8BAAA;AAAA,MACA,kBAAA;AAAA,MACA,6BAAA;AAAA,MACA,kCAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,sCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,GAAA,EAAK,gDAAA;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,2BAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,sBAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,4CAAA;AAAA,IACL,YAAA,EAAc,iBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,kBAAA;AAAA,MACA,sBAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,yBAAA;AAAA,MACA,iBAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,sBAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,uBAAA;AAAA,MACA,cAAA;AAAA,MACA,sBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,iDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,kDAAA;AAAA,IACL,YAAA,EAAc,oBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,4BAAA;AAAA,MACA,0BAAA;AAAA,MACA,yBAAA;AAAA,MACA,6BAAA;AAAA,MACA,6BAAA;AAAA,MACA,2BAAA;AAAA,MACA,yBAAA;AAAA,MACA,2BAAA;AAAA,MACA,6BAAA;AAAA,MACA,sBAAA;AAAA,MACA,sBAAA;AAAA,MACA,wCAAA;AAAA,MACA,yBAAA;AAAA,MACA,8BAAA;AAAA,MACA,yBAAA;AAAA,MACA,uBAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,0BAAA;AAAA,MACA,yBAAA;AAAA,MACA,sBAAA;AAAA,MACA,sBAAA;AAAA,MACA,uBAAA;AAAA,MACA,uBAAA;AAAA,MACA,gCAAA;AAAA,MACA,qBAAA;AAAA,MACA,uBAAA;AAAA,MACA,oBAAA;AAAA,MACA,qBAAA;AAAA,MACA,sBAAA;AAAA,MACA,oBAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,eAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,kBAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,sBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,+BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,6FAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,2CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,CAAC,eAAA,EAAiB,mBAAmB,CAAA;AAAA,IAC7C,MAAA,EAAQ,gDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,GAAA,EAAK,oEAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,CAAC,kBAAkB,CAAA;AAAA,IAC3B,MAAA,EAAQ,0DAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,+CAAA;AAAA,IACL,YAAA,EAAc,gBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,wBAAA;AAAA,MACA,kBAAA;AAAA,MACA,yBAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA;AAAA,MACA,oBAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,wBAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,2CAAA;AAAA,IACL,YAAA,EAAc,gBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,oCAAA;AAAA,MACA,oCAAA;AAAA,MACA,oBAAA;AAAA,MACA,kCAAA;AAAA,MACA,kCAAA;AAAA,MACA,mCAAA;AAAA,MACA,yCAAA;AAAA,MACA,kCAAA;AAAA,MACA,kCAAA;AAAA,MACA,8BAAA;AAAA,MACA,8CAAA;AAAA,MACA,8BAAA;AAAA,MACA,uCAAA;AAAA,MACA,2CAAA;AAAA,MACA,8BAAA;AAAA,MACA,2BAAA;AAAA,MACA,oCAAA;AAAA,MACA,iCAAA;AAAA,MACA,oCAAA;AAAA,MACA,wCAAA;AAAA,MACA,yBAAA;AAAA,MACA,kCAAA;AAAA,MACA,iCAAA;AAAA,MACA,iCAAA;AAAA,MACA,qBAAA;AAAA,MACA,8BAAA;AAAA,MACA,mCAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,iCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,4CAAA;AAAA,IACL,YAAA,EAAc,iBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,iBAAA;AAAA,MACA,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,kBAAA;AAAA,MACA,yBAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,kCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,GAAA,EAAK,qDAAA;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,gCAAA;AAAA,MACA,+BAAA;AAAA,MACA,yBAAA;AAAA,MACA,yBAAA;AAAA,MACA,iCAAA;AAAA,MACA,8BAAA;AAAA,MACA,sCAAA;AAAA,MACA,sBAAA;AAAA,MACA,sBAAA;AAAA,MACA,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,oCAAA;AAAA,MACA,oCAAA;AAAA,MACA,6BAAA;AAAA,MACA,6CAAA;AAAA,MACA,qCAAA;AAAA,MACA,gCAAA;AAAA,MACA,+BAAA;AAAA,MACA,mCAAA;AAAA,MACA,kCAAA;AAAA,MACA,iCAAA;AAAA,MACA,qBAAA;AAAA,MACA,sCAAA;AAAA,MACA,oCAAA;AAAA,MACA,oCAAA;AAAA,MACA,kCAAA;AAAA,MACA,qCAAA;AAAA,MACA,mCAAA;AAAA,MACA,iCAAA;AAAA,MACA,gCAAA;AAAA,MACA,mCAAA;AAAA,MACA,iBAAA;AAAA,MACA,+BAAA;AAAA,MACA,gCAAA;AAAA,MACA,qCAAA;AAAA,MACA,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,yBAAA;AAAA,MACA,+BAAA;AAAA,MACA,gCAAA;AAAA,MACA,yBAAA;AAAA,MACA,+BAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,eAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,0CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,8CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,aAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,yCAAA;AAAA,MACA,yBAAA;AAAA,MACA,yBAAA;AAAA,MACA,yCAAA;AAAA,MACA,6BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,iDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,kDAAA;AAAA,IACL,YAAA,EAAc,iBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,CAAC,sCAAA,EAAwC,kCAAkC,CAAA;AAAA,IACnF,MAAA,EAAQ,yDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAA,EAAK,mDAAA;AAAA,IACL,YAAA,EAAc,UAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,oCAAA;AAAA,MACA,qCAAA;AAAA,MACA,kCAAA;AAAA,MACA,kCAAA;AAAA,MACA,8BAAA;AAAA,MACA,8BAAA;AAAA,MACA,6BAAA;AAAA,MACA,kCAAA;AAAA,MACA,iBAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,iDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,6CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,kBAAA;AAAA,MACA,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,0BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,kDAAA;AAAA,IACL,YAAA,EAAc,oBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,2CAAA;AAAA,MACA,yBAAA;AAAA,MACA,uBAAA;AAAA,MACA,oBAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,8BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,mEAAA;AAAA,IACL,YAAA,EAAc,8BAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,kBAAA;AAAA,MACA,qBAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,qCAAA;AAAA,MACA,uCAAA;AAAA,MACA,gCAAA;AAAA,MACA,gCAAA;AAAA,MACA,kCAAA;AAAA,MACA,gBAAA;AAAA,MACA,8BAAA;AAAA,MACA,8BAAA;AAAA,MACA,qBAAA;AAAA,MACA,0BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,+CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,kDAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ,CAAC,SAAA,EAAW,eAAe,CAAA;AAAA,IACnC,MAAA,EAAQ,wCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,oDAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,kBAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,oCAAA;AAAA,MACA,oCAAA;AAAA,MACA,qCAAA;AAAA,MACA,8BAAA;AAAA,MACA,8BAAA;AAAA,MACA,kCAAA;AAAA,MACA,mCAAA;AAAA,MACA,2CAAA;AAAA,MACA,+BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,4DAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,4CAAA;AAAA,IACL,YAAA,EAAc,gBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,eAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,kBAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,GAAA,EAAK,8DAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,sBAAA;AAAA,IACN,QAAQ,CAAC,SAAA,EAAW,aAAA,EAAe,eAAA,EAAiB,YAAY,SAAS,CAAA;AAAA,IACzE,MAAA,EAAQ,kDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,4CAAA;AAAA,IACL,YAAA,EAAc,oBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ,CAAC,OAAA,EAAS,WAAA,EAAa,mBAAmB,qBAAqB,CAAA;AAAA,IACvE,MAAA,EAAQ,4BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,+CAAA;AAAA,IACL,YAAA,EAAc,oBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,4BAAA;AAAA,MACA,6BAAA;AAAA,MACA,yBAAA;AAAA,MACA,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,6BAAA;AAAA,MACA,8CAAA;AAAA,MACA,iDAAA;AAAA,MACA,gCAAA;AAAA,MACA,6BAAA;AAAA,MACA,yCAAA;AAAA,MACA,gCAAA;AAAA,MACA,wCAAA;AAAA,MACA,uCAAA;AAAA,MACA,2BAAA;AAAA,MACA,gCAAA;AAAA,MACA,iCAAA;AAAA,MACA,wBAAA;AAAA,MACA,6BAAA;AAAA,MACA,kCAAA;AAAA,MACA,yBAAA;AAAA,MACA,uBAAA;AAAA,MACA,qCAAA;AAAA,MACA,qCAAA;AAAA,MACA,2BAAA;AAAA,MACA,uBAAA;AAAA,MACA,uBAAA;AAAA,MACA,wBAAA;AAAA,MACA,6BAAA;AAAA,MACA,0CAAA;AAAA,MACA,wCAAA;AAAA,MACA,+BAAA;AAAA,MACA,0BAAA;AAAA,MACA,0BAAA;AAAA,MACA,gCAAA;AAAA,MACA,+BAAA;AAAA,MACA,oCAAA;AAAA,MACA,+BAAA;AAAA,MACA,oCAAA;AAAA,MACA,4BAAA;AAAA,MACA,8BAAA;AAAA,MACA,6BAAA;AAAA,MACA,0CAAA;AAAA,MACA,0CAAA;AAAA,MACA,+CAAA;AAAA,MACA,8BAAA;AAAA,MACA,oBAAA;AAAA,MACA,yBAAA;AAAA,MACA,yBAAA;AAAA,MACA,8CAAA;AAAA,MACA,4BAAA;AAAA,MACA,2BAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,gBAAA;AAAA,MACA,8BAAA;AAAA,MACA,0BAAA;AAAA,MACA,yBAAA;AAAA,MACA,8BAAA;AAAA,MACA,6BAAA;AAAA,MACA,kCAAA;AAAA,MACA,mCAAA;AAAA,MACA,8BAAA;AAAA,MACA,mCAAA;AAAA,MACA,qBAAA;AAAA,MACA,4BAAA;AAAA,MACA,iCAAA;AAAA,MACA,oCAAA;AAAA,MACA,2BAAA;AAAA,MACA,kCAAA;AAAA,MACA,yBAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,gBAAA;AAAA,MACA,kCAAA;AAAA,MACA,mBAAA;AAAA,MACA,qBAAA;AAAA,MACA,wBAAA;AAAA,MACA,uBAAA;AAAA,MACA,oCAAA;AAAA,MACA,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,uBAAA;AAAA,MACA,cAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,8BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,+CAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,oCAAA;AAAA,MACA,uCAAA;AAAA,MACA,uCAAA;AAAA,MACA,wCAAA;AAAA,MACA,4BAAA;AAAA,MACA,iCAAA;AAAA,MACA,4BAAA;AAAA,MACA,iCAAA;AAAA,MACA,8BAAA;AAAA,MACA,uCAAA;AAAA,MACA,uCAAA;AAAA,MACA,sCAAA;AAAA,MACA,qCAAA;AAAA,MACA,sCAAA;AAAA,MACA,sDAAA;AAAA,MACA,8CAAA;AAAA,MACA,gCAAA;AAAA,MACA,qCAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,sDAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,qCAAA;AAAA,MACA,2CAAA;AAAA,MACA,6BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,8BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,uDAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,UAAA;AAAA,IACN,QAAQ,CAAC,SAAA,EAAW,aAAA,EAAe,eAAA,EAAiB,YAAY,SAAS,CAAA;AAAA,IACzE,MAAA,EAAQ,2CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,6CAAA;AAAA,IACL,YAAA,EAAc,8BAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,oCAAA;AAAA,MACA,oCAAA;AAAA,MACA,yCAAA;AAAA,MACA,8BAAA;AAAA,MACA,8BAAA;AAAA,MACA,2BAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,6BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,GAAA,EAAK,+CAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,QAAQ,CAAC,SAAA,EAAW,aAAA,EAAe,eAAA,EAAiB,YAAY,SAAS,CAAA;AAAA,IACzE,MAAA,EAAQ,2CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,2CAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,gBAAA;AAAA,MACA,4BAAA;AAAA,MACA,oCAAA;AAAA,MACA,4BAAA;AAAA,MACA,4BAAA;AAAA,MACA,mCAAA;AAAA,MACA,gCAAA;AAAA,MACA,kCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,8BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,gDAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,6BAAA;AAAA,MACA,oCAAA;AAAA,MACA,yBAAA;AAAA,MACA,oCAAA;AAAA,MACA,yBAAA;AAAA,MACA,uBAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,iDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,8CAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,CAAC,MAAA,EAAQ,eAAA,EAAiB,gBAAgB,CAAA;AAAA,IAClD,MAAA,EAAQ,sDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,2CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,CAAC,oBAAA,EAAsB,yBAAA,EAA2B,sBAAsB,CAAA;AAAA,IAChF,MAAA,EAAQ,4BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,+CAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,WAAA;AAAA,IACd,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,2BAAA;AAAA,MACA,4BAAA;AAAA,MACA,4BAAA;AAAA,MACA,4BAAA;AAAA,MACA,yBAAA;AAAA,MACA,wBAAA;AAAA,MACA,0BAAA;AAAA,MACA,0BAAA;AAAA,MACA,wBAAA;AAAA,MACA,0BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,wDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,GAAA,EAAK,wDAAA;AAAA,IACL,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,4CAAA;AAAA,MACA,4CAAA;AAAA,MACA,yCAAA;AAAA,MACA,mCAAA;AAAA,MACA,uCAAA;AAAA,MACA,wCAAA;AAAA,MACA,uCAAA;AAAA,MACA,4CAAA;AAAA,MACA,2CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,4BAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,yDAAA;AAAA,IACL,YAAA,EAAc,oBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,oCAAA;AAAA,MACA,oCAAA;AAAA,MACA,kCAAA;AAAA,MACA,kCAAA;AAAA,MACA,mCAAA;AAAA,MACA,qCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,8DAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,kDAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,6CAAA;AAAA,MACA,yCAAA;AAAA,MACA,yCAAA;AAAA,MACA,wBAAA;AAAA,MACA,uBAAA;AAAA,MACA,wCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,6CAAA;AAAA,IACL,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,CAAC,cAAA,EAAgB,gCAAA,EAAkC,mBAAmB,CAAA;AAAA,IAC9E,MAAA,EAAQ,oDAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,YAAA,EAAc,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,IACjD,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,MAAA,EAAQ;AAAA,MACN,qCAAA;AAAA,MACA,kCAAA;AAAA,MACA,oCAAA;AAAA,MACA,sCAAA;AAAA,MACA,mCAAA;AAAA,MACA,mCAAA;AAAA,MACA,oCAAA;AAAA,MACA,sCAAA;AAAA,MACA,oCAAA;AAAA,MACA,uBAAA;AAAA,MACA,yBAAA;AAAA,MACA,iCAAA;AAAA,MACA,8BAAA;AAAA,MACA,uCAAA;AAAA,MACA,4BAAA;AAAA,MACA,yCAAA;AAAA,MACA,8CAAA;AAAA,MACA,8BAAA;AAAA,MACA,yBAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,qBAAA;AAAA,MACA,eAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA;AAEZ;AAgqBO,SAAS,kBAAkB,UAAA,EAAgD;AAChF,EAAA,OAAO,kBAAkB,UAA4C,CAAA;AACvE;AAuBO,SAAS,iBAAiB,WAAA,EAAmE;AAClG,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAA;AAE/C,EAAA,IAAI,oBAAoB,EAAA,EAAI;AAE1B,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,SAAA,CAAU,CAAA,EAAG,eAAe,CAAA;AACzD,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,SAAA,CAAU,eAAA,GAAkB,CAAC,CAAA;AAEzD,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,IAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AACF;;;ACzrDO,IAAe,qBAAf,MAAkC;AAmCzC,CAAA;;;AC3BA,IAAM,2BAAA,GAAuE;AAAA,EAC3E,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK;AAAA,GACP;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,+CAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AAAA,EACA,GAAA,EAAK;AAAA,IACH,GAAA,EAAK;AAAA,GACP;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK;AAAA,GACP;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK;AAAA,GACP;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK;AAAA,GACP;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,kDAAA;AAAA,IACL,YAAA,EAAc;AAAA;AAElB,CAAA;AAEO,IAAM,gBAAA,GAAN,cAA+B,kBAAA,CAAmB;AAAA,EAC9C,IAAA,GAAO,YAAA;AAAA,EACP,MAAA,GAAS,MAAA;AAAA;AAAA,EAEV,kBAAkD,EAAC;AAAA,EAE3D,YAAY,eAAA,EAAkD;AAC5D,IAAA,KAAA,EAAM;AACN,IAAA,IAAI,eAAA,OAAsB,eAAA,GAAkB,eAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,cAAA,GAA0D;AAC9D,IAAA,OAAA,CAAQ,KAAK,2CAA2C,CAAA;AAExD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,6BAA6B,CAAA;AAC1D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3E;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,MAAM,kBAAkD,EAAC;AAEzD,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,YAAY,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAE7D,MAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,iBAAiB,QAAA,IAAY,CAAC,aAAa,MAAA,EAAQ;AAG/E,MAAA,MAAM,YAAA,GAAe,UAAA;AAGrB,MAAA,MAAM,kBAAA,GACJ,YAAA,CAAa,GAAA,KAAQ,2BAAA,IACrB,aAAa,GAAA,KAAQ,iBAAA;AAAA,MACrB,YAAA,IAAgB,2BAAA;AAGlB,MAAA,MAAM,eAAe,YAAA,CAAa,GAAA,IAAO,aAAa,GAAA,IAAO,YAAA,CAAa,IAAI,MAAA,GAAS,CAAA;AAEvF,MAAA,IAAI,sBAAsB,YAAA,EAAc;AAEtC,QAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,EAAE,IAAA,EAAK;AAGvD,QAAA,IAAI,GAAA,GAAM,YAAA,CAAa,GAAA,IAAO,2BAAA,CAA4B,YAAY,CAAA,EAAG,GAAA;AAGzE,QAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,QAAA,CAAS,mBAAmB,KAAK,CAAC,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3E,UAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,GAAI,mBAAA;AAAA,QACjC;AAGA,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,SAAA,EAAY,YAAY,CAAA,sBAAA,CAAwB,CAAA;AAC7D,UAAA;AAAA,QACF;AAIA,QAAA,MAAM,YAAA,GAAe,YAAA,CAAa,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA,EAAG,YAAA,CAAa,WAAA,EAAY,CAAE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA,QAAA,CAAA;AAG9F,QAAA,MAAM,YAAA,GAAe,2BAAA,CAA4B,YAAY,CAAA,EAAG,YAAA,IAAgB,eAAA;AAEhF,QAAA,eAAA,CAAgB,YAAY,CAAA,GAAI;AAAA,UAC9B,GAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,UACA,IAAA,EAAM,YAAA,CAAa,IAAA,IAAQ,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AAAA,UAClF,MAAA,EAAQ,SAAS,MAAA,CAAO,CAAA,EAAA,KAAM,CAAC,EAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA;AAAA,UACnD,QAAQ,YAAA,CAAa,GAAA;AAAA;AAAA,UACrB,OAAA,EAAS,CAAA,UAAA;AAAA,SACX;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,iBAAA,EAAoB,YAAA,CAAa,IAAI,CAAA,CAAE,CAAA;AAAA,MACtD;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAEvB,IAAA,OAAA,CAAQ,KAAK,CAAA,MAAA,EAAS,MAAA,CAAO,KAAK,eAAe,CAAA,CAAE,MAAM,CAAA,4BAAA,CAA8B,CAAA;AACvF,IAAA,OAAA,CAAQ,KAAK,YAAA,EAAc,MAAA,CAAO,KAAK,eAAe,CAAA,CAAE,MAAM,CAAA;AAC9D,IAAA,OAAO,eAAA;AAAA,EACT;AAAA,EAEA,QAAA,CAAS,SAAiB,OAAA,EAA2E;AAEnG,IAAA,MAAM,CAAC,QAAA,EAAU,GAAG,UAAU,CAAA,GAAI,OAAA,CAAQ,MAAM,GAAG,CAAA;AAInD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,UAAA,CAAW,MAAA,EAAQ;AACnC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AAE5C,IAAA,IAAI,CAAC,QAAQ,GAAA,EAAK;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,aAAA,GAAgB,GAAG,QAAA,CAAS,WAAA,GAAc,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA,SAAA,CAAA;AAClE,IAAA,MAAM,aAAA,GAAgB,QAAQ,aAAa,CAAA;AAE3C,IAAA,OAAO,iBAAiB,MAAA,CAAO,GAAA;AAAA,EACjC;AAAA,EAEA,YAAA,CACE,SACA,OAAA,EAC0D;AAC1D,IAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,OAAA,CAAQ,MAAM,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AAE5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,YAAA,KAAiB,WAAW,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,GAAI,MAAA;AACxF,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,UAAkC,EAAC;AAEzC,IAAA,IAAI,MAAA,CAAO,YAAA,KAAiB,eAAA,IAAmB,CAAC,OAAO,YAAA,EAAc;AACnE,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,GAAI,MAAA;AAAA,IACjC;AAGA,IAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,MAAA,OAAA,CAAQ,mBAAmB,CAAA,GAAI,YAAA;AAAA,IACjC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF,CAAA;;;AC/KO,IAAM,cAAA,GAAN,cAA6B,kBAAA,CAAmB;AAAA,EAC5C,IAAA,GAAO,SAAA;AAAA,EACP,MAAA,GAAS,SAAA;AAAA;AAAA,EACV,UAAA,GAAa,IAAI,mBAAA,EAAoB;AAAA,EAE7C,MAAM,cAAA,GAA0D;AAC9D,IAAA,OAAA,CAAQ,KAAK,+CAA+C,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,qDAAqD,CAAA;AAClF,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,OAAA,GAA0B;AAAA,MAC9B,YAAA,EAAc,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,MACjD,YAAA,EAAc,eAAA;AAAA;AAAA,MACd,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,MACN,OAAA,EAAS,CAAA,OAAA,CAAA;AAAA,MACT,QAAQ,EAAC;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,KAAA,MAAW,CAAC,YAAY,QAAQ,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AACnE,MAAA,KAAA,MAAW,KAAA,IAAS,SAAS,MAAA,EAAQ;AACnC,QAAA,OAAA,CAAQ,OAAO,IAAA,CAAK,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,MAC9C;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,SAAS,CAAA,CAAE,MAAM,CAAA,2BAAA,CAA6B,CAAA;AACrF,IAAA,OAAO,EAAE,OAAA,EAAQ;AAAA,EACnB;AAAA,EAEA,MAAM,QAAA,CAAS,OAAA,EAAiB,OAAA,EAA0D;AAExF,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,IAAA,CAAK,MAAM,GAAG,CAAA,EAAG;AAC1C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,MAAA,GAAS,QAAQ,iBAAiB,CAAA;AACxC,IAAA,MAAM,YAAA,GAAe,QAAQ,eAAe,CAAA;AAE5C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,0BAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,kEAAkE,OAAO,CAAA;AAAA,OAChF,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,4BAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,oEAAoE,OAAO,CAAA;AAAA,OAClF,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAQ,YAAY,CAAA;AACjE,MAAA,OAAO,CAAA,EAAG,UAAU,GAAG,CAAA,gBAAA,CAAA;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,6BAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,CAAA,iDAAA,EAAoD,OAAO,CAAA,EAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC7H,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,CAAgB,MAAA,EAAgB,YAAA,EAA0C;AACtF,IAAA,MAAM,QAAA,GAAW,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAGxD,IAAA,MAAM,MAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,IAAI,QAAQ,CAAA;AAClD,IAAA,IAAI,UAAU,MAAA,CAAO,SAAA,GAAY,KAAK,GAAA,EAAI,GAAI,MAAO,EAAA,EAAI;AAEvD,MAAA,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,GAAA,EAAK,OAAO,GAAA,EAAI;AAAA,IAChD;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC9F,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,UAAU,YAAY,CAAA;AAAA;AACvC,KACD,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,SAAS,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IACvF;AAEA,IAAA,MAAM,aAAA,GAAiB,MAAM,QAAA,CAAS,IAAA,EAAK;AAG3C,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,QAAA,EAAU;AAAA,MAClC,OAAO,aAAA,CAAc,KAAA;AAAA,MACrB,KAAK,aAAA,CAAc,GAAA;AAAA,MACnB,WAAW,aAAA,CAAc;AAAA,KAC1B,CAAA;AAED,IAAA,OAAO,EAAE,KAAA,EAAO,aAAA,CAAc,KAAA,EAAO,GAAA,EAAK,cAAc,GAAA,EAAI;AAAA,EAC9D;AAAA,EACA,MAAM,YAAA,CAAa,OAAA,EAAiB,OAAA,EAAkE;AACpG,IAAA,MAAM,MAAA,GAAS,QAAQ,iBAAiB,CAAA;AACxC,IAAA,MAAM,YAAA,GAAe,QAAQ,eAAe,CAAA;AAE5C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,0BAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,kEAAkE,OAAO,CAAA;AAAA,OAChF,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,4BAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,oEAAoE,OAAO,CAAA;AAAA,OAClF,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAQ,YAAY,CAAA;AACjE,MAAA,OAAO;AAAA,QACL,aAAA,EAAe,CAAA,OAAA,EAAU,SAAA,CAAU,KAAK,CAAA;AAAA,OAC1C;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,6BAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,CAAA,iDAAA,EAAoD,OAAO,CAAA,EAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC7H,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;;;AClLA,SAAS,4BAA4B,IAAA,EAAc;AACjD,EAAA,OAAO,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,WAAW,MAAM,CAAA,KAAM,MAAA,CAAO,OAAA,KAAY,IAAI,CAAC,CAAA;AACtH;AAEA,IAAM,QAAA,GAAW,CAAC,IAAI,cAAA,EAAe,EAAG,IAAI,gBAAA,CAAiB,2BAAA,CAA4B,CAAA,UAAA,CAAY,CAAC,CAAC,CAAA;AAKvG,SAAS,oBAAoB,OAAA,EAA4C;AAEvE,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAA0B,CAAA,CAAE,MAAA,IAAU,OAAA,CAAQ,UAAA,CAAW,CAAA,EAAG,CAAA,CAAE,MAAM,GAAG,CAAC,CAAA;AAC/G,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,eAAA;AAAA,EACT;AAGA,EAAA,MAAM,qBAAqB,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAA0B,CAAC,EAAE,MAAM,CAAA;AAC/E,EAAA,KAAA,MAAW,WAAW,kBAAA,EAAoB;AAExC,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,eAAsB,kBAAA,CACpB,OAAA,EACA,OAAA,GAAkC,OAAA,CAAQ,GAAA,EAKzC;AACD,EAAA,MAAM,OAAA,GAAU,oBAAoB,OAAO,CAAA;AAE3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,SAAS,EAAC,EAAG,iBAAiB,OAAA,EAAQ;AAAA,EAC7D;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,QAAA,CAAS,SAAS,OAAO,CAAA;AACnD,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,SAAS,EAAC,EAAG,iBAAiB,OAAA,EAAQ;AAAA,EAC7D;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,YAAA,GAAe,MAAM,QAAQ,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA,GAAI,EAAC;AAEvF,EAAA,IAAI,eAAA,GAAkB,OAAA;AAGtB,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAA,GAAM,IAAA;AACvD,EAAA,IAAI,MAAA,IAAU,eAAA,CAAgB,UAAA,CAAW,MAAM,CAAA,EAAG;AAChD,IAAA,eAAA,GAAkB,eAAA,CAAgB,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA;AAAA,EAC3D;AAGA,EAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,OAAA,CAAQ,GAAG,CAAA;AACnD,EAAA,IAAI,oBAAoB,EAAA,EAAI;AAC1B,IAAA,eAAA,GAAkB,eAAA,CAAgB,SAAA,CAAU,eAAA,GAAkB,CAAC,CAAA;AAAA,EACjE;AAEA,EAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,eAAA,EAAgB;AACzC;;;ACzDA,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,MAAA,EAAO,EAA+D;AACvG,EAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AACzC,IAAA,IAAI,OAAO,MAAA,EAAQ,YAAA,KAAiB,CAAA,MAAA,CAAA,EAAU;AAC5C,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA;AAAA,IACxC;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,YAAY,CAAA,EAAG;AACvC,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,YAAA,EAAc;AACrC,QAAA,IAAI,QAAQ,GAAA,CAAI,GAAG,GAAG,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAgCO,IAAM,wBAAN,MAAuD;AAAA,EACnD,oBAAA,GAAuB,IAAA;AAAA,EACvB,2BAAA,GAA8B,MAAA;AAAA,EAC9B,yBAAA,GAA4B,IAAA;AAAA,EAC5B,iBAAA,GAAoB,IAAA;AAAA,EACpB,gBAAgB,EAAC;AAAA,EAEjB,OAAA;AAAA,EACA,QAAA;AAAA,EAED,MAAA;AAAA,EACA,WAAA;AAAA;AAAA,EAER,YAAY,MAAA,EAAqD;AAE/D,IAAA,IAAI,YAAA;AAEJ,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAE9B,MAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,MAAA,IAAI;AACF,QAAA,IAAI,IAAI,MAAM,CAAA;AACd,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,IAAI,KAAA,EAAO;AAET,QAAA,YAAA,GAAe;AAAA,UACb,EAAA,EAAI,SAAA;AAAA,UACJ,GAAA,EAAK;AAAA,SACP;AACA,QAAA,IAAA,CAAK,QAAA,GAAW,mBAAA;AAChB,QAAA,IAAA,CAAK,WAAA,GAAc,SAAA;AACnB,QAAA,IAAA,CAAK,MAAA,GAAS,EAAE,EAAA,EAAI,SAAA,EAAW,KAAK,MAAA,EAAO;AAAA,MAC7C,CAAA,MAAO;AAEL,QAAA,IAAA,CAAK,WAAA,GAAc,MAAA;AACnB,QAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAE1C,QAAA,IAAI,oBAAoB,EAAA,EAAI;AAC1B,UAAA,MAAM,QAAA,GAAW,MAAA,CAAO,SAAA,CAAU,CAAA,EAAG,eAAe,CAAA;AACpD,UAAA,MAAM,OAAA,GAAU,MAAA,CAAO,SAAA,CAAU,eAAA,GAAkB,CAAC,CAAA;AAEpD,UAAA,YAAA,GAAe;AAAA,YACb,EAAA,EAAI,OAAA;AAAA,YACJ,MAAA,EAAQ,aAAA,CAAc,EAAE,QAAA,EAAU;AAAA,WACpC;AACA,UAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,QAClB,CAAA,MAAO;AAEL,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,MAAM,CAAA,+CAAA,CAAiD,CAAA;AAAA,QACnG;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,YAAA,GAAe,MAAA;AACf,MAAA,IAAA,CAAK,cAAc,MAAA,CAAO,EAAA;AAG1B,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,MAAA,CAAO,EAAE,CAAA;AACzC,MAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,mBAAA;AAEnC,MAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,OAAA,KAAY,OAAO,EAAA,EAAI;AACnD,QAAA,YAAA,CAAa,KAAK,MAAA,CAAO,OAAA;AAAA,MAC3B;AAGA,MAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,QAAA,YAAA,CAAa,SAAS,aAAA,CAAc,EAAE,UAAU,MAAA,CAAO,QAAA,IAAY,QAAW,CAAA;AAAA,MAChF;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,UAAU,YAAA,CAAa,EAAA;AAC5B,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AAAA,EAChB;AAAA,EAEQ,wBAAwB,QAAA,EAAuD;AACrF,IAAA,OAAO,QAAA,CACJ,IAAI,CAAA,GAAA,KAAO;AACV,MAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,SAAS,GAAA,CAAI;AAAA,SACf;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAQ;AAEvB,QAAA,MAAM,YAAA,GAAe,GAAA,CAAI,OAAA,CACtB,GAAA,CAAI,CAAA,IAAA,KAAQ;AACX,UAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,YAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,UACzC;AAEA,UAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,WAAA;AAAA,cACN,SAAA,EAAW,EAAE,GAAA,EAAK,IAAA,CAAK,IAAA;AAAK,aAC9B;AAAA,UACF;AACA,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AAGjB,QAAA,IAAI,aAAa,KAAA,CAAM,CAAA,CAAA,KAAK,CAAA,EAAG,IAAA,KAAS,MAAM,CAAA,EAAG;AAC/C,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,MAAA;AAAA,YACN,OAAA,EAAS,aAAa,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,IAAA,IAAQ,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE;AAAA,WACvD;AAAA,QACF;AAEA,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,SAAS,WAAA,EAAa;AAC5B,QAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CACrB,MAAA,CAAO,UAAQ,IAAA,CAAK,IAAA,KAAS,MAAM,CAAA,CACnC,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAI,CAAA,CACrB,KAAK,EAAE,CAAA;AAEV,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CACnB,MAAA,CAAO,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,WAAW,CAAA,CACxC,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,UACZ,IAAI,IAAA,CAAK,UAAA;AAAA,UACT,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,IAAA,CAAK,QAAA;AAAA,YACX,WAAW,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAA,IAAS,EAAE;AAAA;AAC5C,SACF,CAAE,CAAA;AAEJ,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,WAAA;AAAA,UACN,SAAS,WAAA,IAAe,IAAA;AAAA,UACxB,GAAI,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,EAAE,YAAY,SAAA;AAAU,SACtD;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAQ;AACvB,QAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,MAAiB;AAAA,UACtC,IAAA,EAAM,MAAA;AAAA,UACN,cAAc,YAAA,CAAa,UAAA;AAAA,UAC3B,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,MAAM;AAAA,SAC7C,CAAE,CAAA;AAAA,MACJ;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,EACA,IAAA,EAAK;AAAA,EACV;AAAA,EAEQ,qBAAqB,KAAA,EAA+D;AAC1F,IAAA,IAAI,CAAC,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,MAAA;AAEtD,IAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AACjD,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,UAAA,EAAY,IAAA,CAAK,WAAA,IAAe;AAAC;AACnC,SACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,IAAA;AAAA,UACA,WAAA,EAAa,kBAAkB,IAAI,CAAA,CAAA;AAAA,UACnC,YAAY;AAAC;AACf,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,gBAAgB,MAAA,EAAoD;AAC1E,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,MAAA;AACH,QAAA,OAAO,MAAA;AAAA,MACT,KAAK,QAAA;AAAA,MACL,KAAK,YAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,YAAA;AAAA,MACL,KAAK,eAAA;AACH,QAAA,OAAO,YAAA;AAAA,MACT,KAAK,gBAAA;AACH,QAAA,OAAO,gBAAA;AAAA,MACT;AACE,QAAA,OAAO,SAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,oBAAA,GAAmG;AAE/G,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA;AAEtC,IAAA,IAAI,gBAAA,EAAkB;AAEpB,MAAA,MAAM,EAAE,KAAK,OAAA,EAAS,eAAA,KAAoB,MAAM,kBAAA,CAAmB,KAAK,WAAW,CAAA;AAEnF,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAAA,MACpE;AAGA,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,OAAA;AAAA,QACH,GAAG,KAAK,MAAA,CAAO;AAAA,OACjB;AAEA,MAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,YAAA,EAAc,SAAS,eAAA,EAAgB;AAAA,IAChE,CAAA,MAAO;AAEL,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK;AACpB,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AAEA,MAAA,MAAM,OAAA,GAAkC;AAAA,QACtC,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,KAAK,MAAA,CAAO;AAAA,OACjB;AAGA,MAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AAEtB,QAAA,MAAM,iBAAiB,IAAA,CAAK,QAAA,KAAa,sBAAsB,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA;AAClG,QAAA,IAAI,cAAA,EAAgB,iBAAiB,WAAA,EAAa;AAChD,UAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACrC,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,MAAM,CAAA,CAAA;AAAA,QACzD;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,KAAK,IAAA,CAAK,MAAA,CAAO,KAAK,OAAA,EAAS,OAAA,EAAS,KAAK,OAAA,EAAQ;AAAA,IAChE;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAG7B,IAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA;AACpC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,aAAa,mBAAA,EAAqB;AAEhE,MAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA;AACtD,MAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,gCAAA,EAAmC,IAAA,CAAK,QAAQ,CAAA,kBAAA,EAAqB,eAAe,YAAY,CAAA,sBAAA;AAAA,SAClG;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,gCAAA,EAAmC,KAAK,QAAQ,CAAA,kDAAA;AAAA,SAClD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,GAA6B;AACjC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,OAAA,EAKZ;AAED,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACtB,SAAS,KAAA,EAAO;AAEd,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAI,cAAA,CAAe;AAAA,UACzB,MAAM,UAAA,EAAY;AAChB,YAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,cACjB,IAAA,EAAM,OAAA;AAAA,cACN,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAChC,CAAA;AAAA,UAChC;AAAA,SACD,CAAA;AAAA,QACD,UAAU;AAAC,OACb;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,EAAE,KAAK,OAAA,EAAS,OAAA,EAAS,iBAAgB,GAAI,MAAM,KAAK,oBAAA,EAAqB;AAEnF,MAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,iBAAgB,GAAI,OAAA;AAGvD,MAAA,MAAM,IAAA,GAAY;AAAA,QAChB,QAAA,EAAU,IAAA,CAAK,uBAAA,CAAwB,MAAM,CAAA;AAAA,QAC7C,KAAA,EAAO,eAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,GAAG;AAAA,OACL;AAEA,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AACnD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AACb,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,IAAA,CAAK,WAAA,GACH,UAAA,CAAW,IAAA,KAAS,MAAA,GAChB,MAAA,GACA,WAAW,IAAA,KAAS,UAAA,GAClB,UAAA,GACA,UAAA,CAAW,IAAA,KAAS,MAAA,GAClB,SACA,UAAA,CAAW,IAAA,KAAS,MAAA,GAClB,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,EAAE,IAAA,EAAM,UAAA,CAAW,QAAA,EAAS,EAAE,GAC5D,MAAA;AAAA,QACd;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,CAAQ,cAAA,EAAgB,IAAA,KAAS,MAAA,EAAQ;AAC3C,QAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,UACrB,IAAA,EAAM,aAAA;AAAA,UACN,WAAA,EAAa;AAAA,YACX,IAAA,EAAM,UAAA;AAAA,YACN,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ,QAAQ,cAAA,CAAe;AAAA;AACjC,SACF;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,QACzB,QAAQ,OAAA,CAAQ;AAAA,OAClB;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,SAAS,CAAA;AAE3C,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAGlC,QAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,EAAK;AACtD,UAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA;AACtD,UAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,CAAA,oCAAA,EAAuC,IAAA,CAAK,QAAQ,CAAA,qBAAA,EAAwB,eAAe,YAAY,CAAA,kDAAA;AAAA,aACzG;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,MAC9E;AAEA,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,MACjD;AAEA,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,IAAI,MAAA,GAAS,EAAA;AACb,MAAA,IAAI,SAAA,GAAY,KAAA;AAChB,MAAA,MAAM,eAAA,uBAAsB,GAAA,EAAwE;AACpG,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACtD,MAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AAErB,MAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,MAAA,MAAM,MAAA,GAAS,IAAI,cAAA,CAA0C;AAAA,QAC3D,MAAM,MAAM,UAAA,EAAY;AACtB,UAAA,IAAI;AAEF,YAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,cACjB,IAAA,EAAM,cAAA;AAAA,cACN,UAAU;AAAC,aACZ,CAAA;AAED,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAE1C,cAAA,IAAI,IAAA,EAAM;AAER,gBAAA,KAAA,MAAW,CAAC,CAAA,EAAG,QAAQ,CAAA,IAAK,eAAA,EAAiB;AAC3C,kBAAA,IAAI,CAAC,SAAS,IAAA,IAAQ,QAAA,CAAS,MAAM,QAAA,CAAS,IAAA,IAAQ,SAAS,IAAA,EAAM;AACnE,oBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,sBACjB,IAAA,EAAM,WAAA;AAAA,sBACN,YAAY,QAAA,CAAS,EAAA;AAAA,sBACrB,UAAU,QAAA,CAAS,IAAA;AAAA,sBACnB,KAAA,EAAO,SAAS,IAAA,IAAQ;AAAA,qBACzB,CAAA;AAAA,kBACH;AAAA,gBACF;AAEA,gBAAA,UAAA,CAAW,KAAA,EAAM;AACjB,gBAAA;AAAA,cACF;AAEA,cAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,cAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,cAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,cAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,gBAAA,IAAI,KAAK,IAAA,EAAK,KAAM,MAAM,IAAA,CAAK,IAAA,OAAW,cAAA,EAAgB;AACxD,kBAAA;AAAA,gBACF;AAEA,gBAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,kBAAA,IAAI;AACF,oBAAA,MAAM,OAA0B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAGxD,oBAAA,IAAI,CAAC,SAAA,IAAa,IAAA,CAAK,EAAA,EAAI;AACzB,sBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,wBACjB,IAAA,EAAM,mBAAA;AAAA,wBACN,IAAI,IAAA,CAAK,EAAA;AAAA,wBACT,OAAA,EAAS,KAAK,KAAA,IAAS,OAAA;AAAA,wBACvB,SAAA,EAAW,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,GAAU,GAAA,GAAO,IAAA,CAAK,GAAA,EAAK;AAAA,uBACpE,CAAA;AACD,sBAAA,SAAA,GAAY,IAAA;AAAA,oBACd;AAEA,oBAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,oBAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,oBAAA,IAAI,MAAA,CAAO,OAAO,OAAA,EAAS;AACzB,sBAAA,IAAI,CAAC,YAAA,EAAc;AACjB,wBAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,YAAA,EAAc,EAAA,EAAI,UAAU,CAAA;AACvD,wBAAA,YAAA,GAAe,IAAA;AAAA,sBACjB;AAEA,sBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,wBACjB,IAAA,EAAM,YAAA;AAAA,wBACN,EAAA,EAAI,QAAA;AAAA,wBACJ,KAAA,EAAO,OAAO,KAAA,CAAM;AAAA,uBACrB,CAAA;AAAA,oBACH,WAAW,YAAA,EAAc;AACvB,sBAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAI,UAAU,CAAA;AACrD,sBAAA,YAAA,GAAe,KAAA;AAAA,oBACjB;AAGA,oBAAA,IAAI,MAAA,CAAO,OAAO,UAAA,EAAY;AAC5B,sBAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY;AAC9C,wBAAA,MAAM,QAAQ,QAAA,CAAS,KAAA;AAEvB,wBAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,EAAG;AAE/B,0BAAA,IAAI,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,QAAA,EAAU,IAAA,EAAM;AAC1C,4BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,8BACjB,IAAA,EAAM,kBAAA;AAAA,8BACN,IAAI,QAAA,CAAS,EAAA;AAAA,8BACb,QAAA,EAAU,SAAS,QAAA,CAAS;AAAA,6BAC7B,CAAA;AAAA,0BACH;AAEA,0BAAA,eAAA,CAAgB,IAAI,KAAA,EAAO;AAAA,4BACzB,EAAA,EAAI,SAAS,EAAA,IAAM,EAAA;AAAA,4BACnB,IAAA,EAAM,QAAA,CAAS,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,4BACjC,IAAA,EAAM;AAAA,2BACP,CAAA;AAAA,wBACH;AAEA,wBAAA,MAAMA,OAAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAExC,wBAAA,IAAI,SAAS,EAAA,EAAI;AACf,0BAAAA,OAAAA,CAAO,KAAK,QAAA,CAAS,EAAA;AAAA,wBACvB;AAEA,wBAAA,IAAI,QAAA,CAAS,UAAU,IAAA,EAAM;AAC3B,0BAAAA,OAAAA,CAAO,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,IAAA;AAAA,wBAClC;AAEA,wBAAA,IAAI,QAAA,CAAS,UAAU,SAAA,EAAW;AAChC,0BAAAA,OAAAA,CAAO,IAAA,IAAQ,QAAA,CAAS,QAAA,CAAS,SAAA;AACjC,0BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,4BACjB,IAAA,EAAM,kBAAA;AAAA,4BACN,IAAIA,OAAAA,CAAO,EAAA;AAAA,4BACX,KAAA,EAAO,SAAS,QAAA,CAAS;AAAA,2BAC1B,CAAA;AAGD,0BAAA,IAAI;AACF,4BAAA,IAAA,CAAK,KAAA,CAAMA,QAAO,IAAI,CAAA;AACtB,4BAAA,IAAIA,OAAAA,CAAO,EAAA,IAAMA,OAAAA,CAAO,IAAA,EAAM;AAC5B,8BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,gCACjB,IAAA,EAAM,gBAAA;AAAA,gCACN,IAAIA,OAAAA,CAAO;AAAA,+BACZ,CAAA;AAED,8BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,gCACjB,IAAA,EAAM,WAAA;AAAA,gCACN,YAAYA,OAAAA,CAAO,EAAA;AAAA,gCACnB,UAAUA,OAAAA,CAAO,IAAA;AAAA,gCACjB,OAAOA,OAAAA,CAAO;AAAA,+BACf,CAAA;AAED,8BAAA,eAAA,CAAgB,IAAI,KAAA,EAAO;AAAA,gCACzB,IAAIA,OAAAA,CAAO,EAAA;AAAA,gCACX,MAAMA,OAAAA,CAAO,IAAA;AAAA,gCACb,MAAMA,OAAAA,CAAO,IAAA;AAAA,gCACb,IAAA,EAAM;AAAA,+BACP,CAAA;AAAA,4BACH;AAAA,0BACF,CAAA,CAAA,MAAQ;AAAA,0BAER;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAGA,oBAAA,IAAI,OAAO,aAAA,EAAe;AAExB,sBAAA,eAAA,CAAgB,KAAA,EAAM;AAEtB,sBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,wBACjB,IAAA,EAAM,QAAA;AAAA,wBACN,YAAA,EAAc,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA,wBAClD,KAAA,EAAO,KAAK,KAAA,GACR;AAAA,0BACE,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,aAAA,IAAiB,CAAA;AAAA,0BACzC,YAAA,EAAc,IAAA,CAAK,KAAA,CAAM,iBAAA,IAAqB,CAAA;AAAA,0BAC9C,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,YAAA,IAAgB;AAAA,yBAC1C,GACA;AAAA,0BACE,WAAA,EAAa,CAAA;AAAA,0BACb,YAAA,EAAc,CAAA;AAAA,0BACd,WAAA,EAAa;AAAA;AACf,uBACL,CAAA;AAAA,oBACH;AAAA,kBACF,SAAS,CAAA,EAAG;AACV,oBAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAC,CAAA;AAAA,kBAC5C;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,SAAS,KAAA,EAAO;AACd,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,IAAI,cAAA,CAAe;AAAA,gBACzB,MAAMC,WAAAA,EAAY;AAChB,kBAAAA,YAAW,OAAA,CAAQ;AAAA,oBACjB,IAAA,EAAM,OAAA;AAAA,oBACN,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,mBAChC,CAAA;AAAA,gBAChC;AAAA,eACD,CAAA;AAAA,cACD,UAAU;AAAC,aACb;AAAA,UACF;AAAA,QACF;AAAA,OACD,CAAA;AAED,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,SAAS,EAAE,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAE;AAAA,QACtC,QAAA,EAAU,EAAE,OAAA,EAAS,MAAA,CAAO,YAAY,QAAA,CAAS,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAE;AAAA,QACpE,UAAU;AAAC,OACb;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAI,cAAA,CAAe;AAAA,UACzB,MAAM,UAAA,EAAY;AAChB,YAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,cACjB,IAAA,EAAM,OAAA;AAAA,cACN,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAChC,CAAA;AAAA,UAChC;AAAA,SACD,CAAA;AAAA,QACD,UAAU;AAAC,OACb;AAAA,IACF;AAAA,EACF;AACF","file":"chunk-AND6J5LG.js","sourcesContent":["/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\nimport type { ProviderConfig } from './gateways/base';\n\n/**\n * Provider configurations for OpenAI-compatible APIs\n */\nexport const PROVIDER_REGISTRY: Record<string, ProviderConfig> = {\n 'moonshotai-cn': {\n url: 'https://api.moonshot.cn/v1/chat/completions',\n apiKeyEnvVar: 'MOONSHOT_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Moonshot AI (China)',\n models: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n docUrl: 'https://platform.moonshot.cn/docs/api/chat',\n gateway: 'models.dev',\n },\n lucidquery: {\n url: 'https://lucidquery.com/api/v1/chat/completions',\n apiKeyEnvVar: 'LUCIDQUERY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'LucidQuery AI',\n models: ['lucidnova-rf1-100b', 'lucidquery-nexus-coder'],\n docUrl: 'https://lucidquery.com/api/docs',\n gateway: 'models.dev',\n },\n moonshotai: {\n url: 'https://api.moonshot.ai/v1/chat/completions',\n apiKeyEnvVar: 'MOONSHOT_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Moonshot AI',\n models: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n docUrl: 'https://platform.moonshot.ai/docs/api/chat',\n gateway: 'models.dev',\n },\n 'zai-coding-plan': {\n url: 'https://api.z.ai/api/coding/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Z.AI Coding Plan',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/devpack/overview',\n gateway: 'models.dev',\n },\n alibaba: {\n url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',\n apiKeyEnvVar: 'DASHSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Alibaba',\n models: ['qwen3-coder-plus'],\n docUrl: 'https://www.alibabacloud.com/help/en/model-studio/models',\n gateway: 'models.dev',\n },\n xai: {\n url: 'https://api.x.ai/v1/chat/completions',\n apiKeyEnvVar: 'XAI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'xAI',\n models: [\n 'grok-2',\n 'grok-2-1212',\n 'grok-2-latest',\n 'grok-2-vision',\n 'grok-2-vision-1212',\n 'grok-2-vision-latest',\n 'grok-3',\n 'grok-3-fast',\n 'grok-3-fast-latest',\n 'grok-3-latest',\n 'grok-3-mini',\n 'grok-3-mini-fast',\n 'grok-3-mini-fast-latest',\n 'grok-3-mini-latest',\n 'grok-4',\n 'grok-4-fast',\n 'grok-4-fast-non-reasoning',\n 'grok-beta',\n 'grok-code-fast-1',\n 'grok-vision-beta',\n ],\n docUrl: 'https://docs.x.ai/docs/models',\n gateway: 'models.dev',\n },\n nvidia: {\n url: 'https://integrate.api.nvidia.com/v1/chat/completions',\n apiKeyEnvVar: 'NVIDIA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Nvidia',\n models: [\n 'black-forest-labs/flux.1-dev',\n 'deepseek-ai/deepseek-v3.1',\n 'google/gemma-3-27b-it',\n 'microsoft/phi-4-mini-instruct',\n 'moonshotai/kimi-k2-instruct',\n 'nvidia/cosmos-nemotron-34b',\n 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n 'nvidia/nemoretriever-ocr-v1',\n 'nvidia/parakeet-tdt-0.6b-v2',\n 'openai/gpt-oss-120b',\n 'openai/whisper-large-v3',\n 'qwen/qwen3-235b-a22b',\n 'qwen/qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://docs.api.nvidia.com/nim/',\n gateway: 'models.dev',\n },\n upstage: {\n url: 'https://api.upstage.ai/chat/completions',\n apiKeyEnvVar: 'UPSTAGE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Upstage',\n models: ['solar-mini', 'solar-pro2'],\n docUrl: 'https://developers.upstage.ai/docs/apis/chat',\n gateway: 'models.dev',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1/chat/completions',\n apiKeyEnvVar: 'GROQ_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Groq',\n models: [\n 'deepseek-r1-distill-llama-70b',\n 'gemma2-9b-it',\n 'llama-3.1-8b-instant',\n 'llama-3.3-70b-versatile',\n 'llama-guard-3-8b',\n 'llama3-70b-8192',\n 'llama3-8b-8192',\n 'meta-llama/llama-4-maverick-17b-128e-instruct',\n 'meta-llama/llama-4-scout-17b-16e-instruct',\n 'meta-llama/llama-guard-4-12b',\n 'mistral-saba-24b',\n 'moonshotai/kimi-k2-instruct',\n 'moonshotai/kimi-k2-instruct-0905',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen-qwq-32b',\n 'qwen/qwen3-32b',\n ],\n docUrl: 'https://console.groq.com/docs/models',\n gateway: 'models.dev',\n },\n 'github-copilot': {\n url: 'https://api.githubcopilot.com/chat/completions',\n apiKeyEnvVar: 'GITHUB_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'GitHub Copilot',\n models: [\n 'claude-3.5-sonnet',\n 'claude-3.7-sonnet',\n 'claude-3.7-sonnet-thought',\n 'claude-opus-4',\n 'claude-opus-41',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'gemini-2.0-flash-001',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-4o',\n 'gpt-5',\n 'gpt-5-mini',\n 'grok-code-fast-1',\n 'o3',\n 'o3-mini',\n 'o4-mini',\n ],\n docUrl: 'https://docs.github.com/en/copilot',\n gateway: 'models.dev',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1/chat/completions',\n apiKeyEnvVar: 'MISTRAL_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Mistral',\n models: [\n 'codestral-latest',\n 'devstral-medium-2507',\n 'devstral-small-2505',\n 'devstral-small-2507',\n 'magistral-medium-latest',\n 'magistral-small',\n 'ministral-3b-latest',\n 'ministral-8b-latest',\n 'mistral-large-latest',\n 'mistral-medium-2505',\n 'mistral-medium-2508',\n 'mistral-medium-latest',\n 'mistral-nemo',\n 'mistral-small-latest',\n 'open-mistral-7b',\n 'open-mixtral-8x22b',\n 'open-mixtral-8x7b',\n 'pixtral-12b',\n 'pixtral-large-latest',\n ],\n docUrl: 'https://docs.mistral.ai/getting-started/models/',\n gateway: 'models.dev',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1/chat/completions',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Vercel AI Gateway',\n models: [\n 'amazon/nova-lite',\n 'amazon/nova-micro',\n 'amazon/nova-pro',\n 'anthropic/claude-3-5-haiku',\n 'anthropic/claude-3-haiku',\n 'anthropic/claude-3-opus',\n 'anthropic/claude-3.5-sonnet',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-4-1-opus',\n 'anthropic/claude-4-opus',\n 'anthropic/claude-4-sonnet',\n 'anthropic/claude-4.5-sonnet',\n 'cerebras/qwen3-coder',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.0-flash',\n 'google/gemini-2.0-flash-lite',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'meta/llama-3.3-70b',\n 'meta/llama-4-maverick',\n 'meta/llama-4-scout',\n 'mistral/codestral',\n 'mistral/magistral-medium',\n 'mistral/magistral-small',\n 'mistral/ministral-3b',\n 'mistral/ministral-8b',\n 'mistral/mistral-large',\n 'mistral/mistral-small',\n 'mistral/mixtral-8x22b-instruct',\n 'mistral/pixtral-12b',\n 'mistral/pixtral-large',\n 'moonshotai/kimi-k2',\n 'morph/morph-v3-fast',\n 'morph/morph-v3-large',\n 'openai/gpt-4-turbo',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o1',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'vercel/v0-1.0-md',\n 'vercel/v0-1.5-md',\n 'xai/grok-2',\n 'xai/grok-2-vision',\n 'xai/grok-3',\n 'xai/grok-3-fast',\n 'xai/grok-3-mini',\n 'xai/grok-3-mini-fast',\n 'xai/grok-4',\n 'xai/grok-4-fast',\n 'xai/grok-4-fast-non-reasoning',\n 'xai/grok-code-fast-1',\n ],\n docUrl: 'https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway',\n gateway: 'models.dev',\n },\n deepseek: {\n url: 'https://api.deepseek.com/chat/completions',\n apiKeyEnvVar: 'DEEPSEEK_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'DeepSeek',\n models: ['deepseek-chat', 'deepseek-reasoner'],\n docUrl: 'https://platform.deepseek.com/api-docs/pricing',\n gateway: 'models.dev',\n },\n 'alibaba-cn': {\n url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',\n apiKeyEnvVar: 'DASHSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Alibaba (China)',\n models: ['qwen3-coder-plus'],\n docUrl: 'https://www.alibabacloud.com/help/en/model-studio/models',\n gateway: 'models.dev',\n },\n venice: {\n url: 'https://api.venice.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'VENICE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Venice AI',\n models: [\n 'deepseek-coder-v2-lite',\n 'deepseek-r1-671b',\n 'dolphin-2.9.2-qwen2-72b',\n 'llama-3.1-405b',\n 'llama-3.2-3b',\n 'llama-3.3-70b',\n 'mistral-31-24b',\n 'qwen-2.5-coder-32b',\n 'qwen-2.5-qwq-32b',\n 'qwen-2.5-vl',\n 'qwen3-235b',\n 'qwen3-4b',\n 'venice-uncensored',\n ],\n docUrl: 'https://docs.venice.ai',\n gateway: 'models.dev',\n },\n chutes: {\n url: 'https://llm.chutes.ai/v1/chat/completions',\n apiKeyEnvVar: 'CHUTES_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Chutes',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'chutesai/Devstral-Small-2505',\n 'chutesai/Mistral-Small-3.2-24B-Instruct-2506',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-R1-0528-Qwen3-8B',\n 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'deepseek-ai/DeepSeek-V3.1-Terminus',\n 'deepseek-ai/DeepSeek-V3.1-turbo',\n 'deepseek-ai/DeepSeek-V3.1:THINKING',\n 'meituan-longcat/LongCat-Flash-Chat-FP8',\n 'moonshotai/Kimi-Dev-72B',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'moonshotai/Kimi-K2-Instruct-75k',\n 'moonshotai/Kimi-VL-A3B-Thinking',\n 'openai/gpt-oss-120b',\n 'tngtech/DeepSeek-R1T-Chimera',\n 'tngtech/DeepSeek-TNG-R1T2-Chimera',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n 'zai-org/GLM-4.5-turbo',\n 'zai-org/GLM-4.6-FP8',\n ],\n docUrl: 'https://llm.chutes.ai/v1/models',\n gateway: 'models.dev',\n },\n cortecs: {\n url: 'https://api.cortecs.ai/v1/chat/completions',\n apiKeyEnvVar: 'CORTECS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Cortecs',\n models: [\n 'claude-sonnet-4',\n 'deepseek-v3-0324',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-oss-120b',\n 'kimi-k2-instruct',\n 'llama-3.1-405b-instruct',\n 'nova-pro-v1',\n 'qwen3-32b',\n 'qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://api.cortecs.ai/v1/models',\n gateway: 'models.dev',\n },\n 'github-models': {\n url: 'https://models.github.ai/inference/chat/completions',\n apiKeyEnvVar: 'GITHUB_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'GitHub Models',\n models: [\n 'ai21-labs/ai21-jamba-1.5-large',\n 'ai21-labs/ai21-jamba-1.5-mini',\n 'cohere/cohere-command-a',\n 'cohere/cohere-command-r',\n 'cohere/cohere-command-r-08-2024',\n 'cohere/cohere-command-r-plus',\n 'cohere/cohere-command-r-plus-08-2024',\n 'core42/jais-30b-chat',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-0528',\n 'deepseek/deepseek-v3-0324',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-90b-vision-instruct',\n 'meta/llama-3.3-70b-instruct',\n 'meta/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta/llama-4-scout-17b-16e-instruct',\n 'meta/meta-llama-3-70b-instruct',\n 'meta/meta-llama-3-8b-instruct',\n 'meta/meta-llama-3.1-405b-instruct',\n 'meta/meta-llama-3.1-70b-instruct',\n 'meta/meta-llama-3.1-8b-instruct',\n 'microsoft/mai-ds-r1',\n 'microsoft/phi-3-medium-128k-instruct',\n 'microsoft/phi-3-medium-4k-instruct',\n 'microsoft/phi-3-mini-128k-instruct',\n 'microsoft/phi-3-mini-4k-instruct',\n 'microsoft/phi-3-small-128k-instruct',\n 'microsoft/phi-3-small-8k-instruct',\n 'microsoft/phi-3.5-mini-instruct',\n 'microsoft/phi-3.5-moe-instruct',\n 'microsoft/phi-3.5-vision-instruct',\n 'microsoft/phi-4',\n 'microsoft/phi-4-mini-instruct',\n 'microsoft/phi-4-mini-reasoning',\n 'microsoft/phi-4-multimodal-instruct',\n 'microsoft/phi-4-reasoning',\n 'mistral-ai/codestral-2501',\n 'mistral-ai/ministral-3b',\n 'mistral-ai/mistral-large-2411',\n 'mistral-ai/mistral-medium-2505',\n 'mistral-ai/mistral-nemo',\n 'mistral-ai/mistral-small-2503',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/o1',\n 'openai/o1-mini',\n 'openai/o1-preview',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'xai/grok-3',\n 'xai/grok-3-mini',\n ],\n docUrl: 'https://docs.github.com/en/github-models',\n gateway: 'models.dev',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1/chat/completions',\n apiKeyEnvVar: 'TOGETHER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Together AI',\n models: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1',\n 'deepseek-ai/DeepSeek-V3',\n 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'openai/gpt-oss-120b',\n ],\n docUrl: 'https://docs.together.ai/docs/serverless-models',\n gateway: 'models.dev',\n },\n baseten: {\n url: 'https://inference.baseten.co/v1/chat/completions',\n apiKeyEnvVar: 'BASETEN_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Baseten',\n models: ['Qwen3/Qwen3-Coder-480B-A35B-Instruct', 'moonshotai/Kimi-K2-Instruct-0905'],\n docUrl: 'https://docs.baseten.co/development/model-apis/overview',\n gateway: 'models.dev',\n },\n huggingface: {\n url: 'https://router.huggingface.co/v1/chat/completions',\n apiKeyEnvVar: 'HF_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'Hugging Face',\n models: [\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/Deepseek-V3-0324',\n 'moonshotai/Kimi-K2-Instruct',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'zai-org/GLM-4.5',\n 'zai-org/GLM-4.5-Air',\n '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/chat/completions',\n apiKeyEnvVar: 'OPENCODE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'opencode zen',\n models: [\n 'claude-3-5-haiku',\n 'claude-opus-4-1',\n 'claude-sonnet-4',\n 'claude-sonnet-4-5',\n 'code-supernova',\n 'gpt-5',\n 'grok-code',\n 'kimi-k2',\n 'qwen3-coder',\n 'qwen3-max',\n ],\n docUrl: 'https://opencode.ai/docs',\n gateway: 'models.dev',\n },\n fastrouter: {\n url: 'https://go.fastrouter.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'FASTROUTER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'FastRouter',\n models: [\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'deepseek-ai/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'moonshotai/kimi-k2',\n 'openai/gpt-4.1',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen/qwen3-coder',\n 'x-ai/grok-4',\n ],\n docUrl: 'https://fastrouter.ai/models',\n gateway: 'models.dev',\n },\n google: {\n url: 'https://generativelanguage.googleapis.com/v1beta/chat/completions',\n apiKeyEnvVar: 'GOOGLE_GENERATIVE_AI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Google',\n models: [\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-2.5-flash-lite-preview-06-17',\n 'gemini-2.5-flash-lite-preview-09-2025',\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-flash-preview-05-20',\n 'gemini-2.5-flash-preview-09-2025',\n 'gemini-2.5-pro',\n 'gemini-2.5-pro-preview-05-06',\n 'gemini-2.5-pro-preview-06-05',\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-live-2.5-flash-preview-native-audio',\n ],\n docUrl: 'https://ai.google.dev/gemini-api/docs/pricing',\n gateway: 'models.dev',\n },\n inception: {\n url: 'https://api.inceptionlabs.ai/v1/chat/completions',\n apiKeyEnvVar: 'INCEPTION_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Inception',\n models: ['mercury', 'mercury-coder'],\n docUrl: 'https://platform.inceptionlabs.ai/docs',\n gateway: 'models.dev',\n },\n wandb: {\n url: 'https://api.inference.wandb.ai/v1/chat/completions',\n apiKeyEnvVar: 'WANDB_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Weights & Biases',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'meta-llama/Llama-3.1-8B-Instruct',\n 'meta-llama/Llama-3.3-70B-Instruct',\n 'meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'microsoft/Phi-4-mini-instruct',\n 'moonshotai/Kimi-K2-Instruct',\n ],\n docUrl: 'https://weave-docs.wandb.ai/guides/integrations/inference/',\n gateway: 'models.dev',\n },\n openai: {\n url: 'https://api.openai.com/v1/chat/completions',\n apiKeyEnvVar: 'OPENAI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'OpenAI',\n models: [\n '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-mini',\n 'gpt-5-nano',\n 'o1',\n 'o1-mini',\n 'o1-preview',\n 'o1-pro',\n 'o3',\n 'o3-deep-research',\n 'o3-mini',\n 'o3-pro',\n 'o4-mini',\n 'o4-mini-deep-research',\n ],\n docUrl: 'https://platform.openai.com/docs/models',\n gateway: 'models.dev',\n },\n 'zhipuai-coding-plan': {\n url: 'https://open.bigmodel.cn/api/coding/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Zhipu AI Coding Plan',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.bigmodel.cn/cn/coding-plan/overview',\n gateway: 'models.dev',\n },\n perplexity: {\n url: 'https://api.perplexity.ai/chat/completions',\n apiKeyEnvVar: 'PERPLEXITY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Perplexity',\n models: ['sonar', 'sonar-pro', 'sonar-reasoning', 'sonar-reasoning-pro'],\n docUrl: 'https://docs.perplexity.ai',\n gateway: 'models.dev',\n },\n openrouter: {\n url: 'https://openrouter.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'OPENROUTER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'OpenRouter',\n models: [\n 'anthropic/claude-3.5-haiku',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'anthropic/claude-sonnet-4.5',\n 'cognitivecomputations/dolphin3.0-mistral-24b',\n 'cognitivecomputations/dolphin3.0-r1-mistral-24b',\n 'deepseek/deepseek-chat-v3-0324',\n 'deepseek/deepseek-chat-v3.1',\n 'deepseek/deepseek-r1-0528-qwen3-8b:free',\n 'deepseek/deepseek-r1-0528:free',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'deepseek/deepseek-r1-distill-qwen-14b',\n 'deepseek/deepseek-r1:free',\n 'deepseek/deepseek-v3-base:free',\n 'deepseek/deepseek-v3.1-terminus',\n 'featherless/qwerky-72b',\n 'google/gemini-2.0-flash-001',\n 'google/gemini-2.0-flash-exp:free',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-pro-preview-05-06',\n 'google/gemini-2.5-pro-preview-06-05',\n 'google/gemma-2-9b-it:free',\n 'google/gemma-3-12b-it',\n 'google/gemma-3-27b-it',\n 'google/gemma-3n-e4b-it',\n 'google/gemma-3n-e4b-it:free',\n 'meta-llama/llama-3.2-11b-vision-instruct',\n 'meta-llama/llama-3.3-70b-instruct:free',\n 'meta-llama/llama-4-scout:free',\n 'microsoft/mai-ds-r1:free',\n 'mistralai/codestral-2508',\n 'mistralai/devstral-medium-2507',\n 'mistralai/devstral-small-2505',\n 'mistralai/devstral-small-2505:free',\n 'mistralai/devstral-small-2507',\n 'mistralai/mistral-7b-instruct:free',\n 'mistralai/mistral-medium-3',\n 'mistralai/mistral-medium-3.1',\n 'mistralai/mistral-nemo:free',\n 'mistralai/mistral-small-3.1-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct:free',\n 'moonshotai/kimi-dev-72b:free',\n 'moonshotai/kimi-k2',\n 'moonshotai/kimi-k2-0905',\n 'moonshotai/kimi-k2:free',\n 'nousresearch/deephermes-3-llama-3-8b-preview',\n 'nousresearch/hermes-4-405b',\n 'nousresearch/hermes-4-70b',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-chat',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o4-mini',\n 'openrouter/cypher-alpha:free',\n 'openrouter/horizon-alpha',\n 'openrouter/horizon-beta',\n 'openrouter/sonoma-dusk-alpha',\n 'openrouter/sonoma-sky-alpha',\n 'qwen/qwen-2.5-coder-32b-instruct',\n 'qwen/qwen2.5-vl-32b-instruct:free',\n 'qwen/qwen2.5-vl-72b-instruct',\n 'qwen/qwen2.5-vl-72b-instruct:free',\n 'qwen/qwen3-14b:free',\n 'qwen/qwen3-235b-a22b-07-25',\n 'qwen/qwen3-235b-a22b-07-25:free',\n 'qwen/qwen3-235b-a22b-thinking-2507',\n 'qwen/qwen3-235b-a22b:free',\n 'qwen/qwen3-30b-a3b-instruct-2507',\n 'qwen/qwen3-30b-a3b:free',\n 'qwen/qwen3-32b:free',\n 'qwen/qwen3-8b:free',\n 'qwen/qwen3-coder',\n 'qwen/qwen3-coder:free',\n 'qwen/qwen3-max',\n 'qwen/qwen3-next-80b-a3b-instruct',\n 'qwen/qwq-32b:free',\n 'rekaai/reka-flash-3',\n 'sarvamai/sarvam-m:free',\n 'thudm/glm-z1-32b:free',\n 'tngtech/deepseek-r1t2-chimera:free',\n 'x-ai/grok-3',\n 'x-ai/grok-3-beta',\n 'x-ai/grok-3-mini',\n 'x-ai/grok-3-mini-beta',\n 'x-ai/grok-4',\n 'x-ai/grok-4-fast',\n 'x-ai/grok-4-fast:free',\n 'x-ai/grok-code-fast-1',\n 'z-ai/glm-4.5',\n 'z-ai/glm-4.5-air',\n 'z-ai/glm-4.5-air:free',\n 'z-ai/glm-4.5v',\n '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/chat/completions',\n apiKeyEnvVar: 'SYNTHETIC_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Synthetic',\n models: [\n 'hf:Qwen/Qwen2.5-Coder-32B-Instruct',\n 'hf:Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'hf:Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'hf:Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'hf:deepseek-ai/DeepSeek-R1',\n 'hf:deepseek-ai/DeepSeek-R1-0528',\n 'hf:deepseek-ai/DeepSeek-V3',\n 'hf:deepseek-ai/DeepSeek-V3-0324',\n 'hf:deepseek-ai/DeepSeek-V3.1',\n 'hf:deepseek-ai/DeepSeek-V3.1-Terminus',\n 'hf:meta-llama/Llama-3.1-405B-Instruct',\n 'hf:meta-llama/Llama-3.1-70B-Instruct',\n 'hf:meta-llama/Llama-3.1-8B-Instruct',\n 'hf:meta-llama/Llama-3.3-70B-Instruct',\n 'hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8',\n 'hf:meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct-0905',\n 'hf:openai/gpt-oss-120b',\n 'hf:zai-org/GLM-4.5',\n ],\n docUrl: 'https://synthetic.new/pricing',\n gateway: 'models.dev',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai/chat/completions',\n apiKeyEnvVar: 'DEEPINFRA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Deep Infra',\n models: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'zai-org/GLM-4.5',\n ],\n docUrl: 'https://deepinfra.com/models',\n gateway: 'models.dev',\n },\n zhipuai: {\n url: 'https://open.bigmodel.cn/api/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Zhipu AI',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/guides/overview/pricing',\n gateway: 'models.dev',\n },\n submodel: {\n url: 'https://llm.submodel.ai/v1/chat/completions',\n apiKeyEnvVar: 'SUBMODEL_INSTAGEN_ACCESS_KEY',\n apiKeyHeader: 'Authorization',\n name: 'submodel',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'openai/gpt-oss-120b',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n ],\n docUrl: 'https://submodel.gitbook.io',\n gateway: 'models.dev',\n },\n zai: {\n url: 'https://api.z.ai/api/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Z.AI',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/guides/overview/pricing',\n gateway: 'models.dev',\n },\n inference: {\n url: 'https://inference.net/v1/chat/completions',\n apiKeyEnvVar: 'INFERENCE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Inference',\n models: [\n 'google/gemma-3',\n 'meta/llama-3.1-8b-instruct',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-1b-instruct',\n 'meta/llama-3.2-3b-instruct',\n 'mistral/mistral-nemo-12b-instruct',\n 'osmosis/osmosis-structure-0.6b',\n 'qwen/qwen-2.5-7b-vision-instruct',\n 'qwen/qwen3-embedding-4b',\n ],\n docUrl: 'https://inference.net/models',\n gateway: 'models.dev',\n },\n requesty: {\n url: 'https://router.requesty.ai/v1/chat/completions',\n apiKeyEnvVar: 'REQUESTY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Requesty',\n models: [\n 'anthropic/claude-3-7-sonnet',\n 'anthropic/claude-4-sonnet-20250522',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4-1-20250805',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/o4-mini',\n ],\n docUrl: 'https://requesty.ai/solution/llm-routing/models',\n gateway: 'models.dev',\n },\n morph: {\n url: 'https://api.morphllm.com/v1/chat/completions',\n apiKeyEnvVar: 'MORPH_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Morph',\n models: ['auto', 'morph-v3-fast', 'morph-v3-large'],\n docUrl: 'https://docs.morphllm.com/api-reference/introduction',\n gateway: 'models.dev',\n },\n lmstudio: {\n url: 'http://127.0.0.1:1234/v1/chat/completions',\n apiKeyEnvVar: 'LMSTUDIO_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'LMStudio',\n models: ['openai/gpt-oss-20b', 'qwen/qwen3-30b-a3b-2507', 'qwen/qwen3-coder-30b'],\n docUrl: 'https://lmstudio.ai/models',\n gateway: 'models.dev',\n },\n anthropic: {\n url: 'https://api.anthropic.com/v1/chat/completions',\n apiKeyEnvVar: 'ANTHROPIC_API_KEY',\n apiKeyHeader: 'x-api-key',\n name: 'Anthropic',\n models: [\n 'claude-3-5-haiku-20241022',\n 'claude-3-5-sonnet-20240620',\n 'claude-3-5-sonnet-20241022',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-haiku-20240307',\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-opus-4-1-20250805',\n 'claude-opus-4-20250514',\n 'claude-sonnet-4-20250514',\n 'claude-sonnet-4-5-20250929',\n ],\n docUrl: 'https://docs.anthropic.com/en/docs/about-claude/models',\n gateway: 'models.dev',\n },\n 'fireworks-ai': {\n url: 'https://api.fireworks.ai/inference/v1/chat/completions',\n apiKeyEnvVar: 'FIREWORKS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Fireworks AI',\n models: [\n 'accounts/fireworks/models/deepseek-r1-0528',\n 'accounts/fireworks/models/deepseek-v3-0324',\n 'accounts/fireworks/models/deepseek-v3p1',\n 'accounts/fireworks/models/glm-4p5',\n 'accounts/fireworks/models/glm-4p5-air',\n 'accounts/fireworks/models/gpt-oss-120b',\n 'accounts/fireworks/models/gpt-oss-20b',\n 'accounts/fireworks/models/kimi-k2-instruct',\n 'accounts/fireworks/models/qwen3-235b-a22b',\n 'accounts/fireworks/models/qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://fireworks.ai/docs/',\n gateway: 'models.dev',\n },\n modelscope: {\n url: 'https://api-inference.modelscope.cn/v1/chat/completions',\n apiKeyEnvVar: 'MODELSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'ModelScope',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'ZhipuAI/GLM-4.5',\n ],\n docUrl: 'https://modelscope.cn/docs/model-service/API-Inference/intro',\n gateway: 'models.dev',\n },\n llama: {\n url: 'https://api.llama.com/compat/v1/chat/completions',\n apiKeyEnvVar: 'LLAMA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Llama',\n models: [\n 'cerebras-llama-4-maverick-17b-128e-instruct',\n 'cerebras-llama-4-scout-17b-16e-instruct',\n 'groq-llama-4-maverick-17b-128e-instruct',\n 'llama-3.3-70b-instruct',\n 'llama-3.3-8b-instruct',\n 'llama-4-maverick-17b-128e-instruct-fp8',\n 'llama-4-scout-17b-16e-instruct-fp8',\n ],\n docUrl: 'https://llama.developer.meta.com/docs/models',\n gateway: 'models.dev',\n },\n cerebras: {\n url: 'https://api.cerebras.ai/v1/chat/completions',\n apiKeyEnvVar: 'CEREBRAS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Cerebras',\n models: ['gpt-oss-120b', 'qwen-3-235b-a22b-instruct-2507', 'qwen-3-coder-480b'],\n docUrl: 'https://inference-docs.cerebras.ai/models/overview',\n 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-opus-4-20250514',\n 'anthropic/claude-sonnet-4-20250514',\n 'anthropic/claude-3-7-sonnet-20250219',\n 'anthropic/claude-3-5-haiku-latest',\n 'anthropic/claude-3-haiku-20240307',\n 'anthropic/claude-opus-4-1-20250805',\n 'anthropic/claude-sonnet-4-5-20250929',\n 'anthropic/claude-3-7-sonnet-latest',\n 'gemini/gemini-2.5-pro',\n 'gemini/gemini-2.5-flash',\n 'gemini/gemini-flash-lite-latest',\n 'gemini/gemini-2.0-flash-lite',\n 'gemini/gemini-2.5-flash-image-preview',\n 'gemini/gemini-flash-latest',\n 'gemini/gemini-2.5-flash-preview-09-2025',\n 'gemini/gemini-2.5-flash-lite-preview-09-2025',\n 'gemini/gemini-2.5-flash-lite',\n 'gemini/gemini-2.0-flash',\n 'openai/o4-mini',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/codex-mini-latest',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\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 ],\n docUrl: 'https://docs.netlify.com/build/ai-gateway/overview/',\n },\n} as const;\n\n/**\n * Available models per provider\n */\nexport const PROVIDER_MODELS = {\n 'moonshotai-cn': ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n lucidquery: ['lucidnova-rf1-100b', 'lucidquery-nexus-coder'],\n moonshotai: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n 'zai-coding-plan': ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n alibaba: ['qwen3-coder-plus'],\n xai: [\n 'grok-2',\n 'grok-2-1212',\n 'grok-2-latest',\n 'grok-2-vision',\n 'grok-2-vision-1212',\n 'grok-2-vision-latest',\n 'grok-3',\n 'grok-3-fast',\n 'grok-3-fast-latest',\n 'grok-3-latest',\n 'grok-3-mini',\n 'grok-3-mini-fast',\n 'grok-3-mini-fast-latest',\n 'grok-3-mini-latest',\n 'grok-4',\n 'grok-4-fast',\n 'grok-4-fast-non-reasoning',\n 'grok-beta',\n 'grok-code-fast-1',\n 'grok-vision-beta',\n ],\n nvidia: [\n 'black-forest-labs/flux.1-dev',\n 'deepseek-ai/deepseek-v3.1',\n 'google/gemma-3-27b-it',\n 'microsoft/phi-4-mini-instruct',\n 'moonshotai/kimi-k2-instruct',\n 'nvidia/cosmos-nemotron-34b',\n 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n 'nvidia/nemoretriever-ocr-v1',\n 'nvidia/parakeet-tdt-0.6b-v2',\n 'openai/gpt-oss-120b',\n 'openai/whisper-large-v3',\n 'qwen/qwen3-235b-a22b',\n 'qwen/qwen3-coder-480b-a35b-instruct',\n ],\n upstage: ['solar-mini', 'solar-pro2'],\n groq: [\n 'deepseek-r1-distill-llama-70b',\n 'gemma2-9b-it',\n 'llama-3.1-8b-instant',\n 'llama-3.3-70b-versatile',\n 'llama-guard-3-8b',\n 'llama3-70b-8192',\n 'llama3-8b-8192',\n 'meta-llama/llama-4-maverick-17b-128e-instruct',\n 'meta-llama/llama-4-scout-17b-16e-instruct',\n 'meta-llama/llama-guard-4-12b',\n 'mistral-saba-24b',\n 'moonshotai/kimi-k2-instruct',\n 'moonshotai/kimi-k2-instruct-0905',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen-qwq-32b',\n 'qwen/qwen3-32b',\n ],\n 'github-copilot': [\n 'claude-3.5-sonnet',\n 'claude-3.7-sonnet',\n 'claude-3.7-sonnet-thought',\n 'claude-opus-4',\n 'claude-opus-41',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'gemini-2.0-flash-001',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-4o',\n 'gpt-5',\n 'gpt-5-mini',\n 'grok-code-fast-1',\n 'o3',\n 'o3-mini',\n 'o4-mini',\n ],\n mistral: [\n 'codestral-latest',\n 'devstral-medium-2507',\n 'devstral-small-2505',\n 'devstral-small-2507',\n 'magistral-medium-latest',\n 'magistral-small',\n 'ministral-3b-latest',\n 'ministral-8b-latest',\n 'mistral-large-latest',\n 'mistral-medium-2505',\n 'mistral-medium-2508',\n 'mistral-medium-latest',\n 'mistral-nemo',\n 'mistral-small-latest',\n 'open-mistral-7b',\n 'open-mixtral-8x22b',\n 'open-mixtral-8x7b',\n 'pixtral-12b',\n 'pixtral-large-latest',\n ],\n vercel: [\n 'amazon/nova-lite',\n 'amazon/nova-micro',\n 'amazon/nova-pro',\n 'anthropic/claude-3-5-haiku',\n 'anthropic/claude-3-haiku',\n 'anthropic/claude-3-opus',\n 'anthropic/claude-3.5-sonnet',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-4-1-opus',\n 'anthropic/claude-4-opus',\n 'anthropic/claude-4-sonnet',\n 'anthropic/claude-4.5-sonnet',\n 'cerebras/qwen3-coder',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.0-flash',\n 'google/gemini-2.0-flash-lite',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'meta/llama-3.3-70b',\n 'meta/llama-4-maverick',\n 'meta/llama-4-scout',\n 'mistral/codestral',\n 'mistral/magistral-medium',\n 'mistral/magistral-small',\n 'mistral/ministral-3b',\n 'mistral/ministral-8b',\n 'mistral/mistral-large',\n 'mistral/mistral-small',\n 'mistral/mixtral-8x22b-instruct',\n 'mistral/pixtral-12b',\n 'mistral/pixtral-large',\n 'moonshotai/kimi-k2',\n 'morph/morph-v3-fast',\n 'morph/morph-v3-large',\n 'openai/gpt-4-turbo',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o1',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'vercel/v0-1.0-md',\n 'vercel/v0-1.5-md',\n 'xai/grok-2',\n 'xai/grok-2-vision',\n 'xai/grok-3',\n 'xai/grok-3-fast',\n 'xai/grok-3-mini',\n 'xai/grok-3-mini-fast',\n 'xai/grok-4',\n 'xai/grok-4-fast',\n 'xai/grok-4-fast-non-reasoning',\n 'xai/grok-code-fast-1',\n ],\n deepseek: ['deepseek-chat', 'deepseek-reasoner'],\n 'alibaba-cn': ['qwen3-coder-plus'],\n venice: [\n 'deepseek-coder-v2-lite',\n 'deepseek-r1-671b',\n 'dolphin-2.9.2-qwen2-72b',\n 'llama-3.1-405b',\n 'llama-3.2-3b',\n 'llama-3.3-70b',\n 'mistral-31-24b',\n 'qwen-2.5-coder-32b',\n 'qwen-2.5-qwq-32b',\n 'qwen-2.5-vl',\n 'qwen3-235b',\n 'qwen3-4b',\n 'venice-uncensored',\n ],\n chutes: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'chutesai/Devstral-Small-2505',\n 'chutesai/Mistral-Small-3.2-24B-Instruct-2506',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-R1-0528-Qwen3-8B',\n 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'deepseek-ai/DeepSeek-V3.1-Terminus',\n 'deepseek-ai/DeepSeek-V3.1-turbo',\n 'deepseek-ai/DeepSeek-V3.1:THINKING',\n 'meituan-longcat/LongCat-Flash-Chat-FP8',\n 'moonshotai/Kimi-Dev-72B',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'moonshotai/Kimi-K2-Instruct-75k',\n 'moonshotai/Kimi-VL-A3B-Thinking',\n 'openai/gpt-oss-120b',\n 'tngtech/DeepSeek-R1T-Chimera',\n 'tngtech/DeepSeek-TNG-R1T2-Chimera',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n 'zai-org/GLM-4.5-turbo',\n 'zai-org/GLM-4.6-FP8',\n ],\n cortecs: [\n 'claude-sonnet-4',\n 'deepseek-v3-0324',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-oss-120b',\n 'kimi-k2-instruct',\n 'llama-3.1-405b-instruct',\n 'nova-pro-v1',\n 'qwen3-32b',\n 'qwen3-coder-480b-a35b-instruct',\n ],\n 'github-models': [\n 'ai21-labs/ai21-jamba-1.5-large',\n 'ai21-labs/ai21-jamba-1.5-mini',\n 'cohere/cohere-command-a',\n 'cohere/cohere-command-r',\n 'cohere/cohere-command-r-08-2024',\n 'cohere/cohere-command-r-plus',\n 'cohere/cohere-command-r-plus-08-2024',\n 'core42/jais-30b-chat',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-0528',\n 'deepseek/deepseek-v3-0324',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-90b-vision-instruct',\n 'meta/llama-3.3-70b-instruct',\n 'meta/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta/llama-4-scout-17b-16e-instruct',\n 'meta/meta-llama-3-70b-instruct',\n 'meta/meta-llama-3-8b-instruct',\n 'meta/meta-llama-3.1-405b-instruct',\n 'meta/meta-llama-3.1-70b-instruct',\n 'meta/meta-llama-3.1-8b-instruct',\n 'microsoft/mai-ds-r1',\n 'microsoft/phi-3-medium-128k-instruct',\n 'microsoft/phi-3-medium-4k-instruct',\n 'microsoft/phi-3-mini-128k-instruct',\n 'microsoft/phi-3-mini-4k-instruct',\n 'microsoft/phi-3-small-128k-instruct',\n 'microsoft/phi-3-small-8k-instruct',\n 'microsoft/phi-3.5-mini-instruct',\n 'microsoft/phi-3.5-moe-instruct',\n 'microsoft/phi-3.5-vision-instruct',\n 'microsoft/phi-4',\n 'microsoft/phi-4-mini-instruct',\n 'microsoft/phi-4-mini-reasoning',\n 'microsoft/phi-4-multimodal-instruct',\n 'microsoft/phi-4-reasoning',\n 'mistral-ai/codestral-2501',\n 'mistral-ai/ministral-3b',\n 'mistral-ai/mistral-large-2411',\n 'mistral-ai/mistral-medium-2505',\n 'mistral-ai/mistral-nemo',\n 'mistral-ai/mistral-small-2503',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/o1',\n 'openai/o1-mini',\n 'openai/o1-preview',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'xai/grok-3',\n 'xai/grok-3-mini',\n ],\n togetherai: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1',\n 'deepseek-ai/DeepSeek-V3',\n 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'openai/gpt-oss-120b',\n ],\n baseten: ['Qwen3/Qwen3-Coder-480B-A35B-Instruct', 'moonshotai/Kimi-K2-Instruct-0905'],\n huggingface: [\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/Deepseek-V3-0324',\n 'moonshotai/Kimi-K2-Instruct',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'zai-org/GLM-4.5',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.6',\n ],\n opencode: [\n 'claude-3-5-haiku',\n 'claude-opus-4-1',\n 'claude-sonnet-4',\n 'claude-sonnet-4-5',\n 'code-supernova',\n 'gpt-5',\n 'grok-code',\n 'kimi-k2',\n 'qwen3-coder',\n 'qwen3-max',\n ],\n fastrouter: [\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'deepseek-ai/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'moonshotai/kimi-k2',\n 'openai/gpt-4.1',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen/qwen3-coder',\n 'x-ai/grok-4',\n ],\n google: [\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-2.5-flash-lite-preview-06-17',\n 'gemini-2.5-flash-lite-preview-09-2025',\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-flash-preview-05-20',\n 'gemini-2.5-flash-preview-09-2025',\n 'gemini-2.5-pro',\n 'gemini-2.5-pro-preview-05-06',\n 'gemini-2.5-pro-preview-06-05',\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-live-2.5-flash-preview-native-audio',\n ],\n inception: ['mercury', 'mercury-coder'],\n wandb: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'meta-llama/Llama-3.1-8B-Instruct',\n 'meta-llama/Llama-3.3-70B-Instruct',\n 'meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'microsoft/Phi-4-mini-instruct',\n 'moonshotai/Kimi-K2-Instruct',\n ],\n openai: [\n '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-mini',\n 'gpt-5-nano',\n 'o1',\n 'o1-mini',\n 'o1-preview',\n 'o1-pro',\n 'o3',\n 'o3-deep-research',\n 'o3-mini',\n 'o3-pro',\n 'o4-mini',\n 'o4-mini-deep-research',\n ],\n 'zhipuai-coding-plan': ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n perplexity: ['sonar', 'sonar-pro', 'sonar-reasoning', 'sonar-reasoning-pro'],\n openrouter: [\n 'anthropic/claude-3.5-haiku',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'anthropic/claude-sonnet-4.5',\n 'cognitivecomputations/dolphin3.0-mistral-24b',\n 'cognitivecomputations/dolphin3.0-r1-mistral-24b',\n 'deepseek/deepseek-chat-v3-0324',\n 'deepseek/deepseek-chat-v3.1',\n 'deepseek/deepseek-r1-0528-qwen3-8b:free',\n 'deepseek/deepseek-r1-0528:free',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'deepseek/deepseek-r1-distill-qwen-14b',\n 'deepseek/deepseek-r1:free',\n 'deepseek/deepseek-v3-base:free',\n 'deepseek/deepseek-v3.1-terminus',\n 'featherless/qwerky-72b',\n 'google/gemini-2.0-flash-001',\n 'google/gemini-2.0-flash-exp:free',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-pro-preview-05-06',\n 'google/gemini-2.5-pro-preview-06-05',\n 'google/gemma-2-9b-it:free',\n 'google/gemma-3-12b-it',\n 'google/gemma-3-27b-it',\n 'google/gemma-3n-e4b-it',\n 'google/gemma-3n-e4b-it:free',\n 'meta-llama/llama-3.2-11b-vision-instruct',\n 'meta-llama/llama-3.3-70b-instruct:free',\n 'meta-llama/llama-4-scout:free',\n 'microsoft/mai-ds-r1:free',\n 'mistralai/codestral-2508',\n 'mistralai/devstral-medium-2507',\n 'mistralai/devstral-small-2505',\n 'mistralai/devstral-small-2505:free',\n 'mistralai/devstral-small-2507',\n 'mistralai/mistral-7b-instruct:free',\n 'mistralai/mistral-medium-3',\n 'mistralai/mistral-medium-3.1',\n 'mistralai/mistral-nemo:free',\n 'mistralai/mistral-small-3.1-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct:free',\n 'moonshotai/kimi-dev-72b:free',\n 'moonshotai/kimi-k2',\n 'moonshotai/kimi-k2-0905',\n 'moonshotai/kimi-k2:free',\n 'nousresearch/deephermes-3-llama-3-8b-preview',\n 'nousresearch/hermes-4-405b',\n 'nousresearch/hermes-4-70b',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-chat',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o4-mini',\n 'openrouter/cypher-alpha:free',\n 'openrouter/horizon-alpha',\n 'openrouter/horizon-beta',\n 'openrouter/sonoma-dusk-alpha',\n 'openrouter/sonoma-sky-alpha',\n 'qwen/qwen-2.5-coder-32b-instruct',\n 'qwen/qwen2.5-vl-32b-instruct:free',\n 'qwen/qwen2.5-vl-72b-instruct',\n 'qwen/qwen2.5-vl-72b-instruct:free',\n 'qwen/qwen3-14b:free',\n 'qwen/qwen3-235b-a22b-07-25',\n 'qwen/qwen3-235b-a22b-07-25:free',\n 'qwen/qwen3-235b-a22b-thinking-2507',\n 'qwen/qwen3-235b-a22b:free',\n 'qwen/qwen3-30b-a3b-instruct-2507',\n 'qwen/qwen3-30b-a3b:free',\n 'qwen/qwen3-32b:free',\n 'qwen/qwen3-8b:free',\n 'qwen/qwen3-coder',\n 'qwen/qwen3-coder:free',\n 'qwen/qwen3-max',\n 'qwen/qwen3-next-80b-a3b-instruct',\n 'qwen/qwq-32b:free',\n 'rekaai/reka-flash-3',\n 'sarvamai/sarvam-m:free',\n 'thudm/glm-z1-32b:free',\n 'tngtech/deepseek-r1t2-chimera:free',\n 'x-ai/grok-3',\n 'x-ai/grok-3-beta',\n 'x-ai/grok-3-mini',\n 'x-ai/grok-3-mini-beta',\n 'x-ai/grok-4',\n 'x-ai/grok-4-fast',\n 'x-ai/grok-4-fast:free',\n 'x-ai/grok-code-fast-1',\n 'z-ai/glm-4.5',\n 'z-ai/glm-4.5-air',\n 'z-ai/glm-4.5-air:free',\n 'z-ai/glm-4.5v',\n '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 ],\n deepinfra: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'zai-org/GLM-4.5',\n ],\n zhipuai: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n submodel: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'openai/gpt-oss-120b',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n ],\n zai: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n inference: [\n 'google/gemma-3',\n 'meta/llama-3.1-8b-instruct',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-1b-instruct',\n 'meta/llama-3.2-3b-instruct',\n 'mistral/mistral-nemo-12b-instruct',\n 'osmosis/osmosis-structure-0.6b',\n 'qwen/qwen-2.5-7b-vision-instruct',\n 'qwen/qwen3-embedding-4b',\n ],\n requesty: [\n 'anthropic/claude-3-7-sonnet',\n 'anthropic/claude-4-sonnet-20250522',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4-1-20250805',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/o4-mini',\n ],\n morph: ['auto', 'morph-v3-fast', 'morph-v3-large'],\n lmstudio: ['openai/gpt-oss-20b', 'qwen/qwen3-30b-a3b-2507', 'qwen/qwen3-coder-30b'],\n anthropic: [\n 'claude-3-5-haiku-20241022',\n 'claude-3-5-sonnet-20240620',\n 'claude-3-5-sonnet-20241022',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-haiku-20240307',\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-opus-4-1-20250805',\n 'claude-opus-4-20250514',\n 'claude-sonnet-4-20250514',\n 'claude-sonnet-4-5-20250929',\n ],\n 'fireworks-ai': [\n 'accounts/fireworks/models/deepseek-r1-0528',\n 'accounts/fireworks/models/deepseek-v3-0324',\n 'accounts/fireworks/models/deepseek-v3p1',\n 'accounts/fireworks/models/glm-4p5',\n 'accounts/fireworks/models/glm-4p5-air',\n 'accounts/fireworks/models/gpt-oss-120b',\n 'accounts/fireworks/models/gpt-oss-20b',\n 'accounts/fireworks/models/kimi-k2-instruct',\n 'accounts/fireworks/models/qwen3-235b-a22b',\n 'accounts/fireworks/models/qwen3-coder-480b-a35b-instruct',\n ],\n modelscope: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'ZhipuAI/GLM-4.5',\n ],\n llama: [\n 'cerebras-llama-4-maverick-17b-128e-instruct',\n 'cerebras-llama-4-scout-17b-16e-instruct',\n 'groq-llama-4-maverick-17b-128e-instruct',\n 'llama-3.3-70b-instruct',\n 'llama-3.3-8b-instruct',\n 'llama-4-maverick-17b-128e-instruct-fp8',\n 'llama-4-scout-17b-16e-instruct-fp8',\n ],\n cerebras: ['gpt-oss-120b', 'qwen-3-235b-a22b-instruct-2507', 'qwen-3-coder-480b'],\n netlify: [\n 'anthropic/claude-3-5-haiku-20241022',\n 'anthropic/claude-opus-4-20250514',\n 'anthropic/claude-sonnet-4-20250514',\n 'anthropic/claude-3-7-sonnet-20250219',\n 'anthropic/claude-3-5-haiku-latest',\n 'anthropic/claude-3-haiku-20240307',\n 'anthropic/claude-opus-4-1-20250805',\n 'anthropic/claude-sonnet-4-5-20250929',\n 'anthropic/claude-3-7-sonnet-latest',\n 'gemini/gemini-2.5-pro',\n 'gemini/gemini-2.5-flash',\n 'gemini/gemini-flash-lite-latest',\n 'gemini/gemini-2.0-flash-lite',\n 'gemini/gemini-2.5-flash-image-preview',\n 'gemini/gemini-flash-latest',\n 'gemini/gemini-2.5-flash-preview-09-2025',\n 'gemini/gemini-2.5-flash-lite-preview-09-2025',\n 'gemini/gemini-2.5-flash-lite',\n 'gemini/gemini-2.0-flash',\n 'openai/o4-mini',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/codex-mini-latest',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\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 ],\n} as const;\n\n/**\n * Type definitions for autocomplete support\n */\nexport type ProviderModels = typeof PROVIDER_MODELS;\nexport type Provider = keyof ProviderModels;\nexport type ModelForProvider<P extends Provider> = ProviderModels[P][number];\n\n/**\n * OpenAI-compatible model ID type\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId = { [P in Provider]: `${P}/${ModelForProvider<P>}` }[Provider] | (string & {});\n\n/**\n * Get provider configuration by provider ID\n */\nexport function getProviderConfig(providerId: string): ProviderConfig | undefined {\n return PROVIDER_REGISTRY[providerId as keyof typeof PROVIDER_REGISTRY];\n}\n\n/**\n * Check if a provider is registered\n */\nexport function isProviderRegistered(providerId: string): boolean {\n return providerId in PROVIDER_REGISTRY;\n}\n\n/**\n * Get all registered provider IDs\n */\nexport function getRegisteredProviders(): string[] {\n return Object.keys(PROVIDER_REGISTRY);\n}\n\n/**\n * Parse a model string to extract provider and model ID\n * Examples:\n * \"openai/gpt-4o\" -> { provider: \"openai\", modelId: \"gpt-4o\" }\n * \"fireworks/accounts/etc/model\" -> { provider: \"fireworks\", modelId: \"accounts/etc/model\" }\n * \"gpt-4o\" -> { provider: null, modelId: \"gpt-4o\" }\n */\nexport function parseModelString(modelString: string): { provider: string | null; modelId: string } {\n const firstSlashIndex = modelString.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n // Has at least one slash - extract everything before first slash as provider\n const provider = modelString.substring(0, firstSlashIndex);\n const modelId = modelString.substring(firstSlashIndex + 1);\n\n if (provider && modelId) {\n return {\n provider,\n modelId,\n };\n }\n }\n\n // No slash or invalid format\n return {\n provider: null,\n modelId: modelString,\n };\n}\n\n/**\n * Type guard to check if a string is a valid OpenAI-compatible model ID\n */\nexport function isValidModelId(modelId: string): modelId is ModelRouterModelId {\n const { provider } = parseModelString(modelId);\n return provider !== null && isProviderRegistered(provider);\n}\n","/**\n * Base class for model gateway providers\n * Gateways fetch provider configurations and build URLs for model access\n */\n\nexport interface ProviderConfig {\n url?: string;\n apiKeyHeader?: string;\n apiKeyEnvVar: string | string[];\n name: string;\n models: string[];\n docUrl?: string; // Optional documentation URL\n gateway: string;\n}\n\nexport abstract class MastraModelGateway {\n /**\n * Name of the gateway provider\n */\n abstract readonly name: string;\n\n /**\n * Optional prefix for provider IDs\n * If set, all providers from this gateway will be prefixed (e.g., \"netlify/openai\")\n * Registry gateways (like models.dev) typically don't have a prefix\n */\n abstract readonly prefix?: string;\n\n /**\n * Fetch provider configurations from the gateway\n * Should return providers in the standard format\n */\n abstract fetchProviders(): Promise<Record<string, ProviderConfig>>;\n\n /**\n * Build the URL for a specific model/provider combination\n * @param modelId Full model ID (e.g., \"openai/gpt-4o\" or \"netlify/openai/gpt-4o\")\n * @param envVars Environment variables available\n * @returns URL string if this gateway can handle the model, false otherwise\n */\n abstract buildUrl(modelId: string, envVars: Record<string, string>): string | false | Promise<string | false>;\n\n /**\n * Build headers for the request\n * Optional - only needed if the gateway requires special headers\n */\n buildHeaders?(\n modelId: string,\n envVars: Record<string, string>,\n ): Record<string, string> | Promise<Record<string, string>>;\n}\n","import { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\n\ninterface ModelsDevProviderInfo {\n id: string;\n name: string;\n models: Record<string, any>;\n env?: string[]; // Array of env var names\n api?: string; // Base API URL\n npm?: string; // NPM package name\n doc?: string; // Documentation URL\n}\n\ninterface ModelsDevResponse {\n [providerId: string]: ModelsDevProviderInfo;\n}\n\n// Special cases: providers that are OpenAI-compatible but have their own SDKs\n// These providers work with OpenAI-compatible endpoints even though models.dev\n// might list them with their own SDK packages\n// This constant is ONLY used during generation in fetchProviders() to determine\n// which providers from models.dev should be included in the registry.\n// At runtime, buildUrl() and buildHeaders() use the pre-generated PROVIDER_REGISTRY instead.\nconst OPENAI_COMPATIBLE_OVERRIDES: Record<string, Partial<ProviderConfig>> = {\n openai: {\n url: 'https://api.openai.com/v1/chat/completions',\n },\n anthropic: {\n url: 'https://api.anthropic.com/v1/chat/completions',\n apiKeyHeader: 'x-api-key',\n },\n cerebras: {\n url: 'https://api.cerebras.ai/v1/chat/completions',\n },\n xai: {\n url: 'https://api.x.ai/v1/chat/completions',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1/chat/completions',\n },\n google: {\n url: 'https://generativelanguage.googleapis.com/v1beta/chat/completions',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1/chat/completions',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1/chat/completions',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai/chat/completions',\n },\n perplexity: {\n url: 'https://api.perplexity.ai/chat/completions',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1/chat/completions',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n },\n};\n\nexport class ModelsDevGateway extends MastraModelGateway {\n readonly name = 'models.dev';\n readonly prefix = undefined; // No prefix for registry gateway\n\n private providerConfigs: Record<string, ProviderConfig> = {};\n\n constructor(providerConfigs?: Record<string, ProviderConfig>) {\n super();\n if (providerConfigs) this.providerConfigs = providerConfigs;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n console.info('Fetching providers from models.dev API...');\n\n const response = await fetch('https://models.dev/api.json');\n if (!response.ok) {\n throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);\n }\n\n const data = (await response.json()) as ModelsDevResponse;\n\n const providerConfigs: Record<string, ProviderConfig> = {};\n\n for (const [providerId, providerInfo] of Object.entries(data)) {\n // Skip non-provider entries (if any)\n if (!providerInfo || typeof providerInfo !== 'object' || !providerInfo.models) continue;\n\n // Use provider ID as-is (keep hyphens for consistency)\n const normalizedId = providerId;\n\n // Check if this is OpenAI-compatible based on npm package or overrides\n const isOpenAICompatible =\n providerInfo.npm === '@ai-sdk/openai-compatible' ||\n providerInfo.npm === '@ai-sdk/gateway' || // Vercel AI Gateway is OpenAI-compatible\n normalizedId in OPENAI_COMPATIBLE_OVERRIDES;\n\n // Also include providers that have an API URL and env vars (likely OpenAI-compatible)\n const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;\n\n if (isOpenAICompatible || hasApiAndEnv) {\n // Get model IDs from the models object\n const modelIds = Object.keys(providerInfo.models).sort();\n\n // Get the API URL from the provider info or overrides\n let url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;\n\n // Ensure the URL ends with /chat/completions if it doesn't already\n if (url && !url.includes('/chat/completions') && !url.includes('/messages')) {\n url = url.replace(/\\/$/, '') + '/chat/completions';\n }\n\n // Skip if we don't have a URL\n if (!url) {\n console.info(`Skipping ${normalizedId}: No API URL available`);\n continue;\n }\n\n // Get the API key env var from the provider info\n // Convert hyphens to underscores for env var naming convention\n const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, '_')}_API_KEY`;\n\n // Determine the API key header (special case for Anthropic)\n const apiKeyHeader = OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || 'Authorization';\n\n providerConfigs[normalizedId] = {\n url,\n apiKeyEnvVar,\n apiKeyHeader,\n name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),\n models: modelIds.filter(id => !id.includes(`codex`)), // codex requires responses api\n docUrl: providerInfo.doc, // Include documentation URL if available\n gateway: `models.dev`,\n };\n } else {\n console.info(`Skipped provider ${providerInfo.name}`);\n }\n }\n\n // Store for later use in buildUrl and buildHeaders\n this.providerConfigs = providerConfigs;\n\n console.info(`Found ${Object.keys(providerConfigs).length} OpenAI-compatible providers`);\n console.info('Providers:', Object.keys(providerConfigs).sort());\n return providerConfigs;\n }\n\n buildUrl(modelId: string, envVars: Record<string, string>): string | false | Promise<string | false> {\n // Parse model ID to get provider\n const [provider, ...modelParts] = modelId.split('/');\n\n // This gateway only handles models without a prefix (since we have no prefix)\n // and only if we know about the provider\n if (!provider || !modelParts.length) {\n return false; // Not a full model ID\n }\n\n const config = this.providerConfigs[provider];\n\n if (!config?.url) {\n return false; // We don't know how to handle this provider\n }\n\n // Check for custom base URL from env vars\n const baseUrlEnvVar = `${provider.toUpperCase().replace(/-/g, '_')}_BASE_URL`;\n const customBaseUrl = envVars[baseUrlEnvVar];\n\n return customBaseUrl || config.url;\n }\n\n buildHeaders(\n modelId: string,\n envVars: Record<string, string>,\n ): Record<string, string> | Promise<Record<string, string>> {\n const [provider] = modelId.split('/');\n if (!provider) {\n return {};\n }\n\n const config = this.providerConfigs[provider];\n\n if (!config) {\n return {};\n }\n\n const apiKey = typeof config.apiKeyEnvVar === `string` ? envVars[config.apiKeyEnvVar] : undefined; // we only use single string env var for models.dev for now\n if (!apiKey) {\n return {};\n }\n\n const headers: Record<string, string> = {};\n\n if (config.apiKeyHeader === 'Authorization' || !config.apiKeyHeader) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n } else {\n headers[config.apiKeyHeader] = apiKey;\n }\n\n // Special handling for Anthropic\n if (provider === 'anthropic') {\n headers['anthropic-version'] = '2023-06-01';\n }\n\n return headers;\n }\n}\n","import { InMemoryServerCache } from '../../../cache/inmemory.js';\nimport { MastraError } from '../../../error/index.js';\nimport { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\n\ninterface NetlifyProviderResponse {\n token_env_var: string;\n url_env_var: string;\n models: string[];\n}\ninterface NetlifyResponse {\n providers: Record<string, NetlifyProviderResponse>;\n}\n\ninterface NetlifyTokenResponse {\n token: string;\n url: string;\n expires_at: number;\n}\n\ninterface CachedToken {\n token: string;\n url: string;\n expiresAt: number;\n}\n\ninterface TokenData {\n token: string;\n url: string;\n}\nexport class NetlifyGateway extends MastraModelGateway {\n readonly name = 'netlify';\n readonly prefix = 'netlify'; // All providers will be prefixed with \"netlify/\"\n private tokenCache = new InMemoryServerCache();\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n console.info('Fetching providers from Netlify AI Gateway...');\n const response = await fetch('https://api.netlify.com/api/v1/ai-gateway/providers');\n if (!response.ok) {\n throw new Error(`Failed to fetch from Netlify: ${response.statusText}`);\n }\n const data = (await response.json()) as NetlifyResponse;\n const netlify: ProviderConfig = {\n apiKeyEnvVar: ['NETLIFY_TOKEN', 'NETLIFY_SITE_ID'],\n apiKeyHeader: 'Authorization', // Netlify uses standard Bearer auth\n name: `Netlify`,\n gateway: `netlify`,\n models: [],\n docUrl: 'https://docs.netlify.com/build/ai-gateway/overview/',\n };\n // Convert Netlify format to our standard format\n for (const [providerId, provider] of Object.entries(data.providers)) {\n for (const model of provider.models) {\n netlify.models.push(`${providerId}/${model}`);\n }\n }\n console.info(`Found ${Object.keys(data.providers).length} models via Netlify Gateway`);\n return { netlify };\n }\n\n async buildUrl(modelId: string, envVars: Record<string, string>): Promise<string | false> {\n // Check if this model ID is for our gateway\n if (!modelId.startsWith(`${this.prefix}/`)) {\n return false; // Not our prefix\n }\n // Parse the model ID: \"netlify/openai/gpt-4o\"\n const parts = modelId.split('/');\n if (parts.length < 3) {\n return false; // Invalid format\n }\n const provider = parts[1];\n if (!provider) {\n return false;\n }\n\n // Check for Netlify site ID first (for token exchange)\n const siteId = envVars['NETLIFY_SITE_ID'];\n const netlifyToken = envVars['NETLIFY_TOKEN'];\n\n if (!netlifyToken) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_TOKEN',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_TOKEN environment variable required for model: ${modelId}`,\n });\n }\n\n if (!siteId) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_SITE_ID',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_SITE_ID environment variable required for model: ${modelId}`,\n });\n }\n\n try {\n const tokenData = await this.getOrFetchToken(siteId, netlifyToken);\n return `${tokenData.url}chat/completions`;\n } catch (error) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_TOKEN_ERROR',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Failed to get Netlify AI Gateway token for model ${modelId}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n\n /**\n * Get cached token or fetch a new site-specific AI Gateway token from Netlify\n */\n private async getOrFetchToken(siteId: string, netlifyToken: string): Promise<TokenData> {\n const cacheKey = `netlify-token:${siteId}:${netlifyToken}`;\n\n // Check cache first\n const cached = (await this.tokenCache.get(cacheKey)) as CachedToken | undefined;\n if (cached && cached.expiresAt > Date.now() / 1000 + 60) {\n // Return cached token if it won't expire in the next minute\n return { token: cached.token, url: cached.url };\n }\n\n // Fetch new token\n const response = await fetch(`https://api.netlify.com/api/v1/sites/${siteId}/ai-gateway/token`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${netlifyToken}`,\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get Netlify AI Gateway token: ${response.status} ${error}`);\n }\n\n const tokenResponse = (await response.json()) as NetlifyTokenResponse;\n\n // Cache the token - InMemoryServerCache will handle the TTL\n await this.tokenCache.set(cacheKey, {\n token: tokenResponse.token,\n url: tokenResponse.url,\n expiresAt: tokenResponse.expires_at,\n });\n\n return { token: tokenResponse.token, url: tokenResponse.url };\n }\n async buildHeaders(modelId: string, envVars: Record<string, string>): Promise<Record<string, string>> {\n const siteId = envVars['NETLIFY_SITE_ID'];\n const netlifyToken = envVars['NETLIFY_TOKEN'];\n\n if (!netlifyToken) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_TOKEN',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_TOKEN environment variable required for model: ${modelId}`,\n });\n }\n\n if (!siteId) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_SITE_ID',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_SITE_ID environment variable required for model: ${modelId}`,\n });\n }\n\n try {\n const tokenData = await this.getOrFetchToken(siteId, netlifyToken);\n return {\n Authorization: `Bearer ${tokenData.token}`,\n };\n } catch (error) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_TOKEN_ERROR',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Failed to get Netlify AI Gateway token for model ${modelId}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n}\n","import type { MastraModelGateway } from './gateways/base.js';\nimport { ModelsDevGateway } from './gateways/models-dev.js';\nimport { NetlifyGateway } from './gateways/netlify.js';\nimport { PROVIDER_REGISTRY } from './provider-registry.generated.js';\n\nfunction getStaticProvidersByGateway(name: string) {\n return Object.fromEntries(Object.entries(PROVIDER_REGISTRY).filter(([_provider, config]) => config.gateway === name));\n}\n\nconst gateways = [new NetlifyGateway(), new ModelsDevGateway(getStaticProvidersByGateway(`models.dev`))];\n\n/**\n * Find the gateway that handles a specific model ID based on prefix\n */\nfunction findGatewayForModel(modelId: string): MastraModelGateway | null {\n // First, check for gateways with specific prefixes\n const prefixedGateway = gateways.find((g: MastraModelGateway) => g.prefix && modelId.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 return null;\n}\n\n/**\n * Resolve URL and headers for a model using runtime gateways\n */\nexport async function resolveModelConfig(\n modelId: string,\n envVars: Record<string, string> = process.env as Record<string, string>,\n): Promise<{\n url: string | false;\n headers: Record<string, string>;\n resolvedModelId: string;\n}> {\n const gateway = findGatewayForModel(modelId);\n\n if (!gateway) {\n return { url: false, headers: {}, resolvedModelId: modelId };\n }\n\n const url = await gateway.buildUrl(modelId, envVars);\n if (url === false) {\n return { url: false, headers: {}, resolvedModelId: modelId };\n }\n\n const headers = gateway.buildHeaders ? await gateway.buildHeaders(modelId, envVars) : {};\n\n let resolvedModelId = modelId;\n\n // remove any gateway prefix\n const prefix = gateway.prefix ? `${gateway.prefix}/` : null;\n if (prefix && resolvedModelId.startsWith(prefix)) {\n resolvedModelId = resolvedModelId.substring(prefix.length);\n }\n\n // remove the provider id\n const firstSlashIndex = resolvedModelId.indexOf('/');\n if (firstSlashIndex !== -1) {\n resolvedModelId = resolvedModelId.substring(firstSlashIndex + 1);\n }\n\n return { url, headers, resolvedModelId };\n}\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider-v5';\nimport { resolveModelConfig } from './gateway-resolver.js';\nimport { parseModelString, getProviderConfig } from './provider-registry.generated.js';\nimport type { ModelRouterModelId } from './provider-registry.generated.js';\nimport type { OpenAICompatibleConfig } from './shared.types';\n\n// Helper function to resolve API key from environment\nfunction resolveApiKey({ provider, apiKey }: { provider?: string; apiKey?: string }): string | undefined {\n if (apiKey) return apiKey;\n\n if (provider) {\n const config = getProviderConfig(provider);\n if (typeof config?.apiKeyEnvVar === `string`) {\n return process.env[config.apiKeyEnvVar];\n }\n if (Array.isArray(config?.apiKeyEnvVar)) {\n for (const key of config.apiKeyEnvVar) {\n if (process.env[key]) return process.env[key];\n }\n }\n }\n\n return undefined;\n}\n\n// TODO: get these types from openai\ninterface OpenAIStreamChunk {\n id?: string;\n object?: string;\n created?: number;\n model?: string;\n choices?: Array<{\n index: number;\n delta?: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n}\n\nexport class OpenAICompatibleModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly defaultObjectGenerationMode = 'json' as const;\n readonly supportsStructuredOutputs = true;\n readonly supportsImageUrls = true;\n readonly supportedUrls = {} as Record<string, RegExp[]>;\n\n readonly modelId: string;\n readonly provider: string;\n\n private config: OpenAICompatibleConfig;\n private fullModelId: string; // Store the full model ID for gateway resolution\n\n constructor(config: ModelRouterModelId | OpenAICompatibleConfig) {\n // Parse configuration\n let parsedConfig: OpenAICompatibleConfig;\n\n if (typeof config === 'string') {\n // First check if it's a valid URL\n let isUrl = false;\n try {\n new URL(config);\n isUrl = true;\n } catch {\n // Not a URL, continue with provider parsing\n }\n\n if (isUrl) {\n // If it's a direct URL - use as-is\n parsedConfig = {\n id: 'unknown',\n url: config,\n };\n this.provider = 'openai-compatible';\n this.fullModelId = 'unknown';\n this.config = { id: 'unknown', url: config };\n } else {\n // Handle magic strings like \"openai/gpt-4o\" or \"netlify/openai/gpt-4o\"\n this.fullModelId = config;\n const firstSlashIndex = config.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n const provider = config.substring(0, firstSlashIndex);\n const modelId = config.substring(firstSlashIndex + 1);\n\n parsedConfig = {\n id: modelId,\n apiKey: resolveApiKey({ provider }),\n };\n this.provider = provider;\n } else {\n // No slash at all, treat as direct model ID\n throw new Error(`Invalid model string: \"${config}\". Use \"provider/model\" format or a direct URL.`);\n }\n }\n } else {\n // Handle config object\n parsedConfig = config;\n this.fullModelId = config.id;\n\n // Extract provider from id if present\n const parsed = parseModelString(config.id);\n this.provider = parsed.provider || 'openai-compatible';\n\n if (parsed.provider && parsed.modelId !== config.id) {\n parsedConfig.id = parsed.modelId;\n }\n\n // Resolve API key if not provided\n if (!parsedConfig.apiKey) {\n parsedConfig.apiKey = resolveApiKey({ provider: parsed.provider || undefined });\n }\n }\n\n // Store the configuration\n this.modelId = parsedConfig.id;\n this.config = parsedConfig;\n }\n\n private convertMessagesToOpenAI(messages: LanguageModelV2CallOptions['prompt']): any[] {\n return messages\n .map(msg => {\n if (msg.role === 'system') {\n return {\n role: 'system',\n content: msg.content,\n };\n }\n\n if (msg.role === 'user') {\n // Handle content parts\n const contentParts = msg.content\n .map(part => {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n // Note: v2 uses 'file' type with image property\n if (part.type === 'file') {\n return {\n type: 'image_url',\n image_url: { url: part.data },\n };\n }\n return null;\n })\n .filter(Boolean);\n\n // If only text parts, flatten to string\n if (contentParts.every(p => p?.type === 'text')) {\n return {\n role: 'user',\n content: contentParts.map(p => p?.text || '').join(''),\n };\n }\n\n return {\n role: 'user',\n content: contentParts,\n };\n }\n\n if (msg.role === 'assistant') {\n const textContent = msg.content\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n const toolCalls = msg.content\n .filter(part => part.type === 'tool-call')\n .map(part => ({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input || {}),\n },\n }));\n\n return {\n role: 'assistant',\n content: textContent || null,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n };\n }\n\n if (msg.role === 'tool') {\n return msg.content.map(toolResponse => ({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.output),\n }));\n }\n\n return msg;\n })\n .flat();\n }\n\n private convertToolsToOpenAI(tools: LanguageModelV2CallOptions['tools']): any[] | undefined {\n if (!tools || Object.keys(tools).length === 0) return undefined;\n\n return Object.entries(tools).map(([name, tool]) => {\n if (tool.type === 'function') {\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema || {},\n },\n };\n }\n // For provider-defined tools, use minimal definition\n return {\n type: 'function',\n function: {\n name,\n description: `Provider tool: ${name}`,\n parameters: {},\n },\n };\n });\n }\n\n private mapFinishReason(reason: string | null): LanguageModelV2FinishReason {\n switch (reason) {\n case 'stop':\n return 'stop';\n case 'length':\n case 'max_tokens':\n return 'length';\n case 'tool_calls':\n case 'function_call':\n return 'tool-calls';\n case 'content_filter':\n return 'content-filter';\n default:\n return 'unknown';\n }\n }\n\n /**\n * Resolve URL and headers for the request\n * This is called fresh for each request to ensure we get the latest values\n * (e.g., Netlify tokens can expire and need to be refreshed)\n */\n private async resolveRequestConfig(): Promise<{ url: string; headers: Record<string, string>; modelId: string }> {\n // If they provide a url as a string or in the config object, we shouldn't use our gateway classes\n const shouldUseGateway = !this.config.url;\n\n if (shouldUseGateway) {\n // Use gateway resolution - always get fresh values\n const { url, headers, resolvedModelId } = await resolveModelConfig(this.fullModelId);\n\n if (url === false) {\n throw new Error(`No gateway can handle model: ${this.fullModelId}`);\n }\n\n // Merge headers with custom headers\n const finalHeaders = {\n 'Content-Type': 'application/json',\n ...headers,\n ...this.config.headers,\n };\n\n return { url, headers: finalHeaders, modelId: resolvedModelId };\n } else {\n // Use static configuration\n if (!this.config.url) {\n throw new Error('URL is required for OpenAI-compatible model');\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...this.config.headers,\n };\n\n // Add auth header if API key is available\n if (this.config.apiKey) {\n // Check if we need a special header format\n const providerConfig = this.provider !== 'openai-compatible' ? getProviderConfig(this.provider) : undefined;\n if (providerConfig?.apiKeyHeader === 'x-api-key') {\n headers['x-api-key'] = this.config.apiKey;\n } else {\n headers['Authorization'] = `Bearer ${this.config.apiKey}`;\n }\n }\n\n return { url: this.config.url, headers, modelId: this.modelId };\n }\n }\n\n private validateApiKey(): void {\n // Skip validation for models that will use gateway resolution\n // Gateway handles auth through its own mechanism (e.g., Netlify uses site ID + token)\n const willUseGateway = !this.config.url;\n if (willUseGateway) {\n return;\n }\n\n // Check if API key is required and missing\n if (!this.config.apiKey && this.provider !== 'openai-compatible') {\n // Get the provider config to find the env var name\n const providerConfig = getProviderConfig(this.provider);\n if (providerConfig?.apiKeyEnvVar) {\n throw new Error(\n `API key not found for provider \"${this.provider}\". Please set the ${providerConfig.apiKeyEnvVar} environment variable.`,\n );\n } else {\n throw new Error(\n `API key not found for provider \"${this.provider}\". Please provide an API key in the configuration.`,\n );\n }\n }\n }\n\n async doGenerate(): Promise<never> {\n throw new Error(\n 'doGenerate is not supported by OpenAICompatibleModel. ' +\n 'Mastra only uses streaming (doStream) for all LLM calls.',\n );\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<{\n stream: ReadableStream<LanguageModelV2StreamPart>;\n request?: { body: string };\n response?: { headers: Record<string, string> };\n warnings: LanguageModelV2CallWarning[];\n }> {\n // Validate API key and return error stream if validation fails\n try {\n this.validateApiKey();\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 instanceof Error ? error.message : String(error),\n } as LanguageModelV2StreamPart);\n },\n }),\n warnings: [],\n };\n }\n\n try {\n // Resolve URL and headers\n const { url, headers, modelId: resolvedModelId } = await this.resolveRequestConfig();\n\n const { prompt, tools, toolChoice, providerOptions } = options;\n\n // TODO: real body type, not any\n const body: any = {\n messages: this.convertMessagesToOpenAI(prompt),\n model: resolvedModelId,\n stream: true,\n ...providerOptions,\n };\n\n const openAITools = this.convertToolsToOpenAI(tools);\n if (openAITools) {\n body.tools = openAITools;\n if (toolChoice) {\n body.tool_choice =\n toolChoice.type === 'none'\n ? 'none'\n : toolChoice.type === 'required'\n ? 'required'\n : toolChoice.type === 'auto'\n ? 'auto'\n : toolChoice.type === 'tool'\n ? { type: 'function', function: { name: toolChoice.toolName } }\n : 'auto';\n }\n }\n\n // Handle structured output\n if (options.responseFormat?.type === 'json') {\n body.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n strict: true,\n schema: options.responseFormat.schema,\n },\n };\n }\n\n const fetchArgs = {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: options.abortSignal,\n };\n const response = await fetch(url, fetchArgs);\n\n if (!response.ok) {\n const error = await response.text();\n\n // Check for authentication errors\n if (response.status === 401 || response.status === 403) {\n const providerConfig = getProviderConfig(this.provider);\n if (providerConfig?.apiKeyEnvVar) {\n throw new Error(\n `Authentication failed for provider \"${this.provider}\". Please ensure the ${providerConfig.apiKeyEnvVar} environment variable is set with a valid API key.`,\n );\n }\n }\n\n throw new Error(`OpenAI-compatible API error: ${response.status} - ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let sentStart = false;\n const toolCallBuffers = new Map<number, { id: string; name: string; args: string; sent?: boolean }>();\n const mapFinishReason = this.mapFinishReason.bind(this);\n const modelId = this.modelId; // Capture modelId for use in stream\n\n let isActiveText = false;\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\n async start(controller) {\n try {\n // Send stream-start\n controller.enqueue({\n type: 'stream-start',\n warnings: [],\n });\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n // Parse and send any buffered tool calls that haven't been sent yet\n for (const [_, toolCall] of toolCallBuffers) {\n if (!toolCall.sent && toolCall.id && toolCall.name && toolCall.args) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.args || '{}',\n });\n }\n }\n\n controller.close();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim() === '' || line.trim() === 'data: [DONE]') {\n continue;\n }\n\n if (line.startsWith('data: ')) {\n try {\n const data: OpenAIStreamChunk = JSON.parse(line.slice(6));\n\n // Send response metadata from first chunk\n if (!sentStart && data.id) {\n controller.enqueue({\n type: 'response-metadata',\n id: data.id,\n modelId: data.model || modelId,\n timestamp: new Date(data.created ? data.created * 1000 : Date.now()),\n });\n sentStart = true;\n }\n\n const choice = data.choices?.[0];\n if (!choice) continue;\n\n // Handle text delta\n if (choice.delta?.content) {\n if (!isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n isActiveText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: choice.delta.content,\n });\n } else if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n isActiveText = false;\n }\n\n // Handle tool call deltas\n if (choice.delta?.tool_calls) {\n for (const toolCall of choice.delta.tool_calls) {\n const index = toolCall.index;\n\n if (!toolCallBuffers.has(index)) {\n // Send tool-input-start when we first see a tool call\n if (toolCall.id && toolCall.function?.name) {\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.id,\n toolName: toolCall.function.name,\n });\n }\n\n toolCallBuffers.set(index, {\n id: toolCall.id || '',\n name: toolCall.function?.name || '',\n args: '',\n });\n }\n\n const buffer = toolCallBuffers.get(index)!;\n\n if (toolCall.id) {\n buffer.id = toolCall.id;\n }\n\n if (toolCall.function?.name) {\n buffer.name = toolCall.function.name;\n }\n\n if (toolCall.function?.arguments) {\n buffer.args += toolCall.function.arguments;\n controller.enqueue({\n type: 'tool-input-delta',\n id: buffer.id,\n delta: toolCall.function.arguments,\n });\n\n // Check if tool call is complete (parsable JSON)\n try {\n JSON.parse(buffer.args);\n if (buffer.id && buffer.name) {\n controller.enqueue({\n type: 'tool-input-end',\n id: buffer.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.args,\n });\n\n toolCallBuffers.set(index, {\n id: buffer.id,\n name: buffer.name,\n args: buffer.args,\n sent: true,\n });\n }\n } catch {\n // Not complete JSON yet, continue buffering\n }\n }\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // Don't send tool calls again - they've already been sent when complete\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: 'finish',\n finishReason: mapFinishReason(choice.finish_reason),\n usage: data.usage\n ? {\n inputTokens: data.usage.prompt_tokens || 0,\n outputTokens: data.usage.completion_tokens || 0,\n totalTokens: data.usage.total_tokens || 0,\n }\n : {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n },\n });\n }\n } catch (e) {\n console.error('Error parsing SSE data:', e);\n }\n }\n }\n }\n } catch (error) {\n return {\n stream: new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n } as LanguageModelV2StreamPart);\n },\n }),\n warnings: [],\n };\n }\n },\n });\n\n return {\n stream,\n request: { body: JSON.stringify(body) },\n response: { headers: Object.fromEntries(response.headers.entries()) },\n warnings: [],\n };\n } catch (error) {\n return {\n stream: new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n } as LanguageModelV2StreamPart);\n },\n }),\n warnings: [],\n };\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mastra/index.ts","../src/events/event-emitter.ts","../src/mastra/hooks.ts"],"names":[],"mappings":"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","file":"chunk-COYTVUIL.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Agent } from '../agent';\nimport { getAllAITracing, setupAITracing, shutdownAITracingRegistry } from '../ai-tracing';\nimport type { ObservabilityRegistryConfig } from '../ai-tracing';\nimport type { BundlerConfig } from '../bundler/types';\nimport { InMemoryServerCache } from '../cache';\nimport type { MastraServerCache } from '../cache';\nimport type { MastraDeployer } from '../deployer';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { EventEmitterPubSub } from '../events/event-emitter';\nimport type { PubSub } from '../events/pubsub';\nimport type { Event } from '../events/types';\nimport { AvailableHooks, registerHook } from '../hooks';\nimport { LogLevel, noopLogger, ConsoleLogger } from '../logger';\nimport type { IMastraLogger } from '../logger';\nimport type { MCPServerBase } from '../mcp';\nimport type { MastraMemory } from '../memory/memory';\nimport type { MastraScorer } from '../scores';\nimport type { Middleware, ServerConfig } from '../server/types';\nimport type { MastraStorage } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport { InstrumentClass, Telemetry } from '../telemetry';\nimport type { OtelConfig } from '../telemetry';\nimport type { MastraTTS } from '../tts';\nimport type { MastraIdGenerator } from '../types';\nimport type { MastraVector } from '../vector';\nimport type { Workflow } from '../workflows';\nimport { WorkflowEventProcessor } from '../workflows/evented/workflow-event-processor';\nimport type { LegacyWorkflow } from '../workflows/legacy';\nimport { createOnScorerHook } from './hooks';\n\nexport interface Config<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow<any, any, any, any, any, any>> = Record<\n string,\n Workflow<any, any, any, any, any, any>\n >,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n TScorers extends Record<string, MastraScorer<any, any, any, any>> = Record<string, MastraScorer<any, any, any, any>>,\n> {\n agents?: TAgents;\n storage?: MastraStorage;\n vectors?: TVectors;\n logger?: TLogger | false;\n legacy_workflows?: TLegacyWorkflows;\n workflows?: TWorkflows;\n tts?: TTTS;\n telemetry?: OtelConfig;\n observability?: ObservabilityRegistryConfig;\n idGenerator?: MastraIdGenerator;\n deployer?: MastraDeployer;\n server?: ServerConfig;\n mcpServers?: TMCPServers;\n bundler?: BundlerConfig;\n pubsub?: PubSub;\n scorers?: TScorers;\n\n /**\n * Server middleware functions to be applied to API routes\n * Each middleware can specify a path pattern (defaults to '/api/*')\n * @deprecated use server.middleware instead\n */\n serverMiddleware?: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path?: string;\n }>;\n\n // @deprecated add memory to your Agent directly instead\n memory?: never;\n\n events?: {\n [topic: string]: (\n event: Event,\n cb?: () => Promise<void>,\n ) => Promise<void> | ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n };\n}\n\n@InstrumentClass({\n prefix: 'mastra',\n excludeMethods: ['getLogger', 'getTelemetry'],\n})\nexport class Mastra<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow<any, any, any, any, any, any>> = Record<\n string,\n Workflow<any, any, any, any, any, any>\n >,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n TScorers extends Record<string, MastraScorer<any, any, any, any>> = Record<string, MastraScorer<any, any, any, any>>,\n> {\n #vectors?: TVectors;\n #agents: TAgents;\n #logger: TLogger;\n #legacy_workflows: TLegacyWorkflows;\n #workflows: TWorkflows;\n #tts?: TTTS;\n #deployer?: MastraDeployer;\n #serverMiddleware: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path: string;\n }> = [];\n #telemetry?: Telemetry;\n #storage?: MastraStorage;\n #memory?: MastraMemory;\n #scorers?: TScorers;\n #server?: ServerConfig;\n #mcpServers?: TMCPServers;\n #bundler?: BundlerConfig;\n #idGenerator?: MastraIdGenerator;\n #pubsub: PubSub;\n #events: {\n [topic: string]: ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n } = {};\n #internalMastraWorkflows: Record<string, Workflow> = {};\n // This is only used internally for server handlers that require temporary persistence\n #serverCache: MastraServerCache;\n\n /**\n * @deprecated use getTelemetry() instead\n */\n get telemetry() {\n return this.#telemetry;\n }\n\n /**\n * @deprecated use getStorage() instead\n */\n get storage() {\n return this.#storage;\n }\n\n /**\n * @deprecated use getMemory() instead\n */\n get memory() {\n return this.#memory;\n }\n\n get pubsub() {\n return this.#pubsub;\n }\n\n public getIdGenerator() {\n return this.#idGenerator;\n }\n\n /**\n * Generate a unique identifier using the configured generator or default to crypto.randomUUID()\n * @returns A unique string ID\n */\n public generateId(): string {\n if (this.#idGenerator) {\n const id = this.#idGenerator();\n if (!id) {\n const error = new MastraError({\n id: 'MASTRA_ID_GENERATOR_RETURNED_EMPTY_STRING',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'ID generator returned an empty string, which is not allowed',\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return id;\n }\n return randomUUID();\n }\n\n public setIdGenerator(idGenerator: MastraIdGenerator) {\n this.#idGenerator = idGenerator;\n }\n\n constructor(config?: Config<TAgents, TLegacyWorkflows, TWorkflows, TVectors, TTTS, TLogger, TMCPServers, TScorers>) {\n // Store server middleware with default path\n if (config?.serverMiddleware) {\n this.#serverMiddleware = config.serverMiddleware.map(m => ({\n handler: m.handler,\n path: m.path || '/api/*',\n }));\n }\n\n /*\n Server Cache\n */\n\n // This is only used internally for server handlers that require temporary persistence\n this.#serverCache = new InMemoryServerCache();\n\n /*\n Events\n */\n if (config?.pubsub) {\n this.#pubsub = config.pubsub;\n } else {\n this.#pubsub = new EventEmitterPubSub();\n }\n\n this.#events = {};\n for (const topic in config?.events ?? {}) {\n if (!Array.isArray(config?.events?.[topic])) {\n this.#events[topic] = [config?.events?.[topic] as any];\n } else {\n this.#events[topic] = config?.events?.[topic] ?? [];\n }\n }\n\n const workflowEventProcessor = new WorkflowEventProcessor({ mastra: this });\n const workflowEventCb = async (event: Event, cb?: () => Promise<void>): Promise<void> => {\n try {\n await workflowEventProcessor.process(event, cb);\n } catch (e) {\n console.error('Error processing event', e);\n }\n };\n if (this.#events.workflows) {\n this.#events.workflows.push(workflowEventCb);\n } else {\n this.#events.workflows = [workflowEventCb];\n }\n\n /*\n Logger\n */\n\n let logger: TLogger;\n if (config?.logger === false) {\n logger = noopLogger as unknown as TLogger;\n } else {\n if (config?.logger) {\n logger = config.logger;\n } else {\n const levelOnEnv =\n process.env.NODE_ENV === 'production' && process.env.MASTRA_DEV !== 'true' ? LogLevel.WARN : LogLevel.INFO;\n logger = new ConsoleLogger({ name: 'Mastra', level: levelOnEnv }) as unknown as TLogger;\n }\n }\n this.#logger = logger;\n\n this.#idGenerator = config?.idGenerator;\n\n let storage = config?.storage;\n\n if (storage) {\n storage = augmentWithInit(storage);\n }\n\n /*\n Telemetry\n */\n\n this.#telemetry = Telemetry.init(config?.telemetry);\n\n // Warn if telemetry is enabled but the instrumentation global is not set\n if (\n config?.telemetry?.enabled !== false &&\n typeof globalThis !== 'undefined' &&\n (globalThis as any).___MASTRA_TELEMETRY___ !== true\n ) {\n this.#logger?.warn(\n `Mastra telemetry is enabled, but the required instrumentation file was not loaded. ` +\n `If you are using Mastra outside of the mastra server environment, see: https://mastra.ai/en/docs/observability/tracing#tracing-outside-mastra-server-environment`,\n `If you are using a custom instrumentation file or want to disable this warning, set the globalThis.___MASTRA_TELEMETRY___ variable to true in your instrumentation file.`,\n );\n }\n\n /*\n AI Tracing\n */\n\n if (config?.observability) {\n setupAITracing(config.observability);\n }\n\n /*\n Storage\n */\n if (this.#telemetry && storage) {\n this.#storage = this.#telemetry.traceClass(storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry', 'batchTraceInsert', 'getTraces', 'getEvalsByAgentName'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n } else {\n this.#storage = storage;\n }\n\n /*\n Vectors\n */\n if (config?.vectors) {\n let vectors: Record<string, MastraVector> = {};\n Object.entries(config.vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n } else {\n vectors[key] = vector;\n }\n });\n\n this.#vectors = vectors as TVectors;\n }\n\n if (config?.mcpServers) {\n this.#mcpServers = config.mcpServers;\n\n // Set logger/telemetry/Mastra instance/id for MCP servers\n Object.entries(this.#mcpServers).forEach(([key, server]) => {\n server.setId(key);\n if (this.#telemetry) {\n server.__setTelemetry(this.#telemetry);\n }\n\n server.__registerMastra(this);\n server.__setLogger(this.getLogger());\n });\n }\n\n if (config && `memory` in config) {\n const error = new MastraError({\n id: 'MASTRA_CONSTRUCTOR_INVALID_MEMORY_CONFIG',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `\n Memory should be added to Agents, not to Mastra.\n\nInstead of:\n new Mastra({ memory: new Memory() })\n\ndo:\n new Agent({ memory: new Memory() })\n`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (config?.tts) {\n this.#tts = config.tts;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#tts?.[key]) {\n if (this.#telemetry) {\n // @ts-ignore\n this.#tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#tts[key].__setTelemetry(this.#telemetry);\n }\n }\n });\n }\n\n /*\n Agents\n */\n const agents: Record<string, Agent> = {};\n if (config?.agents) {\n Object.entries(config.agents).forEach(([key, agent]) => {\n if (agents[key]) {\n const error = new MastraError({\n id: 'MASTRA_AGENT_REGISTRATION_DUPLICATE_ID',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ID:${key} already exists`,\n details: {\n agentId: key,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n agent.__registerMastra(this);\n\n agent.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n\n agents[key] = agent;\n });\n }\n\n this.#agents = agents as TAgents;\n\n /**\n * Scorers\n */\n\n const scorers = {} as Record<string, MastraScorer<any, any, any, any>>;\n if (config?.scorers) {\n Object.entries(config.scorers).forEach(([key, scorer]) => {\n scorers[key] = scorer;\n });\n }\n this.#scorers = scorers as TScorers;\n\n /*\n Legacy Workflows\n */\n this.#legacy_workflows = {} as TLegacyWorkflows;\n\n if (config?.legacy_workflows) {\n Object.entries(config.legacy_workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#legacy_workflows[key] = workflow;\n\n const workflowSteps = Object.values(workflow.steps).filter(step => !!step.workflowId && !!step.workflow);\n if (workflowSteps.length > 0) {\n workflowSteps.forEach(step => {\n // @ts-ignore\n this.#legacy_workflows[step.workflowId] = step.workflow;\n });\n }\n });\n }\n\n this.#workflows = {} as TWorkflows;\n if (config?.workflows) {\n Object.entries(config.workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#workflows[key] = workflow;\n });\n }\n\n if (config?.server) {\n this.#server = config.server;\n }\n\n registerHook(AvailableHooks.ON_SCORER_RUN, createOnScorerHook(this));\n\n /*\n Register Mastra instance with AI tracing exporters and initialize them\n */\n if (config?.observability) {\n this.registerAITracingExporters();\n this.initAITracingExporters();\n }\n\n this.setLogger({ logger });\n }\n\n /**\n * Register this Mastra instance with AI tracing exporters that need it\n */\n private registerAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Check if exporter has __registerMastra method\n if ('__registerMastra' in exporter && typeof (exporter as any).__registerMastra === 'function') {\n (exporter as any).__registerMastra(this);\n }\n });\n });\n }\n\n /**\n * Initialize all AI tracing exporters after registration is complete\n */\n private initAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n\n allTracingInstances.forEach(tracing => {\n const config = tracing.getConfig();\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Initialize exporter if it has an init method\n if ('init' in exporter && typeof exporter.init === 'function') {\n try {\n exporter.init(config);\n } catch (error) {\n this.#logger?.warn('Failed to initialize AI tracing exporter', {\n exporterName: exporter.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n });\n });\n }\n\n public getAgent<TAgentName extends keyof TAgents>(name: TAgentName): TAgents[TAgentName] {\n const agent = this.#agents?.[name];\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ${String(name)} not found`,\n details: {\n status: 404,\n agentName: String(name),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#agents[name];\n }\n\n public getAgentById(id: string): Agent {\n let agent = Object.values(this.#agents).find(a => a.id === id);\n\n if (!agent) {\n try {\n agent = this.getAgent(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_AGENT_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with id ${String(id)} not found`,\n details: {\n status: 404,\n agentId: String(id),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return agent;\n }\n\n public getAgents() {\n return this.#agents;\n }\n\n public getVector<TVectorName extends keyof TVectors>(name: TVectorName): TVectors[TVectorName] {\n const vector = this.#vectors?.[name];\n if (!vector) {\n const error = new MastraError({\n id: 'MASTRA_GET_VECTOR_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Vector with name ${String(name)} not found`,\n details: {\n status: 404,\n vectorName: String(name),\n vectors: Object.keys(this.#vectors ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return vector;\n }\n\n public getVectors() {\n return this.#vectors;\n }\n\n public getDeployer() {\n return this.#deployer;\n }\n\n public legacy_getWorkflow<TWorkflowId extends keyof TLegacyWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TLegacyWorkflows[TWorkflowId] {\n const workflow = this.#legacy_workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_LEGACY_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#legacy_workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TLegacyWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflow<TWorkflowId extends keyof TWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TWorkflows[TWorkflowId] {\n const workflow = this.#workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n __registerInternalWorkflow(workflow: Workflow) {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n storage: this.storage,\n });\n this.#internalMastraWorkflows[workflow.id] = workflow;\n }\n\n __hasInternalWorkflow(id: string): boolean {\n return Object.values(this.#internalMastraWorkflows).some(workflow => workflow.id === id);\n }\n\n __getInternalWorkflow(id: string): Workflow {\n const workflow = Object.values(this.#internalMastraWorkflows).find(a => a.id === id);\n if (!workflow) {\n throw new MastraError({\n id: 'MASTRA_GET_INTERNAL_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n },\n });\n }\n\n return workflow;\n }\n\n public getWorkflowById(id: string): Workflow {\n let workflow = Object.values(this.#workflows).find(a => a.id === id);\n\n if (!workflow) {\n try {\n workflow = this.getWorkflow(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return workflow;\n }\n\n public legacy_getWorkflows(props: { serialized?: boolean } = {}): Record<string, LegacyWorkflow> {\n if (props.serialized) {\n return Object.entries(this.#legacy_workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#legacy_workflows;\n }\n\n public getScorers() {\n return this.#scorers;\n }\n\n public getScorer<TScorerKey extends keyof TScorers>(key: TScorerKey): TScorers[TScorerKey] {\n const scorer = this.#scorers?.[key];\n if (!scorer) {\n const error = new MastraError({\n id: 'MASTRA_GET_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ${String(key)} not found`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return scorer;\n }\n\n public getScorerByName(name: string): MastraScorer<any, any, any, any> {\n for (const [_key, value] of Object.entries(this.#scorers ?? {})) {\n if (value.name === name) {\n return value;\n }\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_SCORER_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with name ${String(name)} not found`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n public getWorkflows(props: { serialized?: boolean } = {}): Record<string, Workflow> {\n if (props.serialized) {\n return Object.entries(this.#workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#workflows;\n }\n\n public setStorage(storage: MastraStorage) {\n this.#storage = augmentWithInit(storage);\n }\n\n public setLogger({ logger }: { logger: TLogger }) {\n this.#logger = logger;\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n this.#agents?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#memory) {\n this.#memory.__setLogger(this.#logger);\n }\n\n if (this.#deployer) {\n this.#deployer.__setLogger(this.#logger);\n }\n\n if (this.#tts) {\n Object.keys(this.#tts).forEach(key => {\n this.#tts?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#storage) {\n this.#storage.__setLogger(this.#logger);\n }\n\n if (this.#vectors) {\n Object.keys(this.#vectors).forEach(key => {\n this.#vectors?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#mcpServers) {\n Object.keys(this.#mcpServers).forEach(key => {\n this.#mcpServers?.[key]?.__setLogger(this.#logger);\n });\n }\n\n // Set logger for AI tracing instances\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(instance => {\n instance.__setLogger(this.#logger);\n });\n }\n\n public setTelemetry(telemetry: OtelConfig) {\n this.#telemetry = Telemetry.init(telemetry);\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n if (this.#telemetry) {\n this.#agents?.[key]?.__setTelemetry(this.#telemetry);\n }\n });\n }\n\n if (this.#memory) {\n this.#memory = this.#telemetry.traceClass(this.#memory, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#memory.__setTelemetry(this.#telemetry);\n }\n\n if (this.#deployer) {\n this.#deployer = this.#telemetry.traceClass(this.#deployer, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#deployer.__setTelemetry(this.#telemetry);\n }\n\n if (this.#tts) {\n let tts = {} as Record<string, MastraTTS>;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#telemetry) {\n tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n tts[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#tts = tts as TTTS;\n }\n\n if (this.#storage) {\n this.#storage = this.#telemetry.traceClass(this.#storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n }\n\n if (this.#vectors) {\n let vectors = {} as Record<string, MastraVector>;\n Object.entries(this.#vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#vectors = vectors as TVectors;\n }\n }\n\n public getTTS() {\n return this.#tts;\n }\n\n public getLogger() {\n return this.#logger;\n }\n\n public getTelemetry() {\n return this.#telemetry;\n }\n\n public getMemory() {\n return this.#memory;\n }\n\n public getStorage() {\n return this.#storage;\n }\n\n public getServerMiddleware() {\n return this.#serverMiddleware;\n }\n\n public getServerCache() {\n return this.#serverCache;\n }\n\n public setServerMiddleware(serverMiddleware: Middleware | Middleware[]) {\n if (typeof serverMiddleware === 'function') {\n this.#serverMiddleware = [\n {\n handler: serverMiddleware,\n path: '/api/*',\n },\n ];\n return;\n }\n\n if (!Array.isArray(serverMiddleware)) {\n const error = new MastraError({\n id: 'MASTRA_SET_SERVER_MIDDLEWARE_INVALID_TYPE',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Invalid middleware: expected a function or array, received ${typeof serverMiddleware}`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n this.#serverMiddleware = serverMiddleware.map(m => {\n if (typeof m === 'function') {\n return {\n handler: m,\n path: '/api/*',\n };\n }\n return {\n handler: m.handler,\n path: m.path || '/api/*',\n };\n });\n }\n\n public getServer() {\n return this.#server;\n }\n\n public getBundlerConfig() {\n return this.#bundler;\n }\n\n public async getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n runId: string;\n transportId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger?.getLogsByRunId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not configured or does not support getLogsByRunId operation',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return await this.#logger.getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n });\n }\n\n public async getLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not set',\n details: {\n transportId,\n },\n });\n throw error;\n }\n\n return await this.#logger.getLogs(transportId, params);\n }\n\n /**\n * Get all registered MCP server instances.\n * @returns A record of MCP server ID to MCPServerBase instance, or undefined if none are registered.\n */\n public getMCPServers(): Record<string, MCPServerBase> | undefined {\n return this.#mcpServers;\n }\n\n /**\n * Get a specific MCP server instance.\n * If a version is provided, it attempts to find the server with that exact logical ID and version.\n * If no version is provided, it returns the server with the specified logical ID that has the most recent releaseDate.\n * The logical ID should match the `id` property of the MCPServer instance (typically set via MCPServerConfig.id).\n * @param serverId - The logical ID of the MCP server to retrieve.\n * @param version - Optional specific version of the MCP server to retrieve.\n * @returns The MCP server instance, or undefined if not found or if the specific version is not found.\n */\n public getMCPServer(serverId: string, version?: string): MCPServerBase | undefined {\n if (!this.#mcpServers) {\n return undefined;\n }\n\n const allRegisteredServers = Object.values(this.#mcpServers || {});\n\n const matchingLogicalIdServers = allRegisteredServers.filter(server => server.id === serverId);\n\n if (matchingLogicalIdServers.length === 0) {\n this.#logger?.debug(`No MCP servers found with logical ID: ${serverId}`);\n return undefined;\n }\n\n if (version) {\n const specificVersionServer = matchingLogicalIdServers.find(server => server.version === version);\n if (!specificVersionServer) {\n this.#logger?.debug(`MCP server with logical ID '${serverId}' found, but not version '${version}'.`);\n }\n return specificVersionServer;\n } else {\n // No version specified, find the one with the most recent releaseDate\n if (matchingLogicalIdServers.length === 1) {\n return matchingLogicalIdServers[0];\n }\n\n matchingLogicalIdServers.sort((a, b) => {\n // Ensure releaseDate exists and is a string before creating a Date object\n const dateAVal = a.releaseDate && typeof a.releaseDate === 'string' ? new Date(a.releaseDate).getTime() : NaN;\n const dateBVal = b.releaseDate && typeof b.releaseDate === 'string' ? new Date(b.releaseDate).getTime() : NaN;\n\n if (isNaN(dateAVal) && isNaN(dateBVal)) return 0;\n if (isNaN(dateAVal)) return 1; // Treat invalid/missing dates as older\n if (isNaN(dateBVal)) return -1; // Treat invalid/missing dates as older\n\n return dateBVal - dateAVal; // Sorts in descending order of time (latest first)\n });\n\n // After sorting, the first element should be the latest if its date is valid\n if (matchingLogicalIdServers.length > 0) {\n const latestServer = matchingLogicalIdServers[0];\n if (\n latestServer &&\n latestServer.releaseDate &&\n typeof latestServer.releaseDate === 'string' &&\n !isNaN(new Date(latestServer.releaseDate).getTime())\n ) {\n return latestServer;\n }\n }\n this.#logger?.warn(\n `Could not determine the latest server for logical ID '${serverId}' due to invalid or missing release dates, or no servers left after filtering.`,\n );\n return undefined;\n }\n }\n\n public async addTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.subscribe(topic, listener);\n }\n\n public async removeTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n\n public async startEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.subscribe(topic, listener);\n }\n }\n }\n\n public async stopEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n }\n\n await this.#pubsub.flush();\n }\n\n /**\n * Shutdown Mastra and clean up all resources\n */\n async shutdown(): Promise<void> {\n // Shutdown AI tracing registry and all instances\n await shutdownAITracingRegistry();\n await this.stopEventEngine();\n\n this.#logger?.info('Mastra shutdown completed');\n }\n\n // This method is only used internally for server hnadlers that require temporary persistence\n public get serverCache() {\n return this.#serverCache;\n }\n}\n","import EventEmitter from 'events';\nimport { PubSub } from './pubsub';\nimport type { Event } from './types';\n\nexport class EventEmitterPubSub extends PubSub {\n private emitter: EventEmitter;\n\n constructor() {\n super();\n this.emitter = new EventEmitter();\n }\n\n async publish(topic: string, event: Omit<Event, 'id' | 'createdAt'>): Promise<void> {\n const id = crypto.randomUUID();\n const createdAt = new Date();\n this.emitter.emit(topic, {\n ...event,\n id,\n createdAt,\n });\n }\n\n async subscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.on(topic, cb);\n }\n\n async unsubscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.off(topic, cb);\n }\n\n async flush(): Promise<void> {\n // no-op\n }\n}\n","import type { Mastra } from '..';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport { saveScorePayloadSchema } from '../scores';\nimport type { ScoringHookInput } from '../scores/types';\nimport type { MastraStorage } from '../storage';\n\nexport function createOnScorerHook(mastra: Mastra) {\n return async (hookData: ScoringHookInput) => {\n const storage = mastra.getStorage();\n\n if (!storage) {\n mastra.getLogger()?.warn('Storage not found, skipping score validation and saving');\n return;\n }\n\n const entityId = hookData.entity.id;\n const entityType = hookData.entityType;\n const scorer = hookData.scorer;\n try {\n const scorerToUse = await findScorer(mastra, entityId, entityType, scorer.name);\n\n if (!scorerToUse) {\n throw new MastraError({\n id: 'MASTRA_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ID ${hookData.scorer.id} not found`,\n });\n }\n\n let input = hookData.input;\n let output = hookData.output;\n\n const { structuredOutput, ...rest } = hookData;\n\n const runResult = await scorerToUse.scorer.run({\n ...rest,\n input,\n output,\n });\n\n const payload = {\n ...rest,\n ...runResult,\n entityId,\n scorerId: hookData.scorer.name,\n metadata: {\n structuredOutput: !!structuredOutput,\n },\n };\n\n await validateAndSaveScore(storage, payload);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_HOOK',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n details: {\n scorerId: scorer.id,\n entityId,\n entityType,\n },\n },\n error,\n );\n\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n };\n}\n\nexport async function validateAndSaveScore(storage: MastraStorage, payload: unknown) {\n const payloadToSave = saveScorePayloadSchema.parse(payload);\n await storage?.saveScore(payloadToSave);\n}\n\nasync function findScorer(mastra: Mastra, entityId: string, entityType: string, scorerName: string) {\n let scorerToUse;\n if (entityType === 'AGENT') {\n const scorers = await mastra.getAgentById(entityId).getScorers();\n for (const [_, scorer] of Object.entries(scorers)) {\n if (scorer.scorer.name === scorerName) {\n scorerToUse = scorer;\n break;\n }\n }\n } else if (entityType === 'WORKFLOW') {\n const scorers = await mastra.getWorkflowById(entityId).getScorers();\n for (const [_, scorer] of Object.entries(scorers)) {\n if (scorer.scorer.name === scorerName) {\n scorerToUse = scorer;\n break;\n }\n }\n }\n\n // Fallback to mastra-registered scorer\n if (!scorerToUse) {\n const mastraRegisteredScorer = mastra.getScorerByName(scorerName);\n scorerToUse = mastraRegisteredScorer ? { scorer: mastraRegisteredScorer } : undefined;\n }\n\n return scorerToUse;\n}\n"]}