fix: properly parse inline_data and generic base64 sources for gemini pdf routing (#993)

This commit is contained in:
diegosouzapw
2026-04-07 23:04:52 -03:00
parent 6635540a6d
commit ab2d174a0b

View File

@@ -76,6 +76,42 @@ export function convertOpenAIContentToParts(content) {
if (item.type === "text") {
parts.push({ text: item.text });
} else {
// 1. Handle Gemini native inline_data injected into OpenAI arrays (e.g. Cherry Studio)
const geminiInline = item.inline_data || item.inlineData;
if (geminiInline?.data) {
parts.push({
inlineData: {
mimeType: geminiInline.mime_type || geminiInline.mimeType || "application/pdf",
data: geminiInline.data.replace(/^data:[a-zA-Z0-9/+-]+;base64,/, ""),
},
});
continue;
}
// 2. Handle Claude-style source blocks commonly used by AI clients
if (item.source?.type === "base64" && item.source?.data) {
parts.push({
inlineData: {
mimeType: item.source.media_type || "application/pdf",
data: item.source.data.replace(/^data:[a-zA-Z0-9/+-]+;base64,/, ""),
},
});
continue;
}
// 3. Handle raw data strings (e.g. {"type": "file", "data": "JVBER...", "mime_type": "..."})
if (typeof item.data === "string" && !item.data.startsWith("http")) {
const rawData = item.data.replace(/^data:[a-zA-Z0-9/+-]+;base64,/, "");
parts.push({
inlineData: {
mimeType: item.mime_type || item.media_type || "application/octet-stream",
data: rawData,
},
});
continue;
}
// 4. Standard OpenAI Data URIs
const fileData =
item.image_url?.url || item.file_url?.url || item.file?.url || item.document?.url;
if (typeof fileData === "string" && fileData.startsWith("data:")) {