@mastra/voice-xai-realtime 0.1.1 → 0.1.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.
- package/CHANGELOG.md +7 -0
- package/dist/_types/@internal_voice/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +11 -8
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +11 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @mastra/voice-xai-realtime
|
|
2
2
|
|
|
3
|
+
## 0.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`9b1adf7`](https://github.com/mastra-ai/mastra/commit/9b1adf7f39943c869182106bc4016e793b3304ac)]:
|
|
8
|
+
- @mastra/schema-compat@1.2.12
|
|
9
|
+
|
|
3
10
|
## 0.1.1
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -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<
|
|
1586
|
-
|
|
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?: (
|
|
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
|
/**
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-voice-xai-realtime
|
|
|
3
3
|
description: Documentation for @mastra/voice-xai-realtime. Use when working with @mastra/voice-xai-realtime APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/voice-xai-realtime"
|
|
6
|
-
version: "0.1.
|
|
6
|
+
version: "0.1.3"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
package/dist/index.cjs
CHANGED
|
@@ -7,7 +7,7 @@ var zodToJson = require('@mastra/schema-compat/zod-to-json');
|
|
|
7
7
|
|
|
8
8
|
// src/index.ts
|
|
9
9
|
|
|
10
|
-
// ../../packages/_internal-core/dist/chunk-
|
|
10
|
+
// ../../packages/_internal-core/dist/chunk-3M4SEWMI.js
|
|
11
11
|
var RegisteredLogger = {
|
|
12
12
|
LLM: "LLM"};
|
|
13
13
|
var LogLevel = {
|
|
@@ -104,7 +104,7 @@ var ConsoleLogger = class _ConsoleLogger extends MastraLogger {
|
|
|
104
104
|
}
|
|
105
105
|
warn(message, ...args) {
|
|
106
106
|
if ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) {
|
|
107
|
-
console.
|
|
107
|
+
console.warn(`${this.prefix()}${message}`, ...args);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
error(message, ...args) {
|
package/dist/index.cjs.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/utils.ts","../src/index.ts"],"names":["Readable","isZodType","zodToJsonSchema","standardSchemaToJSONSchema","toStandardSchema","ws","WebSocket","stream","PassThrough","result"],"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","import { Readable } from 'node:stream';\nimport type { ToolsInput } from '@internal/voice';\nimport { isZodType, standardSchemaToJSONSchema, toStandardSchema } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport type { XAIFunctionTool } from './types';\n\ntype ToolInvocationOptions = {\n toolCallId: string;\n messages: unknown[];\n requestContext?: unknown;\n};\n\ntype ToolExecute = (args: unknown, options: ToolInvocationOptions) => unknown;\n\nexport type XAIExecuteFunction = (\n args: unknown,\n options: { toolCallId: string; requestContext?: unknown },\n) => Promise<unknown>;\nexport type XAITransformedTool = { xaiTool: XAIFunctionTool; execute: XAIExecuteFunction };\n\n/**\n * Minimal logger contract accepted by {@link transformTools}. Pass the\n * voice provider's `this.logger` from inside the class so warnings respect\n * the configured Mastra log level instead of writing to stdout/stderr\n * unconditionally.\n */\nexport type XAITransformToolsLogger = { warn(message: string): void };\n\nexport const isReadableStream = (obj: unknown): obj is NodeJS.ReadableStream => {\n return (\n !!obj &&\n obj instanceof Readable &&\n typeof obj.read === 'function' &&\n typeof obj.pipe === 'function' &&\n obj.readable === true\n );\n};\n\nexport const int16ArrayToBase64 = (int16Array: Int16Array): string => {\n const buffer = new ArrayBuffer(int16Array.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < int16Array.length; i++) {\n // xAI's documented PCM format is Linear16 little-endian.\n view.setInt16(i * 2, int16Array[i]!, true);\n }\n return Buffer.from(buffer).toString('base64');\n};\n\nexport const readableToBuffer = async (stream: NodeJS.ReadableStream): Promise<Buffer> => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n};\n\nexport const readableToBase64 = async (stream: NodeJS.ReadableStream): Promise<string> => {\n return (await readableToBuffer(stream)).toString('base64');\n};\n\nexport const transformTools = (tools?: ToolsInput, logger: XAITransformToolsLogger = console) => {\n const xaiTools: XAITransformedTool[] = [];\n\n for (const [name, tool] of Object.entries(tools || {})) {\n let parameters: Record<string, unknown>;\n\n try {\n if ('inputSchema' in tool && tool.inputSchema) {\n parameters = schemaToJsonSchema(tool.inputSchema);\n } else if ('parameters' in tool && tool.parameters) {\n parameters = schemaToJsonSchema(tool.parameters);\n } else {\n continue;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to transform xAI realtime tool \"${name}\" schema: ${message}`);\n }\n\n if (!tool.execute) {\n logger.warn(`Skipping xAI realtime tool \"${name}\" because it has no execute function.`);\n continue;\n }\n\n xaiTools.push({\n xaiTool: {\n type: 'function',\n name,\n description: tool.description || `Tool: ${name}`,\n parameters,\n },\n execute: async (args, options) => {\n if (!tool.execute) {\n throw new Error(`Tool ${name} has no execute function`);\n }\n\n const execute = tool.execute as ToolExecute;\n const callOptions = {\n toolCallId: options.toolCallId,\n messages: [],\n requestContext: options.requestContext,\n } satisfies ToolInvocationOptions;\n\n return execute(args, callOptions);\n },\n });\n }\n\n return xaiTools;\n};\n\nfunction schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n let jsonSchema: Record<string, unknown>;\n\n if (isZodType(schema)) {\n jsonSchema = zodToJsonSchema(schema) as Record<string, unknown>;\n } else {\n jsonSchema = standardSchemaToJSONSchema(toStandardSchema(schema as any), { io: 'input' }) as Record<\n string,\n unknown\n >;\n }\n\n delete jsonSchema.$schema;\n return jsonSchema;\n}\n","import { PassThrough } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport type { RequestContext, ToolsInput, VoiceConfig, VoiceEventType } from '@internal/voice';\nimport type { WebSocket as WSType } from 'ws';\nimport { WebSocket } from 'ws';\nimport type {\n XAIClientEvent,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerEvent,\n XAISessionConfig,\n XAISpeaker,\n XAITurnDetection,\n XAITool,\n XAIVoice,\n} from './types';\nimport type { XAIExecuteFunction, XAITransformedTool } from './utils';\nimport { int16ArrayToBase64, isReadableStream, readableToBase64, transformTools } from './utils';\n\nexport type {\n XAIAudioConfig,\n XAIAudioFormat,\n XAIAudioFormatType,\n XAIFunctionTool,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerTool,\n XAISessionConfig,\n XAISpeaker,\n XAITool,\n XAITurnDetection,\n XAIVoice,\n} from './types';\n\ntype EventCallback = (...args: any[]) => void;\ntype StreamWithId = PassThrough & { id: string };\ntype ConnectionState = 'closed' | 'connecting' | 'open';\n\nconst DEFAULT_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL: XAIRealtimeModel = 'grok-voice-think-fast-1.0';\nconst DEFAULT_VOICE: XAIVoice = 'eve';\n\nconst DEFAULT_TURN_DETECTION: XAITurnDetection = {\n type: 'server_vad',\n};\nconst FUNCTION_CALL_ARGUMENT_TIMEOUT_MS = 30_000;\n\nconst DEFAULT_AUDIO = {\n input: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n output: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n};\n\nconst XAI_SPEAKERS: XAISpeaker[] = [\n {\n voiceId: 'eve',\n name: 'Eve',\n gender: 'female',\n description: 'Energetic, upbeat default voice.',\n },\n {\n voiceId: 'ara',\n name: 'Ara',\n gender: 'female',\n description: 'Warm, friendly conversational voice.',\n },\n {\n voiceId: 'rex',\n name: 'Rex',\n gender: 'male',\n description: 'Confident, clear professional voice.',\n },\n {\n voiceId: 'sal',\n name: 'Sal',\n gender: 'neutral',\n description: 'Smooth, balanced general-purpose voice.',\n },\n {\n voiceId: 'leo',\n name: 'Leo',\n gender: 'male',\n description: 'Authoritative, strong instructional voice.',\n },\n];\n\ninterface PendingFunctionResponse {\n pending: Set<Promise<void>>;\n expectedCallIds: Set<string>;\n startedCallIds: Set<string>;\n completedCallIds: Set<string>;\n missingCallTimeout?: ReturnType<typeof setTimeout>;\n sessionGeneration: number;\n responseDone: boolean;\n continuationSent: boolean;\n hasFunctionCall: boolean;\n}\n\ninterface FunctionCallEvent {\n responseId: string;\n callId: string;\n name: string;\n arguments: string;\n sessionGeneration: number;\n}\n\ntype ParsedFunctionArguments = { ok: true; value: unknown } | { ok: false; rawArguments: string; error: SyntaxError };\n\n/**\n * Realtime Grok Voice Agent API provider for Mastra.\n *\n * This provider follows Mastra's realtime voice contract while keeping xAI's\n * endpoint, authentication, voices, event names, and tool behavior explicit.\n */\nexport class XAIRealtimeVoice extends MastraVoice<\n XAIRealtimeVoiceConfig,\n XAIRealtimeSpeakOptions,\n XAIRealtimeListenOptions,\n ToolsInput,\n XAIRealtimeEventMap,\n XAISpeaker\n> {\n private ws?: WSType;\n private state: ConnectionState = 'closed';\n private readonly events = new Map<string, EventCallback[]>();\n private readonly queue: XAIClientEvent[] = [];\n private readonly speakerStreams = new Map<string, StreamWithId>();\n private readonly functionResponses = new Map<string, PendingFunctionResponse>();\n private readonly audioStreamCleanups = new Set<() => void>();\n private requestContext?: RequestContext;\n private instructions?: string;\n private tools?: ToolsInput;\n private transformedTools?: XAITransformedTool[];\n private readonly options: XAIRealtimeVoiceConfig;\n private readonly debug: boolean;\n private closedByUser = false;\n private connectPromise?: Promise<void>;\n private sessionGeneration = 0;\n private fallbackResponseCounter = 0;\n\n constructor(config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig = {}) {\n const normalizedConfig = XAIRealtimeVoice.normalizeConfig(config);\n super(normalizedConfig);\n\n this.options = normalizedConfig.realtimeConfig?.options || {};\n this.instructions = this.options.instructions;\n this.speaker = normalizedConfig.speaker || this.options.speaker || DEFAULT_VOICE;\n this.debug = this.options.debug || false;\n }\n\n private static normalizeConfig(\n config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig,\n ): VoiceConfig<XAIRealtimeVoiceConfig> {\n if ('realtimeConfig' in config || 'speechModel' in config || 'listeningModel' in config) {\n const voiceConfig = config as VoiceConfig<XAIRealtimeVoiceConfig>;\n const options = voiceConfig.realtimeConfig?.options || {};\n return {\n ...voiceConfig,\n speaker: voiceConfig.speaker || options.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: voiceConfig.realtimeConfig?.model || options.model || DEFAULT_MODEL,\n apiKey: voiceConfig.realtimeConfig?.apiKey || options.apiKey,\n options,\n },\n };\n }\n\n const xaiConfig = config as XAIRealtimeVoiceConfig;\n return {\n speaker: xaiConfig.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: xaiConfig.model || DEFAULT_MODEL,\n apiKey: xaiConfig.apiKey,\n options: xaiConfig,\n },\n };\n }\n\n getSpeakers(): Promise<XAISpeaker[]> {\n return Promise.resolve(XAI_SPEAKERS);\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n return { enabled: true };\n }\n\n addInstructions(instructions?: string): void {\n this.instructions = instructions ?? '';\n if (this.state === 'open') {\n this.updateConfig({ instructions: this.instructions });\n }\n }\n\n addTools(tools?: ToolsInput): void {\n this.tools = tools || {};\n this.transformedTools = undefined;\n if (this.state === 'open') {\n this.updateConfig({ tools: this.buildSessionTools() });\n }\n }\n\n updateConfig(sessionConfig: Partial<XAISessionConfig>): void {\n this.sendEvent({\n type: 'session.update',\n session: this.stripUndefined(sessionConfig) as XAISessionConfig,\n });\n }\n\n async connect({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n if (this.state === 'open') {\n return;\n }\n\n if (this.state === 'connecting' && this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.openConnection({ requestContext });\n\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n private async openConnection({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n const apiKey = this.options.apiKey || this.realtimeConfig?.apiKey || process.env.XAI_API_KEY;\n const ephemeralToken = this.options.ephemeralToken;\n\n if (!apiKey && !ephemeralToken) {\n throw new Error('xAI API key is required. Set XAI_API_KEY, pass apiKey, or pass ephemeralToken.');\n }\n\n this.requestContext = requestContext;\n this.closedByUser = false;\n this.state = 'connecting';\n this.sessionGeneration += 1;\n\n const url = this.buildUrl();\n const protocols = ephemeralToken ? [`xai-client-secret.${ephemeralToken}`] : undefined;\n const wsOptions =\n !ephemeralToken && apiKey\n ? {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n }\n : undefined;\n\n const ws = new WebSocket(url, protocols, wsOptions);\n this.ws = ws;\n this.setupEventListeners(ws);\n\n try {\n await this.waitForOpen(ws);\n this.state = 'open';\n this.updateConfig(this.buildInitialSessionConfig());\n this.flushQueue();\n } catch (err) {\n this.cleanupSessionState();\n this.state = 'closed';\n this.ws = undefined;\n ws.close();\n throw err;\n }\n }\n\n close(): void {\n const ws = this.ws;\n this.state = 'closed';\n this.closedByUser = true;\n this.connectPromise = undefined;\n this.ws = undefined;\n this.cleanupSessionState();\n ws?.close();\n if (ws) {\n this.emit('close', { code: 1000, reason: 'closed' });\n }\n }\n\n disconnect(): void {\n this.close();\n }\n\n async speak(input: string | NodeJS.ReadableStream, options: XAIRealtimeSpeakOptions = {}): Promise<void> {\n const text = typeof input === 'string' ? input : (await this.readInputStream(input)).toString('utf-8');\n\n if (text.trim().length === 0) {\n throw new Error('Input text is empty');\n }\n\n if (options.speaker && options.speaker !== this.speaker) {\n this.speaker = options.speaker;\n this.updateConfig({ voice: options.speaker });\n }\n\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n\n await this.answer({ response: options.response });\n }\n\n async listen(audioData: NodeJS.ReadableStream | unknown, options: XAIRealtimeListenOptions = {}): Promise<void> {\n if (!isReadableStream(audioData)) {\n this.emit('error', { message: 'Unsupported audio data format' });\n return;\n }\n\n this.appendAudio(await readableToBase64(audioData));\n\n if (options.commit ?? true) {\n await this.commitAudioBuffer();\n }\n\n if (options.createResponse ?? true) {\n await this.answer({ response: options.response });\n }\n }\n\n async send(audioData: NodeJS.ReadableStream | Int16Array, eventId?: string): Promise<void> {\n if (this.state !== 'open' || !this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.emit('error', { message: 'Cannot send audio before connect() is open' });\n return;\n }\n\n if (isReadableStream(audioData)) {\n const cleanup = () => {\n audioData.removeListener('data', onData);\n audioData.removeListener('error', onError);\n audioData.removeListener('end', onEnd);\n audioData.removeListener('close', onEnd);\n this.audioStreamCleanups.delete(cleanup);\n };\n const onData = (chunk: unknown) => {\n try {\n const buffer = this.normalizeAudioChunk(chunk);\n this.appendAudio(buffer.toString('base64'), eventId);\n } catch (err) {\n this.emitError(err);\n cleanup();\n }\n };\n const onError = (err: Error) => {\n this.emitError(err);\n cleanup();\n };\n const onEnd = () => cleanup();\n\n this.audioStreamCleanups.add(cleanup);\n audioData.on('data', onData);\n audioData.on('error', onError);\n audioData.on('end', onEnd);\n audioData.on('close', onEnd);\n return;\n }\n\n if (audioData instanceof Int16Array) {\n this.appendAudio(int16ArrayToBase64(audioData), eventId);\n return;\n }\n\n this.emit('error', { message: 'Unsupported audio data format' });\n }\n\n async commitAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.commit', event_id: eventId });\n }\n\n async clearAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.clear', event_id: eventId });\n }\n\n async cancelResponse(responseId?: string, eventId?: string): Promise<void> {\n this.sendEvent({ type: 'response.cancel', response_id: responseId, event_id: eventId });\n }\n\n async answer(options: XAIRealtimeAnswerOptions = {}): Promise<void> {\n this.sendEvent({\n type: 'response.create',\n ...(options.response ? { response: options.response } : {}),\n });\n }\n\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event) || [];\n callbacks.push(callback as EventCallback);\n this.events.set(event, callbacks);\n }\n\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback as EventCallback);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n private buildUrl(): string {\n const baseUrl = this.options.url || DEFAULT_URL;\n const url = new URL(baseUrl);\n url.searchParams.set('model', this.realtimeConfig?.model || this.options.model || DEFAULT_MODEL);\n return url.toString();\n }\n\n private buildInitialSessionConfig(): XAISessionConfig {\n const session = this.options.session || {};\n return this.stripUndefined({\n ...session,\n instructions: this.instructions,\n voice: this.speaker as XAIVoice,\n turn_detection: session.turn_detection ?? this.options.turnDetection ?? DEFAULT_TURN_DETECTION,\n audio: session.audio ?? this.options.audio ?? DEFAULT_AUDIO,\n tools: this.buildSessionTools(),\n }) as XAISessionConfig;\n }\n\n private buildSessionTools(): XAITool[] {\n const serverTools = [...(this.options.session?.tools || []), ...(this.options.serverTools || [])];\n const functionTools = this.getTransformedTools().map(tool => tool.xaiTool);\n return [...serverTools, ...functionTools];\n }\n\n private getTransformedTools(): XAITransformedTool[] {\n this.transformedTools ??= transformTools(this.tools, this.logger);\n return this.transformedTools;\n }\n\n private setupEventListeners(ws: WSType): void {\n ws.on('message', message => {\n if (this.ws !== ws) {\n return;\n }\n\n try {\n const event = JSON.parse(message.toString()) as XAIServerEvent;\n this.handleServerEvent(event);\n } catch (err) {\n this.emitError(err);\n }\n });\n\n ws.on('error', err => {\n if (this.ws !== ws) {\n return;\n }\n\n if (this.state === 'open') {\n this.emitError(err);\n }\n });\n\n ws.on('close', (code, reason) => {\n if (this.ws !== ws) {\n return;\n }\n\n this.state = 'closed';\n this.ws = undefined;\n this.connectPromise = undefined;\n this.cleanupSessionState();\n this.emit('close', { code, reason: reason?.toString?.() });\n });\n }\n\n private handleServerEvent(event: XAIServerEvent): void {\n if (this.debug) {\n const { delta, ...fields } = event;\n this.logger.debug(`[xAI realtime] ${event.type}`, { ...fields, deltaLength: delta?.length });\n }\n\n if (event.type !== 'error') {\n this.emit(event.type, event);\n }\n\n switch (event.type) {\n case 'session.created':\n case 'session.updated':\n case 'response.created':\n if (event.type === 'response.created') {\n this.createSpeakerStream(this.getResponseId(event));\n }\n return;\n case 'response.output_audio.delta':\n case 'response.audio.delta':\n this.handleAudioDelta(event);\n return;\n case 'response.output_audio.done':\n case 'response.audio.done':\n this.handleAudioDone(event);\n return;\n case 'response.text.delta':\n case 'response.output_text.delta':\n case 'response.audio_transcript.delta':\n case 'response.output_audio_transcript.delta':\n this.emit('writing', { text: event.delta || '', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'response.text.done':\n case 'response.output_text.done':\n case 'response.audio_transcript.done':\n case 'response.output_audio_transcript.done':\n this.emit('writing', { text: '\\n', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'conversation.item.input_audio_transcription.completed':\n case 'conversation.item.input_audio_transcription.done':\n this.emit('writing', {\n text: event.transcript || event.text || event.delta || '',\n response_id: this.getResponseId(event),\n role: 'user',\n });\n return;\n case 'response.function_call_arguments.done':\n this.handleFunctionCallEvent(event);\n return;\n case 'response.done':\n void this.handleResponseDone(event);\n return;\n case 'error':\n this.emit('error', {\n message: event.error?.message || 'xAI realtime error',\n code: event.error?.code || event.error?.type,\n details: event,\n });\n return;\n default:\n return;\n }\n }\n\n private handleAudioDelta(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n const audio = event.delta || '';\n const audioData = Buffer.from(audio, 'base64');\n const stream = this.createSpeakerStream(responseId);\n stream.write(audioData);\n this.emit('speaking', { audio, audioData, response_id: responseId });\n }\n\n private handleAudioDone(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n this.emit('speaking.done', { response_id: responseId });\n this.endSpeakerStream(responseId);\n }\n\n private handleFunctionCallEvent(event: XAIServerEvent): void {\n const call = this.normalizeFunctionCallEvent(event);\n if (!call) {\n this.emit('error', {\n message: 'Invalid xAI function call event',\n details: event,\n });\n return;\n }\n\n const state = this.getFunctionResponseState(call.responseId);\n state.hasFunctionCall = true;\n state.expectedCallIds.add(call.callId);\n\n if (state.startedCallIds.has(call.callId)) {\n return;\n }\n\n state.startedCallIds.add(call.callId);\n const pending = this.executeFunctionCall(call).finally(() => {\n state.completedCallIds.add(call.callId);\n state.pending.delete(pending);\n void this.maybeContinueAfterFunctionCalls(call.responseId);\n });\n\n state.pending.add(pending);\n }\n\n private async handleResponseDone(event: XAIServerEvent): Promise<void> {\n const responseId = this.getResponseId(event);\n this.endSpeakerStream(responseId);\n\n const expectedCallIds = this.getFunctionCallIds(event);\n const state =\n this.functionResponses.get(responseId) ||\n (expectedCallIds.length > 0 ? this.getFunctionResponseState(responseId) : undefined);\n\n if (!state) {\n return;\n }\n\n for (const callId of expectedCallIds) {\n state.expectedCallIds.add(callId);\n }\n\n state.hasFunctionCall ||= expectedCallIds.length > 0;\n state.responseDone = true;\n await this.maybeContinueAfterFunctionCalls(responseId);\n }\n\n private getFunctionCallIds(event: XAIServerEvent): string[] {\n return (\n event.response?.output\n ?.filter(output => output.type === 'function_call' && typeof output.call_id === 'string')\n .map(output => output.call_id as string) || []\n );\n }\n\n private async executeFunctionCall(call: FunctionCallEvent): Promise<void> {\n const tool = this.tools?.[call.name];\n const parsedArgs = this.parseFunctionArguments(call.arguments);\n if (!parsedArgs.ok) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = `Failed to parse xAI function call arguments: ${parsedArgs.error.message}`;\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: {\n call_id: call.callId,\n name: call.name,\n arguments: parsedArgs.rawArguments,\n error: parsedArgs.error,\n },\n });\n return;\n }\n\n const args = parsedArgs.value;\n\n try {\n if (!tool?.execute) {\n throw new Error(`Tool \"${call.name}\" not found`);\n }\n\n this.emit('tool-call-start', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n });\n\n const result = await this.executeTool(call.name, call.callId, args);\n\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n this.emit('tool-call-result', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n result,\n });\n\n this.sendFunctionOutput(call.callId, result);\n } catch (err) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: { call_id: call.callId, name: call.name },\n });\n }\n }\n\n private async executeTool(name: string, callId: string, args: unknown): Promise<unknown> {\n const transformedTool = this.getTransformedTools().find(tool => tool.xaiTool.name === name);\n\n if (!transformedTool) {\n throw new Error(`Tool \"${name}\" not found`);\n }\n\n return (transformedTool.execute as XAIExecuteFunction)(args, {\n toolCallId: callId,\n requestContext: this.requestContext,\n });\n }\n\n private sendFunctionOutput(callId: string, output: unknown): void {\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output ?? null),\n },\n });\n }\n\n private isCurrentSession(sessionGeneration: number): boolean {\n return this.state === 'open' && this.sessionGeneration === sessionGeneration;\n }\n\n private async maybeContinueAfterFunctionCalls(responseId: string): Promise<void> {\n const state = this.functionResponses.get(responseId);\n const hasPendingExpectedCall =\n state?.expectedCallIds && [...state.expectedCallIds].some(callId => !state.completedCallIds.has(callId));\n\n if (state && hasPendingExpectedCall) {\n this.scheduleMissingFunctionCallTimeout(responseId, state);\n }\n\n if (\n !state ||\n !state.hasFunctionCall ||\n state.continuationSent ||\n !state.responseDone ||\n state.pending.size > 0 ||\n hasPendingExpectedCall\n ) {\n return;\n }\n\n state.continuationSent = true;\n this.clearMissingFunctionCallTimeout(state);\n this.sendEvent({ type: 'response.create' });\n this.functionResponses.delete(responseId);\n }\n\n private scheduleMissingFunctionCallTimeout(responseId: string, state: PendingFunctionResponse): void {\n if (state.missingCallTimeout || !state.responseDone) {\n return;\n }\n\n state.missingCallTimeout = setTimeout(() => {\n if (!this.isCurrentSession(state.sessionGeneration) || this.functionResponses.get(responseId) !== state) {\n return;\n }\n\n state.missingCallTimeout = undefined;\n const missingCallIds = [...state.expectedCallIds].filter(callId => !state.startedCallIds.has(callId));\n if (missingCallIds.length === 0) {\n void this.maybeContinueAfterFunctionCalls(responseId);\n return;\n }\n\n const message = `Timed out waiting for xAI function call arguments for ${missingCallIds.join(', ')}`;\n for (const callId of missingCallIds) {\n state.completedCallIds.add(callId);\n this.sendFunctionOutput(callId, { error: message });\n }\n this.emit('error', { message, details: { response_id: responseId, call_ids: missingCallIds } });\n void this.maybeContinueAfterFunctionCalls(responseId);\n }, FUNCTION_CALL_ARGUMENT_TIMEOUT_MS);\n }\n\n private clearMissingFunctionCallTimeout(state: PendingFunctionResponse): void {\n if (state.missingCallTimeout) {\n clearTimeout(state.missingCallTimeout);\n state.missingCallTimeout = undefined;\n }\n }\n\n private getFunctionResponseState(responseId: string): PendingFunctionResponse {\n let state = this.functionResponses.get(responseId);\n if (!state) {\n state = {\n pending: new Set(),\n expectedCallIds: new Set(),\n startedCallIds: new Set(),\n completedCallIds: new Set(),\n sessionGeneration: this.sessionGeneration,\n responseDone: false,\n continuationSent: false,\n hasFunctionCall: false,\n };\n this.functionResponses.set(responseId, state);\n }\n return state;\n }\n\n private normalizeFunctionCallEvent(event: XAIServerEvent): FunctionCallEvent | undefined {\n if (!event.call_id || !event.name || typeof event.arguments !== 'string') {\n return undefined;\n }\n\n return {\n responseId: this.getResponseId(event),\n callId: event.call_id,\n name: event.name,\n arguments: event.arguments,\n sessionGeneration: this.sessionGeneration,\n };\n }\n\n private parseFunctionArguments(args: string): ParsedFunctionArguments {\n try {\n return { ok: true, value: JSON.parse(args || '{}') };\n } catch (err) {\n return { ok: false, rawArguments: args, error: err as SyntaxError };\n }\n }\n\n private appendAudio(audio: string, eventId?: string): void {\n this.sendEvent({ type: 'input_audio_buffer.append', audio, event_id: eventId });\n }\n\n private normalizeAudioChunk(chunk: unknown): Buffer {\n if (Buffer.isBuffer(chunk)) {\n return chunk;\n }\n\n if (chunk instanceof ArrayBuffer) {\n return Buffer.from(chunk);\n }\n\n if (ArrayBuffer.isView(chunk)) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n throw new TypeError('Audio stream chunks must be Buffer, ArrayBuffer, or TypedArray values');\n }\n\n private sendEvent(event: XAIClientEvent): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN || this.state !== 'open') {\n if (this.closedByUser) {\n this.emit('error', { message: 'Cannot send event after close()' });\n return;\n }\n this.queue.push(event);\n return;\n }\n\n try {\n this.ws.send(JSON.stringify(this.stripUndefined(event)));\n } catch (err) {\n this.emitError(err);\n }\n }\n\n private flushQueue(): void {\n const queuedEvents = this.queue.splice(0, this.queue.length);\n for (const event of queuedEvents) {\n this.sendEvent(event);\n }\n }\n\n private waitForOpen(ws: WSType): Promise<void> {\n return new Promise((resolve, reject) => {\n if (ws.readyState === WebSocket.OPEN) {\n resolve();\n return;\n }\n\n const onOpen = () => {\n cleanup();\n resolve();\n };\n\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n\n const onClose = () => {\n cleanup();\n reject(new Error('WebSocket closed before opening'));\n };\n\n const cleanup = () => {\n ws.off?.('open', onOpen);\n ws.off?.('error', onError);\n ws.off?.('close', onClose);\n };\n\n ws.on('open', onOpen);\n ws.on('error', onError);\n ws.on('close', onClose);\n });\n }\n\n private getResponseId(event: XAIServerEvent): string {\n return (\n event.response_id ||\n event.response?.id ||\n event.item_id ||\n `fallback:${this.sessionGeneration}:${++this.fallbackResponseCounter}`\n );\n }\n\n private createSpeakerStream(responseId: string): StreamWithId {\n const existing = this.speakerStreams.get(responseId);\n if (existing) {\n return existing;\n }\n\n const stream = new PassThrough() as StreamWithId;\n stream.id = responseId;\n this.speakerStreams.set(responseId, stream);\n this.emit('speaker', stream);\n return stream;\n }\n\n private closeSpeakerStreams(): void {\n for (const stream of this.speakerStreams.values()) {\n stream.end();\n }\n this.speakerStreams.clear();\n }\n\n private endSpeakerStream(responseId: string): void {\n this.speakerStreams.get(responseId)?.end();\n this.speakerStreams.delete(responseId);\n }\n\n private cleanupSessionState(): void {\n this.sessionGeneration += 1;\n this.queue.length = 0;\n for (const cleanup of [...this.audioStreamCleanups]) {\n cleanup();\n }\n this.audioStreamCleanups.clear();\n for (const state of this.functionResponses.values()) {\n this.clearMissingFunctionCallTimeout(state);\n }\n this.functionResponses.clear();\n this.requestContext = undefined;\n this.closeSpeakerStreams();\n }\n\n private emit(event: string, ...args: any[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n for (const callback of callbacks) {\n callback(...args);\n }\n }\n\n private emitError(err: unknown): void {\n this.emit('error', {\n message: err instanceof Error ? err.message : String(err),\n details: err,\n });\n }\n\n private stripUndefined<T>(value: T, seen = new WeakSet<object>(), depth = 0, maxDepth = 100): T {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (depth >= maxDepth) {\n throw new Error('Cannot serialize xAI realtime event: maximum object depth exceeded');\n }\n\n const objectValue = value as object;\n if (Buffer.isBuffer(value) || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return value;\n }\n\n if (seen.has(objectValue)) {\n return undefined as T;\n }\n\n seen.add(objectValue);\n\n if (Array.isArray(value)) {\n const result = value\n .map(item => this.stripUndefined(item, seen, depth + 1, maxDepth))\n .filter(item => item !== undefined) as T;\n seen.delete(objectValue);\n return result;\n }\n\n const result = Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .map(([key, entry]) => [key, this.stripUndefined(entry, seen, depth + 1, maxDepth)])\n .filter(([, entry]) => entry !== undefined),\n ) as T;\n\n seen.delete(objectValue);\n return result;\n }\n\n private async readInputStream(input: NodeJS.ReadableStream): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks);\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/utils.ts","../src/index.ts"],"names":["Readable","isZodType","zodToJsonSchema","standardSchemaToJSONSchema","toStandardSchema","ws","WebSocket","stream","PassThrough","result"],"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","import { Readable } from 'node:stream';\nimport type { ToolsInput } from '@internal/voice';\nimport { isZodType, standardSchemaToJSONSchema, toStandardSchema } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport type { XAIFunctionTool } from './types';\n\ntype ToolInvocationOptions = {\n toolCallId: string;\n messages: unknown[];\n requestContext?: unknown;\n};\n\ntype ToolExecute = (args: unknown, options: ToolInvocationOptions) => unknown;\n\nexport type XAIExecuteFunction = (\n args: unknown,\n options: { toolCallId: string; requestContext?: unknown },\n) => Promise<unknown>;\nexport type XAITransformedTool = { xaiTool: XAIFunctionTool; execute: XAIExecuteFunction };\n\n/**\n * Minimal logger contract accepted by {@link transformTools}. Pass the\n * voice provider's `this.logger` from inside the class so warnings respect\n * the configured Mastra log level instead of writing to stdout/stderr\n * unconditionally.\n */\nexport type XAITransformToolsLogger = { warn(message: string): void };\n\nexport const isReadableStream = (obj: unknown): obj is NodeJS.ReadableStream => {\n return (\n !!obj &&\n obj instanceof Readable &&\n typeof obj.read === 'function' &&\n typeof obj.pipe === 'function' &&\n obj.readable === true\n );\n};\n\nexport const int16ArrayToBase64 = (int16Array: Int16Array): string => {\n const buffer = new ArrayBuffer(int16Array.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < int16Array.length; i++) {\n // xAI's documented PCM format is Linear16 little-endian.\n view.setInt16(i * 2, int16Array[i]!, true);\n }\n return Buffer.from(buffer).toString('base64');\n};\n\nexport const readableToBuffer = async (stream: NodeJS.ReadableStream): Promise<Buffer> => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n};\n\nexport const readableToBase64 = async (stream: NodeJS.ReadableStream): Promise<string> => {\n return (await readableToBuffer(stream)).toString('base64');\n};\n\nexport const transformTools = (tools?: ToolsInput, logger: XAITransformToolsLogger = console) => {\n const xaiTools: XAITransformedTool[] = [];\n\n for (const [name, tool] of Object.entries(tools || {})) {\n let parameters: Record<string, unknown>;\n\n try {\n if ('inputSchema' in tool && tool.inputSchema) {\n parameters = schemaToJsonSchema(tool.inputSchema);\n } else if ('parameters' in tool && tool.parameters) {\n parameters = schemaToJsonSchema(tool.parameters);\n } else {\n continue;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to transform xAI realtime tool \"${name}\" schema: ${message}`);\n }\n\n if (!tool.execute) {\n logger.warn(`Skipping xAI realtime tool \"${name}\" because it has no execute function.`);\n continue;\n }\n\n xaiTools.push({\n xaiTool: {\n type: 'function',\n name,\n description: tool.description || `Tool: ${name}`,\n parameters,\n },\n execute: async (args, options) => {\n if (!tool.execute) {\n throw new Error(`Tool ${name} has no execute function`);\n }\n\n const execute = tool.execute as ToolExecute;\n const callOptions = {\n toolCallId: options.toolCallId,\n messages: [],\n requestContext: options.requestContext,\n } satisfies ToolInvocationOptions;\n\n return execute(args, callOptions);\n },\n });\n }\n\n return xaiTools;\n};\n\nfunction schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n let jsonSchema: Record<string, unknown>;\n\n if (isZodType(schema)) {\n jsonSchema = zodToJsonSchema(schema) as Record<string, unknown>;\n } else {\n jsonSchema = standardSchemaToJSONSchema(toStandardSchema(schema as any), { io: 'input' }) as Record<\n string,\n unknown\n >;\n }\n\n delete jsonSchema.$schema;\n return jsonSchema;\n}\n","import { PassThrough } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport type { RequestContext, ToolsInput, VoiceConfig, VoiceEventType } from '@internal/voice';\nimport type { WebSocket as WSType } from 'ws';\nimport { WebSocket } from 'ws';\nimport type {\n XAIClientEvent,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerEvent,\n XAISessionConfig,\n XAISpeaker,\n XAITurnDetection,\n XAITool,\n XAIVoice,\n} from './types';\nimport type { XAIExecuteFunction, XAITransformedTool } from './utils';\nimport { int16ArrayToBase64, isReadableStream, readableToBase64, transformTools } from './utils';\n\nexport type {\n XAIAudioConfig,\n XAIAudioFormat,\n XAIAudioFormatType,\n XAIFunctionTool,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerTool,\n XAISessionConfig,\n XAISpeaker,\n XAITool,\n XAITurnDetection,\n XAIVoice,\n} from './types';\n\ntype EventCallback = (...args: any[]) => void;\ntype StreamWithId = PassThrough & { id: string };\ntype ConnectionState = 'closed' | 'connecting' | 'open';\n\nconst DEFAULT_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL: XAIRealtimeModel = 'grok-voice-think-fast-1.0';\nconst DEFAULT_VOICE: XAIVoice = 'eve';\n\nconst DEFAULT_TURN_DETECTION: XAITurnDetection = {\n type: 'server_vad',\n};\nconst FUNCTION_CALL_ARGUMENT_TIMEOUT_MS = 30_000;\n\nconst DEFAULT_AUDIO = {\n input: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n output: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n};\n\nconst XAI_SPEAKERS: XAISpeaker[] = [\n {\n voiceId: 'eve',\n name: 'Eve',\n gender: 'female',\n description: 'Energetic, upbeat default voice.',\n },\n {\n voiceId: 'ara',\n name: 'Ara',\n gender: 'female',\n description: 'Warm, friendly conversational voice.',\n },\n {\n voiceId: 'rex',\n name: 'Rex',\n gender: 'male',\n description: 'Confident, clear professional voice.',\n },\n {\n voiceId: 'sal',\n name: 'Sal',\n gender: 'neutral',\n description: 'Smooth, balanced general-purpose voice.',\n },\n {\n voiceId: 'leo',\n name: 'Leo',\n gender: 'male',\n description: 'Authoritative, strong instructional voice.',\n },\n];\n\ninterface PendingFunctionResponse {\n pending: Set<Promise<void>>;\n expectedCallIds: Set<string>;\n startedCallIds: Set<string>;\n completedCallIds: Set<string>;\n missingCallTimeout?: ReturnType<typeof setTimeout>;\n sessionGeneration: number;\n responseDone: boolean;\n continuationSent: boolean;\n hasFunctionCall: boolean;\n}\n\ninterface FunctionCallEvent {\n responseId: string;\n callId: string;\n name: string;\n arguments: string;\n sessionGeneration: number;\n}\n\ntype ParsedFunctionArguments = { ok: true; value: unknown } | { ok: false; rawArguments: string; error: SyntaxError };\n\n/**\n * Realtime Grok Voice Agent API provider for Mastra.\n *\n * This provider follows Mastra's realtime voice contract while keeping xAI's\n * endpoint, authentication, voices, event names, and tool behavior explicit.\n */\nexport class XAIRealtimeVoice extends MastraVoice<\n XAIRealtimeVoiceConfig,\n XAIRealtimeSpeakOptions,\n XAIRealtimeListenOptions,\n ToolsInput,\n XAIRealtimeEventMap,\n XAISpeaker\n> {\n private ws?: WSType;\n private state: ConnectionState = 'closed';\n private readonly events = new Map<string, EventCallback[]>();\n private readonly queue: XAIClientEvent[] = [];\n private readonly speakerStreams = new Map<string, StreamWithId>();\n private readonly functionResponses = new Map<string, PendingFunctionResponse>();\n private readonly audioStreamCleanups = new Set<() => void>();\n private requestContext?: RequestContext;\n private instructions?: string;\n private tools?: ToolsInput;\n private transformedTools?: XAITransformedTool[];\n private readonly options: XAIRealtimeVoiceConfig;\n private readonly debug: boolean;\n private closedByUser = false;\n private connectPromise?: Promise<void>;\n private sessionGeneration = 0;\n private fallbackResponseCounter = 0;\n\n constructor(config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig = {}) {\n const normalizedConfig = XAIRealtimeVoice.normalizeConfig(config);\n super(normalizedConfig);\n\n this.options = normalizedConfig.realtimeConfig?.options || {};\n this.instructions = this.options.instructions;\n this.speaker = normalizedConfig.speaker || this.options.speaker || DEFAULT_VOICE;\n this.debug = this.options.debug || false;\n }\n\n private static normalizeConfig(\n config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig,\n ): VoiceConfig<XAIRealtimeVoiceConfig> {\n if ('realtimeConfig' in config || 'speechModel' in config || 'listeningModel' in config) {\n const voiceConfig = config as VoiceConfig<XAIRealtimeVoiceConfig>;\n const options = voiceConfig.realtimeConfig?.options || {};\n return {\n ...voiceConfig,\n speaker: voiceConfig.speaker || options.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: voiceConfig.realtimeConfig?.model || options.model || DEFAULT_MODEL,\n apiKey: voiceConfig.realtimeConfig?.apiKey || options.apiKey,\n options,\n },\n };\n }\n\n const xaiConfig = config as XAIRealtimeVoiceConfig;\n return {\n speaker: xaiConfig.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: xaiConfig.model || DEFAULT_MODEL,\n apiKey: xaiConfig.apiKey,\n options: xaiConfig,\n },\n };\n }\n\n getSpeakers(): Promise<XAISpeaker[]> {\n return Promise.resolve(XAI_SPEAKERS);\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n return { enabled: true };\n }\n\n addInstructions(instructions?: string): void {\n this.instructions = instructions ?? '';\n if (this.state === 'open') {\n this.updateConfig({ instructions: this.instructions });\n }\n }\n\n addTools(tools?: ToolsInput): void {\n this.tools = tools || {};\n this.transformedTools = undefined;\n if (this.state === 'open') {\n this.updateConfig({ tools: this.buildSessionTools() });\n }\n }\n\n updateConfig(sessionConfig: Partial<XAISessionConfig>): void {\n this.sendEvent({\n type: 'session.update',\n session: this.stripUndefined(sessionConfig) as XAISessionConfig,\n });\n }\n\n async connect({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n if (this.state === 'open') {\n return;\n }\n\n if (this.state === 'connecting' && this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.openConnection({ requestContext });\n\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n private async openConnection({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n const apiKey = this.options.apiKey || this.realtimeConfig?.apiKey || process.env.XAI_API_KEY;\n const ephemeralToken = this.options.ephemeralToken;\n\n if (!apiKey && !ephemeralToken) {\n throw new Error('xAI API key is required. Set XAI_API_KEY, pass apiKey, or pass ephemeralToken.');\n }\n\n this.requestContext = requestContext;\n this.closedByUser = false;\n this.state = 'connecting';\n this.sessionGeneration += 1;\n\n const url = this.buildUrl();\n const protocols = ephemeralToken ? [`xai-client-secret.${ephemeralToken}`] : undefined;\n const wsOptions =\n !ephemeralToken && apiKey\n ? {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n }\n : undefined;\n\n const ws = new WebSocket(url, protocols, wsOptions);\n this.ws = ws;\n this.setupEventListeners(ws);\n\n try {\n await this.waitForOpen(ws);\n this.state = 'open';\n this.updateConfig(this.buildInitialSessionConfig());\n this.flushQueue();\n } catch (err) {\n this.cleanupSessionState();\n this.state = 'closed';\n this.ws = undefined;\n ws.close();\n throw err;\n }\n }\n\n close(): void {\n const ws = this.ws;\n this.state = 'closed';\n this.closedByUser = true;\n this.connectPromise = undefined;\n this.ws = undefined;\n this.cleanupSessionState();\n ws?.close();\n if (ws) {\n this.emit('close', { code: 1000, reason: 'closed' });\n }\n }\n\n disconnect(): void {\n this.close();\n }\n\n async speak(input: string | NodeJS.ReadableStream, options: XAIRealtimeSpeakOptions = {}): Promise<void> {\n const text = typeof input === 'string' ? input : (await this.readInputStream(input)).toString('utf-8');\n\n if (text.trim().length === 0) {\n throw new Error('Input text is empty');\n }\n\n if (options.speaker && options.speaker !== this.speaker) {\n this.speaker = options.speaker;\n this.updateConfig({ voice: options.speaker });\n }\n\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n\n await this.answer({ response: options.response });\n }\n\n async listen(audioData: NodeJS.ReadableStream | unknown, options: XAIRealtimeListenOptions = {}): Promise<void> {\n if (!isReadableStream(audioData)) {\n this.emit('error', { message: 'Unsupported audio data format' });\n return;\n }\n\n this.appendAudio(await readableToBase64(audioData));\n\n if (options.commit ?? true) {\n await this.commitAudioBuffer();\n }\n\n if (options.createResponse ?? true) {\n await this.answer({ response: options.response });\n }\n }\n\n async send(audioData: NodeJS.ReadableStream | Int16Array, eventId?: string): Promise<void> {\n if (this.state !== 'open' || !this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.emit('error', { message: 'Cannot send audio before connect() is open' });\n return;\n }\n\n if (isReadableStream(audioData)) {\n const cleanup = () => {\n audioData.removeListener('data', onData);\n audioData.removeListener('error', onError);\n audioData.removeListener('end', onEnd);\n audioData.removeListener('close', onEnd);\n this.audioStreamCleanups.delete(cleanup);\n };\n const onData = (chunk: unknown) => {\n try {\n const buffer = this.normalizeAudioChunk(chunk);\n this.appendAudio(buffer.toString('base64'), eventId);\n } catch (err) {\n this.emitError(err);\n cleanup();\n }\n };\n const onError = (err: Error) => {\n this.emitError(err);\n cleanup();\n };\n const onEnd = () => cleanup();\n\n this.audioStreamCleanups.add(cleanup);\n audioData.on('data', onData);\n audioData.on('error', onError);\n audioData.on('end', onEnd);\n audioData.on('close', onEnd);\n return;\n }\n\n if (audioData instanceof Int16Array) {\n this.appendAudio(int16ArrayToBase64(audioData), eventId);\n return;\n }\n\n this.emit('error', { message: 'Unsupported audio data format' });\n }\n\n async commitAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.commit', event_id: eventId });\n }\n\n async clearAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.clear', event_id: eventId });\n }\n\n async cancelResponse(responseId?: string, eventId?: string): Promise<void> {\n this.sendEvent({ type: 'response.cancel', response_id: responseId, event_id: eventId });\n }\n\n async answer(options: XAIRealtimeAnswerOptions = {}): Promise<void> {\n this.sendEvent({\n type: 'response.create',\n ...(options.response ? { response: options.response } : {}),\n });\n }\n\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event) || [];\n callbacks.push(callback as EventCallback);\n this.events.set(event, callbacks);\n }\n\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback as EventCallback);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n private buildUrl(): string {\n const baseUrl = this.options.url || DEFAULT_URL;\n const url = new URL(baseUrl);\n url.searchParams.set('model', this.realtimeConfig?.model || this.options.model || DEFAULT_MODEL);\n return url.toString();\n }\n\n private buildInitialSessionConfig(): XAISessionConfig {\n const session = this.options.session || {};\n return this.stripUndefined({\n ...session,\n instructions: this.instructions,\n voice: this.speaker as XAIVoice,\n turn_detection: session.turn_detection ?? this.options.turnDetection ?? DEFAULT_TURN_DETECTION,\n audio: session.audio ?? this.options.audio ?? DEFAULT_AUDIO,\n tools: this.buildSessionTools(),\n }) as XAISessionConfig;\n }\n\n private buildSessionTools(): XAITool[] {\n const serverTools = [...(this.options.session?.tools || []), ...(this.options.serverTools || [])];\n const functionTools = this.getTransformedTools().map(tool => tool.xaiTool);\n return [...serverTools, ...functionTools];\n }\n\n private getTransformedTools(): XAITransformedTool[] {\n this.transformedTools ??= transformTools(this.tools, this.logger);\n return this.transformedTools;\n }\n\n private setupEventListeners(ws: WSType): void {\n ws.on('message', message => {\n if (this.ws !== ws) {\n return;\n }\n\n try {\n const event = JSON.parse(message.toString()) as XAIServerEvent;\n this.handleServerEvent(event);\n } catch (err) {\n this.emitError(err);\n }\n });\n\n ws.on('error', err => {\n if (this.ws !== ws) {\n return;\n }\n\n if (this.state === 'open') {\n this.emitError(err);\n }\n });\n\n ws.on('close', (code, reason) => {\n if (this.ws !== ws) {\n return;\n }\n\n this.state = 'closed';\n this.ws = undefined;\n this.connectPromise = undefined;\n this.cleanupSessionState();\n this.emit('close', { code, reason: reason?.toString?.() });\n });\n }\n\n private handleServerEvent(event: XAIServerEvent): void {\n if (this.debug) {\n const { delta, ...fields } = event;\n this.logger.debug(`[xAI realtime] ${event.type}`, { ...fields, deltaLength: delta?.length });\n }\n\n if (event.type !== 'error') {\n this.emit(event.type, event);\n }\n\n switch (event.type) {\n case 'session.created':\n case 'session.updated':\n case 'response.created':\n if (event.type === 'response.created') {\n this.createSpeakerStream(this.getResponseId(event));\n }\n return;\n case 'response.output_audio.delta':\n case 'response.audio.delta':\n this.handleAudioDelta(event);\n return;\n case 'response.output_audio.done':\n case 'response.audio.done':\n this.handleAudioDone(event);\n return;\n case 'response.text.delta':\n case 'response.output_text.delta':\n case 'response.audio_transcript.delta':\n case 'response.output_audio_transcript.delta':\n this.emit('writing', { text: event.delta || '', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'response.text.done':\n case 'response.output_text.done':\n case 'response.audio_transcript.done':\n case 'response.output_audio_transcript.done':\n this.emit('writing', { text: '\\n', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'conversation.item.input_audio_transcription.completed':\n case 'conversation.item.input_audio_transcription.done':\n this.emit('writing', {\n text: event.transcript || event.text || event.delta || '',\n response_id: this.getResponseId(event),\n role: 'user',\n });\n return;\n case 'response.function_call_arguments.done':\n this.handleFunctionCallEvent(event);\n return;\n case 'response.done':\n void this.handleResponseDone(event);\n return;\n case 'error':\n this.emit('error', {\n message: event.error?.message || 'xAI realtime error',\n code: event.error?.code || event.error?.type,\n details: event,\n });\n return;\n default:\n return;\n }\n }\n\n private handleAudioDelta(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n const audio = event.delta || '';\n const audioData = Buffer.from(audio, 'base64');\n const stream = this.createSpeakerStream(responseId);\n stream.write(audioData);\n this.emit('speaking', { audio, audioData, response_id: responseId });\n }\n\n private handleAudioDone(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n this.emit('speaking.done', { response_id: responseId });\n this.endSpeakerStream(responseId);\n }\n\n private handleFunctionCallEvent(event: XAIServerEvent): void {\n const call = this.normalizeFunctionCallEvent(event);\n if (!call) {\n this.emit('error', {\n message: 'Invalid xAI function call event',\n details: event,\n });\n return;\n }\n\n const state = this.getFunctionResponseState(call.responseId);\n state.hasFunctionCall = true;\n state.expectedCallIds.add(call.callId);\n\n if (state.startedCallIds.has(call.callId)) {\n return;\n }\n\n state.startedCallIds.add(call.callId);\n const pending = this.executeFunctionCall(call).finally(() => {\n state.completedCallIds.add(call.callId);\n state.pending.delete(pending);\n void this.maybeContinueAfterFunctionCalls(call.responseId);\n });\n\n state.pending.add(pending);\n }\n\n private async handleResponseDone(event: XAIServerEvent): Promise<void> {\n const responseId = this.getResponseId(event);\n this.endSpeakerStream(responseId);\n\n const expectedCallIds = this.getFunctionCallIds(event);\n const state =\n this.functionResponses.get(responseId) ||\n (expectedCallIds.length > 0 ? this.getFunctionResponseState(responseId) : undefined);\n\n if (!state) {\n return;\n }\n\n for (const callId of expectedCallIds) {\n state.expectedCallIds.add(callId);\n }\n\n state.hasFunctionCall ||= expectedCallIds.length > 0;\n state.responseDone = true;\n await this.maybeContinueAfterFunctionCalls(responseId);\n }\n\n private getFunctionCallIds(event: XAIServerEvent): string[] {\n return (\n event.response?.output\n ?.filter(output => output.type === 'function_call' && typeof output.call_id === 'string')\n .map(output => output.call_id as string) || []\n );\n }\n\n private async executeFunctionCall(call: FunctionCallEvent): Promise<void> {\n const tool = this.tools?.[call.name];\n const parsedArgs = this.parseFunctionArguments(call.arguments);\n if (!parsedArgs.ok) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = `Failed to parse xAI function call arguments: ${parsedArgs.error.message}`;\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: {\n call_id: call.callId,\n name: call.name,\n arguments: parsedArgs.rawArguments,\n error: parsedArgs.error,\n },\n });\n return;\n }\n\n const args = parsedArgs.value;\n\n try {\n if (!tool?.execute) {\n throw new Error(`Tool \"${call.name}\" not found`);\n }\n\n this.emit('tool-call-start', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n });\n\n const result = await this.executeTool(call.name, call.callId, args);\n\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n this.emit('tool-call-result', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n result,\n });\n\n this.sendFunctionOutput(call.callId, result);\n } catch (err) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: { call_id: call.callId, name: call.name },\n });\n }\n }\n\n private async executeTool(name: string, callId: string, args: unknown): Promise<unknown> {\n const transformedTool = this.getTransformedTools().find(tool => tool.xaiTool.name === name);\n\n if (!transformedTool) {\n throw new Error(`Tool \"${name}\" not found`);\n }\n\n return (transformedTool.execute as XAIExecuteFunction)(args, {\n toolCallId: callId,\n requestContext: this.requestContext,\n });\n }\n\n private sendFunctionOutput(callId: string, output: unknown): void {\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output ?? null),\n },\n });\n }\n\n private isCurrentSession(sessionGeneration: number): boolean {\n return this.state === 'open' && this.sessionGeneration === sessionGeneration;\n }\n\n private async maybeContinueAfterFunctionCalls(responseId: string): Promise<void> {\n const state = this.functionResponses.get(responseId);\n const hasPendingExpectedCall =\n state?.expectedCallIds && [...state.expectedCallIds].some(callId => !state.completedCallIds.has(callId));\n\n if (state && hasPendingExpectedCall) {\n this.scheduleMissingFunctionCallTimeout(responseId, state);\n }\n\n if (\n !state ||\n !state.hasFunctionCall ||\n state.continuationSent ||\n !state.responseDone ||\n state.pending.size > 0 ||\n hasPendingExpectedCall\n ) {\n return;\n }\n\n state.continuationSent = true;\n this.clearMissingFunctionCallTimeout(state);\n this.sendEvent({ type: 'response.create' });\n this.functionResponses.delete(responseId);\n }\n\n private scheduleMissingFunctionCallTimeout(responseId: string, state: PendingFunctionResponse): void {\n if (state.missingCallTimeout || !state.responseDone) {\n return;\n }\n\n state.missingCallTimeout = setTimeout(() => {\n if (!this.isCurrentSession(state.sessionGeneration) || this.functionResponses.get(responseId) !== state) {\n return;\n }\n\n state.missingCallTimeout = undefined;\n const missingCallIds = [...state.expectedCallIds].filter(callId => !state.startedCallIds.has(callId));\n if (missingCallIds.length === 0) {\n void this.maybeContinueAfterFunctionCalls(responseId);\n return;\n }\n\n const message = `Timed out waiting for xAI function call arguments for ${missingCallIds.join(', ')}`;\n for (const callId of missingCallIds) {\n state.completedCallIds.add(callId);\n this.sendFunctionOutput(callId, { error: message });\n }\n this.emit('error', { message, details: { response_id: responseId, call_ids: missingCallIds } });\n void this.maybeContinueAfterFunctionCalls(responseId);\n }, FUNCTION_CALL_ARGUMENT_TIMEOUT_MS);\n }\n\n private clearMissingFunctionCallTimeout(state: PendingFunctionResponse): void {\n if (state.missingCallTimeout) {\n clearTimeout(state.missingCallTimeout);\n state.missingCallTimeout = undefined;\n }\n }\n\n private getFunctionResponseState(responseId: string): PendingFunctionResponse {\n let state = this.functionResponses.get(responseId);\n if (!state) {\n state = {\n pending: new Set(),\n expectedCallIds: new Set(),\n startedCallIds: new Set(),\n completedCallIds: new Set(),\n sessionGeneration: this.sessionGeneration,\n responseDone: false,\n continuationSent: false,\n hasFunctionCall: false,\n };\n this.functionResponses.set(responseId, state);\n }\n return state;\n }\n\n private normalizeFunctionCallEvent(event: XAIServerEvent): FunctionCallEvent | undefined {\n if (!event.call_id || !event.name || typeof event.arguments !== 'string') {\n return undefined;\n }\n\n return {\n responseId: this.getResponseId(event),\n callId: event.call_id,\n name: event.name,\n arguments: event.arguments,\n sessionGeneration: this.sessionGeneration,\n };\n }\n\n private parseFunctionArguments(args: string): ParsedFunctionArguments {\n try {\n return { ok: true, value: JSON.parse(args || '{}') };\n } catch (err) {\n return { ok: false, rawArguments: args, error: err as SyntaxError };\n }\n }\n\n private appendAudio(audio: string, eventId?: string): void {\n this.sendEvent({ type: 'input_audio_buffer.append', audio, event_id: eventId });\n }\n\n private normalizeAudioChunk(chunk: unknown): Buffer {\n if (Buffer.isBuffer(chunk)) {\n return chunk;\n }\n\n if (chunk instanceof ArrayBuffer) {\n return Buffer.from(chunk);\n }\n\n if (ArrayBuffer.isView(chunk)) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n throw new TypeError('Audio stream chunks must be Buffer, ArrayBuffer, or TypedArray values');\n }\n\n private sendEvent(event: XAIClientEvent): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN || this.state !== 'open') {\n if (this.closedByUser) {\n this.emit('error', { message: 'Cannot send event after close()' });\n return;\n }\n this.queue.push(event);\n return;\n }\n\n try {\n this.ws.send(JSON.stringify(this.stripUndefined(event)));\n } catch (err) {\n this.emitError(err);\n }\n }\n\n private flushQueue(): void {\n const queuedEvents = this.queue.splice(0, this.queue.length);\n for (const event of queuedEvents) {\n this.sendEvent(event);\n }\n }\n\n private waitForOpen(ws: WSType): Promise<void> {\n return new Promise((resolve, reject) => {\n if (ws.readyState === WebSocket.OPEN) {\n resolve();\n return;\n }\n\n const onOpen = () => {\n cleanup();\n resolve();\n };\n\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n\n const onClose = () => {\n cleanup();\n reject(new Error('WebSocket closed before opening'));\n };\n\n const cleanup = () => {\n ws.off?.('open', onOpen);\n ws.off?.('error', onError);\n ws.off?.('close', onClose);\n };\n\n ws.on('open', onOpen);\n ws.on('error', onError);\n ws.on('close', onClose);\n });\n }\n\n private getResponseId(event: XAIServerEvent): string {\n return (\n event.response_id ||\n event.response?.id ||\n event.item_id ||\n `fallback:${this.sessionGeneration}:${++this.fallbackResponseCounter}`\n );\n }\n\n private createSpeakerStream(responseId: string): StreamWithId {\n const existing = this.speakerStreams.get(responseId);\n if (existing) {\n return existing;\n }\n\n const stream = new PassThrough() as StreamWithId;\n stream.id = responseId;\n this.speakerStreams.set(responseId, stream);\n this.emit('speaker', stream);\n return stream;\n }\n\n private closeSpeakerStreams(): void {\n for (const stream of this.speakerStreams.values()) {\n stream.end();\n }\n this.speakerStreams.clear();\n }\n\n private endSpeakerStream(responseId: string): void {\n this.speakerStreams.get(responseId)?.end();\n this.speakerStreams.delete(responseId);\n }\n\n private cleanupSessionState(): void {\n this.sessionGeneration += 1;\n this.queue.length = 0;\n for (const cleanup of [...this.audioStreamCleanups]) {\n cleanup();\n }\n this.audioStreamCleanups.clear();\n for (const state of this.functionResponses.values()) {\n this.clearMissingFunctionCallTimeout(state);\n }\n this.functionResponses.clear();\n this.requestContext = undefined;\n this.closeSpeakerStreams();\n }\n\n private emit(event: string, ...args: any[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n for (const callback of callbacks) {\n callback(...args);\n }\n }\n\n private emitError(err: unknown): void {\n this.emit('error', {\n message: err instanceof Error ? err.message : String(err),\n details: err,\n });\n }\n\n private stripUndefined<T>(value: T, seen = new WeakSet<object>(), depth = 0, maxDepth = 100): T {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (depth >= maxDepth) {\n throw new Error('Cannot serialize xAI realtime event: maximum object depth exceeded');\n }\n\n const objectValue = value as object;\n if (Buffer.isBuffer(value) || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return value;\n }\n\n if (seen.has(objectValue)) {\n return undefined as T;\n }\n\n seen.add(objectValue);\n\n if (Array.isArray(value)) {\n const result = value\n .map(item => this.stripUndefined(item, seen, depth + 1, maxDepth))\n .filter(item => item !== undefined) as T;\n seen.delete(objectValue);\n return result;\n }\n\n const result = Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .map(([key, entry]) => [key, this.stripUndefined(entry, seen, depth + 1, maxDepth)])\n .filter(([, entry]) => entry !== undefined),\n ) as T;\n\n seen.delete(objectValue);\n return result;\n }\n\n private async readInputStream(input: NodeJS.ReadableStream): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks);\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';
|
|
|
5
5
|
|
|
6
6
|
// src/index.ts
|
|
7
7
|
|
|
8
|
-
// ../../packages/_internal-core/dist/chunk-
|
|
8
|
+
// ../../packages/_internal-core/dist/chunk-3M4SEWMI.js
|
|
9
9
|
var RegisteredLogger = {
|
|
10
10
|
LLM: "LLM"};
|
|
11
11
|
var LogLevel = {
|
|
@@ -102,7 +102,7 @@ var ConsoleLogger = class _ConsoleLogger extends MastraLogger {
|
|
|
102
102
|
}
|
|
103
103
|
warn(message, ...args) {
|
|
104
104
|
if ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) {
|
|
105
|
-
console.
|
|
105
|
+
console.warn(`${this.prefix()}${message}`, ...args);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
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/utils.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","import { Readable } from 'node:stream';\nimport type { ToolsInput } from '@internal/voice';\nimport { isZodType, standardSchemaToJSONSchema, toStandardSchema } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport type { XAIFunctionTool } from './types';\n\ntype ToolInvocationOptions = {\n toolCallId: string;\n messages: unknown[];\n requestContext?: unknown;\n};\n\ntype ToolExecute = (args: unknown, options: ToolInvocationOptions) => unknown;\n\nexport type XAIExecuteFunction = (\n args: unknown,\n options: { toolCallId: string; requestContext?: unknown },\n) => Promise<unknown>;\nexport type XAITransformedTool = { xaiTool: XAIFunctionTool; execute: XAIExecuteFunction };\n\n/**\n * Minimal logger contract accepted by {@link transformTools}. Pass the\n * voice provider's `this.logger` from inside the class so warnings respect\n * the configured Mastra log level instead of writing to stdout/stderr\n * unconditionally.\n */\nexport type XAITransformToolsLogger = { warn(message: string): void };\n\nexport const isReadableStream = (obj: unknown): obj is NodeJS.ReadableStream => {\n return (\n !!obj &&\n obj instanceof Readable &&\n typeof obj.read === 'function' &&\n typeof obj.pipe === 'function' &&\n obj.readable === true\n );\n};\n\nexport const int16ArrayToBase64 = (int16Array: Int16Array): string => {\n const buffer = new ArrayBuffer(int16Array.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < int16Array.length; i++) {\n // xAI's documented PCM format is Linear16 little-endian.\n view.setInt16(i * 2, int16Array[i]!, true);\n }\n return Buffer.from(buffer).toString('base64');\n};\n\nexport const readableToBuffer = async (stream: NodeJS.ReadableStream): Promise<Buffer> => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n};\n\nexport const readableToBase64 = async (stream: NodeJS.ReadableStream): Promise<string> => {\n return (await readableToBuffer(stream)).toString('base64');\n};\n\nexport const transformTools = (tools?: ToolsInput, logger: XAITransformToolsLogger = console) => {\n const xaiTools: XAITransformedTool[] = [];\n\n for (const [name, tool] of Object.entries(tools || {})) {\n let parameters: Record<string, unknown>;\n\n try {\n if ('inputSchema' in tool && tool.inputSchema) {\n parameters = schemaToJsonSchema(tool.inputSchema);\n } else if ('parameters' in tool && tool.parameters) {\n parameters = schemaToJsonSchema(tool.parameters);\n } else {\n continue;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to transform xAI realtime tool \"${name}\" schema: ${message}`);\n }\n\n if (!tool.execute) {\n logger.warn(`Skipping xAI realtime tool \"${name}\" because it has no execute function.`);\n continue;\n }\n\n xaiTools.push({\n xaiTool: {\n type: 'function',\n name,\n description: tool.description || `Tool: ${name}`,\n parameters,\n },\n execute: async (args, options) => {\n if (!tool.execute) {\n throw new Error(`Tool ${name} has no execute function`);\n }\n\n const execute = tool.execute as ToolExecute;\n const callOptions = {\n toolCallId: options.toolCallId,\n messages: [],\n requestContext: options.requestContext,\n } satisfies ToolInvocationOptions;\n\n return execute(args, callOptions);\n },\n });\n }\n\n return xaiTools;\n};\n\nfunction schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n let jsonSchema: Record<string, unknown>;\n\n if (isZodType(schema)) {\n jsonSchema = zodToJsonSchema(schema) as Record<string, unknown>;\n } else {\n jsonSchema = standardSchemaToJSONSchema(toStandardSchema(schema as any), { io: 'input' }) as Record<\n string,\n unknown\n >;\n }\n\n delete jsonSchema.$schema;\n return jsonSchema;\n}\n","import { PassThrough } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport type { RequestContext, ToolsInput, VoiceConfig, VoiceEventType } from '@internal/voice';\nimport type { WebSocket as WSType } from 'ws';\nimport { WebSocket } from 'ws';\nimport type {\n XAIClientEvent,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerEvent,\n XAISessionConfig,\n XAISpeaker,\n XAITurnDetection,\n XAITool,\n XAIVoice,\n} from './types';\nimport type { XAIExecuteFunction, XAITransformedTool } from './utils';\nimport { int16ArrayToBase64, isReadableStream, readableToBase64, transformTools } from './utils';\n\nexport type {\n XAIAudioConfig,\n XAIAudioFormat,\n XAIAudioFormatType,\n XAIFunctionTool,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerTool,\n XAISessionConfig,\n XAISpeaker,\n XAITool,\n XAITurnDetection,\n XAIVoice,\n} from './types';\n\ntype EventCallback = (...args: any[]) => void;\ntype StreamWithId = PassThrough & { id: string };\ntype ConnectionState = 'closed' | 'connecting' | 'open';\n\nconst DEFAULT_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL: XAIRealtimeModel = 'grok-voice-think-fast-1.0';\nconst DEFAULT_VOICE: XAIVoice = 'eve';\n\nconst DEFAULT_TURN_DETECTION: XAITurnDetection = {\n type: 'server_vad',\n};\nconst FUNCTION_CALL_ARGUMENT_TIMEOUT_MS = 30_000;\n\nconst DEFAULT_AUDIO = {\n input: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n output: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n};\n\nconst XAI_SPEAKERS: XAISpeaker[] = [\n {\n voiceId: 'eve',\n name: 'Eve',\n gender: 'female',\n description: 'Energetic, upbeat default voice.',\n },\n {\n voiceId: 'ara',\n name: 'Ara',\n gender: 'female',\n description: 'Warm, friendly conversational voice.',\n },\n {\n voiceId: 'rex',\n name: 'Rex',\n gender: 'male',\n description: 'Confident, clear professional voice.',\n },\n {\n voiceId: 'sal',\n name: 'Sal',\n gender: 'neutral',\n description: 'Smooth, balanced general-purpose voice.',\n },\n {\n voiceId: 'leo',\n name: 'Leo',\n gender: 'male',\n description: 'Authoritative, strong instructional voice.',\n },\n];\n\ninterface PendingFunctionResponse {\n pending: Set<Promise<void>>;\n expectedCallIds: Set<string>;\n startedCallIds: Set<string>;\n completedCallIds: Set<string>;\n missingCallTimeout?: ReturnType<typeof setTimeout>;\n sessionGeneration: number;\n responseDone: boolean;\n continuationSent: boolean;\n hasFunctionCall: boolean;\n}\n\ninterface FunctionCallEvent {\n responseId: string;\n callId: string;\n name: string;\n arguments: string;\n sessionGeneration: number;\n}\n\ntype ParsedFunctionArguments = { ok: true; value: unknown } | { ok: false; rawArguments: string; error: SyntaxError };\n\n/**\n * Realtime Grok Voice Agent API provider for Mastra.\n *\n * This provider follows Mastra's realtime voice contract while keeping xAI's\n * endpoint, authentication, voices, event names, and tool behavior explicit.\n */\nexport class XAIRealtimeVoice extends MastraVoice<\n XAIRealtimeVoiceConfig,\n XAIRealtimeSpeakOptions,\n XAIRealtimeListenOptions,\n ToolsInput,\n XAIRealtimeEventMap,\n XAISpeaker\n> {\n private ws?: WSType;\n private state: ConnectionState = 'closed';\n private readonly events = new Map<string, EventCallback[]>();\n private readonly queue: XAIClientEvent[] = [];\n private readonly speakerStreams = new Map<string, StreamWithId>();\n private readonly functionResponses = new Map<string, PendingFunctionResponse>();\n private readonly audioStreamCleanups = new Set<() => void>();\n private requestContext?: RequestContext;\n private instructions?: string;\n private tools?: ToolsInput;\n private transformedTools?: XAITransformedTool[];\n private readonly options: XAIRealtimeVoiceConfig;\n private readonly debug: boolean;\n private closedByUser = false;\n private connectPromise?: Promise<void>;\n private sessionGeneration = 0;\n private fallbackResponseCounter = 0;\n\n constructor(config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig = {}) {\n const normalizedConfig = XAIRealtimeVoice.normalizeConfig(config);\n super(normalizedConfig);\n\n this.options = normalizedConfig.realtimeConfig?.options || {};\n this.instructions = this.options.instructions;\n this.speaker = normalizedConfig.speaker || this.options.speaker || DEFAULT_VOICE;\n this.debug = this.options.debug || false;\n }\n\n private static normalizeConfig(\n config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig,\n ): VoiceConfig<XAIRealtimeVoiceConfig> {\n if ('realtimeConfig' in config || 'speechModel' in config || 'listeningModel' in config) {\n const voiceConfig = config as VoiceConfig<XAIRealtimeVoiceConfig>;\n const options = voiceConfig.realtimeConfig?.options || {};\n return {\n ...voiceConfig,\n speaker: voiceConfig.speaker || options.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: voiceConfig.realtimeConfig?.model || options.model || DEFAULT_MODEL,\n apiKey: voiceConfig.realtimeConfig?.apiKey || options.apiKey,\n options,\n },\n };\n }\n\n const xaiConfig = config as XAIRealtimeVoiceConfig;\n return {\n speaker: xaiConfig.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: xaiConfig.model || DEFAULT_MODEL,\n apiKey: xaiConfig.apiKey,\n options: xaiConfig,\n },\n };\n }\n\n getSpeakers(): Promise<XAISpeaker[]> {\n return Promise.resolve(XAI_SPEAKERS);\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n return { enabled: true };\n }\n\n addInstructions(instructions?: string): void {\n this.instructions = instructions ?? '';\n if (this.state === 'open') {\n this.updateConfig({ instructions: this.instructions });\n }\n }\n\n addTools(tools?: ToolsInput): void {\n this.tools = tools || {};\n this.transformedTools = undefined;\n if (this.state === 'open') {\n this.updateConfig({ tools: this.buildSessionTools() });\n }\n }\n\n updateConfig(sessionConfig: Partial<XAISessionConfig>): void {\n this.sendEvent({\n type: 'session.update',\n session: this.stripUndefined(sessionConfig) as XAISessionConfig,\n });\n }\n\n async connect({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n if (this.state === 'open') {\n return;\n }\n\n if (this.state === 'connecting' && this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.openConnection({ requestContext });\n\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n private async openConnection({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n const apiKey = this.options.apiKey || this.realtimeConfig?.apiKey || process.env.XAI_API_KEY;\n const ephemeralToken = this.options.ephemeralToken;\n\n if (!apiKey && !ephemeralToken) {\n throw new Error('xAI API key is required. Set XAI_API_KEY, pass apiKey, or pass ephemeralToken.');\n }\n\n this.requestContext = requestContext;\n this.closedByUser = false;\n this.state = 'connecting';\n this.sessionGeneration += 1;\n\n const url = this.buildUrl();\n const protocols = ephemeralToken ? [`xai-client-secret.${ephemeralToken}`] : undefined;\n const wsOptions =\n !ephemeralToken && apiKey\n ? {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n }\n : undefined;\n\n const ws = new WebSocket(url, protocols, wsOptions);\n this.ws = ws;\n this.setupEventListeners(ws);\n\n try {\n await this.waitForOpen(ws);\n this.state = 'open';\n this.updateConfig(this.buildInitialSessionConfig());\n this.flushQueue();\n } catch (err) {\n this.cleanupSessionState();\n this.state = 'closed';\n this.ws = undefined;\n ws.close();\n throw err;\n }\n }\n\n close(): void {\n const ws = this.ws;\n this.state = 'closed';\n this.closedByUser = true;\n this.connectPromise = undefined;\n this.ws = undefined;\n this.cleanupSessionState();\n ws?.close();\n if (ws) {\n this.emit('close', { code: 1000, reason: 'closed' });\n }\n }\n\n disconnect(): void {\n this.close();\n }\n\n async speak(input: string | NodeJS.ReadableStream, options: XAIRealtimeSpeakOptions = {}): Promise<void> {\n const text = typeof input === 'string' ? input : (await this.readInputStream(input)).toString('utf-8');\n\n if (text.trim().length === 0) {\n throw new Error('Input text is empty');\n }\n\n if (options.speaker && options.speaker !== this.speaker) {\n this.speaker = options.speaker;\n this.updateConfig({ voice: options.speaker });\n }\n\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n\n await this.answer({ response: options.response });\n }\n\n async listen(audioData: NodeJS.ReadableStream | unknown, options: XAIRealtimeListenOptions = {}): Promise<void> {\n if (!isReadableStream(audioData)) {\n this.emit('error', { message: 'Unsupported audio data format' });\n return;\n }\n\n this.appendAudio(await readableToBase64(audioData));\n\n if (options.commit ?? true) {\n await this.commitAudioBuffer();\n }\n\n if (options.createResponse ?? true) {\n await this.answer({ response: options.response });\n }\n }\n\n async send(audioData: NodeJS.ReadableStream | Int16Array, eventId?: string): Promise<void> {\n if (this.state !== 'open' || !this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.emit('error', { message: 'Cannot send audio before connect() is open' });\n return;\n }\n\n if (isReadableStream(audioData)) {\n const cleanup = () => {\n audioData.removeListener('data', onData);\n audioData.removeListener('error', onError);\n audioData.removeListener('end', onEnd);\n audioData.removeListener('close', onEnd);\n this.audioStreamCleanups.delete(cleanup);\n };\n const onData = (chunk: unknown) => {\n try {\n const buffer = this.normalizeAudioChunk(chunk);\n this.appendAudio(buffer.toString('base64'), eventId);\n } catch (err) {\n this.emitError(err);\n cleanup();\n }\n };\n const onError = (err: Error) => {\n this.emitError(err);\n cleanup();\n };\n const onEnd = () => cleanup();\n\n this.audioStreamCleanups.add(cleanup);\n audioData.on('data', onData);\n audioData.on('error', onError);\n audioData.on('end', onEnd);\n audioData.on('close', onEnd);\n return;\n }\n\n if (audioData instanceof Int16Array) {\n this.appendAudio(int16ArrayToBase64(audioData), eventId);\n return;\n }\n\n this.emit('error', { message: 'Unsupported audio data format' });\n }\n\n async commitAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.commit', event_id: eventId });\n }\n\n async clearAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.clear', event_id: eventId });\n }\n\n async cancelResponse(responseId?: string, eventId?: string): Promise<void> {\n this.sendEvent({ type: 'response.cancel', response_id: responseId, event_id: eventId });\n }\n\n async answer(options: XAIRealtimeAnswerOptions = {}): Promise<void> {\n this.sendEvent({\n type: 'response.create',\n ...(options.response ? { response: options.response } : {}),\n });\n }\n\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event) || [];\n callbacks.push(callback as EventCallback);\n this.events.set(event, callbacks);\n }\n\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback as EventCallback);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n private buildUrl(): string {\n const baseUrl = this.options.url || DEFAULT_URL;\n const url = new URL(baseUrl);\n url.searchParams.set('model', this.realtimeConfig?.model || this.options.model || DEFAULT_MODEL);\n return url.toString();\n }\n\n private buildInitialSessionConfig(): XAISessionConfig {\n const session = this.options.session || {};\n return this.stripUndefined({\n ...session,\n instructions: this.instructions,\n voice: this.speaker as XAIVoice,\n turn_detection: session.turn_detection ?? this.options.turnDetection ?? DEFAULT_TURN_DETECTION,\n audio: session.audio ?? this.options.audio ?? DEFAULT_AUDIO,\n tools: this.buildSessionTools(),\n }) as XAISessionConfig;\n }\n\n private buildSessionTools(): XAITool[] {\n const serverTools = [...(this.options.session?.tools || []), ...(this.options.serverTools || [])];\n const functionTools = this.getTransformedTools().map(tool => tool.xaiTool);\n return [...serverTools, ...functionTools];\n }\n\n private getTransformedTools(): XAITransformedTool[] {\n this.transformedTools ??= transformTools(this.tools, this.logger);\n return this.transformedTools;\n }\n\n private setupEventListeners(ws: WSType): void {\n ws.on('message', message => {\n if (this.ws !== ws) {\n return;\n }\n\n try {\n const event = JSON.parse(message.toString()) as XAIServerEvent;\n this.handleServerEvent(event);\n } catch (err) {\n this.emitError(err);\n }\n });\n\n ws.on('error', err => {\n if (this.ws !== ws) {\n return;\n }\n\n if (this.state === 'open') {\n this.emitError(err);\n }\n });\n\n ws.on('close', (code, reason) => {\n if (this.ws !== ws) {\n return;\n }\n\n this.state = 'closed';\n this.ws = undefined;\n this.connectPromise = undefined;\n this.cleanupSessionState();\n this.emit('close', { code, reason: reason?.toString?.() });\n });\n }\n\n private handleServerEvent(event: XAIServerEvent): void {\n if (this.debug) {\n const { delta, ...fields } = event;\n this.logger.debug(`[xAI realtime] ${event.type}`, { ...fields, deltaLength: delta?.length });\n }\n\n if (event.type !== 'error') {\n this.emit(event.type, event);\n }\n\n switch (event.type) {\n case 'session.created':\n case 'session.updated':\n case 'response.created':\n if (event.type === 'response.created') {\n this.createSpeakerStream(this.getResponseId(event));\n }\n return;\n case 'response.output_audio.delta':\n case 'response.audio.delta':\n this.handleAudioDelta(event);\n return;\n case 'response.output_audio.done':\n case 'response.audio.done':\n this.handleAudioDone(event);\n return;\n case 'response.text.delta':\n case 'response.output_text.delta':\n case 'response.audio_transcript.delta':\n case 'response.output_audio_transcript.delta':\n this.emit('writing', { text: event.delta || '', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'response.text.done':\n case 'response.output_text.done':\n case 'response.audio_transcript.done':\n case 'response.output_audio_transcript.done':\n this.emit('writing', { text: '\\n', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'conversation.item.input_audio_transcription.completed':\n case 'conversation.item.input_audio_transcription.done':\n this.emit('writing', {\n text: event.transcript || event.text || event.delta || '',\n response_id: this.getResponseId(event),\n role: 'user',\n });\n return;\n case 'response.function_call_arguments.done':\n this.handleFunctionCallEvent(event);\n return;\n case 'response.done':\n void this.handleResponseDone(event);\n return;\n case 'error':\n this.emit('error', {\n message: event.error?.message || 'xAI realtime error',\n code: event.error?.code || event.error?.type,\n details: event,\n });\n return;\n default:\n return;\n }\n }\n\n private handleAudioDelta(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n const audio = event.delta || '';\n const audioData = Buffer.from(audio, 'base64');\n const stream = this.createSpeakerStream(responseId);\n stream.write(audioData);\n this.emit('speaking', { audio, audioData, response_id: responseId });\n }\n\n private handleAudioDone(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n this.emit('speaking.done', { response_id: responseId });\n this.endSpeakerStream(responseId);\n }\n\n private handleFunctionCallEvent(event: XAIServerEvent): void {\n const call = this.normalizeFunctionCallEvent(event);\n if (!call) {\n this.emit('error', {\n message: 'Invalid xAI function call event',\n details: event,\n });\n return;\n }\n\n const state = this.getFunctionResponseState(call.responseId);\n state.hasFunctionCall = true;\n state.expectedCallIds.add(call.callId);\n\n if (state.startedCallIds.has(call.callId)) {\n return;\n }\n\n state.startedCallIds.add(call.callId);\n const pending = this.executeFunctionCall(call).finally(() => {\n state.completedCallIds.add(call.callId);\n state.pending.delete(pending);\n void this.maybeContinueAfterFunctionCalls(call.responseId);\n });\n\n state.pending.add(pending);\n }\n\n private async handleResponseDone(event: XAIServerEvent): Promise<void> {\n const responseId = this.getResponseId(event);\n this.endSpeakerStream(responseId);\n\n const expectedCallIds = this.getFunctionCallIds(event);\n const state =\n this.functionResponses.get(responseId) ||\n (expectedCallIds.length > 0 ? this.getFunctionResponseState(responseId) : undefined);\n\n if (!state) {\n return;\n }\n\n for (const callId of expectedCallIds) {\n state.expectedCallIds.add(callId);\n }\n\n state.hasFunctionCall ||= expectedCallIds.length > 0;\n state.responseDone = true;\n await this.maybeContinueAfterFunctionCalls(responseId);\n }\n\n private getFunctionCallIds(event: XAIServerEvent): string[] {\n return (\n event.response?.output\n ?.filter(output => output.type === 'function_call' && typeof output.call_id === 'string')\n .map(output => output.call_id as string) || []\n );\n }\n\n private async executeFunctionCall(call: FunctionCallEvent): Promise<void> {\n const tool = this.tools?.[call.name];\n const parsedArgs = this.parseFunctionArguments(call.arguments);\n if (!parsedArgs.ok) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = `Failed to parse xAI function call arguments: ${parsedArgs.error.message}`;\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: {\n call_id: call.callId,\n name: call.name,\n arguments: parsedArgs.rawArguments,\n error: parsedArgs.error,\n },\n });\n return;\n }\n\n const args = parsedArgs.value;\n\n try {\n if (!tool?.execute) {\n throw new Error(`Tool \"${call.name}\" not found`);\n }\n\n this.emit('tool-call-start', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n });\n\n const result = await this.executeTool(call.name, call.callId, args);\n\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n this.emit('tool-call-result', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n result,\n });\n\n this.sendFunctionOutput(call.callId, result);\n } catch (err) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: { call_id: call.callId, name: call.name },\n });\n }\n }\n\n private async executeTool(name: string, callId: string, args: unknown): Promise<unknown> {\n const transformedTool = this.getTransformedTools().find(tool => tool.xaiTool.name === name);\n\n if (!transformedTool) {\n throw new Error(`Tool \"${name}\" not found`);\n }\n\n return (transformedTool.execute as XAIExecuteFunction)(args, {\n toolCallId: callId,\n requestContext: this.requestContext,\n });\n }\n\n private sendFunctionOutput(callId: string, output: unknown): void {\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output ?? null),\n },\n });\n }\n\n private isCurrentSession(sessionGeneration: number): boolean {\n return this.state === 'open' && this.sessionGeneration === sessionGeneration;\n }\n\n private async maybeContinueAfterFunctionCalls(responseId: string): Promise<void> {\n const state = this.functionResponses.get(responseId);\n const hasPendingExpectedCall =\n state?.expectedCallIds && [...state.expectedCallIds].some(callId => !state.completedCallIds.has(callId));\n\n if (state && hasPendingExpectedCall) {\n this.scheduleMissingFunctionCallTimeout(responseId, state);\n }\n\n if (\n !state ||\n !state.hasFunctionCall ||\n state.continuationSent ||\n !state.responseDone ||\n state.pending.size > 0 ||\n hasPendingExpectedCall\n ) {\n return;\n }\n\n state.continuationSent = true;\n this.clearMissingFunctionCallTimeout(state);\n this.sendEvent({ type: 'response.create' });\n this.functionResponses.delete(responseId);\n }\n\n private scheduleMissingFunctionCallTimeout(responseId: string, state: PendingFunctionResponse): void {\n if (state.missingCallTimeout || !state.responseDone) {\n return;\n }\n\n state.missingCallTimeout = setTimeout(() => {\n if (!this.isCurrentSession(state.sessionGeneration) || this.functionResponses.get(responseId) !== state) {\n return;\n }\n\n state.missingCallTimeout = undefined;\n const missingCallIds = [...state.expectedCallIds].filter(callId => !state.startedCallIds.has(callId));\n if (missingCallIds.length === 0) {\n void this.maybeContinueAfterFunctionCalls(responseId);\n return;\n }\n\n const message = `Timed out waiting for xAI function call arguments for ${missingCallIds.join(', ')}`;\n for (const callId of missingCallIds) {\n state.completedCallIds.add(callId);\n this.sendFunctionOutput(callId, { error: message });\n }\n this.emit('error', { message, details: { response_id: responseId, call_ids: missingCallIds } });\n void this.maybeContinueAfterFunctionCalls(responseId);\n }, FUNCTION_CALL_ARGUMENT_TIMEOUT_MS);\n }\n\n private clearMissingFunctionCallTimeout(state: PendingFunctionResponse): void {\n if (state.missingCallTimeout) {\n clearTimeout(state.missingCallTimeout);\n state.missingCallTimeout = undefined;\n }\n }\n\n private getFunctionResponseState(responseId: string): PendingFunctionResponse {\n let state = this.functionResponses.get(responseId);\n if (!state) {\n state = {\n pending: new Set(),\n expectedCallIds: new Set(),\n startedCallIds: new Set(),\n completedCallIds: new Set(),\n sessionGeneration: this.sessionGeneration,\n responseDone: false,\n continuationSent: false,\n hasFunctionCall: false,\n };\n this.functionResponses.set(responseId, state);\n }\n return state;\n }\n\n private normalizeFunctionCallEvent(event: XAIServerEvent): FunctionCallEvent | undefined {\n if (!event.call_id || !event.name || typeof event.arguments !== 'string') {\n return undefined;\n }\n\n return {\n responseId: this.getResponseId(event),\n callId: event.call_id,\n name: event.name,\n arguments: event.arguments,\n sessionGeneration: this.sessionGeneration,\n };\n }\n\n private parseFunctionArguments(args: string): ParsedFunctionArguments {\n try {\n return { ok: true, value: JSON.parse(args || '{}') };\n } catch (err) {\n return { ok: false, rawArguments: args, error: err as SyntaxError };\n }\n }\n\n private appendAudio(audio: string, eventId?: string): void {\n this.sendEvent({ type: 'input_audio_buffer.append', audio, event_id: eventId });\n }\n\n private normalizeAudioChunk(chunk: unknown): Buffer {\n if (Buffer.isBuffer(chunk)) {\n return chunk;\n }\n\n if (chunk instanceof ArrayBuffer) {\n return Buffer.from(chunk);\n }\n\n if (ArrayBuffer.isView(chunk)) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n throw new TypeError('Audio stream chunks must be Buffer, ArrayBuffer, or TypedArray values');\n }\n\n private sendEvent(event: XAIClientEvent): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN || this.state !== 'open') {\n if (this.closedByUser) {\n this.emit('error', { message: 'Cannot send event after close()' });\n return;\n }\n this.queue.push(event);\n return;\n }\n\n try {\n this.ws.send(JSON.stringify(this.stripUndefined(event)));\n } catch (err) {\n this.emitError(err);\n }\n }\n\n private flushQueue(): void {\n const queuedEvents = this.queue.splice(0, this.queue.length);\n for (const event of queuedEvents) {\n this.sendEvent(event);\n }\n }\n\n private waitForOpen(ws: WSType): Promise<void> {\n return new Promise((resolve, reject) => {\n if (ws.readyState === WebSocket.OPEN) {\n resolve();\n return;\n }\n\n const onOpen = () => {\n cleanup();\n resolve();\n };\n\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n\n const onClose = () => {\n cleanup();\n reject(new Error('WebSocket closed before opening'));\n };\n\n const cleanup = () => {\n ws.off?.('open', onOpen);\n ws.off?.('error', onError);\n ws.off?.('close', onClose);\n };\n\n ws.on('open', onOpen);\n ws.on('error', onError);\n ws.on('close', onClose);\n });\n }\n\n private getResponseId(event: XAIServerEvent): string {\n return (\n event.response_id ||\n event.response?.id ||\n event.item_id ||\n `fallback:${this.sessionGeneration}:${++this.fallbackResponseCounter}`\n );\n }\n\n private createSpeakerStream(responseId: string): StreamWithId {\n const existing = this.speakerStreams.get(responseId);\n if (existing) {\n return existing;\n }\n\n const stream = new PassThrough() as StreamWithId;\n stream.id = responseId;\n this.speakerStreams.set(responseId, stream);\n this.emit('speaker', stream);\n return stream;\n }\n\n private closeSpeakerStreams(): void {\n for (const stream of this.speakerStreams.values()) {\n stream.end();\n }\n this.speakerStreams.clear();\n }\n\n private endSpeakerStream(responseId: string): void {\n this.speakerStreams.get(responseId)?.end();\n this.speakerStreams.delete(responseId);\n }\n\n private cleanupSessionState(): void {\n this.sessionGeneration += 1;\n this.queue.length = 0;\n for (const cleanup of [...this.audioStreamCleanups]) {\n cleanup();\n }\n this.audioStreamCleanups.clear();\n for (const state of this.functionResponses.values()) {\n this.clearMissingFunctionCallTimeout(state);\n }\n this.functionResponses.clear();\n this.requestContext = undefined;\n this.closeSpeakerStreams();\n }\n\n private emit(event: string, ...args: any[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n for (const callback of callbacks) {\n callback(...args);\n }\n }\n\n private emitError(err: unknown): void {\n this.emit('error', {\n message: err instanceof Error ? err.message : String(err),\n details: err,\n });\n }\n\n private stripUndefined<T>(value: T, seen = new WeakSet<object>(), depth = 0, maxDepth = 100): T {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (depth >= maxDepth) {\n throw new Error('Cannot serialize xAI realtime event: maximum object depth exceeded');\n }\n\n const objectValue = value as object;\n if (Buffer.isBuffer(value) || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return value;\n }\n\n if (seen.has(objectValue)) {\n return undefined as T;\n }\n\n seen.add(objectValue);\n\n if (Array.isArray(value)) {\n const result = value\n .map(item => this.stripUndefined(item, seen, depth + 1, maxDepth))\n .filter(item => item !== undefined) as T;\n seen.delete(objectValue);\n return result;\n }\n\n const result = Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .map(([key, entry]) => [key, this.stripUndefined(entry, seen, depth + 1, maxDepth)])\n .filter(([, entry]) => entry !== undefined),\n ) as T;\n\n seen.delete(objectValue);\n return result;\n }\n\n private async readInputStream(input: NodeJS.ReadableStream): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks);\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/utils.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","import { Readable } from 'node:stream';\nimport type { ToolsInput } from '@internal/voice';\nimport { isZodType, standardSchemaToJSONSchema, toStandardSchema } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport type { XAIFunctionTool } from './types';\n\ntype ToolInvocationOptions = {\n toolCallId: string;\n messages: unknown[];\n requestContext?: unknown;\n};\n\ntype ToolExecute = (args: unknown, options: ToolInvocationOptions) => unknown;\n\nexport type XAIExecuteFunction = (\n args: unknown,\n options: { toolCallId: string; requestContext?: unknown },\n) => Promise<unknown>;\nexport type XAITransformedTool = { xaiTool: XAIFunctionTool; execute: XAIExecuteFunction };\n\n/**\n * Minimal logger contract accepted by {@link transformTools}. Pass the\n * voice provider's `this.logger` from inside the class so warnings respect\n * the configured Mastra log level instead of writing to stdout/stderr\n * unconditionally.\n */\nexport type XAITransformToolsLogger = { warn(message: string): void };\n\nexport const isReadableStream = (obj: unknown): obj is NodeJS.ReadableStream => {\n return (\n !!obj &&\n obj instanceof Readable &&\n typeof obj.read === 'function' &&\n typeof obj.pipe === 'function' &&\n obj.readable === true\n );\n};\n\nexport const int16ArrayToBase64 = (int16Array: Int16Array): string => {\n const buffer = new ArrayBuffer(int16Array.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < int16Array.length; i++) {\n // xAI's documented PCM format is Linear16 little-endian.\n view.setInt16(i * 2, int16Array[i]!, true);\n }\n return Buffer.from(buffer).toString('base64');\n};\n\nexport const readableToBuffer = async (stream: NodeJS.ReadableStream): Promise<Buffer> => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n};\n\nexport const readableToBase64 = async (stream: NodeJS.ReadableStream): Promise<string> => {\n return (await readableToBuffer(stream)).toString('base64');\n};\n\nexport const transformTools = (tools?: ToolsInput, logger: XAITransformToolsLogger = console) => {\n const xaiTools: XAITransformedTool[] = [];\n\n for (const [name, tool] of Object.entries(tools || {})) {\n let parameters: Record<string, unknown>;\n\n try {\n if ('inputSchema' in tool && tool.inputSchema) {\n parameters = schemaToJsonSchema(tool.inputSchema);\n } else if ('parameters' in tool && tool.parameters) {\n parameters = schemaToJsonSchema(tool.parameters);\n } else {\n continue;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to transform xAI realtime tool \"${name}\" schema: ${message}`);\n }\n\n if (!tool.execute) {\n logger.warn(`Skipping xAI realtime tool \"${name}\" because it has no execute function.`);\n continue;\n }\n\n xaiTools.push({\n xaiTool: {\n type: 'function',\n name,\n description: tool.description || `Tool: ${name}`,\n parameters,\n },\n execute: async (args, options) => {\n if (!tool.execute) {\n throw new Error(`Tool ${name} has no execute function`);\n }\n\n const execute = tool.execute as ToolExecute;\n const callOptions = {\n toolCallId: options.toolCallId,\n messages: [],\n requestContext: options.requestContext,\n } satisfies ToolInvocationOptions;\n\n return execute(args, callOptions);\n },\n });\n }\n\n return xaiTools;\n};\n\nfunction schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n let jsonSchema: Record<string, unknown>;\n\n if (isZodType(schema)) {\n jsonSchema = zodToJsonSchema(schema) as Record<string, unknown>;\n } else {\n jsonSchema = standardSchemaToJSONSchema(toStandardSchema(schema as any), { io: 'input' }) as Record<\n string,\n unknown\n >;\n }\n\n delete jsonSchema.$schema;\n return jsonSchema;\n}\n","import { PassThrough } from 'node:stream';\nimport { MastraVoice } from '@internal/voice';\nimport type { RequestContext, ToolsInput, VoiceConfig, VoiceEventType } from '@internal/voice';\nimport type { WebSocket as WSType } from 'ws';\nimport { WebSocket } from 'ws';\nimport type {\n XAIClientEvent,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerEvent,\n XAISessionConfig,\n XAISpeaker,\n XAITurnDetection,\n XAITool,\n XAIVoice,\n} from './types';\nimport type { XAIExecuteFunction, XAITransformedTool } from './utils';\nimport { int16ArrayToBase64, isReadableStream, readableToBase64, transformTools } from './utils';\n\nexport type {\n XAIAudioConfig,\n XAIAudioFormat,\n XAIAudioFormatType,\n XAIFunctionTool,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerTool,\n XAISessionConfig,\n XAISpeaker,\n XAITool,\n XAITurnDetection,\n XAIVoice,\n} from './types';\n\ntype EventCallback = (...args: any[]) => void;\ntype StreamWithId = PassThrough & { id: string };\ntype ConnectionState = 'closed' | 'connecting' | 'open';\n\nconst DEFAULT_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL: XAIRealtimeModel = 'grok-voice-think-fast-1.0';\nconst DEFAULT_VOICE: XAIVoice = 'eve';\n\nconst DEFAULT_TURN_DETECTION: XAITurnDetection = {\n type: 'server_vad',\n};\nconst FUNCTION_CALL_ARGUMENT_TIMEOUT_MS = 30_000;\n\nconst DEFAULT_AUDIO = {\n input: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n output: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n};\n\nconst XAI_SPEAKERS: XAISpeaker[] = [\n {\n voiceId: 'eve',\n name: 'Eve',\n gender: 'female',\n description: 'Energetic, upbeat default voice.',\n },\n {\n voiceId: 'ara',\n name: 'Ara',\n gender: 'female',\n description: 'Warm, friendly conversational voice.',\n },\n {\n voiceId: 'rex',\n name: 'Rex',\n gender: 'male',\n description: 'Confident, clear professional voice.',\n },\n {\n voiceId: 'sal',\n name: 'Sal',\n gender: 'neutral',\n description: 'Smooth, balanced general-purpose voice.',\n },\n {\n voiceId: 'leo',\n name: 'Leo',\n gender: 'male',\n description: 'Authoritative, strong instructional voice.',\n },\n];\n\ninterface PendingFunctionResponse {\n pending: Set<Promise<void>>;\n expectedCallIds: Set<string>;\n startedCallIds: Set<string>;\n completedCallIds: Set<string>;\n missingCallTimeout?: ReturnType<typeof setTimeout>;\n sessionGeneration: number;\n responseDone: boolean;\n continuationSent: boolean;\n hasFunctionCall: boolean;\n}\n\ninterface FunctionCallEvent {\n responseId: string;\n callId: string;\n name: string;\n arguments: string;\n sessionGeneration: number;\n}\n\ntype ParsedFunctionArguments = { ok: true; value: unknown } | { ok: false; rawArguments: string; error: SyntaxError };\n\n/**\n * Realtime Grok Voice Agent API provider for Mastra.\n *\n * This provider follows Mastra's realtime voice contract while keeping xAI's\n * endpoint, authentication, voices, event names, and tool behavior explicit.\n */\nexport class XAIRealtimeVoice extends MastraVoice<\n XAIRealtimeVoiceConfig,\n XAIRealtimeSpeakOptions,\n XAIRealtimeListenOptions,\n ToolsInput,\n XAIRealtimeEventMap,\n XAISpeaker\n> {\n private ws?: WSType;\n private state: ConnectionState = 'closed';\n private readonly events = new Map<string, EventCallback[]>();\n private readonly queue: XAIClientEvent[] = [];\n private readonly speakerStreams = new Map<string, StreamWithId>();\n private readonly functionResponses = new Map<string, PendingFunctionResponse>();\n private readonly audioStreamCleanups = new Set<() => void>();\n private requestContext?: RequestContext;\n private instructions?: string;\n private tools?: ToolsInput;\n private transformedTools?: XAITransformedTool[];\n private readonly options: XAIRealtimeVoiceConfig;\n private readonly debug: boolean;\n private closedByUser = false;\n private connectPromise?: Promise<void>;\n private sessionGeneration = 0;\n private fallbackResponseCounter = 0;\n\n constructor(config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig = {}) {\n const normalizedConfig = XAIRealtimeVoice.normalizeConfig(config);\n super(normalizedConfig);\n\n this.options = normalizedConfig.realtimeConfig?.options || {};\n this.instructions = this.options.instructions;\n this.speaker = normalizedConfig.speaker || this.options.speaker || DEFAULT_VOICE;\n this.debug = this.options.debug || false;\n }\n\n private static normalizeConfig(\n config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig,\n ): VoiceConfig<XAIRealtimeVoiceConfig> {\n if ('realtimeConfig' in config || 'speechModel' in config || 'listeningModel' in config) {\n const voiceConfig = config as VoiceConfig<XAIRealtimeVoiceConfig>;\n const options = voiceConfig.realtimeConfig?.options || {};\n return {\n ...voiceConfig,\n speaker: voiceConfig.speaker || options.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: voiceConfig.realtimeConfig?.model || options.model || DEFAULT_MODEL,\n apiKey: voiceConfig.realtimeConfig?.apiKey || options.apiKey,\n options,\n },\n };\n }\n\n const xaiConfig = config as XAIRealtimeVoiceConfig;\n return {\n speaker: xaiConfig.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: xaiConfig.model || DEFAULT_MODEL,\n apiKey: xaiConfig.apiKey,\n options: xaiConfig,\n },\n };\n }\n\n getSpeakers(): Promise<XAISpeaker[]> {\n return Promise.resolve(XAI_SPEAKERS);\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n return { enabled: true };\n }\n\n addInstructions(instructions?: string): void {\n this.instructions = instructions ?? '';\n if (this.state === 'open') {\n this.updateConfig({ instructions: this.instructions });\n }\n }\n\n addTools(tools?: ToolsInput): void {\n this.tools = tools || {};\n this.transformedTools = undefined;\n if (this.state === 'open') {\n this.updateConfig({ tools: this.buildSessionTools() });\n }\n }\n\n updateConfig(sessionConfig: Partial<XAISessionConfig>): void {\n this.sendEvent({\n type: 'session.update',\n session: this.stripUndefined(sessionConfig) as XAISessionConfig,\n });\n }\n\n async connect({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n if (this.state === 'open') {\n return;\n }\n\n if (this.state === 'connecting' && this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.openConnection({ requestContext });\n\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n private async openConnection({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n const apiKey = this.options.apiKey || this.realtimeConfig?.apiKey || process.env.XAI_API_KEY;\n const ephemeralToken = this.options.ephemeralToken;\n\n if (!apiKey && !ephemeralToken) {\n throw new Error('xAI API key is required. Set XAI_API_KEY, pass apiKey, or pass ephemeralToken.');\n }\n\n this.requestContext = requestContext;\n this.closedByUser = false;\n this.state = 'connecting';\n this.sessionGeneration += 1;\n\n const url = this.buildUrl();\n const protocols = ephemeralToken ? [`xai-client-secret.${ephemeralToken}`] : undefined;\n const wsOptions =\n !ephemeralToken && apiKey\n ? {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n }\n : undefined;\n\n const ws = new WebSocket(url, protocols, wsOptions);\n this.ws = ws;\n this.setupEventListeners(ws);\n\n try {\n await this.waitForOpen(ws);\n this.state = 'open';\n this.updateConfig(this.buildInitialSessionConfig());\n this.flushQueue();\n } catch (err) {\n this.cleanupSessionState();\n this.state = 'closed';\n this.ws = undefined;\n ws.close();\n throw err;\n }\n }\n\n close(): void {\n const ws = this.ws;\n this.state = 'closed';\n this.closedByUser = true;\n this.connectPromise = undefined;\n this.ws = undefined;\n this.cleanupSessionState();\n ws?.close();\n if (ws) {\n this.emit('close', { code: 1000, reason: 'closed' });\n }\n }\n\n disconnect(): void {\n this.close();\n }\n\n async speak(input: string | NodeJS.ReadableStream, options: XAIRealtimeSpeakOptions = {}): Promise<void> {\n const text = typeof input === 'string' ? input : (await this.readInputStream(input)).toString('utf-8');\n\n if (text.trim().length === 0) {\n throw new Error('Input text is empty');\n }\n\n if (options.speaker && options.speaker !== this.speaker) {\n this.speaker = options.speaker;\n this.updateConfig({ voice: options.speaker });\n }\n\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n\n await this.answer({ response: options.response });\n }\n\n async listen(audioData: NodeJS.ReadableStream | unknown, options: XAIRealtimeListenOptions = {}): Promise<void> {\n if (!isReadableStream(audioData)) {\n this.emit('error', { message: 'Unsupported audio data format' });\n return;\n }\n\n this.appendAudio(await readableToBase64(audioData));\n\n if (options.commit ?? true) {\n await this.commitAudioBuffer();\n }\n\n if (options.createResponse ?? true) {\n await this.answer({ response: options.response });\n }\n }\n\n async send(audioData: NodeJS.ReadableStream | Int16Array, eventId?: string): Promise<void> {\n if (this.state !== 'open' || !this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.emit('error', { message: 'Cannot send audio before connect() is open' });\n return;\n }\n\n if (isReadableStream(audioData)) {\n const cleanup = () => {\n audioData.removeListener('data', onData);\n audioData.removeListener('error', onError);\n audioData.removeListener('end', onEnd);\n audioData.removeListener('close', onEnd);\n this.audioStreamCleanups.delete(cleanup);\n };\n const onData = (chunk: unknown) => {\n try {\n const buffer = this.normalizeAudioChunk(chunk);\n this.appendAudio(buffer.toString('base64'), eventId);\n } catch (err) {\n this.emitError(err);\n cleanup();\n }\n };\n const onError = (err: Error) => {\n this.emitError(err);\n cleanup();\n };\n const onEnd = () => cleanup();\n\n this.audioStreamCleanups.add(cleanup);\n audioData.on('data', onData);\n audioData.on('error', onError);\n audioData.on('end', onEnd);\n audioData.on('close', onEnd);\n return;\n }\n\n if (audioData instanceof Int16Array) {\n this.appendAudio(int16ArrayToBase64(audioData), eventId);\n return;\n }\n\n this.emit('error', { message: 'Unsupported audio data format' });\n }\n\n async commitAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.commit', event_id: eventId });\n }\n\n async clearAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.clear', event_id: eventId });\n }\n\n async cancelResponse(responseId?: string, eventId?: string): Promise<void> {\n this.sendEvent({ type: 'response.cancel', response_id: responseId, event_id: eventId });\n }\n\n async answer(options: XAIRealtimeAnswerOptions = {}): Promise<void> {\n this.sendEvent({\n type: 'response.create',\n ...(options.response ? { response: options.response } : {}),\n });\n }\n\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event) || [];\n callbacks.push(callback as EventCallback);\n this.events.set(event, callbacks);\n }\n\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback as EventCallback);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n private buildUrl(): string {\n const baseUrl = this.options.url || DEFAULT_URL;\n const url = new URL(baseUrl);\n url.searchParams.set('model', this.realtimeConfig?.model || this.options.model || DEFAULT_MODEL);\n return url.toString();\n }\n\n private buildInitialSessionConfig(): XAISessionConfig {\n const session = this.options.session || {};\n return this.stripUndefined({\n ...session,\n instructions: this.instructions,\n voice: this.speaker as XAIVoice,\n turn_detection: session.turn_detection ?? this.options.turnDetection ?? DEFAULT_TURN_DETECTION,\n audio: session.audio ?? this.options.audio ?? DEFAULT_AUDIO,\n tools: this.buildSessionTools(),\n }) as XAISessionConfig;\n }\n\n private buildSessionTools(): XAITool[] {\n const serverTools = [...(this.options.session?.tools || []), ...(this.options.serverTools || [])];\n const functionTools = this.getTransformedTools().map(tool => tool.xaiTool);\n return [...serverTools, ...functionTools];\n }\n\n private getTransformedTools(): XAITransformedTool[] {\n this.transformedTools ??= transformTools(this.tools, this.logger);\n return this.transformedTools;\n }\n\n private setupEventListeners(ws: WSType): void {\n ws.on('message', message => {\n if (this.ws !== ws) {\n return;\n }\n\n try {\n const event = JSON.parse(message.toString()) as XAIServerEvent;\n this.handleServerEvent(event);\n } catch (err) {\n this.emitError(err);\n }\n });\n\n ws.on('error', err => {\n if (this.ws !== ws) {\n return;\n }\n\n if (this.state === 'open') {\n this.emitError(err);\n }\n });\n\n ws.on('close', (code, reason) => {\n if (this.ws !== ws) {\n return;\n }\n\n this.state = 'closed';\n this.ws = undefined;\n this.connectPromise = undefined;\n this.cleanupSessionState();\n this.emit('close', { code, reason: reason?.toString?.() });\n });\n }\n\n private handleServerEvent(event: XAIServerEvent): void {\n if (this.debug) {\n const { delta, ...fields } = event;\n this.logger.debug(`[xAI realtime] ${event.type}`, { ...fields, deltaLength: delta?.length });\n }\n\n if (event.type !== 'error') {\n this.emit(event.type, event);\n }\n\n switch (event.type) {\n case 'session.created':\n case 'session.updated':\n case 'response.created':\n if (event.type === 'response.created') {\n this.createSpeakerStream(this.getResponseId(event));\n }\n return;\n case 'response.output_audio.delta':\n case 'response.audio.delta':\n this.handleAudioDelta(event);\n return;\n case 'response.output_audio.done':\n case 'response.audio.done':\n this.handleAudioDone(event);\n return;\n case 'response.text.delta':\n case 'response.output_text.delta':\n case 'response.audio_transcript.delta':\n case 'response.output_audio_transcript.delta':\n this.emit('writing', { text: event.delta || '', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'response.text.done':\n case 'response.output_text.done':\n case 'response.audio_transcript.done':\n case 'response.output_audio_transcript.done':\n this.emit('writing', { text: '\\n', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'conversation.item.input_audio_transcription.completed':\n case 'conversation.item.input_audio_transcription.done':\n this.emit('writing', {\n text: event.transcript || event.text || event.delta || '',\n response_id: this.getResponseId(event),\n role: 'user',\n });\n return;\n case 'response.function_call_arguments.done':\n this.handleFunctionCallEvent(event);\n return;\n case 'response.done':\n void this.handleResponseDone(event);\n return;\n case 'error':\n this.emit('error', {\n message: event.error?.message || 'xAI realtime error',\n code: event.error?.code || event.error?.type,\n details: event,\n });\n return;\n default:\n return;\n }\n }\n\n private handleAudioDelta(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n const audio = event.delta || '';\n const audioData = Buffer.from(audio, 'base64');\n const stream = this.createSpeakerStream(responseId);\n stream.write(audioData);\n this.emit('speaking', { audio, audioData, response_id: responseId });\n }\n\n private handleAudioDone(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n this.emit('speaking.done', { response_id: responseId });\n this.endSpeakerStream(responseId);\n }\n\n private handleFunctionCallEvent(event: XAIServerEvent): void {\n const call = this.normalizeFunctionCallEvent(event);\n if (!call) {\n this.emit('error', {\n message: 'Invalid xAI function call event',\n details: event,\n });\n return;\n }\n\n const state = this.getFunctionResponseState(call.responseId);\n state.hasFunctionCall = true;\n state.expectedCallIds.add(call.callId);\n\n if (state.startedCallIds.has(call.callId)) {\n return;\n }\n\n state.startedCallIds.add(call.callId);\n const pending = this.executeFunctionCall(call).finally(() => {\n state.completedCallIds.add(call.callId);\n state.pending.delete(pending);\n void this.maybeContinueAfterFunctionCalls(call.responseId);\n });\n\n state.pending.add(pending);\n }\n\n private async handleResponseDone(event: XAIServerEvent): Promise<void> {\n const responseId = this.getResponseId(event);\n this.endSpeakerStream(responseId);\n\n const expectedCallIds = this.getFunctionCallIds(event);\n const state =\n this.functionResponses.get(responseId) ||\n (expectedCallIds.length > 0 ? this.getFunctionResponseState(responseId) : undefined);\n\n if (!state) {\n return;\n }\n\n for (const callId of expectedCallIds) {\n state.expectedCallIds.add(callId);\n }\n\n state.hasFunctionCall ||= expectedCallIds.length > 0;\n state.responseDone = true;\n await this.maybeContinueAfterFunctionCalls(responseId);\n }\n\n private getFunctionCallIds(event: XAIServerEvent): string[] {\n return (\n event.response?.output\n ?.filter(output => output.type === 'function_call' && typeof output.call_id === 'string')\n .map(output => output.call_id as string) || []\n );\n }\n\n private async executeFunctionCall(call: FunctionCallEvent): Promise<void> {\n const tool = this.tools?.[call.name];\n const parsedArgs = this.parseFunctionArguments(call.arguments);\n if (!parsedArgs.ok) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = `Failed to parse xAI function call arguments: ${parsedArgs.error.message}`;\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: {\n call_id: call.callId,\n name: call.name,\n arguments: parsedArgs.rawArguments,\n error: parsedArgs.error,\n },\n });\n return;\n }\n\n const args = parsedArgs.value;\n\n try {\n if (!tool?.execute) {\n throw new Error(`Tool \"${call.name}\" not found`);\n }\n\n this.emit('tool-call-start', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n });\n\n const result = await this.executeTool(call.name, call.callId, args);\n\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n this.emit('tool-call-result', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n result,\n });\n\n this.sendFunctionOutput(call.callId, result);\n } catch (err) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: { call_id: call.callId, name: call.name },\n });\n }\n }\n\n private async executeTool(name: string, callId: string, args: unknown): Promise<unknown> {\n const transformedTool = this.getTransformedTools().find(tool => tool.xaiTool.name === name);\n\n if (!transformedTool) {\n throw new Error(`Tool \"${name}\" not found`);\n }\n\n return (transformedTool.execute as XAIExecuteFunction)(args, {\n toolCallId: callId,\n requestContext: this.requestContext,\n });\n }\n\n private sendFunctionOutput(callId: string, output: unknown): void {\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output ?? null),\n },\n });\n }\n\n private isCurrentSession(sessionGeneration: number): boolean {\n return this.state === 'open' && this.sessionGeneration === sessionGeneration;\n }\n\n private async maybeContinueAfterFunctionCalls(responseId: string): Promise<void> {\n const state = this.functionResponses.get(responseId);\n const hasPendingExpectedCall =\n state?.expectedCallIds && [...state.expectedCallIds].some(callId => !state.completedCallIds.has(callId));\n\n if (state && hasPendingExpectedCall) {\n this.scheduleMissingFunctionCallTimeout(responseId, state);\n }\n\n if (\n !state ||\n !state.hasFunctionCall ||\n state.continuationSent ||\n !state.responseDone ||\n state.pending.size > 0 ||\n hasPendingExpectedCall\n ) {\n return;\n }\n\n state.continuationSent = true;\n this.clearMissingFunctionCallTimeout(state);\n this.sendEvent({ type: 'response.create' });\n this.functionResponses.delete(responseId);\n }\n\n private scheduleMissingFunctionCallTimeout(responseId: string, state: PendingFunctionResponse): void {\n if (state.missingCallTimeout || !state.responseDone) {\n return;\n }\n\n state.missingCallTimeout = setTimeout(() => {\n if (!this.isCurrentSession(state.sessionGeneration) || this.functionResponses.get(responseId) !== state) {\n return;\n }\n\n state.missingCallTimeout = undefined;\n const missingCallIds = [...state.expectedCallIds].filter(callId => !state.startedCallIds.has(callId));\n if (missingCallIds.length === 0) {\n void this.maybeContinueAfterFunctionCalls(responseId);\n return;\n }\n\n const message = `Timed out waiting for xAI function call arguments for ${missingCallIds.join(', ')}`;\n for (const callId of missingCallIds) {\n state.completedCallIds.add(callId);\n this.sendFunctionOutput(callId, { error: message });\n }\n this.emit('error', { message, details: { response_id: responseId, call_ids: missingCallIds } });\n void this.maybeContinueAfterFunctionCalls(responseId);\n }, FUNCTION_CALL_ARGUMENT_TIMEOUT_MS);\n }\n\n private clearMissingFunctionCallTimeout(state: PendingFunctionResponse): void {\n if (state.missingCallTimeout) {\n clearTimeout(state.missingCallTimeout);\n state.missingCallTimeout = undefined;\n }\n }\n\n private getFunctionResponseState(responseId: string): PendingFunctionResponse {\n let state = this.functionResponses.get(responseId);\n if (!state) {\n state = {\n pending: new Set(),\n expectedCallIds: new Set(),\n startedCallIds: new Set(),\n completedCallIds: new Set(),\n sessionGeneration: this.sessionGeneration,\n responseDone: false,\n continuationSent: false,\n hasFunctionCall: false,\n };\n this.functionResponses.set(responseId, state);\n }\n return state;\n }\n\n private normalizeFunctionCallEvent(event: XAIServerEvent): FunctionCallEvent | undefined {\n if (!event.call_id || !event.name || typeof event.arguments !== 'string') {\n return undefined;\n }\n\n return {\n responseId: this.getResponseId(event),\n callId: event.call_id,\n name: event.name,\n arguments: event.arguments,\n sessionGeneration: this.sessionGeneration,\n };\n }\n\n private parseFunctionArguments(args: string): ParsedFunctionArguments {\n try {\n return { ok: true, value: JSON.parse(args || '{}') };\n } catch (err) {\n return { ok: false, rawArguments: args, error: err as SyntaxError };\n }\n }\n\n private appendAudio(audio: string, eventId?: string): void {\n this.sendEvent({ type: 'input_audio_buffer.append', audio, event_id: eventId });\n }\n\n private normalizeAudioChunk(chunk: unknown): Buffer {\n if (Buffer.isBuffer(chunk)) {\n return chunk;\n }\n\n if (chunk instanceof ArrayBuffer) {\n return Buffer.from(chunk);\n }\n\n if (ArrayBuffer.isView(chunk)) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n throw new TypeError('Audio stream chunks must be Buffer, ArrayBuffer, or TypedArray values');\n }\n\n private sendEvent(event: XAIClientEvent): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN || this.state !== 'open') {\n if (this.closedByUser) {\n this.emit('error', { message: 'Cannot send event after close()' });\n return;\n }\n this.queue.push(event);\n return;\n }\n\n try {\n this.ws.send(JSON.stringify(this.stripUndefined(event)));\n } catch (err) {\n this.emitError(err);\n }\n }\n\n private flushQueue(): void {\n const queuedEvents = this.queue.splice(0, this.queue.length);\n for (const event of queuedEvents) {\n this.sendEvent(event);\n }\n }\n\n private waitForOpen(ws: WSType): Promise<void> {\n return new Promise((resolve, reject) => {\n if (ws.readyState === WebSocket.OPEN) {\n resolve();\n return;\n }\n\n const onOpen = () => {\n cleanup();\n resolve();\n };\n\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n\n const onClose = () => {\n cleanup();\n reject(new Error('WebSocket closed before opening'));\n };\n\n const cleanup = () => {\n ws.off?.('open', onOpen);\n ws.off?.('error', onError);\n ws.off?.('close', onClose);\n };\n\n ws.on('open', onOpen);\n ws.on('error', onError);\n ws.on('close', onClose);\n });\n }\n\n private getResponseId(event: XAIServerEvent): string {\n return (\n event.response_id ||\n event.response?.id ||\n event.item_id ||\n `fallback:${this.sessionGeneration}:${++this.fallbackResponseCounter}`\n );\n }\n\n private createSpeakerStream(responseId: string): StreamWithId {\n const existing = this.speakerStreams.get(responseId);\n if (existing) {\n return existing;\n }\n\n const stream = new PassThrough() as StreamWithId;\n stream.id = responseId;\n this.speakerStreams.set(responseId, stream);\n this.emit('speaker', stream);\n return stream;\n }\n\n private closeSpeakerStreams(): void {\n for (const stream of this.speakerStreams.values()) {\n stream.end();\n }\n this.speakerStreams.clear();\n }\n\n private endSpeakerStream(responseId: string): void {\n this.speakerStreams.get(responseId)?.end();\n this.speakerStreams.delete(responseId);\n }\n\n private cleanupSessionState(): void {\n this.sessionGeneration += 1;\n this.queue.length = 0;\n for (const cleanup of [...this.audioStreamCleanups]) {\n cleanup();\n }\n this.audioStreamCleanups.clear();\n for (const state of this.functionResponses.values()) {\n this.clearMissingFunctionCallTimeout(state);\n }\n this.functionResponses.clear();\n this.requestContext = undefined;\n this.closeSpeakerStreams();\n }\n\n private emit(event: string, ...args: any[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n for (const callback of callbacks) {\n callback(...args);\n }\n }\n\n private emitError(err: unknown): void {\n this.emit('error', {\n message: err instanceof Error ? err.message : String(err),\n details: err,\n });\n }\n\n private stripUndefined<T>(value: T, seen = new WeakSet<object>(), depth = 0, maxDepth = 100): T {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (depth >= maxDepth) {\n throw new Error('Cannot serialize xAI realtime event: maximum object depth exceeded');\n }\n\n const objectValue = value as object;\n if (Buffer.isBuffer(value) || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return value;\n }\n\n if (seen.has(objectValue)) {\n return undefined as T;\n }\n\n seen.add(objectValue);\n\n if (Array.isArray(value)) {\n const result = value\n .map(item => this.stripUndefined(item, seen, depth + 1, maxDepth))\n .filter(item => item !== undefined) as T;\n seen.delete(objectValue);\n return result;\n }\n\n const result = Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .map(([key, entry]) => [key, this.stripUndefined(entry, seen, depth + 1, maxDepth)])\n .filter(([, entry]) => entry !== undefined),\n ) as T;\n\n seen.delete(objectValue);\n return result;\n }\n\n private async readInputStream(input: NodeJS.ReadableStream): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/voice-xai-realtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Mastra xAI Grok Voice Agent API integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -25,21 +25,22 @@
|
|
|
25
25
|
"license": "Apache-2.0",
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ws": "^8.20.0",
|
|
28
|
-
"@mastra/schema-compat": "1.2.
|
|
28
|
+
"@mastra/schema-compat": "1.2.13"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@types/node": "22.19.
|
|
31
|
+
"@types/node": "22.19.21",
|
|
32
32
|
"@types/ws": "^8.18.1",
|
|
33
|
-
"@vitest/coverage-v8": "4.1.
|
|
34
|
-
"@vitest/ui": "4.1.
|
|
35
|
-
"eslint": "^10.
|
|
33
|
+
"@vitest/coverage-v8": "4.1.8",
|
|
34
|
+
"@vitest/ui": "4.1.8",
|
|
35
|
+
"eslint": "^10.4.1",
|
|
36
36
|
"tsup": "^8.5.1",
|
|
37
|
+
"tsx": "^4.22.4",
|
|
37
38
|
"typescript": "^6.0.3",
|
|
38
|
-
"vitest": "4.1.
|
|
39
|
+
"vitest": "4.1.8",
|
|
39
40
|
"zod": "^4.4.3",
|
|
40
|
-
"@internal/lint": "0.0.
|
|
41
|
-
"@internal/types-builder": "0.0.
|
|
42
|
-
"@internal/voice": "0.0.
|
|
41
|
+
"@internal/lint": "0.0.105",
|
|
42
|
+
"@internal/types-builder": "0.0.80",
|
|
43
|
+
"@internal/voice": "0.0.6"
|
|
43
44
|
},
|
|
44
45
|
"peerDependencies": {
|
|
45
46
|
"zod": "^3.25.0 || ^4.0.0"
|