@mastra/core 0.21.0-alpha.0 → 0.21.0-alpha.1

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 (173) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +30 -121
  3. package/dist/agent/agent.d.ts +1 -1
  4. package/dist/agent/agent.types.d.ts +4 -1
  5. package/dist/agent/agent.types.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +13 -13
  7. package/dist/agent/index.js +2 -2
  8. package/dist/agent/input-processor/index.cjs +6 -6
  9. package/dist/agent/input-processor/index.js +1 -1
  10. package/dist/agent/utils.d.ts.map +1 -1
  11. package/dist/ai-tracing/index.cjs +32 -32
  12. package/dist/ai-tracing/index.js +1 -1
  13. package/dist/ai-tracing/spans/base.d.ts +2 -0
  14. package/dist/ai-tracing/spans/base.d.ts.map +1 -1
  15. package/dist/ai-tracing/types.d.ts +16 -0
  16. package/dist/ai-tracing/types.d.ts.map +1 -1
  17. package/dist/{chunk-HY7VW2VD.js → chunk-24L3LVID.js} +4 -4
  18. package/dist/{chunk-HY7VW2VD.js.map → chunk-24L3LVID.js.map} +1 -1
  19. package/dist/{chunk-CHGLK2EE.cjs → chunk-2BTTHMDJ.cjs} +14 -2
  20. package/dist/chunk-2BTTHMDJ.cjs.map +1 -0
  21. package/dist/chunk-33JJWAVI.js +2077 -0
  22. package/dist/chunk-33JJWAVI.js.map +1 -0
  23. package/dist/{chunk-CMEDBCQI.cjs → chunk-3ZEJSGTJ.cjs} +7975 -12424
  24. package/dist/chunk-3ZEJSGTJ.cjs.map +1 -0
  25. package/dist/{chunk-UAU56I6S.js → chunk-624FF2ZG.js} +14 -2
  26. package/dist/chunk-624FF2ZG.js.map +1 -0
  27. package/dist/{chunk-37ZKH5YV.cjs → chunk-6OJROHMC.cjs} +11 -11
  28. package/dist/{chunk-37ZKH5YV.cjs.map → chunk-6OJROHMC.cjs.map} +1 -1
  29. package/dist/{chunk-6E3YXNS2.cjs → chunk-74P72XBM.cjs} +4 -4
  30. package/dist/{chunk-6E3YXNS2.cjs.map → chunk-74P72XBM.cjs.map} +1 -1
  31. package/dist/chunk-75CDUY5G.js +158 -0
  32. package/dist/chunk-75CDUY5G.js.map +1 -0
  33. package/dist/chunk-BLPOOPRL.js +3164 -0
  34. package/dist/chunk-BLPOOPRL.js.map +1 -0
  35. package/dist/{chunk-46URAIGN.cjs → chunk-DUMAWQ7I.cjs} +4 -4
  36. package/dist/{chunk-46URAIGN.cjs.map → chunk-DUMAWQ7I.cjs.map} +1 -1
  37. package/dist/chunk-EQV7XSTY.cjs +2090 -0
  38. package/dist/chunk-EQV7XSTY.cjs.map +1 -0
  39. package/dist/{chunk-CN3DPBSR.js → chunk-ILZI4MEU.js} +7810 -12260
  40. package/dist/chunk-ILZI4MEU.js.map +1 -0
  41. package/dist/{chunk-UJXD5L66.js → chunk-ONHTH5RH.js} +3 -3
  42. package/dist/{chunk-UJXD5L66.js.map → chunk-ONHTH5RH.js.map} +1 -1
  43. package/dist/{chunk-ACQCDLM5.js → chunk-PPW3SAWO.js} +5 -9
  44. package/dist/{chunk-ACQCDLM5.js.map → chunk-PPW3SAWO.js.map} +1 -1
  45. package/dist/{chunk-TUEJ2F25.js → chunk-Q4YVANA4.js} +5 -5
  46. package/dist/{chunk-TUEJ2F25.js.map → chunk-Q4YVANA4.js.map} +1 -1
  47. package/dist/chunk-QMKBXESK.cjs +3186 -0
  48. package/dist/chunk-QMKBXESK.cjs.map +1 -0
  49. package/dist/{chunk-WYJFP2MU.js → chunk-R3W5CNKP.js} +56 -41
  50. package/dist/chunk-R3W5CNKP.js.map +1 -0
  51. package/dist/{chunk-W6OYSIHF.cjs → chunk-RXGL66T6.cjs} +92 -74
  52. package/dist/chunk-RXGL66T6.cjs.map +1 -0
  53. package/dist/{chunk-IWYVLIYC.cjs → chunk-SL534RIL.cjs} +12 -12
  54. package/dist/{chunk-IWYVLIYC.cjs.map → chunk-SL534RIL.cjs.map} +1 -1
  55. package/dist/{chunk-LPXWG36P.cjs → chunk-SQXKJWFX.cjs} +12 -12
  56. package/dist/{chunk-LPXWG36P.cjs.map → chunk-SQXKJWFX.cjs.map} +1 -1
  57. package/dist/{chunk-5SQ4LGZX.cjs → chunk-SSDFGDFJ.cjs} +4 -4
  58. package/dist/{chunk-5SQ4LGZX.cjs.map → chunk-SSDFGDFJ.cjs.map} +1 -1
  59. package/dist/{chunk-W5SR3JVW.cjs → chunk-TTJM3STK.cjs} +7 -11
  60. package/dist/{chunk-W5SR3JVW.cjs.map → chunk-TTJM3STK.cjs.map} +1 -1
  61. package/dist/{chunk-U27VX7MI.cjs → chunk-UPRLKS2E.cjs} +6 -6
  62. package/dist/{chunk-U27VX7MI.cjs.map → chunk-UPRLKS2E.cjs.map} +1 -1
  63. package/dist/{chunk-PVVDB5IT.js → chunk-UQCUAYWV.js} +3 -3
  64. package/dist/{chunk-PVVDB5IT.js.map → chunk-UQCUAYWV.js.map} +1 -1
  65. package/dist/{chunk-RLLLUDY3.js → chunk-XL5MZTLP.js} +3 -3
  66. package/dist/{chunk-RLLLUDY3.js.map → chunk-XL5MZTLP.js.map} +1 -1
  67. package/dist/{chunk-7G7VIPVE.js → chunk-XQ5A3ISB.js} +3 -3
  68. package/dist/{chunk-7G7VIPVE.js.map → chunk-XQ5A3ISB.js.map} +1 -1
  69. package/dist/chunk-Y2PKC5BX.cjs +160 -0
  70. package/dist/chunk-Y2PKC5BX.cjs.map +1 -0
  71. package/dist/{chunk-O2WF4GIK.js → chunk-YUV3LZMY.js} +3 -3
  72. package/dist/{chunk-O2WF4GIK.js.map → chunk-YUV3LZMY.js.map} +1 -1
  73. package/dist/index.cjs +46 -46
  74. package/dist/index.js +8 -8
  75. package/dist/llm/index.cjs +6 -6
  76. package/dist/llm/index.d.ts +1 -1
  77. package/dist/llm/index.d.ts.map +1 -1
  78. package/dist/llm/index.js +1 -1
  79. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  80. package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
  81. package/dist/llm/model/index.d.ts +1 -1
  82. package/dist/llm/model/index.d.ts.map +1 -1
  83. package/dist/llm/model/provider-registry.d.ts +98 -0
  84. package/dist/llm/model/provider-registry.d.ts.map +1 -0
  85. package/dist/llm/model/provider-types.generated.d.ts +679 -0
  86. package/dist/llm/model/registry-generator.d.ts +29 -0
  87. package/dist/llm/model/registry-generator.d.ts.map +1 -0
  88. package/dist/llm/model/router.d.ts +1 -1
  89. package/dist/llm/model/router.d.ts.map +1 -1
  90. package/dist/llm/model/shared.types.d.ts +1 -1
  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/network/index.d.ts.map +1 -1
  95. package/dist/loop/test-utils/options.d.ts.map +1 -1
  96. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  97. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  98. package/dist/mastra/index.cjs +2 -2
  99. package/dist/mastra/index.js +1 -1
  100. package/dist/memory/index.cjs +4 -4
  101. package/dist/memory/index.js +1 -1
  102. package/dist/memory/memory.d.ts +1 -1
  103. package/dist/memory/memory.d.ts.map +1 -1
  104. package/dist/models-dev-A334FF64.js +3 -0
  105. package/dist/models-dev-A334FF64.js.map +1 -0
  106. package/dist/models-dev-ECOIQLLK.cjs +12 -0
  107. package/dist/models-dev-ECOIQLLK.cjs.map +1 -0
  108. package/dist/netlify-CEYZ5O54.js +3 -0
  109. package/dist/netlify-CEYZ5O54.js.map +1 -0
  110. package/dist/netlify-WFAL2AA4.cjs +12 -0
  111. package/dist/netlify-WFAL2AA4.cjs.map +1 -0
  112. package/dist/processors/index.cjs +11 -11
  113. package/dist/processors/index.js +1 -1
  114. package/dist/processors/processors/language-detector.d.ts +2 -0
  115. package/dist/processors/processors/language-detector.d.ts.map +1 -1
  116. package/dist/processors/processors/moderation.d.ts.map +1 -1
  117. package/dist/processors/processors/pii-detector.d.ts +2 -1
  118. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  119. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  120. package/dist/processors/processors/structured-output.d.ts +2 -0
  121. package/dist/processors/processors/structured-output.d.ts.map +1 -1
  122. package/dist/processors/processors/system-prompt-scrubber.d.ts +2 -1
  123. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  124. package/dist/processors/runner.d.ts +8 -2
  125. package/dist/processors/runner.d.ts.map +1 -1
  126. package/dist/provider-registry.json +1625 -0
  127. package/dist/registry-generator-7XDUEFUT.cjs +111 -0
  128. package/dist/registry-generator-7XDUEFUT.cjs.map +1 -0
  129. package/dist/registry-generator-ZKIT6I3E.js +103 -0
  130. package/dist/registry-generator-ZKIT6I3E.js.map +1 -0
  131. package/dist/relevance/index.cjs +4 -4
  132. package/dist/relevance/index.js +1 -1
  133. package/dist/scores/index.cjs +9 -9
  134. package/dist/scores/index.js +2 -2
  135. package/dist/scores/scoreTraces/index.cjs +10 -10
  136. package/dist/scores/scoreTraces/index.cjs.map +1 -1
  137. package/dist/scores/scoreTraces/index.js +5 -5
  138. package/dist/scores/scoreTraces/index.js.map +1 -1
  139. package/dist/storage/index.cjs +3 -3
  140. package/dist/storage/index.js +1 -1
  141. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  142. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  143. package/dist/stream/base/output-format-handlers.d.ts +3 -1
  144. package/dist/stream/base/output-format-handlers.d.ts.map +1 -1
  145. package/dist/stream/base/output.d.ts.map +1 -1
  146. package/dist/stream/index.cjs +13 -9
  147. package/dist/stream/index.d.ts +1 -0
  148. package/dist/stream/index.d.ts.map +1 -1
  149. package/dist/stream/index.js +2 -2
  150. package/dist/stream/types.d.ts +7 -0
  151. package/dist/stream/types.d.ts.map +1 -1
  152. package/dist/test-utils/llm-mock.cjs +2 -2
  153. package/dist/test-utils/llm-mock.js +1 -1
  154. package/dist/utils.cjs +17 -17
  155. package/dist/utils.js +1 -1
  156. package/dist/workflows/evented/index.cjs +10 -10
  157. package/dist/workflows/evented/index.js +1 -1
  158. package/dist/workflows/index.cjs +12 -12
  159. package/dist/workflows/index.js +1 -1
  160. package/dist/workflows/legacy/index.cjs +22 -22
  161. package/dist/workflows/legacy/index.js +1 -1
  162. package/dist/workflows/workflow.d.ts +20 -1
  163. package/dist/workflows/workflow.d.ts.map +1 -1
  164. package/package.json +3 -1
  165. package/src/llm/model/provider-types.generated.d.ts +679 -0
  166. package/dist/chunk-CHGLK2EE.cjs.map +0 -1
  167. package/dist/chunk-CMEDBCQI.cjs.map +0 -1
  168. package/dist/chunk-CN3DPBSR.js.map +0 -1
  169. package/dist/chunk-UAU56I6S.js.map +0 -1
  170. package/dist/chunk-W6OYSIHF.cjs.map +0 -1
  171. package/dist/chunk-WYJFP2MU.js.map +0 -1
  172. package/dist/llm/model/provider-registry.generated.d.ts +0 -99
  173. package/dist/llm/model/provider-registry.generated.d.ts.map +0 -1
@@ -0,0 +1,111 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs/promises');
4
+
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
8
+
9
+ async function fetchProvidersFromGateways(gateways) {
10
+ const allProviders = {};
11
+ const allModels = {};
12
+ const maxRetries = 3;
13
+ for (const gateway of gateways) {
14
+ let lastError = null;
15
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
16
+ try {
17
+ const providers = await gateway.fetchProviders();
18
+ for (const [providerId, config] of Object.entries(providers)) {
19
+ allProviders[providerId] = config;
20
+ allModels[providerId] = config.models.sort();
21
+ }
22
+ lastError = null;
23
+ break;
24
+ } catch (error) {
25
+ lastError = error instanceof Error ? error : new Error(String(error));
26
+ if (attempt < maxRetries) {
27
+ const delayMs = Math.min(1e3 * Math.pow(2, attempt - 1), 5e3);
28
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
29
+ }
30
+ }
31
+ }
32
+ if (lastError) {
33
+ throw lastError;
34
+ }
35
+ }
36
+ return { providers: allProviders, models: allModels };
37
+ }
38
+ function generateTypesContent(models) {
39
+ const providerModelsEntries = Object.entries(models).map(([provider, modelList]) => {
40
+ const modelsList = modelList.map((m) => `'${m}'`);
41
+ const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);
42
+ const providerKey = needsQuotes ? `'${provider}'` : provider;
43
+ const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(", ")}];`;
44
+ if (singleLine.length > 120) {
45
+ const formattedModels = modelList.map((m) => ` '${m}',`).join("\n");
46
+ return ` readonly ${providerKey}: readonly [
47
+ ${formattedModels}
48
+ ];`;
49
+ }
50
+ return singleLine;
51
+ }).join("\n");
52
+ return `/**
53
+ * THIS FILE IS AUTO-GENERATED - DO NOT EDIT
54
+ * Generated from model gateway providers
55
+ */
56
+
57
+ /**
58
+ * Provider models mapping type
59
+ * This is derived from the JSON data and provides type-safe access
60
+ */
61
+ export type ProviderModelsMap = {
62
+ ${providerModelsEntries}
63
+ };
64
+
65
+ /**
66
+ * Union type of all registered provider IDs
67
+ */
68
+ export type Provider = keyof ProviderModelsMap;
69
+
70
+ /**
71
+ * Provider models mapping interface
72
+ */
73
+ export interface ProviderModels {
74
+ [key: string]: string[];
75
+ }
76
+
77
+ /**
78
+ * OpenAI-compatible model ID type
79
+ * Dynamically derived from ProviderModelsMap
80
+ * Full provider/model paths (e.g., "openai/gpt-4o", "anthropic/claude-3-5-sonnet-20241022")
81
+ */
82
+ export type ModelRouterModelId =
83
+ | {
84
+ [P in Provider]: \`\${P}/\${ProviderModelsMap[P][number]}\`;
85
+ }[Provider]
86
+ | (string & {});
87
+
88
+ /**
89
+ * Extract the model part from a ModelRouterModelId for a specific provider
90
+ * Dynamically derived from ProviderModelsMap
91
+ * Example: ModelForProvider<'openai'> = 'gpt-4o' | 'gpt-4-turbo' | ...
92
+ */
93
+ export type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];
94
+ `;
95
+ }
96
+ async function writeRegistryFiles(jsonPath, typesPath, providers, models) {
97
+ const registryData = {
98
+ providers,
99
+ models,
100
+ version: "1.0.0"
101
+ };
102
+ await fs__default.default.writeFile(jsonPath, JSON.stringify(registryData, null, 2), "utf-8");
103
+ const typeContent = generateTypesContent(models);
104
+ await fs__default.default.writeFile(typesPath, typeContent, "utf-8");
105
+ }
106
+
107
+ exports.fetchProvidersFromGateways = fetchProvidersFromGateways;
108
+ exports.generateTypesContent = generateTypesContent;
109
+ exports.writeRegistryFiles = writeRegistryFiles;
110
+ //# sourceMappingURL=registry-generator-7XDUEFUT.cjs.map
111
+ //# sourceMappingURL=registry-generator-7XDUEFUT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/llm/model/registry-generator.ts"],"names":["fs"],"mappings":"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","file":"registry-generator-7XDUEFUT.cjs","sourcesContent":["/**\n * Shared provider registry generation logic\n * Used by both the CLI generation script and runtime refresh\n */\n\nimport fs from 'fs/promises';\nimport type { MastraModelGateway, ProviderConfig } from './gateways/base.js';\n\n/**\n * Fetch providers from all gateways with retry logic\n * @param gateways - Array of gateway instances to fetch from\n * @returns Object containing providers and models records\n */\nexport async function fetchProvidersFromGateways(\n gateways: MastraModelGateway[],\n): Promise<{ providers: Record<string, ProviderConfig>; models: Record<string, string[]> }> {\n const allProviders: Record<string, ProviderConfig> = {};\n const allModels: Record<string, string[]> = {};\n\n const maxRetries = 3;\n\n for (const gateway of gateways) {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n const providers = await gateway.fetchProviders();\n\n for (const [providerId, config] of Object.entries(providers)) {\n allProviders[providerId] = config;\n // Sort models alphabetically for consistent ordering\n allModels[providerId] = config.models.sort();\n }\n\n lastError = null;\n break; // Success, exit retry loop\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt < maxRetries) {\n // Wait before retrying (exponential backoff)\n const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 5000);\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n }\n\n // If all retries failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n }\n\n return { providers: allProviders, models: allModels };\n}\n\n/**\n * Generate TypeScript type definitions content\n * @param models - Record of provider IDs to model arrays\n * @returns Generated TypeScript type definitions as a string\n */\nexport function generateTypesContent(models: Record<string, string[]>): string {\n const providerModelsEntries = Object.entries(models)\n .map(([provider, modelList]) => {\n const modelsList = modelList.map(m => `'${m}'`);\n\n // Only quote provider key if it contains special characters (like dashes)\n const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);\n const providerKey = needsQuotes ? `'${provider}'` : provider;\n\n // Format array based on length (prettier printWidth: 120)\n const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(', ')}];`;\n\n // If single line exceeds 120 chars, format as multi-line\n if (singleLine.length > 120) {\n const formattedModels = modelList.map(m => ` '${m}',`).join('\\n');\n return ` readonly ${providerKey}: readonly [\\n${formattedModels}\\n ];`;\n }\n\n return singleLine;\n })\n .join('\\n');\n\n return `/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\n/**\n * Provider models mapping type\n * This is derived from the JSON data and provides type-safe access\n */\nexport type ProviderModelsMap = {\n${providerModelsEntries}\n};\n\n/**\n * Union type of all registered provider IDs\n */\nexport type Provider = keyof ProviderModelsMap;\n\n/**\n * Provider models mapping interface\n */\nexport interface ProviderModels {\n [key: string]: string[];\n}\n\n/**\n * OpenAI-compatible model ID type\n * Dynamically derived from ProviderModelsMap\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId =\n | {\n [P in Provider]: \\`\\${P}/\\${ProviderModelsMap[P][number]}\\`;\n }[Provider]\n | (string & {});\n\n/**\n * Extract the model part from a ModelRouterModelId for a specific provider\n * Dynamically derived from ProviderModelsMap\n * Example: ModelForProvider<'openai'> = 'gpt-4o' | 'gpt-4-turbo' | ...\n */\nexport type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];\n`;\n}\n\n/**\n * Write registry files to disk (JSON and .d.ts)\n * @param jsonPath - Path to write the JSON file\n * @param typesPath - Path to write the .d.ts file\n * @param providers - Provider configurations\n * @param models - Model lists by provider\n */\nexport async function writeRegistryFiles(\n jsonPath: string,\n typesPath: string,\n providers: Record<string, ProviderConfig>,\n models: Record<string, string[]>,\n): Promise<void> {\n // 1. Write JSON file\n const registryData = {\n providers,\n models,\n version: '1.0.0',\n };\n\n await fs.writeFile(jsonPath, JSON.stringify(registryData, null, 2), 'utf-8');\n\n // 2. Generate .d.ts file with type-only declarations\n const typeContent = generateTypesContent(models);\n await fs.writeFile(typesPath, typeContent, 'utf-8');\n}\n"]}
@@ -0,0 +1,103 @@
1
+ import fs from 'fs/promises';
2
+
3
+ async function fetchProvidersFromGateways(gateways) {
4
+ const allProviders = {};
5
+ const allModels = {};
6
+ const maxRetries = 3;
7
+ for (const gateway of gateways) {
8
+ let lastError = null;
9
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
10
+ try {
11
+ const providers = await gateway.fetchProviders();
12
+ for (const [providerId, config] of Object.entries(providers)) {
13
+ allProviders[providerId] = config;
14
+ allModels[providerId] = config.models.sort();
15
+ }
16
+ lastError = null;
17
+ break;
18
+ } catch (error) {
19
+ lastError = error instanceof Error ? error : new Error(String(error));
20
+ if (attempt < maxRetries) {
21
+ const delayMs = Math.min(1e3 * Math.pow(2, attempt - 1), 5e3);
22
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
23
+ }
24
+ }
25
+ }
26
+ if (lastError) {
27
+ throw lastError;
28
+ }
29
+ }
30
+ return { providers: allProviders, models: allModels };
31
+ }
32
+ function generateTypesContent(models) {
33
+ const providerModelsEntries = Object.entries(models).map(([provider, modelList]) => {
34
+ const modelsList = modelList.map((m) => `'${m}'`);
35
+ const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);
36
+ const providerKey = needsQuotes ? `'${provider}'` : provider;
37
+ const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(", ")}];`;
38
+ if (singleLine.length > 120) {
39
+ const formattedModels = modelList.map((m) => ` '${m}',`).join("\n");
40
+ return ` readonly ${providerKey}: readonly [
41
+ ${formattedModels}
42
+ ];`;
43
+ }
44
+ return singleLine;
45
+ }).join("\n");
46
+ return `/**
47
+ * THIS FILE IS AUTO-GENERATED - DO NOT EDIT
48
+ * Generated from model gateway providers
49
+ */
50
+
51
+ /**
52
+ * Provider models mapping type
53
+ * This is derived from the JSON data and provides type-safe access
54
+ */
55
+ export type ProviderModelsMap = {
56
+ ${providerModelsEntries}
57
+ };
58
+
59
+ /**
60
+ * Union type of all registered provider IDs
61
+ */
62
+ export type Provider = keyof ProviderModelsMap;
63
+
64
+ /**
65
+ * Provider models mapping interface
66
+ */
67
+ export interface ProviderModels {
68
+ [key: string]: string[];
69
+ }
70
+
71
+ /**
72
+ * OpenAI-compatible model ID type
73
+ * Dynamically derived from ProviderModelsMap
74
+ * Full provider/model paths (e.g., "openai/gpt-4o", "anthropic/claude-3-5-sonnet-20241022")
75
+ */
76
+ export type ModelRouterModelId =
77
+ | {
78
+ [P in Provider]: \`\${P}/\${ProviderModelsMap[P][number]}\`;
79
+ }[Provider]
80
+ | (string & {});
81
+
82
+ /**
83
+ * Extract the model part from a ModelRouterModelId for a specific provider
84
+ * Dynamically derived from ProviderModelsMap
85
+ * Example: ModelForProvider<'openai'> = 'gpt-4o' | 'gpt-4-turbo' | ...
86
+ */
87
+ export type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];
88
+ `;
89
+ }
90
+ async function writeRegistryFiles(jsonPath, typesPath, providers, models) {
91
+ const registryData = {
92
+ providers,
93
+ models,
94
+ version: "1.0.0"
95
+ };
96
+ await fs.writeFile(jsonPath, JSON.stringify(registryData, null, 2), "utf-8");
97
+ const typeContent = generateTypesContent(models);
98
+ await fs.writeFile(typesPath, typeContent, "utf-8");
99
+ }
100
+
101
+ export { fetchProvidersFromGateways, generateTypesContent, writeRegistryFiles };
102
+ //# sourceMappingURL=registry-generator-ZKIT6I3E.js.map
103
+ //# sourceMappingURL=registry-generator-ZKIT6I3E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/llm/model/registry-generator.ts"],"names":[],"mappings":"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","file":"registry-generator-ZKIT6I3E.js","sourcesContent":["/**\n * Shared provider registry generation logic\n * Used by both the CLI generation script and runtime refresh\n */\n\nimport fs from 'fs/promises';\nimport type { MastraModelGateway, ProviderConfig } from './gateways/base.js';\n\n/**\n * Fetch providers from all gateways with retry logic\n * @param gateways - Array of gateway instances to fetch from\n * @returns Object containing providers and models records\n */\nexport async function fetchProvidersFromGateways(\n gateways: MastraModelGateway[],\n): Promise<{ providers: Record<string, ProviderConfig>; models: Record<string, string[]> }> {\n const allProviders: Record<string, ProviderConfig> = {};\n const allModels: Record<string, string[]> = {};\n\n const maxRetries = 3;\n\n for (const gateway of gateways) {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n const providers = await gateway.fetchProviders();\n\n for (const [providerId, config] of Object.entries(providers)) {\n allProviders[providerId] = config;\n // Sort models alphabetically for consistent ordering\n allModels[providerId] = config.models.sort();\n }\n\n lastError = null;\n break; // Success, exit retry loop\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt < maxRetries) {\n // Wait before retrying (exponential backoff)\n const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 5000);\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n }\n\n // If all retries failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n }\n\n return { providers: allProviders, models: allModels };\n}\n\n/**\n * Generate TypeScript type definitions content\n * @param models - Record of provider IDs to model arrays\n * @returns Generated TypeScript type definitions as a string\n */\nexport function generateTypesContent(models: Record<string, string[]>): string {\n const providerModelsEntries = Object.entries(models)\n .map(([provider, modelList]) => {\n const modelsList = modelList.map(m => `'${m}'`);\n\n // Only quote provider key if it contains special characters (like dashes)\n const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);\n const providerKey = needsQuotes ? `'${provider}'` : provider;\n\n // Format array based on length (prettier printWidth: 120)\n const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(', ')}];`;\n\n // If single line exceeds 120 chars, format as multi-line\n if (singleLine.length > 120) {\n const formattedModels = modelList.map(m => ` '${m}',`).join('\\n');\n return ` readonly ${providerKey}: readonly [\\n${formattedModels}\\n ];`;\n }\n\n return singleLine;\n })\n .join('\\n');\n\n return `/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\n/**\n * Provider models mapping type\n * This is derived from the JSON data and provides type-safe access\n */\nexport type ProviderModelsMap = {\n${providerModelsEntries}\n};\n\n/**\n * Union type of all registered provider IDs\n */\nexport type Provider = keyof ProviderModelsMap;\n\n/**\n * Provider models mapping interface\n */\nexport interface ProviderModels {\n [key: string]: string[];\n}\n\n/**\n * OpenAI-compatible model ID type\n * Dynamically derived from ProviderModelsMap\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId =\n | {\n [P in Provider]: \\`\\${P}/\\${ProviderModelsMap[P][number]}\\`;\n }[Provider]\n | (string & {});\n\n/**\n * Extract the model part from a ModelRouterModelId for a specific provider\n * Dynamically derived from ProviderModelsMap\n * Example: ModelForProvider<'openai'> = 'gpt-4o' | 'gpt-4-turbo' | ...\n */\nexport type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];\n`;\n}\n\n/**\n * Write registry files to disk (JSON and .d.ts)\n * @param jsonPath - Path to write the JSON file\n * @param typesPath - Path to write the .d.ts file\n * @param providers - Provider configurations\n * @param models - Model lists by provider\n */\nexport async function writeRegistryFiles(\n jsonPath: string,\n typesPath: string,\n providers: Record<string, ProviderConfig>,\n models: Record<string, string[]>,\n): Promise<void> {\n // 1. Write JSON file\n const registryData = {\n providers,\n models,\n version: '1.0.0',\n };\n\n await fs.writeFile(jsonPath, JSON.stringify(registryData, null, 2), 'utf-8');\n\n // 2. Generate .d.ts file with type-only declarations\n const typeContent = generateTypesContent(models);\n await fs.writeFile(typesPath, typeContent, 'utf-8');\n}\n"]}
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunk46URAIGN_cjs = require('../chunk-46URAIGN.cjs');
3
+ var chunkDUMAWQ7I_cjs = require('../chunk-DUMAWQ7I.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "CohereRelevanceScorer", {
8
8
  enumerable: true,
9
- get: function () { return chunk46URAIGN_cjs.CohereRelevanceScorer; }
9
+ get: function () { return chunkDUMAWQ7I_cjs.CohereRelevanceScorer; }
10
10
  });
11
11
  Object.defineProperty(exports, "MastraAgentRelevanceScorer", {
12
12
  enumerable: true,
13
- get: function () { return chunk46URAIGN_cjs.MastraAgentRelevanceScorer; }
13
+ get: function () { return chunkDUMAWQ7I_cjs.MastraAgentRelevanceScorer; }
14
14
  });
15
15
  Object.defineProperty(exports, "createSimilarityPrompt", {
16
16
  enumerable: true,
17
- get: function () { return chunk46URAIGN_cjs.createSimilarityPrompt; }
17
+ get: function () { return chunkDUMAWQ7I_cjs.createSimilarityPrompt; }
18
18
  });
19
19
  //# sourceMappingURL=index.cjs.map
20
20
  //# sourceMappingURL=index.cjs.map
@@ -1,3 +1,3 @@
1
- export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt } from '../chunk-7G7VIPVE.js';
1
+ export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt } from '../chunk-XQ5A3ISB.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,37 +1,37 @@
1
1
  'use strict';
2
2
 
3
- var chunk37ZKH5YV_cjs = require('../chunk-37ZKH5YV.cjs');
4
- var chunk6E3YXNS2_cjs = require('../chunk-6E3YXNS2.cjs');
3
+ var chunk6OJROHMC_cjs = require('../chunk-6OJROHMC.cjs');
4
+ var chunk74P72XBM_cjs = require('../chunk-74P72XBM.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "MastraScorer", {
9
9
  enumerable: true,
10
- get: function () { return chunk37ZKH5YV_cjs.MastraScorer; }
10
+ get: function () { return chunk6OJROHMC_cjs.MastraScorer; }
11
11
  });
12
12
  Object.defineProperty(exports, "createScorer", {
13
13
  enumerable: true,
14
- get: function () { return chunk37ZKH5YV_cjs.createScorer; }
14
+ get: function () { return chunk6OJROHMC_cjs.createScorer; }
15
15
  });
16
16
  Object.defineProperty(exports, "runExperiment", {
17
17
  enumerable: true,
18
- get: function () { return chunk37ZKH5YV_cjs.runExperiment; }
18
+ get: function () { return chunk6OJROHMC_cjs.runExperiment; }
19
19
  });
20
20
  Object.defineProperty(exports, "saveScorePayloadSchema", {
21
21
  enumerable: true,
22
- get: function () { return chunk6E3YXNS2_cjs.saveScorePayloadSchema; }
22
+ get: function () { return chunk74P72XBM_cjs.saveScorePayloadSchema; }
23
23
  });
24
24
  Object.defineProperty(exports, "scoreResultSchema", {
25
25
  enumerable: true,
26
- get: function () { return chunk6E3YXNS2_cjs.scoreResultSchema; }
26
+ get: function () { return chunk74P72XBM_cjs.scoreResultSchema; }
27
27
  });
28
28
  Object.defineProperty(exports, "scoringExtractStepResultSchema", {
29
29
  enumerable: true,
30
- get: function () { return chunk6E3YXNS2_cjs.scoringExtractStepResultSchema; }
30
+ get: function () { return chunk74P72XBM_cjs.scoringExtractStepResultSchema; }
31
31
  });
32
32
  Object.defineProperty(exports, "scoringValueSchema", {
33
33
  enumerable: true,
34
- get: function () { return chunk6E3YXNS2_cjs.scoringValueSchema; }
34
+ get: function () { return chunk74P72XBM_cjs.scoringValueSchema; }
35
35
  });
36
36
  //# sourceMappingURL=index.cjs.map
37
37
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { MastraScorer, createScorer, runExperiment } from '../chunk-HY7VW2VD.js';
2
- export { saveScorePayloadSchema, scoreResultSchema, scoringExtractStepResultSchema, scoringValueSchema } from '../chunk-RLLLUDY3.js';
1
+ export { MastraScorer, createScorer, runExperiment } from '../chunk-24L3LVID.js';
2
+ export { saveScorePayloadSchema, scoreResultSchema, scoringExtractStepResultSchema, scoringValueSchema } from '../chunk-XL5MZTLP.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkLPXWG36P_cjs = require('../../chunk-LPXWG36P.cjs');
4
- var chunk6E3YXNS2_cjs = require('../../chunk-6E3YXNS2.cjs');
5
- var chunk5SQ4LGZX_cjs = require('../../chunk-5SQ4LGZX.cjs');
3
+ var chunkSQXKJWFX_cjs = require('../../chunk-SQXKJWFX.cjs');
4
+ var chunk74P72XBM_cjs = require('../../chunk-74P72XBM.cjs');
5
+ var chunkSSDFGDFJ_cjs = require('../../chunk-SSDFGDFJ.cjs');
6
6
  var chunkWM4VQWOZ_cjs = require('../../chunk-WM4VQWOZ.cjs');
7
7
  var pMap = require('p-map');
8
8
  var z = require('zod');
@@ -76,7 +76,7 @@ function normalizeMessageContent(content) {
76
76
  role: "user",
77
77
  parts: content.map((part) => ({ type: part.type, text: part.text }))
78
78
  };
79
- const converted = chunk5SQ4LGZX_cjs.convertMessages(tempMessage).to("AIV4.UI");
79
+ const converted = chunkSSDFGDFJ_cjs.convertMessages(tempMessage).to("AIV4.UI");
80
80
  return converted[0]?.content || "";
81
81
  }
82
82
  function convertToUIMessage(message, createdAt) {
@@ -94,7 +94,7 @@ function convertToUIMessage(message, createdAt) {
94
94
  parts: message.content.map((part) => ({ type: part.type, text: part.text }))
95
95
  };
96
96
  }
97
- const converted = chunk5SQ4LGZX_cjs.convertMessages(messageInput).to("AIV4.UI");
97
+ const converted = chunkSSDFGDFJ_cjs.convertMessages(messageInput).to("AIV4.UI");
98
98
  const result = converted[0];
99
99
  if (!result) {
100
100
  throw new Error("Failed to convert message");
@@ -234,7 +234,7 @@ function transformTraceToScorerInputAndOutput(trace) {
234
234
  }
235
235
 
236
236
  // src/scores/scoreTraces/scoreTracesWorkflow.ts
237
- var getTraceStep = chunkLPXWG36P_cjs.createStep({
237
+ var getTraceStep = chunkSQXKJWFX_cjs.createStep({
238
238
  id: "__process-trace-scoring",
239
239
  inputSchema: z__default.default.object({
240
240
  targets: z__default.default.array(
@@ -343,7 +343,6 @@ async function runScorerOnTarget({
343
343
  targetSpan: span
344
344
  });
345
345
  const result = await scorer.run(scorerRun);
346
- const traceId = `${target.traceId}${target.spanId ? `-${target.spanId}` : ""}`;
347
346
  const scorerResult = {
348
347
  ...result,
349
348
  scorer: {
@@ -351,7 +350,8 @@ async function runScorerOnTarget({
351
350
  name: scorer.name,
352
351
  description: scorer.description
353
352
  },
354
- traceId,
353
+ traceId: target.traceId,
354
+ spanId: target.spanId,
355
355
  entityId: span.name,
356
356
  entityType: span.spanType,
357
357
  entity: { traceId: span.traceId, spanId: span.spanId },
@@ -362,7 +362,7 @@ async function runScorerOnTarget({
362
362
  await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });
363
363
  }
364
364
  async function validateAndSaveScore({ storage, scorerResult }) {
365
- const payloadToSave = chunk6E3YXNS2_cjs.saveScorePayloadSchema.parse(scorerResult);
365
+ const payloadToSave = chunk74P72XBM_cjs.saveScorePayloadSchema.parse(scorerResult);
366
366
  const result = await storage.saveScore(payloadToSave);
367
367
  return result.score;
368
368
  }
@@ -404,7 +404,7 @@ async function attachScoreToSpan({
404
404
  updates: { links: [...existingLinks, link] }
405
405
  });
406
406
  }
407
- var scoreTracesWorkflow = chunkLPXWG36P_cjs.createWorkflow({
407
+ var scoreTracesWorkflow = chunkSQXKJWFX_cjs.createWorkflow({
408
408
  id: "__batch-scoring-traces",
409
409
  inputSchema: z__default.default.object({
410
410
  targets: z__default.default.array(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/scores/scoreTraces/scoreTraces.ts","../../../src/scores/scoreTraces/utils.ts","../../../src/scores/scoreTraces/scoreTracesWorkflow.ts"],"names":["MastraError","convertMessages","createStep","z","pMap","span","saveScorePayloadSchema","createWorkflow"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MastraError } from '../../error';\nimport type { Mastra } from '../../mastra';\n\nexport async function scoreTraces({\n scorerName,\n targets,\n mastra,\n}: {\n scorerName: string;\n targets: { traceId: string; spanId?: string }[];\n mastra: Mastra;\n}) {\n const workflow = mastra.__getInternalWorkflow('__batch-scoring-traces');\n try {\n const run = await workflow.createRunAsync();\n await run.start({ inputData: { targets, scorerName } });\n } catch (error) {\n const mastraError = new MastraError(\n {\n category: 'SYSTEM',\n domain: 'SCORER',\n id: 'MASTRA_SCORER_FAILED_TO_RUN_TRACE_SCORING',\n details: {\n scorerName,\n targets: JSON.stringify(targets),\n },\n },\n error,\n );\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n}\n","import type { ToolInvocation } from 'ai-v4';\nimport type { UIMessageWithMetadata } from '../../agent';\nimport { convertMessages } from '../../agent/message-list/utils/convert-messages';\nimport { AISpanType } from '../../ai-tracing';\nimport type { AISpanRecord, AITraceRecord } from '../../storage';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../types';\n\n// // Span tree structure for efficient lookups\ninterface SpanTree {\n spanMap: Map<string, AISpanRecord>;\n childrenMap: Map<string, AISpanRecord[]>;\n rootSpans: AISpanRecord[];\n}\n\n// Spans don't have ids, so we need to omit it from the UIMessageWithMetadata type\ntype TransformedUIMessage = Omit<UIMessageWithMetadata, 'id'>;\n\n/**\n * Build a hierarchical span tree with efficient lookup maps\n */\nexport function buildSpanTree(spans: AISpanRecord[]): SpanTree {\n const spanMap = new Map<string, AISpanRecord>();\n const childrenMap = new Map<string, AISpanRecord[]>();\n const rootSpans: AISpanRecord[] = [];\n\n // First pass: build span map\n for (const span of spans) {\n spanMap.set(span.spanId, span);\n }\n\n // Second pass: build parent-child relationships\n for (const span of spans) {\n if (span.parentSpanId === null) {\n rootSpans.push(span);\n } else {\n const siblings = childrenMap.get(span.parentSpanId) || [];\n siblings.push(span);\n childrenMap.set(span.parentSpanId, siblings);\n }\n }\n\n // Sort children by startedAt timestamp for temporal ordering\n for (const children of childrenMap.values()) {\n children.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n }\n\n // Sort root spans by startedAt\n rootSpans.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n\n return { spanMap, childrenMap, rootSpans };\n}\n\n/**\n * Extract children spans of a specific type\n */\nfunction getChildrenOfType<T extends AISpanRecord>(\n spanTree: SpanTree,\n parentSpanId: string,\n spanType: AISpanType,\n): T[] {\n const children = spanTree.childrenMap.get(parentSpanId) || [];\n return children.filter(span => span.spanType === spanType) as T[];\n}\n\n/**\n * Convert AI SDK v5 message content to v4 format\n */\nfunction normalizeMessageContent(content: string | Array<{ type: string; text: string }>): string {\n if (typeof content === 'string') {\n return content;\n }\n\n const tempMessage = {\n id: 'temp',\n role: 'user' as const,\n parts: content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n\n const converted = convertMessages(tempMessage).to('AIV4.UI');\n return converted[0]?.content || '';\n}\n\n/**\n * Convert v5 message to v4 UIMessage format using convertMessages\n * Ensures full consistency with AI SDK UIMessage behavior\n */\nfunction convertToUIMessage(\n message: { role: string; content: string | Array<{ type: string; text: string }> },\n createdAt: Date,\n): UIMessageWithMetadata {\n // Create proper message input for convertMessages\n let messageInput;\n if (typeof message.content === 'string') {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n content: message.content,\n };\n } else {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n parts: message.content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n }\n\n const converted = convertMessages(messageInput).to('AIV4.UI');\n const result = converted[0];\n\n if (!result) {\n throw new Error('Failed to convert message');\n }\n\n return {\n ...result,\n id: '', // Spans don't have message IDs\n createdAt: new Date(createdAt), // Use span timestamp\n };\n}\n\n/**\n * Extract input messages from agent run span\n */\nfunction extractInputMessages(agentSpan: AISpanRecord): TransformedUIMessage[] {\n const input = agentSpan.input;\n\n // Handle different input formats\n if (typeof input === 'string') {\n return [\n {\n role: 'user',\n content: input,\n createdAt: new Date(agentSpan.startedAt),\n parts: [{ type: 'text', text: input }],\n experimental_attachments: [],\n },\n ];\n }\n\n if (Array.isArray(input)) {\n return input.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n\n // @ts-ignore\n if (input && typeof input === 'object' && Array.isArray(input.messages)) {\n // @ts-ignore\n return input.messages.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n return [];\n}\n\n/**\n * Extract system messages from LLM span\n */\nfunction extractSystemMessages(llmSpan: AISpanRecord): Array<{ role: 'system'; content: string }> {\n return (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role === 'system')\n .map((msg: any) => ({\n role: 'system' as const,\n content: normalizeMessageContent(msg.content),\n }));\n}\n\n/**\n * Extract conversation history (remembered messages) from LLM span\n * Excludes system messages and the current input message\n */\nfunction extractRememberedMessages(llmSpan: AISpanRecord, currentInputContent: string): TransformedUIMessage[] {\n const messages = (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role !== 'system')\n .filter((msg: any) => normalizeMessageContent(msg.content) !== currentInputContent);\n\n return messages.map((msg: any) => convertToUIMessage(msg, llmSpan.startedAt));\n}\n\n/**\n * Reconstruct tool invocations from tool call spans\n */\nfunction reconstructToolInvocations(spanTree: SpanTree, parentSpanId: string) {\n const toolSpans = getChildrenOfType<AISpanRecord>(spanTree, parentSpanId, AISpanType.TOOL_CALL);\n\n return toolSpans.map(toolSpan => ({\n state: 'result' as const,\n toolName: toolSpan.attributes?.toolId,\n args: toolSpan.input || {},\n result: toolSpan.output || {},\n }));\n}\n\n/**\n * Create message parts array including tool invocations and text\n */\nfunction createMessageParts(toolInvocations: AISpanRecord[], textContent: string) {\n const parts: { type: 'tool-invocation' | 'text'; toolInvocation?: AISpanRecord; text?: string }[] = [];\n for (const toolInvocation of toolInvocations) {\n parts.push({\n type: 'tool-invocation',\n toolInvocation,\n });\n }\n\n if (textContent.trim()) {\n parts.push({\n type: 'text',\n text: textContent,\n });\n }\n\n return parts;\n}\n\n/**\n * Validate trace structure and throw descriptive errors\n */\nexport function validateTrace(trace: AITraceRecord): void {\n if (!trace) {\n throw new Error('Trace is null or undefined');\n }\n\n if (!trace.spans || !Array.isArray(trace.spans)) {\n throw new Error('Trace must have a spans array');\n }\n\n if (trace.spans.length === 0) {\n throw new Error('Trace has no spans');\n }\n\n // Check for circular references in parent-child relationships\n const spanIds = new Set(trace.spans.map(span => span.spanId));\n for (const span of trace.spans) {\n if (span.parentSpanId && !spanIds.has(span.parentSpanId)) {\n throw new Error(`Span ${span.spanId} references non-existent parent ${span.parentSpanId}`);\n }\n }\n}\n\n/**\n * Find the most recent LLM span that contains conversation history\n */\nfunction findPrimaryLLMSpan(spanTree: SpanTree, rootAgentSpan: AISpanRecord): AISpanRecord {\n const directLLMSpans = getChildrenOfType<AISpanRecord>(spanTree, rootAgentSpan.spanId, AISpanType.LLM_GENERATION);\n if (directLLMSpans.length > 0) {\n // There should only be one LLM generation span per agent run which is a direct child of the root agent span\n return directLLMSpans[0]!;\n }\n\n throw new Error('No LLM generation span found in trace');\n}\n\n/**\n * Extract common trace validation and span tree building logic\n */\nfunction prepareTraceForTransformation(trace: AITraceRecord) {\n validateTrace(trace);\n const spanTree = buildSpanTree(trace.spans);\n\n // Find the root agent run span\n const rootAgentSpan = spanTree.rootSpans.find(span => span.spanType === 'agent_run') as AISpanRecord | undefined;\n\n if (!rootAgentSpan) {\n throw new Error('No root agent_run span found in trace');\n }\n\n return { spanTree, rootAgentSpan };\n}\n\nexport function transformTraceToScorerInputAndOutput(trace: AITraceRecord): {\n input: ScorerRunInputForAgent;\n output: ScorerRunOutputForAgent;\n} {\n const { spanTree, rootAgentSpan } = prepareTraceForTransformation(trace);\n\n if (!rootAgentSpan.output) {\n throw new Error('Root agent span has no output');\n }\n\n // Build input\n const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);\n const inputMessages = extractInputMessages(rootAgentSpan);\n const systemMessages = extractSystemMessages(primaryLLMSpan);\n\n // Extract remembered messages from LLM span (excluding current input)\n const currentInputContent = inputMessages[0]?.content || '';\n const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);\n\n const input = {\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n inputMessages: inputMessages as UIMessageWithMetadata[],\n rememberedMessages: rememberedMessages as UIMessageWithMetadata[],\n systemMessages,\n taggedSystemMessages: {}, // Todo: Support tagged system messages\n };\n\n // Build output\n const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);\n const responseText = rootAgentSpan.output.text || '';\n\n const responseMessage: TransformedUIMessage = {\n role: 'assistant',\n content: responseText,\n createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),\n // @ts-ignore\n parts: createMessageParts(toolInvocations, responseText),\n experimental_attachments: [],\n // Tool invocations are being deprecated however we need to support it for now\n toolInvocations: toolInvocations as unknown as ToolInvocation[],\n };\n\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n const output = [responseMessage as UIMessageWithMetadata];\n\n return {\n input,\n output,\n };\n}\n","import pMap from 'p-map';\nimport z from 'zod';\nimport { InternalSpans } from '../../ai-tracing';\nimport type { TracingContext } from '../../ai-tracing';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../error';\nimport type { AISpanRecord, AITraceRecord, MastraStorage } from '../../storage';\nimport { createStep, createWorkflow } from '../../workflows/evented';\nimport type { MastraScorer, ScorerRun } from '../base';\nimport type { ScoreRowData } from '../types';\nimport { saveScorePayloadSchema } from '../types';\nimport { transformTraceToScorerInputAndOutput } from './utils';\n\nconst getTraceStep = createStep({\n id: '__process-trace-scoring',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n execute: async ({ inputData, tracingContext, mastra }) => {\n const logger = mastra.getLogger();\n if (!logger) {\n console.warn(\n '[scoreTracesWorkflow] Logger not initialized: no debug or error logs will be recorded for scoring traces.',\n );\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n const mastraError = new MastraError({\n id: 'MASTRA_STORAGE_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Storage not found for trace scoring',\n details: {\n scorerName: inputData.scorerName,\n },\n });\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n let scorer: MastraScorer | undefined;\n try {\n scorer = mastra.getScorerByName(inputData.scorerName);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n text: `Scorer not found for trace scoring`,\n details: {\n scorerName: inputData.scorerName,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n await pMap(\n inputData.targets,\n async target => {\n try {\n await runScorerOnTarget({ storage, scorer, target, tracingContext });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_SCORER_ON_TRACE',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n details: {\n scorerName: scorer.name,\n spanId: target.spanId || '',\n traceId: target.traceId,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n }\n },\n { concurrency: 3 },\n );\n },\n});\n\nexport async function runScorerOnTarget({\n storage,\n scorer,\n target,\n tracingContext,\n}: {\n storage: MastraStorage;\n scorer: MastraScorer;\n target: { traceId: string; spanId?: string };\n tracingContext: TracingContext;\n}) {\n // TODO: add storage api to get a single span\n const trace = await storage.getAITrace(target.traceId);\n\n if (!trace) {\n throw new Error(`Trace not found for scoring, traceId: ${target.traceId}`);\n }\n\n let span: AISpanRecord | undefined;\n if (target.spanId) {\n span = trace.spans.find(span => span.spanId === target.spanId);\n } else {\n span = trace.spans.find(span => span.parentSpanId === null);\n }\n\n if (!span) {\n throw new Error(\n `Span not found for scoring, traceId: ${target.traceId}, spanId: ${target.spanId ?? 'Not provided'}`,\n );\n }\n\n const scorerRun = buildScorerRun({\n scorerType: scorer.type === 'agent' ? 'agent' : undefined,\n tracingContext,\n trace,\n targetSpan: span,\n });\n\n const result = await scorer.run(scorerRun);\n const traceId = `${target.traceId}${target.spanId ? `-${target.spanId}` : ''}`;\n const scorerResult = {\n ...result,\n scorer: {\n id: scorer.name,\n name: scorer.name,\n description: scorer.description,\n },\n traceId,\n entityId: span.name,\n entityType: span.spanType,\n entity: { traceId: span.traceId, spanId: span.spanId },\n source: 'TEST',\n scorerId: scorer.name,\n };\n\n const savedScoreRecord = await validateAndSaveScore({ storage, scorerResult });\n await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });\n}\n\nasync function validateAndSaveScore({ storage, scorerResult }: { storage: MastraStorage; scorerResult: ScorerRun }) {\n const payloadToSave = saveScorePayloadSchema.parse(scorerResult);\n const result = await storage.saveScore(payloadToSave);\n return result.score;\n}\n\nfunction buildScorerRun({\n scorerType,\n tracingContext,\n trace,\n targetSpan,\n}: {\n scorerType?: string;\n tracingContext: TracingContext;\n trace: AITraceRecord;\n targetSpan: AISpanRecord;\n}) {\n let runPayload: ScorerRun;\n if (scorerType === 'agent') {\n const { input, output } = transformTraceToScorerInputAndOutput(trace);\n runPayload = {\n input,\n output,\n };\n } else {\n runPayload = { input: targetSpan.input, output: targetSpan.output };\n }\n\n runPayload.tracingContext = tracingContext;\n return runPayload;\n}\n\nasync function attachScoreToSpan({\n storage,\n span,\n scoreRecord,\n}: {\n storage: MastraStorage;\n span: AISpanRecord;\n scoreRecord: ScoreRowData;\n}) {\n const existingLinks = span.links || [];\n const link = {\n type: 'score',\n scoreId: scoreRecord.id,\n scorerName: scoreRecord.scorer.name,\n score: scoreRecord.score,\n createdAt: scoreRecord.createdAt,\n };\n await storage.updateAISpan({\n spanId: span.spanId,\n traceId: span.traceId,\n updates: { links: [...existingLinks, link] },\n });\n}\n\nexport const scoreTracesWorkflow = createWorkflow({\n id: '__batch-scoring-traces',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n steps: [getTraceStep],\n options: {\n tracingPolicy: {\n internal: InternalSpans.ALL,\n },\n },\n});\n\nscoreTracesWorkflow.then(getTraceStep).commit();\n"]}
1
+ {"version":3,"sources":["../../../src/scores/scoreTraces/scoreTraces.ts","../../../src/scores/scoreTraces/utils.ts","../../../src/scores/scoreTraces/scoreTracesWorkflow.ts"],"names":["MastraError","convertMessages","createStep","z","pMap","span","saveScorePayloadSchema","createWorkflow"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MastraError } from '../../error';\nimport type { Mastra } from '../../mastra';\n\nexport async function scoreTraces({\n scorerName,\n targets,\n mastra,\n}: {\n scorerName: string;\n targets: { traceId: string; spanId?: string }[];\n mastra: Mastra;\n}) {\n const workflow = mastra.__getInternalWorkflow('__batch-scoring-traces');\n try {\n const run = await workflow.createRunAsync();\n await run.start({ inputData: { targets, scorerName } });\n } catch (error) {\n const mastraError = new MastraError(\n {\n category: 'SYSTEM',\n domain: 'SCORER',\n id: 'MASTRA_SCORER_FAILED_TO_RUN_TRACE_SCORING',\n details: {\n scorerName,\n targets: JSON.stringify(targets),\n },\n },\n error,\n );\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n}\n","import type { ToolInvocation } from 'ai-v4';\nimport type { UIMessageWithMetadata } from '../../agent';\nimport { convertMessages } from '../../agent/message-list/utils/convert-messages';\nimport { AISpanType } from '../../ai-tracing';\nimport type { AISpanRecord, AITraceRecord } from '../../storage';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../types';\n\n// // Span tree structure for efficient lookups\ninterface SpanTree {\n spanMap: Map<string, AISpanRecord>;\n childrenMap: Map<string, AISpanRecord[]>;\n rootSpans: AISpanRecord[];\n}\n\n// Spans don't have ids, so we need to omit it from the UIMessageWithMetadata type\ntype TransformedUIMessage = Omit<UIMessageWithMetadata, 'id'>;\n\n/**\n * Build a hierarchical span tree with efficient lookup maps\n */\nexport function buildSpanTree(spans: AISpanRecord[]): SpanTree {\n const spanMap = new Map<string, AISpanRecord>();\n const childrenMap = new Map<string, AISpanRecord[]>();\n const rootSpans: AISpanRecord[] = [];\n\n // First pass: build span map\n for (const span of spans) {\n spanMap.set(span.spanId, span);\n }\n\n // Second pass: build parent-child relationships\n for (const span of spans) {\n if (span.parentSpanId === null) {\n rootSpans.push(span);\n } else {\n const siblings = childrenMap.get(span.parentSpanId) || [];\n siblings.push(span);\n childrenMap.set(span.parentSpanId, siblings);\n }\n }\n\n // Sort children by startedAt timestamp for temporal ordering\n for (const children of childrenMap.values()) {\n children.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n }\n\n // Sort root spans by startedAt\n rootSpans.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n\n return { spanMap, childrenMap, rootSpans };\n}\n\n/**\n * Extract children spans of a specific type\n */\nfunction getChildrenOfType<T extends AISpanRecord>(\n spanTree: SpanTree,\n parentSpanId: string,\n spanType: AISpanType,\n): T[] {\n const children = spanTree.childrenMap.get(parentSpanId) || [];\n return children.filter(span => span.spanType === spanType) as T[];\n}\n\n/**\n * Convert AI SDK v5 message content to v4 format\n */\nfunction normalizeMessageContent(content: string | Array<{ type: string; text: string }>): string {\n if (typeof content === 'string') {\n return content;\n }\n\n const tempMessage = {\n id: 'temp',\n role: 'user' as const,\n parts: content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n\n const converted = convertMessages(tempMessage).to('AIV4.UI');\n return converted[0]?.content || '';\n}\n\n/**\n * Convert v5 message to v4 UIMessage format using convertMessages\n * Ensures full consistency with AI SDK UIMessage behavior\n */\nfunction convertToUIMessage(\n message: { role: string; content: string | Array<{ type: string; text: string }> },\n createdAt: Date,\n): UIMessageWithMetadata {\n // Create proper message input for convertMessages\n let messageInput;\n if (typeof message.content === 'string') {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n content: message.content,\n };\n } else {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n parts: message.content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n }\n\n const converted = convertMessages(messageInput).to('AIV4.UI');\n const result = converted[0];\n\n if (!result) {\n throw new Error('Failed to convert message');\n }\n\n return {\n ...result,\n id: '', // Spans don't have message IDs\n createdAt: new Date(createdAt), // Use span timestamp\n };\n}\n\n/**\n * Extract input messages from agent run span\n */\nfunction extractInputMessages(agentSpan: AISpanRecord): TransformedUIMessage[] {\n const input = agentSpan.input;\n\n // Handle different input formats\n if (typeof input === 'string') {\n return [\n {\n role: 'user',\n content: input,\n createdAt: new Date(agentSpan.startedAt),\n parts: [{ type: 'text', text: input }],\n experimental_attachments: [],\n },\n ];\n }\n\n if (Array.isArray(input)) {\n return input.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n\n // @ts-ignore\n if (input && typeof input === 'object' && Array.isArray(input.messages)) {\n // @ts-ignore\n return input.messages.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n return [];\n}\n\n/**\n * Extract system messages from LLM span\n */\nfunction extractSystemMessages(llmSpan: AISpanRecord): Array<{ role: 'system'; content: string }> {\n return (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role === 'system')\n .map((msg: any) => ({\n role: 'system' as const,\n content: normalizeMessageContent(msg.content),\n }));\n}\n\n/**\n * Extract conversation history (remembered messages) from LLM span\n * Excludes system messages and the current input message\n */\nfunction extractRememberedMessages(llmSpan: AISpanRecord, currentInputContent: string): TransformedUIMessage[] {\n const messages = (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role !== 'system')\n .filter((msg: any) => normalizeMessageContent(msg.content) !== currentInputContent);\n\n return messages.map((msg: any) => convertToUIMessage(msg, llmSpan.startedAt));\n}\n\n/**\n * Reconstruct tool invocations from tool call spans\n */\nfunction reconstructToolInvocations(spanTree: SpanTree, parentSpanId: string) {\n const toolSpans = getChildrenOfType<AISpanRecord>(spanTree, parentSpanId, AISpanType.TOOL_CALL);\n\n return toolSpans.map(toolSpan => ({\n state: 'result' as const,\n toolName: toolSpan.attributes?.toolId,\n args: toolSpan.input || {},\n result: toolSpan.output || {},\n }));\n}\n\n/**\n * Create message parts array including tool invocations and text\n */\nfunction createMessageParts(toolInvocations: AISpanRecord[], textContent: string) {\n const parts: { type: 'tool-invocation' | 'text'; toolInvocation?: AISpanRecord; text?: string }[] = [];\n for (const toolInvocation of toolInvocations) {\n parts.push({\n type: 'tool-invocation',\n toolInvocation,\n });\n }\n\n if (textContent.trim()) {\n parts.push({\n type: 'text',\n text: textContent,\n });\n }\n\n return parts;\n}\n\n/**\n * Validate trace structure and throw descriptive errors\n */\nexport function validateTrace(trace: AITraceRecord): void {\n if (!trace) {\n throw new Error('Trace is null or undefined');\n }\n\n if (!trace.spans || !Array.isArray(trace.spans)) {\n throw new Error('Trace must have a spans array');\n }\n\n if (trace.spans.length === 0) {\n throw new Error('Trace has no spans');\n }\n\n // Check for circular references in parent-child relationships\n const spanIds = new Set(trace.spans.map(span => span.spanId));\n for (const span of trace.spans) {\n if (span.parentSpanId && !spanIds.has(span.parentSpanId)) {\n throw new Error(`Span ${span.spanId} references non-existent parent ${span.parentSpanId}`);\n }\n }\n}\n\n/**\n * Find the most recent LLM span that contains conversation history\n */\nfunction findPrimaryLLMSpan(spanTree: SpanTree, rootAgentSpan: AISpanRecord): AISpanRecord {\n const directLLMSpans = getChildrenOfType<AISpanRecord>(spanTree, rootAgentSpan.spanId, AISpanType.LLM_GENERATION);\n if (directLLMSpans.length > 0) {\n // There should only be one LLM generation span per agent run which is a direct child of the root agent span\n return directLLMSpans[0]!;\n }\n\n throw new Error('No LLM generation span found in trace');\n}\n\n/**\n * Extract common trace validation and span tree building logic\n */\nfunction prepareTraceForTransformation(trace: AITraceRecord) {\n validateTrace(trace);\n const spanTree = buildSpanTree(trace.spans);\n\n // Find the root agent run span\n const rootAgentSpan = spanTree.rootSpans.find(span => span.spanType === 'agent_run') as AISpanRecord | undefined;\n\n if (!rootAgentSpan) {\n throw new Error('No root agent_run span found in trace');\n }\n\n return { spanTree, rootAgentSpan };\n}\n\nexport function transformTraceToScorerInputAndOutput(trace: AITraceRecord): {\n input: ScorerRunInputForAgent;\n output: ScorerRunOutputForAgent;\n} {\n const { spanTree, rootAgentSpan } = prepareTraceForTransformation(trace);\n\n if (!rootAgentSpan.output) {\n throw new Error('Root agent span has no output');\n }\n\n // Build input\n const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);\n const inputMessages = extractInputMessages(rootAgentSpan);\n const systemMessages = extractSystemMessages(primaryLLMSpan);\n\n // Extract remembered messages from LLM span (excluding current input)\n const currentInputContent = inputMessages[0]?.content || '';\n const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);\n\n const input = {\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n inputMessages: inputMessages as UIMessageWithMetadata[],\n rememberedMessages: rememberedMessages as UIMessageWithMetadata[],\n systemMessages,\n taggedSystemMessages: {}, // Todo: Support tagged system messages\n };\n\n // Build output\n const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);\n const responseText = rootAgentSpan.output.text || '';\n\n const responseMessage: TransformedUIMessage = {\n role: 'assistant',\n content: responseText,\n createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),\n // @ts-ignore\n parts: createMessageParts(toolInvocations, responseText),\n experimental_attachments: [],\n // Tool invocations are being deprecated however we need to support it for now\n toolInvocations: toolInvocations as unknown as ToolInvocation[],\n };\n\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n const output = [responseMessage as UIMessageWithMetadata];\n\n return {\n input,\n output,\n };\n}\n","import pMap from 'p-map';\nimport z from 'zod';\nimport { InternalSpans } from '../../ai-tracing';\nimport type { TracingContext } from '../../ai-tracing';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../error';\nimport type { AISpanRecord, AITraceRecord, MastraStorage } from '../../storage';\nimport { createStep, createWorkflow } from '../../workflows/evented';\nimport type { MastraScorer, ScorerRun } from '../base';\nimport type { ScoreRowData } from '../types';\nimport { saveScorePayloadSchema } from '../types';\nimport { transformTraceToScorerInputAndOutput } from './utils';\n\nconst getTraceStep = createStep({\n id: '__process-trace-scoring',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n execute: async ({ inputData, tracingContext, mastra }) => {\n const logger = mastra.getLogger();\n if (!logger) {\n console.warn(\n '[scoreTracesWorkflow] Logger not initialized: no debug or error logs will be recorded for scoring traces.',\n );\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n const mastraError = new MastraError({\n id: 'MASTRA_STORAGE_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Storage not found for trace scoring',\n details: {\n scorerName: inputData.scorerName,\n },\n });\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n let scorer: MastraScorer | undefined;\n try {\n scorer = mastra.getScorerByName(inputData.scorerName);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n text: `Scorer not found for trace scoring`,\n details: {\n scorerName: inputData.scorerName,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n await pMap(\n inputData.targets,\n async target => {\n try {\n await runScorerOnTarget({ storage, scorer, target, tracingContext });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_SCORER_ON_TRACE',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n details: {\n scorerName: scorer.name,\n spanId: target.spanId || '',\n traceId: target.traceId,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n }\n },\n { concurrency: 3 },\n );\n },\n});\n\nexport async function runScorerOnTarget({\n storage,\n scorer,\n target,\n tracingContext,\n}: {\n storage: MastraStorage;\n scorer: MastraScorer;\n target: { traceId: string; spanId?: string };\n tracingContext: TracingContext;\n}) {\n // TODO: add storage api to get a single span\n const trace = await storage.getAITrace(target.traceId);\n\n if (!trace) {\n throw new Error(`Trace not found for scoring, traceId: ${target.traceId}`);\n }\n\n let span: AISpanRecord | undefined;\n if (target.spanId) {\n span = trace.spans.find(span => span.spanId === target.spanId);\n } else {\n span = trace.spans.find(span => span.parentSpanId === null);\n }\n\n if (!span) {\n throw new Error(\n `Span not found for scoring, traceId: ${target.traceId}, spanId: ${target.spanId ?? 'Not provided'}`,\n );\n }\n\n const scorerRun = buildScorerRun({\n scorerType: scorer.type === 'agent' ? 'agent' : undefined,\n tracingContext,\n trace,\n targetSpan: span,\n });\n\n const result = await scorer.run(scorerRun);\n const scorerResult = {\n ...result,\n scorer: {\n id: scorer.name,\n name: scorer.name,\n description: scorer.description,\n },\n traceId: target.traceId,\n spanId: target.spanId,\n entityId: span.name,\n entityType: span.spanType,\n entity: { traceId: span.traceId, spanId: span.spanId },\n source: 'TEST',\n scorerId: scorer.name,\n };\n\n const savedScoreRecord = await validateAndSaveScore({ storage, scorerResult });\n await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });\n}\n\nasync function validateAndSaveScore({ storage, scorerResult }: { storage: MastraStorage; scorerResult: ScorerRun }) {\n const payloadToSave = saveScorePayloadSchema.parse(scorerResult);\n const result = await storage.saveScore(payloadToSave);\n return result.score;\n}\n\nfunction buildScorerRun({\n scorerType,\n tracingContext,\n trace,\n targetSpan,\n}: {\n scorerType?: string;\n tracingContext: TracingContext;\n trace: AITraceRecord;\n targetSpan: AISpanRecord;\n}) {\n let runPayload: ScorerRun;\n if (scorerType === 'agent') {\n const { input, output } = transformTraceToScorerInputAndOutput(trace);\n runPayload = {\n input,\n output,\n };\n } else {\n runPayload = { input: targetSpan.input, output: targetSpan.output };\n }\n\n runPayload.tracingContext = tracingContext;\n return runPayload;\n}\n\nasync function attachScoreToSpan({\n storage,\n span,\n scoreRecord,\n}: {\n storage: MastraStorage;\n span: AISpanRecord;\n scoreRecord: ScoreRowData;\n}) {\n const existingLinks = span.links || [];\n const link = {\n type: 'score',\n scoreId: scoreRecord.id,\n scorerName: scoreRecord.scorer.name,\n score: scoreRecord.score,\n createdAt: scoreRecord.createdAt,\n };\n await storage.updateAISpan({\n spanId: span.spanId,\n traceId: span.traceId,\n updates: { links: [...existingLinks, link] },\n });\n}\n\nexport const scoreTracesWorkflow = createWorkflow({\n id: '__batch-scoring-traces',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n steps: [getTraceStep],\n options: {\n tracingPolicy: {\n internal: InternalSpans.ALL,\n },\n },\n});\n\nscoreTracesWorkflow.then(getTraceStep).commit();\n"]}
@@ -1,6 +1,6 @@
1
- import { createStep, createWorkflow } from '../../chunk-PVVDB5IT.js';
2
- import { saveScorePayloadSchema } from '../../chunk-RLLLUDY3.js';
3
- import { convertMessages } from '../../chunk-O2WF4GIK.js';
1
+ import { createStep, createWorkflow } from '../../chunk-UQCUAYWV.js';
2
+ import { saveScorePayloadSchema } from '../../chunk-XL5MZTLP.js';
3
+ import { convertMessages } from '../../chunk-YUV3LZMY.js';
4
4
  import { MastraError } from '../../chunk-T3JFFQH2.js';
5
5
  import pMap from 'p-map';
6
6
  import z from 'zod';
@@ -336,7 +336,6 @@ async function runScorerOnTarget({
336
336
  targetSpan: span
337
337
  });
338
338
  const result = await scorer.run(scorerRun);
339
- const traceId = `${target.traceId}${target.spanId ? `-${target.spanId}` : ""}`;
340
339
  const scorerResult = {
341
340
  ...result,
342
341
  scorer: {
@@ -344,7 +343,8 @@ async function runScorerOnTarget({
344
343
  name: scorer.name,
345
344
  description: scorer.description
346
345
  },
347
- traceId,
346
+ traceId: target.traceId,
347
+ spanId: target.spanId,
348
348
  entityId: span.name,
349
349
  entityType: span.spanType,
350
350
  entity: { traceId: span.traceId, spanId: span.spanId },