From 91a3af4e24dd2236df13e67569cf720d85e3ebcc Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Tue, 7 Apr 2026 12:38:52 +0530 Subject: [PATCH] fix(tts): carry OpenAI talk response format --- extensions/openai/speech-provider.test.ts | 26 +++++++++++++++++++++++ extensions/openai/speech-provider.ts | 2 ++ 2 files changed, 28 insertions(+) diff --git a/extensions/openai/speech-provider.test.ts b/extensions/openai/speech-provider.test.ts index f05f6512833..7b70ce763d6 100644 --- a/extensions/openai/speech-provider.test.ts +++ b/extensions/openai/speech-provider.test.ts @@ -77,6 +77,32 @@ describe("buildOpenAISpeechProvider", () => { }); }); + it("preserves talk responseFormat overrides", () => { + const provider = buildOpenAISpeechProvider(); + + expect( + provider.resolveTalkConfig?.({ + cfg: {} as never, + timeoutMs: 30_000, + baseTtsConfig: { + providers: { + openai: { + apiKey: "sk-base", + responseFormat: "mp3", + }, + }, + }, + talkProviderConfig: { + apiKey: "sk-talk", + responseFormat: " WAV ", + }, + }), + ).toMatchObject({ + apiKey: "sk-talk", + responseFormat: "wav", + }); + }); + it("uses wav for Groq-compatible OpenAI TTS endpoints", async () => { const provider = buildOpenAISpeechProvider(); const fetchMock = vi.fn(async (_url: string, init?: RequestInit) => { diff --git a/extensions/openai/speech-provider.ts b/extensions/openai/speech-provider.ts index 580430191d8..c5aa7b4a679 100644 --- a/extensions/openai/speech-provider.ts +++ b/extensions/openai/speech-provider.ts @@ -184,6 +184,7 @@ export function buildOpenAISpeechProvider(): SpeechProviderPlugin { parseDirectiveToken, resolveTalkConfig: ({ baseTtsConfig, talkProviderConfig }) => { const base = normalizeOpenAIProviderConfig(baseTtsConfig); + const responseFormat = normalizeOpenAISpeechResponseFormat(talkProviderConfig.responseFormat); return { ...base, ...(talkProviderConfig.apiKey === undefined @@ -209,6 +210,7 @@ export function buildOpenAISpeechProvider(): SpeechProviderPlugin { ...(trimToUndefined(talkProviderConfig.instructions) == null ? {} : { instructions: trimToUndefined(talkProviderConfig.instructions) }), + ...(responseFormat == null ? {} : { responseFormat }), }; }, resolveTalkOverrides: ({ params }) => ({