UNPKG

@mastra/core

Version:

Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.

1 lines 12.1 kB
{"version":3,"sources":["../src/tools/payload-transform.ts"],"names":[],"mappings":"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","file":"chunk-VPZGHUNF.cjs","sourcesContent":["import type { IMastraLogger } from '../logger';\nimport type {\n ToolPayloadTransform,\n ToolPayloadTransformContext,\n ToolPayloadTransformFunction,\n ToolPayloadTransformPhase,\n ToolPayloadTransformPolicy,\n ToolPayloadTransformTarget,\n} from './types';\n\nexport type TransformedToolPayloadState = {\n transformed?: unknown;\n suppress?: boolean;\n failed?: boolean;\n};\n\nexport type ToolPayloadTransformMetadata = Partial<\n Record<ToolPayloadTransformTarget, Partial<Record<ToolPayloadTransformPhase, TransformedToolPayloadState>>>\n>;\n\nexport type ToolPayloadTransformSource = {\n policy?: ToolPayloadTransformPolicy;\n toolTransform?: ToolPayloadTransform;\n};\n\ntype LegacyToolPayloadProjectionPolicy = {\n projectToolPayload?: ToolPayloadTransformFunction;\n targets?: ToolPayloadTransformTarget[];\n};\n\nexport function normalizeToolPayloadTransformPolicy(\n policy: ToolPayloadTransformPolicy | LegacyToolPayloadProjectionPolicy | undefined,\n): ToolPayloadTransformPolicy | undefined {\n if (!policy) {\n return undefined;\n }\n\n if ('transformToolPayload' in policy) {\n return policy;\n }\n\n if ('projectToolPayload' in policy && policy.projectToolPayload) {\n return {\n transformToolPayload: policy.projectToolPayload,\n targets: policy.targets,\n };\n }\n\n return undefined;\n}\n\nconst PHASE_TO_TOOL_TRANSFORMER: Record<ToolPayloadTransformPhase, keyof NonNullable<ToolPayloadTransform['display']>> =\n {\n 'input-delta': 'inputDelta',\n 'input-available': 'input',\n 'output-available': 'output',\n error: 'error',\n approval: 'approval',\n suspend: 'suspend',\n resume: 'resume',\n };\n\nfunction isPolicyConfiguredForTarget(\n policy: ToolPayloadTransformPolicy | undefined,\n target: ToolPayloadTransformTarget,\n) {\n return Boolean(policy?.transformToolPayload && (!policy.targets || policy.targets.includes(target)));\n}\n\nfunction isTransformConfigured(source: ToolPayloadTransformSource | undefined, target: ToolPayloadTransformTarget) {\n return Boolean(isPolicyConfiguredForTarget(source?.policy, target) || source?.toolTransform?.[target]);\n}\n\nfunction getToolTransformer(\n source: ToolPayloadTransformSource | undefined,\n target: ToolPayloadTransformTarget,\n phase: ToolPayloadTransformPhase,\n): ToolPayloadTransformFunction | undefined {\n return source?.toolTransform?.[target]?.[PHASE_TO_TOOL_TRANSFORMER[phase]];\n}\n\nfunction safePlaceholder(context: ToolPayloadTransformContext) {\n return {\n message: `Tool ${context.phase} payload unavailable`,\n };\n}\n\nasync function transformOneTarget(\n context: ToolPayloadTransformContext,\n source: ToolPayloadTransformSource | undefined,\n logger?: IMastraLogger,\n): Promise<TransformedToolPayloadState | undefined> {\n const configured = isTransformConfigured(source, context.target);\n if (!configured) {\n return undefined;\n }\n\n const transformers = [\n isPolicyConfiguredForTarget(source?.policy, context.target) ? source?.policy?.transformToolPayload : undefined,\n getToolTransformer(source, context.target, context.phase),\n ].filter(Boolean) as ToolPayloadTransformFunction[];\n\n if (transformers.length === 0) {\n return context.phase === 'input-delta' ? { suppress: true } : { transformed: safePlaceholder(context) };\n }\n\n for (const transformer of transformers) {\n try {\n const transformed = await transformer(context);\n if (transformed !== undefined) {\n return { transformed };\n }\n } catch (error) {\n logger?.warn?.('Tool payload transform failed', {\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n target: context.target,\n phase: context.phase,\n error,\n });\n return context.phase === 'input-delta'\n ? { suppress: true, failed: true }\n : { transformed: safePlaceholder(context), failed: true };\n }\n }\n\n return context.phase === 'input-delta' ? { suppress: true } : { transformed: safePlaceholder(context) };\n}\n\nexport async function transformToolPayloadForTargets(\n context: Omit<ToolPayloadTransformContext, 'target'>,\n source: ToolPayloadTransformSource | undefined,\n logger?: IMastraLogger,\n): Promise<ToolPayloadTransformMetadata | undefined> {\n const display = await transformOneTarget({ ...context, target: 'display' }, source, logger);\n const transcript = await transformOneTarget({ ...context, target: 'transcript' }, source, logger);\n\n if (!display && !transcript) {\n return undefined;\n }\n\n return {\n ...(display ? { display: { [context.phase]: display } } : {}),\n ...(transcript ? { transcript: { [context.phase]: transcript } } : {}),\n };\n}\n\nexport function getTransformedToolPayload(\n metadata: unknown,\n target: ToolPayloadTransformTarget,\n phase: ToolPayloadTransformPhase,\n): TransformedToolPayloadState | undefined {\n const mastraMetadata = (metadata as { mastra?: Record<string, any> } | undefined)?.mastra;\n const state =\n mastraMetadata?.toolPayloadTransform?.[target]?.[phase] ?? mastraMetadata?.toolPayloadProjection?.[target]?.[phase];\n\n if (\n state &&\n Object.prototype.hasOwnProperty.call(state, 'projected') &&\n !Object.prototype.hasOwnProperty.call(state, 'transformed')\n ) {\n const { projected, ...rest } = state;\n return { ...rest, transformed: projected };\n }\n\n return state;\n}\n\nexport function hasTransformedToolPayload(\n transform: TransformedToolPayloadState | undefined,\n): transform is TransformedToolPayloadState & { transformed: unknown } {\n return Boolean(transform && Object.prototype.hasOwnProperty.call(transform, 'transformed'));\n}\n\nfunction mergeTransformMetadata(\n existing: ToolPayloadTransformMetadata | undefined,\n next: ToolPayloadTransformMetadata | undefined,\n): ToolPayloadTransformMetadata | undefined {\n if (!existing) {\n return next;\n }\n if (!next) {\n return existing;\n }\n\n return {\n display: {\n ...(existing.display ?? {}),\n ...(next.display ?? {}),\n },\n transcript: {\n ...(existing.transcript ?? {}),\n ...(next.transcript ?? {}),\n },\n };\n}\n\nexport function withToolPayloadTransformProviderMetadata<T extends Record<string, any> | undefined>(\n providerMetadata: T,\n transformMetadata: { mastra?: { toolPayloadTransform?: ToolPayloadTransformMetadata } } | undefined,\n): T | Record<string, any> | undefined {\n const transform = transformMetadata?.mastra?.toolPayloadTransform;\n if (!transform) {\n return providerMetadata;\n }\n\n return {\n ...(providerMetadata ?? {}),\n mastra: {\n ...(providerMetadata?.mastra ?? {}),\n toolPayloadTransform: mergeTransformMetadata(providerMetadata?.mastra?.toolPayloadTransform, transform),\n },\n };\n}\n\nexport function withToolPayloadTransformMetadata<T extends { metadata?: Record<string, any> }>(\n chunk: T,\n transform: ToolPayloadTransformMetadata | undefined,\n): T {\n if (!transform) {\n return chunk;\n }\n\n return {\n ...chunk,\n metadata: {\n ...(chunk.metadata ?? {}),\n mastra: {\n ...(chunk.metadata?.mastra ?? {}),\n toolPayloadTransform: mergeTransformMetadata(chunk.metadata?.mastra?.toolPayloadTransform, transform),\n },\n },\n };\n}\n"]}