@mastra/core 0.24.9 → 0.24.10-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/index.cjs +10 -10
  4. package/dist/agent/index.js +1 -1
  5. package/dist/agent/input-processor/index.cjs +6 -6
  6. package/dist/agent/input-processor/index.js +1 -1
  7. package/dist/agent/utils.d.ts.map +1 -1
  8. package/dist/bundler/types.d.ts +14 -1
  9. package/dist/bundler/types.d.ts.map +1 -1
  10. package/dist/{chunk-PAW64WWA.cjs → chunk-33WE5PVS.cjs} +4 -4
  11. package/dist/{chunk-PAW64WWA.cjs.map → chunk-33WE5PVS.cjs.map} +1 -1
  12. package/dist/{chunk-ZWWHTQ72.cjs → chunk-3RX5ZF4V.cjs} +13 -13
  13. package/dist/chunk-3RX5ZF4V.cjs.map +1 -0
  14. package/dist/{chunk-QLPSR67Y.cjs → chunk-5O7NDXXO.cjs} +14 -14
  15. package/dist/{chunk-QLPSR67Y.cjs.map → chunk-5O7NDXXO.cjs.map} +1 -1
  16. package/dist/{chunk-GSQD3QNR.js → chunk-6PQUBAHQ.js} +9 -9
  17. package/dist/chunk-6PQUBAHQ.js.map +1 -0
  18. package/dist/{chunk-QQKRUSCB.js → chunk-ALNSKEAS.js} +4 -4
  19. package/dist/{chunk-QQKRUSCB.js.map → chunk-ALNSKEAS.js.map} +1 -1
  20. package/dist/{chunk-2BIQL3SK.js → chunk-BIJINR66.js} +3 -3
  21. package/dist/{chunk-2BIQL3SK.js.map → chunk-BIJINR66.js.map} +1 -1
  22. package/dist/{chunk-HHPXFPNO.js → chunk-BRZYJS5M.js} +3 -3
  23. package/dist/{chunk-HHPXFPNO.js.map → chunk-BRZYJS5M.js.map} +1 -1
  24. package/dist/{chunk-MSFEDB5Z.cjs → chunk-CHMAIN4O.cjs} +8 -8
  25. package/dist/{chunk-MSFEDB5Z.cjs.map → chunk-CHMAIN4O.cjs.map} +1 -1
  26. package/dist/{chunk-CSHVFDF6.cjs → chunk-CJR37VWC.cjs} +4 -4
  27. package/dist/{chunk-CSHVFDF6.cjs.map → chunk-CJR37VWC.cjs.map} +1 -1
  28. package/dist/{chunk-7GUQ2EQ4.cjs → chunk-EQQWSQ5G.cjs} +33 -3
  29. package/dist/chunk-EQQWSQ5G.cjs.map +1 -0
  30. package/dist/{chunk-DGL7I4HZ.cjs → chunk-J4B3HR7H.cjs} +9 -9
  31. package/dist/{chunk-DGL7I4HZ.cjs.map → chunk-J4B3HR7H.cjs.map} +1 -1
  32. package/dist/{chunk-5S5X3QPR.js → chunk-JP6JLYGP.js} +33 -3
  33. package/dist/chunk-JP6JLYGP.js.map +1 -0
  34. package/dist/{chunk-EHTC7VYS.cjs → chunk-L4HKPD5B.cjs} +4 -4
  35. package/dist/{chunk-EHTC7VYS.cjs.map → chunk-L4HKPD5B.cjs.map} +1 -1
  36. package/dist/{chunk-GEHKQTB2.js → chunk-MJQV65J5.js} +3 -3
  37. package/dist/{chunk-GEHKQTB2.js.map → chunk-MJQV65J5.js.map} +1 -1
  38. package/dist/{chunk-4DWBTEHS.js → chunk-QSNEKU46.js} +3 -3
  39. package/dist/{chunk-4DWBTEHS.js.map → chunk-QSNEKU46.js.map} +1 -1
  40. package/dist/{chunk-5KSHWBRH.js → chunk-S5NJWVPG.js} +3 -3
  41. package/dist/{chunk-5KSHWBRH.js.map → chunk-S5NJWVPG.js.map} +1 -1
  42. package/dist/index.cjs +33 -33
  43. package/dist/index.js +6 -6
  44. package/dist/loop/index.cjs +2 -2
  45. package/dist/loop/index.js +1 -1
  46. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  47. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +1 -1
  48. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  49. package/dist/mastra/index.cjs +2 -2
  50. package/dist/mastra/index.js +1 -1
  51. package/dist/processors/index.cjs +11 -11
  52. package/dist/processors/index.js +1 -1
  53. package/dist/relevance/index.cjs +4 -4
  54. package/dist/relevance/index.js +1 -1
  55. package/dist/scores/index.cjs +4 -4
  56. package/dist/scores/index.js +1 -1
  57. package/dist/scores/scoreTraces/index.cjs +3 -3
  58. package/dist/scores/scoreTraces/index.js +1 -1
  59. package/dist/server/index.cjs +2 -2
  60. package/dist/server/index.js +1 -1
  61. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  62. package/dist/stream/base/output.d.ts.map +1 -1
  63. package/dist/stream/index.cjs +8 -8
  64. package/dist/stream/index.js +1 -1
  65. package/dist/stream/types.d.ts +2 -1
  66. package/dist/stream/types.d.ts.map +1 -1
  67. package/dist/telemetry/index.cjs +7 -7
  68. package/dist/telemetry/index.js +1 -1
  69. package/dist/telemetry/telemetry.d.ts +18 -0
  70. package/dist/telemetry/telemetry.d.ts.map +1 -1
  71. package/dist/telemetry/utility.d.ts +7 -0
  72. package/dist/telemetry/utility.d.ts.map +1 -1
  73. package/dist/tts/index.cjs +2 -2
  74. package/dist/tts/index.js +1 -1
  75. package/dist/voice/index.cjs +6 -6
  76. package/dist/voice/index.js +1 -1
  77. package/dist/workflows/evented/index.cjs +10 -10
  78. package/dist/workflows/evented/index.js +1 -1
  79. package/dist/workflows/index.cjs +17 -17
  80. package/dist/workflows/index.js +1 -1
  81. package/dist/workflows/legacy/index.cjs +22 -22
  82. package/dist/workflows/legacy/index.js +1 -1
  83. package/package.json +3 -3
  84. package/dist/chunk-5S5X3QPR.js.map +0 -1
  85. package/dist/chunk-7GUQ2EQ4.cjs.map +0 -1
  86. package/dist/chunk-GSQD3QNR.js.map +0 -1
  87. package/dist/chunk-ZWWHTQ72.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/telemetry/utility.ts","../src/telemetry/telemetry.decorators.ts","../src/telemetry/storage-exporter.ts","../src/telemetry/telemetry.ts"],"names":["trace","propagation","acc","otlpContext","context","SpanStatusCode","recordResult","wrappedFn"],"mappings":"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","file":"chunk-JP6JLYGP.js","sourcesContent":["import { propagation, trace } from '@opentelemetry/api';\nimport type { Context } from '@opentelemetry/api';\n\n/**\n * Check if telemetry is active and enabled.\n * This function checks both if telemetry is enabled in the configuration AND if a tracer exists.\n *\n * @param tracerName - Optional tracer name to check (currently unused, kept for backwards compatibility)\n * @returns true if telemetry is both initialized and enabled, false otherwise\n */\nexport function hasActiveTelemetry(tracerName: string = 'default-tracer'): boolean {\n try {\n const isEnabled = globalThis.__TELEMETRY__?.isEnabled() ?? true;\n return isEnabled && !!trace.getTracer(tracerName);\n } catch {\n return false;\n }\n}\n\n/**\n * Get baggage values from context\n * @param ctx The context to get baggage values from\n * @returns\n */\nexport function getBaggageValues(ctx: Context) {\n const currentBaggage = propagation.getBaggage(ctx);\n const requestId = currentBaggage?.getEntry('http.request_id')?.value;\n const componentName = currentBaggage?.getEntry('componentName')?.value;\n const runId = currentBaggage?.getEntry('runId')?.value;\n const threadId = currentBaggage?.getEntry('threadId')?.value;\n const resourceId = currentBaggage?.getEntry('resourceId')?.value;\n return {\n requestId,\n componentName,\n runId,\n threadId,\n resourceId,\n };\n}\n","import { context, propagation, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { Span } from '@opentelemetry/api';\n\nimport { boundedStringify } from '../ai-tracing/serialization';\nimport { getBaggageValues, hasActiveTelemetry } from './utility';\n\ninterface StreamFinishData {\n text?: string;\n usage?: {\n // AI SDK v5 format (VNext paths)\n inputTokens?: number;\n outputTokens?: number;\n reasoningTokens?: number;\n cachedInputTokens?: number;\n // Legacy format (backward compatibility)\n promptTokens?: number;\n completionTokens?: number;\n // Common fields\n totalTokens?: number;\n };\n finishReason?: string;\n toolCalls?: unknown[];\n toolResults?: unknown[];\n warnings?: unknown;\n object?: unknown; // structured output\n}\n\ninterface StreamOptions {\n onFinish?: (data: StreamFinishData) => Promise<void> | void;\n [key: string]: unknown;\n}\n\ninterface EnhancedSpan extends Span {\n __mastraStreamingSpan?: boolean;\n __mastraEnded?: boolean;\n}\n\n/**\n * End a span at most once (guards against double-end bugs across layers).\n */\nfunction endSpanOnce(span: EnhancedSpan) {\n if (span.__mastraEnded) return;\n span.__mastraEnded = true;\n try {\n span.end();\n } catch {\n // best-effort\n }\n}\n\nfunction isStreamingMethod(methodName: string): boolean {\n return methodName === 'stream' || methodName === 'streamLegacy';\n}\n\n/**\n * Attach minimal finish data to a span for streaming methods.\n * Default behavior stores only SMALL summary fields to avoid OOM.\n */\nfunction enhanceStreamingArgumentsWithTelemetry(args: unknown[], span: EnhancedSpan, spanName: string): unknown[] {\n const enhancedArgs = [...args];\n\n // Helper to check if value is a plain object\n const isPlainObject = (val: unknown): val is Record<string, unknown> =>\n val !== null && typeof val === 'object' && !Array.isArray(val);\n\n // Create the enhanced onFinish callback\n const createEnhancedOnFinish = (originalOnFinish?: (data: StreamFinishData) => Promise<void> | void) => {\n const enhancedOnFinish = async (finishData: StreamFinishData) => {\n const telemetryData = {\n text: finishData.text,\n usage: finishData.usage,\n finishReason: finishData.finishReason,\n toolCalls: finishData.toolCalls,\n toolResults: finishData.toolResults,\n warnings: finishData.warnings,\n ...(finishData.object !== undefined && { object: finishData.object }),\n };\n\n span.setAttribute(`${spanName}.result`, boundedStringify(telemetryData));\n span.setStatus({ code: SpanStatusCode.OK });\n endSpanOnce(span);\n\n if (originalOnFinish) return await originalOnFinish(finishData);\n };\n (enhancedOnFinish as any).__hasOriginalOnFinish = !!originalOnFinish;\n return enhancedOnFinish;\n };\n\n // Case 1: Single object argument (e.g., TTS.stream({ text }))\n if (enhancedArgs.length === 1 && isPlainObject(enhancedArgs[0])) {\n const singleArg = enhancedArgs[0] as StreamOptions;\n const originalOnFinish = singleArg.onFinish;\n enhancedArgs[0] = {\n ...singleArg,\n onFinish: createEnhancedOnFinish(originalOnFinish),\n };\n }\n // Case 2: Two-argument signature (model/prompt, options?)\n else {\n const streamOptions =\n enhancedArgs.length > 1 && isPlainObject(enhancedArgs[1]) ? (enhancedArgs[1] as StreamOptions) : {};\n const originalOnFinish = streamOptions.onFinish;\n enhancedArgs[1] = {\n ...streamOptions,\n onFinish: createEnhancedOnFinish(originalOnFinish),\n };\n }\n\n span.__mastraStreamingSpan = true;\n return enhancedArgs;\n}\n\n// Decorator factory\nexport function withSpan(options: {\n spanName?: string;\n skipIfNoTelemetry?: boolean;\n spanKind?: SpanKind;\n tracerName?: string;\n}): any {\n return function (_target: any, propertyKey: string | symbol, descriptor?: PropertyDescriptor | number) {\n if (!descriptor || typeof descriptor === 'number') return;\n\n const originalMethod = descriptor.value as Function;\n const methodName = String(propertyKey);\n\n descriptor.value = function (this: unknown, ...args: unknown[]) {\n if (options?.skipIfNoTelemetry && !hasActiveTelemetry(options?.tracerName)) {\n return originalMethod.apply(this, args);\n }\n\n const tracer = trace.getTracer(options?.tracerName ?? 'default-tracer');\n\n // Determine span name and kind\n let spanName: string;\n let spanKind: SpanKind | undefined;\n\n if (typeof options === 'string') {\n spanName = options;\n } else if (options) {\n spanName = options.spanName || methodName;\n spanKind = options.spanKind;\n } else {\n spanName = methodName;\n }\n\n // Start the span with optional kind\n const span = tracer.startSpan(spanName, { kind: spanKind }) as EnhancedSpan;\n\n // Always bind span to the active context\n let ctx = trace.setSpan(context.active(), span);\n\n // Record input arguments with bounded serialization\n args.forEach((arg, index) => {\n span.setAttribute(`${spanName}.argument.${index}`, boundedStringify(arg));\n });\n\n // Attach baggage-derived fields (these should be small)\n const { requestId, componentName, runId, threadId, resourceId } = getBaggageValues(ctx);\n\n if (requestId) {\n span.setAttribute('http.request_id', requestId);\n }\n\n if (threadId) {\n span.setAttribute('threadId', threadId);\n }\n\n if (resourceId) {\n span.setAttribute('resourceId', resourceId);\n }\n\n if (componentName) {\n span.setAttribute('componentName', componentName);\n if (runId) {\n span.setAttribute('runId', runId);\n }\n } else if (this && typeof this === 'object' && 'name' in this) {\n const contextObj = this as { name: string; runId?: string };\n span.setAttribute('componentName', contextObj.name);\n if (contextObj.runId) span.setAttribute('runId', contextObj.runId);\n\n // Best-effort baggage update, but do NOT inject undefined properties\n const baggageEntries: Record<string, { value: string }> = {};\n\n baggageEntries.componentName = { value: contextObj.name };\n\n if (contextObj.runId) {\n baggageEntries.runId = { value: contextObj.runId };\n }\n\n if (requestId) {\n baggageEntries['http.request_id'] = { value: requestId };\n }\n\n if (threadId) {\n baggageEntries.threadId = { value: threadId };\n }\n\n if (resourceId) {\n baggageEntries.resourceId = { value: resourceId };\n }\n\n ctx = propagation.setBaggage(ctx, propagation.createBaggage(baggageEntries as any));\n }\n\n try {\n // If this is a streaming method, wrap args before invocation\n const enhancedArgs = isStreamingMethod(methodName)\n ? enhanceStreamingArgumentsWithTelemetry(args, span, spanName)\n : args;\n\n const result = context.with(ctx, () => originalMethod.apply(this, enhancedArgs));\n\n // Promise\n if (result instanceof Promise) {\n return result\n .then(resolvedValue => {\n // For streaming, onFinish is responsible for ending span\n if (isStreamingMethod(methodName)) {\n return resolvedValue;\n }\n\n span.setAttribute(`${spanName}.result`, boundedStringify(resolvedValue));\n span.setStatus({ code: SpanStatusCode.OK });\n return resolvedValue;\n })\n .catch(err => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err instanceof Error ? err.message : 'Unknown error',\n });\n if (err instanceof Error) {\n // recordException is okay, but can include stack; rely on OTel/Sentry settings\n span.recordException(err);\n }\n // End span on error - for streaming methods, onFinish won't be called if there's an error\n endSpanOnce(span);\n throw err;\n })\n .finally(() => {\n if (!span.__mastraStreamingSpan) endSpanOnce(span);\n });\n }\n\n // Non-promise return\n if (!isStreamingMethod(methodName)) {\n span.setAttribute(`${spanName}.result`, boundedStringify(result));\n }\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n if (error instanceof Error) {\n span.recordException(error);\n }\n // End span on error - for streaming methods, onFinish won't be called if there's an error\n endSpanOnce(span);\n throw error;\n } finally {\n // End span for sync non-streaming methods (streaming ends in onFinish or catch)\n if (!isStreamingMethod(methodName) && !span.__mastraEnded) {\n endSpanOnce(span);\n }\n }\n };\n\n return descriptor;\n };\n}\n\n// class-telemetry.decorator.ts\nexport function InstrumentClass(options?: {\n prefix?: string;\n spanKind?: SpanKind;\n excludeMethods?: string[];\n methodFilter?: (methodName: string) => boolean;\n tracerName?: string;\n}) {\n return function (target: any) {\n const methods = Object.getOwnPropertyNames(target.prototype);\n\n methods.forEach(method => {\n if (options?.excludeMethods?.includes(method) || method === 'constructor') return;\n if (options?.methodFilter && !options.methodFilter(method)) return;\n\n const descriptor = Object.getOwnPropertyDescriptor(target.prototype, method);\n if (descriptor && typeof descriptor.value === 'function') {\n Object.defineProperty(\n target.prototype,\n method,\n withSpan({\n spanName: options?.prefix ? `${options.prefix}.${method}` : method,\n skipIfNoTelemetry: true,\n spanKind: options?.spanKind || SpanKind.INTERNAL,\n tracerName: options?.tracerName,\n })(target, method, descriptor),\n );\n }\n });\n\n return target;\n };\n}\n","import { ExportResultCode } from '@opentelemetry/core';\nimport type { ExportResult } from '@opentelemetry/core';\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer';\nimport type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { IMastraLogger } from '../logger';\nimport type { MastraStorage } from '../storage/base';\nimport { TABLE_TRACES } from '../storage/constants';\n\nexport class OTLPTraceExporter implements SpanExporter {\n private storage: MastraStorage;\n private queue: { data: any[]; resultCallback: (result: ExportResult) => void }[] = [];\n private serializer: typeof JsonTraceSerializer;\n private logger: IMastraLogger;\n private activeFlush: Promise<void> | undefined = undefined;\n\n constructor({ logger, storage }: { logger: IMastraLogger; storage: MastraStorage }) {\n this.storage = storage;\n this.serializer = JsonTraceSerializer;\n this.logger = logger;\n }\n\n export(internalRepresentation: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n const serializedRequest = this.serializer.serializeRequest(internalRepresentation);\n // @ts-ignore\n const payload = JSON.parse(Buffer.from(serializedRequest.buffer, 'utf8'));\n const items = payload?.resourceSpans?.[0]?.scopeSpans;\n this.logger.debug(`Exporting telemetry: ${items.length} scope spans to be processed [trace batch]`);\n\n this.queue.push({ data: items, resultCallback });\n\n if (!this.activeFlush) {\n this.activeFlush = this.flush();\n }\n }\n shutdown(): Promise<void> {\n return this.forceFlush();\n }\n\n flush(): Promise<void> {\n const now = new Date();\n const items = this.queue.shift();\n if (!items) return Promise.resolve();\n\n const allSpans: any[] = items.data.reduce((acc, scopedSpans) => {\n const { scope, spans } = scopedSpans;\n for (const span of spans) {\n const {\n spanId,\n parentSpanId,\n traceId,\n name,\n kind,\n attributes,\n status,\n events,\n links,\n startTimeUnixNano,\n endTimeUnixNano,\n ...rest\n } = span;\n\n const startTime = Number(BigInt(startTimeUnixNano) / 1000n);\n const endTime = Number(BigInt(endTimeUnixNano) / 1000n);\n\n acc.push({\n id: spanId,\n parentSpanId,\n traceId,\n name,\n scope: scope.name,\n kind,\n status: JSON.stringify(status),\n events: JSON.stringify(events),\n links: JSON.stringify(links),\n attributes: JSON.stringify(\n attributes.reduce((acc: Record<string, any>, attr: any) => {\n const valueKey = Object.keys(attr.value)[0];\n if (valueKey) {\n acc[attr.key] = attr.value[valueKey];\n }\n return acc;\n }, {}),\n ),\n startTime,\n endTime,\n other: JSON.stringify(rest),\n createdAt: now,\n });\n }\n return acc;\n }, []);\n\n return this.storage\n .batchInsert({\n tableName: TABLE_TRACES,\n records: allSpans,\n })\n .then(() => {\n items.resultCallback({\n code: ExportResultCode.SUCCESS,\n });\n })\n .catch(e => {\n const mastraError = new MastraError(\n {\n id: 'OTLP_TRACE_EXPORT_FAILURE',\n text: 'Failed to export telemetry spans',\n domain: ErrorDomain.MASTRA_TELEMETRY,\n category: ErrorCategory.SYSTEM,\n details: {\n attemptedSpanCount: allSpans.length,\n targetTable: TABLE_TRACES,\n firstSpanName: allSpans.length > 0 ? allSpans[0].name : '',\n firstSpanKind: allSpans.length > 0 ? allSpans[0].kind : '',\n firstSpanScope: allSpans.length > 0 ? allSpans[0].scope : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('span err:' + mastraError.toString());\n items.resultCallback({\n code: ExportResultCode.FAILED,\n error: e,\n });\n })\n .finally(() => {\n this.activeFlush = undefined;\n });\n }\n async forceFlush(): Promise<void> {\n if (!this.queue.length) {\n return;\n }\n\n await this.activeFlush;\n while (this.queue.length) {\n await this.flush();\n }\n }\n\n __setLogger(logger: IMastraLogger) {\n this.logger = logger;\n }\n}\n","import { context as otlpContext, SpanStatusCode, trace, propagation, context } from '@opentelemetry/api';\nimport type { Tracer, SpanOptions, Context, Span, BaggageEntry } from '@opentelemetry/api';\n\nimport { boundedStringify } from '../ai-tracing/serialization';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { OtelConfig } from './types';\nimport { getBaggageValues, hasActiveTelemetry } from './utility';\n\n// Add type declaration for global namespace\ndeclare global {\n var __TELEMETRY__: Telemetry | undefined;\n}\n\nexport class Telemetry {\n public tracer: Tracer = trace.getTracer('default');\n name: string = 'default-service';\n private enabled: boolean = true;\n\n private constructor(config: OtelConfig) {\n this.name = config.serviceName ?? 'default-service';\n this.enabled = config.enabled !== false;\n\n this.tracer = trace.getTracer(this.name);\n }\n\n /**\n * @deprecated This method does not do anything\n */\n public async shutdown() {}\n\n /**\n * Initialize telemetry with the given configuration\n * @param config - Optional telemetry configuration object\n * @returns Telemetry instance that can be used for tracing\n */\n static init(config: OtelConfig = {}): Telemetry {\n try {\n if (!globalThis.__TELEMETRY__) {\n globalThis.__TELEMETRY__ = new Telemetry(config);\n }\n\n return globalThis.__TELEMETRY__;\n } catch (error) {\n const wrappedError = new MastraError(\n {\n id: 'TELEMETRY_INIT_FAILED',\n text: 'Failed to initialize telemetry',\n domain: ErrorDomain.MASTRA_TELEMETRY,\n category: ErrorCategory.SYSTEM,\n },\n error,\n );\n throw wrappedError;\n }\n }\n\n static getActiveSpan() {\n const span = trace.getActiveSpan();\n return span;\n }\n\n /**\n * Get the global telemetry instance\n * @throws {Error} If telemetry has not been initialized\n * @returns {Telemetry} The global telemetry instance\n */\n static get(): Telemetry {\n if (!globalThis.__TELEMETRY__) {\n throw new MastraError({\n id: 'TELEMETRY_GETTER_FAILED_GLOBAL_TELEMETRY_NOT_INITIALIZED',\n text: 'Telemetry not initialized',\n domain: ErrorDomain.MASTRA_TELEMETRY,\n category: ErrorCategory.USER,\n });\n }\n return globalThis.__TELEMETRY__;\n }\n\n /**\n * Check if telemetry is enabled\n */\n static isEnabled(): boolean {\n // If telemetry not initialized, default to true for backward compatibility\n return globalThis.__TELEMETRY__?.isEnabled() ?? true;\n }\n\n /**\n * Set the enabled state of telemetry globally\n * This allows runtime control of span creation\n */\n static setEnabled(enabled: boolean): void {\n if (globalThis.__TELEMETRY__) {\n globalThis.__TELEMETRY__.setEnabled(enabled);\n }\n }\n\n /**\n * Get the enabled state of the telemetry instance\n */\n public isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Set the enabled state of this telemetry instance\n */\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n /**\n * Wraps a class instance with telemetry tracing\n * @param instance The class instance to wrap\n * @param options Optional configuration for tracing\n * @returns Wrapped instance with all methods traced\n */\n traceClass<T extends object>(\n instance: T,\n options: {\n /** Base name for spans (e.g. 'integration', 'agent') */\n spanNamePrefix?: string;\n /** Additional attributes to add to all spans */\n attributes?: Record<string, string>;\n /** Methods to exclude from tracing */\n excludeMethods?: string[];\n /** Skip tracing if telemetry is not active */\n skipIfNoTelemetry?: boolean;\n } = {},\n ): T {\n const { skipIfNoTelemetry = true } = options;\n\n // Skip if no telemetry is active and skipIfNoTelemetry is true\n if (skipIfNoTelemetry && !hasActiveTelemetry()) {\n return instance;\n }\n\n const { spanNamePrefix = instance.constructor.name.toLowerCase(), attributes = {}, excludeMethods = [] } = options;\n\n return new Proxy(instance, {\n get: (target, prop: string | symbol) => {\n const value = target[prop as keyof T];\n\n // Skip tracing for excluded methods, constructors, private methods\n if (\n typeof value === 'function' &&\n prop !== 'constructor' &&\n !prop.toString().startsWith('_') &&\n !excludeMethods.includes(prop.toString())\n ) {\n return this.traceMethod(value.bind(target), {\n spanName: `${spanNamePrefix}.${prop.toString()}`,\n attributes: {\n ...attributes,\n [`${spanNamePrefix}.name`]: target.constructor.name,\n [`${spanNamePrefix}.method.name`]: prop.toString(),\n },\n });\n }\n\n return value;\n },\n });\n }\n\n static setBaggage(baggage: Record<string, BaggageEntry>, ctx: Context = otlpContext.active()) {\n const currentBaggage = Object.fromEntries(propagation.getBaggage(ctx)?.getAllEntries() ?? []);\n const newCtx = propagation.setBaggage(\n ctx,\n propagation.createBaggage({\n ...currentBaggage,\n ...baggage,\n }),\n );\n return newCtx;\n }\n\n static withContext(ctx: Context, fn: () => void) {\n return otlpContext.with(ctx, fn);\n }\n\n /**\n * method to trace individual methods with proper context\n * @param method The method to trace\n * @param context Additional context for the trace\n * @returns Wrapped method with tracing\n */\n traceMethod<TMethod extends Function>(\n method: TMethod,\n context: {\n spanName: string;\n attributes?: Record<string, string>;\n skipIfNoTelemetry?: boolean;\n parentSpan?: Span;\n },\n ): TMethod {\n let ctx = otlpContext.active();\n const { skipIfNoTelemetry = true } = context;\n\n // Skip if no telemetry is active and skipIfNoTelemetry is true\n if (skipIfNoTelemetry && !hasActiveTelemetry()) {\n return method;\n }\n\n return ((...args: unknown[]) => {\n const span = this.tracer.startSpan(context.spanName);\n\n function handleError(error: unknown) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: (error as Error).message,\n });\n span.end();\n throw error;\n }\n try {\n const { requestId, componentName, runId, threadId, resourceId } = getBaggageValues(ctx);\n\n // Add all context attributes to span\n if (context.attributes) {\n span.setAttributes(context.attributes);\n }\n\n if (requestId) {\n span.setAttribute('http.request_id', requestId);\n }\n\n if (threadId) {\n span.setAttribute('threadId', threadId);\n }\n\n if (resourceId) {\n span.setAttribute('resourceId', resourceId);\n }\n\n if (context.attributes?.componentName) {\n ctx = propagation.setBaggage(\n ctx,\n propagation.createBaggage({\n componentName: { value: context.attributes.componentName },\n // @ts-ignore\n runId: { value: context.attributes.runId },\n // @ts-ignore\n 'http.request_id': { value: requestId },\n }),\n );\n } else {\n if (componentName) {\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n } else if (this && this.name) {\n span.setAttribute('componentName', this.name);\n // @ts-ignore\n span.setAttribute('runId', this.runId);\n ctx = propagation.setBaggage(\n ctx,\n propagation.createBaggage({\n componentName: { value: this.name },\n // @ts-ignore\n runId: { value: this.runId },\n // @ts-ignore\n 'http.request_id': { value: requestId },\n // @ts-ignore\n threadId: { value: threadId },\n // @ts-ignore\n resourceId: { value: resourceId },\n }),\n );\n }\n }\n\n // Record input arguments as span attributes (with bounded serialization)\n args.forEach((arg, index) => {\n span.setAttribute(`${context.spanName}.argument.${index}`, boundedStringify(arg));\n });\n\n let result: any;\n otlpContext.with(trace.setSpan(ctx, span), () => {\n result = method(...args);\n });\n\n function recordResult(res: any) {\n span.setAttribute(`${context.spanName}.result`, boundedStringify(res));\n span.end();\n return res;\n }\n\n if (result instanceof Promise) {\n return result.then(recordResult).catch(handleError);\n } else {\n return recordResult(result);\n }\n } catch (error) {\n handleError(error);\n }\n }) as unknown as TMethod;\n }\n\n getBaggageTracer(): Tracer {\n return new BaggageTracer(this.tracer);\n }\n}\n\nclass BaggageTracer implements Tracer {\n private _tracer: Tracer;\n\n constructor(tracer: Tracer) {\n this._tracer = tracer;\n }\n\n startSpan(name: string, options: SpanOptions = {}, ctx: Context) {\n ctx = ctx ?? otlpContext.active();\n const span = this._tracer.startSpan(name, options, ctx);\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(ctx);\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return span;\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(name: string, options: SpanOptions, fn: F): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n ctx: Context,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n optionsOrFn: SpanOptions | F,\n ctxOrFn?: Context | F,\n fn?: F,\n ): ReturnType<F> {\n if (typeof optionsOrFn === 'function') {\n const wrappedFn = (span: Span) => {\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(otlpContext.active());\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return optionsOrFn(span);\n };\n return this._tracer.startActiveSpan(name, {}, context.active(), wrappedFn as F);\n }\n if (typeof ctxOrFn === 'function') {\n const wrappedFn = (span: Span) => {\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(otlpContext.active());\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return ctxOrFn(span);\n };\n return this._tracer.startActiveSpan(name, optionsOrFn, context.active(), wrappedFn as F);\n }\n const wrappedFn = (span: Span) => {\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(\n ctxOrFn ?? otlpContext.active(),\n );\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return fn!(span);\n };\n return this._tracer.startActiveSpan(name, optionsOrFn, ctxOrFn!, wrappedFn as F);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk7GUQ2EQ4_cjs = require('./chunk-7GUQ2EQ4.cjs');
3
+ var chunkEQQWSQ5G_cjs = require('./chunk-EQQWSQ5G.cjs');
4
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');
@@ -9,7 +9,7 @@ var aiV5 = require('ai-v5');
9
9
 
10
10
  // src/voice/voice.ts
11
11
  var _MastraVoice_decorators, _init, _a;
12
- _MastraVoice_decorators = [chunk7GUQ2EQ4_cjs.InstrumentClass({
12
+ _MastraVoice_decorators = [chunkEQQWSQ5G_cjs.InstrumentClass({
13
13
  prefix: "voice",
14
14
  excludeMethods: ["__setTools", "__setLogger", "__setTelemetry", "#log"]
15
15
  })];
@@ -467,5 +467,5 @@ exports.AISDKSpeech = AISDKSpeech;
467
467
  exports.AISDKTranscription = AISDKTranscription;
468
468
  exports.CompositeVoice = CompositeVoice;
469
469
  exports.DefaultVoice = DefaultVoice;
470
- //# sourceMappingURL=chunk-EHTC7VYS.cjs.map
471
- //# sourceMappingURL=chunk-EHTC7VYS.cjs.map
470
+ //# sourceMappingURL=chunk-L4HKPD5B.cjs.map
471
+ //# sourceMappingURL=chunk-L4HKPD5B.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/voice/voice.ts","../src/voice/aisdk/speech.ts","../src/voice/aisdk/transcription.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":["MastraVoice","__decoratorStart","__decorateElement","__runInitializers","experimental_generateSpeech","stream","PassThrough","experimental_transcribe","MastraError"],"mappings":"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","file":"chunk-EHTC7VYS.cjs","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import { PassThrough } from 'stream';\nimport { experimental_generateSpeech } from 'ai-v5';\nimport type { SpeechModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKSpeech extends MastraVoice {\n private model: SpeechModel;\n private defaultVoice?: string;\n\n constructor(model: SpeechModel, options?: { voice?: string }) {\n super({ name: 'ai-sdk-speech' });\n this.model = model;\n this.defaultVoice = options?.voice;\n }\n\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n language?: string;\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<NodeJS.ReadableStream> {\n // Convert stream to text if needed\n const text = typeof input === 'string' ? input : await this.streamToText(input);\n\n const result = await experimental_generateSpeech({\n model: this.model,\n text,\n voice: options?.speaker || this.defaultVoice, // Map speaker to AI SDK's voice parameter\n language: options?.language,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n // Convert Uint8Array to Node stream\n const stream = new PassThrough();\n stream.end(Buffer.from(result.audio.uint8Array));\n return stream;\n }\n\n async listen(): Promise<string> {\n throw new Error('AI SDK speech models do not support transcription. Use AISDKTranscription instead.');\n }\n\n async getSpeakers() {\n // Return empty array - voice must be specified in speak() options\n return [];\n }\n\n async getListener() {\n return { enabled: false };\n }\n\n private async streamToText(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n}\n","import { experimental_transcribe } from 'ai-v5';\nimport type { TranscriptionModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKTranscription extends MastraVoice {\n private model: TranscriptionModel;\n\n constructor(model: TranscriptionModel) {\n super({ name: 'ai-sdk-transcription' });\n this.model = model;\n }\n\n async speak(): Promise<NodeJS.ReadableStream> {\n throw new Error('AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.');\n }\n\n async getSpeakers() {\n return [];\n }\n\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribe audio to text\n * For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n */\n async listen(\n audioStream: NodeJS.ReadableStream,\n options?: {\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<string> {\n const audioBuffer = await this.convertToBuffer(audioStream);\n\n const result = await experimental_transcribe({\n model: this.model,\n audio: audioBuffer,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n return result.text;\n }\n\n private async convertToBuffer(audio: NodeJS.ReadableStream | Buffer | Uint8Array | string): Promise<Buffer> {\n if (Buffer.isBuffer(audio)) return audio;\n if (audio instanceof Uint8Array) return Buffer.from(audio);\n if (typeof audio === 'string') return Buffer.from(audio, 'base64');\n\n const chunks: Buffer[] = [];\n for await (const chunk of audio) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n }\n}\n","import type { TranscriptionModel, SpeechModel } from 'ai-v5';\n\nimport type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\n\nimport { AISDKSpeech } from './aisdk/speech';\nimport { AISDKTranscription } from './aisdk/transcription';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\n// Helper to check if something is an AI SDK model\nfunction isTranscriptionModel(obj: any): obj is TranscriptionModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nfunction isSpeechModel(obj: any): obj is SpeechModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice | TranscriptionModel;\n output?: MastraVoice | SpeechModel;\n realtime?: MastraVoice;\n }) {\n super();\n\n // Handle deprecated params for backward compatibility\n const inputProvider = input || listenProvider;\n const outputProvider = output || speakProvider;\n\n // Auto-wrap AI SDK models\n if (inputProvider) {\n this.listenProvider = isTranscriptionModel(inputProvider) ? new AISDKTranscription(inputProvider) : inputProvider;\n }\n\n if (outputProvider) {\n this.speakProvider = isSpeechModel(outputProvider) ? new AISDKSpeech(outputProvider) : outputProvider;\n }\n\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/voice/voice.ts","../src/voice/aisdk/speech.ts","../src/voice/aisdk/transcription.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":["MastraVoice","__decoratorStart","__decorateElement","__runInitializers","experimental_generateSpeech","stream","PassThrough","experimental_transcribe","MastraError"],"mappings":"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","file":"chunk-L4HKPD5B.cjs","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import { PassThrough } from 'stream';\nimport { experimental_generateSpeech } from 'ai-v5';\nimport type { SpeechModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKSpeech extends MastraVoice {\n private model: SpeechModel;\n private defaultVoice?: string;\n\n constructor(model: SpeechModel, options?: { voice?: string }) {\n super({ name: 'ai-sdk-speech' });\n this.model = model;\n this.defaultVoice = options?.voice;\n }\n\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n language?: string;\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<NodeJS.ReadableStream> {\n // Convert stream to text if needed\n const text = typeof input === 'string' ? input : await this.streamToText(input);\n\n const result = await experimental_generateSpeech({\n model: this.model,\n text,\n voice: options?.speaker || this.defaultVoice, // Map speaker to AI SDK's voice parameter\n language: options?.language,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n // Convert Uint8Array to Node stream\n const stream = new PassThrough();\n stream.end(Buffer.from(result.audio.uint8Array));\n return stream;\n }\n\n async listen(): Promise<string> {\n throw new Error('AI SDK speech models do not support transcription. Use AISDKTranscription instead.');\n }\n\n async getSpeakers() {\n // Return empty array - voice must be specified in speak() options\n return [];\n }\n\n async getListener() {\n return { enabled: false };\n }\n\n private async streamToText(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n}\n","import { experimental_transcribe } from 'ai-v5';\nimport type { TranscriptionModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKTranscription extends MastraVoice {\n private model: TranscriptionModel;\n\n constructor(model: TranscriptionModel) {\n super({ name: 'ai-sdk-transcription' });\n this.model = model;\n }\n\n async speak(): Promise<NodeJS.ReadableStream> {\n throw new Error('AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.');\n }\n\n async getSpeakers() {\n return [];\n }\n\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribe audio to text\n * For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n */\n async listen(\n audioStream: NodeJS.ReadableStream,\n options?: {\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<string> {\n const audioBuffer = await this.convertToBuffer(audioStream);\n\n const result = await experimental_transcribe({\n model: this.model,\n audio: audioBuffer,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n return result.text;\n }\n\n private async convertToBuffer(audio: NodeJS.ReadableStream | Buffer | Uint8Array | string): Promise<Buffer> {\n if (Buffer.isBuffer(audio)) return audio;\n if (audio instanceof Uint8Array) return Buffer.from(audio);\n if (typeof audio === 'string') return Buffer.from(audio, 'base64');\n\n const chunks: Buffer[] = [];\n for await (const chunk of audio) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n }\n}\n","import type { TranscriptionModel, SpeechModel } from 'ai-v5';\n\nimport type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\n\nimport { AISDKSpeech } from './aisdk/speech';\nimport { AISDKTranscription } from './aisdk/transcription';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\n// Helper to check if something is an AI SDK model\nfunction isTranscriptionModel(obj: any): obj is TranscriptionModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nfunction isSpeechModel(obj: any): obj is SpeechModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice | TranscriptionModel;\n output?: MastraVoice | SpeechModel;\n realtime?: MastraVoice;\n }) {\n super();\n\n // Handle deprecated params for backward compatibility\n const inputProvider = input || listenProvider;\n const outputProvider = output || speakProvider;\n\n // Auto-wrap AI SDK models\n if (inputProvider) {\n this.listenProvider = isTranscriptionModel(inputProvider) ? new AISDKTranscription(inputProvider) : inputProvider;\n }\n\n if (outputProvider) {\n this.speakProvider = isSpeechModel(outputProvider) ? new AISDKSpeech(outputProvider) : outputProvider;\n }\n\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { InstrumentClass } from './chunk-5S5X3QPR.js';
1
+ import { InstrumentClass } from './chunk-JP6JLYGP.js';
2
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';
@@ -462,5 +462,5 @@ var DefaultVoice = class extends MastraVoice {
462
462
  };
463
463
 
464
464
  export { AISDKSpeech, AISDKTranscription, CompositeVoice, DefaultVoice, MastraVoice };
465
- //# sourceMappingURL=chunk-GEHKQTB2.js.map
466
- //# sourceMappingURL=chunk-GEHKQTB2.js.map
465
+ //# sourceMappingURL=chunk-MJQV65J5.js.map
466
+ //# sourceMappingURL=chunk-MJQV65J5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/voice/voice.ts","../src/voice/aisdk/speech.ts","../src/voice/aisdk/transcription.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":[],"mappings":"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","file":"chunk-GEHKQTB2.js","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import { PassThrough } from 'stream';\nimport { experimental_generateSpeech } from 'ai-v5';\nimport type { SpeechModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKSpeech extends MastraVoice {\n private model: SpeechModel;\n private defaultVoice?: string;\n\n constructor(model: SpeechModel, options?: { voice?: string }) {\n super({ name: 'ai-sdk-speech' });\n this.model = model;\n this.defaultVoice = options?.voice;\n }\n\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n language?: string;\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<NodeJS.ReadableStream> {\n // Convert stream to text if needed\n const text = typeof input === 'string' ? input : await this.streamToText(input);\n\n const result = await experimental_generateSpeech({\n model: this.model,\n text,\n voice: options?.speaker || this.defaultVoice, // Map speaker to AI SDK's voice parameter\n language: options?.language,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n // Convert Uint8Array to Node stream\n const stream = new PassThrough();\n stream.end(Buffer.from(result.audio.uint8Array));\n return stream;\n }\n\n async listen(): Promise<string> {\n throw new Error('AI SDK speech models do not support transcription. Use AISDKTranscription instead.');\n }\n\n async getSpeakers() {\n // Return empty array - voice must be specified in speak() options\n return [];\n }\n\n async getListener() {\n return { enabled: false };\n }\n\n private async streamToText(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n}\n","import { experimental_transcribe } from 'ai-v5';\nimport type { TranscriptionModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKTranscription extends MastraVoice {\n private model: TranscriptionModel;\n\n constructor(model: TranscriptionModel) {\n super({ name: 'ai-sdk-transcription' });\n this.model = model;\n }\n\n async speak(): Promise<NodeJS.ReadableStream> {\n throw new Error('AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.');\n }\n\n async getSpeakers() {\n return [];\n }\n\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribe audio to text\n * For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n */\n async listen(\n audioStream: NodeJS.ReadableStream,\n options?: {\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<string> {\n const audioBuffer = await this.convertToBuffer(audioStream);\n\n const result = await experimental_transcribe({\n model: this.model,\n audio: audioBuffer,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n return result.text;\n }\n\n private async convertToBuffer(audio: NodeJS.ReadableStream | Buffer | Uint8Array | string): Promise<Buffer> {\n if (Buffer.isBuffer(audio)) return audio;\n if (audio instanceof Uint8Array) return Buffer.from(audio);\n if (typeof audio === 'string') return Buffer.from(audio, 'base64');\n\n const chunks: Buffer[] = [];\n for await (const chunk of audio) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n }\n}\n","import type { TranscriptionModel, SpeechModel } from 'ai-v5';\n\nimport type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\n\nimport { AISDKSpeech } from './aisdk/speech';\nimport { AISDKTranscription } from './aisdk/transcription';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\n// Helper to check if something is an AI SDK model\nfunction isTranscriptionModel(obj: any): obj is TranscriptionModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nfunction isSpeechModel(obj: any): obj is SpeechModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice | TranscriptionModel;\n output?: MastraVoice | SpeechModel;\n realtime?: MastraVoice;\n }) {\n super();\n\n // Handle deprecated params for backward compatibility\n const inputProvider = input || listenProvider;\n const outputProvider = output || speakProvider;\n\n // Auto-wrap AI SDK models\n if (inputProvider) {\n this.listenProvider = isTranscriptionModel(inputProvider) ? new AISDKTranscription(inputProvider) : inputProvider;\n }\n\n if (outputProvider) {\n this.speakProvider = isSpeechModel(outputProvider) ? new AISDKSpeech(outputProvider) : outputProvider;\n }\n\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/voice/voice.ts","../src/voice/aisdk/speech.ts","../src/voice/aisdk/transcription.ts","../src/voice/composite-voice.ts","../src/voice/default-voice.ts"],"names":[],"mappings":"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","file":"chunk-MJQV65J5.js","sourcesContent":["import type { ToolsInput } from '../agent';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\n@InstrumentClass({\n prefix: 'voice',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> extends MastraBase {\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n traced<T extends Function>(method: T, methodName: string): T {\n return (\n this.telemetry?.traceMethod(method, {\n spanName: `voice.${methodName}`,\n attributes: {\n 'voice.type': this.speechModel?.name || this.listeningModel?.name || 'unknown',\n },\n }) ?? method\n );\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.warn('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('connect not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('relay not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.warn('answer not implemented by this voice provider');\n return Promise.resolve();\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.warn('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import { PassThrough } from 'stream';\nimport { experimental_generateSpeech } from 'ai-v5';\nimport type { SpeechModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKSpeech extends MastraVoice {\n private model: SpeechModel;\n private defaultVoice?: string;\n\n constructor(model: SpeechModel, options?: { voice?: string }) {\n super({ name: 'ai-sdk-speech' });\n this.model = model;\n this.defaultVoice = options?.voice;\n }\n\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n language?: string;\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<NodeJS.ReadableStream> {\n // Convert stream to text if needed\n const text = typeof input === 'string' ? input : await this.streamToText(input);\n\n const result = await experimental_generateSpeech({\n model: this.model,\n text,\n voice: options?.speaker || this.defaultVoice, // Map speaker to AI SDK's voice parameter\n language: options?.language,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n // Convert Uint8Array to Node stream\n const stream = new PassThrough();\n stream.end(Buffer.from(result.audio.uint8Array));\n return stream;\n }\n\n async listen(): Promise<string> {\n throw new Error('AI SDK speech models do not support transcription. Use AISDKTranscription instead.');\n }\n\n async getSpeakers() {\n // Return empty array - voice must be specified in speak() options\n return [];\n }\n\n async getListener() {\n return { enabled: false };\n }\n\n private async streamToText(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n}\n","import { experimental_transcribe } from 'ai-v5';\nimport type { TranscriptionModel } from 'ai-v5';\nimport { MastraVoice } from '../voice';\n\nexport class AISDKTranscription extends MastraVoice {\n private model: TranscriptionModel;\n\n constructor(model: TranscriptionModel) {\n super({ name: 'ai-sdk-transcription' });\n this.model = model;\n }\n\n async speak(): Promise<NodeJS.ReadableStream> {\n throw new Error('AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.');\n }\n\n async getSpeakers() {\n return [];\n }\n\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribe audio to text\n * For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n */\n async listen(\n audioStream: NodeJS.ReadableStream,\n options?: {\n providerOptions?: Record<string, any>;\n abortSignal?: AbortSignal;\n headers?: Record<string, string>;\n },\n ): Promise<string> {\n const audioBuffer = await this.convertToBuffer(audioStream);\n\n const result = await experimental_transcribe({\n model: this.model,\n audio: audioBuffer,\n providerOptions: options?.providerOptions,\n abortSignal: options?.abortSignal,\n headers: options?.headers,\n });\n\n return result.text;\n }\n\n private async convertToBuffer(audio: NodeJS.ReadableStream | Buffer | Uint8Array | string): Promise<Buffer> {\n if (Buffer.isBuffer(audio)) return audio;\n if (audio instanceof Uint8Array) return Buffer.from(audio);\n if (typeof audio === 'string') return Buffer.from(audio, 'base64');\n\n const chunks: Buffer[] = [];\n for await (const chunk of audio) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n }\n}\n","import type { TranscriptionModel, SpeechModel } from 'ai-v5';\n\nimport type { ToolsInput } from '../agent';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\n\nimport { AISDKSpeech } from './aisdk/speech';\nimport { AISDKTranscription } from './aisdk/transcription';\nimport { MastraVoice } from './voice';\nimport type { VoiceEventType, VoiceEventMap } from '.';\n\n// Helper to check if something is an AI SDK model\nfunction isTranscriptionModel(obj: any): obj is TranscriptionModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nfunction isSpeechModel(obj: any): obj is SpeechModel {\n return obj && typeof obj === 'object' && obj.modelId && obj.specificationVersion === 'v2';\n}\n\nexport class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {\n protected speakProvider?: MastraVoice;\n protected listenProvider?: MastraVoice;\n protected realtimeProvider?: MastraVoice;\n\n constructor({\n input,\n output,\n realtime,\n speakProvider,\n listenProvider,\n realtimeProvider,\n }: {\n /** @deprecated use output instead */\n speakProvider?: MastraVoice;\n /** @deprecated use input instead */\n listenProvider?: MastraVoice;\n /** @deprecated use realtime instead */\n realtimeProvider?: MastraVoice;\n\n input?: MastraVoice | TranscriptionModel;\n output?: MastraVoice | SpeechModel;\n realtime?: MastraVoice;\n }) {\n super();\n\n // Handle deprecated params for backward compatibility\n const inputProvider = input || listenProvider;\n const outputProvider = output || speakProvider;\n\n // Auto-wrap AI SDK models\n if (inputProvider) {\n this.listenProvider = isTranscriptionModel(inputProvider) ? new AISDKTranscription(inputProvider) : inputProvider;\n }\n\n if (outputProvider) {\n this.speakProvider = isSpeechModel(outputProvider) ? new AISDKSpeech(outputProvider) : outputProvider;\n }\n\n this.realtimeProvider = realtime || realtimeProvider;\n }\n\n /**\n * Convert text to speech using the configured provider\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in realtime mode\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: { speaker?: string } & any,\n ): Promise<NodeJS.ReadableStream | void> {\n if (this.realtimeProvider) {\n return this.realtimeProvider.speak(input, options);\n } else if (this.speakProvider) {\n return this.speakProvider.speak(input, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAK_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: any) {\n if (this.realtimeProvider) {\n return await this.realtimeProvider.listen(audioStream, options);\n } else if (this.listenProvider) {\n return await this.listenProvider.listen(audioStream, options);\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTEN_PROVIDER',\n text: 'No listen provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getSpeakers();\n } else if (this.speakProvider) {\n return this.speakProvider.getSpeakers();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER',\n text: 'No speak provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener() {\n if (this.realtimeProvider) {\n return this.realtimeProvider.getListener();\n } else if (this.listenProvider) {\n return this.listenProvider.getListener();\n }\n\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_LISTENER_PROVIDER',\n text: 'No listener provider or realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n updateConfig(options: Record<string, unknown>): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.updateConfig(options);\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n connect(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.connect(options);\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to send\n */\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.send(audioData);\n }\n\n /**\n * Trigger voice providers to respond\n */\n answer(options?: Record<string, unknown>): Promise<void> {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n return this.realtimeProvider.answer(options);\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(instructions: string): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addInstructions(instructions);\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(tools: ToolsInput): void {\n if (!this.realtimeProvider) {\n return;\n }\n this.realtimeProvider.addTools(tools);\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.close();\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.on(event, callback);\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof VoiceEventMap ? VoiceEventMap[E] : unknown) => void,\n ): void {\n if (!this.realtimeProvider) {\n throw new MastraError({\n id: 'VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF',\n text: 'No realtime provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n this.realtimeProvider.off(event, callback);\n }\n}\n","import { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { MastraVoice } from '.';\n\nexport class DefaultVoice extends MastraVoice {\n constructor() {\n super();\n }\n\n async speak(_input: string | NodeJS.ReadableStream): Promise<NodeJS.ReadableStream> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAK_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async listen(_input: string | NodeJS.ReadableStream): Promise<string> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTEN_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getSpeakers(): Promise<{ voiceId: string }[]> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_SPEAKERS_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n throw new MastraError({\n id: 'VOICE_DEFAULT_NO_LISTENER_PROVIDER',\n text: 'No voice provider configured',\n domain: ErrorDomain.MASTRA_VOICE,\n category: ErrorCategory.USER,\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Agent } from './chunk-GSQD3QNR.js';
1
+ import { Agent } from './chunk-6PQUBAHQ.js';
2
2
 
3
3
  // src/relevance/cohere/index.ts
4
4
  var CohereRelevanceScorer = class {
@@ -83,5 +83,5 @@ Always return just the number, no explanation.`,
83
83
  };
84
84
 
85
85
  export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt };
86
- //# sourceMappingURL=chunk-4DWBTEHS.js.map
87
- //# sourceMappingURL=chunk-4DWBTEHS.js.map
86
+ //# sourceMappingURL=chunk-QSNEKU46.js.map
87
+ //# sourceMappingURL=chunk-QSNEKU46.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/relevance/cohere/index.ts","../src/relevance/relevance-score-provider.ts","../src/relevance/mastra-agent/index.ts"],"names":[],"mappings":";;;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACR,WAAA,CAAY,OAAe,MAAA,EAAiB;AAC1C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EACA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACR;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,eAAA;AAExC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACpDO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAsB;AAC1E,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;;AAAA,MAAA,EAEN,IAAI;;AAAA,sBAAA,CAAA;AAGZ;;;ACRO,IAAM,6BAAN,MAAmE;AAAA,EAChE,KAAA;AAAA,EAER,WAAA,CAAY,MAAc,KAAA,EAA0B;AAClD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACrB,IAAA,EAAM,oBAAoB,IAAI,CAAA,CAAA;AAAA,MAC9B,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAAA,CAAA;AAAA,MAUd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AAEjD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAExC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,CAAM,yBAAyB,IAAA,EAAM;AACvC,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AACrD,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3D,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AACF","file":"chunk-4DWBTEHS.js","sourcesContent":["import type { RelevanceScoreProvider } from '../relevance-score-provider';\n\ninterface CohereRerankingResponse {\n results: Array<{\n index: number;\n relevance_score: number;\n }>;\n id: string;\n meta: {\n api_version: {\n version: string;\n is_experimental: boolean;\n };\n billed_units: {\n search_units: number;\n };\n };\n}\n\n/** @deprecated Import from `@mastra/rag` instead */\nexport class CohereRelevanceScorer implements RelevanceScoreProvider {\n private model: string;\n private apiKey?: string;\n constructor(model: string, apiKey?: string) {\n console.warn(\n 'CohereRelevanceScorer exported from @mastra/core is deprecated. Please import from \"@mastra/rag\" instead.',\n );\n this.apiKey = apiKey;\n this.model = model;\n }\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const response = await fetch(`https://api.cohere.com/v2/rerank`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n query,\n documents: [text],\n model: this.model,\n top_n: 1,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Cohere API error: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as CohereRerankingResponse;\n const relevanceScore = data.results[0]?.relevance_score;\n\n if (!relevanceScore) {\n throw new Error('No relevance score found on Cohere response');\n }\n\n return relevanceScore;\n }\n}\n","// Provider interfaces\nexport interface RelevanceScoreProvider {\n getRelevanceScore(text1: string, text2: string): Promise<number>;\n}\n\n// Helper function used by providers\nexport function createSimilarityPrompt(query: string, text: string): string {\n return `Rate the semantic similarity between the following the query and the text on a scale from 0 to 1 (decimals allowed), where 1 means exactly the same meaning and 0 means completely different:\n\nQuery: ${query}\n\nText: ${text}\n\nRelevance score (0-1):`;\n}\n","import { Agent } from '../../agent';\nimport type { MastraModelConfig } from '../../llm/model/shared.types';\nimport { createSimilarityPrompt } from '../relevance-score-provider';\nimport type { RelevanceScoreProvider } from '../relevance-score-provider';\n\n// Mastra Agent implementation\nexport class MastraAgentRelevanceScorer implements RelevanceScoreProvider {\n private agent: Agent;\n\n constructor(name: string, model: MastraModelConfig) {\n this.agent = new Agent({\n name: `Relevance Scorer ${name}`,\n instructions: `You are a specialized agent for evaluating the relevance of text to queries.\nYour task is to rate how well a text passage answers a given query.\nOutput only a number between 0 and 1, where:\n1.0 = Perfectly relevant, directly answers the query\n0.0 = Completely irrelevant\nConsider:\n- Direct relevance to the question\n- Completeness of information\n- Quality and specificity\nAlways return just the number, no explanation.`,\n model,\n });\n }\n\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const prompt = createSimilarityPrompt(query, text);\n\n const model = await this.agent.getModel();\n\n let response: string;\n if (model.specificationVersion === 'v2') {\n const responseText = await this.agent.generate(prompt);\n response = responseText.text;\n } else {\n const responseText = await this.agent.generateLegacy(prompt);\n response = responseText.text;\n }\n return parseFloat(response);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/relevance/cohere/index.ts","../src/relevance/relevance-score-provider.ts","../src/relevance/mastra-agent/index.ts"],"names":[],"mappings":";;;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACR,WAAA,CAAY,OAAe,MAAA,EAAiB;AAC1C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EACA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACR;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,eAAA;AAExC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACpDO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAsB;AAC1E,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;;AAAA,MAAA,EAEN,IAAI;;AAAA,sBAAA,CAAA;AAGZ;;;ACRO,IAAM,6BAAN,MAAmE;AAAA,EAChE,KAAA;AAAA,EAER,WAAA,CAAY,MAAc,KAAA,EAA0B;AAClD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACrB,IAAA,EAAM,oBAAoB,IAAI,CAAA,CAAA;AAAA,MAC9B,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAAA,CAAA;AAAA,MAUd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AAEjD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAExC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,CAAM,yBAAyB,IAAA,EAAM;AACvC,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AACrD,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3D,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AACF","file":"chunk-QSNEKU46.js","sourcesContent":["import type { RelevanceScoreProvider } from '../relevance-score-provider';\n\ninterface CohereRerankingResponse {\n results: Array<{\n index: number;\n relevance_score: number;\n }>;\n id: string;\n meta: {\n api_version: {\n version: string;\n is_experimental: boolean;\n };\n billed_units: {\n search_units: number;\n };\n };\n}\n\n/** @deprecated Import from `@mastra/rag` instead */\nexport class CohereRelevanceScorer implements RelevanceScoreProvider {\n private model: string;\n private apiKey?: string;\n constructor(model: string, apiKey?: string) {\n console.warn(\n 'CohereRelevanceScorer exported from @mastra/core is deprecated. Please import from \"@mastra/rag\" instead.',\n );\n this.apiKey = apiKey;\n this.model = model;\n }\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const response = await fetch(`https://api.cohere.com/v2/rerank`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n query,\n documents: [text],\n model: this.model,\n top_n: 1,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Cohere API error: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as CohereRerankingResponse;\n const relevanceScore = data.results[0]?.relevance_score;\n\n if (!relevanceScore) {\n throw new Error('No relevance score found on Cohere response');\n }\n\n return relevanceScore;\n }\n}\n","// Provider interfaces\nexport interface RelevanceScoreProvider {\n getRelevanceScore(text1: string, text2: string): Promise<number>;\n}\n\n// Helper function used by providers\nexport function createSimilarityPrompt(query: string, text: string): string {\n return `Rate the semantic similarity between the following the query and the text on a scale from 0 to 1 (decimals allowed), where 1 means exactly the same meaning and 0 means completely different:\n\nQuery: ${query}\n\nText: ${text}\n\nRelevance score (0-1):`;\n}\n","import { Agent } from '../../agent';\nimport type { MastraModelConfig } from '../../llm/model/shared.types';\nimport { createSimilarityPrompt } from '../relevance-score-provider';\nimport type { RelevanceScoreProvider } from '../relevance-score-provider';\n\n// Mastra Agent implementation\nexport class MastraAgentRelevanceScorer implements RelevanceScoreProvider {\n private agent: Agent;\n\n constructor(name: string, model: MastraModelConfig) {\n this.agent = new Agent({\n name: `Relevance Scorer ${name}`,\n instructions: `You are a specialized agent for evaluating the relevance of text to queries.\nYour task is to rate how well a text passage answers a given query.\nOutput only a number between 0 and 1, where:\n1.0 = Perfectly relevant, directly answers the query\n0.0 = Completely irrelevant\nConsider:\n- Direct relevance to the question\n- Completeness of information\n- Quality and specificity\nAlways return just the number, no explanation.`,\n model,\n });\n }\n\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const prompt = createSimilarityPrompt(query, text);\n\n const model = await this.agent.getModel();\n\n let response: string;\n if (model.specificationVersion === 'v2') {\n const responseText = await this.agent.generate(prompt);\n response = responseText.text;\n } else {\n const responseText = await this.agent.generateLegacy(prompt);\n response = responseText.text;\n }\n return parseFloat(response);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { validateStepInput, getStepResult, createTimeTravelExecutionParams, validateStepResumeData, Workflow, Run, ExecutionEngine } from './chunk-GSQD3QNR.js';
1
+ import { validateStepInput, getStepResult, createTimeTravelExecutionParams, validateStepResumeData, Workflow, Run, ExecutionEngine } from './chunk-6PQUBAHQ.js';
2
2
  import { STREAM_FORMAT_SYMBOL, EMITTER_SYMBOL } from './chunk-NLNKQD2T.js';
3
3
  import { RuntimeContext } from './chunk-HLRWYUFN.js';
4
4
  import { MastraError } from './chunk-PZUZNPFM.js';
@@ -2661,5 +2661,5 @@ var EventedExecutionEngine = class extends ExecutionEngine {
2661
2661
  };
2662
2662
 
2663
2663
  export { EventedExecutionEngine, EventedRun, EventedWorkflow, StepExecutor, WorkflowEventProcessor, cloneStep, cloneWorkflow, createStep, createWorkflow };
2664
- //# sourceMappingURL=chunk-5KSHWBRH.js.map
2665
- //# sourceMappingURL=chunk-5KSHWBRH.js.map
2664
+ //# sourceMappingURL=chunk-S5NJWVPG.js.map
2665
+ //# sourceMappingURL=chunk-S5NJWVPG.js.map