@mastra/core 0.24.1 → 0.24.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/agent/agent.d.ts +1 -1
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.types.d.ts +2 -2
  5. package/dist/agent/agent.types.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +13 -13
  7. package/dist/agent/index.js +2 -2
  8. package/dist/agent/input-processor/index.cjs +6 -6
  9. package/dist/agent/input-processor/index.js +1 -1
  10. package/dist/agent/message-list/index.d.ts.map +1 -1
  11. package/dist/agent/message-list/prompt/convert-file.d.ts +1 -1
  12. package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -1
  13. package/dist/agent/types.d.ts +1 -0
  14. package/dist/agent/types.d.ts.map +1 -1
  15. package/dist/agent/utils.d.ts.map +1 -1
  16. package/dist/agent/workflows/prepare-stream/index.d.ts +2 -1
  17. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  18. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts +3 -1
  19. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
  20. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +2 -1
  21. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts.map +1 -1
  22. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +2 -1
  23. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
  24. package/dist/agent/workflows/prepare-stream/stream-step.d.ts +3 -1
  25. package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
  26. package/dist/ai-tracing/index.cjs +36 -36
  27. package/dist/ai-tracing/index.js +1 -1
  28. package/dist/{chunk-EDVPIVAB.js → chunk-4OPPKDPO.js} +3 -3
  29. package/dist/{chunk-EDVPIVAB.js.map → chunk-4OPPKDPO.js.map} +1 -1
  30. package/dist/{chunk-BCFLCIAX.cjs → chunk-B6RCPK2E.cjs} +173 -15
  31. package/dist/chunk-B6RCPK2E.cjs.map +1 -0
  32. package/dist/{chunk-UBVIPDVD.cjs → chunk-BC5S7YUC.cjs} +4 -4
  33. package/dist/{chunk-UBVIPDVD.cjs.map → chunk-BC5S7YUC.cjs.map} +1 -1
  34. package/dist/{chunk-DNYWTNND.js → chunk-DBVX3GFJ.js} +27 -22
  35. package/dist/chunk-DBVX3GFJ.js.map +1 -0
  36. package/dist/{chunk-6OGG24PY.cjs → chunk-DE7YOOVP.cjs} +55 -52
  37. package/dist/chunk-DE7YOOVP.cjs.map +1 -0
  38. package/dist/{chunk-II37LKES.js → chunk-EFNEFT4U.js} +173 -15
  39. package/dist/chunk-EFNEFT4U.js.map +1 -0
  40. package/dist/{chunk-HKT62GIP.js → chunk-FKV5666D.js} +3 -3
  41. package/dist/{chunk-HKT62GIP.js.map → chunk-FKV5666D.js.map} +1 -1
  42. package/dist/{chunk-LILCMG3L.cjs → chunk-GCMRHVCZ.cjs} +8 -8
  43. package/dist/{chunk-LILCMG3L.cjs.map → chunk-GCMRHVCZ.cjs.map} +1 -1
  44. package/dist/{chunk-MXLKXD6Q.js → chunk-IZJTEPQQ.js} +4 -4
  45. package/dist/{chunk-MXLKXD6Q.js.map → chunk-IZJTEPQQ.js.map} +1 -1
  46. package/dist/{chunk-Q7VW22SF.js → chunk-J2YC7IYA.js} +5 -5
  47. package/dist/{chunk-Q7VW22SF.js.map → chunk-J2YC7IYA.js.map} +1 -1
  48. package/dist/{chunk-TVZB5572.cjs → chunk-JBYJAIFU.cjs} +12 -12
  49. package/dist/chunk-JBYJAIFU.cjs.map +1 -0
  50. package/dist/{chunk-Z3BWWT7E.js → chunk-K7MEUZ3O.js} +3 -3
  51. package/dist/{chunk-Z3BWWT7E.js.map → chunk-K7MEUZ3O.js.map} +1 -1
  52. package/dist/{chunk-O5PROZMW.cjs → chunk-LZFCR2SE.cjs} +4 -4
  53. package/dist/chunk-LZFCR2SE.cjs.map +1 -0
  54. package/dist/{chunk-TPYSVJ5T.cjs → chunk-NJKNZXAS.cjs} +12 -12
  55. package/dist/{chunk-TPYSVJ5T.cjs.map → chunk-NJKNZXAS.cjs.map} +1 -1
  56. package/dist/{chunk-V66IXQAJ.js → chunk-OLERJ2OU.js} +3 -3
  57. package/dist/{chunk-V66IXQAJ.js.map → chunk-OLERJ2OU.js.map} +1 -1
  58. package/dist/{chunk-EJPCH5WB.cjs → chunk-RHZQQQZ4.cjs} +28 -23
  59. package/dist/chunk-RHZQQQZ4.cjs.map +1 -0
  60. package/dist/{chunk-ZVAWVX5J.js → chunk-SHPLHQFH.js} +20 -17
  61. package/dist/chunk-SHPLHQFH.js.map +1 -0
  62. package/dist/{chunk-VBQZFQXS.cjs → chunk-UD7DS7OY.cjs} +4 -4
  63. package/dist/{chunk-VBQZFQXS.cjs.map → chunk-UD7DS7OY.cjs.map} +1 -1
  64. package/dist/{chunk-CESZ2AOS.js → chunk-XC2OEALC.js} +5 -5
  65. package/dist/chunk-XC2OEALC.js.map +1 -0
  66. package/dist/{chunk-KDNLQBCW.cjs → chunk-YDFWVGCR.cjs} +11 -11
  67. package/dist/{chunk-KDNLQBCW.cjs.map → chunk-YDFWVGCR.cjs.map} +1 -1
  68. package/dist/{chunk-5D6TMUAG.cjs → chunk-YSQE5IHK.cjs} +6 -6
  69. package/dist/{chunk-5D6TMUAG.cjs.map → chunk-YSQE5IHK.cjs.map} +1 -1
  70. package/dist/{chunk-MBMPTC7F.js → chunk-ZIHEKHUB.js} +4 -4
  71. package/dist/chunk-ZIHEKHUB.js.map +1 -0
  72. package/dist/index.cjs +49 -49
  73. package/dist/index.js +8 -8
  74. package/dist/llm/index.cjs +7 -7
  75. package/dist/llm/index.js +1 -1
  76. package/dist/llm/model/aisdk/v5/model.d.ts +47 -0
  77. package/dist/llm/model/aisdk/v5/model.d.ts.map +1 -0
  78. package/dist/llm/model/is-v2-model.d.ts +3 -0
  79. package/dist/llm/model/is-v2-model.d.ts.map +1 -0
  80. package/dist/llm/model/model-method-from-agent.d.ts +4 -0
  81. package/dist/llm/model/model-method-from-agent.d.ts.map +1 -0
  82. package/dist/llm/model/model.loop.d.ts +2 -2
  83. package/dist/llm/model/model.loop.d.ts.map +1 -1
  84. package/dist/llm/model/model.loop.types.d.ts +2 -0
  85. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  86. package/dist/llm/model/resolve-model.d.ts +1 -1
  87. package/dist/llm/model/resolve-model.d.ts.map +1 -1
  88. package/dist/llm/model/router.d.ts +6 -4
  89. package/dist/llm/model/router.d.ts.map +1 -1
  90. package/dist/llm/model/shared.types.d.ts +10 -4
  91. package/dist/llm/model/shared.types.d.ts.map +1 -1
  92. package/dist/loop/index.cjs +2 -2
  93. package/dist/loop/index.js +1 -1
  94. package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts +37 -0
  95. package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts.map +1 -0
  96. package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
  97. package/dist/loop/test-utils/generateText.d.ts.map +1 -1
  98. package/dist/loop/test-utils/options.d.ts.map +1 -1
  99. package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
  100. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  101. package/dist/loop/test-utils/telemetry.d.ts.map +1 -1
  102. package/dist/loop/test-utils/textStream.d.ts.map +1 -1
  103. package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
  104. package/dist/loop/test-utils/tools.d.ts.map +1 -1
  105. package/dist/loop/test-utils/utils.d.ts +1 -1
  106. package/dist/loop/test-utils/utils.d.ts.map +1 -1
  107. package/dist/loop/types.d.ts +8 -3
  108. package/dist/loop/types.d.ts.map +1 -1
  109. package/dist/loop/workflows/agentic-execution/index.d.ts +12 -12
  110. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +9 -9
  111. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  112. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +4 -4
  113. package/dist/loop/workflows/agentic-loop/index.d.ts +12 -12
  114. package/dist/loop/workflows/run-state.d.ts +2 -2
  115. package/dist/loop/workflows/run-state.d.ts.map +1 -1
  116. package/dist/loop/workflows/schema.d.ts +4 -4
  117. package/dist/mastra/index.cjs +2 -2
  118. package/dist/mastra/index.d.ts +2 -2
  119. package/dist/mastra/index.d.ts.map +1 -1
  120. package/dist/mastra/index.js +1 -1
  121. package/dist/memory/index.cjs +4 -4
  122. package/dist/memory/index.js +1 -1
  123. package/dist/processors/index.cjs +11 -11
  124. package/dist/processors/index.js +1 -1
  125. package/dist/relevance/index.cjs +4 -4
  126. package/dist/relevance/index.js +1 -1
  127. package/dist/scores/index.cjs +9 -9
  128. package/dist/scores/index.js +2 -2
  129. package/dist/scores/scoreTraces/index.cjs +8 -8
  130. package/dist/scores/scoreTraces/index.js +3 -3
  131. package/dist/storage/index.cjs +3 -3
  132. package/dist/storage/index.js +1 -1
  133. package/dist/stream/aisdk/v5/execute.d.ts +6 -3
  134. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  135. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  136. package/dist/stream/base/output.d.ts.map +1 -1
  137. package/dist/stream/index.cjs +11 -11
  138. package/dist/stream/index.js +2 -2
  139. package/dist/stream/types.d.ts +4 -3
  140. package/dist/stream/types.d.ts.map +1 -1
  141. package/dist/test-utils/llm-mock.cjs +2 -2
  142. package/dist/test-utils/llm-mock.js +1 -1
  143. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  144. package/dist/utils.cjs +17 -17
  145. package/dist/utils.d.ts +1 -1
  146. package/dist/utils.d.ts.map +1 -1
  147. package/dist/utils.js +1 -1
  148. package/dist/workflows/evented/index.cjs +10 -10
  149. package/dist/workflows/evented/index.js +1 -1
  150. package/dist/workflows/index.cjs +14 -14
  151. package/dist/workflows/index.js +1 -1
  152. package/dist/workflows/legacy/index.cjs +22 -22
  153. package/dist/workflows/legacy/index.js +1 -1
  154. package/dist/workflows/types.d.ts +1 -1
  155. package/dist/workflows/types.d.ts.map +1 -1
  156. package/dist/workflows/workflow.d.ts +2 -2
  157. package/dist/workflows/workflow.d.ts.map +1 -1
  158. package/package.json +2 -2
  159. package/dist/chunk-6OGG24PY.cjs.map +0 -1
  160. package/dist/chunk-BCFLCIAX.cjs.map +0 -1
  161. package/dist/chunk-CESZ2AOS.js.map +0 -1
  162. package/dist/chunk-DNYWTNND.js.map +0 -1
  163. package/dist/chunk-EJPCH5WB.cjs.map +0 -1
  164. package/dist/chunk-II37LKES.js.map +0 -1
  165. package/dist/chunk-MBMPTC7F.js.map +0 -1
  166. package/dist/chunk-O5PROZMW.cjs.map +0 -1
  167. package/dist/chunk-TVZB5572.cjs.map +0 -1
  168. package/dist/chunk-ZVAWVX5J.js.map +0 -1
@@ -6,7 +6,7 @@ import fs from 'fs';
6
6
  import { createRequire } from 'module';
7
7
  import os from 'os';
8
8
  import path from 'path';
9
- import { createHash } from 'crypto';
9
+ import { createHash, randomUUID } from 'crypto';
10
10
  import { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';
11
11
  import { createGoogleGenerativeAI } from '@ai-sdk/google-v5';
12
12
  import { createOpenAI } from '@ai-sdk/openai-v5';
@@ -2465,6 +2465,137 @@ var autoRefreshEnabled = process.env.MASTRA_AUTO_REFRESH_PROVIDERS === "true" ||
2465
2465
  if (autoRefreshEnabled) {
2466
2466
  GatewayRegistry.getInstance({ useDynamicLoading: isDev }).startAutoRefresh();
2467
2467
  }
2468
+ var AISDKV5LanguageModel = class {
2469
+ /**
2470
+ * The language model must specify which language model interface version it implements.
2471
+ */
2472
+ specificationVersion = "v2";
2473
+ /**
2474
+ * Name of the provider for logging purposes.
2475
+ */
2476
+ provider;
2477
+ /**
2478
+ * Provider-specific model ID for logging purposes.
2479
+ */
2480
+ modelId;
2481
+ /**
2482
+ * Supported URL patterns by media type for the provider.
2483
+ *
2484
+ * The keys are media type patterns or full media types (e.g. `*\/*` for everything, `audio/*`, `video/*`, or `application/pdf`).
2485
+ * and the values are arrays of regular expressions that match the URL paths.
2486
+ * The matching should be against lower-case URLs.
2487
+ * Matched URLs are supported natively by the model and are not downloaded.
2488
+ * @returns A map of supported URL patterns by media type (as a promise or a plain object).
2489
+ */
2490
+ supportedUrls;
2491
+ #model;
2492
+ constructor(config) {
2493
+ this.#model = config;
2494
+ this.provider = this.#model.provider;
2495
+ this.modelId = this.#model.modelId;
2496
+ this.supportedUrls = this.#model.supportedUrls;
2497
+ }
2498
+ async doGenerate(options) {
2499
+ const result = await this.#model.doGenerate(options);
2500
+ return {
2501
+ request: result.request,
2502
+ response: result.response,
2503
+ stream: new ReadableStream({
2504
+ start(controller) {
2505
+ controller.enqueue({ type: "stream-start", warnings: result.warnings });
2506
+ controller.enqueue({
2507
+ type: "response-metadata",
2508
+ id: result.response?.id,
2509
+ modelId: result.response?.modelId,
2510
+ timestamp: result.response?.timestamp
2511
+ });
2512
+ for (const message of result.content) {
2513
+ if (message.type === "tool-call") {
2514
+ const toolCall = message;
2515
+ controller.enqueue({
2516
+ type: "tool-input-start",
2517
+ id: toolCall.toolCallId,
2518
+ toolName: toolCall.toolName
2519
+ });
2520
+ controller.enqueue({
2521
+ type: "tool-input-delta",
2522
+ id: toolCall.toolCallId,
2523
+ delta: toolCall.input
2524
+ });
2525
+ controller.enqueue({
2526
+ type: "tool-input-end",
2527
+ id: toolCall.toolCallId
2528
+ });
2529
+ controller.enqueue(toolCall);
2530
+ } else if (message.type === "text") {
2531
+ const text = message;
2532
+ const id = `msg_${randomUUID()}`;
2533
+ controller.enqueue({
2534
+ type: "text-start",
2535
+ id,
2536
+ providerMetadata: text.providerMetadata
2537
+ });
2538
+ controller.enqueue({
2539
+ type: "text-delta",
2540
+ id,
2541
+ delta: text.text
2542
+ });
2543
+ controller.enqueue({
2544
+ type: "text-end",
2545
+ id
2546
+ });
2547
+ } else if (message.type === "reasoning") {
2548
+ const id = `reasoning_${randomUUID()}`;
2549
+ const reasoning = message;
2550
+ controller.enqueue({
2551
+ type: "reasoning-start",
2552
+ id,
2553
+ providerMetadata: reasoning.providerMetadata
2554
+ });
2555
+ controller.enqueue({
2556
+ type: "reasoning-delta",
2557
+ id,
2558
+ delta: reasoning.text,
2559
+ providerMetadata: reasoning.providerMetadata
2560
+ });
2561
+ controller.enqueue({
2562
+ type: "reasoning-end",
2563
+ id,
2564
+ providerMetadata: reasoning.providerMetadata
2565
+ });
2566
+ } else if (message.type === "file") {
2567
+ const file = message;
2568
+ controller.enqueue({
2569
+ type: "file",
2570
+ mediaType: file.mediaType,
2571
+ data: file.data
2572
+ });
2573
+ } else if (message.type === "source") {
2574
+ const source = message;
2575
+ controller.enqueue({
2576
+ type: "source",
2577
+ id: source.id,
2578
+ sourceType: source.sourceType,
2579
+ title: source.title,
2580
+ providerMetadata: source.providerMetadata
2581
+ });
2582
+ }
2583
+ }
2584
+ controller.enqueue({
2585
+ type: "finish",
2586
+ finishReason: result.finishReason,
2587
+ usage: result.usage,
2588
+ providerMetadata: result.providerMetadata
2589
+ });
2590
+ controller.close();
2591
+ }
2592
+ })
2593
+ };
2594
+ }
2595
+ async doStream(options) {
2596
+ return await this.#model.doStream(options);
2597
+ }
2598
+ };
2468
2599
 
2469
2600
  // src/llm/model/gateways/index.ts
2470
2601
  function findGatewayForModel(gatewayId, gateways2) {
@@ -2531,10 +2662,33 @@ var ModelRouterLanguageModel = class _ModelRouterLanguageModel {
2531
2662
  this.modelId = parsedConfig.id;
2532
2663
  this.config = parsedConfig;
2533
2664
  }
2534
- async doGenerate() {
2535
- throw new Error(
2536
- "doGenerate is not supported by Mastra model router. Mastra only uses streaming (doStream) for all LLM calls."
2537
- );
2665
+ async doGenerate(options) {
2666
+ let apiKey;
2667
+ try {
2668
+ if (this.config.url) {
2669
+ apiKey = this.config.apiKey || "";
2670
+ } else {
2671
+ apiKey = this.config.apiKey || await this.gateway.getApiKey(this.config.routerId);
2672
+ }
2673
+ } catch (error) {
2674
+ return {
2675
+ stream: new ReadableStream({
2676
+ start(controller) {
2677
+ controller.enqueue({
2678
+ type: "error",
2679
+ error
2680
+ });
2681
+ controller.close();
2682
+ }
2683
+ })
2684
+ };
2685
+ }
2686
+ const model = await this.resolveLanguageModel({
2687
+ apiKey,
2688
+ ...parseModelRouterId(this.config.routerId, this.gateway.prefix)
2689
+ });
2690
+ const aiSDKV5Model = new AISDKV5LanguageModel(model);
2691
+ return aiSDKV5Model.doGenerate(options);
2538
2692
  }
2539
2693
  async doStream(options) {
2540
2694
  let apiKey;
@@ -2552,6 +2706,7 @@ var ModelRouterLanguageModel = class _ModelRouterLanguageModel {
2552
2706
  type: "error",
2553
2707
  error
2554
2708
  });
2709
+ controller.close();
2555
2710
  }
2556
2711
  })
2557
2712
  };
@@ -2560,7 +2715,8 @@ var ModelRouterLanguageModel = class _ModelRouterLanguageModel {
2560
2715
  apiKey,
2561
2716
  ...parseModelRouterId(this.config.routerId, this.gateway.prefix)
2562
2717
  });
2563
- return model.doStream(options);
2718
+ const aiSDKV5Model = new AISDKV5LanguageModel(model);
2719
+ return aiSDKV5Model.doStream(options);
2564
2720
  }
2565
2721
  async resolveLanguageModel({
2566
2722
  modelId,
@@ -2597,19 +2753,21 @@ function isOpenAICompatibleObjectConfig(modelConfig) {
2597
2753
  return false;
2598
2754
  }
2599
2755
  async function resolveModelConfig(modelConfig, runtimeContext = new RuntimeContext(), mastra) {
2756
+ if (typeof modelConfig === "function") {
2757
+ modelConfig = await modelConfig({ runtimeContext, mastra });
2758
+ }
2759
+ if (modelConfig instanceof ModelRouterLanguageModel || modelConfig instanceof AISDKV5LanguageModel) {
2760
+ return modelConfig;
2761
+ }
2600
2762
  if (typeof modelConfig === "object" && "specificationVersion" in modelConfig) {
2763
+ if (modelConfig.specificationVersion === "v2") {
2764
+ return new AISDKV5LanguageModel(modelConfig);
2765
+ }
2601
2766
  return modelConfig;
2602
2767
  }
2603
2768
  if (typeof modelConfig === "string" || isOpenAICompatibleObjectConfig(modelConfig)) {
2604
2769
  return new ModelRouterLanguageModel(modelConfig);
2605
2770
  }
2606
- if (typeof modelConfig === "function") {
2607
- const fromDynamic = await modelConfig({ runtimeContext, mastra });
2608
- if (typeof fromDynamic === "string" || isOpenAICompatibleObjectConfig(fromDynamic)) {
2609
- return new ModelRouterLanguageModel(fromDynamic);
2610
- }
2611
- return fromDynamic;
2612
- }
2613
2771
  throw new Error("Invalid model configuration provided");
2614
2772
  }
2615
2773
  var ModelRouterEmbeddingModel = class {
@@ -2714,5 +2872,5 @@ var ModelRouterEmbeddingModel = class {
2714
2872
  };
2715
2873
 
2716
2874
  export { ModelRouterEmbeddingModel, ModelRouterLanguageModel, PROVIDER_REGISTRY, getProviderConfig, parseModelString, resolveModelConfig };
2717
- //# sourceMappingURL=chunk-II37LKES.js.map
2718
- //# sourceMappingURL=chunk-II37LKES.js.map
2875
+ //# sourceMappingURL=chunk-EFNEFT4U.js.map
2876
+ //# sourceMappingURL=chunk-EFNEFT4U.js.map