/** * Braintrust Exporter for Mastra Observability * * This exporter sends observability data to Braintrust. * Root spans become top-level Braintrust spans (no trace wrapper). * Events are handled as zero-duration spans with matching start/end times. */ import type { AnyExportedSpan, ScoreEvent, SpanErrorInfo } from '@mastra/core/observability'; import { SpanType } from '@mastra/core/observability'; import { TrackingExporter } from '@mastra/observability'; import type { TraceData, TrackingExporterConfig } from '@mastra/observability'; import type { Span, Logger } from 'braintrust'; import type { ThreadData, PendingToolResult } from './thread-reconstruction.js'; /** * Extended Braintrust span data that includes span type and thread reconstruction data */ interface BraintrustSpanData { span: Span; spanType: SpanType; threadData?: ThreadData; pendingToolResults?: Map; } export interface BraintrustExporterConfig extends TrackingExporterConfig { /** * Optional Braintrust logger instance. * When provided, enables integration with Braintrust contexts such as: * - Evals: Agent traces nest inside eval task spans * - logger.traced(): Agent traces nest inside traced spans * - Parent spans: Auto-detects and attaches to external Braintrust spans */ braintrustLogger?: Logger; /** * Optional resolver for the active Braintrust span. * * Pass Braintrust's `currentSpan` from the same package instance that creates * `Eval()` or `logger.traced()` spans when your app and Mastra may resolve * different copies of the `braintrust` package. */ currentSpan?: () => Span | undefined; /** Braintrust API key. Required if logger is not provided. */ apiKey?: string; /** Optional custom endpoint */ endpoint?: string; /** Braintrust project name (default: 'mastra-tracing') */ projectName?: string; /** Support tuning parameters */ tuningParameters?: Record; } type BraintrustRoot = Logger | Span; type BraintrustSpan = BraintrustSpanData; type BraintrustEvent = Span; type BraintrustMetadata = unknown; type BraintrustTraceData = TraceData; export declare class BraintrustExporter extends TrackingExporter { #private; name: string; constructor(config?: BraintrustExporterConfig); private getLocalLogger; onScoreEvent(event: ScoreEvent): Promise; private startSpan; protected _buildRoot(_args: { span: AnyExportedSpan; traceData: BraintrustTraceData; }): Promise; protected _buildSpan(args: { span: AnyExportedSpan; traceData: BraintrustTraceData; }): Promise; protected _buildEvent(args: { span: AnyExportedSpan; traceData: BraintrustTraceData; }): Promise; protected _updateSpan(args: { span: AnyExportedSpan; traceData: BraintrustTraceData; }): Promise; protected _finishSpan(args: { span: AnyExportedSpan; traceData: BraintrustTraceData; }): Promise; protected _abortSpan(args: { span: BraintrustSpan; reason: SpanErrorInfo; }): Promise; /** * Walk up the tree to find the MODEL_GENERATION ancestor span. * Returns the BraintrustSpanData if found, undefined otherwise. */ private findModelGenerationAncestor; /** * Accumulate MODEL_STEP data to the parent MODEL_GENERATION's threadData. * Called when a MODEL_STEP span ends. */ private accumulateModelStepData; /** * Store TOOL_CALL result in parent MODEL_GENERATION's pendingToolResults. * Called when a TOOL_CALL span ends. * Results are merged into threadData when MODEL_GENERATION ends. */ private accumulateToolCallResult; /** * Build the payload for MODEL_GENERATION span, reconstructing output from threadData if available. */ private buildModelGenerationPayload; /** * Transforms MODEL_GENERATION input to Braintrust Thread view format. * Converts AI SDK messages (v4/v5) to OpenAI Chat Completion format, which Braintrust requires * for proper rendering of threads (fixes #11023). */ private transformInput; /** * Transforms MODEL_GENERATION output to Braintrust Thread view format. */ private transformOutput; private buildSpanPayload; } export {}; //# sourceMappingURL=tracing.d.ts.map