@mastra/core
Version:
1 lines • 20 kB
Source Map (JSON)
{"version":3,"file":"voice-BxFaQWuy.cjs","names":["MastraBase","experimental_generateSpeech","stream","PassThrough","experimental_transcribe","MastraError","ErrorDomain","ErrorCategory"],"sources":["../../_internals/voice/dist/aisdk-C_K-VCwq.js","../../_internals/voice/dist/voice/index.js"],"sourcesContent":["import { MastraBase } from \"@internal/core/base\";\nimport { PassThrough } from \"stream\";\nimport { experimental_generateSpeech, experimental_transcribe } from \"@internal/ai-sdk-v5\";\n//#region src/voice/voice.ts\nvar MastraVoice = class extends MastraBase {\n\tlisteningModel;\n\tspeechModel;\n\tspeaker;\n\trealtimeConfig;\n\tconstructor({ listeningModel, speechModel, speaker, realtimeConfig, name } = {}) {\n\t\tsuper({\n\t\t\tcomponent: \"VOICE\",\n\t\t\tname\n\t\t});\n\t\tthis.listeningModel = listeningModel;\n\t\tthis.speechModel = speechModel;\n\t\tthis.speaker = speaker;\n\t\tthis.realtimeConfig = realtimeConfig;\n\t}\n\t/**\n\t* Custom serialization for tracing/observability spans.\n\t* Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n\t* and any provider-specific state held by subclasses. Subclasses that\n\t* need to expose additional non-sensitive fields can override.\n\t*/\n\tserializeForSpan() {\n\t\treturn {\n\t\t\tcomponent: \"VOICE\",\n\t\t\tname: this.name,\n\t\t\tspeaker: this.speaker,\n\t\t\tlisteningModel: this.listeningModel ? { name: this.listeningModel.name } : void 0,\n\t\t\tspeechModel: this.speechModel ? { name: this.speechModel.name } : void 0,\n\t\t\trealtimeModel: this.realtimeConfig?.model\n\t\t};\n\t}\n\tupdateConfig(_options) {\n\t\tthis.logger.debug(\"updateConfig not implemented by this voice provider\");\n\t}\n\t/**\n\t* Initializes a WebSocket or WebRTC connection for real-time communication\n\t* @returns Promise that resolves when the connection is established\n\t*/\n\tasync connect(_options) {\n\t\tthis.logger.debug(\"connect not implemented by this voice provider\");\n\t}\n\t/**\n\t* Relay audio data to the voice provider for real-time processing\n\t* @param audioData Audio data to relay\n\t*/\n\tasync send(_audioData) {\n\t\tthis.logger.debug(\"relay not implemented by this voice provider\");\n\t}\n\t/**\n\t* Trigger voice providers to respond\n\t*/\n\tasync answer(_options) {\n\t\tthis.logger.debug(\"answer not implemented by this voice provider\");\n\t}\n\t/**\n\t* Equip the voice provider with instructions\n\t* @param instructions Instructions to add\n\t*/\n\taddInstructions(_instructions) {}\n\t/**\n\t* Equip the voice provider with tools\n\t* @param tools Array of tools to add\n\t*/\n\taddTools(_tools) {}\n\t/**\n\t* Disconnect from the WebSocket or WebRTC connection\n\t*/\n\tclose() {\n\t\tthis.logger.debug(\"close not implemented by this voice provider\");\n\t}\n\t/**\n\t* Register an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function that receives event data\n\t*/\n\ton(_event, _callback) {\n\t\tthis.logger.debug(\"on not implemented by this voice provider\");\n\t}\n\t/**\n\t* Remove an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function to remove\n\t*/\n\toff(_event, _callback) {\n\t\tthis.logger.debug(\"off not implemented by this voice provider\");\n\t}\n\t/**\n\t* Get available speakers/voices\n\t* @returns Array of available voice IDs and their metadata\n\t*/\n\tgetSpeakers() {\n\t\tthis.logger.debug(\"getSpeakers not implemented by this voice provider\");\n\t\treturn Promise.resolve([]);\n\t}\n\t/**\n\t* Get available speakers/voices\n\t* @returns Array of available voice IDs and their metadata\n\t*/\n\tgetListener() {\n\t\tthis.logger.debug(\"getListener not implemented by this voice provider\");\n\t\treturn Promise.resolve({ enabled: false });\n\t}\n};\n//#endregion\n//#region src/voice/aisdk/speech.ts\nvar AISDKSpeech = class extends MastraVoice {\n\tmodel;\n\tdefaultVoice;\n\tconstructor(model, options) {\n\t\tsuper({ name: \"ai-sdk-speech\" });\n\t\tthis.model = model;\n\t\tthis.defaultVoice = options?.voice;\n\t}\n\tasync speak(input, options) {\n\t\tconst text = typeof input === \"string\" ? input : await this.streamToText(input);\n\t\tconst result = await experimental_generateSpeech({\n\t\t\tmodel: this.model,\n\t\t\ttext,\n\t\t\tvoice: options?.speaker || this.defaultVoice,\n\t\t\tlanguage: options?.language,\n\t\t\tproviderOptions: options?.providerOptions,\n\t\t\tabortSignal: options?.abortSignal,\n\t\t\theaders: options?.headers\n\t\t});\n\t\tconst stream = new PassThrough();\n\t\tstream.end(Buffer.from(result.audio.uint8Array));\n\t\treturn stream;\n\t}\n\tasync listen() {\n\t\tthrow new Error(\"AI SDK speech models do not support transcription. Use AISDKTranscription instead.\");\n\t}\n\tasync getSpeakers() {\n\t\treturn [];\n\t}\n\tasync getListener() {\n\t\treturn { enabled: false };\n\t}\n\tasync streamToText(stream) {\n\t\tconst chunks = [];\n\t\tfor await (const chunk of stream) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n\t\treturn Buffer.concat(chunks).toString(\"utf-8\");\n\t}\n};\n//#endregion\n//#region src/voice/aisdk/transcription.ts\nvar AISDKTranscription = class extends MastraVoice {\n\tmodel;\n\tconstructor(model) {\n\t\tsuper({ name: \"ai-sdk-transcription\" });\n\t\tthis.model = model;\n\t}\n\tasync speak() {\n\t\tthrow new Error(\"AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.\");\n\t}\n\tasync getSpeakers() {\n\t\treturn [];\n\t}\n\tasync getListener() {\n\t\treturn { enabled: true };\n\t}\n\t/**\n\t* Transcribe audio to text\n\t* For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n\t*/\n\tasync listen(audioStream, options) {\n\t\tconst audioBuffer = await this.convertToBuffer(audioStream);\n\t\treturn (await experimental_transcribe({\n\t\t\tmodel: this.model,\n\t\t\taudio: audioBuffer,\n\t\t\tproviderOptions: options?.providerOptions,\n\t\t\tabortSignal: options?.abortSignal,\n\t\t\theaders: options?.headers\n\t\t})).text;\n\t}\n\tasync convertToBuffer(audio) {\n\t\tif (Buffer.isBuffer(audio)) return audio;\n\t\tif (audio instanceof Uint8Array) return Buffer.from(audio);\n\t\tif (typeof audio === \"string\") return Buffer.from(audio, \"base64\");\n\t\tconst chunks = [];\n\t\tfor await (const chunk of audio) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n\t\treturn Buffer.concat(chunks);\n\t}\n};\n//#endregion\nexport { AISDKSpeech as n, MastraVoice as r, AISDKTranscription as t };\n\n//# sourceMappingURL=aisdk-C_K-VCwq.js.map","import { n as AISDKSpeech, r as MastraVoice, t as AISDKTranscription } from \"../aisdk-C_K-VCwq.js\";\nimport { ErrorCategory, ErrorDomain, MastraError } from \"@internal/core/error\";\n//#region src/voice/composite-voice.ts\nconst supportedSpecificationVersions = [\"v2\", \"v3\"];\nfunction isTranscriptionModel(obj) {\n\treturn obj && typeof obj === \"object\" && obj.modelId && supportedSpecificationVersions.includes(obj.specificationVersion);\n}\nfunction isSpeechModel(obj) {\n\treturn obj && typeof obj === \"object\" && obj.modelId && supportedSpecificationVersions.includes(obj.specificationVersion);\n}\nvar CompositeVoice = class extends MastraVoice {\n\tspeakProvider;\n\tlistenProvider;\n\trealtimeProvider;\n\tconstructor({ input, output, realtime }) {\n\t\tsuper();\n\t\tif (input) this.listenProvider = isTranscriptionModel(input) ? new AISDKTranscription(input) : input;\n\t\tif (output) this.speakProvider = isSpeechModel(output) ? new AISDKSpeech(output) : output;\n\t\tthis.realtimeProvider = realtime;\n\t}\n\t/**\n\t* Convert text to speech using the configured provider\n\t* @param input Text or text stream to convert to speech\n\t* @param options Speech options including speaker and provider-specific options\n\t* @returns Audio stream or void if in realtime mode\n\t*/\n\tasync speak(input, options) {\n\t\tif (this.realtimeProvider) return this.realtimeProvider.speak(input, options);\n\t\telse if (this.speakProvider) return this.speakProvider.speak(input, options);\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_SPEAK_PROVIDER\",\n\t\t\ttext: \"No speak provider or realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tasync listen(audioStream, options) {\n\t\tif (this.realtimeProvider) return await this.realtimeProvider.listen(audioStream, options);\n\t\telse if (this.listenProvider) return await this.listenProvider.listen(audioStream, options);\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_LISTEN_PROVIDER\",\n\t\t\ttext: \"No listen provider or realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tasync getSpeakers() {\n\t\tif (this.realtimeProvider) return this.realtimeProvider.getSpeakers();\n\t\telse if (this.speakProvider) return this.speakProvider.getSpeakers();\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_SPEAKERS_PROVIDER\",\n\t\t\ttext: \"No speak provider or realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tasync getListener() {\n\t\tif (this.realtimeProvider) return this.realtimeProvider.getListener();\n\t\telse if (this.listenProvider) return this.listenProvider.getListener();\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_LISTENER_PROVIDER\",\n\t\t\ttext: \"No listener provider or realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tupdateConfig(options) {\n\t\tif (!this.realtimeProvider) return;\n\t\tthis.realtimeProvider.updateConfig(options);\n\t}\n\t/**\n\t* Initializes a WebSocket or WebRTC connection for real-time communication\n\t* @returns Promise that resolves when the connection is established\n\t*/\n\tconnect(options) {\n\t\tif (!this.realtimeProvider) throw new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CONNECT\",\n\t\t\ttext: \"No realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t\treturn this.realtimeProvider.connect(options);\n\t}\n\t/**\n\t* Relay audio data to the voice provider for real-time processing\n\t* @param audioData Audio data to send\n\t*/\n\tsend(audioData) {\n\t\tif (!this.realtimeProvider) throw new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_REALTIME_PROVIDER_SEND\",\n\t\t\ttext: \"No realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t\treturn this.realtimeProvider.send(audioData);\n\t}\n\t/**\n\t* Trigger voice providers to respond\n\t*/\n\tanswer(options) {\n\t\tif (!this.realtimeProvider) throw new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ANSWER\",\n\t\t\ttext: \"No realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t\treturn this.realtimeProvider.answer(options);\n\t}\n\t/**\n\t* Equip the voice provider with instructions\n\t* @param instructions Instructions to add\n\t*/\n\taddInstructions(instructions) {\n\t\tif (!this.realtimeProvider) return;\n\t\tthis.realtimeProvider.addInstructions(instructions);\n\t}\n\t/**\n\t* Equip the voice provider with tools\n\t* @param tools Array of tools to add\n\t*/\n\taddTools(tools) {\n\t\tif (!this.realtimeProvider) return;\n\t\tthis.realtimeProvider.addTools(tools);\n\t}\n\t/**\n\t* Disconnect from the WebSocket or WebRTC connection\n\t*/\n\tclose() {\n\t\tif (!this.realtimeProvider) throw new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_REALTIME_PROVIDER_CLOSE\",\n\t\t\ttext: \"No realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t\tthis.realtimeProvider.close();\n\t}\n\t/**\n\t* Register an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function that receives event data\n\t*/\n\ton(event, callback) {\n\t\tif (!this.realtimeProvider) throw new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_REALTIME_PROVIDER_ON\",\n\t\t\ttext: \"No realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t\tthis.realtimeProvider.on(event, callback);\n\t}\n\t/**\n\t* Remove an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function to remove\n\t*/\n\toff(event, callback) {\n\t\tif (!this.realtimeProvider) throw new MastraError({\n\t\t\tid: \"VOICE_COMPOSITE_NO_REALTIME_PROVIDER_OFF\",\n\t\t\ttext: \"No realtime provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t\tthis.realtimeProvider.off(event, callback);\n\t}\n};\n//#endregion\n//#region src/voice/default-voice.ts\nvar DefaultVoice = class extends MastraVoice {\n\tconstructor() {\n\t\tsuper();\n\t}\n\tasync speak(_input) {\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_DEFAULT_NO_SPEAK_PROVIDER\",\n\t\t\ttext: \"No voice provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tasync listen(_input) {\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_DEFAULT_NO_LISTEN_PROVIDER\",\n\t\t\ttext: \"No voice provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tasync getSpeakers() {\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_DEFAULT_NO_SPEAKERS_PROVIDER\",\n\t\t\ttext: \"No voice provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n\tasync getListener() {\n\t\tthrow new MastraError({\n\t\t\tid: \"VOICE_DEFAULT_NO_LISTENER_PROVIDER\",\n\t\t\ttext: \"No voice provider configured\",\n\t\t\tdomain: ErrorDomain.MASTRA_VOICE,\n\t\t\tcategory: ErrorCategory.USER\n\t\t});\n\t}\n};\n//#endregion\nexport { AISDKSpeech, AISDKTranscription, CompositeVoice, DefaultVoice, MastraVoice };\n\n//# sourceMappingURL=index.js.map"],"mappings":"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"}