feat: add audio input support for Gemini translation (#913)

Add input_audio and audio_url content type handlers to
convertOpenAIContentToParts() in geminiHelper.js, converting
OpenAI audio format to Gemini inlineData format.

Also add audio types to VALID_OPENAI_CONTENT_TYPES in
openaiHelper.js so they are not stripped by filterToOpenAIFormat().

Fixes #912
This commit is contained in:
Muhammad Mugni Hadi
2026-05-07 15:51:30 +07:00
committed by GitHub
parent 25182ff772
commit 7f93df3a92
2 changed files with 18 additions and 1 deletions

View File

@@ -57,6 +57,23 @@ export function convertOpenAIContentToParts(content) {
parts.push({
fileData: { fileUri: item.image_url.url, mimeType: "image/*" }
});
} else if (item.type === "input_audio" && item.input_audio?.data) {
const format = item.input_audio.format || "wav";
const mimeType = format === "mp3" ? "audio/mpeg" : `audio/${format}`;
parts.push({
inlineData: { mime_type: mimeType, data: item.input_audio.data }
});
} else if (item.type === "audio_url" && item.audio_url?.url?.startsWith("data:")) {
const url = item.audio_url.url;
const commaIndex = url.indexOf(",");
if (commaIndex !== -1) {
const mimePart = url.substring(5, commaIndex);
const data = url.substring(commaIndex + 1);
const mimeType = mimePart.split(";")[0];
parts.push({
inlineData: { mime_type: mimeType, data: data }
});
}
}
}
}

View File

@@ -1,7 +1,7 @@
// OpenAI helper functions for translator
// Valid OpenAI content block types
export const VALID_OPENAI_CONTENT_TYPES = ["text", "image_url", "image"];
export const VALID_OPENAI_CONTENT_TYPES = ["text", "image_url", "image", "input_audio", "audio_url"];
export const VALID_OPENAI_MESSAGE_TYPES = ["text", "image_url", "image", "tool_calls", "tool_result"];
// Filter messages to OpenAI standard format