@mastra/voice-azure 0.11.1 → 0.11.3

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.
@@ -1549,16 +1549,16 @@ declare interface EventSourceMessage {
1549
1549
  * implementation in that browsers will default this to `message`, whereas this parser will
1550
1550
  * leave this as `undefined` if not explicitly declared.
1551
1551
  */
1552
- event?: string | undefined
1552
+ event?: string | undefined;
1553
1553
  /**
1554
1554
  * ID of the message, if any was provided by the server. Can be used by clients to keep the
1555
1555
  * last received message ID in sync when reconnecting.
1556
1556
  */
1557
- id?: string | undefined
1557
+ id?: string | undefined;
1558
1558
  /**
1559
1559
  * The data received for this message
1560
1560
  */
1561
- data: string
1561
+ data: string;
1562
1562
  }
1563
1563
 
1564
1564
  /**
@@ -1582,8 +1582,11 @@ declare interface EventSourceMessage {
1582
1582
  *
1583
1583
  * @public
1584
1584
  */
1585
- declare class EventSourceParserStream extends TransformStream<string, EventSourceMessage> {
1586
- constructor({onError, onRetry, onComment}?: StreamOptions)
1585
+ declare class EventSourceParserStream extends TransformStream<
1586
+ string,
1587
+ EventSourceMessage
1588
+ > {
1589
+ constructor({ onError, onRetry, onComment }?: StreamOptions);
1587
1590
  }
1588
1591
 
1589
1592
  /**
@@ -6830,19 +6833,19 @@ declare interface StreamOptions {
6830
6833
  *
6831
6834
  * @defaultValue `undefined`
6832
6835
  */
6833
- onError?: ('terminate' | ((error: Error) => void)) | undefined
6836
+ onError?: ("terminate" | ((error: Error) => void)) | undefined;
6834
6837
  /**
6835
6838
  * Callback for when a reconnection interval is sent from the server.
6836
6839
  *
6837
6840
  * @param retry - The number of milliseconds to wait before reconnecting.
6838
6841
  */
6839
- onRetry?: ((retry: number) => void) | undefined
6842
+ onRetry?: ((retry: number) => void) | undefined;
6840
6843
  /**
6841
6844
  * Callback for when a comment is encountered in the stream.
6842
6845
  *
6843
6846
  * @param comment - The comment encountered in the stream.
6844
6847
  */
6845
- onComment?: ((comment: string) => void) | undefined
6848
+ onComment?: ((comment: string) => void) | undefined;
6846
6849
  }
6847
6850
 
6848
6851
  /**
@@ -3,7 +3,7 @@ name: mastra-voice-azure
3
3
  description: Documentation for @mastra/voice-azure. Use when working with @mastra/voice-azure APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/voice-azure"
6
- version: "0.11.1"
6
+ version: "0.11.3"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.11.1",
2
+ "version": "0.11.3",
3
3
  "package": "@mastra/voice-azure",
4
4
  "exports": {},
5
5
  "modules": {}
@@ -158,7 +158,7 @@ await voice.connect()
158
158
  When you use a resolver:
159
159
 
160
160
  - Each call to `getVoice()` returns a new instance, so concurrent sessions never share state.
161
- - Mastra does not add tools or instructions to a resolver instance. Configure those inside the resolver or on the provider.
161
+ - Mastra doesn't add tools or instructions to a resolver instance. Configure those inside the resolver or on the provider.
162
162
  - You own the lifecycle of the returned instance, so call `disconnect()` or `close()` when the session ends.
163
163
 
164
164
  The `agent.voice` getter has no request context, so it throws when `voice` is a resolver. Use `agent.getVoice({ requestContext })` instead.
package/dist/index.cjs CHANGED
@@ -25,7 +25,7 @@ var Azure__namespace = /*#__PURE__*/_interopNamespace(Azure);
25
25
 
26
26
  // src/index.ts
27
27
 
28
- // ../../packages/_internal-core/dist/chunk-HDURQPU2.js
28
+ // ../../packages/_internal-core/dist/chunk-3M4SEWMI.js
29
29
  var RegisteredLogger = {
30
30
  LLM: "LLM"};
31
31
  var LogLevel = {
@@ -122,7 +122,7 @@ var ConsoleLogger = class _ConsoleLogger extends MastraLogger {
122
122
  }
123
123
  warn(message, ...args) {
124
124
  if ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) {
125
- console.info(`${this.prefix()}${message}`, ...args);
125
+ console.warn(`${this.prefix()}${message}`, ...args);
126
126
  }
127
127
  }
128
128
  error(message, ...args) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/_internal-core/src/logger/index.ts","../../../packages/_internal-core/src/base/MastraBase.ts","../../../packages/_internals/voice/src/voice/voice.ts","../src/voices.ts","../src/index.ts"],"names":["Azure","result","Readable"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Transform } from 'node:stream';\n\nexport const RegisteredLogger = {\n AGENT: 'AGENT',\n OBSERVABILITY: 'OBSERVABILITY',\n AUTH: 'AUTH',\n BROWSER: 'BROWSER',\n NETWORK: 'NETWORK',\n WORKFLOW: 'WORKFLOW',\n LLM: 'LLM',\n TTS: 'TTS',\n VOICE: 'VOICE',\n VECTOR: 'VECTOR',\n BUNDLER: 'BUNDLER',\n DEPLOYER: 'DEPLOYER',\n MEMORY: 'MEMORY',\n STORAGE: 'STORAGE',\n EMBEDDINGS: 'EMBEDDINGS',\n MCP_SERVER: 'MCP_SERVER',\n SERVER_CACHE: 'SERVER_CACHE',\n SERVER: 'SERVER',\n WORKSPACE: 'WORKSPACE',\n CHANNEL: 'CHANNEL',\n} as const;\n\nexport type RegisteredLogger = (typeof RegisteredLogger)[keyof typeof RegisteredLogger];\n\nexport const LogLevel = {\n DEBUG: 'debug',\n INFO: 'info',\n WARN: 'warn',\n ERROR: 'error',\n NONE: 'silent',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n\nexport interface IMastraLogger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n trackException(error: Error, metadata?: Record<string, unknown>): void;\n\n getTransports(): Map<string, LoggerTransport>;\n listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n}\n\nexport abstract class MastraLogger implements IMastraLogger {\n protected name: string;\n protected level: LogLevel;\n protected transports: Map<string, LoggerTransport>;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: Record<string, LoggerTransport>;\n } = {},\n ) {\n this.name = options.name || 'Mastra';\n this.level = options.level || LogLevel.ERROR;\n this.transports = new Map(Object.entries(options.transports || {}));\n }\n\n abstract debug(message: string, ...args: any[]): void;\n abstract info(message: string, ...args: any[]): void;\n abstract warn(message: string, ...args: any[]): void;\n abstract error(message: string, ...args: any[]): void;\n\n getTransports() {\n return this.transports;\n }\n\n trackException(_error: Error, _metadata?: Record<string, unknown>) {}\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId || !this.transports.has(transportId)) {\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports.get(transportId)!.listLogs?.(params) ?? {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n }\n );\n }\n\n async listLogsByRunId({\n transportId,\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId || !this.transports.has(transportId) || !runId) {\n return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports\n .get(transportId)!\n .listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {\n logs: [],\n total: 0,\n page: page ?? 1,\n perPage: perPage ?? 100,\n hasMore: false,\n }\n );\n }\n}\n\nexport type LogFilterContext = {\n component?: RegisteredLogger;\n level: LogLevel;\n message: string;\n args: unknown[];\n};\n\nexport type LogFilter = (ctx: LogFilterContext) => boolean;\n\nexport interface ConsoleLoggerOptions {\n name?: string;\n level?: LogLevel;\n component?: RegisteredLogger;\n filter?: LogFilter;\n}\n\nexport class ConsoleLogger extends MastraLogger {\n protected component?: RegisteredLogger;\n protected filter?: LogFilter;\n\n constructor(options: ConsoleLoggerOptions = {}) {\n super(options);\n this.component = options.component;\n this.filter = options.filter;\n }\n\n child(componentOrBindings: RegisteredLogger | Record<string, unknown>): ConsoleLogger {\n const component =\n typeof componentOrBindings === 'string'\n ? componentOrBindings\n : ((componentOrBindings?.component as RegisteredLogger) ?? this.component);\n return new ConsoleLogger({\n name: this.name,\n level: this.level,\n component,\n filter: this.filter,\n });\n }\n\n private shouldLog(level: LogLevel, message: string, args: unknown[]): boolean {\n if (!this.filter) return true;\n try {\n return this.filter({ component: this.component, level, message, args });\n } catch (e) {\n console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n return true;\n }\n }\n\n private prefix(): string {\n return this.component ? `[${this.component}] ` : '';\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.INFO, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.WARN, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.ERROR ||\n this.level === LogLevel.WARN ||\n this.level === LogLevel.INFO ||\n this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.ERROR, message, args)\n ) {\n console.error(`${this.prefix()}${message}`, ...args);\n }\n }\n\n async listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, RegisteredLogger } from '../logger';\n\nexport class MastraBase {\n component: RegisteredLogger = RegisteredLogger.LLM;\n protected logger: IMastraLogger;\n name?: string;\n #rawConfig?: Record<string, unknown>;\n\n constructor({\n component,\n name,\n rawConfig,\n }: {\n component?: RegisteredLogger;\n name?: string;\n rawConfig?: Record<string, unknown>;\n }) {\n this.component = component || RegisteredLogger.LLM;\n this.name = name;\n this.#rawConfig = rawConfig;\n this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n }\n\n /**\n * Returns the raw storage configuration this primitive was created from,\n * or undefined if it was created from code.\n */\n toRawConfig(): Record<string, unknown> | undefined {\n return this.#rawConfig;\n }\n\n /**\n * Sets the raw storage configuration for this primitive.\n * @internal\n */\n __setRawConfig(rawConfig: Record<string, unknown>): void {\n this.#rawConfig = rawConfig;\n }\n\n /**\n * Set the logger for the agent\n * @param logger\n */\n __setLogger(logger: IMastraLogger) {\n this.logger =\n 'child' in logger && typeof (logger as any).child === 'function'\n ? (logger as any).child({ component: this.component })\n : logger;\n }\n}\n","import { MastraBase } from '@internal/core/base';\nimport type { ToolsInput } from '@internal/core/types';\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\nexport interface VoiceSpanConfig {\n component: 'VOICE';\n name?: string;\n speaker?: string;\n listeningModel?: { name: string };\n speechModel?: { name: string };\n realtimeModel?: string;\n}\n\nexport interface IMastraVoice<\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> {\n serializeForSpan(): VoiceSpanConfig;\n speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n listen(\n audioStream: NodeJS.ReadableStream | unknown,\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n updateConfig(options: Record<string, unknown>): void;\n connect(options?: Record<string, unknown>): Promise<void>;\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void>;\n answer(options?: Record<string, unknown>): Promise<void>;\n addInstructions(instructions?: string): void;\n addTools(tools: TTools): void;\n close(): void;\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n >;\n getListener(): Promise<{ enabled: boolean }>;\n}\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>\n extends MastraBase\n implements IMastraVoice<TSpeakOptions, TListenOptions, TTools, TEventArgs, TSpeakerMetadata>\n{\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 /**\n * Custom serialization for tracing/observability spans.\n * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n * and any provider-specific state held by subclasses. Subclasses that\n * need to expose additional non-sensitive fields can override.\n */\n serializeForSpan(): VoiceSpanConfig {\n return {\n component: 'VOICE',\n name: this.name,\n speaker: this.speaker,\n listeningModel: this.listeningModel ? { name: this.listeningModel.name } : undefined,\n speechModel: this.speechModel ? { name: this.speechModel.name } : undefined,\n realtimeModel: this.realtimeConfig?.model,\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.debug('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 async connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('connect not implemented by this voice provider');\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n async send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('relay not implemented by this voice provider');\n }\n\n /**\n * Trigger voice providers to respond\n */\n async answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.debug('answer not implemented by this voice provider');\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.debug('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.debug('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.debug('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.debug('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.debug('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","export const AZURE_VOICES = [\n 'af-ZA-AdriNeural',\n 'af-ZA-WillemNeural',\n 'am-ET-MekdesNeural',\n 'am-ET-AmehaNeural',\n 'ar-AE-FatimaNeural',\n 'ar-AE-HamdanNeural',\n 'ar-BH-LailaNeural',\n 'ar-BH-AliNeural',\n 'ar-DZ-AminaNeural',\n 'ar-DZ-IsmaelNeural',\n 'ar-EG-SalmaNeural',\n 'ar-EG-ShakirNeural',\n 'ar-IQ-RanaNeural',\n 'ar-IQ-BasselNeural',\n 'ar-JO-SanaNeural',\n 'ar-JO-TaimNeural',\n 'ar-KW-NouraNeural',\n 'ar-KW-FahedNeural',\n 'ar-LB-LaylaNeural',\n 'ar-LB-RamiNeural',\n 'ar-LY-ImanNeural',\n 'ar-LY-OmarNeural',\n 'ar-MA-MounaNeural',\n 'ar-MA-JamalNeural',\n 'ar-OM-AyshaNeural',\n 'ar-OM-AbdullahNeural',\n 'ar-QA-AmalNeural',\n 'ar-QA-MoazNeural',\n 'ar-SA-ZariyahNeural',\n 'ar-SA-HamedNeural',\n 'ar-SY-AmanyNeural',\n 'ar-SY-LaithNeural',\n 'ar-TN-ReemNeural',\n 'ar-TN-HediNeural',\n 'ar-YE-MaryamNeural',\n 'ar-YE-SalehNeural',\n 'as-IN-YashicaNeural',\n 'as-IN-PriyomNeural',\n 'az-AZ-BanuNeural',\n 'az-AZ-BabekNeural',\n 'bg-BG-KalinaNeural',\n 'bg-BG-BorislavNeural',\n 'bn-BD-NabanitaNeural',\n 'bn-BD-PradeepNeural',\n 'bn-IN-TanishaaNeural',\n 'bn-IN-BashkarNeural',\n 'bs-BA-VesnaNeural',\n 'bs-BA-GoranNeural',\n 'ca-ES-JoanaNeural',\n 'ca-ES-EnricNeural',\n 'ca-ES-AlbaNeural',\n 'cs-CZ-VlastaNeural',\n 'cs-CZ-AntoninNeural',\n 'cy-GB-NiaNeural',\n 'cy-GB-AledNeural',\n 'da-DK-ChristelNeural',\n 'da-DK-JeppeNeural',\n 'de-AT-IngridNeural',\n 'de-AT-JonasNeural',\n 'de-CH-LeniNeural',\n 'de-CH-JanNeural',\n 'de-DE-KatjaNeural',\n 'de-DE-ConradNeural',\n 'de-DE-SeraphinaMultilingualNeural',\n 'de-DE-FlorianMultilingualNeural',\n 'de-DE-AmalaNeural',\n 'de-DE-BerndNeural',\n 'de-DE-ChristophNeural',\n 'de-DE-ElkeNeural',\n 'de-DE-GiselaNeural',\n 'de-DE-KasperNeural',\n 'de-DE-KillianNeural',\n 'de-DE-KlarissaNeural',\n 'de-DE-KlausNeural',\n 'de-DE-LouisaNeural',\n 'de-DE-MajaNeural',\n 'de-DE-RalfNeural',\n 'de-DE-TanjaNeural',\n 'de-DE-Seraphina:DragonHDLatestNeural',\n 'el-GR-AthinaNeural',\n 'el-GR-NestorasNeural',\n 'en-AU-NatashaNeural',\n 'en-AU-WilliamNeural',\n 'en-AU-AnnetteNeural',\n 'en-AU-CarlyNeural',\n 'en-AU-DarrenNeural',\n 'en-AU-DuncanNeural',\n 'en-AU-ElsieNeural',\n 'en-AU-FreyaNeural',\n 'en-AU-JoanneNeural',\n 'en-AU-KenNeural',\n 'en-AU-KimNeural',\n 'en-AU-NeilNeural',\n 'en-AU-TimNeural',\n 'en-AU-TinaNeural',\n 'en-CA-ClaraNeural',\n 'en-CA-LiamNeural',\n 'en-GB-SoniaNeural',\n 'en-GB-RyanNeural',\n 'en-GB-LibbyNeural',\n 'en-GB-AdaMultilingualNeural',\n 'en-GB-OllieMultilingualNeural',\n 'en-GB-AbbiNeural',\n 'en-GB-AlfieNeural',\n 'en-GB-BellaNeural',\n 'en-GB-ElliotNeural',\n 'en-GB-EthanNeural',\n 'en-GB-HollieNeural',\n 'en-GB-MaisieNeural',\n 'en-GB-NoahNeural',\n 'en-GB-OliverNeural',\n 'en-GB-OliviaNeural',\n 'en-GB-ThomasNeural',\n 'en-GB-MiaNeural',\n 'en-HK-YanNeural',\n 'en-HK-SamNeural',\n 'en-IE-EmilyNeural',\n 'en-IE-ConnorNeural',\n 'en-IN-AaravNeural',\n 'en-IN-AashiNeural',\n 'en-IN-AnanyaNeural',\n 'en-IN-KavyaNeural',\n 'en-IN-KunalNeural',\n 'en-IN-NeerjaNeural',\n 'en-IN-PrabhatNeural',\n 'en-IN-RehaanNeural',\n 'en-IN-AartiNeural',\n 'en-IN-ArjunNeural',\n 'en-KE-AsiliaNeural',\n 'en-KE-ChilembaNeural',\n 'en-NG-EzinneNeural',\n 'en-NG-AbeoNeural',\n 'en-NZ-MollyNeural',\n 'en-NZ-MitchellNeural',\n 'en-PH-RosaNeural',\n 'en-PH-JamesNeural',\n 'en-SG-LunaNeural',\n 'en-SG-WayneNeural',\n 'en-TZ-ImaniNeural',\n 'en-TZ-ElimuNeural',\n 'en-US-AvaMultilingualNeural',\n 'en-US-AndrewMultilingualNeural',\n 'en-US-EmmaMultilingualNeural',\n 'en-US-BrianMultilingualNeural',\n 'en-US-AvaNeural',\n 'en-US-AndrewNeural',\n 'en-US-EmmaNeural',\n 'en-US-BrianNeural',\n 'en-US-JennyNeural',\n 'en-US-GuyNeural',\n 'en-US-AriaNeural',\n 'en-US-DavisNeural',\n 'en-US-JaneNeural',\n 'en-US-JasonNeural',\n 'en-US-KaiNeural',\n 'en-US-LunaNeural',\n 'en-US-SaraNeural',\n 'en-US-TonyNeural',\n 'en-US-NancyNeural',\n 'en-US-CoraMultilingualNeural',\n 'en-US-ChristopherMultilingualNeural',\n 'en-US-BrandonMultilingualNeural',\n 'en-US-AmberNeural',\n 'en-US-AnaNeural',\n 'en-US-AshleyNeural',\n 'en-US-BrandonNeural',\n 'en-US-ChristopherNeural',\n 'en-US-CoraNeural',\n 'en-US-ElizabethNeural',\n 'en-US-EricNeural',\n 'en-US-JacobNeural',\n 'en-US-JennyMultilingualNeural',\n 'en-US-MichelleNeural',\n 'en-US-MonicaNeural',\n 'en-US-RogerNeural',\n 'en-US-RyanMultilingualNeural',\n 'en-US-SteffanNeural',\n 'en-US-AdamMultilingualNeural',\n 'en-US-AIGenerate1Neural',\n 'en-US-AIGenerate2Neural',\n 'en-US-AlloyTurboMultilingualNeural',\n 'en-US-AmandaMultilingualNeural',\n 'en-US-BlueNeural',\n 'en-US-DavisMultilingualNeural',\n 'en-US-DerekMultilingualNeural',\n 'en-US-DustinMultilingualNeural',\n 'en-US-EchoTurboMultilingualNeural',\n 'en-US-EvelynMultilingualNeural',\n 'en-US-FableTurboMultilingualNeural',\n 'en-US-LewisMultilingualNeural',\n 'en-US-LolaMultilingualNeural',\n 'en-US-NancyMultilingualNeural',\n 'en-US-NovaTurboMultilingualNeural',\n 'en-US-OnyxTurboMultilingualNeural',\n 'en-US-PhoebeMultilingualNeural',\n 'en-US-SamuelMultilingualNeural',\n 'en-US-SerenaMultilingualNeural',\n 'en-US-ShimmerTurboMultilingualNeural',\n 'en-US-SteffanMultilingualNeural',\n 'en-US-Andrew:DragonHDLatestNeural',\n 'en-US-Andrew2:DragonHDLatestNeural',\n 'en-US-Aria:DragonHDLatestNeural',\n 'en-US-Ava:DragonHDLatestNeural',\n 'en-US-Brian:DragonHDLatestNeural',\n 'en-US-Davis:DragonHDLatestNeural',\n 'en-US-Emma:DragonHDLatestNeural',\n 'en-US-Emma2:DragonHDLatestNeural',\n 'en-US-Jenny:DragonHDLatestNeural',\n 'en-US-Steffan:DragonHDLatestNeural',\n 'en-ZA-LeahNeural',\n 'en-ZA-LukeNeural',\n] as const;\n\nexport type VoiceId = (typeof AZURE_VOICES)[number];\n","import { Readable } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport * as Azure from 'microsoft-cognitiveservices-speech-sdk';\nimport { AZURE_VOICES } from './voices';\nimport type { VoiceId } from './voices';\n\ninterface AzureVoiceConfig {\n apiKey?: string;\n region?: string;\n voiceName?: string;\n language?: string;\n}\n\nexport class AzureVoice extends MastraVoice {\n private speechConfig?: Azure.SpeechConfig;\n private listeningConfig?: Azure.SpeechConfig;\n private speechSynthesizer?: Azure.SpeechSynthesizer;\n private speechRecognizer?: Azure.SpeechRecognizer;\n\n /**\n * Creates a new instance of AzureVoice for text-to-speech and speech-to-text services.\n *\n * @param {Object} config - Configuration options\n * @param {AzureVoiceConfig} [config.speechModel] - Configuration for text-to-speech\n * @param {AzureVoiceConfig} [config.listeningModel] - Configuration for speech-to-text\n * @param {VoiceId} [config.speaker] - Default voice ID for speech synthesis\n */\n constructor({\n speechModel,\n listeningModel,\n speaker,\n }: {\n speechModel?: AzureVoiceConfig;\n listeningModel?: AzureVoiceConfig;\n speaker?: VoiceId;\n } = {}) {\n super({\n speechModel: {\n name: '',\n apiKey: speechModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n listeningModel: {\n name: '',\n apiKey: listeningModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n speaker,\n });\n\n const envApiKey = process.env.AZURE_API_KEY;\n const envRegion = process.env.AZURE_REGION;\n\n // Configure speech synthesis\n if (speechModel) {\n const apiKey = speechModel.apiKey ?? envApiKey;\n const region = speechModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for speech model');\n if (!region) throw new Error('No region provided for speech model');\n\n this.speechConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n this.speechConfig.speechSynthesisVoiceName = speechModel.voiceName || speaker || 'en-US-AriaNeural';\n this.speechSynthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n }\n\n // Configure speech recognition\n if (listeningModel) {\n const apiKey = listeningModel.apiKey ?? envApiKey;\n const region = listeningModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for listening model');\n if (!region) throw new Error('No region provided for listening model');\n\n this.listeningConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n if (listeningModel.language) {\n this.listeningConfig.speechRecognitionLanguage = listeningModel.language;\n }\n this.speechRecognizer = new Azure.SpeechRecognizer(this.listeningConfig);\n }\n }\n\n /**\n * Gets a list of available voices for speech synthesis.\n *\n * @returns {Promise<Array<{ voiceId: string; language: string; region: string; }>>} List of available voices\n */\n async getSpeakers() {\n return AZURE_VOICES.map(voice => ({\n voiceId: voice,\n language: voice.split('-')[0],\n region: voice.split('-')[1],\n }));\n }\n\n /**\n * Converts text to speech using Azure's Text-to-Speech service.\n *\n * @param {string | NodeJS.ReadableStream} input - Text to convert to speech\n * @param {Object} [options] - Optional parameters\n * @param {string} [options.speaker] - Voice ID to use for synthesis\n * @returns {Promise<NodeJS.ReadableStream>} Stream containing the synthesized audio\n * @throws {Error} If speech model is not configured or synthesis fails\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n [key: string]: any;\n },\n ): Promise<NodeJS.ReadableStream> {\n if (!this.speechConfig) {\n throw new Error('Speech model (Azure) not configured');\n }\n\n // Convert stream input to string if needed\n if (typeof input !== 'string') {\n const chunks: Buffer[] = [];\n try {\n for await (const chunk of input) {\n chunks.push(chunk as Buffer);\n }\n input = Buffer.concat(chunks).toString('utf-8');\n } catch (error) {\n throw new Error(`Failed to read input stream: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n if (!input?.trim()) {\n throw new Error('Input text is empty');\n }\n\n // Update voice if specified\n if (options?.speaker) {\n this.speechConfig.speechSynthesisVoiceName = options.speaker;\n }\n\n const synthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n\n try {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Speech synthesis timed out')), 5000);\n });\n\n const synthesisPromise = new Promise<Azure.SpeechSynthesisResult>((resolve, reject) => {\n synthesizer.speakTextAsync(\n input,\n result =>\n result.errorDetails\n ? reject(new Error(`Speech synthesis failed: ${result.errorDetails}`))\n : resolve(result),\n error => reject(new Error(`Speech synthesis error: ${String(error)}`)),\n );\n });\n\n const result = await Promise.race([synthesisPromise, timeoutPromise]);\n synthesizer.close();\n\n if (result.reason !== Azure.ResultReason.SynthesizingAudioCompleted) {\n throw new Error(`Speech synthesis failed: ${result.errorDetails || result.reason}`);\n }\n\n return Readable.from([Buffer.from(result.audioData)]);\n } catch (error) {\n synthesizer.close();\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribes audio (STT) from a Node.js stream using Azure.\n *\n * @param {NodeJS.ReadableStream} audioStream - The audio to be transcribed, must be in .wav format.\n * @returns {Promise<string>} - The recognized text.\n */\n async listen(audioStream: NodeJS.ReadableStream): Promise<string> {\n if (!this.listeningConfig || !this.speechRecognizer) {\n throw new Error('Listening model (Azure) not configured');\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n chunks.push(chunk as Buffer);\n }\n const audioData = Buffer.concat(chunks);\n\n const pushStream = Azure.AudioInputStream.createPushStream();\n const audioConfig = Azure.AudioConfig.fromStreamInput(pushStream);\n const recognizer = new Azure.SpeechRecognizer(this.listeningConfig, audioConfig);\n\n try {\n const recognitionPromise = new Promise<string>((resolve, reject) => {\n recognizer.recognizeOnceAsync(\n result => {\n if (result.reason === Azure.ResultReason.RecognizedSpeech) {\n resolve(result.text);\n } else {\n const reason = Azure.ResultReason[result.reason] || result.reason;\n reject(new Error(`Speech recognition failed: ${reason} - ${result.errorDetails || ''}`));\n }\n },\n error => reject(new Error(`Speech recognition error: ${String(error)}`)),\n );\n });\n\n const chunkSize = 4096;\n for (let i = 0; i < audioData.length; i += chunkSize) {\n const chunk = audioData.slice(i, i + chunkSize);\n pushStream.write(chunk.buffer);\n }\n pushStream.close();\n\n const text = await recognitionPromise;\n\n return text;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(String(error));\n } finally {\n recognizer.close();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../packages/_internal-core/src/logger/index.ts","../../../packages/_internal-core/src/base/MastraBase.ts","../../../packages/_internals/voice/src/voice/voice.ts","../src/voices.ts","../src/index.ts"],"names":["Azure","result","Readable"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Transform } from 'node:stream';\n\nexport const RegisteredLogger = {\n AGENT: 'AGENT',\n OBSERVABILITY: 'OBSERVABILITY',\n AUTH: 'AUTH',\n BROWSER: 'BROWSER',\n NETWORK: 'NETWORK',\n WORKFLOW: 'WORKFLOW',\n LLM: 'LLM',\n TTS: 'TTS',\n VOICE: 'VOICE',\n VECTOR: 'VECTOR',\n BUNDLER: 'BUNDLER',\n DEPLOYER: 'DEPLOYER',\n MEMORY: 'MEMORY',\n STORAGE: 'STORAGE',\n EMBEDDINGS: 'EMBEDDINGS',\n MCP_SERVER: 'MCP_SERVER',\n SERVER_CACHE: 'SERVER_CACHE',\n SERVER: 'SERVER',\n WORKSPACE: 'WORKSPACE',\n CHANNEL: 'CHANNEL',\n} as const;\n\nexport type RegisteredLogger = (typeof RegisteredLogger)[keyof typeof RegisteredLogger];\n\nexport const LogLevel = {\n DEBUG: 'debug',\n INFO: 'info',\n WARN: 'warn',\n ERROR: 'error',\n NONE: 'silent',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n\nexport interface IMastraLogger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n trackException(error: Error, metadata?: Record<string, unknown>): void;\n\n getTransports(): Map<string, LoggerTransport>;\n listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n}\n\nexport abstract class MastraLogger implements IMastraLogger {\n protected name: string;\n protected level: LogLevel;\n protected transports: Map<string, LoggerTransport>;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: Record<string, LoggerTransport>;\n } = {},\n ) {\n this.name = options.name || 'Mastra';\n this.level = options.level || LogLevel.ERROR;\n this.transports = new Map(Object.entries(options.transports || {}));\n }\n\n abstract debug(message: string, ...args: any[]): void;\n abstract info(message: string, ...args: any[]): void;\n abstract warn(message: string, ...args: any[]): void;\n abstract error(message: string, ...args: any[]): void;\n\n getTransports() {\n return this.transports;\n }\n\n trackException(_error: Error, _metadata?: Record<string, unknown>) {}\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId || !this.transports.has(transportId)) {\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports.get(transportId)!.listLogs?.(params) ?? {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n }\n );\n }\n\n async listLogsByRunId({\n transportId,\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId || !this.transports.has(transportId) || !runId) {\n return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports\n .get(transportId)!\n .listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {\n logs: [],\n total: 0,\n page: page ?? 1,\n perPage: perPage ?? 100,\n hasMore: false,\n }\n );\n }\n}\n\nexport type LogFilterContext = {\n component?: RegisteredLogger;\n level: LogLevel;\n message: string;\n args: unknown[];\n};\n\nexport type LogFilter = (ctx: LogFilterContext) => boolean;\n\nexport interface ConsoleLoggerOptions {\n name?: string;\n level?: LogLevel;\n component?: RegisteredLogger;\n filter?: LogFilter;\n}\n\nexport class ConsoleLogger extends MastraLogger {\n protected component?: RegisteredLogger;\n protected filter?: LogFilter;\n\n constructor(options: ConsoleLoggerOptions = {}) {\n super(options);\n this.component = options.component;\n this.filter = options.filter;\n }\n\n child(componentOrBindings: RegisteredLogger | Record<string, unknown>): ConsoleLogger {\n const component =\n typeof componentOrBindings === 'string'\n ? componentOrBindings\n : ((componentOrBindings?.component as RegisteredLogger) ?? this.component);\n return new ConsoleLogger({\n name: this.name,\n level: this.level,\n component,\n filter: this.filter,\n });\n }\n\n private shouldLog(level: LogLevel, message: string, args: unknown[]): boolean {\n if (!this.filter) return true;\n try {\n return this.filter({ component: this.component, level, message, args });\n } catch (e) {\n console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n return true;\n }\n }\n\n private prefix(): string {\n return this.component ? `[${this.component}] ` : '';\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.INFO, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.WARN, message, args)\n ) {\n console.warn(`${this.prefix()}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.ERROR ||\n this.level === LogLevel.WARN ||\n this.level === LogLevel.INFO ||\n this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.ERROR, message, args)\n ) {\n console.error(`${this.prefix()}${message}`, ...args);\n }\n }\n\n async listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, RegisteredLogger } from '../logger';\n\nexport class MastraBase {\n component: RegisteredLogger = RegisteredLogger.LLM;\n protected logger: IMastraLogger;\n name?: string;\n #rawConfig?: Record<string, unknown>;\n\n constructor({\n component,\n name,\n rawConfig,\n }: {\n component?: RegisteredLogger;\n name?: string;\n rawConfig?: Record<string, unknown>;\n }) {\n this.component = component || RegisteredLogger.LLM;\n this.name = name;\n this.#rawConfig = rawConfig;\n this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n }\n\n /**\n * Returns the raw storage configuration this primitive was created from,\n * or undefined if it was created from code.\n */\n toRawConfig(): Record<string, unknown> | undefined {\n return this.#rawConfig;\n }\n\n /**\n * Sets the raw storage configuration for this primitive.\n * @internal\n */\n __setRawConfig(rawConfig: Record<string, unknown>): void {\n this.#rawConfig = rawConfig;\n }\n\n /**\n * Set the logger for the agent\n * @param logger\n */\n __setLogger(logger: IMastraLogger) {\n this.logger =\n 'child' in logger && typeof (logger as any).child === 'function'\n ? (logger as any).child({ component: this.component })\n : logger;\n }\n}\n","import { MastraBase } from '@internal/core/base';\nimport type { ToolsInput } from '@internal/core/types';\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\nexport interface VoiceSpanConfig {\n component: 'VOICE';\n name?: string;\n speaker?: string;\n listeningModel?: { name: string };\n speechModel?: { name: string };\n realtimeModel?: string;\n}\n\nexport interface IMastraVoice<\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> {\n serializeForSpan(): VoiceSpanConfig;\n speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n listen(\n audioStream: NodeJS.ReadableStream | unknown,\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n updateConfig(options: Record<string, unknown>): void;\n connect(options?: Record<string, unknown>): Promise<void>;\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void>;\n answer(options?: Record<string, unknown>): Promise<void>;\n addInstructions(instructions?: string): void;\n addTools(tools: TTools): void;\n close(): void;\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n >;\n getListener(): Promise<{ enabled: boolean }>;\n}\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>\n extends MastraBase\n implements IMastraVoice<TSpeakOptions, TListenOptions, TTools, TEventArgs, TSpeakerMetadata>\n{\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 /**\n * Custom serialization for tracing/observability spans.\n * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n * and any provider-specific state held by subclasses. Subclasses that\n * need to expose additional non-sensitive fields can override.\n */\n serializeForSpan(): VoiceSpanConfig {\n return {\n component: 'VOICE',\n name: this.name,\n speaker: this.speaker,\n listeningModel: this.listeningModel ? { name: this.listeningModel.name } : undefined,\n speechModel: this.speechModel ? { name: this.speechModel.name } : undefined,\n realtimeModel: this.realtimeConfig?.model,\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.debug('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 async connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('connect not implemented by this voice provider');\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n async send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('relay not implemented by this voice provider');\n }\n\n /**\n * Trigger voice providers to respond\n */\n async answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.debug('answer not implemented by this voice provider');\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.debug('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.debug('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.debug('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.debug('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.debug('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","export const AZURE_VOICES = [\n 'af-ZA-AdriNeural',\n 'af-ZA-WillemNeural',\n 'am-ET-MekdesNeural',\n 'am-ET-AmehaNeural',\n 'ar-AE-FatimaNeural',\n 'ar-AE-HamdanNeural',\n 'ar-BH-LailaNeural',\n 'ar-BH-AliNeural',\n 'ar-DZ-AminaNeural',\n 'ar-DZ-IsmaelNeural',\n 'ar-EG-SalmaNeural',\n 'ar-EG-ShakirNeural',\n 'ar-IQ-RanaNeural',\n 'ar-IQ-BasselNeural',\n 'ar-JO-SanaNeural',\n 'ar-JO-TaimNeural',\n 'ar-KW-NouraNeural',\n 'ar-KW-FahedNeural',\n 'ar-LB-LaylaNeural',\n 'ar-LB-RamiNeural',\n 'ar-LY-ImanNeural',\n 'ar-LY-OmarNeural',\n 'ar-MA-MounaNeural',\n 'ar-MA-JamalNeural',\n 'ar-OM-AyshaNeural',\n 'ar-OM-AbdullahNeural',\n 'ar-QA-AmalNeural',\n 'ar-QA-MoazNeural',\n 'ar-SA-ZariyahNeural',\n 'ar-SA-HamedNeural',\n 'ar-SY-AmanyNeural',\n 'ar-SY-LaithNeural',\n 'ar-TN-ReemNeural',\n 'ar-TN-HediNeural',\n 'ar-YE-MaryamNeural',\n 'ar-YE-SalehNeural',\n 'as-IN-YashicaNeural',\n 'as-IN-PriyomNeural',\n 'az-AZ-BanuNeural',\n 'az-AZ-BabekNeural',\n 'bg-BG-KalinaNeural',\n 'bg-BG-BorislavNeural',\n 'bn-BD-NabanitaNeural',\n 'bn-BD-PradeepNeural',\n 'bn-IN-TanishaaNeural',\n 'bn-IN-BashkarNeural',\n 'bs-BA-VesnaNeural',\n 'bs-BA-GoranNeural',\n 'ca-ES-JoanaNeural',\n 'ca-ES-EnricNeural',\n 'ca-ES-AlbaNeural',\n 'cs-CZ-VlastaNeural',\n 'cs-CZ-AntoninNeural',\n 'cy-GB-NiaNeural',\n 'cy-GB-AledNeural',\n 'da-DK-ChristelNeural',\n 'da-DK-JeppeNeural',\n 'de-AT-IngridNeural',\n 'de-AT-JonasNeural',\n 'de-CH-LeniNeural',\n 'de-CH-JanNeural',\n 'de-DE-KatjaNeural',\n 'de-DE-ConradNeural',\n 'de-DE-SeraphinaMultilingualNeural',\n 'de-DE-FlorianMultilingualNeural',\n 'de-DE-AmalaNeural',\n 'de-DE-BerndNeural',\n 'de-DE-ChristophNeural',\n 'de-DE-ElkeNeural',\n 'de-DE-GiselaNeural',\n 'de-DE-KasperNeural',\n 'de-DE-KillianNeural',\n 'de-DE-KlarissaNeural',\n 'de-DE-KlausNeural',\n 'de-DE-LouisaNeural',\n 'de-DE-MajaNeural',\n 'de-DE-RalfNeural',\n 'de-DE-TanjaNeural',\n 'de-DE-Seraphina:DragonHDLatestNeural',\n 'el-GR-AthinaNeural',\n 'el-GR-NestorasNeural',\n 'en-AU-NatashaNeural',\n 'en-AU-WilliamNeural',\n 'en-AU-AnnetteNeural',\n 'en-AU-CarlyNeural',\n 'en-AU-DarrenNeural',\n 'en-AU-DuncanNeural',\n 'en-AU-ElsieNeural',\n 'en-AU-FreyaNeural',\n 'en-AU-JoanneNeural',\n 'en-AU-KenNeural',\n 'en-AU-KimNeural',\n 'en-AU-NeilNeural',\n 'en-AU-TimNeural',\n 'en-AU-TinaNeural',\n 'en-CA-ClaraNeural',\n 'en-CA-LiamNeural',\n 'en-GB-SoniaNeural',\n 'en-GB-RyanNeural',\n 'en-GB-LibbyNeural',\n 'en-GB-AdaMultilingualNeural',\n 'en-GB-OllieMultilingualNeural',\n 'en-GB-AbbiNeural',\n 'en-GB-AlfieNeural',\n 'en-GB-BellaNeural',\n 'en-GB-ElliotNeural',\n 'en-GB-EthanNeural',\n 'en-GB-HollieNeural',\n 'en-GB-MaisieNeural',\n 'en-GB-NoahNeural',\n 'en-GB-OliverNeural',\n 'en-GB-OliviaNeural',\n 'en-GB-ThomasNeural',\n 'en-GB-MiaNeural',\n 'en-HK-YanNeural',\n 'en-HK-SamNeural',\n 'en-IE-EmilyNeural',\n 'en-IE-ConnorNeural',\n 'en-IN-AaravNeural',\n 'en-IN-AashiNeural',\n 'en-IN-AnanyaNeural',\n 'en-IN-KavyaNeural',\n 'en-IN-KunalNeural',\n 'en-IN-NeerjaNeural',\n 'en-IN-PrabhatNeural',\n 'en-IN-RehaanNeural',\n 'en-IN-AartiNeural',\n 'en-IN-ArjunNeural',\n 'en-KE-AsiliaNeural',\n 'en-KE-ChilembaNeural',\n 'en-NG-EzinneNeural',\n 'en-NG-AbeoNeural',\n 'en-NZ-MollyNeural',\n 'en-NZ-MitchellNeural',\n 'en-PH-RosaNeural',\n 'en-PH-JamesNeural',\n 'en-SG-LunaNeural',\n 'en-SG-WayneNeural',\n 'en-TZ-ImaniNeural',\n 'en-TZ-ElimuNeural',\n 'en-US-AvaMultilingualNeural',\n 'en-US-AndrewMultilingualNeural',\n 'en-US-EmmaMultilingualNeural',\n 'en-US-BrianMultilingualNeural',\n 'en-US-AvaNeural',\n 'en-US-AndrewNeural',\n 'en-US-EmmaNeural',\n 'en-US-BrianNeural',\n 'en-US-JennyNeural',\n 'en-US-GuyNeural',\n 'en-US-AriaNeural',\n 'en-US-DavisNeural',\n 'en-US-JaneNeural',\n 'en-US-JasonNeural',\n 'en-US-KaiNeural',\n 'en-US-LunaNeural',\n 'en-US-SaraNeural',\n 'en-US-TonyNeural',\n 'en-US-NancyNeural',\n 'en-US-CoraMultilingualNeural',\n 'en-US-ChristopherMultilingualNeural',\n 'en-US-BrandonMultilingualNeural',\n 'en-US-AmberNeural',\n 'en-US-AnaNeural',\n 'en-US-AshleyNeural',\n 'en-US-BrandonNeural',\n 'en-US-ChristopherNeural',\n 'en-US-CoraNeural',\n 'en-US-ElizabethNeural',\n 'en-US-EricNeural',\n 'en-US-JacobNeural',\n 'en-US-JennyMultilingualNeural',\n 'en-US-MichelleNeural',\n 'en-US-MonicaNeural',\n 'en-US-RogerNeural',\n 'en-US-RyanMultilingualNeural',\n 'en-US-SteffanNeural',\n 'en-US-AdamMultilingualNeural',\n 'en-US-AIGenerate1Neural',\n 'en-US-AIGenerate2Neural',\n 'en-US-AlloyTurboMultilingualNeural',\n 'en-US-AmandaMultilingualNeural',\n 'en-US-BlueNeural',\n 'en-US-DavisMultilingualNeural',\n 'en-US-DerekMultilingualNeural',\n 'en-US-DustinMultilingualNeural',\n 'en-US-EchoTurboMultilingualNeural',\n 'en-US-EvelynMultilingualNeural',\n 'en-US-FableTurboMultilingualNeural',\n 'en-US-LewisMultilingualNeural',\n 'en-US-LolaMultilingualNeural',\n 'en-US-NancyMultilingualNeural',\n 'en-US-NovaTurboMultilingualNeural',\n 'en-US-OnyxTurboMultilingualNeural',\n 'en-US-PhoebeMultilingualNeural',\n 'en-US-SamuelMultilingualNeural',\n 'en-US-SerenaMultilingualNeural',\n 'en-US-ShimmerTurboMultilingualNeural',\n 'en-US-SteffanMultilingualNeural',\n 'en-US-Andrew:DragonHDLatestNeural',\n 'en-US-Andrew2:DragonHDLatestNeural',\n 'en-US-Aria:DragonHDLatestNeural',\n 'en-US-Ava:DragonHDLatestNeural',\n 'en-US-Brian:DragonHDLatestNeural',\n 'en-US-Davis:DragonHDLatestNeural',\n 'en-US-Emma:DragonHDLatestNeural',\n 'en-US-Emma2:DragonHDLatestNeural',\n 'en-US-Jenny:DragonHDLatestNeural',\n 'en-US-Steffan:DragonHDLatestNeural',\n 'en-ZA-LeahNeural',\n 'en-ZA-LukeNeural',\n] as const;\n\nexport type VoiceId = (typeof AZURE_VOICES)[number];\n","import { Readable } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport * as Azure from 'microsoft-cognitiveservices-speech-sdk';\nimport { AZURE_VOICES } from './voices';\nimport type { VoiceId } from './voices';\n\ninterface AzureVoiceConfig {\n apiKey?: string;\n region?: string;\n voiceName?: string;\n language?: string;\n}\n\nexport class AzureVoice extends MastraVoice {\n private speechConfig?: Azure.SpeechConfig;\n private listeningConfig?: Azure.SpeechConfig;\n private speechSynthesizer?: Azure.SpeechSynthesizer;\n private speechRecognizer?: Azure.SpeechRecognizer;\n\n /**\n * Creates a new instance of AzureVoice for text-to-speech and speech-to-text services.\n *\n * @param {Object} config - Configuration options\n * @param {AzureVoiceConfig} [config.speechModel] - Configuration for text-to-speech\n * @param {AzureVoiceConfig} [config.listeningModel] - Configuration for speech-to-text\n * @param {VoiceId} [config.speaker] - Default voice ID for speech synthesis\n */\n constructor({\n speechModel,\n listeningModel,\n speaker,\n }: {\n speechModel?: AzureVoiceConfig;\n listeningModel?: AzureVoiceConfig;\n speaker?: VoiceId;\n } = {}) {\n super({\n speechModel: {\n name: '',\n apiKey: speechModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n listeningModel: {\n name: '',\n apiKey: listeningModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n speaker,\n });\n\n const envApiKey = process.env.AZURE_API_KEY;\n const envRegion = process.env.AZURE_REGION;\n\n // Configure speech synthesis\n if (speechModel) {\n const apiKey = speechModel.apiKey ?? envApiKey;\n const region = speechModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for speech model');\n if (!region) throw new Error('No region provided for speech model');\n\n this.speechConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n this.speechConfig.speechSynthesisVoiceName = speechModel.voiceName || speaker || 'en-US-AriaNeural';\n this.speechSynthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n }\n\n // Configure speech recognition\n if (listeningModel) {\n const apiKey = listeningModel.apiKey ?? envApiKey;\n const region = listeningModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for listening model');\n if (!region) throw new Error('No region provided for listening model');\n\n this.listeningConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n if (listeningModel.language) {\n this.listeningConfig.speechRecognitionLanguage = listeningModel.language;\n }\n this.speechRecognizer = new Azure.SpeechRecognizer(this.listeningConfig);\n }\n }\n\n /**\n * Gets a list of available voices for speech synthesis.\n *\n * @returns {Promise<Array<{ voiceId: string; language: string; region: string; }>>} List of available voices\n */\n async getSpeakers() {\n return AZURE_VOICES.map(voice => ({\n voiceId: voice,\n language: voice.split('-')[0],\n region: voice.split('-')[1],\n }));\n }\n\n /**\n * Converts text to speech using Azure's Text-to-Speech service.\n *\n * @param {string | NodeJS.ReadableStream} input - Text to convert to speech\n * @param {Object} [options] - Optional parameters\n * @param {string} [options.speaker] - Voice ID to use for synthesis\n * @returns {Promise<NodeJS.ReadableStream>} Stream containing the synthesized audio\n * @throws {Error} If speech model is not configured or synthesis fails\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n [key: string]: any;\n },\n ): Promise<NodeJS.ReadableStream> {\n if (!this.speechConfig) {\n throw new Error('Speech model (Azure) not configured');\n }\n\n // Convert stream input to string if needed\n if (typeof input !== 'string') {\n const chunks: Buffer[] = [];\n try {\n for await (const chunk of input) {\n chunks.push(chunk as Buffer);\n }\n input = Buffer.concat(chunks).toString('utf-8');\n } catch (error) {\n throw new Error(`Failed to read input stream: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n if (!input?.trim()) {\n throw new Error('Input text is empty');\n }\n\n // Update voice if specified\n if (options?.speaker) {\n this.speechConfig.speechSynthesisVoiceName = options.speaker;\n }\n\n const synthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n\n try {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Speech synthesis timed out')), 5000);\n });\n\n const synthesisPromise = new Promise<Azure.SpeechSynthesisResult>((resolve, reject) => {\n synthesizer.speakTextAsync(\n input,\n result =>\n result.errorDetails\n ? reject(new Error(`Speech synthesis failed: ${result.errorDetails}`))\n : resolve(result),\n error => reject(new Error(`Speech synthesis error: ${String(error)}`)),\n );\n });\n\n const result = await Promise.race([synthesisPromise, timeoutPromise]);\n synthesizer.close();\n\n if (result.reason !== Azure.ResultReason.SynthesizingAudioCompleted) {\n throw new Error(`Speech synthesis failed: ${result.errorDetails || result.reason}`);\n }\n\n return Readable.from([Buffer.from(result.audioData)]);\n } catch (error) {\n synthesizer.close();\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribes audio (STT) from a Node.js stream using Azure.\n *\n * @param {NodeJS.ReadableStream} audioStream - The audio to be transcribed, must be in .wav format.\n * @returns {Promise<string>} - The recognized text.\n */\n async listen(audioStream: NodeJS.ReadableStream): Promise<string> {\n if (!this.listeningConfig || !this.speechRecognizer) {\n throw new Error('Listening model (Azure) not configured');\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n chunks.push(chunk as Buffer);\n }\n const audioData = Buffer.concat(chunks);\n\n const pushStream = Azure.AudioInputStream.createPushStream();\n const audioConfig = Azure.AudioConfig.fromStreamInput(pushStream);\n const recognizer = new Azure.SpeechRecognizer(this.listeningConfig, audioConfig);\n\n try {\n const recognitionPromise = new Promise<string>((resolve, reject) => {\n recognizer.recognizeOnceAsync(\n result => {\n if (result.reason === Azure.ResultReason.RecognizedSpeech) {\n resolve(result.text);\n } else {\n const reason = Azure.ResultReason[result.reason] || result.reason;\n reject(new Error(`Speech recognition failed: ${reason} - ${result.errorDetails || ''}`));\n }\n },\n error => reject(new Error(`Speech recognition error: ${String(error)}`)),\n );\n });\n\n const chunkSize = 4096;\n for (let i = 0; i < audioData.length; i += chunkSize) {\n const chunk = audioData.slice(i, i + chunkSize);\n pushStream.write(chunk.buffer);\n }\n pushStream.close();\n\n const text = await recognitionPromise;\n\n return text;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(String(error));\n } finally {\n recognizer.close();\n }\n }\n}\n"]}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import * as Azure from 'microsoft-cognitiveservices-speech-sdk';
3
3
 
4
4
  // src/index.ts
5
5
 
6
- // ../../packages/_internal-core/dist/chunk-HDURQPU2.js
6
+ // ../../packages/_internal-core/dist/chunk-3M4SEWMI.js
7
7
  var RegisteredLogger = {
8
8
  LLM: "LLM"};
9
9
  var LogLevel = {
@@ -100,7 +100,7 @@ var ConsoleLogger = class _ConsoleLogger extends MastraLogger {
100
100
  }
101
101
  warn(message, ...args) {
102
102
  if ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) {
103
- console.info(`${this.prefix()}${message}`, ...args);
103
+ console.warn(`${this.prefix()}${message}`, ...args);
104
104
  }
105
105
  }
106
106
  error(message, ...args) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/_internal-core/src/logger/index.ts","../../../packages/_internal-core/src/base/MastraBase.ts","../../../packages/_internals/voice/src/voice/voice.ts","../src/voices.ts","../src/index.ts"],"names":["result"],"mappings":"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","file":"index.js","sourcesContent":["import { Transform } from 'node:stream';\n\nexport const RegisteredLogger = {\n AGENT: 'AGENT',\n OBSERVABILITY: 'OBSERVABILITY',\n AUTH: 'AUTH',\n BROWSER: 'BROWSER',\n NETWORK: 'NETWORK',\n WORKFLOW: 'WORKFLOW',\n LLM: 'LLM',\n TTS: 'TTS',\n VOICE: 'VOICE',\n VECTOR: 'VECTOR',\n BUNDLER: 'BUNDLER',\n DEPLOYER: 'DEPLOYER',\n MEMORY: 'MEMORY',\n STORAGE: 'STORAGE',\n EMBEDDINGS: 'EMBEDDINGS',\n MCP_SERVER: 'MCP_SERVER',\n SERVER_CACHE: 'SERVER_CACHE',\n SERVER: 'SERVER',\n WORKSPACE: 'WORKSPACE',\n CHANNEL: 'CHANNEL',\n} as const;\n\nexport type RegisteredLogger = (typeof RegisteredLogger)[keyof typeof RegisteredLogger];\n\nexport const LogLevel = {\n DEBUG: 'debug',\n INFO: 'info',\n WARN: 'warn',\n ERROR: 'error',\n NONE: 'silent',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n\nexport interface IMastraLogger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n trackException(error: Error, metadata?: Record<string, unknown>): void;\n\n getTransports(): Map<string, LoggerTransport>;\n listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n}\n\nexport abstract class MastraLogger implements IMastraLogger {\n protected name: string;\n protected level: LogLevel;\n protected transports: Map<string, LoggerTransport>;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: Record<string, LoggerTransport>;\n } = {},\n ) {\n this.name = options.name || 'Mastra';\n this.level = options.level || LogLevel.ERROR;\n this.transports = new Map(Object.entries(options.transports || {}));\n }\n\n abstract debug(message: string, ...args: any[]): void;\n abstract info(message: string, ...args: any[]): void;\n abstract warn(message: string, ...args: any[]): void;\n abstract error(message: string, ...args: any[]): void;\n\n getTransports() {\n return this.transports;\n }\n\n trackException(_error: Error, _metadata?: Record<string, unknown>) {}\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId || !this.transports.has(transportId)) {\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports.get(transportId)!.listLogs?.(params) ?? {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n }\n );\n }\n\n async listLogsByRunId({\n transportId,\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId || !this.transports.has(transportId) || !runId) {\n return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports\n .get(transportId)!\n .listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {\n logs: [],\n total: 0,\n page: page ?? 1,\n perPage: perPage ?? 100,\n hasMore: false,\n }\n );\n }\n}\n\nexport type LogFilterContext = {\n component?: RegisteredLogger;\n level: LogLevel;\n message: string;\n args: unknown[];\n};\n\nexport type LogFilter = (ctx: LogFilterContext) => boolean;\n\nexport interface ConsoleLoggerOptions {\n name?: string;\n level?: LogLevel;\n component?: RegisteredLogger;\n filter?: LogFilter;\n}\n\nexport class ConsoleLogger extends MastraLogger {\n protected component?: RegisteredLogger;\n protected filter?: LogFilter;\n\n constructor(options: ConsoleLoggerOptions = {}) {\n super(options);\n this.component = options.component;\n this.filter = options.filter;\n }\n\n child(componentOrBindings: RegisteredLogger | Record<string, unknown>): ConsoleLogger {\n const component =\n typeof componentOrBindings === 'string'\n ? componentOrBindings\n : ((componentOrBindings?.component as RegisteredLogger) ?? this.component);\n return new ConsoleLogger({\n name: this.name,\n level: this.level,\n component,\n filter: this.filter,\n });\n }\n\n private shouldLog(level: LogLevel, message: string, args: unknown[]): boolean {\n if (!this.filter) return true;\n try {\n return this.filter({ component: this.component, level, message, args });\n } catch (e) {\n console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n return true;\n }\n }\n\n private prefix(): string {\n return this.component ? `[${this.component}] ` : '';\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.INFO, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.WARN, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.ERROR ||\n this.level === LogLevel.WARN ||\n this.level === LogLevel.INFO ||\n this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.ERROR, message, args)\n ) {\n console.error(`${this.prefix()}${message}`, ...args);\n }\n }\n\n async listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, RegisteredLogger } from '../logger';\n\nexport class MastraBase {\n component: RegisteredLogger = RegisteredLogger.LLM;\n protected logger: IMastraLogger;\n name?: string;\n #rawConfig?: Record<string, unknown>;\n\n constructor({\n component,\n name,\n rawConfig,\n }: {\n component?: RegisteredLogger;\n name?: string;\n rawConfig?: Record<string, unknown>;\n }) {\n this.component = component || RegisteredLogger.LLM;\n this.name = name;\n this.#rawConfig = rawConfig;\n this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n }\n\n /**\n * Returns the raw storage configuration this primitive was created from,\n * or undefined if it was created from code.\n */\n toRawConfig(): Record<string, unknown> | undefined {\n return this.#rawConfig;\n }\n\n /**\n * Sets the raw storage configuration for this primitive.\n * @internal\n */\n __setRawConfig(rawConfig: Record<string, unknown>): void {\n this.#rawConfig = rawConfig;\n }\n\n /**\n * Set the logger for the agent\n * @param logger\n */\n __setLogger(logger: IMastraLogger) {\n this.logger =\n 'child' in logger && typeof (logger as any).child === 'function'\n ? (logger as any).child({ component: this.component })\n : logger;\n }\n}\n","import { MastraBase } from '@internal/core/base';\nimport type { ToolsInput } from '@internal/core/types';\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\nexport interface VoiceSpanConfig {\n component: 'VOICE';\n name?: string;\n speaker?: string;\n listeningModel?: { name: string };\n speechModel?: { name: string };\n realtimeModel?: string;\n}\n\nexport interface IMastraVoice<\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> {\n serializeForSpan(): VoiceSpanConfig;\n speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n listen(\n audioStream: NodeJS.ReadableStream | unknown,\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n updateConfig(options: Record<string, unknown>): void;\n connect(options?: Record<string, unknown>): Promise<void>;\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void>;\n answer(options?: Record<string, unknown>): Promise<void>;\n addInstructions(instructions?: string): void;\n addTools(tools: TTools): void;\n close(): void;\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n >;\n getListener(): Promise<{ enabled: boolean }>;\n}\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>\n extends MastraBase\n implements IMastraVoice<TSpeakOptions, TListenOptions, TTools, TEventArgs, TSpeakerMetadata>\n{\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 /**\n * Custom serialization for tracing/observability spans.\n * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n * and any provider-specific state held by subclasses. Subclasses that\n * need to expose additional non-sensitive fields can override.\n */\n serializeForSpan(): VoiceSpanConfig {\n return {\n component: 'VOICE',\n name: this.name,\n speaker: this.speaker,\n listeningModel: this.listeningModel ? { name: this.listeningModel.name } : undefined,\n speechModel: this.speechModel ? { name: this.speechModel.name } : undefined,\n realtimeModel: this.realtimeConfig?.model,\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.debug('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 async connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('connect not implemented by this voice provider');\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n async send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('relay not implemented by this voice provider');\n }\n\n /**\n * Trigger voice providers to respond\n */\n async answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.debug('answer not implemented by this voice provider');\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.debug('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.debug('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.debug('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.debug('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.debug('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","export const AZURE_VOICES = [\n 'af-ZA-AdriNeural',\n 'af-ZA-WillemNeural',\n 'am-ET-MekdesNeural',\n 'am-ET-AmehaNeural',\n 'ar-AE-FatimaNeural',\n 'ar-AE-HamdanNeural',\n 'ar-BH-LailaNeural',\n 'ar-BH-AliNeural',\n 'ar-DZ-AminaNeural',\n 'ar-DZ-IsmaelNeural',\n 'ar-EG-SalmaNeural',\n 'ar-EG-ShakirNeural',\n 'ar-IQ-RanaNeural',\n 'ar-IQ-BasselNeural',\n 'ar-JO-SanaNeural',\n 'ar-JO-TaimNeural',\n 'ar-KW-NouraNeural',\n 'ar-KW-FahedNeural',\n 'ar-LB-LaylaNeural',\n 'ar-LB-RamiNeural',\n 'ar-LY-ImanNeural',\n 'ar-LY-OmarNeural',\n 'ar-MA-MounaNeural',\n 'ar-MA-JamalNeural',\n 'ar-OM-AyshaNeural',\n 'ar-OM-AbdullahNeural',\n 'ar-QA-AmalNeural',\n 'ar-QA-MoazNeural',\n 'ar-SA-ZariyahNeural',\n 'ar-SA-HamedNeural',\n 'ar-SY-AmanyNeural',\n 'ar-SY-LaithNeural',\n 'ar-TN-ReemNeural',\n 'ar-TN-HediNeural',\n 'ar-YE-MaryamNeural',\n 'ar-YE-SalehNeural',\n 'as-IN-YashicaNeural',\n 'as-IN-PriyomNeural',\n 'az-AZ-BanuNeural',\n 'az-AZ-BabekNeural',\n 'bg-BG-KalinaNeural',\n 'bg-BG-BorislavNeural',\n 'bn-BD-NabanitaNeural',\n 'bn-BD-PradeepNeural',\n 'bn-IN-TanishaaNeural',\n 'bn-IN-BashkarNeural',\n 'bs-BA-VesnaNeural',\n 'bs-BA-GoranNeural',\n 'ca-ES-JoanaNeural',\n 'ca-ES-EnricNeural',\n 'ca-ES-AlbaNeural',\n 'cs-CZ-VlastaNeural',\n 'cs-CZ-AntoninNeural',\n 'cy-GB-NiaNeural',\n 'cy-GB-AledNeural',\n 'da-DK-ChristelNeural',\n 'da-DK-JeppeNeural',\n 'de-AT-IngridNeural',\n 'de-AT-JonasNeural',\n 'de-CH-LeniNeural',\n 'de-CH-JanNeural',\n 'de-DE-KatjaNeural',\n 'de-DE-ConradNeural',\n 'de-DE-SeraphinaMultilingualNeural',\n 'de-DE-FlorianMultilingualNeural',\n 'de-DE-AmalaNeural',\n 'de-DE-BerndNeural',\n 'de-DE-ChristophNeural',\n 'de-DE-ElkeNeural',\n 'de-DE-GiselaNeural',\n 'de-DE-KasperNeural',\n 'de-DE-KillianNeural',\n 'de-DE-KlarissaNeural',\n 'de-DE-KlausNeural',\n 'de-DE-LouisaNeural',\n 'de-DE-MajaNeural',\n 'de-DE-RalfNeural',\n 'de-DE-TanjaNeural',\n 'de-DE-Seraphina:DragonHDLatestNeural',\n 'el-GR-AthinaNeural',\n 'el-GR-NestorasNeural',\n 'en-AU-NatashaNeural',\n 'en-AU-WilliamNeural',\n 'en-AU-AnnetteNeural',\n 'en-AU-CarlyNeural',\n 'en-AU-DarrenNeural',\n 'en-AU-DuncanNeural',\n 'en-AU-ElsieNeural',\n 'en-AU-FreyaNeural',\n 'en-AU-JoanneNeural',\n 'en-AU-KenNeural',\n 'en-AU-KimNeural',\n 'en-AU-NeilNeural',\n 'en-AU-TimNeural',\n 'en-AU-TinaNeural',\n 'en-CA-ClaraNeural',\n 'en-CA-LiamNeural',\n 'en-GB-SoniaNeural',\n 'en-GB-RyanNeural',\n 'en-GB-LibbyNeural',\n 'en-GB-AdaMultilingualNeural',\n 'en-GB-OllieMultilingualNeural',\n 'en-GB-AbbiNeural',\n 'en-GB-AlfieNeural',\n 'en-GB-BellaNeural',\n 'en-GB-ElliotNeural',\n 'en-GB-EthanNeural',\n 'en-GB-HollieNeural',\n 'en-GB-MaisieNeural',\n 'en-GB-NoahNeural',\n 'en-GB-OliverNeural',\n 'en-GB-OliviaNeural',\n 'en-GB-ThomasNeural',\n 'en-GB-MiaNeural',\n 'en-HK-YanNeural',\n 'en-HK-SamNeural',\n 'en-IE-EmilyNeural',\n 'en-IE-ConnorNeural',\n 'en-IN-AaravNeural',\n 'en-IN-AashiNeural',\n 'en-IN-AnanyaNeural',\n 'en-IN-KavyaNeural',\n 'en-IN-KunalNeural',\n 'en-IN-NeerjaNeural',\n 'en-IN-PrabhatNeural',\n 'en-IN-RehaanNeural',\n 'en-IN-AartiNeural',\n 'en-IN-ArjunNeural',\n 'en-KE-AsiliaNeural',\n 'en-KE-ChilembaNeural',\n 'en-NG-EzinneNeural',\n 'en-NG-AbeoNeural',\n 'en-NZ-MollyNeural',\n 'en-NZ-MitchellNeural',\n 'en-PH-RosaNeural',\n 'en-PH-JamesNeural',\n 'en-SG-LunaNeural',\n 'en-SG-WayneNeural',\n 'en-TZ-ImaniNeural',\n 'en-TZ-ElimuNeural',\n 'en-US-AvaMultilingualNeural',\n 'en-US-AndrewMultilingualNeural',\n 'en-US-EmmaMultilingualNeural',\n 'en-US-BrianMultilingualNeural',\n 'en-US-AvaNeural',\n 'en-US-AndrewNeural',\n 'en-US-EmmaNeural',\n 'en-US-BrianNeural',\n 'en-US-JennyNeural',\n 'en-US-GuyNeural',\n 'en-US-AriaNeural',\n 'en-US-DavisNeural',\n 'en-US-JaneNeural',\n 'en-US-JasonNeural',\n 'en-US-KaiNeural',\n 'en-US-LunaNeural',\n 'en-US-SaraNeural',\n 'en-US-TonyNeural',\n 'en-US-NancyNeural',\n 'en-US-CoraMultilingualNeural',\n 'en-US-ChristopherMultilingualNeural',\n 'en-US-BrandonMultilingualNeural',\n 'en-US-AmberNeural',\n 'en-US-AnaNeural',\n 'en-US-AshleyNeural',\n 'en-US-BrandonNeural',\n 'en-US-ChristopherNeural',\n 'en-US-CoraNeural',\n 'en-US-ElizabethNeural',\n 'en-US-EricNeural',\n 'en-US-JacobNeural',\n 'en-US-JennyMultilingualNeural',\n 'en-US-MichelleNeural',\n 'en-US-MonicaNeural',\n 'en-US-RogerNeural',\n 'en-US-RyanMultilingualNeural',\n 'en-US-SteffanNeural',\n 'en-US-AdamMultilingualNeural',\n 'en-US-AIGenerate1Neural',\n 'en-US-AIGenerate2Neural',\n 'en-US-AlloyTurboMultilingualNeural',\n 'en-US-AmandaMultilingualNeural',\n 'en-US-BlueNeural',\n 'en-US-DavisMultilingualNeural',\n 'en-US-DerekMultilingualNeural',\n 'en-US-DustinMultilingualNeural',\n 'en-US-EchoTurboMultilingualNeural',\n 'en-US-EvelynMultilingualNeural',\n 'en-US-FableTurboMultilingualNeural',\n 'en-US-LewisMultilingualNeural',\n 'en-US-LolaMultilingualNeural',\n 'en-US-NancyMultilingualNeural',\n 'en-US-NovaTurboMultilingualNeural',\n 'en-US-OnyxTurboMultilingualNeural',\n 'en-US-PhoebeMultilingualNeural',\n 'en-US-SamuelMultilingualNeural',\n 'en-US-SerenaMultilingualNeural',\n 'en-US-ShimmerTurboMultilingualNeural',\n 'en-US-SteffanMultilingualNeural',\n 'en-US-Andrew:DragonHDLatestNeural',\n 'en-US-Andrew2:DragonHDLatestNeural',\n 'en-US-Aria:DragonHDLatestNeural',\n 'en-US-Ava:DragonHDLatestNeural',\n 'en-US-Brian:DragonHDLatestNeural',\n 'en-US-Davis:DragonHDLatestNeural',\n 'en-US-Emma:DragonHDLatestNeural',\n 'en-US-Emma2:DragonHDLatestNeural',\n 'en-US-Jenny:DragonHDLatestNeural',\n 'en-US-Steffan:DragonHDLatestNeural',\n 'en-ZA-LeahNeural',\n 'en-ZA-LukeNeural',\n] as const;\n\nexport type VoiceId = (typeof AZURE_VOICES)[number];\n","import { Readable } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport * as Azure from 'microsoft-cognitiveservices-speech-sdk';\nimport { AZURE_VOICES } from './voices';\nimport type { VoiceId } from './voices';\n\ninterface AzureVoiceConfig {\n apiKey?: string;\n region?: string;\n voiceName?: string;\n language?: string;\n}\n\nexport class AzureVoice extends MastraVoice {\n private speechConfig?: Azure.SpeechConfig;\n private listeningConfig?: Azure.SpeechConfig;\n private speechSynthesizer?: Azure.SpeechSynthesizer;\n private speechRecognizer?: Azure.SpeechRecognizer;\n\n /**\n * Creates a new instance of AzureVoice for text-to-speech and speech-to-text services.\n *\n * @param {Object} config - Configuration options\n * @param {AzureVoiceConfig} [config.speechModel] - Configuration for text-to-speech\n * @param {AzureVoiceConfig} [config.listeningModel] - Configuration for speech-to-text\n * @param {VoiceId} [config.speaker] - Default voice ID for speech synthesis\n */\n constructor({\n speechModel,\n listeningModel,\n speaker,\n }: {\n speechModel?: AzureVoiceConfig;\n listeningModel?: AzureVoiceConfig;\n speaker?: VoiceId;\n } = {}) {\n super({\n speechModel: {\n name: '',\n apiKey: speechModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n listeningModel: {\n name: '',\n apiKey: listeningModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n speaker,\n });\n\n const envApiKey = process.env.AZURE_API_KEY;\n const envRegion = process.env.AZURE_REGION;\n\n // Configure speech synthesis\n if (speechModel) {\n const apiKey = speechModel.apiKey ?? envApiKey;\n const region = speechModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for speech model');\n if (!region) throw new Error('No region provided for speech model');\n\n this.speechConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n this.speechConfig.speechSynthesisVoiceName = speechModel.voiceName || speaker || 'en-US-AriaNeural';\n this.speechSynthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n }\n\n // Configure speech recognition\n if (listeningModel) {\n const apiKey = listeningModel.apiKey ?? envApiKey;\n const region = listeningModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for listening model');\n if (!region) throw new Error('No region provided for listening model');\n\n this.listeningConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n if (listeningModel.language) {\n this.listeningConfig.speechRecognitionLanguage = listeningModel.language;\n }\n this.speechRecognizer = new Azure.SpeechRecognizer(this.listeningConfig);\n }\n }\n\n /**\n * Gets a list of available voices for speech synthesis.\n *\n * @returns {Promise<Array<{ voiceId: string; language: string; region: string; }>>} List of available voices\n */\n async getSpeakers() {\n return AZURE_VOICES.map(voice => ({\n voiceId: voice,\n language: voice.split('-')[0],\n region: voice.split('-')[1],\n }));\n }\n\n /**\n * Converts text to speech using Azure's Text-to-Speech service.\n *\n * @param {string | NodeJS.ReadableStream} input - Text to convert to speech\n * @param {Object} [options] - Optional parameters\n * @param {string} [options.speaker] - Voice ID to use for synthesis\n * @returns {Promise<NodeJS.ReadableStream>} Stream containing the synthesized audio\n * @throws {Error} If speech model is not configured or synthesis fails\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n [key: string]: any;\n },\n ): Promise<NodeJS.ReadableStream> {\n if (!this.speechConfig) {\n throw new Error('Speech model (Azure) not configured');\n }\n\n // Convert stream input to string if needed\n if (typeof input !== 'string') {\n const chunks: Buffer[] = [];\n try {\n for await (const chunk of input) {\n chunks.push(chunk as Buffer);\n }\n input = Buffer.concat(chunks).toString('utf-8');\n } catch (error) {\n throw new Error(`Failed to read input stream: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n if (!input?.trim()) {\n throw new Error('Input text is empty');\n }\n\n // Update voice if specified\n if (options?.speaker) {\n this.speechConfig.speechSynthesisVoiceName = options.speaker;\n }\n\n const synthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n\n try {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Speech synthesis timed out')), 5000);\n });\n\n const synthesisPromise = new Promise<Azure.SpeechSynthesisResult>((resolve, reject) => {\n synthesizer.speakTextAsync(\n input,\n result =>\n result.errorDetails\n ? reject(new Error(`Speech synthesis failed: ${result.errorDetails}`))\n : resolve(result),\n error => reject(new Error(`Speech synthesis error: ${String(error)}`)),\n );\n });\n\n const result = await Promise.race([synthesisPromise, timeoutPromise]);\n synthesizer.close();\n\n if (result.reason !== Azure.ResultReason.SynthesizingAudioCompleted) {\n throw new Error(`Speech synthesis failed: ${result.errorDetails || result.reason}`);\n }\n\n return Readable.from([Buffer.from(result.audioData)]);\n } catch (error) {\n synthesizer.close();\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribes audio (STT) from a Node.js stream using Azure.\n *\n * @param {NodeJS.ReadableStream} audioStream - The audio to be transcribed, must be in .wav format.\n * @returns {Promise<string>} - The recognized text.\n */\n async listen(audioStream: NodeJS.ReadableStream): Promise<string> {\n if (!this.listeningConfig || !this.speechRecognizer) {\n throw new Error('Listening model (Azure) not configured');\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n chunks.push(chunk as Buffer);\n }\n const audioData = Buffer.concat(chunks);\n\n const pushStream = Azure.AudioInputStream.createPushStream();\n const audioConfig = Azure.AudioConfig.fromStreamInput(pushStream);\n const recognizer = new Azure.SpeechRecognizer(this.listeningConfig, audioConfig);\n\n try {\n const recognitionPromise = new Promise<string>((resolve, reject) => {\n recognizer.recognizeOnceAsync(\n result => {\n if (result.reason === Azure.ResultReason.RecognizedSpeech) {\n resolve(result.text);\n } else {\n const reason = Azure.ResultReason[result.reason] || result.reason;\n reject(new Error(`Speech recognition failed: ${reason} - ${result.errorDetails || ''}`));\n }\n },\n error => reject(new Error(`Speech recognition error: ${String(error)}`)),\n );\n });\n\n const chunkSize = 4096;\n for (let i = 0; i < audioData.length; i += chunkSize) {\n const chunk = audioData.slice(i, i + chunkSize);\n pushStream.write(chunk.buffer);\n }\n pushStream.close();\n\n const text = await recognitionPromise;\n\n return text;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(String(error));\n } finally {\n recognizer.close();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../packages/_internal-core/src/logger/index.ts","../../../packages/_internal-core/src/base/MastraBase.ts","../../../packages/_internals/voice/src/voice/voice.ts","../src/voices.ts","../src/index.ts"],"names":["result"],"mappings":"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","file":"index.js","sourcesContent":["import { Transform } from 'node:stream';\n\nexport const RegisteredLogger = {\n AGENT: 'AGENT',\n OBSERVABILITY: 'OBSERVABILITY',\n AUTH: 'AUTH',\n BROWSER: 'BROWSER',\n NETWORK: 'NETWORK',\n WORKFLOW: 'WORKFLOW',\n LLM: 'LLM',\n TTS: 'TTS',\n VOICE: 'VOICE',\n VECTOR: 'VECTOR',\n BUNDLER: 'BUNDLER',\n DEPLOYER: 'DEPLOYER',\n MEMORY: 'MEMORY',\n STORAGE: 'STORAGE',\n EMBEDDINGS: 'EMBEDDINGS',\n MCP_SERVER: 'MCP_SERVER',\n SERVER_CACHE: 'SERVER_CACHE',\n SERVER: 'SERVER',\n WORKSPACE: 'WORKSPACE',\n CHANNEL: 'CHANNEL',\n} as const;\n\nexport type RegisteredLogger = (typeof RegisteredLogger)[keyof typeof RegisteredLogger];\n\nexport const LogLevel = {\n DEBUG: 'debug',\n INFO: 'info',\n WARN: 'warn',\n ERROR: 'error',\n NONE: 'silent',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n\nexport interface IMastraLogger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n trackException(error: Error, metadata?: Record<string, unknown>): void;\n\n getTransports(): Map<string, LoggerTransport>;\n listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n}\n\nexport abstract class MastraLogger implements IMastraLogger {\n protected name: string;\n protected level: LogLevel;\n protected transports: Map<string, LoggerTransport>;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: Record<string, LoggerTransport>;\n } = {},\n ) {\n this.name = options.name || 'Mastra';\n this.level = options.level || LogLevel.ERROR;\n this.transports = new Map(Object.entries(options.transports || {}));\n }\n\n abstract debug(message: string, ...args: any[]): void;\n abstract info(message: string, ...args: any[]): void;\n abstract warn(message: string, ...args: any[]): void;\n abstract error(message: string, ...args: any[]): void;\n\n getTransports() {\n return this.transports;\n }\n\n trackException(_error: Error, _metadata?: Record<string, unknown>) {}\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId || !this.transports.has(transportId)) {\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports.get(transportId)!.listLogs?.(params) ?? {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n }\n );\n }\n\n async listLogsByRunId({\n transportId,\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId || !this.transports.has(transportId) || !runId) {\n return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports\n .get(transportId)!\n .listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {\n logs: [],\n total: 0,\n page: page ?? 1,\n perPage: perPage ?? 100,\n hasMore: false,\n }\n );\n }\n}\n\nexport type LogFilterContext = {\n component?: RegisteredLogger;\n level: LogLevel;\n message: string;\n args: unknown[];\n};\n\nexport type LogFilter = (ctx: LogFilterContext) => boolean;\n\nexport interface ConsoleLoggerOptions {\n name?: string;\n level?: LogLevel;\n component?: RegisteredLogger;\n filter?: LogFilter;\n}\n\nexport class ConsoleLogger extends MastraLogger {\n protected component?: RegisteredLogger;\n protected filter?: LogFilter;\n\n constructor(options: ConsoleLoggerOptions = {}) {\n super(options);\n this.component = options.component;\n this.filter = options.filter;\n }\n\n child(componentOrBindings: RegisteredLogger | Record<string, unknown>): ConsoleLogger {\n const component =\n typeof componentOrBindings === 'string'\n ? componentOrBindings\n : ((componentOrBindings?.component as RegisteredLogger) ?? this.component);\n return new ConsoleLogger({\n name: this.name,\n level: this.level,\n component,\n filter: this.filter,\n });\n }\n\n private shouldLog(level: LogLevel, message: string, args: unknown[]): boolean {\n if (!this.filter) return true;\n try {\n return this.filter({ component: this.component, level, message, args });\n } catch (e) {\n console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n return true;\n }\n }\n\n private prefix(): string {\n return this.component ? `[${this.component}] ` : '';\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.INFO, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.WARN, message, args)\n ) {\n console.warn(`${this.prefix()}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.ERROR ||\n this.level === LogLevel.WARN ||\n this.level === LogLevel.INFO ||\n this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.ERROR, message, args)\n ) {\n console.error(`${this.prefix()}${message}`, ...args);\n }\n }\n\n async listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, RegisteredLogger } from '../logger';\n\nexport class MastraBase {\n component: RegisteredLogger = RegisteredLogger.LLM;\n protected logger: IMastraLogger;\n name?: string;\n #rawConfig?: Record<string, unknown>;\n\n constructor({\n component,\n name,\n rawConfig,\n }: {\n component?: RegisteredLogger;\n name?: string;\n rawConfig?: Record<string, unknown>;\n }) {\n this.component = component || RegisteredLogger.LLM;\n this.name = name;\n this.#rawConfig = rawConfig;\n this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n }\n\n /**\n * Returns the raw storage configuration this primitive was created from,\n * or undefined if it was created from code.\n */\n toRawConfig(): Record<string, unknown> | undefined {\n return this.#rawConfig;\n }\n\n /**\n * Sets the raw storage configuration for this primitive.\n * @internal\n */\n __setRawConfig(rawConfig: Record<string, unknown>): void {\n this.#rawConfig = rawConfig;\n }\n\n /**\n * Set the logger for the agent\n * @param logger\n */\n __setLogger(logger: IMastraLogger) {\n this.logger =\n 'child' in logger && typeof (logger as any).child === 'function'\n ? (logger as any).child({ component: this.component })\n : logger;\n }\n}\n","import { MastraBase } from '@internal/core/base';\nimport type { ToolsInput } from '@internal/core/types';\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\nexport interface VoiceSpanConfig {\n component: 'VOICE';\n name?: string;\n speaker?: string;\n listeningModel?: { name: string };\n speechModel?: { name: string };\n realtimeModel?: string;\n}\n\nexport interface IMastraVoice<\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> {\n serializeForSpan(): VoiceSpanConfig;\n speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n listen(\n audioStream: NodeJS.ReadableStream | unknown,\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n updateConfig(options: Record<string, unknown>): void;\n connect(options?: Record<string, unknown>): Promise<void>;\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void>;\n answer(options?: Record<string, unknown>): Promise<void>;\n addInstructions(instructions?: string): void;\n addTools(tools: TTools): void;\n close(): void;\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n >;\n getListener(): Promise<{ enabled: boolean }>;\n}\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>\n extends MastraBase\n implements IMastraVoice<TSpeakOptions, TListenOptions, TTools, TEventArgs, TSpeakerMetadata>\n{\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 /**\n * Custom serialization for tracing/observability spans.\n * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n * and any provider-specific state held by subclasses. Subclasses that\n * need to expose additional non-sensitive fields can override.\n */\n serializeForSpan(): VoiceSpanConfig {\n return {\n component: 'VOICE',\n name: this.name,\n speaker: this.speaker,\n listeningModel: this.listeningModel ? { name: this.listeningModel.name } : undefined,\n speechModel: this.speechModel ? { name: this.speechModel.name } : undefined,\n realtimeModel: this.realtimeConfig?.model,\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.debug('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 async connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('connect not implemented by this voice provider');\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n async send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('relay not implemented by this voice provider');\n }\n\n /**\n * Trigger voice providers to respond\n */\n async answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.debug('answer not implemented by this voice provider');\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.debug('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.debug('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.debug('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.debug('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.debug('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","export const AZURE_VOICES = [\n 'af-ZA-AdriNeural',\n 'af-ZA-WillemNeural',\n 'am-ET-MekdesNeural',\n 'am-ET-AmehaNeural',\n 'ar-AE-FatimaNeural',\n 'ar-AE-HamdanNeural',\n 'ar-BH-LailaNeural',\n 'ar-BH-AliNeural',\n 'ar-DZ-AminaNeural',\n 'ar-DZ-IsmaelNeural',\n 'ar-EG-SalmaNeural',\n 'ar-EG-ShakirNeural',\n 'ar-IQ-RanaNeural',\n 'ar-IQ-BasselNeural',\n 'ar-JO-SanaNeural',\n 'ar-JO-TaimNeural',\n 'ar-KW-NouraNeural',\n 'ar-KW-FahedNeural',\n 'ar-LB-LaylaNeural',\n 'ar-LB-RamiNeural',\n 'ar-LY-ImanNeural',\n 'ar-LY-OmarNeural',\n 'ar-MA-MounaNeural',\n 'ar-MA-JamalNeural',\n 'ar-OM-AyshaNeural',\n 'ar-OM-AbdullahNeural',\n 'ar-QA-AmalNeural',\n 'ar-QA-MoazNeural',\n 'ar-SA-ZariyahNeural',\n 'ar-SA-HamedNeural',\n 'ar-SY-AmanyNeural',\n 'ar-SY-LaithNeural',\n 'ar-TN-ReemNeural',\n 'ar-TN-HediNeural',\n 'ar-YE-MaryamNeural',\n 'ar-YE-SalehNeural',\n 'as-IN-YashicaNeural',\n 'as-IN-PriyomNeural',\n 'az-AZ-BanuNeural',\n 'az-AZ-BabekNeural',\n 'bg-BG-KalinaNeural',\n 'bg-BG-BorislavNeural',\n 'bn-BD-NabanitaNeural',\n 'bn-BD-PradeepNeural',\n 'bn-IN-TanishaaNeural',\n 'bn-IN-BashkarNeural',\n 'bs-BA-VesnaNeural',\n 'bs-BA-GoranNeural',\n 'ca-ES-JoanaNeural',\n 'ca-ES-EnricNeural',\n 'ca-ES-AlbaNeural',\n 'cs-CZ-VlastaNeural',\n 'cs-CZ-AntoninNeural',\n 'cy-GB-NiaNeural',\n 'cy-GB-AledNeural',\n 'da-DK-ChristelNeural',\n 'da-DK-JeppeNeural',\n 'de-AT-IngridNeural',\n 'de-AT-JonasNeural',\n 'de-CH-LeniNeural',\n 'de-CH-JanNeural',\n 'de-DE-KatjaNeural',\n 'de-DE-ConradNeural',\n 'de-DE-SeraphinaMultilingualNeural',\n 'de-DE-FlorianMultilingualNeural',\n 'de-DE-AmalaNeural',\n 'de-DE-BerndNeural',\n 'de-DE-ChristophNeural',\n 'de-DE-ElkeNeural',\n 'de-DE-GiselaNeural',\n 'de-DE-KasperNeural',\n 'de-DE-KillianNeural',\n 'de-DE-KlarissaNeural',\n 'de-DE-KlausNeural',\n 'de-DE-LouisaNeural',\n 'de-DE-MajaNeural',\n 'de-DE-RalfNeural',\n 'de-DE-TanjaNeural',\n 'de-DE-Seraphina:DragonHDLatestNeural',\n 'el-GR-AthinaNeural',\n 'el-GR-NestorasNeural',\n 'en-AU-NatashaNeural',\n 'en-AU-WilliamNeural',\n 'en-AU-AnnetteNeural',\n 'en-AU-CarlyNeural',\n 'en-AU-DarrenNeural',\n 'en-AU-DuncanNeural',\n 'en-AU-ElsieNeural',\n 'en-AU-FreyaNeural',\n 'en-AU-JoanneNeural',\n 'en-AU-KenNeural',\n 'en-AU-KimNeural',\n 'en-AU-NeilNeural',\n 'en-AU-TimNeural',\n 'en-AU-TinaNeural',\n 'en-CA-ClaraNeural',\n 'en-CA-LiamNeural',\n 'en-GB-SoniaNeural',\n 'en-GB-RyanNeural',\n 'en-GB-LibbyNeural',\n 'en-GB-AdaMultilingualNeural',\n 'en-GB-OllieMultilingualNeural',\n 'en-GB-AbbiNeural',\n 'en-GB-AlfieNeural',\n 'en-GB-BellaNeural',\n 'en-GB-ElliotNeural',\n 'en-GB-EthanNeural',\n 'en-GB-HollieNeural',\n 'en-GB-MaisieNeural',\n 'en-GB-NoahNeural',\n 'en-GB-OliverNeural',\n 'en-GB-OliviaNeural',\n 'en-GB-ThomasNeural',\n 'en-GB-MiaNeural',\n 'en-HK-YanNeural',\n 'en-HK-SamNeural',\n 'en-IE-EmilyNeural',\n 'en-IE-ConnorNeural',\n 'en-IN-AaravNeural',\n 'en-IN-AashiNeural',\n 'en-IN-AnanyaNeural',\n 'en-IN-KavyaNeural',\n 'en-IN-KunalNeural',\n 'en-IN-NeerjaNeural',\n 'en-IN-PrabhatNeural',\n 'en-IN-RehaanNeural',\n 'en-IN-AartiNeural',\n 'en-IN-ArjunNeural',\n 'en-KE-AsiliaNeural',\n 'en-KE-ChilembaNeural',\n 'en-NG-EzinneNeural',\n 'en-NG-AbeoNeural',\n 'en-NZ-MollyNeural',\n 'en-NZ-MitchellNeural',\n 'en-PH-RosaNeural',\n 'en-PH-JamesNeural',\n 'en-SG-LunaNeural',\n 'en-SG-WayneNeural',\n 'en-TZ-ImaniNeural',\n 'en-TZ-ElimuNeural',\n 'en-US-AvaMultilingualNeural',\n 'en-US-AndrewMultilingualNeural',\n 'en-US-EmmaMultilingualNeural',\n 'en-US-BrianMultilingualNeural',\n 'en-US-AvaNeural',\n 'en-US-AndrewNeural',\n 'en-US-EmmaNeural',\n 'en-US-BrianNeural',\n 'en-US-JennyNeural',\n 'en-US-GuyNeural',\n 'en-US-AriaNeural',\n 'en-US-DavisNeural',\n 'en-US-JaneNeural',\n 'en-US-JasonNeural',\n 'en-US-KaiNeural',\n 'en-US-LunaNeural',\n 'en-US-SaraNeural',\n 'en-US-TonyNeural',\n 'en-US-NancyNeural',\n 'en-US-CoraMultilingualNeural',\n 'en-US-ChristopherMultilingualNeural',\n 'en-US-BrandonMultilingualNeural',\n 'en-US-AmberNeural',\n 'en-US-AnaNeural',\n 'en-US-AshleyNeural',\n 'en-US-BrandonNeural',\n 'en-US-ChristopherNeural',\n 'en-US-CoraNeural',\n 'en-US-ElizabethNeural',\n 'en-US-EricNeural',\n 'en-US-JacobNeural',\n 'en-US-JennyMultilingualNeural',\n 'en-US-MichelleNeural',\n 'en-US-MonicaNeural',\n 'en-US-RogerNeural',\n 'en-US-RyanMultilingualNeural',\n 'en-US-SteffanNeural',\n 'en-US-AdamMultilingualNeural',\n 'en-US-AIGenerate1Neural',\n 'en-US-AIGenerate2Neural',\n 'en-US-AlloyTurboMultilingualNeural',\n 'en-US-AmandaMultilingualNeural',\n 'en-US-BlueNeural',\n 'en-US-DavisMultilingualNeural',\n 'en-US-DerekMultilingualNeural',\n 'en-US-DustinMultilingualNeural',\n 'en-US-EchoTurboMultilingualNeural',\n 'en-US-EvelynMultilingualNeural',\n 'en-US-FableTurboMultilingualNeural',\n 'en-US-LewisMultilingualNeural',\n 'en-US-LolaMultilingualNeural',\n 'en-US-NancyMultilingualNeural',\n 'en-US-NovaTurboMultilingualNeural',\n 'en-US-OnyxTurboMultilingualNeural',\n 'en-US-PhoebeMultilingualNeural',\n 'en-US-SamuelMultilingualNeural',\n 'en-US-SerenaMultilingualNeural',\n 'en-US-ShimmerTurboMultilingualNeural',\n 'en-US-SteffanMultilingualNeural',\n 'en-US-Andrew:DragonHDLatestNeural',\n 'en-US-Andrew2:DragonHDLatestNeural',\n 'en-US-Aria:DragonHDLatestNeural',\n 'en-US-Ava:DragonHDLatestNeural',\n 'en-US-Brian:DragonHDLatestNeural',\n 'en-US-Davis:DragonHDLatestNeural',\n 'en-US-Emma:DragonHDLatestNeural',\n 'en-US-Emma2:DragonHDLatestNeural',\n 'en-US-Jenny:DragonHDLatestNeural',\n 'en-US-Steffan:DragonHDLatestNeural',\n 'en-ZA-LeahNeural',\n 'en-ZA-LukeNeural',\n] as const;\n\nexport type VoiceId = (typeof AZURE_VOICES)[number];\n","import { Readable } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport * as Azure from 'microsoft-cognitiveservices-speech-sdk';\nimport { AZURE_VOICES } from './voices';\nimport type { VoiceId } from './voices';\n\ninterface AzureVoiceConfig {\n apiKey?: string;\n region?: string;\n voiceName?: string;\n language?: string;\n}\n\nexport class AzureVoice extends MastraVoice {\n private speechConfig?: Azure.SpeechConfig;\n private listeningConfig?: Azure.SpeechConfig;\n private speechSynthesizer?: Azure.SpeechSynthesizer;\n private speechRecognizer?: Azure.SpeechRecognizer;\n\n /**\n * Creates a new instance of AzureVoice for text-to-speech and speech-to-text services.\n *\n * @param {Object} config - Configuration options\n * @param {AzureVoiceConfig} [config.speechModel] - Configuration for text-to-speech\n * @param {AzureVoiceConfig} [config.listeningModel] - Configuration for speech-to-text\n * @param {VoiceId} [config.speaker] - Default voice ID for speech synthesis\n */\n constructor({\n speechModel,\n listeningModel,\n speaker,\n }: {\n speechModel?: AzureVoiceConfig;\n listeningModel?: AzureVoiceConfig;\n speaker?: VoiceId;\n } = {}) {\n super({\n speechModel: {\n name: '',\n apiKey: speechModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n listeningModel: {\n name: '',\n apiKey: listeningModel?.apiKey ?? process.env.AZURE_API_KEY,\n },\n speaker,\n });\n\n const envApiKey = process.env.AZURE_API_KEY;\n const envRegion = process.env.AZURE_REGION;\n\n // Configure speech synthesis\n if (speechModel) {\n const apiKey = speechModel.apiKey ?? envApiKey;\n const region = speechModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for speech model');\n if (!region) throw new Error('No region provided for speech model');\n\n this.speechConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n this.speechConfig.speechSynthesisVoiceName = speechModel.voiceName || speaker || 'en-US-AriaNeural';\n this.speechSynthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n }\n\n // Configure speech recognition\n if (listeningModel) {\n const apiKey = listeningModel.apiKey ?? envApiKey;\n const region = listeningModel.region ?? envRegion;\n\n if (!apiKey) throw new Error('No Azure API key provided for listening model');\n if (!region) throw new Error('No region provided for listening model');\n\n this.listeningConfig = Azure.SpeechConfig.fromSubscription(apiKey, region);\n if (listeningModel.language) {\n this.listeningConfig.speechRecognitionLanguage = listeningModel.language;\n }\n this.speechRecognizer = new Azure.SpeechRecognizer(this.listeningConfig);\n }\n }\n\n /**\n * Gets a list of available voices for speech synthesis.\n *\n * @returns {Promise<Array<{ voiceId: string; language: string; region: string; }>>} List of available voices\n */\n async getSpeakers() {\n return AZURE_VOICES.map(voice => ({\n voiceId: voice,\n language: voice.split('-')[0],\n region: voice.split('-')[1],\n }));\n }\n\n /**\n * Converts text to speech using Azure's Text-to-Speech service.\n *\n * @param {string | NodeJS.ReadableStream} input - Text to convert to speech\n * @param {Object} [options] - Optional parameters\n * @param {string} [options.speaker] - Voice ID to use for synthesis\n * @returns {Promise<NodeJS.ReadableStream>} Stream containing the synthesized audio\n * @throws {Error} If speech model is not configured or synthesis fails\n */\n async speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n [key: string]: any;\n },\n ): Promise<NodeJS.ReadableStream> {\n if (!this.speechConfig) {\n throw new Error('Speech model (Azure) not configured');\n }\n\n // Convert stream input to string if needed\n if (typeof input !== 'string') {\n const chunks: Buffer[] = [];\n try {\n for await (const chunk of input) {\n chunks.push(chunk as Buffer);\n }\n input = Buffer.concat(chunks).toString('utf-8');\n } catch (error) {\n throw new Error(`Failed to read input stream: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n if (!input?.trim()) {\n throw new Error('Input text is empty');\n }\n\n // Update voice if specified\n if (options?.speaker) {\n this.speechConfig.speechSynthesisVoiceName = options.speaker;\n }\n\n const synthesizer = new Azure.SpeechSynthesizer(this.speechConfig);\n\n try {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Speech synthesis timed out')), 5000);\n });\n\n const synthesisPromise = new Promise<Azure.SpeechSynthesisResult>((resolve, reject) => {\n synthesizer.speakTextAsync(\n input,\n result =>\n result.errorDetails\n ? reject(new Error(`Speech synthesis failed: ${result.errorDetails}`))\n : resolve(result),\n error => reject(new Error(`Speech synthesis error: ${String(error)}`)),\n );\n });\n\n const result = await Promise.race([synthesisPromise, timeoutPromise]);\n synthesizer.close();\n\n if (result.reason !== Azure.ResultReason.SynthesizingAudioCompleted) {\n throw new Error(`Speech synthesis failed: ${result.errorDetails || result.reason}`);\n }\n\n return Readable.from([Buffer.from(result.audioData)]);\n } catch (error) {\n synthesizer.close();\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Transcribes audio (STT) from a Node.js stream using Azure.\n *\n * @param {NodeJS.ReadableStream} audioStream - The audio to be transcribed, must be in .wav format.\n * @returns {Promise<string>} - The recognized text.\n */\n async listen(audioStream: NodeJS.ReadableStream): Promise<string> {\n if (!this.listeningConfig || !this.speechRecognizer) {\n throw new Error('Listening model (Azure) not configured');\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n chunks.push(chunk as Buffer);\n }\n const audioData = Buffer.concat(chunks);\n\n const pushStream = Azure.AudioInputStream.createPushStream();\n const audioConfig = Azure.AudioConfig.fromStreamInput(pushStream);\n const recognizer = new Azure.SpeechRecognizer(this.listeningConfig, audioConfig);\n\n try {\n const recognitionPromise = new Promise<string>((resolve, reject) => {\n recognizer.recognizeOnceAsync(\n result => {\n if (result.reason === Azure.ResultReason.RecognizedSpeech) {\n resolve(result.text);\n } else {\n const reason = Azure.ResultReason[result.reason] || result.reason;\n reject(new Error(`Speech recognition failed: ${reason} - ${result.errorDetails || ''}`));\n }\n },\n error => reject(new Error(`Speech recognition error: ${String(error)}`)),\n );\n });\n\n const chunkSize = 4096;\n for (let i = 0; i < audioData.length; i += chunkSize) {\n const chunk = audioData.slice(i, i + chunkSize);\n pushStream.write(chunk.buffer);\n }\n pushStream.close();\n\n const text = await recognitionPromise;\n\n return text;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(String(error));\n } finally {\n recognizer.close();\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/voice-azure",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
4
4
  "description": "Mastra Azure speech integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -27,16 +27,17 @@
27
27
  "microsoft-cognitiveservices-speech-sdk": "^1.48.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@types/node": "22.19.15",
31
- "@vitest/coverage-v8": "4.1.5",
32
- "@vitest/ui": "4.1.5",
33
- "eslint": "^10.2.1",
30
+ "@types/node": "22.19.21",
31
+ "@vitest/coverage-v8": "4.1.8",
32
+ "@vitest/ui": "4.1.8",
33
+ "eslint": "^10.4.1",
34
34
  "tsup": "^8.5.1",
35
+ "tsx": "^4.22.4",
35
36
  "typescript": "^6.0.3",
36
- "vitest": "4.1.5",
37
- "@internal/lint": "0.0.100",
38
- "@internal/voice": "0.0.1",
39
- "@internal/types-builder": "0.0.75"
37
+ "vitest": "4.1.8",
38
+ "@internal/lint": "0.0.105",
39
+ "@internal/types-builder": "0.0.80",
40
+ "@internal/voice": "0.0.6"
40
41
  },
41
42
  "homepage": "https://mastra.ai",
42
43
  "repository": {