From 0a82a9c5172418ba3c217f06d6b35ed6ba5b10ff Mon Sep 17 00:00:00 2001 From: KooshaPari Date: Fri, 26 Jun 2026 05:29:33 -0700 Subject: [PATCH] fix(gemini): validate audio format before mime normalization --- open-sse/translator/helpers/geminiHelper.ts | 3 ++- tests/unit/gemini-helper-audio-input-912.test.ts | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/open-sse/translator/helpers/geminiHelper.ts b/open-sse/translator/helpers/geminiHelper.ts index 6f054bcb04..515765a2f2 100644 --- a/open-sse/translator/helpers/geminiHelper.ts +++ b/open-sse/translator/helpers/geminiHelper.ts @@ -96,7 +96,8 @@ export const DEFAULT_SAFETY_SETTINGS = [ ]; function normalizeAudioMimeType(format: unknown): string { - const normalized = String(format || "wav").toLowerCase(); + const normalized = + typeof format === "string" && format.trim() ? format.trim().toLowerCase() : "wav"; if (normalized === "mp3") { return "audio/mpeg"; } diff --git a/tests/unit/gemini-helper-audio-input-912.test.ts b/tests/unit/gemini-helper-audio-input-912.test.ts index 6ca2960110..205c45b817 100644 --- a/tests/unit/gemini-helper-audio-input-912.test.ts +++ b/tests/unit/gemini-helper-audio-input-912.test.ts @@ -39,3 +39,10 @@ test("convertOpenAIContentToParts defaults the audio mime type to audio/wav", () ]); assert.deepEqual(parts, [{ inlineData: { mimeType: "audio/wav", data: "QUJDRA==" } }]); }); + +test("convertOpenAIContentToParts ignores non-string audio format values", () => { + const parts = gemini.convertOpenAIContentToParts([ + { type: "input_audio", input_audio: { data: "QUJDRA==", format: 123 } }, + ]); + assert.deepEqual(parts, [{ inlineData: { mimeType: "audio/wav", data: "QUJDRA==" } }]); +});