Files
OmniRoute/tests/unit/gemini-helper-audio-input-912.test.ts
Diego Rodrigues de Sa e Souza ee24eb52d4 Release v3.8.33 (#4515)
Release v3.8.33 — full CHANGELOG in the PR body. Blocking gates green (Build, Lint, Unit Tests 8/8, Package Artifact, Quality Gates, Quality Ratchet, Docs Sync, PR Test Policy, test-vitest). Admin-merged over a Node 26 future-compat timer flake (1/4) + an E2E UI flake (3/9) — both verified non-deterministic; full test:unit validated locally (16936 pass).
2026-06-22 03:17:02 -03:00

43 lines
2.0 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
// Regression for the audio-input drop on the OpenAI -> Gemini/Antigravity path.
// Chat Completions clients send `{ type: "input_audio", input_audio: { data, format } }`;
// Gemini accepts audio as `inlineData` with an `audio/<format>` mime type. Before the
// fix, `convertOpenAIContentToParts` had no audio branch, so the part fell through every
// handler and was silently dropped (no error, just missing audio).
const gemini = await import("../../open-sse/translator/helpers/geminiHelper.ts");
test("convertOpenAIContentToParts maps input_audio (wav) to Gemini inlineData", () => {
const parts = gemini.convertOpenAIContentToParts([
{ type: "text", text: "transcribe this" },
{ type: "input_audio", input_audio: { data: "QUJDRA==", format: "wav" } },
]);
assert.deepEqual(parts, [
{ text: "transcribe this" },
{ inlineData: { mimeType: "audio/wav", data: "QUJDRA==" } },
]);
});
test("convertOpenAIContentToParts maps input_audio (mp3) and strips a data: prefix", () => {
const parts = gemini.convertOpenAIContentToParts([
{ type: "input_audio", input_audio: { data: "data:audio/mp3;base64,QUJDRA==", format: "mp3" } },
]);
// mp3 normalizes to the canonical audio/mpeg (matches the #913 translator test).
assert.deepEqual(parts, [{ inlineData: { mimeType: "audio/mpeg", data: "QUJDRA==" } }]);
});
test("convertOpenAIContentToParts supports the { type: 'audio', audio: {...} } shape", () => {
const parts = gemini.convertOpenAIContentToParts([
{ type: "audio", audio: { data: "QUJDRA==", format: "wav" } },
]);
assert.deepEqual(parts, [{ inlineData: { mimeType: "audio/wav", data: "QUJDRA==" } }]);
});
test("convertOpenAIContentToParts defaults the audio mime type to audio/wav", () => {
const parts = gemini.convertOpenAIContentToParts([
{ type: "input_audio", input_audio: { data: "QUJDRA==" } },
]);
assert.deepEqual(parts, [{ inlineData: { mimeType: "audio/wav", data: "QUJDRA==" } }]);
});