@mastra/core 0.21.0-alpha.1 → 0.21.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/agent/agent.d.ts +1 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.types.d.ts +2 -2
- package/dist/agent/agent.types.d.ts.map +1 -1
- package/dist/agent/index.cjs +13 -13
- 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/message-list/index.d.ts +4 -4
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/message-list/prompt/attachments-to-parts.d.ts +1 -1
- package/dist/agent/message-list/prompt/attachments-to-parts.d.ts.map +1 -1
- package/dist/agent/message-list/prompt/convert-file.d.ts +2 -2
- package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -1
- package/dist/agent/message-list/types.d.ts +2 -2
- package/dist/agent/message-list/types.d.ts.map +1 -1
- package/dist/agent/message-list/utils/convert-messages.d.ts +2 -2
- package/dist/agent/types.d.ts +2 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/utils.d.ts +24 -24
- package/dist/agent/utils.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +32 -32
- package/dist/ai-tracing/index.js +1 -1
- package/dist/chunk-3ORA5EFD.cjs +168 -0
- package/dist/chunk-3ORA5EFD.cjs.map +1 -0
- package/dist/{chunk-LOUJSR3F.cjs → chunk-4PRV2Y55.cjs} +5 -5
- package/dist/{chunk-LOUJSR3F.cjs.map → chunk-4PRV2Y55.cjs.map} +1 -1
- package/dist/chunk-5NR2GY4U.js +165 -0
- package/dist/chunk-5NR2GY4U.js.map +1 -0
- package/dist/{chunk-SL534RIL.cjs → chunk-EBF2GIFE.cjs} +12 -12
- package/dist/{chunk-SL534RIL.cjs.map → chunk-EBF2GIFE.cjs.map} +1 -1
- package/dist/{chunk-SSDFGDFJ.cjs → chunk-F3X3A5KA.cjs} +30 -16
- package/dist/chunk-F3X3A5KA.cjs.map +1 -0
- package/dist/{chunk-UPRLKS2E.cjs → chunk-FVVPBIUS.cjs} +16 -16
- package/dist/chunk-FVVPBIUS.cjs.map +1 -0
- package/dist/{chunk-ONHTH5RH.js → chunk-GOCHWSR7.js} +4 -4
- package/dist/chunk-GOCHWSR7.js.map +1 -0
- package/dist/chunk-HF3GZRFP.cjs +9 -0
- package/dist/chunk-HF3GZRFP.cjs.map +1 -0
- package/dist/{chunk-74P72XBM.cjs → chunk-JRNJL27F.cjs} +4 -4
- package/dist/chunk-JRNJL27F.cjs.map +1 -0
- package/dist/{chunk-R3W5CNKP.js → chunk-K7INT7EE.js} +10 -11
- package/dist/chunk-K7INT7EE.js.map +1 -0
- package/dist/{chunk-RXGL66T6.cjs → chunk-KJZFXTQR.cjs} +56 -57
- package/dist/chunk-KJZFXTQR.cjs.map +1 -0
- package/dist/{chunk-2VSJYKJF.js → chunk-KK5LUATU.js} +4 -4
- package/dist/{chunk-2VSJYKJF.js.map → chunk-KK5LUATU.js.map} +1 -1
- package/dist/{chunk-24L3LVID.js → chunk-KUFI34FC.js} +4 -4
- package/dist/{chunk-24L3LVID.js.map → chunk-KUFI34FC.js.map} +1 -1
- package/dist/{chunk-UQCUAYWV.js → chunk-LN5I7LG3.js} +3 -3
- package/dist/{chunk-UQCUAYWV.js.map → chunk-LN5I7LG3.js.map} +1 -1
- package/dist/{chunk-SQXKJWFX.cjs → chunk-M4ZLVM2E.cjs} +12 -12
- package/dist/{chunk-SQXKJWFX.cjs.map → chunk-M4ZLVM2E.cjs.map} +1 -1
- package/dist/{chunk-PPW3SAWO.js → chunk-NOY6XIU4.js} +4 -4
- package/dist/{chunk-PPW3SAWO.js.map → chunk-NOY6XIU4.js.map} +1 -1
- package/dist/{chunk-XQ5A3ISB.js → chunk-OBNF7UO2.js} +3 -3
- package/dist/{chunk-XQ5A3ISB.js.map → chunk-OBNF7UO2.js.map} +1 -1
- package/dist/{chunk-624FF2ZG.js → chunk-OVJ2WBFK.js} +2 -2
- package/dist/{chunk-624FF2ZG.js.map → chunk-OVJ2WBFK.js.map} +1 -1
- package/dist/chunk-RKXWLG33.js +7 -0
- package/dist/chunk-RKXWLG33.js.map +1 -0
- package/dist/{chunk-6OJROHMC.cjs → chunk-S4FM66W4.cjs} +11 -11
- package/dist/{chunk-6OJROHMC.cjs.map → chunk-S4FM66W4.cjs.map} +1 -1
- package/dist/{chunk-DUMAWQ7I.cjs → chunk-SJKHIH44.cjs} +4 -4
- package/dist/{chunk-DUMAWQ7I.cjs.map → chunk-SJKHIH44.cjs.map} +1 -1
- package/dist/{chunk-2BTTHMDJ.cjs → chunk-T3MCLRO6.cjs} +2 -2
- package/dist/{chunk-2BTTHMDJ.cjs.map → chunk-T3MCLRO6.cjs.map} +1 -1
- package/dist/{chunk-XL5MZTLP.js → chunk-TGWK6V72.js} +3 -3
- package/dist/chunk-TGWK6V72.js.map +1 -0
- package/dist/{chunk-33JJWAVI.js → chunk-VNVHOWW4.js} +7 -7
- package/dist/{chunk-33JJWAVI.js.map → chunk-VNVHOWW4.js.map} +1 -1
- package/dist/{chunk-Y2PKC5BX.cjs → chunk-W5YMECZP.cjs} +12 -9
- package/dist/chunk-W5YMECZP.cjs.map +1 -0
- package/dist/{chunk-EQV7XSTY.cjs → chunk-WU7LIV3L.cjs} +12 -12
- package/dist/{chunk-EQV7XSTY.cjs.map → chunk-WU7LIV3L.cjs.map} +1 -1
- package/dist/{chunk-Q4YVANA4.js → chunk-X3ECC3CB.js} +5 -5
- package/dist/{chunk-Q4YVANA4.js.map → chunk-X3ECC3CB.js.map} +1 -1
- package/dist/{chunk-TTJM3STK.cjs → chunk-X6EDVW3U.cjs} +6 -6
- package/dist/{chunk-TTJM3STK.cjs.map → chunk-X6EDVW3U.cjs.map} +1 -1
- package/dist/{chunk-75CDUY5G.js → chunk-Y3IFARBC.js} +7 -4
- package/dist/chunk-Y3IFARBC.js.map +1 -0
- package/dist/{chunk-YUV3LZMY.js → chunk-YWLOJRIX.js} +26 -12
- package/dist/chunk-YWLOJRIX.js.map +1 -0
- package/dist/index.cjs +50 -50
- package/dist/index.js +10 -10
- package/dist/llm/index.cjs +6 -6
- package/dist/llm/index.d.ts +2 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -1
- package/dist/llm/model/base.types.d.ts +2 -2
- package/dist/llm/model/base.types.d.ts.map +1 -1
- package/dist/llm/model/gateways/base.d.ts +1 -1
- package/dist/llm/model/gateways/base.d.ts.map +1 -1
- package/dist/llm/model/gateways/models-dev.d.ts +1 -1
- package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
- package/dist/llm/model/gateways/netlify.d.ts +1 -1
- package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
- package/dist/llm/model/model.d.ts +2 -2
- package/dist/llm/model/model.d.ts.map +1 -1
- package/dist/llm/model/model.loop.d.ts +2 -2
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/model.loop.types.d.ts +1 -1
- package/dist/llm/model/model.loop.types.d.ts.map +1 -1
- package/dist/llm/model/router.d.ts +1 -1
- package/dist/llm/model/router.d.ts.map +1 -1
- package/dist/llm/model/shared.types.d.ts +2 -2
- 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/loop.d.ts +1 -1
- package/dist/loop/loop.d.ts.map +1 -1
- package/dist/loop/telemetry/index.d.ts +1 -1
- package/dist/loop/telemetry/index.d.ts.map +1 -1
- package/dist/loop/test-utils/streamObject.d.ts +1 -1
- package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
- package/dist/loop/test-utils/utils.d.ts +2 -2
- package/dist/loop/test-utils/utils.d.ts.map +1 -1
- package/dist/loop/types.d.ts +2 -2
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +1 -1
- 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 +1 -1
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +1 -1
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
- package/dist/loop/workflows/run-state.d.ts +1 -1
- package/dist/loop/workflows/run-state.d.ts.map +1 -1
- package/dist/loop/workflows/schema.d.ts +5 -5
- package/dist/loop/workflows/schema.d.ts.map +1 -1
- package/dist/loop/workflows/stream.d.ts +1 -1
- package/dist/loop/workflows/stream.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/memory/memory.d.ts +2 -2
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/memory/types.d.ts +3 -3
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/models-dev-3VEABUH4.js +3 -0
- package/dist/{models-dev-A334FF64.js.map → models-dev-3VEABUH4.js.map} +1 -1
- package/dist/models-dev-L42ORGVT.cjs +12 -0
- package/dist/{models-dev-ECOIQLLK.cjs.map → models-dev-L42ORGVT.cjs.map} +1 -1
- package/dist/netlify-53AMH53Z.cjs +12 -0
- package/dist/{netlify-WFAL2AA4.cjs.map → netlify-53AMH53Z.cjs.map} +1 -1
- package/dist/netlify-NP3YFNSZ.js +3 -0
- package/dist/{netlify-CEYZ5O54.js.map → netlify-NP3YFNSZ.js.map} +1 -1
- package/dist/processors/index.cjs +11 -11
- package/dist/processors/index.js +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/run-experiment/index.d.ts +1 -1
- package/dist/scores/run-experiment/index.d.ts.map +1 -1
- package/dist/scores/scoreTraces/index.cjs +8 -8
- package/dist/scores/scoreTraces/index.cjs.map +1 -1
- package/dist/scores/scoreTraces/index.js +3 -3
- package/dist/scores/scoreTraces/index.js.map +1 -1
- package/dist/scores/types.d.ts +1 -1
- package/dist/scores/types.d.ts.map +1 -1
- package/dist/storage/index.cjs +3 -3
- package/dist/storage/index.js +1 -1
- package/dist/stream/aisdk/v4/input.d.ts +1 -1
- package/dist/stream/aisdk/v4/input.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/content.d.ts +2 -2
- package/dist/stream/aisdk/v5/compat/content.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts +2 -2
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/ui-message.d.ts +1 -1
- package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/validation.d.ts +1 -1
- package/dist/stream/aisdk/v5/compat/validation.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/execute.d.ts +2 -2
- package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/input.d.ts +1 -1
- package/dist/stream/aisdk/v5/input.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/output-helpers.d.ts +9 -9
- package/dist/stream/aisdk/v5/output-helpers.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/output.d.ts +38 -38
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/test-utils.d.ts +1 -1
- package/dist/stream/aisdk/v5/test-utils.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/transform.d.ts +2 -2
- package/dist/stream/aisdk/v5/transform.d.ts.map +1 -1
- package/dist/stream/base/input.d.ts +1 -1
- package/dist/stream/base/input.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts +23 -23
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/base/schema.d.ts +1 -1
- package/dist/stream/base/schema.d.ts.map +1 -1
- package/dist/stream/index.cjs +10 -10
- package/dist/stream/index.js +2 -2
- package/dist/stream/types.d.ts +4 -4
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +6 -6
- package/dist/test-utils/llm-mock.cjs.map +1 -1
- package/dist/test-utils/llm-mock.d.ts +1 -1
- package/dist/test-utils/llm-mock.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.js +3 -3
- package/dist/test-utils/llm-mock.js.map +1 -1
- package/dist/tools/types.d.ts +2 -2
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils.cjs +17 -17
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/vector/embed.d.ts +2 -2
- package/dist/vector/embed.d.ts.map +1 -1
- package/dist/vector/index.cjs +4 -4
- package/dist/vector/index.js +1 -1
- package/dist/vector/vector.d.ts +2 -2
- package/dist/vector/vector.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 +1 -1
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +15 -19
- package/dist/chunk-3ZEJSGTJ.cjs +0 -9289
- package/dist/chunk-3ZEJSGTJ.cjs.map +0 -1
- package/dist/chunk-74P72XBM.cjs.map +0 -1
- package/dist/chunk-75CDUY5G.js.map +0 -1
- package/dist/chunk-BLPOOPRL.js +0 -3164
- package/dist/chunk-BLPOOPRL.js.map +0 -1
- package/dist/chunk-ILZI4MEU.js +0 -9263
- package/dist/chunk-ILZI4MEU.js.map +0 -1
- package/dist/chunk-ONHTH5RH.js.map +0 -1
- package/dist/chunk-QMKBXESK.cjs +0 -3186
- package/dist/chunk-QMKBXESK.cjs.map +0 -1
- package/dist/chunk-R3W5CNKP.js.map +0 -1
- package/dist/chunk-RXGL66T6.cjs.map +0 -1
- package/dist/chunk-SSDFGDFJ.cjs.map +0 -1
- package/dist/chunk-UPRLKS2E.cjs.map +0 -1
- package/dist/chunk-XL5MZTLP.js.map +0 -1
- package/dist/chunk-Y2PKC5BX.cjs.map +0 -1
- package/dist/chunk-YUV3LZMY.js.map +0 -1
- package/dist/models-dev-A334FF64.js +0 -3
- package/dist/models-dev-ECOIQLLK.cjs +0 -12
- package/dist/netlify-CEYZ5O54.js +0 -3
- package/dist/netlify-WFAL2AA4.cjs +0 -12
|
@@ -1,132 +1,132 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkT3MCLRO6_cjs = require('../chunk-T3MCLRO6.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
Object.defineProperty(exports, "AISpanType", {
|
|
8
8
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
9
|
+
get: function () { return chunkT3MCLRO6_cjs.AISpanType; }
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "AITracingEventType", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkT3MCLRO6_cjs.AITracingEventType; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "BaseAISpan", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkT3MCLRO6_cjs.BaseAISpan; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "BaseAITracing", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkT3MCLRO6_cjs.BaseAITracing; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "CloudExporter", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkT3MCLRO6_cjs.CloudExporter; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "ConsoleExporter", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkT3MCLRO6_cjs.ConsoleExporter; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "DefaultAISpan", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkT3MCLRO6_cjs.DefaultAISpan; }
|
|
34
34
|
});
|
|
35
35
|
Object.defineProperty(exports, "DefaultAITracing", {
|
|
36
36
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkT3MCLRO6_cjs.DefaultAITracing; }
|
|
38
38
|
});
|
|
39
39
|
Object.defineProperty(exports, "DefaultExporter", {
|
|
40
40
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkT3MCLRO6_cjs.DefaultExporter; }
|
|
42
42
|
});
|
|
43
43
|
Object.defineProperty(exports, "InternalSpans", {
|
|
44
44
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunkT3MCLRO6_cjs.InternalSpans; }
|
|
46
46
|
});
|
|
47
47
|
Object.defineProperty(exports, "NoOpAISpan", {
|
|
48
48
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunkT3MCLRO6_cjs.NoOpAISpan; }
|
|
50
50
|
});
|
|
51
51
|
Object.defineProperty(exports, "SamplingStrategyType", {
|
|
52
52
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkT3MCLRO6_cjs.SamplingStrategyType; }
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(exports, "SensitiveDataFilter", {
|
|
56
56
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunkT3MCLRO6_cjs.SensitiveDataFilter; }
|
|
58
58
|
});
|
|
59
59
|
Object.defineProperty(exports, "clearAITracingRegistry", {
|
|
60
60
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkT3MCLRO6_cjs.clearAITracingRegistry; }
|
|
62
62
|
});
|
|
63
63
|
Object.defineProperty(exports, "deepClean", {
|
|
64
64
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkT3MCLRO6_cjs.deepClean; }
|
|
66
66
|
});
|
|
67
67
|
Object.defineProperty(exports, "getAITracing", {
|
|
68
68
|
enumerable: true,
|
|
69
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunkT3MCLRO6_cjs.getAITracing; }
|
|
70
70
|
});
|
|
71
71
|
Object.defineProperty(exports, "getAllAITracing", {
|
|
72
72
|
enumerable: true,
|
|
73
|
-
get: function () { return
|
|
73
|
+
get: function () { return chunkT3MCLRO6_cjs.getAllAITracing; }
|
|
74
74
|
});
|
|
75
75
|
Object.defineProperty(exports, "getDefaultAITracing", {
|
|
76
76
|
enumerable: true,
|
|
77
|
-
get: function () { return
|
|
77
|
+
get: function () { return chunkT3MCLRO6_cjs.getDefaultAITracing; }
|
|
78
78
|
});
|
|
79
79
|
Object.defineProperty(exports, "getOrCreateSpan", {
|
|
80
80
|
enumerable: true,
|
|
81
|
-
get: function () { return
|
|
81
|
+
get: function () { return chunkT3MCLRO6_cjs.getOrCreateSpan; }
|
|
82
82
|
});
|
|
83
83
|
Object.defineProperty(exports, "getSelectedAITracing", {
|
|
84
84
|
enumerable: true,
|
|
85
|
-
get: function () { return
|
|
85
|
+
get: function () { return chunkT3MCLRO6_cjs.getSelectedAITracing; }
|
|
86
86
|
});
|
|
87
87
|
Object.defineProperty(exports, "getValidTraceId", {
|
|
88
88
|
enumerable: true,
|
|
89
|
-
get: function () { return
|
|
89
|
+
get: function () { return chunkT3MCLRO6_cjs.getValidTraceId; }
|
|
90
90
|
});
|
|
91
91
|
Object.defineProperty(exports, "hasAITracing", {
|
|
92
92
|
enumerable: true,
|
|
93
|
-
get: function () { return
|
|
93
|
+
get: function () { return chunkT3MCLRO6_cjs.hasAITracing; }
|
|
94
94
|
});
|
|
95
95
|
Object.defineProperty(exports, "isMastra", {
|
|
96
96
|
enumerable: true,
|
|
97
|
-
get: function () { return
|
|
97
|
+
get: function () { return chunkT3MCLRO6_cjs.isMastra; }
|
|
98
98
|
});
|
|
99
99
|
Object.defineProperty(exports, "omitKeys", {
|
|
100
100
|
enumerable: true,
|
|
101
|
-
get: function () { return
|
|
101
|
+
get: function () { return chunkT3MCLRO6_cjs.omitKeys; }
|
|
102
102
|
});
|
|
103
103
|
Object.defineProperty(exports, "registerAITracing", {
|
|
104
104
|
enumerable: true,
|
|
105
|
-
get: function () { return
|
|
105
|
+
get: function () { return chunkT3MCLRO6_cjs.registerAITracing; }
|
|
106
106
|
});
|
|
107
107
|
Object.defineProperty(exports, "selectFields", {
|
|
108
108
|
enumerable: true,
|
|
109
|
-
get: function () { return
|
|
109
|
+
get: function () { return chunkT3MCLRO6_cjs.selectFields; }
|
|
110
110
|
});
|
|
111
111
|
Object.defineProperty(exports, "setSelector", {
|
|
112
112
|
enumerable: true,
|
|
113
|
-
get: function () { return
|
|
113
|
+
get: function () { return chunkT3MCLRO6_cjs.setSelector; }
|
|
114
114
|
});
|
|
115
115
|
Object.defineProperty(exports, "setupAITracing", {
|
|
116
116
|
enumerable: true,
|
|
117
|
-
get: function () { return
|
|
117
|
+
get: function () { return chunkT3MCLRO6_cjs.setupAITracing; }
|
|
118
118
|
});
|
|
119
119
|
Object.defineProperty(exports, "shutdownAITracingRegistry", {
|
|
120
120
|
enumerable: true,
|
|
121
|
-
get: function () { return
|
|
121
|
+
get: function () { return chunkT3MCLRO6_cjs.shutdownAITracingRegistry; }
|
|
122
122
|
});
|
|
123
123
|
Object.defineProperty(exports, "unregisterAITracing", {
|
|
124
124
|
enumerable: true,
|
|
125
|
-
get: function () { return
|
|
125
|
+
get: function () { return chunkT3MCLRO6_cjs.unregisterAITracing; }
|
|
126
126
|
});
|
|
127
127
|
Object.defineProperty(exports, "wrapMastra", {
|
|
128
128
|
enumerable: true,
|
|
129
|
-
get: function () { return
|
|
129
|
+
get: function () { return chunkT3MCLRO6_cjs.wrapMastra; }
|
|
130
130
|
});
|
|
131
131
|
//# sourceMappingURL=index.cjs.map
|
|
132
132
|
//# sourceMappingURL=index.cjs.map
|
package/dist/ai-tracing/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { AISpanType, AITracingEventType, BaseAISpan, BaseAITracing, CloudExporter, ConsoleExporter, DefaultAISpan, DefaultAITracing, DefaultExporter, InternalSpans, NoOpAISpan, SamplingStrategyType, SensitiveDataFilter, clearAITracingRegistry, deepClean, getAITracing, getAllAITracing, getDefaultAITracing, getOrCreateSpan, getSelectedAITracing, getValidTraceId, hasAITracing, isMastra, omitKeys, registerAITracing, selectFields, setSelector, setupAITracing, shutdownAITracingRegistry, unregisterAITracing, wrapMastra } from '../chunk-
|
|
1
|
+
export { AISpanType, AITracingEventType, BaseAISpan, BaseAITracing, CloudExporter, ConsoleExporter, DefaultAISpan, DefaultAITracing, DefaultExporter, InternalSpans, NoOpAISpan, SamplingStrategyType, SensitiveDataFilter, clearAITracingRegistry, deepClean, getAITracing, getAllAITracing, getDefaultAITracing, getOrCreateSpan, getSelectedAITracing, getValidTraceId, hasAITracing, isMastra, omitKeys, registerAITracing, selectFields, setSelector, setupAITracing, shutdownAITracingRegistry, unregisterAITracing, wrapMastra } from '../chunk-OVJ2WBFK.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkHF3GZRFP_cjs = require('./chunk-HF3GZRFP.cjs');
|
|
4
|
+
var anthropicV5 = require('@ai-sdk/anthropic-v5');
|
|
5
|
+
var googleV5 = require('@ai-sdk/google-v5');
|
|
6
|
+
var openaiCompatibleV5 = require('@ai-sdk/openai-compatible-v5');
|
|
7
|
+
var openaiV5 = require('@ai-sdk/openai-v5');
|
|
8
|
+
var xaiV5 = require('@ai-sdk/xai-v5');
|
|
9
|
+
var aiSdkProviderV5 = require('@openrouter/ai-sdk-provider-v5');
|
|
10
|
+
|
|
11
|
+
// src/llm/model/gateway-resolver.ts
|
|
12
|
+
function parseModelRouterId(routerId, gatewayPrefix) {
|
|
13
|
+
if (gatewayPrefix && !routerId.startsWith(`${gatewayPrefix}/`)) {
|
|
14
|
+
throw new Error(`Expected ${gatewayPrefix}/ in model router ID ${routerId}`);
|
|
15
|
+
}
|
|
16
|
+
const idParts = routerId.split("/");
|
|
17
|
+
if (gatewayPrefix && idParts.length < 3) {
|
|
18
|
+
throw new Error(
|
|
19
|
+
`Expected atleast 3 id parts ${gatewayPrefix}/provider/model, but only saw ${idParts.length} in ${routerId}`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
const providerId = idParts.at(gatewayPrefix ? 1 : 0);
|
|
23
|
+
const modelId = idParts.slice(gatewayPrefix ? 2 : 1).join(`/`);
|
|
24
|
+
if (!routerId.includes(`/`) || !providerId || !modelId) {
|
|
25
|
+
throw new Error(
|
|
26
|
+
`Attempted to parse provider/model from ${routerId} but this ID doesn't appear to contain a provider`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
providerId,
|
|
31
|
+
modelId
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// src/llm/model/gateways/constants.ts
|
|
36
|
+
var PROVIDERS_WITH_INSTALLED_PACKAGES = ["anthropic", "google", "openai", "openrouter", "xai"];
|
|
37
|
+
var EXCLUDED_PROVIDERS = ["github-copilot"];
|
|
38
|
+
|
|
39
|
+
// src/llm/model/gateways/models-dev.ts
|
|
40
|
+
var OPENAI_COMPATIBLE_OVERRIDES = {
|
|
41
|
+
cerebras: {
|
|
42
|
+
url: "https://api.cerebras.ai/v1"
|
|
43
|
+
},
|
|
44
|
+
mistral: {
|
|
45
|
+
url: "https://api.mistral.ai/v1"
|
|
46
|
+
},
|
|
47
|
+
groq: {
|
|
48
|
+
url: "https://api.groq.com/openai/v1"
|
|
49
|
+
},
|
|
50
|
+
togetherai: {
|
|
51
|
+
url: "https://api.together.xyz/v1"
|
|
52
|
+
},
|
|
53
|
+
deepinfra: {
|
|
54
|
+
url: "https://api.deepinfra.com/v1/openai"
|
|
55
|
+
},
|
|
56
|
+
perplexity: {
|
|
57
|
+
url: "https://api.perplexity.ai"
|
|
58
|
+
},
|
|
59
|
+
vercel: {
|
|
60
|
+
url: "https://ai-gateway.vercel.sh/v1",
|
|
61
|
+
apiKeyEnvVar: "AI_GATEWAY_API_KEY"
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var ModelsDevGateway = class extends chunkHF3GZRFP_cjs.MastraModelGateway {
|
|
65
|
+
name = "models.dev";
|
|
66
|
+
prefix = void 0;
|
|
67
|
+
// No prefix for registry gateway
|
|
68
|
+
providerConfigs = {};
|
|
69
|
+
constructor(providerConfigs) {
|
|
70
|
+
super();
|
|
71
|
+
if (providerConfigs) this.providerConfigs = providerConfigs;
|
|
72
|
+
}
|
|
73
|
+
async fetchProviders() {
|
|
74
|
+
const response = await fetch("https://models.dev/api.json");
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);
|
|
77
|
+
}
|
|
78
|
+
const data = await response.json();
|
|
79
|
+
const providerConfigs = {};
|
|
80
|
+
for (const [providerId, providerInfo] of Object.entries(data)) {
|
|
81
|
+
if (EXCLUDED_PROVIDERS.includes(providerId)) continue;
|
|
82
|
+
if (!providerInfo || typeof providerInfo !== "object" || !providerInfo.models) continue;
|
|
83
|
+
const normalizedId = providerId;
|
|
84
|
+
const isOpenAICompatible = providerInfo.npm === "@ai-sdk/openai-compatible" || providerInfo.npm === "@ai-sdk/gateway" || // Vercel AI Gateway is OpenAI-compatible
|
|
85
|
+
normalizedId in OPENAI_COMPATIBLE_OVERRIDES;
|
|
86
|
+
const hasInstalledPackage = PROVIDERS_WITH_INSTALLED_PACKAGES.includes(providerId);
|
|
87
|
+
const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;
|
|
88
|
+
if (isOpenAICompatible || hasInstalledPackage || hasApiAndEnv) {
|
|
89
|
+
const modelIds = Object.keys(providerInfo.models).sort();
|
|
90
|
+
const url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;
|
|
91
|
+
if (!hasInstalledPackage && !url) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, "_")}_API_KEY`;
|
|
95
|
+
const apiKeyHeader = !hasInstalledPackage ? OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || "Authorization" : void 0;
|
|
96
|
+
providerConfigs[normalizedId] = {
|
|
97
|
+
url,
|
|
98
|
+
apiKeyEnvVar,
|
|
99
|
+
apiKeyHeader,
|
|
100
|
+
name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),
|
|
101
|
+
models: modelIds,
|
|
102
|
+
docUrl: providerInfo.doc,
|
|
103
|
+
// Include documentation URL if available
|
|
104
|
+
gateway: `models.dev`
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
this.providerConfigs = providerConfigs;
|
|
109
|
+
return providerConfigs;
|
|
110
|
+
}
|
|
111
|
+
buildUrl(routerId, envVars) {
|
|
112
|
+
const { providerId } = parseModelRouterId(routerId);
|
|
113
|
+
const config = this.providerConfigs[providerId];
|
|
114
|
+
if (!config?.url) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const baseUrlEnvVar = `${providerId.toUpperCase().replace(/-/g, "_")}_BASE_URL`;
|
|
118
|
+
const customBaseUrl = envVars?.[baseUrlEnvVar] || process.env[baseUrlEnvVar];
|
|
119
|
+
return customBaseUrl || config.url;
|
|
120
|
+
}
|
|
121
|
+
getApiKey(modelId) {
|
|
122
|
+
const [provider, model] = modelId.split("/");
|
|
123
|
+
if (!provider || !model) {
|
|
124
|
+
throw new Error(`Could not identify provider from model id ${modelId}`);
|
|
125
|
+
}
|
|
126
|
+
const config = this.providerConfigs[provider];
|
|
127
|
+
if (!config) {
|
|
128
|
+
throw new Error(`Could not find config for provider ${provider} with model id ${modelId}`);
|
|
129
|
+
}
|
|
130
|
+
const apiKey = typeof config.apiKeyEnvVar === `string` ? process.env[config.apiKeyEnvVar] : void 0;
|
|
131
|
+
if (!apiKey) {
|
|
132
|
+
throw new Error(`Could not find API key process.env.${config.apiKeyEnvVar} for model id ${modelId}`);
|
|
133
|
+
}
|
|
134
|
+
return Promise.resolve(apiKey);
|
|
135
|
+
}
|
|
136
|
+
async resolveLanguageModel({
|
|
137
|
+
modelId,
|
|
138
|
+
providerId,
|
|
139
|
+
apiKey
|
|
140
|
+
}) {
|
|
141
|
+
const baseURL = this.buildUrl(`${providerId}/${modelId}`);
|
|
142
|
+
switch (providerId) {
|
|
143
|
+
case "openai":
|
|
144
|
+
return openaiV5.createOpenAI({ apiKey }).responses(modelId);
|
|
145
|
+
case "gemini":
|
|
146
|
+
case "google":
|
|
147
|
+
return googleV5.createGoogleGenerativeAI({
|
|
148
|
+
apiKey
|
|
149
|
+
}).chat(modelId);
|
|
150
|
+
case "anthropic":
|
|
151
|
+
return anthropicV5.createAnthropic({ apiKey })(modelId);
|
|
152
|
+
case "openrouter":
|
|
153
|
+
return aiSdkProviderV5.createOpenRouter({ apiKey })(modelId);
|
|
154
|
+
case "xai":
|
|
155
|
+
return xaiV5.createXai({
|
|
156
|
+
apiKey
|
|
157
|
+
})(modelId);
|
|
158
|
+
default:
|
|
159
|
+
if (!baseURL) throw new Error(`No API URL found for ${providerId}/${modelId}`);
|
|
160
|
+
return openaiCompatibleV5.createOpenAICompatible({ name: providerId, apiKey, baseURL }).chatModel(modelId);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
exports.ModelsDevGateway = ModelsDevGateway;
|
|
166
|
+
exports.parseModelRouterId = parseModelRouterId;
|
|
167
|
+
//# sourceMappingURL=chunk-3ORA5EFD.cjs.map
|
|
168
|
+
//# sourceMappingURL=chunk-3ORA5EFD.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/model/gateway-resolver.ts","../src/llm/model/gateways/constants.ts","../src/llm/model/gateways/models-dev.ts"],"names":["MastraModelGateway","createOpenAI","createGoogleGenerativeAI","createAnthropic","createOpenRouter","createXai","createOpenAICompatible"],"mappings":"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","file":"chunk-3ORA5EFD.cjs","sourcesContent":["export type ResolvedModelConfig = {\n url: string | false;\n headers: Record<string, string>;\n resolvedModelId: string;\n fullModelId: string;\n};\n\nexport function parseModelRouterId(routerId: string, gatewayPrefix?: string): { providerId: string; modelId: string } {\n if (gatewayPrefix && !routerId.startsWith(`${gatewayPrefix}/`)) {\n throw new Error(`Expected ${gatewayPrefix}/ in model router ID ${routerId}`);\n }\n\n const idParts = routerId.split('/');\n\n if (gatewayPrefix && idParts.length < 3) {\n throw new Error(\n `Expected atleast 3 id parts ${gatewayPrefix}/provider/model, but only saw ${idParts.length} in ${routerId}`,\n );\n }\n\n const providerId = idParts.at(gatewayPrefix ? 1 : 0);\n const modelId = idParts.slice(gatewayPrefix ? 2 : 1).join(`/`);\n\n if (!routerId.includes(`/`) || !providerId || !modelId) {\n throw new Error(\n `Attempted to parse provider/model from ${routerId} but this ID doesn't appear to contain a provider`,\n );\n }\n\n return {\n providerId,\n modelId,\n };\n}\n","// anything in this list will use the corresponding ai sdk package instead of using openai-compat endpoints\nexport const PROVIDERS_WITH_INSTALLED_PACKAGES = ['anthropic', 'google', 'openai', 'openrouter', 'xai'];\n\n// anything here doesn't show up in model router. for now that's just copilot which requires a special oauth flow\nexport const EXCLUDED_PROVIDERS = ['github-copilot'];\n","import { createAnthropic } from '@ai-sdk/anthropic-v5';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google-v5';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';\nimport { createOpenAI } from '@ai-sdk/openai-v5';\nimport type { LanguageModelV2 } from '@ai-sdk/provider-v5';\nimport { createXai } from '@ai-sdk/xai-v5';\nimport { createOpenRouter } from '@openrouter/ai-sdk-provider-v5';\nimport { parseModelRouterId } from '../gateway-resolver.js';\nimport { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\nimport { EXCLUDED_PROVIDERS, PROVIDERS_WITH_INSTALLED_PACKAGES } from './constants.js';\n\ninterface ModelsDevProviderInfo {\n id: string;\n name: string;\n models: Record<string, any>;\n env?: string[]; // Array of env var names\n api?: string; // Base API URL\n npm?: string; // NPM package name\n doc?: string; // Documentation URL\n}\n\ninterface ModelsDevResponse {\n [providerId: string]: ModelsDevProviderInfo;\n}\n\n// Special cases: providers that are OpenAI-compatible but have their own SDKs\n// These providers work with OpenAI-compatible endpoints even though models.dev\n// might list them with their own SDK packages\n// This constant is ONLY used during generation in fetchProviders() to determine\n// which providers from models.dev should be included in the registry.\n// At runtime, buildUrl() and buildHeaders() use the pre-generated PROVIDER_REGISTRY instead.\nconst OPENAI_COMPATIBLE_OVERRIDES: Record<string, Partial<ProviderConfig>> = {\n cerebras: {\n url: 'https://api.cerebras.ai/v1',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai',\n },\n perplexity: {\n url: 'https://api.perplexity.ai',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n },\n};\n\nexport class ModelsDevGateway extends MastraModelGateway {\n readonly name = 'models.dev';\n readonly prefix = undefined; // No prefix for registry gateway\n\n private providerConfigs: Record<string, ProviderConfig> = {};\n\n constructor(providerConfigs?: Record<string, ProviderConfig>) {\n super();\n if (providerConfigs) this.providerConfigs = providerConfigs;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const response = await fetch('https://models.dev/api.json');\n if (!response.ok) {\n throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);\n }\n\n const data = (await response.json()) as ModelsDevResponse;\n\n const providerConfigs: Record<string, ProviderConfig> = {};\n\n for (const [providerId, providerInfo] of Object.entries(data)) {\n // Skip excluded providers\n if (EXCLUDED_PROVIDERS.includes(providerId)) continue;\n // Skip non-provider entries (if any)\n if (!providerInfo || typeof providerInfo !== 'object' || !providerInfo.models) continue;\n\n // Use provider ID as-is (keep hyphens for consistency)\n const normalizedId = providerId;\n\n // Check if this is OpenAI-compatible based on npm package or overrides\n const isOpenAICompatible =\n providerInfo.npm === '@ai-sdk/openai-compatible' ||\n providerInfo.npm === '@ai-sdk/gateway' || // Vercel AI Gateway is OpenAI-compatible\n normalizedId in OPENAI_COMPATIBLE_OVERRIDES;\n\n // these have their ai sdk provider package installed and don't use openai-compat\n const hasInstalledPackage = PROVIDERS_WITH_INSTALLED_PACKAGES.includes(providerId);\n\n // Also include providers that have an API URL and env vars (likely OpenAI-compatible)\n const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;\n\n if (isOpenAICompatible || hasInstalledPackage || hasApiAndEnv) {\n // Get model IDs from the models object\n const modelIds = Object.keys(providerInfo.models).sort();\n\n // Get the API URL from the provider info or overrides\n const url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;\n\n // Skip if we don't have a URL\n if (!hasInstalledPackage && !url) {\n continue;\n }\n\n // Get the API key env var from the provider info\n // Convert hyphens to underscores for env var naming convention\n const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, '_')}_API_KEY`;\n\n // Determine the API key header (special case for Anthropic)\n const apiKeyHeader = !hasInstalledPackage\n ? OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || 'Authorization'\n : undefined;\n\n providerConfigs[normalizedId] = {\n url,\n apiKeyEnvVar,\n apiKeyHeader,\n name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),\n models: modelIds,\n docUrl: providerInfo.doc, // Include documentation URL if available\n gateway: `models.dev`,\n };\n }\n }\n\n // Store for later use in buildUrl and buildHeaders\n this.providerConfigs = providerConfigs;\n\n return providerConfigs;\n }\n\n buildUrl(routerId: string, envVars?: typeof process.env): string | undefined {\n const { providerId } = parseModelRouterId(routerId);\n\n const config = this.providerConfigs[providerId];\n\n if (!config?.url) {\n return;\n }\n\n // Check for custom base URL from env vars\n const baseUrlEnvVar = `${providerId.toUpperCase().replace(/-/g, '_')}_BASE_URL`;\n const customBaseUrl = envVars?.[baseUrlEnvVar] || process.env[baseUrlEnvVar];\n\n return customBaseUrl || config.url;\n }\n\n getApiKey(modelId: string): Promise<string> {\n const [provider, model] = modelId.split('/');\n if (!provider || !model) {\n throw new Error(`Could not identify provider from model id ${modelId}`);\n }\n const config = this.providerConfigs[provider];\n\n if (!config) {\n throw new Error(`Could not find config for provider ${provider} with model id ${modelId}`);\n }\n\n const apiKey = typeof config.apiKeyEnvVar === `string` ? process.env[config.apiKeyEnvVar] : undefined; // we only use single string env var for models.dev for now\n\n if (!apiKey) {\n throw new Error(`Could not find API key process.env.${config.apiKeyEnvVar} for model id ${modelId}`);\n }\n\n return Promise.resolve(apiKey);\n }\n\n async resolveLanguageModel({\n modelId,\n providerId,\n apiKey,\n }: {\n modelId: string;\n providerId: string;\n apiKey: string;\n }): Promise<LanguageModelV2> {\n const baseURL = this.buildUrl(`${providerId}/${modelId}`);\n\n switch (providerId) {\n case 'openai':\n return createOpenAI({ apiKey }).responses(modelId);\n case 'gemini':\n case 'google':\n return createGoogleGenerativeAI({\n apiKey,\n }).chat(modelId);\n case 'anthropic':\n return createAnthropic({ apiKey })(modelId);\n case 'openrouter':\n return createOpenRouter({ apiKey })(modelId);\n case 'xai':\n return createXai({\n apiKey,\n })(modelId);\n default:\n if (!baseURL) throw new Error(`No API URL found for ${providerId}/${modelId}`);\n return createOpenAICompatible({ name: providerId, apiKey, baseURL }).chatModel(modelId);\n }\n }\n}\n"]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkWM4VQWOZ_cjs = require('./chunk-WM4VQWOZ.cjs');
|
|
4
4
|
var chunk4L3P3PCP_cjs = require('./chunk-4L3P3PCP.cjs');
|
|
5
|
-
var aiV4 = require('ai-v4');
|
|
6
5
|
var ai = require('ai');
|
|
6
|
+
var aiV5 = require('ai-v5');
|
|
7
7
|
|
|
8
8
|
// src/vector/vector.ts
|
|
9
9
|
var MastraVector = class extends chunk4L3P3PCP_cjs.MastraBase {
|
|
@@ -71,12 +71,12 @@ var MastraVector = class extends chunk4L3P3PCP_cjs.MastraBase {
|
|
|
71
71
|
|
|
72
72
|
Object.defineProperty(exports, "embed", {
|
|
73
73
|
enumerable: true,
|
|
74
|
-
get: function () { return
|
|
74
|
+
get: function () { return ai.embed; }
|
|
75
75
|
});
|
|
76
76
|
Object.defineProperty(exports, "embed2", {
|
|
77
77
|
enumerable: true,
|
|
78
|
-
get: function () { return
|
|
78
|
+
get: function () { return aiV5.embed; }
|
|
79
79
|
});
|
|
80
80
|
exports.MastraVector = MastraVector;
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-4PRV2Y55.cjs.map
|
|
82
|
+
//# sourceMappingURL=chunk-4PRV2Y55.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector/vector.ts"],"names":["MastraBase","MastraError"],"mappings":";;;;;;;;AAkBO,IAAe,YAAA,GAAf,cAA2DA,4BAAA,CAAW;AAAA,EAC3E,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,cAAA,EAAgB,SAAA,EAAW,UAAU,CAAA;AAAA,EACrD;AAAA,EAEA,IAAI,cAAA,GAAyB;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAkBA,MAAgB,qBAAA,CAAsB,SAAA,EAAmB,SAAA,EAAmB,MAAA,EAAgB;AAC1F,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,WAAW,CAAA;AAAA,IAC/C,SAAS,SAAA,EAAW;AAClB,MAAA,MAAM,cAAc,IAAIC,6BAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,oCAAA;AAAA,UACJ,IAAA,EAAM,UAAU,SAAS,CAAA,qEAAA,CAAA;AAAA,UACzB,MAAA,EAAA,eAAA;AAAA,UACA,QAAA,EAAA,QAAA;AAAA,UACA,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,MAAM,WAAA;AAAA,IACR;AACA,IAAA,MAAM,cAAc,IAAA,EAAM,SAAA;AAC1B,IAAA,MAAM,iBAAiB,IAAA,EAAM,MAAA;AAC7B,IAAA,IAAI,gBAAgB,SAAA,EAAW;AAC7B,MAAA,IAAA,CAAK,MAAA,EAAQ,IAAA;AAAA,QACX,CAAA,OAAA,EAAU,SAAS,CAAA,sBAAA,EAAyB,WAAW,0BAA0B,cAAc,CAAA,oBAAA;AAAA,OACjG;AACA,MAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,QAAA,IAAA,CAAK,MAAA,EAAQ,IAAA;AAAA,UACX,CAAA,uCAAA,EAA0C,MAAM,CAAA,yCAAA,EAA4C,cAAc,CAAA,4DAAA;AAAA,SAC5G;AAAA,MACF;AAAA,IACF,WAAW,IAAA,EAAM;AACf,MAAA,MAAM,WAAA,GAAc,IAAIA,6BAAA,CAAY;AAAA,QAClC,EAAA,EAAI,0CAAA;AAAA,QACJ,MAAM,CAAA,OAAA,EAAU,SAAS,CAAA,sBAAA,EAAyB,WAAW,oBAAoB,SAAS,CAAA,0BAAA,CAAA;AAAA,QAC1F,MAAA,EAAA,eAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,OAAA,EAAS,EAAE,SAAA,EAAW,WAAA,EAAa,cAAc,SAAA;AAAU,OAC5D,CAAA;AACD,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,MAAM,WAAA;AAAA,IACR,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,IAAIA,6BAAA,CAAY;AAAA,QAClC,EAAA,EAAI,oCAAA;AAAA,QACJ,IAAA,EAAM,UAAU,SAAS,CAAA,uEAAA,CAAA;AAAA,QACzB,MAAA,EAAA,eAAA;AAAA,QACA,QAAA,EAAA,QAAA;AAAA,QACA,OAAA,EAAS,EAAE,SAAA;AAAU,OACtB,CAAA;AACD,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/vector/vector.ts"],"names":["MastraBase","MastraError"],"mappings":";;;;;;;;AAkBO,IAAe,YAAA,GAAf,cAA2DA,4BAAA,CAAW;AAAA,EAC3E,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,cAAA,EAAgB,SAAA,EAAW,UAAU,CAAA;AAAA,EACrD;AAAA,EAEA,IAAI,cAAA,GAAyB;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAkBA,MAAgB,qBAAA,CAAsB,SAAA,EAAmB,SAAA,EAAmB,MAAA,EAAgB;AAC1F,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,WAAW,CAAA;AAAA,IAC/C,SAAS,SAAA,EAAW;AAClB,MAAA,MAAM,cAAc,IAAIC,6BAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,oCAAA;AAAA,UACJ,IAAA,EAAM,UAAU,SAAS,CAAA,qEAAA,CAAA;AAAA,UACzB,MAAA,EAAA,eAAA;AAAA,UACA,QAAA,EAAA,QAAA;AAAA,UACA,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,MAAM,WAAA;AAAA,IACR;AACA,IAAA,MAAM,cAAc,IAAA,EAAM,SAAA;AAC1B,IAAA,MAAM,iBAAiB,IAAA,EAAM,MAAA;AAC7B,IAAA,IAAI,gBAAgB,SAAA,EAAW;AAC7B,MAAA,IAAA,CAAK,MAAA,EAAQ,IAAA;AAAA,QACX,CAAA,OAAA,EAAU,SAAS,CAAA,sBAAA,EAAyB,WAAW,0BAA0B,cAAc,CAAA,oBAAA;AAAA,OACjG;AACA,MAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,QAAA,IAAA,CAAK,MAAA,EAAQ,IAAA;AAAA,UACX,CAAA,uCAAA,EAA0C,MAAM,CAAA,yCAAA,EAA4C,cAAc,CAAA,4DAAA;AAAA,SAC5G;AAAA,MACF;AAAA,IACF,WAAW,IAAA,EAAM;AACf,MAAA,MAAM,WAAA,GAAc,IAAIA,6BAAA,CAAY;AAAA,QAClC,EAAA,EAAI,0CAAA;AAAA,QACJ,MAAM,CAAA,OAAA,EAAU,SAAS,CAAA,sBAAA,EAAyB,WAAW,oBAAoB,SAAS,CAAA,0BAAA,CAAA;AAAA,QAC1F,MAAA,EAAA,eAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,OAAA,EAAS,EAAE,SAAA,EAAW,WAAA,EAAa,cAAc,SAAA;AAAU,OAC5D,CAAA;AACD,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,MAAM,WAAA;AAAA,IACR,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,IAAIA,6BAAA,CAAY;AAAA,QAClC,EAAA,EAAI,oCAAA;AAAA,QACJ,IAAA,EAAM,UAAU,SAAS,CAAA,uEAAA,CAAA;AAAA,QACzB,MAAA,EAAA,eAAA;AAAA,QACA,QAAA,EAAA,QAAA;AAAA,QACA,OAAA,EAAS,EAAE,SAAA;AAAU,OACtB,CAAA;AACD,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AACF","file":"chunk-4PRV2Y55.cjs","sourcesContent":["import type { EmbeddingModelV2 } from '@ai-sdk/provider-v5';\nimport type { EmbeddingModel as EmbeddingModelV1 } from 'ai';\nimport { MastraBase } from '../base';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { VectorFilter } from './filter';\nimport type {\n CreateIndexParams,\n UpsertVectorParams,\n QueryVectorParams,\n IndexStats,\n QueryResult,\n UpdateVectorParams,\n DeleteVectorParams,\n DescribeIndexParams,\n DeleteIndexParams,\n} from './types';\n\nexport type MastraEmbeddingModel<T> = EmbeddingModelV1<T> | EmbeddingModelV2<T>;\nexport abstract class MastraVector<Filter = VectorFilter> extends MastraBase {\n constructor() {\n super({ name: 'MastraVector', component: 'VECTOR' });\n }\n\n get indexSeparator(): string {\n return '_';\n }\n\n abstract query(params: QueryVectorParams<Filter>): Promise<QueryResult[]>;\n // Adds type checks for positional arguments if used\n abstract upsert(params: UpsertVectorParams): Promise<string[]>;\n // Adds type checks for positional arguments if used\n abstract createIndex(params: CreateIndexParams): Promise<void>;\n\n abstract listIndexes(): Promise<string[]>;\n\n abstract describeIndex(params: DescribeIndexParams): Promise<IndexStats>;\n\n abstract deleteIndex(params: DeleteIndexParams): Promise<void>;\n\n abstract updateVector(params: UpdateVectorParams): Promise<void>;\n\n abstract deleteVector(params: DeleteVectorParams): Promise<void>;\n\n protected async validateExistingIndex(indexName: string, dimension: number, metric: string) {\n let info: IndexStats;\n try {\n info = await this.describeIndex({ indexName });\n } catch (infoError) {\n const mastraError = new MastraError(\n {\n id: 'VECTOR_VALIDATE_INDEX_FETCH_FAILED',\n text: `Index \"${indexName}\" already exists, but failed to fetch index info for dimension check.`,\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.SYSTEM,\n details: { indexName },\n },\n infoError,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n throw mastraError;\n }\n const existingDim = info?.dimension;\n const existingMetric = info?.metric;\n if (existingDim === dimension) {\n this.logger?.info(\n `Index \"${indexName}\" already exists with ${existingDim} dimensions and metric ${existingMetric}, skipping creation.`,\n );\n if (existingMetric !== metric) {\n this.logger?.warn(\n `Attempted to create index with metric \"${metric}\", but index already exists with metric \"${existingMetric}\". To use a different metric, delete and recreate the index.`,\n );\n }\n } else if (info) {\n const mastraError = new MastraError({\n id: 'VECTOR_VALIDATE_INDEX_DIMENSION_MISMATCH',\n text: `Index \"${indexName}\" already exists with ${existingDim} dimensions, but ${dimension} dimensions were requested`,\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: { indexName, existingDim, requestedDim: dimension },\n });\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n throw mastraError;\n } else {\n const mastraError = new MastraError({\n id: 'VECTOR_VALIDATE_INDEX_NO_DIMENSION',\n text: `Index \"${indexName}\" already exists, but could not retrieve its dimensions for validation.`,\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.SYSTEM,\n details: { indexName },\n });\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n throw mastraError;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { MastraModelGateway } from './chunk-RKXWLG33.js';
|
|
2
|
+
import { createAnthropic } from '@ai-sdk/anthropic-v5';
|
|
3
|
+
import { createGoogleGenerativeAI } from '@ai-sdk/google-v5';
|
|
4
|
+
import { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';
|
|
5
|
+
import { createOpenAI } from '@ai-sdk/openai-v5';
|
|
6
|
+
import { createXai } from '@ai-sdk/xai-v5';
|
|
7
|
+
import { createOpenRouter } from '@openrouter/ai-sdk-provider-v5';
|
|
8
|
+
|
|
9
|
+
// src/llm/model/gateway-resolver.ts
|
|
10
|
+
function parseModelRouterId(routerId, gatewayPrefix) {
|
|
11
|
+
if (gatewayPrefix && !routerId.startsWith(`${gatewayPrefix}/`)) {
|
|
12
|
+
throw new Error(`Expected ${gatewayPrefix}/ in model router ID ${routerId}`);
|
|
13
|
+
}
|
|
14
|
+
const idParts = routerId.split("/");
|
|
15
|
+
if (gatewayPrefix && idParts.length < 3) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`Expected atleast 3 id parts ${gatewayPrefix}/provider/model, but only saw ${idParts.length} in ${routerId}`
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
const providerId = idParts.at(gatewayPrefix ? 1 : 0);
|
|
21
|
+
const modelId = idParts.slice(gatewayPrefix ? 2 : 1).join(`/`);
|
|
22
|
+
if (!routerId.includes(`/`) || !providerId || !modelId) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
`Attempted to parse provider/model from ${routerId} but this ID doesn't appear to contain a provider`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
providerId,
|
|
29
|
+
modelId
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// src/llm/model/gateways/constants.ts
|
|
34
|
+
var PROVIDERS_WITH_INSTALLED_PACKAGES = ["anthropic", "google", "openai", "openrouter", "xai"];
|
|
35
|
+
var EXCLUDED_PROVIDERS = ["github-copilot"];
|
|
36
|
+
|
|
37
|
+
// src/llm/model/gateways/models-dev.ts
|
|
38
|
+
var OPENAI_COMPATIBLE_OVERRIDES = {
|
|
39
|
+
cerebras: {
|
|
40
|
+
url: "https://api.cerebras.ai/v1"
|
|
41
|
+
},
|
|
42
|
+
mistral: {
|
|
43
|
+
url: "https://api.mistral.ai/v1"
|
|
44
|
+
},
|
|
45
|
+
groq: {
|
|
46
|
+
url: "https://api.groq.com/openai/v1"
|
|
47
|
+
},
|
|
48
|
+
togetherai: {
|
|
49
|
+
url: "https://api.together.xyz/v1"
|
|
50
|
+
},
|
|
51
|
+
deepinfra: {
|
|
52
|
+
url: "https://api.deepinfra.com/v1/openai"
|
|
53
|
+
},
|
|
54
|
+
perplexity: {
|
|
55
|
+
url: "https://api.perplexity.ai"
|
|
56
|
+
},
|
|
57
|
+
vercel: {
|
|
58
|
+
url: "https://ai-gateway.vercel.sh/v1",
|
|
59
|
+
apiKeyEnvVar: "AI_GATEWAY_API_KEY"
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var ModelsDevGateway = class extends MastraModelGateway {
|
|
63
|
+
name = "models.dev";
|
|
64
|
+
prefix = void 0;
|
|
65
|
+
// No prefix for registry gateway
|
|
66
|
+
providerConfigs = {};
|
|
67
|
+
constructor(providerConfigs) {
|
|
68
|
+
super();
|
|
69
|
+
if (providerConfigs) this.providerConfigs = providerConfigs;
|
|
70
|
+
}
|
|
71
|
+
async fetchProviders() {
|
|
72
|
+
const response = await fetch("https://models.dev/api.json");
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);
|
|
75
|
+
}
|
|
76
|
+
const data = await response.json();
|
|
77
|
+
const providerConfigs = {};
|
|
78
|
+
for (const [providerId, providerInfo] of Object.entries(data)) {
|
|
79
|
+
if (EXCLUDED_PROVIDERS.includes(providerId)) continue;
|
|
80
|
+
if (!providerInfo || typeof providerInfo !== "object" || !providerInfo.models) continue;
|
|
81
|
+
const normalizedId = providerId;
|
|
82
|
+
const isOpenAICompatible = providerInfo.npm === "@ai-sdk/openai-compatible" || providerInfo.npm === "@ai-sdk/gateway" || // Vercel AI Gateway is OpenAI-compatible
|
|
83
|
+
normalizedId in OPENAI_COMPATIBLE_OVERRIDES;
|
|
84
|
+
const hasInstalledPackage = PROVIDERS_WITH_INSTALLED_PACKAGES.includes(providerId);
|
|
85
|
+
const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;
|
|
86
|
+
if (isOpenAICompatible || hasInstalledPackage || hasApiAndEnv) {
|
|
87
|
+
const modelIds = Object.keys(providerInfo.models).sort();
|
|
88
|
+
const url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;
|
|
89
|
+
if (!hasInstalledPackage && !url) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, "_")}_API_KEY`;
|
|
93
|
+
const apiKeyHeader = !hasInstalledPackage ? OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || "Authorization" : void 0;
|
|
94
|
+
providerConfigs[normalizedId] = {
|
|
95
|
+
url,
|
|
96
|
+
apiKeyEnvVar,
|
|
97
|
+
apiKeyHeader,
|
|
98
|
+
name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),
|
|
99
|
+
models: modelIds,
|
|
100
|
+
docUrl: providerInfo.doc,
|
|
101
|
+
// Include documentation URL if available
|
|
102
|
+
gateway: `models.dev`
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
this.providerConfigs = providerConfigs;
|
|
107
|
+
return providerConfigs;
|
|
108
|
+
}
|
|
109
|
+
buildUrl(routerId, envVars) {
|
|
110
|
+
const { providerId } = parseModelRouterId(routerId);
|
|
111
|
+
const config = this.providerConfigs[providerId];
|
|
112
|
+
if (!config?.url) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const baseUrlEnvVar = `${providerId.toUpperCase().replace(/-/g, "_")}_BASE_URL`;
|
|
116
|
+
const customBaseUrl = envVars?.[baseUrlEnvVar] || process.env[baseUrlEnvVar];
|
|
117
|
+
return customBaseUrl || config.url;
|
|
118
|
+
}
|
|
119
|
+
getApiKey(modelId) {
|
|
120
|
+
const [provider, model] = modelId.split("/");
|
|
121
|
+
if (!provider || !model) {
|
|
122
|
+
throw new Error(`Could not identify provider from model id ${modelId}`);
|
|
123
|
+
}
|
|
124
|
+
const config = this.providerConfigs[provider];
|
|
125
|
+
if (!config) {
|
|
126
|
+
throw new Error(`Could not find config for provider ${provider} with model id ${modelId}`);
|
|
127
|
+
}
|
|
128
|
+
const apiKey = typeof config.apiKeyEnvVar === `string` ? process.env[config.apiKeyEnvVar] : void 0;
|
|
129
|
+
if (!apiKey) {
|
|
130
|
+
throw new Error(`Could not find API key process.env.${config.apiKeyEnvVar} for model id ${modelId}`);
|
|
131
|
+
}
|
|
132
|
+
return Promise.resolve(apiKey);
|
|
133
|
+
}
|
|
134
|
+
async resolveLanguageModel({
|
|
135
|
+
modelId,
|
|
136
|
+
providerId,
|
|
137
|
+
apiKey
|
|
138
|
+
}) {
|
|
139
|
+
const baseURL = this.buildUrl(`${providerId}/${modelId}`);
|
|
140
|
+
switch (providerId) {
|
|
141
|
+
case "openai":
|
|
142
|
+
return createOpenAI({ apiKey }).responses(modelId);
|
|
143
|
+
case "gemini":
|
|
144
|
+
case "google":
|
|
145
|
+
return createGoogleGenerativeAI({
|
|
146
|
+
apiKey
|
|
147
|
+
}).chat(modelId);
|
|
148
|
+
case "anthropic":
|
|
149
|
+
return createAnthropic({ apiKey })(modelId);
|
|
150
|
+
case "openrouter":
|
|
151
|
+
return createOpenRouter({ apiKey })(modelId);
|
|
152
|
+
case "xai":
|
|
153
|
+
return createXai({
|
|
154
|
+
apiKey
|
|
155
|
+
})(modelId);
|
|
156
|
+
default:
|
|
157
|
+
if (!baseURL) throw new Error(`No API URL found for ${providerId}/${modelId}`);
|
|
158
|
+
return createOpenAICompatible({ name: providerId, apiKey, baseURL }).chatModel(modelId);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
export { ModelsDevGateway, parseModelRouterId };
|
|
164
|
+
//# sourceMappingURL=chunk-5NR2GY4U.js.map
|
|
165
|
+
//# sourceMappingURL=chunk-5NR2GY4U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/model/gateway-resolver.ts","../src/llm/model/gateways/constants.ts","../src/llm/model/gateways/models-dev.ts"],"names":[],"mappings":"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","file":"chunk-5NR2GY4U.js","sourcesContent":["export type ResolvedModelConfig = {\n url: string | false;\n headers: Record<string, string>;\n resolvedModelId: string;\n fullModelId: string;\n};\n\nexport function parseModelRouterId(routerId: string, gatewayPrefix?: string): { providerId: string; modelId: string } {\n if (gatewayPrefix && !routerId.startsWith(`${gatewayPrefix}/`)) {\n throw new Error(`Expected ${gatewayPrefix}/ in model router ID ${routerId}`);\n }\n\n const idParts = routerId.split('/');\n\n if (gatewayPrefix && idParts.length < 3) {\n throw new Error(\n `Expected atleast 3 id parts ${gatewayPrefix}/provider/model, but only saw ${idParts.length} in ${routerId}`,\n );\n }\n\n const providerId = idParts.at(gatewayPrefix ? 1 : 0);\n const modelId = idParts.slice(gatewayPrefix ? 2 : 1).join(`/`);\n\n if (!routerId.includes(`/`) || !providerId || !modelId) {\n throw new Error(\n `Attempted to parse provider/model from ${routerId} but this ID doesn't appear to contain a provider`,\n );\n }\n\n return {\n providerId,\n modelId,\n };\n}\n","// anything in this list will use the corresponding ai sdk package instead of using openai-compat endpoints\nexport const PROVIDERS_WITH_INSTALLED_PACKAGES = ['anthropic', 'google', 'openai', 'openrouter', 'xai'];\n\n// anything here doesn't show up in model router. for now that's just copilot which requires a special oauth flow\nexport const EXCLUDED_PROVIDERS = ['github-copilot'];\n","import { createAnthropic } from '@ai-sdk/anthropic-v5';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google-v5';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';\nimport { createOpenAI } from '@ai-sdk/openai-v5';\nimport type { LanguageModelV2 } from '@ai-sdk/provider-v5';\nimport { createXai } from '@ai-sdk/xai-v5';\nimport { createOpenRouter } from '@openrouter/ai-sdk-provider-v5';\nimport { parseModelRouterId } from '../gateway-resolver.js';\nimport { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\nimport { EXCLUDED_PROVIDERS, PROVIDERS_WITH_INSTALLED_PACKAGES } from './constants.js';\n\ninterface ModelsDevProviderInfo {\n id: string;\n name: string;\n models: Record<string, any>;\n env?: string[]; // Array of env var names\n api?: string; // Base API URL\n npm?: string; // NPM package name\n doc?: string; // Documentation URL\n}\n\ninterface ModelsDevResponse {\n [providerId: string]: ModelsDevProviderInfo;\n}\n\n// Special cases: providers that are OpenAI-compatible but have their own SDKs\n// These providers work with OpenAI-compatible endpoints even though models.dev\n// might list them with their own SDK packages\n// This constant is ONLY used during generation in fetchProviders() to determine\n// which providers from models.dev should be included in the registry.\n// At runtime, buildUrl() and buildHeaders() use the pre-generated PROVIDER_REGISTRY instead.\nconst OPENAI_COMPATIBLE_OVERRIDES: Record<string, Partial<ProviderConfig>> = {\n cerebras: {\n url: 'https://api.cerebras.ai/v1',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai',\n },\n perplexity: {\n url: 'https://api.perplexity.ai',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n },\n};\n\nexport class ModelsDevGateway extends MastraModelGateway {\n readonly name = 'models.dev';\n readonly prefix = undefined; // No prefix for registry gateway\n\n private providerConfigs: Record<string, ProviderConfig> = {};\n\n constructor(providerConfigs?: Record<string, ProviderConfig>) {\n super();\n if (providerConfigs) this.providerConfigs = providerConfigs;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const response = await fetch('https://models.dev/api.json');\n if (!response.ok) {\n throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);\n }\n\n const data = (await response.json()) as ModelsDevResponse;\n\n const providerConfigs: Record<string, ProviderConfig> = {};\n\n for (const [providerId, providerInfo] of Object.entries(data)) {\n // Skip excluded providers\n if (EXCLUDED_PROVIDERS.includes(providerId)) continue;\n // Skip non-provider entries (if any)\n if (!providerInfo || typeof providerInfo !== 'object' || !providerInfo.models) continue;\n\n // Use provider ID as-is (keep hyphens for consistency)\n const normalizedId = providerId;\n\n // Check if this is OpenAI-compatible based on npm package or overrides\n const isOpenAICompatible =\n providerInfo.npm === '@ai-sdk/openai-compatible' ||\n providerInfo.npm === '@ai-sdk/gateway' || // Vercel AI Gateway is OpenAI-compatible\n normalizedId in OPENAI_COMPATIBLE_OVERRIDES;\n\n // these have their ai sdk provider package installed and don't use openai-compat\n const hasInstalledPackage = PROVIDERS_WITH_INSTALLED_PACKAGES.includes(providerId);\n\n // Also include providers that have an API URL and env vars (likely OpenAI-compatible)\n const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;\n\n if (isOpenAICompatible || hasInstalledPackage || hasApiAndEnv) {\n // Get model IDs from the models object\n const modelIds = Object.keys(providerInfo.models).sort();\n\n // Get the API URL from the provider info or overrides\n const url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;\n\n // Skip if we don't have a URL\n if (!hasInstalledPackage && !url) {\n continue;\n }\n\n // Get the API key env var from the provider info\n // Convert hyphens to underscores for env var naming convention\n const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, '_')}_API_KEY`;\n\n // Determine the API key header (special case for Anthropic)\n const apiKeyHeader = !hasInstalledPackage\n ? OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || 'Authorization'\n : undefined;\n\n providerConfigs[normalizedId] = {\n url,\n apiKeyEnvVar,\n apiKeyHeader,\n name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),\n models: modelIds,\n docUrl: providerInfo.doc, // Include documentation URL if available\n gateway: `models.dev`,\n };\n }\n }\n\n // Store for later use in buildUrl and buildHeaders\n this.providerConfigs = providerConfigs;\n\n return providerConfigs;\n }\n\n buildUrl(routerId: string, envVars?: typeof process.env): string | undefined {\n const { providerId } = parseModelRouterId(routerId);\n\n const config = this.providerConfigs[providerId];\n\n if (!config?.url) {\n return;\n }\n\n // Check for custom base URL from env vars\n const baseUrlEnvVar = `${providerId.toUpperCase().replace(/-/g, '_')}_BASE_URL`;\n const customBaseUrl = envVars?.[baseUrlEnvVar] || process.env[baseUrlEnvVar];\n\n return customBaseUrl || config.url;\n }\n\n getApiKey(modelId: string): Promise<string> {\n const [provider, model] = modelId.split('/');\n if (!provider || !model) {\n throw new Error(`Could not identify provider from model id ${modelId}`);\n }\n const config = this.providerConfigs[provider];\n\n if (!config) {\n throw new Error(`Could not find config for provider ${provider} with model id ${modelId}`);\n }\n\n const apiKey = typeof config.apiKeyEnvVar === `string` ? process.env[config.apiKeyEnvVar] : undefined; // we only use single string env var for models.dev for now\n\n if (!apiKey) {\n throw new Error(`Could not find API key process.env.${config.apiKeyEnvVar} for model id ${modelId}`);\n }\n\n return Promise.resolve(apiKey);\n }\n\n async resolveLanguageModel({\n modelId,\n providerId,\n apiKey,\n }: {\n modelId: string;\n providerId: string;\n apiKey: string;\n }): Promise<LanguageModelV2> {\n const baseURL = this.buildUrl(`${providerId}/${modelId}`);\n\n switch (providerId) {\n case 'openai':\n return createOpenAI({ apiKey }).responses(modelId);\n case 'gemini':\n case 'google':\n return createGoogleGenerativeAI({\n apiKey,\n }).chat(modelId);\n case 'anthropic':\n return createAnthropic({ apiKey })(modelId);\n case 'openrouter':\n return createOpenRouter({ apiKey })(modelId);\n case 'xai':\n return createXai({\n apiKey,\n })(modelId);\n default:\n if (!baseURL) throw new Error(`No API URL found for ${providerId}/${modelId}`);\n return createOpenAICompatible({ name: providerId, apiKey, baseURL }).chatModel(modelId);\n }\n }\n}\n"]}
|