@mastra/core 0.18.1-alpha.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -0
- package/dist/agent/agent.d.ts +19 -9
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +11 -11
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -2
- package/dist/agent/input-processor/index.cjs +6 -6
- package/dist/agent/input-processor/index.js +1 -1
- package/dist/agent/types.d.ts +13 -8
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/ai-tracing/exporters/default.d.ts +2 -2
- package/dist/ai-tracing/exporters/default.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +32 -32
- package/dist/ai-tracing/index.js +1 -1
- package/dist/ai-tracing/types.d.ts +2 -2
- package/dist/ai-tracing/types.d.ts.map +1 -1
- package/dist/{chunk-ITD7IHN5.js → chunk-2DGWSOVQ.js} +23 -5
- package/dist/chunk-2DGWSOVQ.js.map +1 -0
- package/dist/{chunk-4PK4GBYZ.cjs → chunk-2GHLV754.cjs} +5 -4
- package/dist/chunk-2GHLV754.cjs.map +1 -0
- package/dist/{chunk-LL2X7QT7.js → chunk-3WFH6YRI.js} +4 -4
- package/dist/{chunk-LL2X7QT7.js.map → chunk-3WFH6YRI.js.map} +1 -1
- package/dist/chunk-45CV4JYJ.cjs +4 -0
- package/dist/{chunk-VBPPPQO3.cjs.map → chunk-45CV4JYJ.cjs.map} +1 -1
- package/dist/{chunk-SEZBEL3U.js → chunk-4BEHJSL6.js} +4 -4
- package/dist/{chunk-SEZBEL3U.js.map → chunk-4BEHJSL6.js.map} +1 -1
- package/dist/chunk-4LSFAAZW.js +3 -0
- package/dist/{chunk-CE73R5W7.js.map → chunk-4LSFAAZW.js.map} +1 -1
- package/dist/{chunk-XUAWHRUO.cjs → chunk-4R2TBRS7.cjs} +37 -112
- package/dist/chunk-4R2TBRS7.cjs.map +1 -0
- package/dist/{chunk-ITBUHG4U.cjs → chunk-4VNAMG7K.cjs} +6 -6
- package/dist/{chunk-ITBUHG4U.cjs.map → chunk-4VNAMG7K.cjs.map} +1 -1
- package/dist/{chunk-B4REUTZB.js → chunk-5BQOHHCI.js} +5 -5
- package/dist/{chunk-B4REUTZB.js.map → chunk-5BQOHHCI.js.map} +1 -1
- package/dist/{chunk-FXLZYRV7.js → chunk-5HCVPQTD.js} +3 -3
- package/dist/{chunk-FXLZYRV7.js.map → chunk-5HCVPQTD.js.map} +1 -1
- package/dist/chunk-5M6ZTQJN.js +1374 -0
- package/dist/chunk-5M6ZTQJN.js.map +1 -0
- package/dist/{chunk-SW7WPHZ2.cjs → chunk-7E4ESNZS.cjs} +5 -5
- package/dist/{chunk-SW7WPHZ2.cjs.map → chunk-7E4ESNZS.cjs.map} +1 -1
- package/dist/{chunk-NTS6B2I2.cjs → chunk-A4RAEU6X.cjs} +2 -2
- package/dist/{chunk-NTS6B2I2.cjs.map → chunk-A4RAEU6X.cjs.map} +1 -1
- package/dist/{chunk-QUB6MWXZ.cjs → chunk-BCWRUNMS.cjs} +38 -37
- package/dist/chunk-BCWRUNMS.cjs.map +1 -0
- package/dist/{chunk-245ANI3P.js → chunk-BUY5X7DT.js} +4 -4
- package/dist/{chunk-245ANI3P.js.map → chunk-BUY5X7DT.js.map} +1 -1
- package/dist/{chunk-6ZVNL435.js → chunk-COC64XPP.js} +9 -8
- package/dist/chunk-COC64XPP.js.map +1 -0
- package/dist/{chunk-6X4FZVGT.cjs → chunk-CQ73JM2N.cjs} +10 -10
- package/dist/{chunk-6X4FZVGT.cjs.map → chunk-CQ73JM2N.cjs.map} +1 -1
- package/dist/{chunk-7UEBC5KM.cjs → chunk-DRVSEV5Y.cjs} +25 -65
- package/dist/chunk-DRVSEV5Y.cjs.map +1 -0
- package/dist/{chunk-2TQHRYRK.cjs → chunk-EPMJYNEK.cjs} +4 -4
- package/dist/{chunk-2TQHRYRK.cjs.map → chunk-EPMJYNEK.cjs.map} +1 -1
- package/dist/{chunk-TKFLL33F.cjs → chunk-F6EJEELE.cjs} +9 -9
- package/dist/{chunk-TKFLL33F.cjs.map → chunk-F6EJEELE.cjs.map} +1 -1
- package/dist/{chunk-4DNSY645.js → chunk-FV3SA5TI.js} +3 -3
- package/dist/{chunk-4DNSY645.js.map → chunk-FV3SA5TI.js.map} +1 -1
- package/dist/{chunk-EJ2FU45N.js → chunk-FV4QVXO4.js} +2 -2
- package/dist/{chunk-EJ2FU45N.js.map → chunk-FV4QVXO4.js.map} +1 -1
- package/dist/{chunk-CKZK2EPZ.cjs → chunk-HNBU4PI7.cjs} +4 -4
- package/dist/{chunk-CKZK2EPZ.cjs.map → chunk-HNBU4PI7.cjs.map} +1 -1
- package/dist/{chunk-O6PQYYT6.cjs → chunk-HQPFM22N.cjs} +63 -45
- package/dist/chunk-HQPFM22N.cjs.map +1 -0
- package/dist/{chunk-36DRWGP4.js → chunk-IAXAPVOP.js} +4 -4
- package/dist/{chunk-36DRWGP4.js.map → chunk-IAXAPVOP.js.map} +1 -1
- package/dist/{chunk-5ZMC3NEO.js → chunk-JKLLXBOY.js} +46 -39
- package/dist/chunk-JKLLXBOY.js.map +1 -0
- package/dist/{chunk-WVRSMHE5.cjs → chunk-K4AYIXVH.cjs} +4 -4
- package/dist/{chunk-WVRSMHE5.cjs.map → chunk-K4AYIXVH.cjs.map} +1 -1
- package/dist/{chunk-SALFMUAY.cjs → chunk-LZBVDMVQ.cjs} +19 -19
- package/dist/{chunk-SALFMUAY.cjs.map → chunk-LZBVDMVQ.cjs.map} +1 -1
- package/dist/{chunk-RPFJBB5X.js → chunk-N4PK4MOG.js} +4 -4
- package/dist/{chunk-RPFJBB5X.js.map → chunk-N4PK4MOG.js.map} +1 -1
- package/dist/{chunk-QBTRGHUF.cjs → chunk-NHJVMZIL.cjs} +19 -19
- package/dist/{chunk-QBTRGHUF.cjs.map → chunk-NHJVMZIL.cjs.map} +1 -1
- package/dist/{chunk-BJZWMVNW.js → chunk-OBIF7QD5.js} +3 -3
- package/dist/{chunk-BJZWMVNW.js.map → chunk-OBIF7QD5.js.map} +1 -1
- package/dist/{chunk-VZLNVGYM.cjs → chunk-PG6ZNDSR.cjs} +21 -21
- package/dist/{chunk-VZLNVGYM.cjs.map → chunk-PG6ZNDSR.cjs.map} +1 -1
- package/dist/{chunk-XWJWU5OM.js → chunk-PJ6HF3KW.js} +16 -56
- package/dist/chunk-PJ6HF3KW.js.map +1 -0
- package/dist/{chunk-NG2XDPDY.js → chunk-RAXBZZKS.js} +4 -3
- package/dist/chunk-RAXBZZKS.js.map +1 -0
- package/dist/chunk-RFGQ3EQV.js +3 -0
- package/dist/chunk-RFGQ3EQV.js.map +1 -0
- package/dist/{chunk-73S2WYSD.cjs → chunk-RNIY63FP.cjs} +85 -78
- package/dist/chunk-RNIY63FP.cjs.map +1 -0
- package/dist/{chunk-ROU7YJLG.js → chunk-RYFQKXXS.js} +3 -3
- package/dist/{chunk-ROU7YJLG.js.map → chunk-RYFQKXXS.js.map} +1 -1
- package/dist/{chunk-C73WLCY3.cjs → chunk-S7UXT3V4.cjs} +21 -3
- package/dist/chunk-S7UXT3V4.cjs.map +1 -0
- package/dist/{chunk-R5GESRGB.js → chunk-SJMKDSRF.js} +37 -112
- package/dist/chunk-SJMKDSRF.js.map +1 -0
- package/dist/{chunk-YWXSGDDO.cjs → chunk-SQQMX4VC.cjs} +6 -6
- package/dist/{chunk-YWXSGDDO.cjs.map → chunk-SQQMX4VC.cjs.map} +1 -1
- package/dist/chunk-TCHOIK53.cjs +4 -0
- package/dist/chunk-TCHOIK53.cjs.map +1 -0
- package/dist/chunk-TIBULEK6.cjs +1379 -0
- package/dist/chunk-TIBULEK6.cjs.map +1 -0
- package/dist/{chunk-WECJNCGT.cjs → chunk-UTEH2LCJ.cjs} +19 -19
- package/dist/{chunk-WECJNCGT.cjs.map → chunk-UTEH2LCJ.cjs.map} +1 -1
- package/dist/{chunk-VGU5ZYYG.js → chunk-VWO3JJXC.js} +4 -4
- package/dist/{chunk-VGU5ZYYG.js.map → chunk-VWO3JJXC.js.map} +1 -1
- package/dist/{chunk-MCOVMKIS.js → chunk-WHFNGECY.js} +21 -4
- package/dist/chunk-WHFNGECY.js.map +1 -0
- package/dist/{chunk-NTXNE4YR.js → chunk-XG3SFWOH.js} +3 -3
- package/dist/{chunk-NTXNE4YR.js.map → chunk-XG3SFWOH.js.map} +1 -1
- package/dist/error/index.cjs +5 -5
- package/dist/error/index.d.ts.map +1 -1
- package/dist/error/index.js +1 -1
- package/dist/error/utils.d.ts +8 -0
- package/dist/error/utils.d.ts.map +1 -0
- package/dist/eval/index.cjs +3 -3
- package/dist/eval/index.js +1 -1
- package/dist/index.cjs +84 -67
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +18 -17
- package/dist/index.js.map +1 -1
- package/dist/integration/index.cjs +3 -3
- package/dist/integration/index.js +1 -1
- package/dist/llm/index.cjs +20 -0
- package/dist/llm/index.d.ts +3 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -1
- package/dist/llm/model/gateways/base.d.ts +42 -0
- package/dist/llm/model/gateways/base.d.ts.map +1 -0
- package/dist/llm/model/gateways/index.d.ts +3 -0
- package/dist/llm/model/gateways/index.d.ts.map +1 -0
- package/dist/llm/model/gateways/models-dev.d.ts +11 -0
- package/dist/llm/model/gateways/models-dev.d.ts.map +1 -0
- package/dist/llm/model/index.d.ts +2 -0
- package/dist/llm/model/index.d.ts.map +1 -1
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/openai-compatible.d.ts +32 -0
- package/dist/llm/model/openai-compatible.d.ts.map +1 -0
- package/dist/llm/model/provider-registry.generated.d.ts +462 -0
- package/dist/llm/model/provider-registry.generated.d.ts.map +1 -0
- package/dist/llm/model/shared.types.d.ts +8 -0
- package/dist/llm/model/shared.types.d.ts.map +1 -1
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/network/index.d.ts.map +1 -1
- package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
- package/dist/loop/test-utils/generateText.d.ts.map +1 -1
- package/dist/loop/test-utils/options.d.ts.map +1 -1
- package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
- package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
- package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
- package/dist/loop/test-utils/tools.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +99 -0
- package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +66 -0
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +33 -0
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts +99 -0
- package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
- package/dist/loop/workflows/run-state.d.ts +5 -0
- package/dist/loop/workflows/run-state.d.ts.map +1 -1
- package/dist/loop/workflows/schema.d.ts +38 -0
- package/dist/loop/workflows/schema.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/network/vNext/index.cjs +30 -30
- package/dist/network/vNext/index.cjs.map +1 -1
- package/dist/network/vNext/index.js +3 -3
- package/dist/network/vNext/index.js.map +1 -1
- package/dist/processors/index.cjs +10 -10
- package/dist/processors/index.js +1 -1
- package/dist/processors/processors/language-detector.d.ts.map +1 -1
- package/dist/processors/processors/moderation.d.ts.map +1 -1
- package/dist/processors/processors/pii-detector.d.ts.map +1 -1
- package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
- package/dist/processors/processors/structured-output.d.ts.map +1 -1
- package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/index.cjs +9 -9
- package/dist/scores/index.js +2 -2
- package/dist/scores/scoreTraces/index.cjs +57 -68
- package/dist/scores/scoreTraces/index.cjs.map +1 -1
- package/dist/scores/scoreTraces/index.js +48 -59
- package/dist/scores/scoreTraces/index.js.map +1 -1
- package/dist/scores/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
- package/dist/scores/scoreTraces/utils.d.ts +4 -8
- package/dist/scores/scoreTraces/utils.d.ts.map +1 -1
- package/dist/scores/types.d.ts +8 -4
- package/dist/scores/types.d.ts.map +1 -1
- package/dist/server/index.cjs +7 -7
- package/dist/server/index.js +2 -2
- package/dist/storage/base.d.ts +14 -5
- package/dist/storage/base.d.ts.map +1 -1
- package/dist/storage/constants.d.ts.map +1 -1
- package/dist/storage/domains/observability/base.d.ts +5 -5
- package/dist/storage/domains/observability/base.d.ts.map +1 -1
- package/dist/storage/domains/observability/inmemory.d.ts +7 -7
- package/dist/storage/domains/observability/inmemory.d.ts.map +1 -1
- package/dist/storage/domains/scores/base.d.ts +8 -0
- package/dist/storage/domains/scores/base.d.ts.map +1 -1
- package/dist/storage/domains/scores/inmemory.d.ts +8 -0
- package/dist/storage/domains/scores/inmemory.d.ts.map +1 -1
- package/dist/storage/index.cjs +94 -64
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.js +59 -29
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/mock.d.ts +9 -0
- package/dist/storage/mock.d.ts.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/stream/MastraWorkflowStream.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/input.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/output.d.ts +7 -0
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +4 -4
- package/dist/stream/index.js +1 -1
- package/dist/stream/types.d.ts +12 -12
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/telemetry/index.cjs +7 -7
- package/dist/telemetry/index.js +1 -1
- package/dist/test-utils/llm-mock.cjs +2 -2
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tools/index.cjs +4 -4
- package/dist/tools/index.js +1 -1
- package/dist/tools/is-vercel-tool.cjs +2 -2
- package/dist/tools/is-vercel-tool.js +1 -1
- package/dist/tools/tool.d.ts +2 -4
- package/dist/tools/tool.d.ts.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tts/index.cjs +2 -2
- package/dist/tts/index.js +1 -1
- package/dist/{types.d.ts → types/dynamic-argument.d.ts} +3 -3
- package/dist/types/dynamic-argument.d.ts.map +1 -0
- package/dist/types/index.cjs +4 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils.cjs +17 -17
- package/dist/utils.js +1 -1
- package/dist/vector/index.cjs +4 -4
- package/dist/vector/index.js +1 -1
- package/dist/voice/index.cjs +4 -4
- package/dist/voice/index.js +1 -1
- package/dist/workflows/default.d.ts.map +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/index.cjs +12 -12
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/legacy/index.cjs +22 -22
- package/dist/workflows/legacy/index.js +1 -1
- package/dist/workflows/types.d.ts +11 -1
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/workflow.d.ts +6 -3
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +4 -4
- package/types.d.ts +1 -0
- package/dist/chunk-4PK4GBYZ.cjs.map +0 -1
- package/dist/chunk-5ZMC3NEO.js.map +0 -1
- package/dist/chunk-6ZVNL435.js.map +0 -1
- package/dist/chunk-73S2WYSD.cjs.map +0 -1
- package/dist/chunk-7UEBC5KM.cjs.map +0 -1
- package/dist/chunk-C73WLCY3.cjs.map +0 -1
- package/dist/chunk-CE73R5W7.js +0 -3
- package/dist/chunk-ITD7IHN5.js.map +0 -1
- package/dist/chunk-MCOVMKIS.js.map +0 -1
- package/dist/chunk-NG2XDPDY.js.map +0 -1
- package/dist/chunk-O6PQYYT6.cjs.map +0 -1
- package/dist/chunk-QUB6MWXZ.cjs.map +0 -1
- package/dist/chunk-R5GESRGB.js.map +0 -1
- package/dist/chunk-VBPPPQO3.cjs +0 -4
- package/dist/chunk-XUAWHRUO.cjs.map +0 -1
- package/dist/chunk-XWJWU5OM.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/model/provider-registry.generated.ts","../src/llm/model/openai-compatible.ts"],"names":["providerConfig","buffer"],"mappings":";;;AAQO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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,aAAA;AAAA,MACA,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;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;AAAA,GACV;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,oBAAA;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;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,aAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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,mBAAA;AAAA,MACA,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,aAAA;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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,oBAAA;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;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA,GACV;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;AAAA;AAEZ;AAioBO,SAAS,kBAAkB,UAAA,EAAgD;AAChF,EAAA,OAAO,kBAAkB,UAA4C,CAAA;AACvE;AAmCO,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;;;ACrlDA,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,QAAQ,YAAA,EAAc;AACxB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA;AAAA,IACxC;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,YAAA,CACP,MAAA,EACA,YAAA,EACA,aAAA,EACA,QAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB,kBAAA;AAAA,IAChB,GAAG;AAAA,GACL;AAEA,EAAA,IAAI,MAAA,EAAQ;AAEV,IAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,MAAA;AAAA,IACzB,CAAA,MAAO;AAEL,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAA,IAC7C;AAAA,EACF;AAGA,EAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,IAAA,OAAA,CAAQ,mBAAmB,CAAA,GAAI,YAAA;AAAA,EACjC;AAEA,EAAA,OAAO,OAAA;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,GAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;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;AAAA,MAClB,CAAA,MAAO;AAGL,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,MAAMA,eAAAA,GAAiB,kBAAkB,QAAQ,CAAA;AACjD,UAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,2BAAA,CAA6B,CAAA;AAAA,UAC5E;AAEA,UAAA,YAAA,GAAe;AAAA,YACb,EAAA,EAAI,OAAA;AAAA,YACJ,KAAKA,eAAAA,CAAe,GAAA;AAAA,YACpB,MAAA,EAAQ,aAAA,CAAc,EAAE,QAAA,EAAU;AAAA,WACpC;AAEA,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;AAGf,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,MAAA,CAAO,EAAE,CAAA;AAEzC,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,QAAA,EAAU;AAElC,QAAA,MAAMA,eAAAA,GAAiB,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AACxD,QAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,QAAQ,CAAA,uBAAA,CAAyB,CAAA;AAAA,QAC/E;AACA,QAAA,YAAA,CAAa,MAAMA,eAAAA,CAAe,GAAA;AAClC,QAAA,YAAA,CAAa,KAAK,MAAA,CAAO,OAAA;AACzB,QAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,mBAAA;AAAA,MACrC;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,IAAI,CAAC,aAAa,GAAA,EAAK;AACrB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAGA,IAAA,MAAM,iBAAiB,IAAA,CAAK,QAAA,KAAa,sBAAsB,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA;AAGlG,IAAA,IAAA,CAAK,UAAU,YAAA,CAAa,EAAA;AAC5B,IAAA,IAAA,CAAK,MAAM,YAAA,CAAa,GAAA;AACxB,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,aAAa,YAAA,CAAa,MAAA,EAAQ,gBAAgB,YAAA,EAAc,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAAA,EACpH;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,EAEQ,cAAA,GAAuB;AAE7B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,aAAa,mBAAA,EAAqB;AAEzD,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;AACD,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,iBAAgB,GAAI,OAAA;AAGvD,IAAA,MAAM,IAAA,GAAY;AAAA,MAChB,QAAA,EAAU,IAAA,CAAK,uBAAA,CAAwB,MAAM,CAAA;AAAA,MAC7C,OAAO,IAAA,CAAK,OAAA;AAAA,MACZ,MAAA,EAAQ,IAAA;AAAA,MACR,GAAG;AAAA,KACL;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AACnD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AACb,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,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,MACd;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,cAAA,EAAgB,IAAA,KAAS,MAAA,EAAQ;AAC3C,MAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,QACrB,IAAA,EAAM,aAAA;AAAA,QACN,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,UAAA;AAAA,UACN,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,QAAQ,cAAA,CAAe;AAAA;AACjC,OACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,MAAA,EAAQ,MAAA;AAAA,MACR,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,OAAA,CAAQ;AAAA,KAClB;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,KAAK,SAAS,CAAA;AAEhD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAGlC,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,EAAK;AACtD,QAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA;AACtD,QAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,oCAAA,EAAuC,IAAA,CAAK,QAAQ,CAAA,qBAAA,EAAwB,eAAe,YAAY,CAAA,kDAAA;AAAA,WACzG;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9E;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAwE;AACpG,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACtD,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AAErB,IAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,IAAA,MAAM,MAAA,GAAS,IAAI,cAAA,CAA0C;AAAA,MAC3D,MAAM,MAAM,UAAA,EAAY;AACtB,QAAA,IAAI;AAEF,UAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,YACjB,IAAA,EAAM,cAAA;AAAA,YACN,UAAU;AAAC,WACZ,CAAA;AAED,UAAA,OAAO,IAAA,EAAM;AACX,YAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAE1C,YAAA,IAAI,IAAA,EAAM;AAER,cAAA,KAAA,MAAW,CAAC,CAAA,EAAG,QAAQ,CAAA,IAAK,eAAA,EAAiB;AAC3C,gBAAA,IAAI,CAAC,SAAS,IAAA,IAAQ,QAAA,CAAS,MAAM,QAAA,CAAS,IAAA,IAAQ,SAAS,IAAA,EAAM;AACnE,kBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,oBACjB,IAAA,EAAM,WAAA;AAAA,oBACN,YAAY,QAAA,CAAS,EAAA;AAAA,oBACrB,UAAU,QAAA,CAAS,IAAA;AAAA,oBACnB,KAAA,EAAO,SAAS,IAAA,IAAQ;AAAA,mBACzB,CAAA;AAAA,gBACH;AAAA,cACF;AAEA,cAAA,UAAA,CAAW,KAAA,EAAM;AACjB,cAAA;AAAA,YACF;AAEA,YAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,YAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,YAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,cAAA,IAAI,KAAK,IAAA,EAAK,KAAM,MAAM,IAAA,CAAK,IAAA,OAAW,cAAA,EAAgB;AACxD,gBAAA;AAAA,cACF;AAEA,cAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,gBAAA,IAAI;AACF,kBAAA,MAAM,OAA0B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAGxD,kBAAA,IAAI,CAAC,SAAA,IAAa,IAAA,CAAK,EAAA,EAAI;AACzB,oBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,sBACjB,IAAA,EAAM,mBAAA;AAAA,sBACN,IAAI,IAAA,CAAK,EAAA;AAAA,sBACT,OAAA,EAAS,KAAK,KAAA,IAAS,OAAA;AAAA,sBACvB,SAAA,EAAW,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,GAAU,GAAA,GAAO,IAAA,CAAK,GAAA,EAAK;AAAA,qBACpE,CAAA;AACD,oBAAA,SAAA,GAAY,IAAA;AAAA,kBACd;AAEA,kBAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,kBAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,kBAAA,IAAI,MAAA,CAAO,OAAO,OAAA,EAAS;AACzB,oBAAA,IAAI,CAAC,YAAA,EAAc;AACjB,sBAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,YAAA,EAAc,EAAA,EAAI,UAAU,CAAA;AACvD,sBAAA,YAAA,GAAe,IAAA;AAAA,oBACjB;AAEA,oBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,sBACjB,IAAA,EAAM,YAAA;AAAA,sBACN,EAAA,EAAI,QAAA;AAAA,sBACJ,KAAA,EAAO,OAAO,KAAA,CAAM;AAAA,qBACrB,CAAA;AAAA,kBACH,WAAW,YAAA,EAAc;AACvB,oBAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAI,UAAU,CAAA;AACrD,oBAAA,YAAA,GAAe,KAAA;AAAA,kBACjB;AAGA,kBAAA,IAAI,MAAA,CAAO,OAAO,UAAA,EAAY;AAC5B,oBAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY;AAC9C,sBAAA,MAAM,QAAQ,QAAA,CAAS,KAAA;AAEvB,sBAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,EAAG;AAE/B,wBAAA,IAAI,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,QAAA,EAAU,IAAA,EAAM;AAC1C,0BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,4BACjB,IAAA,EAAM,kBAAA;AAAA,4BACN,IAAI,QAAA,CAAS,EAAA;AAAA,4BACb,QAAA,EAAU,SAAS,QAAA,CAAS;AAAA,2BAC7B,CAAA;AAAA,wBACH;AAEA,wBAAA,eAAA,CAAgB,IAAI,KAAA,EAAO;AAAA,0BACzB,EAAA,EAAI,SAAS,EAAA,IAAM,EAAA;AAAA,0BACnB,IAAA,EAAM,QAAA,CAAS,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,0BACjC,IAAA,EAAM;AAAA,yBACP,CAAA;AAAA,sBACH;AAEA,sBAAA,MAAMC,OAAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAExC,sBAAA,IAAI,SAAS,EAAA,EAAI;AACf,wBAAAA,OAAAA,CAAO,KAAK,QAAA,CAAS,EAAA;AAAA,sBACvB;AAEA,sBAAA,IAAI,QAAA,CAAS,UAAU,IAAA,EAAM;AAC3B,wBAAAA,OAAAA,CAAO,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,IAAA;AAAA,sBAClC;AAEA,sBAAA,IAAI,QAAA,CAAS,UAAU,SAAA,EAAW;AAChC,wBAAAA,OAAAA,CAAO,IAAA,IAAQ,QAAA,CAAS,QAAA,CAAS,SAAA;AACjC,wBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,0BACjB,IAAA,EAAM,kBAAA;AAAA,0BACN,IAAIA,OAAAA,CAAO,EAAA;AAAA,0BACX,KAAA,EAAO,SAAS,QAAA,CAAS;AAAA,yBAC1B,CAAA;AAGD,wBAAA,IAAI;AACF,0BAAA,IAAA,CAAK,KAAA,CAAMA,QAAO,IAAI,CAAA;AACtB,0BAAA,IAAIA,OAAAA,CAAO,EAAA,IAAMA,OAAAA,CAAO,IAAA,EAAM;AAC5B,4BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,8BACjB,IAAA,EAAM,gBAAA;AAAA,8BACN,IAAIA,OAAAA,CAAO;AAAA,6BACZ,CAAA;AAED,4BAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,8BACjB,IAAA,EAAM,WAAA;AAAA,8BACN,YAAYA,OAAAA,CAAO,EAAA;AAAA,8BACnB,UAAUA,OAAAA,CAAO,IAAA;AAAA,8BACjB,OAAOA,OAAAA,CAAO;AAAA,6BACf,CAAA;AAED,4BAAA,eAAA,CAAgB,IAAI,KAAA,EAAO;AAAA,8BACzB,IAAIA,OAAAA,CAAO,EAAA;AAAA,8BACX,MAAMA,OAAAA,CAAO,IAAA;AAAA,8BACb,MAAMA,OAAAA,CAAO,IAAA;AAAA,8BACb,IAAA,EAAM;AAAA,6BACP,CAAA;AAAA,0BACH;AAAA,wBACF,CAAA,CAAA,MAAQ;AAAA,wBAER;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAGA,kBAAA,IAAI,OAAO,aAAA,EAAe;AAExB,oBAAA,eAAA,CAAgB,KAAA,EAAM;AAEtB,oBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,sBACjB,IAAA,EAAM,QAAA;AAAA,sBACN,YAAA,EAAc,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA,sBAClD,KAAA,EAAO,KAAK,KAAA,GACR;AAAA,wBACE,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,aAAA,IAAiB,CAAA;AAAA,wBACzC,YAAA,EAAc,IAAA,CAAK,KAAA,CAAM,iBAAA,IAAqB,CAAA;AAAA,wBAC9C,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,YAAA,IAAgB;AAAA,uBAC1C,GACA;AAAA,wBACE,WAAA,EAAa,CAAA;AAAA,wBACb,YAAA,EAAc,CAAA;AAAA,wBACd,WAAA,EAAa;AAAA;AACf,qBACL,CAAA;AAAA,kBACH;AAAA,gBACF,SAAS,CAAA,EAAG;AACV,kBAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAC,CAAA;AAAA,gBAC5C;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,QACxB;AAAA,MACF;AAAA,KACD,CAAA;AAED,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,SAAS,EAAE,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAE;AAAA,MACtC,QAAA,EAAU,EAAE,OAAA,EAAS,MAAA,CAAO,YAAY,QAAA,CAAS,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAE;AAAA,MACpE,UAAU;AAAC,KACb;AAAA,EACF;AACF","file":"chunk-TIBULEK6.cjs","sourcesContent":["/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\n/**\n * Provider configurations for OpenAI-compatible APIs\n */\nexport const PROVIDER_REGISTRY = {\n 'moonshotai-cn': {\n url: 'https://api.moonshot.cn/v1/chat/completions',\n apiKeyEnvVar: 'MOONSHOT_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Moonshot AI (China)',\n models: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n docUrl: 'https://platform.moonshot.cn/docs/api/chat',\n },\n lucidquery: {\n url: 'https://lucidquery.com/api/v1/chat/completions',\n apiKeyEnvVar: 'LUCIDQUERY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'LucidQuery AI',\n models: ['lucidnova-rf1-100b', 'lucidquery-nexus-coder'],\n docUrl: 'https://lucidquery.com/api/docs',\n },\n moonshotai: {\n url: 'https://api.moonshot.ai/v1/chat/completions',\n apiKeyEnvVar: 'MOONSHOT_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Moonshot AI',\n models: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n docUrl: 'https://platform.moonshot.ai/docs/api/chat',\n },\n 'zai-coding-plan': {\n url: 'https://api.z.ai/api/coding/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Z.AI Coding Plan',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/devpack/overview',\n },\n alibaba: {\n url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',\n apiKeyEnvVar: 'DASHSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Alibaba',\n models: ['qwen3-coder-plus'],\n docUrl: 'https://www.alibabacloud.com/help/en/model-studio/models',\n },\n xai: {\n url: 'https://api.x.ai/v1/chat/completions',\n apiKeyEnvVar: 'XAI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'xAI',\n models: [\n 'grok-2',\n 'grok-2-1212',\n 'grok-2-latest',\n 'grok-2-vision',\n 'grok-2-vision-1212',\n 'grok-2-vision-latest',\n 'grok-3',\n 'grok-3-fast',\n 'grok-3-fast-latest',\n 'grok-3-latest',\n 'grok-3-mini',\n 'grok-3-mini-fast',\n 'grok-3-mini-fast-latest',\n 'grok-3-mini-latest',\n 'grok-4',\n 'grok-4-fast',\n 'grok-4-fast-non-reasoning',\n 'grok-beta',\n 'grok-code-fast-1',\n 'grok-vision-beta',\n ],\n docUrl: 'https://docs.x.ai/docs/models',\n },\n nvidia: {\n url: 'https://integrate.api.nvidia.com/v1/chat/completions',\n apiKeyEnvVar: 'NVIDIA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Nvidia',\n models: [\n 'black-forest-labs/flux.1-dev',\n 'deepseek-ai/deepseek-v3.1',\n 'google/gemma-3-27b-it',\n 'microsoft/phi-4-mini-instruct',\n 'moonshotai/kimi-k2-instruct',\n 'nvidia/cosmos-nemotron-34b',\n 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n 'nvidia/nemoretriever-ocr-v1',\n 'nvidia/parakeet-tdt-0.6b-v2',\n 'openai/gpt-oss-120b',\n 'openai/whisper-large-v3',\n 'qwen/qwen3-235b-a22b',\n 'qwen/qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://docs.api.nvidia.com/nim/',\n },\n upstage: {\n url: 'https://api.upstage.ai/chat/completions',\n apiKeyEnvVar: 'UPSTAGE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Upstage',\n models: ['solar-mini', 'solar-pro2'],\n docUrl: 'https://developers.upstage.ai/docs/apis/chat',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1/chat/completions',\n apiKeyEnvVar: 'GROQ_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Groq',\n models: [\n 'deepseek-r1-distill-llama-70b',\n 'gemma2-9b-it',\n 'llama-3.1-8b-instant',\n 'llama-3.3-70b-versatile',\n 'llama-guard-3-8b',\n 'llama3-70b-8192',\n 'llama3-8b-8192',\n 'meta-llama/llama-4-maverick-17b-128e-instruct',\n 'meta-llama/llama-4-scout-17b-16e-instruct',\n 'meta-llama/llama-guard-4-12b',\n 'mistral-saba-24b',\n 'moonshotai/kimi-k2-instruct',\n 'moonshotai/kimi-k2-instruct-0905',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen-qwq-32b',\n 'qwen/qwen3-32b',\n ],\n docUrl: 'https://console.groq.com/docs/models',\n },\n 'github-copilot': {\n url: 'https://api.githubcopilot.com/chat/completions',\n apiKeyEnvVar: 'GITHUB_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'GitHub Copilot',\n models: [\n 'claude-3.5-sonnet',\n 'claude-3.7-sonnet',\n 'claude-3.7-sonnet-thought',\n 'claude-opus-4',\n 'claude-opus-41',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'gemini-2.0-flash-001',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-4o',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'grok-code-fast-1',\n 'o3',\n 'o3-mini',\n 'o4-mini',\n ],\n docUrl: 'https://docs.github.com/en/copilot',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1/chat/completions',\n apiKeyEnvVar: 'MISTRAL_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Mistral',\n models: [\n 'codestral-latest',\n 'devstral-medium-2507',\n 'devstral-small-2505',\n 'devstral-small-2507',\n 'magistral-medium-latest',\n 'magistral-small',\n 'ministral-3b-latest',\n 'ministral-8b-latest',\n 'mistral-large-latest',\n 'mistral-medium-2505',\n 'mistral-medium-2508',\n 'mistral-medium-latest',\n 'mistral-nemo',\n 'mistral-small-latest',\n 'open-mistral-7b',\n 'open-mixtral-8x22b',\n 'open-mixtral-8x7b',\n 'pixtral-12b',\n 'pixtral-large-latest',\n ],\n docUrl: 'https://docs.mistral.ai/getting-started/models/',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1/chat/completions',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Vercel AI Gateway',\n models: [\n 'amazon/nova-lite',\n 'amazon/nova-micro',\n 'amazon/nova-pro',\n 'anthropic/claude-3-5-haiku',\n 'anthropic/claude-3-haiku',\n 'anthropic/claude-3-opus',\n 'anthropic/claude-3.5-sonnet',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-4-1-opus',\n 'anthropic/claude-4-opus',\n 'anthropic/claude-4-sonnet',\n 'anthropic/claude-4.5-sonnet',\n 'cerebras/qwen3-coder',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.0-flash',\n 'google/gemini-2.0-flash-lite',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'meta/llama-3.3-70b',\n 'meta/llama-4-maverick',\n 'meta/llama-4-scout',\n 'mistral/codestral',\n 'mistral/magistral-medium',\n 'mistral/magistral-small',\n 'mistral/ministral-3b',\n 'mistral/ministral-8b',\n 'mistral/mistral-large',\n 'mistral/mistral-small',\n 'mistral/mixtral-8x22b-instruct',\n 'mistral/pixtral-12b',\n 'mistral/pixtral-large',\n 'moonshotai/kimi-k2',\n 'morph/morph-v3-fast',\n 'morph/morph-v3-large',\n 'openai/gpt-4-turbo',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o1',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'vercel/v0-1.0-md',\n 'vercel/v0-1.5-md',\n 'xai/grok-2',\n 'xai/grok-2-vision',\n 'xai/grok-3',\n 'xai/grok-3-fast',\n 'xai/grok-3-mini',\n 'xai/grok-3-mini-fast',\n 'xai/grok-4',\n 'xai/grok-4-fast',\n 'xai/grok-4-fast-non-reasoning',\n 'xai/grok-code-fast-1',\n ],\n docUrl: 'https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway',\n },\n deepseek: {\n url: 'https://api.deepseek.com/chat/completions',\n apiKeyEnvVar: 'DEEPSEEK_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'DeepSeek',\n models: ['deepseek-chat', 'deepseek-reasoner'],\n docUrl: 'https://platform.deepseek.com/api-docs/pricing',\n },\n 'alibaba-cn': {\n url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',\n apiKeyEnvVar: 'DASHSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Alibaba (China)',\n models: ['qwen3-coder-plus'],\n docUrl: 'https://www.alibabacloud.com/help/en/model-studio/models',\n },\n venice: {\n url: 'https://api.venice.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'VENICE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Venice AI',\n models: [\n 'deepseek-coder-v2-lite',\n 'deepseek-r1-671b',\n 'dolphin-2.9.2-qwen2-72b',\n 'llama-3.1-405b',\n 'llama-3.2-3b',\n 'llama-3.3-70b',\n 'mistral-31-24b',\n 'qwen-2.5-coder-32b',\n 'qwen-2.5-qwq-32b',\n 'qwen-2.5-vl',\n 'qwen3-235b',\n 'qwen3-4b',\n 'venice-uncensored',\n ],\n docUrl: 'https://docs.venice.ai',\n },\n chutes: {\n url: 'https://llm.chutes.ai/v1/chat/completions',\n apiKeyEnvVar: 'CHUTES_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Chutes',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'chutesai/Devstral-Small-2505',\n 'chutesai/Mistral-Small-3.2-24B-Instruct-2506',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-R1-0528-Qwen3-8B',\n 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'deepseek-ai/DeepSeek-V3.1-Terminus',\n 'deepseek-ai/DeepSeek-V3.1-turbo',\n 'deepseek-ai/DeepSeek-V3.1:THINKING',\n 'meituan-longcat/LongCat-Flash-Chat-FP8',\n 'moonshotai/Kimi-Dev-72B',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'moonshotai/Kimi-K2-Instruct-75k',\n 'moonshotai/Kimi-VL-A3B-Thinking',\n 'openai/gpt-oss-120b',\n 'tngtech/DeepSeek-R1T-Chimera',\n 'tngtech/DeepSeek-TNG-R1T2-Chimera',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n 'zai-org/GLM-4.5-turbo',\n ],\n docUrl: 'https://llm.chutes.ai/v1/models',\n },\n cortecs: {\n url: 'https://api.cortecs.ai/v1/chat/completions',\n apiKeyEnvVar: 'CORTECS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Cortecs',\n models: [\n 'claude-sonnet-4',\n 'deepseek-v3-0324',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-oss-120b',\n 'kimi-k2-instruct',\n 'llama-3.1-405b-instruct',\n 'nova-pro-v1',\n 'qwen3-32b',\n 'qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://api.cortecs.ai/v1/models',\n },\n 'github-models': {\n url: 'https://models.github.ai/inference/chat/completions',\n apiKeyEnvVar: 'GITHUB_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'GitHub Models',\n models: [\n 'ai21-labs/ai21-jamba-1.5-large',\n 'ai21-labs/ai21-jamba-1.5-mini',\n 'cohere/cohere-command-a',\n 'cohere/cohere-command-r',\n 'cohere/cohere-command-r-08-2024',\n 'cohere/cohere-command-r-plus',\n 'cohere/cohere-command-r-plus-08-2024',\n 'core42/jais-30b-chat',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-0528',\n 'deepseek/deepseek-v3-0324',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-90b-vision-instruct',\n 'meta/llama-3.3-70b-instruct',\n 'meta/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta/llama-4-scout-17b-16e-instruct',\n 'meta/meta-llama-3-70b-instruct',\n 'meta/meta-llama-3-8b-instruct',\n 'meta/meta-llama-3.1-405b-instruct',\n 'meta/meta-llama-3.1-70b-instruct',\n 'meta/meta-llama-3.1-8b-instruct',\n 'microsoft/mai-ds-r1',\n 'microsoft/phi-3-medium-128k-instruct',\n 'microsoft/phi-3-medium-4k-instruct',\n 'microsoft/phi-3-mini-128k-instruct',\n 'microsoft/phi-3-mini-4k-instruct',\n 'microsoft/phi-3-small-128k-instruct',\n 'microsoft/phi-3-small-8k-instruct',\n 'microsoft/phi-3.5-mini-instruct',\n 'microsoft/phi-3.5-moe-instruct',\n 'microsoft/phi-3.5-vision-instruct',\n 'microsoft/phi-4',\n 'microsoft/phi-4-mini-instruct',\n 'microsoft/phi-4-mini-reasoning',\n 'microsoft/phi-4-multimodal-instruct',\n 'microsoft/phi-4-reasoning',\n 'mistral-ai/codestral-2501',\n 'mistral-ai/ministral-3b',\n 'mistral-ai/mistral-large-2411',\n 'mistral-ai/mistral-medium-2505',\n 'mistral-ai/mistral-nemo',\n 'mistral-ai/mistral-small-2503',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/o1',\n 'openai/o1-mini',\n 'openai/o1-preview',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'xai/grok-3',\n 'xai/grok-3-mini',\n ],\n docUrl: 'https://docs.github.com/en/github-models',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1/chat/completions',\n apiKeyEnvVar: 'TOGETHER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Together AI',\n models: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1',\n 'deepseek-ai/DeepSeek-V3',\n 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'openai/gpt-oss-120b',\n ],\n docUrl: 'https://docs.together.ai/docs/serverless-models',\n },\n baseten: {\n url: 'https://inference.baseten.co/v1/chat/completions',\n apiKeyEnvVar: 'BASETEN_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Baseten',\n models: ['Qwen3/Qwen3-Coder-480B-A35B-Instruct', 'moonshotai/Kimi-K2-Instruct-0905'],\n docUrl: 'https://docs.baseten.co/development/model-apis/overview',\n },\n huggingface: {\n url: 'https://router.huggingface.co/v1/chat/completions',\n apiKeyEnvVar: 'HF_TOKEN',\n apiKeyHeader: 'Authorization',\n name: 'Hugging Face',\n models: [\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/Deepseek-V3-0324',\n 'moonshotai/Kimi-K2-Instruct',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'zai-org/GLM-4.5',\n 'zai-org/GLM-4.5-Air',\n ],\n docUrl: 'https://huggingface.co/docs/inference-providers',\n },\n opencode: {\n url: 'https://opencode.ai/zen/v1/chat/completions',\n apiKeyEnvVar: 'OPENCODE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'opencode zen',\n models: [\n 'claude-3-5-haiku',\n 'claude-opus-4-1',\n 'claude-sonnet-4',\n 'claude-sonnet-4-5',\n 'code-supernova',\n 'gpt-5',\n 'gpt-5-codex',\n 'grok-code',\n 'kimi-k2',\n 'qwen3-coder',\n 'qwen3-max',\n ],\n docUrl: 'https://opencode.ai/docs',\n },\n fastrouter: {\n url: 'https://go.fastrouter.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'FASTROUTER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'FastRouter',\n models: [\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'deepseek-ai/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'moonshotai/kimi-k2',\n 'openai/gpt-4.1',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen/qwen3-coder',\n 'x-ai/grok-4',\n ],\n docUrl: 'https://fastrouter.ai/models',\n },\n google: {\n url: 'https://generativelanguage.googleapis.com/v1beta/chat/completions',\n apiKeyEnvVar: 'GOOGLE_GENERATIVE_AI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Google',\n models: [\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-2.5-flash-lite-preview-06-17',\n 'gemini-2.5-flash-lite-preview-09-2025',\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-flash-preview-05-20',\n 'gemini-2.5-flash-preview-09-2025',\n 'gemini-2.5-pro',\n 'gemini-2.5-pro-preview-05-06',\n 'gemini-2.5-pro-preview-06-05',\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-live-2.5-flash-preview-native-audio',\n ],\n docUrl: 'https://ai.google.dev/gemini-api/docs/pricing',\n },\n inception: {\n url: 'https://api.inceptionlabs.ai/v1/chat/completions',\n apiKeyEnvVar: 'INCEPTION_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Inception',\n models: ['mercury', 'mercury-coder'],\n docUrl: 'https://platform.inceptionlabs.ai/docs',\n },\n wandb: {\n url: 'https://api.inference.wandb.ai/v1/chat/completions',\n apiKeyEnvVar: 'WANDB_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Weights & Biases',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'meta-llama/Llama-3.1-8B-Instruct',\n 'meta-llama/Llama-3.3-70B-Instruct',\n 'meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'microsoft/Phi-4-mini-instruct',\n 'moonshotai/Kimi-K2-Instruct',\n ],\n docUrl: 'https://weave-docs.wandb.ai/guides/integrations/inference/',\n },\n openai: {\n url: 'https://api.openai.com/v1/chat/completions',\n apiKeyEnvVar: 'OPENAI_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'OpenAI',\n models: [\n 'codex-mini-latest',\n 'gpt-3.5-turbo',\n 'gpt-4',\n 'gpt-4-turbo',\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-2024-05-13',\n 'gpt-4o-2024-08-06',\n 'gpt-4o-2024-11-20',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-chat-latest',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'o1',\n 'o1-mini',\n 'o1-preview',\n 'o1-pro',\n 'o3',\n 'o3-deep-research',\n 'o3-mini',\n 'o3-pro',\n 'o4-mini',\n 'o4-mini-deep-research',\n ],\n docUrl: 'https://platform.openai.com/docs/models',\n },\n 'zhipuai-coding-plan': {\n url: 'https://open.bigmodel.cn/api/coding/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Zhipu AI Coding Plan',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.bigmodel.cn/cn/coding-plan/overview',\n },\n perplexity: {\n url: 'https://api.perplexity.ai/chat/completions',\n apiKeyEnvVar: 'PERPLEXITY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Perplexity',\n models: ['sonar', 'sonar-pro', 'sonar-reasoning', 'sonar-reasoning-pro'],\n docUrl: 'https://docs.perplexity.ai',\n },\n openrouter: {\n url: 'https://openrouter.ai/api/v1/chat/completions',\n apiKeyEnvVar: 'OPENROUTER_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'OpenRouter',\n models: [\n 'anthropic/claude-3.5-haiku',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'anthropic/claude-sonnet-4.5',\n 'cognitivecomputations/dolphin3.0-mistral-24b',\n 'cognitivecomputations/dolphin3.0-r1-mistral-24b',\n 'deepseek/deepseek-chat-v3-0324',\n 'deepseek/deepseek-chat-v3.1',\n 'deepseek/deepseek-r1-0528-qwen3-8b:free',\n 'deepseek/deepseek-r1-0528:free',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'deepseek/deepseek-r1-distill-qwen-14b',\n 'deepseek/deepseek-r1:free',\n 'deepseek/deepseek-v3-base:free',\n 'deepseek/deepseek-v3.1-terminus',\n 'featherless/qwerky-72b',\n 'google/gemini-2.0-flash-001',\n 'google/gemini-2.0-flash-exp:free',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-pro-preview-05-06',\n 'google/gemini-2.5-pro-preview-06-05',\n 'google/gemma-2-9b-it:free',\n 'google/gemma-3-12b-it',\n 'google/gemma-3-27b-it',\n 'google/gemma-3n-e4b-it',\n 'google/gemma-3n-e4b-it:free',\n 'meta-llama/llama-3.2-11b-vision-instruct',\n 'meta-llama/llama-3.3-70b-instruct:free',\n 'meta-llama/llama-4-scout:free',\n 'microsoft/mai-ds-r1:free',\n 'mistralai/codestral-2508',\n 'mistralai/devstral-medium-2507',\n 'mistralai/devstral-small-2505',\n 'mistralai/devstral-small-2505:free',\n 'mistralai/devstral-small-2507',\n 'mistralai/mistral-7b-instruct:free',\n 'mistralai/mistral-medium-3',\n 'mistralai/mistral-medium-3.1',\n 'mistralai/mistral-nemo:free',\n 'mistralai/mistral-small-3.1-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct:free',\n 'moonshotai/kimi-dev-72b:free',\n 'moonshotai/kimi-k2',\n 'moonshotai/kimi-k2-0905',\n 'moonshotai/kimi-k2:free',\n 'nousresearch/deephermes-3-llama-3-8b-preview',\n 'nousresearch/hermes-4-405b',\n 'nousresearch/hermes-4-70b',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-chat',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o4-mini',\n 'openrouter/cypher-alpha:free',\n 'openrouter/horizon-alpha',\n 'openrouter/horizon-beta',\n 'openrouter/sonoma-dusk-alpha',\n 'openrouter/sonoma-sky-alpha',\n 'qwen/qwen-2.5-coder-32b-instruct',\n 'qwen/qwen2.5-vl-32b-instruct:free',\n 'qwen/qwen2.5-vl-72b-instruct',\n 'qwen/qwen2.5-vl-72b-instruct:free',\n 'qwen/qwen3-14b:free',\n 'qwen/qwen3-235b-a22b-07-25',\n 'qwen/qwen3-235b-a22b-07-25:free',\n 'qwen/qwen3-235b-a22b-thinking-2507',\n 'qwen/qwen3-235b-a22b:free',\n 'qwen/qwen3-30b-a3b-instruct-2507',\n 'qwen/qwen3-30b-a3b:free',\n 'qwen/qwen3-32b:free',\n 'qwen/qwen3-8b:free',\n 'qwen/qwen3-coder',\n 'qwen/qwen3-coder:free',\n 'qwen/qwen3-max',\n 'qwen/qwen3-next-80b-a3b-instruct',\n 'qwen/qwq-32b:free',\n 'rekaai/reka-flash-3',\n 'sarvamai/sarvam-m:free',\n 'thudm/glm-z1-32b:free',\n 'tngtech/deepseek-r1t2-chimera:free',\n 'x-ai/grok-3',\n 'x-ai/grok-3-beta',\n 'x-ai/grok-3-mini',\n 'x-ai/grok-3-mini-beta',\n 'x-ai/grok-4',\n 'x-ai/grok-4-fast',\n 'x-ai/grok-4-fast:free',\n 'x-ai/grok-code-fast-1',\n 'z-ai/glm-4.5',\n 'z-ai/glm-4.5-air',\n 'z-ai/glm-4.5-air:free',\n 'z-ai/glm-4.5v',\n ],\n docUrl: 'https://openrouter.ai/models',\n },\n synthetic: {\n url: 'https://api.synthetic.new/v1/chat/completions',\n apiKeyEnvVar: 'SYNTHETIC_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Synthetic',\n models: [\n 'hf:Qwen/Qwen2.5-Coder-32B-Instruct',\n 'hf:Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'hf:Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'hf:Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'hf:deepseek-ai/DeepSeek-R1',\n 'hf:deepseek-ai/DeepSeek-R1-0528',\n 'hf:deepseek-ai/DeepSeek-V3',\n 'hf:deepseek-ai/DeepSeek-V3-0324',\n 'hf:deepseek-ai/DeepSeek-V3.1',\n 'hf:deepseek-ai/DeepSeek-V3.1-Terminus',\n 'hf:meta-llama/Llama-3.1-405B-Instruct',\n 'hf:meta-llama/Llama-3.1-70B-Instruct',\n 'hf:meta-llama/Llama-3.1-8B-Instruct',\n 'hf:meta-llama/Llama-3.3-70B-Instruct',\n 'hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8',\n 'hf:meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct-0905',\n 'hf:openai/gpt-oss-120b',\n 'hf:zai-org/GLM-4.5',\n ],\n docUrl: 'https://synthetic.new/pricing',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai/chat/completions',\n apiKeyEnvVar: 'DEEPINFRA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Deep Infra',\n models: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'zai-org/GLM-4.5',\n ],\n docUrl: 'https://deepinfra.com/models',\n },\n zhipuai: {\n url: 'https://open.bigmodel.cn/api/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Zhipu AI',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/guides/overview/pricing',\n },\n submodel: {\n url: 'https://llm.submodel.ai/v1/chat/completions',\n apiKeyEnvVar: 'SUBMODEL_INSTAGEN_ACCESS_KEY',\n apiKeyHeader: 'Authorization',\n name: 'submodel',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'openai/gpt-oss-120b',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n ],\n docUrl: 'https://submodel.gitbook.io',\n },\n zai: {\n url: 'https://api.z.ai/api/paas/v4/chat/completions',\n apiKeyEnvVar: 'ZHIPU_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Z.AI',\n models: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n docUrl: 'https://docs.z.ai/guides/overview/pricing',\n },\n inference: {\n url: 'https://inference.net/v1/chat/completions',\n apiKeyEnvVar: 'INFERENCE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Inference',\n models: [\n 'google/gemma-3',\n 'meta/llama-3.1-8b-instruct',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-1b-instruct',\n 'meta/llama-3.2-3b-instruct',\n 'mistral/mistral-nemo-12b-instruct',\n 'osmosis/osmosis-structure-0.6b',\n 'qwen/qwen-2.5-7b-vision-instruct',\n 'qwen/qwen3-embedding-4b',\n ],\n docUrl: 'https://inference.net/models',\n },\n requesty: {\n url: 'https://router.requesty.ai/v1/chat/completions',\n apiKeyEnvVar: 'REQUESTY_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Requesty',\n models: [\n 'anthropic/claude-3-7-sonnet',\n 'anthropic/claude-4-sonnet-20250522',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4-1-20250805',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/o4-mini',\n ],\n docUrl: 'https://requesty.ai/solution/llm-routing/models',\n },\n morph: {\n url: 'https://api.morphllm.com/v1/chat/completions',\n apiKeyEnvVar: 'MORPH_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Morph',\n models: ['auto', 'morph-v3-fast', 'morph-v3-large'],\n docUrl: 'https://docs.morphllm.com/api-reference/introduction',\n },\n lmstudio: {\n url: 'http://127.0.0.1:1234/v1/chat/completions',\n apiKeyEnvVar: 'LMSTUDIO_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'LMStudio',\n models: ['openai/gpt-oss-20b', 'qwen/qwen3-30b-a3b-2507', 'qwen/qwen3-coder-30b'],\n docUrl: 'https://lmstudio.ai/models',\n },\n anthropic: {\n url: 'https://api.anthropic.com/v1/chat/completions',\n apiKeyEnvVar: 'ANTHROPIC_API_KEY',\n apiKeyHeader: 'x-api-key',\n name: 'Anthropic',\n models: [\n 'claude-3-5-haiku-20241022',\n 'claude-3-5-sonnet-20240620',\n 'claude-3-5-sonnet-20241022',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-haiku-20240307',\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-opus-4-1-20250805',\n 'claude-opus-4-20250514',\n 'claude-sonnet-4-20250514',\n 'claude-sonnet-4-5-20250929',\n ],\n docUrl: 'https://docs.anthropic.com/en/docs/about-claude/models',\n },\n 'fireworks-ai': {\n url: 'https://api.fireworks.ai/inference/v1/chat/completions',\n apiKeyEnvVar: 'FIREWORKS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Fireworks AI',\n models: [\n 'accounts/fireworks/models/deepseek-r1-0528',\n 'accounts/fireworks/models/deepseek-v3-0324',\n 'accounts/fireworks/models/deepseek-v3p1',\n 'accounts/fireworks/models/glm-4p5',\n 'accounts/fireworks/models/glm-4p5-air',\n 'accounts/fireworks/models/gpt-oss-120b',\n 'accounts/fireworks/models/gpt-oss-20b',\n 'accounts/fireworks/models/kimi-k2-instruct',\n 'accounts/fireworks/models/qwen3-235b-a22b',\n 'accounts/fireworks/models/qwen3-coder-480b-a35b-instruct',\n ],\n docUrl: 'https://fireworks.ai/docs/',\n },\n modelscope: {\n url: 'https://api-inference.modelscope.cn/v1/chat/completions',\n apiKeyEnvVar: 'MODELSCOPE_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'ModelScope',\n models: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'ZhipuAI/GLM-4.5',\n ],\n docUrl: 'https://modelscope.cn/docs/model-service/API-Inference/intro',\n },\n llama: {\n url: 'https://api.llama.com/compat/v1/chat/completions',\n apiKeyEnvVar: 'LLAMA_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Llama',\n models: [\n 'cerebras-llama-4-maverick-17b-128e-instruct',\n 'cerebras-llama-4-scout-17b-16e-instruct',\n 'groq-llama-4-maverick-17b-128e-instruct',\n 'llama-3.3-70b-instruct',\n 'llama-3.3-8b-instruct',\n 'llama-4-maverick-17b-128e-instruct-fp8',\n 'llama-4-scout-17b-16e-instruct-fp8',\n ],\n docUrl: 'https://llama.developer.meta.com/docs/models',\n },\n cerebras: {\n url: 'https://api.cerebras.ai/v1/chat/completions',\n apiKeyEnvVar: 'CEREBRAS_API_KEY',\n apiKeyHeader: 'Authorization',\n name: 'Cerebras',\n models: ['gpt-oss-120b', 'qwen-3-235b-a22b-instruct-2507', 'qwen-3-coder-480b'],\n docUrl: 'https://inference-docs.cerebras.ai/models/overview',\n },\n} as const;\n\n/**\n * Available models per provider\n */\nexport const PROVIDER_MODELS = {\n 'moonshotai-cn': ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n lucidquery: ['lucidnova-rf1-100b', 'lucidquery-nexus-coder'],\n moonshotai: ['kimi-k2-0711-preview', 'kimi-k2-0905-preview', 'kimi-k2-turbo-preview'],\n 'zai-coding-plan': ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n alibaba: ['qwen3-coder-plus'],\n xai: [\n 'grok-2',\n 'grok-2-1212',\n 'grok-2-latest',\n 'grok-2-vision',\n 'grok-2-vision-1212',\n 'grok-2-vision-latest',\n 'grok-3',\n 'grok-3-fast',\n 'grok-3-fast-latest',\n 'grok-3-latest',\n 'grok-3-mini',\n 'grok-3-mini-fast',\n 'grok-3-mini-fast-latest',\n 'grok-3-mini-latest',\n 'grok-4',\n 'grok-4-fast',\n 'grok-4-fast-non-reasoning',\n 'grok-beta',\n 'grok-code-fast-1',\n 'grok-vision-beta',\n ],\n nvidia: [\n 'black-forest-labs/flux.1-dev',\n 'deepseek-ai/deepseek-v3.1',\n 'google/gemma-3-27b-it',\n 'microsoft/phi-4-mini-instruct',\n 'moonshotai/kimi-k2-instruct',\n 'nvidia/cosmos-nemotron-34b',\n 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n 'nvidia/nemoretriever-ocr-v1',\n 'nvidia/parakeet-tdt-0.6b-v2',\n 'openai/gpt-oss-120b',\n 'openai/whisper-large-v3',\n 'qwen/qwen3-235b-a22b',\n 'qwen/qwen3-coder-480b-a35b-instruct',\n ],\n upstage: ['solar-mini', 'solar-pro2'],\n groq: [\n 'deepseek-r1-distill-llama-70b',\n 'gemma2-9b-it',\n 'llama-3.1-8b-instant',\n 'llama-3.3-70b-versatile',\n 'llama-guard-3-8b',\n 'llama3-70b-8192',\n 'llama3-8b-8192',\n 'meta-llama/llama-4-maverick-17b-128e-instruct',\n 'meta-llama/llama-4-scout-17b-16e-instruct',\n 'meta-llama/llama-guard-4-12b',\n 'mistral-saba-24b',\n 'moonshotai/kimi-k2-instruct',\n 'moonshotai/kimi-k2-instruct-0905',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen-qwq-32b',\n 'qwen/qwen3-32b',\n ],\n 'github-copilot': [\n 'claude-3.5-sonnet',\n 'claude-3.7-sonnet',\n 'claude-3.7-sonnet-thought',\n 'claude-opus-4',\n 'claude-opus-41',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'gemini-2.0-flash-001',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-4o',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'grok-code-fast-1',\n 'o3',\n 'o3-mini',\n 'o4-mini',\n ],\n mistral: [\n 'codestral-latest',\n 'devstral-medium-2507',\n 'devstral-small-2505',\n 'devstral-small-2507',\n 'magistral-medium-latest',\n 'magistral-small',\n 'ministral-3b-latest',\n 'ministral-8b-latest',\n 'mistral-large-latest',\n 'mistral-medium-2505',\n 'mistral-medium-2508',\n 'mistral-medium-latest',\n 'mistral-nemo',\n 'mistral-small-latest',\n 'open-mistral-7b',\n 'open-mixtral-8x22b',\n 'open-mixtral-8x7b',\n 'pixtral-12b',\n 'pixtral-large-latest',\n ],\n vercel: [\n 'amazon/nova-lite',\n 'amazon/nova-micro',\n 'amazon/nova-pro',\n 'anthropic/claude-3-5-haiku',\n 'anthropic/claude-3-haiku',\n 'anthropic/claude-3-opus',\n 'anthropic/claude-3.5-sonnet',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-4-1-opus',\n 'anthropic/claude-4-opus',\n 'anthropic/claude-4-sonnet',\n 'anthropic/claude-4.5-sonnet',\n 'cerebras/qwen3-coder',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.0-flash',\n 'google/gemini-2.0-flash-lite',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'meta/llama-3.3-70b',\n 'meta/llama-4-maverick',\n 'meta/llama-4-scout',\n 'mistral/codestral',\n 'mistral/magistral-medium',\n 'mistral/magistral-small',\n 'mistral/ministral-3b',\n 'mistral/ministral-8b',\n 'mistral/mistral-large',\n 'mistral/mistral-small',\n 'mistral/mixtral-8x22b-instruct',\n 'mistral/pixtral-12b',\n 'mistral/pixtral-large',\n 'moonshotai/kimi-k2',\n 'morph/morph-v3-fast',\n 'morph/morph-v3-large',\n 'openai/gpt-4-turbo',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o1',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'vercel/v0-1.0-md',\n 'vercel/v0-1.5-md',\n 'xai/grok-2',\n 'xai/grok-2-vision',\n 'xai/grok-3',\n 'xai/grok-3-fast',\n 'xai/grok-3-mini',\n 'xai/grok-3-mini-fast',\n 'xai/grok-4',\n 'xai/grok-4-fast',\n 'xai/grok-4-fast-non-reasoning',\n 'xai/grok-code-fast-1',\n ],\n deepseek: ['deepseek-chat', 'deepseek-reasoner'],\n 'alibaba-cn': ['qwen3-coder-plus'],\n venice: [\n 'deepseek-coder-v2-lite',\n 'deepseek-r1-671b',\n 'dolphin-2.9.2-qwen2-72b',\n 'llama-3.1-405b',\n 'llama-3.2-3b',\n 'llama-3.3-70b',\n 'mistral-31-24b',\n 'qwen-2.5-coder-32b',\n 'qwen-2.5-qwq-32b',\n 'qwen-2.5-vl',\n 'qwen3-235b',\n 'qwen3-4b',\n 'venice-uncensored',\n ],\n chutes: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'chutesai/Devstral-Small-2505',\n 'chutesai/Mistral-Small-3.2-24B-Instruct-2506',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-R1-0528-Qwen3-8B',\n 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'deepseek-ai/DeepSeek-V3.1-Terminus',\n 'deepseek-ai/DeepSeek-V3.1-turbo',\n 'deepseek-ai/DeepSeek-V3.1:THINKING',\n 'meituan-longcat/LongCat-Flash-Chat-FP8',\n 'moonshotai/Kimi-Dev-72B',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'moonshotai/Kimi-K2-Instruct-75k',\n 'moonshotai/Kimi-VL-A3B-Thinking',\n 'openai/gpt-oss-120b',\n 'tngtech/DeepSeek-R1T-Chimera',\n 'tngtech/DeepSeek-TNG-R1T2-Chimera',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n 'zai-org/GLM-4.5-turbo',\n ],\n cortecs: [\n 'claude-sonnet-4',\n 'deepseek-v3-0324',\n 'gemini-2.5-pro',\n 'gpt-4.1',\n 'gpt-oss-120b',\n 'kimi-k2-instruct',\n 'llama-3.1-405b-instruct',\n 'nova-pro-v1',\n 'qwen3-32b',\n 'qwen3-coder-480b-a35b-instruct',\n ],\n 'github-models': [\n 'ai21-labs/ai21-jamba-1.5-large',\n 'ai21-labs/ai21-jamba-1.5-mini',\n 'cohere/cohere-command-a',\n 'cohere/cohere-command-r',\n 'cohere/cohere-command-r-08-2024',\n 'cohere/cohere-command-r-plus',\n 'cohere/cohere-command-r-plus-08-2024',\n 'core42/jais-30b-chat',\n 'deepseek/deepseek-r1',\n 'deepseek/deepseek-r1-0528',\n 'deepseek/deepseek-v3-0324',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-90b-vision-instruct',\n 'meta/llama-3.3-70b-instruct',\n 'meta/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta/llama-4-scout-17b-16e-instruct',\n 'meta/meta-llama-3-70b-instruct',\n 'meta/meta-llama-3-8b-instruct',\n 'meta/meta-llama-3.1-405b-instruct',\n 'meta/meta-llama-3.1-70b-instruct',\n 'meta/meta-llama-3.1-8b-instruct',\n 'microsoft/mai-ds-r1',\n 'microsoft/phi-3-medium-128k-instruct',\n 'microsoft/phi-3-medium-4k-instruct',\n 'microsoft/phi-3-mini-128k-instruct',\n 'microsoft/phi-3-mini-4k-instruct',\n 'microsoft/phi-3-small-128k-instruct',\n 'microsoft/phi-3-small-8k-instruct',\n 'microsoft/phi-3.5-mini-instruct',\n 'microsoft/phi-3.5-moe-instruct',\n 'microsoft/phi-3.5-vision-instruct',\n 'microsoft/phi-4',\n 'microsoft/phi-4-mini-instruct',\n 'microsoft/phi-4-mini-reasoning',\n 'microsoft/phi-4-multimodal-instruct',\n 'microsoft/phi-4-reasoning',\n 'mistral-ai/codestral-2501',\n 'mistral-ai/ministral-3b',\n 'mistral-ai/mistral-large-2411',\n 'mistral-ai/mistral-medium-2505',\n 'mistral-ai/mistral-nemo',\n 'mistral-ai/mistral-small-2503',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4.1-nano',\n 'openai/gpt-4o',\n 'openai/gpt-4o-mini',\n 'openai/o1',\n 'openai/o1-mini',\n 'openai/o1-preview',\n 'openai/o3',\n 'openai/o3-mini',\n 'openai/o4-mini',\n 'xai/grok-3',\n 'xai/grok-3-mini',\n ],\n togetherai: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1',\n 'deepseek-ai/DeepSeek-V3',\n 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'openai/gpt-oss-120b',\n ],\n baseten: ['Qwen3/Qwen3-Coder-480B-A35B-Instruct', 'moonshotai/Kimi-K2-Instruct-0905'],\n huggingface: [\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Instruct',\n 'Qwen/Qwen3-Next-80B-A3B-Thinking',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/Deepseek-V3-0324',\n 'moonshotai/Kimi-K2-Instruct',\n 'moonshotai/Kimi-K2-Instruct-0905',\n 'zai-org/GLM-4.5',\n 'zai-org/GLM-4.5-Air',\n ],\n opencode: [\n 'claude-3-5-haiku',\n 'claude-opus-4-1',\n 'claude-sonnet-4',\n 'claude-sonnet-4-5',\n 'code-supernova',\n 'gpt-5',\n 'gpt-5-codex',\n 'grok-code',\n 'kimi-k2',\n 'qwen3-coder',\n 'qwen3-max',\n ],\n fastrouter: [\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'deepseek-ai/deepseek-r1-distill-llama-70b',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'moonshotai/kimi-k2',\n 'openai/gpt-4.1',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'qwen/qwen3-coder',\n 'x-ai/grok-4',\n ],\n google: [\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-2.5-flash-lite-preview-06-17',\n 'gemini-2.5-flash-lite-preview-09-2025',\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-flash-preview-05-20',\n 'gemini-2.5-flash-preview-09-2025',\n 'gemini-2.5-pro',\n 'gemini-2.5-pro-preview-05-06',\n 'gemini-2.5-pro-preview-06-05',\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-live-2.5-flash-preview-native-audio',\n ],\n inception: ['mercury', 'mercury-coder'],\n wandb: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'meta-llama/Llama-3.1-8B-Instruct',\n 'meta-llama/Llama-3.3-70B-Instruct',\n 'meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'microsoft/Phi-4-mini-instruct',\n 'moonshotai/Kimi-K2-Instruct',\n ],\n openai: [\n 'codex-mini-latest',\n 'gpt-3.5-turbo',\n 'gpt-4',\n 'gpt-4-turbo',\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-2024-05-13',\n 'gpt-4o-2024-08-06',\n 'gpt-4o-2024-11-20',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-chat-latest',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'o1',\n 'o1-mini',\n 'o1-preview',\n 'o1-pro',\n 'o3',\n 'o3-deep-research',\n 'o3-mini',\n 'o3-pro',\n 'o4-mini',\n 'o4-mini-deep-research',\n ],\n 'zhipuai-coding-plan': ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n perplexity: ['sonar', 'sonar-pro', 'sonar-reasoning', 'sonar-reasoning-pro'],\n openrouter: [\n 'anthropic/claude-3.5-haiku',\n 'anthropic/claude-3.7-sonnet',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4.1',\n 'anthropic/claude-sonnet-4',\n 'anthropic/claude-sonnet-4.5',\n 'cognitivecomputations/dolphin3.0-mistral-24b',\n 'cognitivecomputations/dolphin3.0-r1-mistral-24b',\n 'deepseek/deepseek-chat-v3-0324',\n 'deepseek/deepseek-chat-v3.1',\n 'deepseek/deepseek-r1-0528-qwen3-8b:free',\n 'deepseek/deepseek-r1-0528:free',\n 'deepseek/deepseek-r1-distill-llama-70b',\n 'deepseek/deepseek-r1-distill-qwen-14b',\n 'deepseek/deepseek-r1:free',\n 'deepseek/deepseek-v3-base:free',\n 'deepseek/deepseek-v3.1-terminus',\n 'featherless/qwerky-72b',\n 'google/gemini-2.0-flash-001',\n 'google/gemini-2.0-flash-exp:free',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-pro-preview-05-06',\n 'google/gemini-2.5-pro-preview-06-05',\n 'google/gemma-2-9b-it:free',\n 'google/gemma-3-12b-it',\n 'google/gemma-3-27b-it',\n 'google/gemma-3n-e4b-it',\n 'google/gemma-3n-e4b-it:free',\n 'meta-llama/llama-3.2-11b-vision-instruct',\n 'meta-llama/llama-3.3-70b-instruct:free',\n 'meta-llama/llama-4-scout:free',\n 'microsoft/mai-ds-r1:free',\n 'mistralai/codestral-2508',\n 'mistralai/devstral-medium-2507',\n 'mistralai/devstral-small-2505',\n 'mistralai/devstral-small-2505:free',\n 'mistralai/devstral-small-2507',\n 'mistralai/mistral-7b-instruct:free',\n 'mistralai/mistral-medium-3',\n 'mistralai/mistral-medium-3.1',\n 'mistralai/mistral-nemo:free',\n 'mistralai/mistral-small-3.1-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct',\n 'mistralai/mistral-small-3.2-24b-instruct:free',\n 'moonshotai/kimi-dev-72b:free',\n 'moonshotai/kimi-k2',\n 'moonshotai/kimi-k2-0905',\n 'moonshotai/kimi-k2:free',\n 'nousresearch/deephermes-3-llama-3-8b-preview',\n 'nousresearch/hermes-4-405b',\n 'nousresearch/hermes-4-70b',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-chat',\n 'openai/gpt-5-codex',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/gpt-oss-120b',\n 'openai/gpt-oss-20b',\n 'openai/o4-mini',\n 'openrouter/cypher-alpha:free',\n 'openrouter/horizon-alpha',\n 'openrouter/horizon-beta',\n 'openrouter/sonoma-dusk-alpha',\n 'openrouter/sonoma-sky-alpha',\n 'qwen/qwen-2.5-coder-32b-instruct',\n 'qwen/qwen2.5-vl-32b-instruct:free',\n 'qwen/qwen2.5-vl-72b-instruct',\n 'qwen/qwen2.5-vl-72b-instruct:free',\n 'qwen/qwen3-14b:free',\n 'qwen/qwen3-235b-a22b-07-25',\n 'qwen/qwen3-235b-a22b-07-25:free',\n 'qwen/qwen3-235b-a22b-thinking-2507',\n 'qwen/qwen3-235b-a22b:free',\n 'qwen/qwen3-30b-a3b-instruct-2507',\n 'qwen/qwen3-30b-a3b:free',\n 'qwen/qwen3-32b:free',\n 'qwen/qwen3-8b:free',\n 'qwen/qwen3-coder',\n 'qwen/qwen3-coder:free',\n 'qwen/qwen3-max',\n 'qwen/qwen3-next-80b-a3b-instruct',\n 'qwen/qwq-32b:free',\n 'rekaai/reka-flash-3',\n 'sarvamai/sarvam-m:free',\n 'thudm/glm-z1-32b:free',\n 'tngtech/deepseek-r1t2-chimera:free',\n 'x-ai/grok-3',\n 'x-ai/grok-3-beta',\n 'x-ai/grok-3-mini',\n 'x-ai/grok-3-mini-beta',\n 'x-ai/grok-4',\n 'x-ai/grok-4-fast',\n 'x-ai/grok-4-fast:free',\n 'x-ai/grok-code-fast-1',\n 'z-ai/glm-4.5',\n 'z-ai/glm-4.5-air',\n 'z-ai/glm-4.5-air:free',\n 'z-ai/glm-4.5v',\n ],\n synthetic: [\n 'hf:Qwen/Qwen2.5-Coder-32B-Instruct',\n 'hf:Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'hf:Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'hf:Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'hf:deepseek-ai/DeepSeek-R1',\n 'hf:deepseek-ai/DeepSeek-R1-0528',\n 'hf:deepseek-ai/DeepSeek-V3',\n 'hf:deepseek-ai/DeepSeek-V3-0324',\n 'hf:deepseek-ai/DeepSeek-V3.1',\n 'hf:deepseek-ai/DeepSeek-V3.1-Terminus',\n 'hf:meta-llama/Llama-3.1-405B-Instruct',\n 'hf:meta-llama/Llama-3.1-70B-Instruct',\n 'hf:meta-llama/Llama-3.1-8B-Instruct',\n 'hf:meta-llama/Llama-3.3-70B-Instruct',\n 'hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8',\n 'hf:meta-llama/Llama-4-Scout-17B-16E-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct',\n 'hf:moonshotai/Kimi-K2-Instruct-0905',\n 'hf:openai/gpt-oss-120b',\n 'hf:zai-org/GLM-4.5',\n ],\n deepinfra: [\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo',\n 'moonshotai/Kimi-K2-Instruct',\n 'zai-org/GLM-4.5',\n ],\n zhipuai: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n submodel: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8',\n 'deepseek-ai/DeepSeek-R1-0528',\n 'deepseek-ai/DeepSeek-V3-0324',\n 'deepseek-ai/DeepSeek-V3.1',\n 'openai/gpt-oss-120b',\n 'zai-org/GLM-4.5-Air',\n 'zai-org/GLM-4.5-FP8',\n ],\n zai: ['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash', 'glm-4.5v', 'glm-4.6'],\n inference: [\n 'google/gemma-3',\n 'meta/llama-3.1-8b-instruct',\n 'meta/llama-3.2-11b-vision-instruct',\n 'meta/llama-3.2-1b-instruct',\n 'meta/llama-3.2-3b-instruct',\n 'mistral/mistral-nemo-12b-instruct',\n 'osmosis/osmosis-structure-0.6b',\n 'qwen/qwen-2.5-7b-vision-instruct',\n 'qwen/qwen3-embedding-4b',\n ],\n requesty: [\n 'anthropic/claude-3-7-sonnet',\n 'anthropic/claude-4-sonnet-20250522',\n 'anthropic/claude-opus-4',\n 'anthropic/claude-opus-4-1-20250805',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-pro',\n 'openai/gpt-4.1',\n 'openai/gpt-4.1-mini',\n 'openai/gpt-4o-mini',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n 'openai/o4-mini',\n ],\n morph: ['auto', 'morph-v3-fast', 'morph-v3-large'],\n lmstudio: ['openai/gpt-oss-20b', 'qwen/qwen3-30b-a3b-2507', 'qwen/qwen3-coder-30b'],\n anthropic: [\n 'claude-3-5-haiku-20241022',\n 'claude-3-5-sonnet-20240620',\n 'claude-3-5-sonnet-20241022',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-haiku-20240307',\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-opus-4-1-20250805',\n 'claude-opus-4-20250514',\n 'claude-sonnet-4-20250514',\n 'claude-sonnet-4-5-20250929',\n ],\n 'fireworks-ai': [\n 'accounts/fireworks/models/deepseek-r1-0528',\n 'accounts/fireworks/models/deepseek-v3-0324',\n 'accounts/fireworks/models/deepseek-v3p1',\n 'accounts/fireworks/models/glm-4p5',\n 'accounts/fireworks/models/glm-4p5-air',\n 'accounts/fireworks/models/gpt-oss-120b',\n 'accounts/fireworks/models/gpt-oss-20b',\n 'accounts/fireworks/models/kimi-k2-instruct',\n 'accounts/fireworks/models/qwen3-235b-a22b',\n 'accounts/fireworks/models/qwen3-coder-480b-a35b-instruct',\n ],\n modelscope: [\n 'Qwen/Qwen3-235B-A22B-Instruct-2507',\n 'Qwen/Qwen3-235B-A22B-Thinking-2507',\n 'Qwen/Qwen3-30B-A3B-Instruct-2507',\n 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n 'Qwen/Qwen3-Coder-30B-A3B-Instruct',\n 'Qwen/Qwen3-Coder-480B-A35B-Instruct',\n 'ZhipuAI/GLM-4.5',\n ],\n llama: [\n 'cerebras-llama-4-maverick-17b-128e-instruct',\n 'cerebras-llama-4-scout-17b-16e-instruct',\n 'groq-llama-4-maverick-17b-128e-instruct',\n 'llama-3.3-70b-instruct',\n 'llama-3.3-8b-instruct',\n 'llama-4-maverick-17b-128e-instruct-fp8',\n 'llama-4-scout-17b-16e-instruct-fp8',\n ],\n cerebras: ['gpt-oss-120b', 'qwen-3-235b-a22b-instruct-2507', 'qwen-3-coder-480b'],\n} as const;\n\n/**\n * Type definitions for autocomplete support\n */\nexport type ProviderModels = typeof PROVIDER_MODELS;\nexport type Provider = keyof ProviderModels;\nexport type ModelForProvider<P extends Provider> = ProviderModels[P][number];\n\n/**\n * OpenAI-compatible model ID type\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId = { [P in Provider]: `${P}/${ModelForProvider<P>}` }[Provider] | (string & {});\n\n/**\n * Get provider configuration by provider ID\n */\nexport function getProviderConfig(providerId: string): ProviderConfig | undefined {\n return PROVIDER_REGISTRY[providerId as keyof typeof PROVIDER_REGISTRY];\n}\n\n/**\n * Check if a provider is registered\n */\nexport function isProviderRegistered(providerId: string): boolean {\n return providerId in PROVIDER_REGISTRY;\n}\n\n/**\n * Get all registered provider IDs\n */\nexport function getRegisteredProviders(): string[] {\n return Object.keys(PROVIDER_REGISTRY);\n}\n\n/**\n * Provider configuration interface\n */\nexport interface ProviderConfig {\n url: string;\n apiKeyEnvVar: string;\n apiKeyHeader?: string;\n name: string;\n models: readonly string[];\n docUrl?: string;\n}\n\n/**\n * Parse a model string to extract provider and model ID\n * Examples:\n * \"openai/gpt-4o\" -> { provider: \"openai\", modelId: \"gpt-4o\" }\n * \"fireworks/accounts/etc/model\" -> { provider: \"fireworks\", modelId: \"accounts/etc/model\" }\n * \"gpt-4o\" -> { provider: null, modelId: \"gpt-4o\" }\n */\nexport function parseModelString(modelString: string): { provider: string | null; modelId: string } {\n const firstSlashIndex = modelString.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n // Has at least one slash - extract everything before first slash as provider\n const provider = modelString.substring(0, firstSlashIndex);\n const modelId = modelString.substring(firstSlashIndex + 1);\n\n if (provider && modelId) {\n return {\n provider,\n modelId,\n };\n }\n }\n\n // No slash or invalid format\n return {\n provider: null,\n modelId: modelString,\n };\n}\n\n/**\n * Type guard to check if a string is a valid OpenAI-compatible model ID\n */\nexport function isValidModelId(modelId: string): modelId is ModelRouterModelId {\n const { provider } = parseModelString(modelId);\n return provider !== null && isProviderRegistered(provider);\n}\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider-v5';\nimport { parseModelString, getProviderConfig } from './provider-registry.generated';\nimport type { ModelRouterModelId } from './provider-registry.generated';\nimport type { OpenAICompatibleConfig } from './shared.types';\n\n// Helper function to resolve API key from environment\nfunction resolveApiKey({ provider, apiKey }: { provider?: string; apiKey?: string }): string | undefined {\n if (apiKey) return apiKey;\n\n if (provider) {\n const config = getProviderConfig(provider);\n if (config?.apiKeyEnvVar) {\n return process.env[config.apiKeyEnvVar];\n }\n }\n\n return undefined;\n}\n\n// Helper function to build headers for the request\nfunction buildHeaders(\n apiKey?: string,\n apiKeyHeader?: string,\n customHeaders?: Record<string, string>,\n provider?: string,\n): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...customHeaders,\n };\n\n if (apiKey) {\n // Use custom API key header if specified (e.g., 'x-api-key' for Anthropic)\n if (apiKeyHeader === 'x-api-key') {\n headers['x-api-key'] = apiKey;\n } else {\n // Default to Authorization Bearer format\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n }\n\n // Add provider-specific headers\n if (provider === 'anthropic') {\n headers['anthropic-version'] = '2023-06-01';\n }\n\n return headers;\n}\n\n// TODO: get these types from openai\ninterface OpenAIStreamChunk {\n id?: string;\n object?: string;\n created?: number;\n model?: string;\n choices?: Array<{\n index: number;\n delta?: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n}\n\nexport class OpenAICompatibleModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly defaultObjectGenerationMode = 'json' as const;\n readonly supportsStructuredOutputs = true;\n readonly supportsImageUrls = true;\n readonly supportedUrls = {} as Record<string, RegExp[]>;\n\n readonly modelId: string;\n readonly provider: string;\n\n private url: string;\n private headers: Record<string, string>;\n private apiKey: string | undefined;\n\n constructor(config: ModelRouterModelId | OpenAICompatibleConfig) {\n // Parse configuration\n let parsedConfig: OpenAICompatibleConfig;\n\n if (typeof config === 'string') {\n // First check if it's a valid URL\n let isUrl = false;\n try {\n new URL(config);\n isUrl = true;\n } catch {\n // Not a URL, continue with provider parsing\n }\n\n if (isUrl) {\n // If it's a direct URL\n parsedConfig = {\n id: 'unknown',\n url: config,\n };\n this.provider = 'openai-compatible';\n } else {\n // Handle magic strings like \"openai/gpt-4o\" or \"chutes/Qwen/Qwen3-235B-A22B-Instruct-2507\"\n // For multi-slash strings, extract just the provider (first part)\n const firstSlashIndex = config.indexOf('/');\n\n if (firstSlashIndex !== -1) {\n const provider = config.substring(0, firstSlashIndex);\n const modelId = config.substring(firstSlashIndex + 1);\n\n const providerConfig = getProviderConfig(provider);\n if (!providerConfig) {\n throw new Error(`Unknown provider: ${provider}. Use a custom URL instead.`);\n }\n\n parsedConfig = {\n id: modelId,\n url: providerConfig.url,\n apiKey: resolveApiKey({ provider }),\n };\n\n this.provider = provider;\n } else {\n // No slash at all, treat as direct model ID\n throw new Error(`Invalid model string: \"${config}\". Use \"provider/model\" format or a direct URL.`);\n }\n }\n } else {\n // Handle config object\n parsedConfig = config;\n\n // Extract provider from id if present\n const parsed = parseModelString(config.id);\n\n if (!config.url && parsed.provider) {\n // Use provider preset\n const providerConfig = getProviderConfig(parsed.provider);\n if (!providerConfig) {\n throw new Error(`Unknown provider: ${parsed.provider}. Please provide a URL.`);\n }\n parsedConfig.url = providerConfig.url;\n parsedConfig.id = parsed.modelId;\n this.provider = parsed.provider;\n } else {\n this.provider = parsed.provider || 'openai-compatible';\n }\n\n // Resolve API key if not provided\n if (!parsedConfig.apiKey) {\n parsedConfig.apiKey = resolveApiKey({ provider: parsed.provider || undefined });\n }\n }\n\n // Validate we have a URL\n if (!parsedConfig.url) {\n throw new Error('URL is required for OpenAI-compatible model');\n }\n\n // Get provider config for headers\n const providerConfig = this.provider !== 'openai-compatible' ? getProviderConfig(this.provider) : undefined;\n\n // Set final properties\n this.modelId = parsedConfig.id;\n this.url = parsedConfig.url;\n this.apiKey = parsedConfig.apiKey; // Store API key for later validation\n this.headers = buildHeaders(parsedConfig.apiKey, providerConfig?.apiKeyHeader, parsedConfig.headers, this.provider);\n }\n\n private convertMessagesToOpenAI(messages: LanguageModelV2CallOptions['prompt']): any[] {\n return messages\n .map(msg => {\n if (msg.role === 'system') {\n return {\n role: 'system',\n content: msg.content,\n };\n }\n\n if (msg.role === 'user') {\n // Handle content parts\n const contentParts = msg.content\n .map(part => {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n // Note: v2 uses 'file' type with image property\n if (part.type === 'file') {\n return {\n type: 'image_url',\n image_url: { url: part.data },\n };\n }\n return null;\n })\n .filter(Boolean);\n\n // If only text parts, flatten to string\n if (contentParts.every(p => p?.type === 'text')) {\n return {\n role: 'user',\n content: contentParts.map(p => p?.text || '').join(''),\n };\n }\n\n return {\n role: 'user',\n content: contentParts,\n };\n }\n\n if (msg.role === 'assistant') {\n const textContent = msg.content\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n const toolCalls = msg.content\n .filter(part => part.type === 'tool-call')\n .map(part => ({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input || {}),\n },\n }));\n\n return {\n role: 'assistant',\n content: textContent || null,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n };\n }\n\n if (msg.role === 'tool') {\n return msg.content.map(toolResponse => ({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.output),\n }));\n }\n\n return msg;\n })\n .flat();\n }\n\n private convertToolsToOpenAI(tools: LanguageModelV2CallOptions['tools']): any[] | undefined {\n if (!tools || Object.keys(tools).length === 0) return undefined;\n\n return Object.entries(tools).map(([name, tool]) => {\n if (tool.type === 'function') {\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema || {},\n },\n };\n }\n // For provider-defined tools, use minimal definition\n return {\n type: 'function',\n function: {\n name,\n description: `Provider tool: ${name}`,\n parameters: {},\n },\n };\n });\n }\n\n private mapFinishReason(reason: string | null): LanguageModelV2FinishReason {\n switch (reason) {\n case 'stop':\n return 'stop';\n case 'length':\n case 'max_tokens':\n return 'length';\n case 'tool_calls':\n case 'function_call':\n return 'tool-calls';\n case 'content_filter':\n return 'content-filter';\n default:\n return 'unknown';\n }\n }\n\n private validateApiKey(): void {\n // Check if API key is required and missing\n if (!this.apiKey && this.provider !== 'openai-compatible') {\n // Get the provider config to find the env var name\n const providerConfig = getProviderConfig(this.provider);\n if (providerConfig?.apiKeyEnvVar) {\n throw new Error(\n `API key not found for provider \"${this.provider}\". Please set the ${providerConfig.apiKeyEnvVar} environment variable.`,\n );\n } else {\n throw new Error(\n `API key not found for provider \"${this.provider}\". Please provide an API key in the configuration.`,\n );\n }\n }\n }\n\n async doGenerate(): Promise<never> {\n throw new Error(\n 'doGenerate is not supported by OpenAICompatibleModel. ' +\n 'Mastra only uses streaming (doStream) for all LLM calls.',\n );\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<{\n stream: ReadableStream<LanguageModelV2StreamPart>;\n request?: { body: string };\n response?: { headers: Record<string, string> };\n warnings: LanguageModelV2CallWarning[];\n }> {\n this.validateApiKey(); // Validate API key before making the request\n const { prompt, tools, toolChoice, providerOptions } = options;\n\n // TODO: real body type, not any\n const body: any = {\n messages: this.convertMessagesToOpenAI(prompt),\n model: this.modelId,\n stream: true,\n ...providerOptions,\n };\n\n const openAITools = this.convertToolsToOpenAI(tools);\n if (openAITools) {\n body.tools = openAITools;\n if (toolChoice) {\n body.tool_choice =\n toolChoice.type === 'none'\n ? 'none'\n : toolChoice.type === 'required'\n ? 'required'\n : toolChoice.type === 'auto'\n ? 'auto'\n : toolChoice.type === 'tool'\n ? { type: 'function', function: { name: toolChoice.toolName } }\n : 'auto';\n }\n }\n\n // Handle structured output\n if (options.responseFormat?.type === 'json') {\n body.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n strict: true,\n schema: options.responseFormat.schema,\n },\n };\n }\n\n const fetchArgs = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n signal: options.abortSignal,\n };\n const response = await fetch(this.url, fetchArgs);\n\n if (!response.ok) {\n const error = await response.text();\n\n // Check for authentication errors\n if (response.status === 401 || response.status === 403) {\n const providerConfig = getProviderConfig(this.provider);\n if (providerConfig?.apiKeyEnvVar) {\n throw new Error(\n `Authentication failed for provider \"${this.provider}\". Please ensure the ${providerConfig.apiKeyEnvVar} environment variable is set with a valid API key.`,\n );\n }\n }\n\n throw new Error(`OpenAI-compatible API error: ${response.status} - ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let sentStart = false;\n const toolCallBuffers = new Map<number, { id: string; name: string; args: string; sent?: boolean }>();\n const mapFinishReason = this.mapFinishReason.bind(this);\n const modelId = this.modelId; // Capture modelId for use in stream\n\n let isActiveText = false;\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\n async start(controller) {\n try {\n // Send stream-start\n controller.enqueue({\n type: 'stream-start',\n warnings: [],\n });\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n // Parse and send any buffered tool calls that haven't been sent yet\n for (const [_, toolCall] of toolCallBuffers) {\n if (!toolCall.sent && toolCall.id && toolCall.name && toolCall.args) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.args || '{}',\n });\n }\n }\n\n controller.close();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim() === '' || line.trim() === 'data: [DONE]') {\n continue;\n }\n\n if (line.startsWith('data: ')) {\n try {\n const data: OpenAIStreamChunk = JSON.parse(line.slice(6));\n\n // Send response metadata from first chunk\n if (!sentStart && data.id) {\n controller.enqueue({\n type: 'response-metadata',\n id: data.id,\n modelId: data.model || modelId,\n timestamp: new Date(data.created ? data.created * 1000 : Date.now()),\n });\n sentStart = true;\n }\n\n const choice = data.choices?.[0];\n if (!choice) continue;\n\n // Handle text delta\n if (choice.delta?.content) {\n if (!isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n isActiveText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: choice.delta.content,\n });\n } else if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n isActiveText = false;\n }\n\n // Handle tool call deltas\n if (choice.delta?.tool_calls) {\n for (const toolCall of choice.delta.tool_calls) {\n const index = toolCall.index;\n\n if (!toolCallBuffers.has(index)) {\n // Send tool-input-start when we first see a tool call\n if (toolCall.id && toolCall.function?.name) {\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.id,\n toolName: toolCall.function.name,\n });\n }\n\n toolCallBuffers.set(index, {\n id: toolCall.id || '',\n name: toolCall.function?.name || '',\n args: '',\n });\n }\n\n const buffer = toolCallBuffers.get(index)!;\n\n if (toolCall.id) {\n buffer.id = toolCall.id;\n }\n\n if (toolCall.function?.name) {\n buffer.name = toolCall.function.name;\n }\n\n if (toolCall.function?.arguments) {\n buffer.args += toolCall.function.arguments;\n controller.enqueue({\n type: 'tool-input-delta',\n id: buffer.id,\n delta: toolCall.function.arguments,\n });\n\n // Check if tool call is complete (parsable JSON)\n try {\n JSON.parse(buffer.args);\n if (buffer.id && buffer.name) {\n controller.enqueue({\n type: 'tool-input-end',\n id: buffer.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.args,\n });\n\n toolCallBuffers.set(index, {\n id: buffer.id,\n name: buffer.name,\n args: buffer.args,\n sent: true,\n });\n }\n } catch {\n // Not complete JSON yet, continue buffering\n }\n }\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // Don't send tool calls again - they've already been sent when complete\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: 'finish',\n finishReason: mapFinishReason(choice.finish_reason),\n usage: data.usage\n ? {\n inputTokens: data.usage.prompt_tokens || 0,\n outputTokens: data.usage.completion_tokens || 0,\n totalTokens: data.usage.total_tokens || 0,\n }\n : {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n },\n });\n }\n } catch (e) {\n console.error('Error parsing SSE data:', e);\n }\n }\n }\n }\n } catch (error) {\n controller.error(error);\n }\n },\n });\n\n return {\n stream,\n request: { body: JSON.stringify(body) },\n response: { headers: Object.fromEntries(response.headers.entries()) },\n warnings: [],\n };\n }\n}\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkF6EJEELE_cjs = require('./chunk-F6EJEELE.cjs');
|
|
4
|
+
var chunkS7UXT3V4_cjs = require('./chunk-S7UXT3V4.cjs');
|
|
5
5
|
var chunk4L3P3PCP_cjs = require('./chunk-4L3P3PCP.cjs');
|
|
6
6
|
var chunkEBVYYC2Q_cjs = require('./chunk-EBVYYC2Q.cjs');
|
|
7
7
|
|
|
8
8
|
// src/voice/voice.ts
|
|
9
9
|
var _MastraVoice_decorators, _init, _a;
|
|
10
|
-
_MastraVoice_decorators = [
|
|
10
|
+
_MastraVoice_decorators = [chunkF6EJEELE_cjs.InstrumentClass({
|
|
11
11
|
prefix: "voice",
|
|
12
12
|
excludeMethods: ["__setTools", "__setLogger", "__setTelemetry", "#log"]
|
|
13
13
|
})];
|
|
@@ -155,7 +155,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
155
155
|
} else if (this.speakProvider) {
|
|
156
156
|
return this.speakProvider.speak(input, options);
|
|
157
157
|
}
|
|
158
|
-
throw new
|
|
158
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
159
159
|
id: "VOICE_COMPOSITE_NO_SPEAK_PROVIDER",
|
|
160
160
|
text: "No speak provider or realtime provider configured",
|
|
161
161
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -168,7 +168,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
168
168
|
} else if (this.listenProvider) {
|
|
169
169
|
return await this.listenProvider.listen(audioStream, options);
|
|
170
170
|
}
|
|
171
|
-
throw new
|
|
171
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
172
172
|
id: "VOICE_COMPOSITE_NO_LISTEN_PROVIDER",
|
|
173
173
|
text: "No listen provider or realtime provider configured",
|
|
174
174
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -181,7 +181,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
181
181
|
} else if (this.speakProvider) {
|
|
182
182
|
return this.speakProvider.getSpeakers();
|
|
183
183
|
}
|
|
184
|
-
throw new
|
|
184
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
185
185
|
id: "VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER",
|
|
186
186
|
text: "No speak provider or realtime provider configured",
|
|
187
187
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -194,7 +194,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
194
194
|
} else if (this.listenProvider) {
|
|
195
195
|
return this.listenProvider.getListener();
|
|
196
196
|
}
|
|
197
|
-
throw new
|
|
197
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
198
198
|
id: "VOICE_COMPOSITE_NO_LISTENER_PROVIDER",
|
|
199
199
|
text: "No listener provider or realtime provider configured",
|
|
200
200
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -213,7 +213,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
213
213
|
*/
|
|
214
214
|
connect(options) {
|
|
215
215
|
if (!this.realtimeProvider) {
|
|
216
|
-
throw new
|
|
216
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
217
217
|
id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT",
|
|
218
218
|
text: "No realtime provider configured",
|
|
219
219
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -228,7 +228,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
228
228
|
*/
|
|
229
229
|
send(audioData) {
|
|
230
230
|
if (!this.realtimeProvider) {
|
|
231
|
-
throw new
|
|
231
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
232
232
|
id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND",
|
|
233
233
|
text: "No realtime provider configured",
|
|
234
234
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -242,7 +242,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
242
242
|
*/
|
|
243
243
|
answer(options) {
|
|
244
244
|
if (!this.realtimeProvider) {
|
|
245
|
-
throw new
|
|
245
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
246
246
|
id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER",
|
|
247
247
|
text: "No realtime provider configured",
|
|
248
248
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -276,7 +276,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
276
276
|
*/
|
|
277
277
|
close() {
|
|
278
278
|
if (!this.realtimeProvider) {
|
|
279
|
-
throw new
|
|
279
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
280
280
|
id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE",
|
|
281
281
|
text: "No realtime provider configured",
|
|
282
282
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -292,7 +292,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
292
292
|
*/
|
|
293
293
|
on(event, callback) {
|
|
294
294
|
if (!this.realtimeProvider) {
|
|
295
|
-
throw new
|
|
295
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
296
296
|
id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON",
|
|
297
297
|
text: "No realtime provider configured",
|
|
298
298
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -308,7 +308,7 @@ var CompositeVoice = class extends exports.MastraVoice {
|
|
|
308
308
|
*/
|
|
309
309
|
off(event, callback) {
|
|
310
310
|
if (!this.realtimeProvider) {
|
|
311
|
-
throw new
|
|
311
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
312
312
|
id: "VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF",
|
|
313
313
|
text: "No realtime provider configured",
|
|
314
314
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -325,7 +325,7 @@ var DefaultVoice = class extends exports.MastraVoice {
|
|
|
325
325
|
super();
|
|
326
326
|
}
|
|
327
327
|
async speak(_input) {
|
|
328
|
-
throw new
|
|
328
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
329
329
|
id: "VOICE_DEFAULT_NO_SPEAK_PROVIDER",
|
|
330
330
|
text: "No voice provider configured",
|
|
331
331
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -333,7 +333,7 @@ var DefaultVoice = class extends exports.MastraVoice {
|
|
|
333
333
|
});
|
|
334
334
|
}
|
|
335
335
|
async listen(_input) {
|
|
336
|
-
throw new
|
|
336
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
337
337
|
id: "VOICE_DEFAULT_NO_LISTEN_PROVIDER",
|
|
338
338
|
text: "No voice provider configured",
|
|
339
339
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -341,7 +341,7 @@ var DefaultVoice = class extends exports.MastraVoice {
|
|
|
341
341
|
});
|
|
342
342
|
}
|
|
343
343
|
async getSpeakers() {
|
|
344
|
-
throw new
|
|
344
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
345
345
|
id: "VOICE_DEFAULT_NO_SPEAKERS_PROVIDER",
|
|
346
346
|
text: "No voice provider configured",
|
|
347
347
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -349,7 +349,7 @@ var DefaultVoice = class extends exports.MastraVoice {
|
|
|
349
349
|
});
|
|
350
350
|
}
|
|
351
351
|
async getListener() {
|
|
352
|
-
throw new
|
|
352
|
+
throw new chunkS7UXT3V4_cjs.MastraError({
|
|
353
353
|
id: "VOICE_DEFAULT_NO_LISTENER_PROVIDER",
|
|
354
354
|
text: "No voice provider configured",
|
|
355
355
|
domain: "MASTRA_VOICE" /* MASTRA_VOICE */,
|
|
@@ -360,5 +360,5 @@ var DefaultVoice = class extends exports.MastraVoice {
|
|
|
360
360
|
|
|
361
361
|
exports.CompositeVoice = CompositeVoice;
|
|
362
362
|
exports.DefaultVoice = DefaultVoice;
|
|
363
|
-
//# sourceMappingURL=chunk-
|
|
364
|
-
//# sourceMappingURL=chunk-
|
|
363
|
+
//# sourceMappingURL=chunk-UTEH2LCJ.cjs.map
|
|
364
|
+
//# sourceMappingURL=chunk-UTEH2LCJ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/voice/voice.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":["MastraVoice","__decoratorStart","__decorateElement","__runInitializers","MastraError"],"mappings":"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","file":"chunk-WECJNCGT.cjs","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice;\n output?: MastraVoice;\n realtime?: MastraVoice;\n }) {\n super();\n this.speakProvider = output || speakProvider;\n this.listenProvider = input || listenProvider;\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/voice/voice.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":["MastraVoice","__decoratorStart","__decorateElement","__runInitializers","MastraError"],"mappings":"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","file":"chunk-UTEH2LCJ.cjs","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice;\n output?: MastraVoice;\n realtime?: MastraVoice;\n }) {\n super();\n this.speakProvider = output || speakProvider;\n this.listenProvider = input || listenProvider;\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createStep, createWorkflow, Agent, Workflow } from './chunk-
|
|
2
|
-
import { MastraError } from './chunk-
|
|
1
|
+
import { createStep, createWorkflow, Agent, Workflow } from './chunk-JKLLXBOY.js';
|
|
2
|
+
import { MastraError } from './chunk-WHFNGECY.js';
|
|
3
3
|
import { randomUUID } from 'crypto';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
|
|
@@ -642,5 +642,5 @@ async function runScorers(scorers, targetResult, item) {
|
|
|
642
642
|
}
|
|
643
643
|
|
|
644
644
|
export { MastraScorer, createScorer, runExperiment };
|
|
645
|
-
//# sourceMappingURL=chunk-
|
|
646
|
-
//# sourceMappingURL=chunk-
|
|
645
|
+
//# sourceMappingURL=chunk-VWO3JJXC.js.map
|
|
646
|
+
//# sourceMappingURL=chunk-VWO3JJXC.js.map
|