diff --git a/.changeset/empty-coins-teach.md b/.changeset/empty-coins-teach.md new file mode 100644 index 000000000..db26fe3b9 --- /dev/null +++ b/.changeset/empty-coins-teach.md @@ -0,0 +1,7 @@ +--- +"@voltagent/voice": patch +--- + +fix(voice): Fix stream handling in ElevenLabs provider + +Fixes #62 diff --git a/packages/voice/src/providers/elevenlabs/index.ts b/packages/voice/src/providers/elevenlabs/index.ts index de1771859..c2b8e14f4 100644 --- a/packages/voice/src/providers/elevenlabs/index.ts +++ b/packages/voice/src/providers/elevenlabs/index.ts @@ -3,6 +3,7 @@ import type { Voice as ElevenLabsVoice } from "elevenlabs/api/types/Voice"; import type { VoiceMetadata } from "@voltagent/core"; import { BaseVoiceProvider } from "../base"; import type { ElevenLabsModel, ElevenLabsVoiceOptions } from "./types"; +import { Readable } from "node:stream"; export class ElevenLabsVoiceProvider extends BaseVoiceProvider { private readonly client: ElevenLabsClient; @@ -68,7 +69,7 @@ export class ElevenLabsVoiceProvider extends BaseVoiceProvider { throw new Error("Voice is required"); } - const response = await this.client.generate({ + const audioStream = await this.client.generate({ text, voice: voice, model_id: this.ttsModel, @@ -81,6 +82,9 @@ export class ElevenLabsVoiceProvider extends BaseVoiceProvider { stream: true, }); + // Convert the AsyncIterable stream to a readable stream + const response = Readable.from(audioStream); + return response; } catch (error) { this.emit("error", {