@mastra/core 0.22.2 → 0.23.0-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.
- package/CHANGELOG.md +30 -0
- package/dist/agent/agent.d.ts +5 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.types.d.ts +5 -1
- 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 +32 -0
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/utils.d.ts +2 -8
- package/dist/agent/utils.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts +6 -2
- package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts +6 -2
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
- package/dist/ai-tracing/chunk-tracing.d.ts +10 -10
- package/dist/ai-tracing/chunk-tracing.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +36 -36
- package/dist/ai-tracing/index.js +1 -1
- package/dist/ai-tracing/types.d.ts +17 -17
- package/dist/ai-tracing/types.d.ts.map +1 -1
- package/dist/{chunk-5CHZUAZV.cjs → chunk-34WQUECJ.cjs} +98 -98
- package/dist/chunk-34WQUECJ.cjs.map +1 -0
- package/dist/{chunk-VQLW7LPO.js → chunk-34ZCWSUA.js} +3 -3
- package/dist/{chunk-VQLW7LPO.js.map → chunk-34ZCWSUA.js.map} +1 -1
- package/dist/{chunk-YGL6E6PD.cjs → chunk-3JX2Y3WH.cjs} +9 -9
- package/dist/{chunk-YGL6E6PD.cjs.map → chunk-3JX2Y3WH.cjs.map} +1 -1
- package/dist/{chunk-RWWOJXMF.cjs → chunk-4XE7GVZM.cjs} +23 -23
- package/dist/{chunk-RWWOJXMF.cjs.map → chunk-4XE7GVZM.cjs.map} +1 -1
- package/dist/{chunk-FMNZ3BPT.cjs → chunk-4YHU6R7W.cjs} +96 -12
- package/dist/chunk-4YHU6R7W.cjs.map +1 -0
- package/dist/{chunk-WM4VQWOZ.cjs → chunk-5NTO7S5I.cjs} +72 -2
- package/dist/chunk-5NTO7S5I.cjs.map +1 -0
- package/dist/{chunk-MQ67HP3O.cjs → chunk-5P4S4AVU.cjs} +4 -4
- package/dist/{chunk-MQ67HP3O.cjs.map → chunk-5P4S4AVU.cjs.map} +1 -1
- package/dist/{chunk-576KDLXN.cjs → chunk-6KOL2B3A.cjs} +5 -5
- package/dist/{chunk-576KDLXN.cjs.map → chunk-6KOL2B3A.cjs.map} +1 -1
- package/dist/{chunk-T2RDWNN6.js → chunk-7KYNQSR4.js} +38 -39
- package/dist/chunk-7KYNQSR4.js.map +1 -0
- package/dist/{chunk-AMHNTB4N.cjs → chunk-7XAVBWZI.cjs} +19 -19
- package/dist/{chunk-AMHNTB4N.cjs.map → chunk-7XAVBWZI.cjs.map} +1 -1
- package/dist/{chunk-HZIF7HQC.js → chunk-A55YFHFT.js} +8 -8
- package/dist/{chunk-HZIF7HQC.js.map → chunk-A55YFHFT.js.map} +1 -1
- package/dist/{chunk-2JUDZXVI.cjs → chunk-AQGLVU53.cjs} +6 -6
- package/dist/{chunk-2JUDZXVI.cjs.map → chunk-AQGLVU53.cjs.map} +1 -1
- package/dist/{chunk-2DVGQK2L.js → chunk-BLUDYAPI.js} +3 -3
- package/dist/{chunk-2DVGQK2L.js.map → chunk-BLUDYAPI.js.map} +1 -1
- package/dist/{chunk-ROBLMWF6.cjs → chunk-DMBN72QF.cjs} +4 -4
- package/dist/{chunk-ROBLMWF6.cjs.map → chunk-DMBN72QF.cjs.map} +1 -1
- package/dist/{chunk-HD455BM6.cjs → chunk-DPE27ECD.cjs} +23 -23
- package/dist/{chunk-HD455BM6.cjs.map → chunk-DPE27ECD.cjs.map} +1 -1
- package/dist/{chunk-CGT36GQE.cjs → chunk-HANVMC6C.cjs} +36 -36
- package/dist/{chunk-CGT36GQE.cjs.map → chunk-HANVMC6C.cjs.map} +1 -1
- package/dist/{chunk-5NYWRAJN.js → chunk-HFXV34OE.js} +3 -3
- package/dist/{chunk-5NYWRAJN.js.map → chunk-HFXV34OE.js.map} +1 -1
- package/dist/{chunk-KQBF5ZEN.js → chunk-ITCG6QJR.js} +5 -5
- package/dist/{chunk-KQBF5ZEN.js.map → chunk-ITCG6QJR.js.map} +1 -1
- package/dist/{chunk-634YFL42.cjs → chunk-JTI6TVDV.cjs} +63 -12
- package/dist/chunk-JTI6TVDV.cjs.map +1 -0
- package/dist/{chunk-RBO5BUGG.js → chunk-JVV5LREI.js} +3 -3
- package/dist/{chunk-RBO5BUGG.js.map → chunk-JVV5LREI.js.map} +1 -1
- package/dist/{chunk-A3TQYIIR.js → chunk-JZ7I64PK.js} +93 -9
- package/dist/chunk-JZ7I64PK.js.map +1 -0
- package/dist/{chunk-PJDIDFKV.js → chunk-MRJUTTCU.js} +3 -3
- package/dist/{chunk-PJDIDFKV.js.map → chunk-MRJUTTCU.js.map} +1 -1
- package/dist/{chunk-NFIADRH5.js → chunk-NPNGPMT2.js} +3 -3
- package/dist/{chunk-NFIADRH5.js.map → chunk-NPNGPMT2.js.map} +1 -1
- package/dist/{chunk-IQGDOBME.cjs → chunk-NUAURT4I.cjs} +6 -6
- package/dist/{chunk-IQGDOBME.cjs.map → chunk-NUAURT4I.cjs.map} +1 -1
- package/dist/{chunk-4PMF7QUH.js → chunk-NVDVFJWA.js} +4 -4
- package/dist/{chunk-4PMF7QUH.js.map → chunk-NVDVFJWA.js.map} +1 -1
- package/dist/{chunk-M4AX46DS.js → chunk-OIT3PCWA.js} +3 -3
- package/dist/{chunk-M4AX46DS.js.map → chunk-OIT3PCWA.js.map} +1 -1
- package/dist/{chunk-3CVE7NQC.js → chunk-ONKGWHY6.js} +17 -17
- package/dist/chunk-ONKGWHY6.js.map +1 -0
- package/dist/{chunk-5GIAZ3CH.cjs → chunk-PDST7KX7.cjs} +22 -22
- package/dist/chunk-PDST7KX7.cjs.map +1 -0
- package/dist/{chunk-VD27FF3L.js → chunk-PS4ABZY7.js} +7 -7
- package/dist/{chunk-VD27FF3L.js.map → chunk-PS4ABZY7.js.map} +1 -1
- package/dist/{chunk-T3JFFQH2.js → chunk-PZUZNPFM.js} +72 -3
- package/dist/chunk-PZUZNPFM.js.map +1 -0
- package/dist/{chunk-VX7NIAMW.js → chunk-QOTPNUIA.js} +5 -5
- package/dist/{chunk-VX7NIAMW.js.map → chunk-QOTPNUIA.js.map} +1 -1
- package/dist/{chunk-TKYKL7Y4.cjs → chunk-TX4TTPYJ.cjs} +16 -16
- package/dist/{chunk-TKYKL7Y4.cjs.map → chunk-TX4TTPYJ.cjs.map} +1 -1
- package/dist/{chunk-ZDW322JC.cjs → chunk-TYWQLUF6.cjs} +8 -8
- package/dist/{chunk-ZDW322JC.cjs.map → chunk-TYWQLUF6.cjs.map} +1 -1
- package/dist/{chunk-A4B6IAKN.cjs → chunk-VTNVK7HN.cjs} +4 -4
- package/dist/{chunk-A4B6IAKN.cjs.map → chunk-VTNVK7HN.cjs.map} +1 -1
- package/dist/{chunk-I7KJDXUK.cjs → chunk-WBAXXG34.cjs} +19 -19
- package/dist/{chunk-I7KJDXUK.cjs.map → chunk-WBAXXG34.cjs.map} +1 -1
- package/dist/{chunk-LBEV3YZ2.js → chunk-WCHE6FJ7.js} +4 -4
- package/dist/{chunk-LBEV3YZ2.js.map → chunk-WCHE6FJ7.js.map} +1 -1
- package/dist/{chunk-Z2OK2JM2.js → chunk-ZISECZZO.js} +3 -3
- package/dist/{chunk-Z2OK2JM2.js.map → chunk-ZISECZZO.js.map} +1 -1
- package/dist/{chunk-AGD5B3FB.js → chunk-ZWF7AVLU.js} +55 -4
- package/dist/chunk-ZWF7AVLU.js.map +1 -0
- package/dist/error/index.cjs +9 -5
- package/dist/error/index.d.ts +1 -1
- package/dist/error/index.d.ts.map +1 -1
- package/dist/error/index.js +1 -1
- package/dist/error/utils.d.ts +28 -0
- package/dist/error/utils.d.ts.map +1 -1
- package/dist/eval/index.cjs +3 -3
- package/dist/eval/index.js +1 -1
- package/dist/index.cjs +72 -68
- package/dist/index.js +15 -15
- package/dist/llm/index.cjs +7 -7
- package/dist/llm/index.js +1 -1
- package/dist/llm/model/model.loop.d.ts +1 -1
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/provider-registry.d.ts.map +1 -1
- package/dist/llm/model/provider-types.generated.d.ts +14 -0
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/loop.d.ts.map +1 -1
- package/dist/loop/types.d.ts +6 -3
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-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/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/netlify-TX6V7SJJ.cjs +12 -0
- package/dist/{netlify-F3MVGV4Y.cjs.map → netlify-TX6V7SJJ.cjs.map} +1 -1
- package/dist/netlify-VJXBII33.js +3 -0
- package/dist/{netlify-26MMY5X4.js.map → netlify-VJXBII33.js.map} +1 -1
- package/dist/processors/index.cjs +11 -11
- package/dist/processors/index.js +1 -1
- package/dist/provider-registry.json +38 -2
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/index.cjs +9 -9
- package/dist/scores/index.js +2 -2
- package/dist/scores/scoreTraces/index.cjs +15 -15
- package/dist/scores/scoreTraces/index.cjs.map +1 -1
- package/dist/scores/scoreTraces/index.js +6 -6
- package/dist/scores/scoreTraces/index.js.map +1 -1
- package/dist/server/index.cjs +7 -7
- package/dist/server/index.js +2 -2
- package/dist/storage/index.cjs +25 -25
- package/dist/storage/index.js +4 -4
- package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/output.d.ts +2 -8
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts +31 -13
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +11 -11
- package/dist/stream/index.js +2 -2
- package/dist/telemetry/index.cjs +7 -7
- package/dist/telemetry/index.js +1 -1
- package/dist/test-utils/llm-mock.cjs +2 -2
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tts/index.cjs +2 -2
- package/dist/tts/index.js +1 -1
- package/dist/utils.cjs +17 -17
- package/dist/utils.js +1 -1
- package/dist/vector/index.cjs +4 -4
- package/dist/vector/index.js +1 -1
- package/dist/voice/index.cjs +4 -4
- package/dist/voice/index.js +1 -1
- package/dist/workflows/default.d.ts +11 -1
- package/dist/workflows/default.d.ts.map +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/execution-engine.d.ts +3 -0
- package/dist/workflows/execution-engine.d.ts.map +1 -1
- package/dist/workflows/index.cjs +16 -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/step.d.ts +1 -1
- package/dist/workflows/step.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +16 -1
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/utils.d.ts +7 -0
- package/dist/workflows/utils.d.ts.map +1 -1
- package/dist/workflows/workflow.d.ts +12 -3
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +10 -3
- package/src/llm/model/provider-types.generated.d.ts +14 -0
- package/dist/chunk-3CVE7NQC.js.map +0 -1
- package/dist/chunk-5CHZUAZV.cjs.map +0 -1
- package/dist/chunk-5GIAZ3CH.cjs.map +0 -1
- package/dist/chunk-634YFL42.cjs.map +0 -1
- package/dist/chunk-A3TQYIIR.js.map +0 -1
- package/dist/chunk-AGD5B3FB.js.map +0 -1
- package/dist/chunk-FMNZ3BPT.cjs.map +0 -1
- package/dist/chunk-T2RDWNN6.js.map +0 -1
- package/dist/chunk-T3JFFQH2.js.map +0 -1
- package/dist/chunk-WM4VQWOZ.cjs.map +0 -1
- package/dist/netlify-26MMY5X4.js +0 -3
- package/dist/netlify-F3MVGV4Y.cjs +0 -12
|
@@ -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';\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
|
+
{"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';\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 model span that contains conversation history\n */\nfunction findPrimaryLLMSpan(spanTree: SpanTree, rootAgentSpan: AISpanRecord): AISpanRecord {\n const directLLMSpans = getChildrenOfType<AISpanRecord>(spanTree, rootAgentSpan.spanId, AISpanType.MODEL_GENERATION);\n if (directLLMSpans.length > 0) {\n // There should only be one model 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 model 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,7 +1,7 @@
|
|
|
1
|
-
import { createStep, createWorkflow } from '../../chunk-
|
|
2
|
-
import { saveScorePayloadSchema } from '../../chunk-
|
|
3
|
-
import { convertMessages } from '../../chunk-
|
|
4
|
-
import { MastraError } from '../../chunk-
|
|
1
|
+
import { createStep, createWorkflow } from '../../chunk-NVDVFJWA.js';
|
|
2
|
+
import { saveScorePayloadSchema } from '../../chunk-HFXV34OE.js';
|
|
3
|
+
import { convertMessages } from '../../chunk-ZWF7AVLU.js';
|
|
4
|
+
import { MastraError } from '../../chunk-PZUZNPFM.js';
|
|
5
5
|
import pMap from 'p-map';
|
|
6
6
|
import z from 'zod';
|
|
7
7
|
|
|
@@ -174,11 +174,11 @@ function validateTrace(trace) {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
function findPrimaryLLMSpan(spanTree, rootAgentSpan) {
|
|
177
|
-
const directLLMSpans = getChildrenOfType(spanTree, rootAgentSpan.spanId, "
|
|
177
|
+
const directLLMSpans = getChildrenOfType(spanTree, rootAgentSpan.spanId, "model_generation" /* MODEL_GENERATION */);
|
|
178
178
|
if (directLLMSpans.length > 0) {
|
|
179
179
|
return directLLMSpans[0];
|
|
180
180
|
}
|
|
181
|
-
throw new Error("No
|
|
181
|
+
throw new Error("No model generation span found in trace");
|
|
182
182
|
}
|
|
183
183
|
function prepareTraceForTransformation(trace) {
|
|
184
184
|
validateTrace(trace);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/scores/scoreTraces/scoreTraces.ts","../../../src/scores/scoreTraces/utils.ts","../../../src/scores/scoreTraces/scoreTracesWorkflow.ts"],"names":["span"],"mappings":";;;;;;;;AAGA,eAAsB,WAAA,CAAY;AAAA,EAChC,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,qBAAA,CAAsB,wBAAwB,CAAA;AACtE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,cAAA,EAAe;AAC1C,IAAA,MAAM,GAAA,CAAI,MAAM,EAAE,SAAA,EAAW,EAAE,OAAA,EAAS,UAAA,IAAc,CAAA;AAAA,EACxD,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,cAAc,IAAI,WAAA;AAAA,MACtB;AAAA,QACE,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI,2CAAA;AAAA,QACJ,OAAA,EAAS;AAAA,UACP,UAAA;AAAA,UACA,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA;AACjC,OACF;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,SAAA,EAAU,EAAG,cAAA,CAAe,WAAW,CAAA;AAC9C,IAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,WAAA,CAAY,UAAU,CAAA;AAAA,EAClD;AACF;;;ACZO,SAAS,cAAc,KAAA,EAAiC;AAC7D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA0B;AAC9C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAA4B;AACpD,EAAA,MAAM,YAA4B,EAAC;AAGnC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC/B;AAGA,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,iBAAiB,IAAA,EAAM;AAC9B,MAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,MAAM,WAAW,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,YAAY,KAAK,EAAC;AACxD,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,MAAA,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,YAAA,EAAc,QAAQ,CAAA;AAAA,IAC7C;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,QAAA,IAAY,WAAA,CAAY,MAAA,EAAO,EAAG;AAC3C,IAAA,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAAA,EAC3F;AAGA,EAAA,SAAA,CAAU,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAE1F,EAAA,OAAO,EAAE,OAAA,EAAS,WAAA,EAAa,SAAA,EAAU;AAC3C;AAKA,SAAS,iBAAA,CACP,QAAA,EACA,YAAA,EACA,QAAA,EACK;AACL,EAAA,MAAM,WAAW,QAAA,CAAS,WAAA,CAAY,GAAA,CAAI,YAAY,KAAK,EAAC;AAC5D,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,aAAa,QAAQ,CAAA;AAC3D;AAKA,SAAS,wBAAwB,OAAA,EAAiE;AAChG,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAgB,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,CAAE;AAAA,GAC7E;AAEA,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,WAAW,CAAA,CAAE,GAAG,SAAS,CAAA;AAC3D,EAAA,OAAO,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA,IAAW,EAAA;AAClC;AAMA,SAAS,kBAAA,CACP,SACA,SAAA,EACuB;AAEvB,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,EAAU;AACvC,IAAA,YAAA,GAAe;AAAA,MACb,EAAA,EAAI,MAAA;AAAA,MACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,SAAS,OAAA,CAAQ;AAAA,KACnB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,YAAA,GAAe;AAAA,MACb,EAAA,EAAI,MAAA;AAAA,MACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,KAAA,EAAO,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAgB,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,CAAE;AAAA,KACrF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,YAAY,CAAA,CAAE,GAAG,SAAS,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,UAAU,CAAC,CAAA;AAE1B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,EAAA,EAAI,EAAA;AAAA;AAAA,IACJ,SAAA,EAAW,IAAI,IAAA,CAAK,SAAS;AAAA;AAAA,GAC/B;AACF;AAKA,SAAS,qBAAqB,SAAA,EAAiD;AAC7E,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AAGxB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,SAAA,EAAW,IAAI,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,QACvC,OAAO,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,QACrC,0BAA0B;AAAC;AAC7B,KACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,MAAM,GAAA,CAAI,CAAA,GAAA,KAAO,mBAAmB,GAAA,EAAK,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,EACtE;AAGA,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,EAAG;AAEvE,IAAA,OAAO,KAAA,CAAM,SAAS,GAAA,CAAI,CAAA,GAAA,KAAO,mBAAmB,GAAA,EAAK,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,EAAC;AACV;AAKA,SAAS,sBAAsB,OAAA,EAAmE;AAChG,EAAA,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,QAAA,IAAY,IAChC,MAAA,CAAO,CAAC,GAAA,KAAa,GAAA,CAAI,IAAA,KAAS,QAAQ,CAAA,CAC1C,GAAA,CAAI,CAAC,GAAA,MAAc;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,uBAAA,CAAwB,GAAA,CAAI,OAAO;AAAA,GAC9C,CAAE,CAAA;AACN;AAMA,SAAS,yBAAA,CAA0B,SAAuB,mBAAA,EAAqD;AAC7G,EAAA,MAAM,QAAA,GAAA,CAAY,QAAQ,KAAA,EAAO,QAAA,IAAY,EAAC,EAC3C,MAAA,CAAO,CAAC,GAAA,KAAa,GAAA,CAAI,SAAS,QAAQ,CAAA,CAC1C,OAAO,CAAC,GAAA,KAAa,wBAAwB,GAAA,CAAI,OAAO,MAAM,mBAAmB,CAAA;AAEpF,EAAA,OAAO,QAAA,CAAS,IAAI,CAAC,GAAA,KAAa,mBAAmB,GAAA,EAAK,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC9E;AAKA,SAAS,0BAAA,CAA2B,UAAoB,YAAA,EAAsB;AAC5E,EAAA,MAAM,SAAA,GAAY,iBAAA,CAAgC,QAAA,EAAU,YAAA,EAAA,WAAA,iBAAkC;AAE9F,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,QAAA,MAAa;AAAA,IAChC,KAAA,EAAO,QAAA;AAAA,IACP,QAAA,EAAU,SAAS,UAAA,EAAY,MAAA;AAAA,IAC/B,IAAA,EAAM,QAAA,CAAS,KAAA,IAAS,EAAC;AAAA,IACzB,MAAA,EAAQ,QAAA,CAAS,MAAA,IAAU;AAAC,GAC9B,CAAE,CAAA;AACJ;AAKA,SAAS,kBAAA,CAAmB,iBAAiC,WAAA,EAAqB;AAChF,EAAA,MAAM,QAA8F,EAAC;AACrG,EAAA,KAAA,MAAW,kBAAkB,eAAA,EAAiB;AAC5C,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,iBAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAA,CAAY,MAAK,EAAG;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,cAAc,KAAA,EAA4B;AACxD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,CAAC,MAAM,KAAA,IAAS,CAAC,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,EACtC;AAGA,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAAM,MAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5D,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,IAAI,KAAK,YAAA,IAAgB,CAAC,QAAQ,GAAA,CAAI,IAAA,CAAK,YAAY,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,MAAM,CAAA,gCAAA,EAAmC,IAAA,CAAK,YAAY,CAAA,CAAE,CAAA;AAAA,IAC3F;AAAA,EACF;AACF;AAKA,SAAS,kBAAA,CAAmB,UAAoB,aAAA,EAA2C;AACzF,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAgC,QAAA,EAAU,aAAA,CAAc,MAAA,EAAA,gBAAA,sBAAiC;AAChH,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAE7B,IAAA,OAAO,eAAe,CAAC,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACzD;AAKA,SAAS,8BAA8B,KAAA,EAAsB;AAC3D,EAAA,aAAA,CAAc,KAAK,CAAA;AACnB,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAG1C,EAAA,MAAM,gBAAgB,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,aAAa,WAAW,CAAA;AAEnF,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AAEA,EAAA,OAAO,EAAE,UAAU,aAAA,EAAc;AACnC;AAEO,SAAS,qCAAqC,KAAA,EAGnD;AACA,EAAA,MAAM,EAAE,QAAA,EAAU,aAAA,EAAc,GAAI,8BAA8B,KAAK,CAAA;AAEvE,EAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AACzB,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,EACjD;AAGA,EAAA,MAAM,cAAA,GAAiB,kBAAA,CAAmB,QAAA,EAAU,aAAa,CAAA;AACjE,EAAA,MAAM,aAAA,GAAgB,qBAAqB,aAAa,CAAA;AACxD,EAAA,MAAM,cAAA,GAAiB,sBAAsB,cAAc,CAAA;AAG3D,EAAA,MAAM,mBAAA,GAAsB,aAAA,CAAc,CAAC,CAAA,EAAG,OAAA,IAAW,EAAA;AACzD,EAAA,MAAM,kBAAA,GAAqB,yBAAA,CAA0B,cAAA,EAAgB,mBAAmB,CAAA;AAExF,EAAA,MAAM,KAAA,GAAQ;AAAA;AAAA,IAEZ,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,sBAAsB;AAAC;AAAA,GACzB;AAGA,EAAA,MAAM,eAAA,GAAkB,0BAAA,CAA2B,QAAA,EAAU,aAAA,CAAc,MAAM,CAAA;AACjF,EAAA,MAAM,YAAA,GAAe,aAAA,CAAc,MAAA,CAAO,IAAA,IAAQ,EAAA;AAElD,EAAA,MAAM,eAAA,GAAwC;AAAA,IAC5C,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,YAAA;AAAA,IACT,WAAW,IAAI,IAAA,CAAK,aAAA,CAAc,OAAA,IAAW,cAAc,SAAS,CAAA;AAAA;AAAA,IAEpE,KAAA,EAAO,kBAAA,CAAmB,eAAA,EAAiB,YAAY,CAAA;AAAA,IACvD,0BAA0B,EAAC;AAAA;AAAA,IAE3B;AAAA,GACF;AAGA,EAAA,MAAM,MAAA,GAAS,CAAC,eAAwC,CAAA;AAExD,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC/SA,IAAM,eAAe,UAAA,CAAW;AAAA,EAC9B,EAAA,EAAI,yBAAA;AAAA,EACJ,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,IACpB,SAAS,CAAA,CAAE,KAAA;AAAA,MACT,EAAE,MAAA,CAAO;AAAA,QACP,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,QAClB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,OAC7B;AAAA,KACH;AAAA,IACA,UAAA,EAAY,EAAE,MAAA;AAAO,GACtB,CAAA;AAAA,EACD,YAAA,EAAc,EAAE,GAAA,EAAI;AAAA,EACpB,SAAS,OAAO,EAAE,SAAA,EAAW,cAAA,EAAgB,QAAO,KAAM;AACxD,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY;AAAA,QAClC,EAAA,EAAI,4CAAA;AAAA,QACJ,MAAA,EAAA,SAAA;AAAA,QACA,QAAA,EAAA,QAAA;AAAA,QACA,IAAA,EAAM,qCAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,YAAY,SAAA,CAAU;AAAA;AACxB,OACD,CAAA;AACD,MAAA,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACpC,MAAA,MAAA,EAAQ,eAAe,WAAW,CAAA;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,MAAA,CAAO,eAAA,CAAgB,SAAA,CAAU,UAAU,CAAA;AAAA,IACtD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAI,WAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,2CAAA;AAAA,UACJ,MAAA,EAAA,QAAA;AAAA,UACA,QAAA,EAAA,QAAA;AAAA,UACA,IAAA,EAAM,CAAA,kCAAA,CAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,YAAY,SAAA,CAAU;AAAA;AACxB,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACpC,MAAA,MAAA,EAAQ,eAAe,WAAW,CAAA;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA;AAAA,MACJ,SAAA,CAAU,OAAA;AAAA,MACV,OAAM,MAAA,KAAU;AACd,QAAA,IAAI;AACF,UAAA,MAAM,kBAAkB,EAAE,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,gBAAgB,CAAA;AAAA,QACrE,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,cAAc,IAAI,WAAA;AAAA,YACtB;AAAA,cACE,EAAA,EAAI,6CAAA;AAAA,cACJ,MAAA,EAAA,QAAA;AAAA,cACA,QAAA,EAAA,QAAA;AAAA,cACA,OAAA,EAAS;AAAA,gBACP,YAAY,MAAA,CAAO,IAAA;AAAA,gBACnB,MAAA,EAAQ,OAAO,MAAA,IAAU,EAAA;AAAA,gBACzB,SAAS,MAAA,CAAO;AAAA;AAClB,aACF;AAAA,YACA;AAAA,WACF;AACA,UAAA,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACpC,UAAA,MAAA,EAAQ,eAAe,WAAW,CAAA;AAAA,QACpC;AAAA,MACF,CAAA;AAAA,MACA,EAAE,aAAa,CAAA;AAAE,KACnB;AAAA,EACF;AACF,CAAC,CAAA;AAED,eAAsB,iBAAA,CAAkB;AAAA,EACtC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKG;AAED,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,UAAA,CAAW,OAAO,OAAO,CAAA;AAErD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EAC3E;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,IAAA,GAAO,KAAA,CAAM,MAAM,IAAA,CAAK,CAAAA,UAAQA,KAAAA,CAAK,MAAA,KAAW,OAAO,MAAM,CAAA;AAAA,EAC/D,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,MAAM,KAAA,CAAM,IAAA,CAAK,CAAAA,KAAAA,KAAQA,KAAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,wCAAwC,MAAA,CAAO,OAAO,CAAA,UAAA,EAAa,MAAA,CAAO,UAAU,cAAc,CAAA;AAAA,KACpG;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,cAAA,CAAe;AAAA,IAC/B,UAAA,EAAY,MAAA,CAAO,IAAA,KAAS,OAAA,GAAU,OAAA,GAAU,MAAA;AAAA,IAChD,cAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AACzC,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,MAAA;AAAA,IACH,MAAA,EAAQ;AAAA,MACN,IAAI,MAAA,CAAO,IAAA;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,aAAa,MAAA,CAAO;AAAA,KACtB;AAAA,IACA,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAU,IAAA,CAAK,IAAA;AAAA,IACf,YAAY,IAAA,CAAK,QAAA;AAAA,IACjB,QAAQ,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,MAAA,EAAQ,KAAK,MAAA,EAAO;AAAA,IACrD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,MAAA,CAAO;AAAA,GACnB;AAEA,EAAA,MAAM,mBAAmB,MAAM,oBAAA,CAAqB,EAAE,OAAA,EAAS,cAAc,CAAA;AAC7E,EAAA,MAAM,kBAAkB,EAAE,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,kBAAkB,CAAA;AAC1E;AAEA,eAAe,oBAAA,CAAqB,EAAE,OAAA,EAAS,YAAA,EAAa,EAAwD;AAClH,EAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,KAAA,CAAM,YAAY,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,aAAa,CAAA;AACpD,EAAA,OAAO,MAAA,CAAO,KAAA;AAChB;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,UAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,qCAAqC,KAAK,CAAA;AACpE,IAAA,UAAA,GAAa;AAAA,MACX,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAO,MAAA,EAAQ,WAAW,MAAA,EAAO;AAAA,EACpE;AAEA,EAAA,UAAA,CAAW,cAAA,GAAiB,cAAA;AAC5B,EAAA,OAAO,UAAA;AACT;AAEA,eAAe,iBAAA,CAAkB;AAAA,EAC/B,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,IAAS,EAAC;AACrC,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,IAAA,EAAM,OAAA;AAAA,IACN,SAAS,WAAA,CAAY,EAAA;AAAA,IACrB,UAAA,EAAY,YAAY,MAAA,CAAO,IAAA;AAAA,IAC/B,OAAO,WAAA,CAAY,KAAA;AAAA,IACnB,WAAW,WAAA,CAAY;AAAA,GACzB;AACA,EAAA,MAAM,QAAQ,YAAA,CAAa;AAAA,IACzB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAS,EAAE,KAAA,EAAO,CAAC,GAAG,aAAA,EAAe,IAAI,CAAA;AAAE,GAC5C,CAAA;AACH;AAEO,IAAM,sBAAsB,cAAA,CAAe;AAAA,EAChD,EAAA,EAAI,wBAAA;AAAA,EACJ,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,IACpB,SAAS,CAAA,CAAE,KAAA;AAAA,MACT,EAAE,MAAA,CAAO;AAAA,QACP,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,QAClB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,OAC7B;AAAA,KACH;AAAA,IACA,UAAA,EAAY,EAAE,MAAA;AAAO,GACtB,CAAA;AAAA,EACD,YAAA,EAAc,EAAE,GAAA,EAAI;AAAA,EACpB,KAAA,EAAO,CAAC,YAAY,CAAA;AAAA,EACpB,OAAA,EAAS;AAAA,IACP,aAAA,EAAe;AAAA,MACb,QAAA,EAAA,EAAA;AAAA;AACF;AAEJ,CAAC;AAED,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,CAAE,MAAA,EAAO","file":"index.js","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';\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
|
+
{"version":3,"sources":["../../../src/scores/scoreTraces/scoreTraces.ts","../../../src/scores/scoreTraces/utils.ts","../../../src/scores/scoreTraces/scoreTracesWorkflow.ts"],"names":["span"],"mappings":"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","file":"index.js","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';\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 model span that contains conversation history\n */\nfunction findPrimaryLLMSpan(spanTree: SpanTree, rootAgentSpan: AISpanRecord): AISpanRecord {\n const directLLMSpans = getChildrenOfType<AISpanRecord>(spanTree, rootAgentSpan.spanId, AISpanType.MODEL_GENERATION);\n if (directLLMSpans.length > 0) {\n // There should only be one model 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 model 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"]}
|
package/dist/server/index.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkAQGLVU53_cjs = require('../chunk-AQGLVU53.cjs');
|
|
4
|
+
var chunk5NTO7S5I_cjs = require('../chunk-5NTO7S5I.cjs');
|
|
5
5
|
var chunk6VOPKVYH_cjs = require('../chunk-6VOPKVYH.cjs');
|
|
6
6
|
var chunkEBVYYC2Q_cjs = require('../chunk-EBVYYC2Q.cjs');
|
|
7
7
|
|
|
8
8
|
// src/server/auth.ts
|
|
9
9
|
var _MastraAuthProvider_decorators, _init, _a;
|
|
10
|
-
_MastraAuthProvider_decorators = [
|
|
10
|
+
_MastraAuthProvider_decorators = [chunkAQGLVU53_cjs.InstrumentClass({
|
|
11
11
|
prefix: "auth",
|
|
12
12
|
excludeMethods: ["__setTools", "__setLogger", "__setTelemetry", "#log"]
|
|
13
13
|
})];
|
|
@@ -39,7 +39,7 @@ exports.MastraAuthProvider = /*@__PURE__*/(_ => {
|
|
|
39
39
|
function validateOptions(path, options) {
|
|
40
40
|
const opts = options;
|
|
41
41
|
if (opts.method === void 0) {
|
|
42
|
-
throw new
|
|
42
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
43
43
|
id: "MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS",
|
|
44
44
|
text: `Invalid options for route "${path}", missing "method" property`,
|
|
45
45
|
domain: "MASTRA_SERVER" /* MASTRA_SERVER */,
|
|
@@ -47,7 +47,7 @@ function validateOptions(path, options) {
|
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
if (opts.handler === void 0 && opts.createHandler === void 0) {
|
|
50
|
-
throw new
|
|
50
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
51
51
|
id: "MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS",
|
|
52
52
|
text: `Invalid options for route "${path}", you must define a "handler" or "createHandler" property`,
|
|
53
53
|
domain: "MASTRA_SERVER" /* MASTRA_SERVER */,
|
|
@@ -55,7 +55,7 @@ function validateOptions(path, options) {
|
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
if (opts.handler !== void 0 && opts.createHandler !== void 0) {
|
|
58
|
-
throw new
|
|
58
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
59
59
|
id: "MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS",
|
|
60
60
|
text: `Invalid options for route "${path}", you can only define one of the following properties: "handler" or "createHandler"`,
|
|
61
61
|
domain: "MASTRA_SERVER" /* MASTRA_SERVER */,
|
|
@@ -65,7 +65,7 @@ function validateOptions(path, options) {
|
|
|
65
65
|
}
|
|
66
66
|
function registerApiRoute(path, options) {
|
|
67
67
|
if (path.startsWith("/api/")) {
|
|
68
|
-
throw new
|
|
68
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
69
69
|
id: "MASTRA_SERVER_API_PATH_RESERVED",
|
|
70
70
|
text: `Path must not start with "/api", it's reserved for internal API routes`,
|
|
71
71
|
domain: "MASTRA_SERVER" /* MASTRA_SERVER */,
|
package/dist/server/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InstrumentClass } from '../chunk-
|
|
2
|
-
import { MastraError } from '../chunk-
|
|
1
|
+
import { InstrumentClass } from '../chunk-BLUDYAPI.js';
|
|
2
|
+
import { MastraError } from '../chunk-PZUZNPFM.js';
|
|
3
3
|
import { MastraBase } from '../chunk-VQASQG5D.js';
|
|
4
4
|
import { __decoratorStart, __decorateElement, __runInitializers } from '../chunk-3HXBPDKN.js';
|
|
5
5
|
|
package/dist/storage/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkTX4TTPYJ_cjs = require('../chunk-TX4TTPYJ.cjs');
|
|
4
4
|
var chunk4R2TBRS7_cjs = require('../chunk-4R2TBRS7.cjs');
|
|
5
|
-
var
|
|
6
|
-
var
|
|
5
|
+
var chunkJTI6TVDV_cjs = require('../chunk-JTI6TVDV.cjs');
|
|
6
|
+
var chunk5NTO7S5I_cjs = require('../chunk-5NTO7S5I.cjs');
|
|
7
7
|
var chunk6VOPKVYH_cjs = require('../chunk-6VOPKVYH.cjs');
|
|
8
8
|
|
|
9
9
|
// src/storage/domains/legacy-evals/base.ts
|
|
@@ -311,7 +311,7 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
311
311
|
}) {
|
|
312
312
|
this.logger.debug(`MockStore: getMessagesById called`);
|
|
313
313
|
const rawMessages = messageIds.map((id) => this.collection.messages.get(id)).filter((message) => !!message);
|
|
314
|
-
const list = new
|
|
314
|
+
const list = new chunkJTI6TVDV_cjs.MessageList().add(rawMessages.map(this.parseStoredMessage), "memory");
|
|
315
315
|
if (format === "v1") return list.get.all.v1();
|
|
316
316
|
return list.get.all.v2();
|
|
317
317
|
}
|
|
@@ -341,7 +341,7 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
341
341
|
};
|
|
342
342
|
this.collection.messages.set(key, storageMessage);
|
|
343
343
|
}
|
|
344
|
-
const list = new
|
|
344
|
+
const list = new chunkJTI6TVDV_cjs.MessageList().add(messages, "memory");
|
|
345
345
|
if (format === `v2`) return list.get.all.v2();
|
|
346
346
|
return list.get.all.v1();
|
|
347
347
|
}
|
|
@@ -655,7 +655,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
655
655
|
* Creates a single AI span record in the storage provider.
|
|
656
656
|
*/
|
|
657
657
|
createAISpan(_span) {
|
|
658
|
-
throw new
|
|
658
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
659
659
|
id: "OBSERVABILITY_CREATE_AI_SPAN_NOT_IMPLEMENTED",
|
|
660
660
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
661
661
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -666,7 +666,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
666
666
|
* Updates a single AI span with partial data. Primarily used for realtime trace creation.
|
|
667
667
|
*/
|
|
668
668
|
updateAISpan(_params) {
|
|
669
|
-
throw new
|
|
669
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
670
670
|
id: "OBSERVABILITY_STORAGE_UPDATE_AI_SPAN_NOT_IMPLEMENTED",
|
|
671
671
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
672
672
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -677,7 +677,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
677
677
|
* Retrieves a single AI trace with all its associated spans.
|
|
678
678
|
*/
|
|
679
679
|
getAITrace(_traceId) {
|
|
680
|
-
throw new
|
|
680
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
681
681
|
id: "OBSERVABILITY_STORAGE_GET_AI_TRACE_NOT_IMPLEMENTED",
|
|
682
682
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
683
683
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -688,7 +688,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
688
688
|
* Retrieves a paginated list of AI traces with optional filtering.
|
|
689
689
|
*/
|
|
690
690
|
getAITracesPaginated(_args) {
|
|
691
|
-
throw new
|
|
691
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
692
692
|
id: "OBSERVABILITY_STORAGE_GET_AI_TRACES_PAGINATED_NOT_IMPLEMENTED",
|
|
693
693
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
694
694
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -699,7 +699,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
699
699
|
* Creates multiple AI spans in a single batch.
|
|
700
700
|
*/
|
|
701
701
|
batchCreateAISpans(_args) {
|
|
702
|
-
throw new
|
|
702
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
703
703
|
id: "OBSERVABILITY_STORAGE_BATCH_CREATE_AI_SPAN_NOT_IMPLEMENTED",
|
|
704
704
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
705
705
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -710,7 +710,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
710
710
|
* Updates multiple AI spans in a single batch.
|
|
711
711
|
*/
|
|
712
712
|
batchUpdateAISpans(_args) {
|
|
713
|
-
throw new
|
|
713
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
714
714
|
id: "OBSERVABILITY_STORAGE_BATCH_UPDATE_AI_SPAN_NOT_IMPLEMENTED",
|
|
715
715
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
716
716
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -721,7 +721,7 @@ var ObservabilityStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
721
721
|
* Deletes multiple AI traces and all their associated spans in a single batch operation.
|
|
722
722
|
*/
|
|
723
723
|
batchDeleteAITraces(_args) {
|
|
724
|
-
throw new
|
|
724
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
725
725
|
id: "OBSERVABILITY_STORAGE_BATCH_DELETE_AI_SPAN_NOT_IMPLEMENTED",
|
|
726
726
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
727
727
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -760,7 +760,7 @@ var ObservabilityInMemory = class extends ObservabilityStorage {
|
|
|
760
760
|
}
|
|
761
761
|
validateCreateAISpan(record) {
|
|
762
762
|
if (!record.spanId) {
|
|
763
|
-
throw new
|
|
763
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
764
764
|
id: "OBSERVABILITY_SPAN_ID_REQUIRED",
|
|
765
765
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
766
766
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -768,7 +768,7 @@ var ObservabilityInMemory = class extends ObservabilityStorage {
|
|
|
768
768
|
});
|
|
769
769
|
}
|
|
770
770
|
if (!record.traceId) {
|
|
771
|
-
throw new
|
|
771
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
772
772
|
id: "OBSERVABILITY_TRACE_ID_REQUIRED",
|
|
773
773
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
774
774
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -840,7 +840,7 @@ var ObservabilityInMemory = class extends ObservabilityStorage {
|
|
|
840
840
|
const id = this.generateId(params);
|
|
841
841
|
const span = this.collection.get(id);
|
|
842
842
|
if (!span) {
|
|
843
|
-
throw new
|
|
843
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
844
844
|
id: "OBSERVABILITY_UPDATE_AI_SPAN_NOT_FOUND",
|
|
845
845
|
domain: "MASTRA_OBSERVABILITY" /* MASTRA_OBSERVABILITY */,
|
|
846
846
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -917,7 +917,7 @@ var StoreOperations = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
917
917
|
* @throws {MastraError} if not supported by the storage adapter
|
|
918
918
|
*/
|
|
919
919
|
async createIndex(_options) {
|
|
920
|
-
throw new
|
|
920
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
921
921
|
id: "MASTRA_STORAGE_CREATE_INDEX_NOT_SUPPORTED",
|
|
922
922
|
domain: "STORAGE" /* STORAGE */,
|
|
923
923
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -929,7 +929,7 @@ var StoreOperations = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
929
929
|
* @throws {MastraError} if not supported by the storage adapter
|
|
930
930
|
*/
|
|
931
931
|
async dropIndex(_indexName) {
|
|
932
|
-
throw new
|
|
932
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
933
933
|
id: "MASTRA_STORAGE_DROP_INDEX_NOT_SUPPORTED",
|
|
934
934
|
domain: "STORAGE" /* STORAGE */,
|
|
935
935
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -941,7 +941,7 @@ var StoreOperations = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
941
941
|
* @throws {MastraError} if not supported by the storage adapter
|
|
942
942
|
*/
|
|
943
943
|
async listIndexes(_tableName) {
|
|
944
|
-
throw new
|
|
944
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
945
945
|
id: "MASTRA_STORAGE_LIST_INDEXES_NOT_SUPPORTED",
|
|
946
946
|
domain: "STORAGE" /* STORAGE */,
|
|
947
947
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -953,7 +953,7 @@ var StoreOperations = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
953
953
|
* @throws {MastraError} if not supported by the storage adapter
|
|
954
954
|
*/
|
|
955
955
|
async describeIndex(_indexName) {
|
|
956
|
-
throw new
|
|
956
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
957
957
|
id: "MASTRA_STORAGE_DESCRIBE_INDEX_NOT_SUPPORTED",
|
|
958
958
|
domain: "STORAGE" /* STORAGE */,
|
|
959
959
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -1061,7 +1061,7 @@ var ScoresStorage = class extends chunk6VOPKVYH_cjs.MastraBase {
|
|
|
1061
1061
|
spanId,
|
|
1062
1062
|
pagination: _pagination
|
|
1063
1063
|
}) {
|
|
1064
|
-
throw new
|
|
1064
|
+
throw new chunk5NTO7S5I_cjs.MastraError({
|
|
1065
1065
|
id: "SCORES_STORAGE_GET_SCORES_BY_SPAN_NOT_IMPLEMENTED",
|
|
1066
1066
|
domain: "STORAGE" /* STORAGE */,
|
|
1067
1067
|
category: "SYSTEM" /* SYSTEM */,
|
|
@@ -1450,7 +1450,7 @@ var WorkflowsInMemory = class extends WorkflowsStorage {
|
|
|
1450
1450
|
};
|
|
1451
1451
|
|
|
1452
1452
|
// src/storage/mock.ts
|
|
1453
|
-
var InMemoryStore = class extends
|
|
1453
|
+
var InMemoryStore = class extends chunkTX4TTPYJ_cjs.MastraStorage {
|
|
1454
1454
|
stores;
|
|
1455
1455
|
constructor() {
|
|
1456
1456
|
super({ name: "InMemoryStorage" });
|
|
@@ -1743,19 +1743,19 @@ function safelyParseJSON(input) {
|
|
|
1743
1743
|
|
|
1744
1744
|
Object.defineProperty(exports, "MastraStorage", {
|
|
1745
1745
|
enumerable: true,
|
|
1746
|
-
get: function () { return
|
|
1746
|
+
get: function () { return chunkTX4TTPYJ_cjs.MastraStorage; }
|
|
1747
1747
|
});
|
|
1748
1748
|
Object.defineProperty(exports, "ensureDate", {
|
|
1749
1749
|
enumerable: true,
|
|
1750
|
-
get: function () { return
|
|
1750
|
+
get: function () { return chunkTX4TTPYJ_cjs.ensureDate; }
|
|
1751
1751
|
});
|
|
1752
1752
|
Object.defineProperty(exports, "resolveMessageLimit", {
|
|
1753
1753
|
enumerable: true,
|
|
1754
|
-
get: function () { return
|
|
1754
|
+
get: function () { return chunkTX4TTPYJ_cjs.resolveMessageLimit; }
|
|
1755
1755
|
});
|
|
1756
1756
|
Object.defineProperty(exports, "serializeDate", {
|
|
1757
1757
|
enumerable: true,
|
|
1758
|
-
get: function () { return
|
|
1758
|
+
get: function () { return chunkTX4TTPYJ_cjs.serializeDate; }
|
|
1759
1759
|
});
|
|
1760
1760
|
Object.defineProperty(exports, "AI_SPAN_SCHEMA", {
|
|
1761
1761
|
enumerable: true,
|
package/dist/storage/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { MastraStorage } from '../chunk-
|
|
2
|
-
export { MastraStorage, ensureDate, resolveMessageLimit, serializeDate } from '../chunk-
|
|
1
|
+
import { MastraStorage } from '../chunk-JVV5LREI.js';
|
|
2
|
+
export { MastraStorage, ensureDate, resolveMessageLimit, serializeDate } from '../chunk-JVV5LREI.js';
|
|
3
3
|
import { TABLE_WORKFLOW_SNAPSHOT, TABLE_EVALS, TABLE_TRACES } from '../chunk-SJMKDSRF.js';
|
|
4
4
|
export { AI_SPAN_SCHEMA, SCORERS_SCHEMA, TABLE_AI_SPANS, TABLE_EVALS, TABLE_MESSAGES, TABLE_RESOURCES, TABLE_SCHEMAS, TABLE_SCORERS, TABLE_THREADS, TABLE_TRACES, TABLE_WORKFLOW_SNAPSHOT } from '../chunk-SJMKDSRF.js';
|
|
5
|
-
import { MessageList } from '../chunk-
|
|
6
|
-
import { MastraError } from '../chunk-
|
|
5
|
+
import { MessageList } from '../chunk-ZWF7AVLU.js';
|
|
6
|
+
import { MastraError } from '../chunk-PZUZNPFM.js';
|
|
7
7
|
import { MastraBase } from '../chunk-VQASQG5D.js';
|
|
8
8
|
|
|
9
9
|
// src/storage/domains/legacy-evals/base.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../src/stream/aisdk/v5/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../src/stream/aisdk/v5/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAA+B,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYzE,KAAK,cAAc,CAAC,MAAM,SAAS,YAAY,GAAG,SAAS,IAAI;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,CAAC;IACF,eAAe,EAAE,IAAI,CAAC;IACtB,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG;QAClD;;WAEG;QACH,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACnD;;;MAGE;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAIF,wBAAgB,OAAO,CAAC,MAAM,SAAS,YAAY,GAAG,SAAS,EAAE,EAC/D,KAAK,EACL,KAAK,EACL,eAAe,EACf,aAAa,EACb,KAAK,EACL,UAAU,EACV,OAAO,EACP,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,gBAAgB,GACjB,EAAE,cAAc,CAAC,MAAM,CAAC,6CA8IxB"}
|