oapix / test /requestNormalization.test.js
woiceatus's picture
fix audio convert
8b5482f
import test from "node:test";
import assert from "node:assert/strict";
import { createRequestNormalizationService } from "../src/services/requestNormalizationService.js";
test("normalizes audio URLs to mp3 base64 and raw image base64 to data URLs", async () => {
const service = createRequestNormalizationService({
audioConversionService: {
async downloadAndConvertToMp3Base64(url) {
assert.equal(url, "https://example.com/sample.wav");
return {
data: "ZmFrZS1tcDM=",
format: "mp3"
};
},
async normalizeBase64Audio(audio) {
return audio;
}
}
});
const { normalizedBody, responseContext } = await service.normalize({
messages: [
{
role: "user",
content: [
{
type: "image_url",
image_url: {
url: "iVBORw0KGgoAAAANSUhEUgAAAAUA"
},
mime_type: "image/png"
},
{
type: "input_audio",
input_audio: {
url: "https://example.com/sample.wav"
}
}
]
}
],
audio: {
format: "wav"
}
});
assert.equal(normalizedBody.messages[0].content[0].image_url.url.startsWith("data:image/png;base64,"), true);
assert.deepEqual(normalizedBody.messages[0].content[1], {
type: "input_audio",
input_audio: {
data: "ZmFrZS1tcDM=",
format: "mp3"
}
});
assert.equal(responseContext.audioFormat, "wav");
});
test("downloads remote audio when the URL is provided in input_audio.data", async () => {
const service = createRequestNormalizationService({
audioConversionService: {
async downloadAndConvertToMp3Base64(url) {
assert.equal(url, "https://example.com/sample.mp4");
return {
data: "ZG93bmxvYWRlZC1hbmQtY29udmVydGVk",
format: "mp3"
};
},
async normalizeBase64Audio() {
throw new Error("unexpected base64 conversion");
}
}
});
const { normalizedBody } = await service.normalize({
messages: [
{
role: "user",
content: [
{
type: "input_audio",
input_audio: {
data: "https://example.com/sample.mp4",
format: "m4a"
}
}
]
}
]
});
assert.deepEqual(normalizedBody.messages[0].content[0], {
type: "input_audio",
input_audio: {
data: "ZG93bmxvYWRlZC1hbmQtY29udmVydGVk",
format: "mp3"
}
});
});
test("normalizes uploaded wav audio before forwarding upstream", async () => {
const service = createRequestNormalizationService({
audioConversionService: {
async downloadAndConvertToMp3Base64() {
throw new Error("unexpected url conversion");
},
async normalizeBase64Audio(audio) {
assert.deepEqual(audio, {
data: "UklGRl8AAABXQVZFZm10",
format: "wav"
});
return {
data: "bm9ybWFsaXplZC13YXY=",
format: "wav"
};
}
}
});
const { normalizedBody } = await service.normalize({
messages: [
{
role: "user",
content: [
{
type: "input_audio",
input_audio: {
data: "UklGRl8AAABXQVZFZm10",
format: "wav"
}
}
]
}
]
});
assert.deepEqual(normalizedBody.messages[0].content[0], {
type: "input_audio",
input_audio: {
data: "bm9ybWFsaXplZC13YXY=",
format: "wav"
}
});
});
test("preserves uploaded m4a format for conversion and forwards mp3 output", async () => {
const service = createRequestNormalizationService({
audioConversionService: {
async downloadAndConvertToMp3Base64() {
throw new Error("unexpected url conversion");
},
async normalizeBase64Audio(audio) {
assert.deepEqual(audio, {
data: "AAAAGGZ0eXBNNEEg",
format: "m4a"
});
return {
data: "Y29udmVydGVkLW1wMw==",
format: "mp3"
};
}
}
});
const { normalizedBody } = await service.normalize({
messages: [
{
role: "user",
content: [
{
type: "input_audio",
input_audio: {
data: "AAAAGGZ0eXBNNEEg",
format: "m4a"
}
}
]
}
]
});
assert.deepEqual(normalizedBody.messages[0].content[0], {
type: "input_audio",
input_audio: {
data: "Y29udmVydGVkLW1wMw==",
format: "mp3"
}
});
});
test("parses m4a data urls with codec metadata before conversion", async () => {
const service = createRequestNormalizationService({
audioConversionService: {
async downloadAndConvertToMp3Base64() {
throw new Error("unexpected url conversion");
},
async normalizeBase64Audio(audio) {
assert.deepEqual(audio, {
data: "AAAAGGZ0eXBNNEEg",
format: "m4a"
});
return {
data: "Y29udmVydGVkLW1wMw==",
format: "mp3"
};
}
}
});
const { normalizedBody } = await service.normalize({
messages: [
{
role: "user",
content: [
{
type: "input_audio",
input_audio: {
data: "data:audio/mp4;codecs=mp4a.40.2;base64,AAAAGGZ0eXBNNEEg",
format: "m4a"
}
}
]
}
]
});
assert.deepEqual(normalizedBody.messages[0].content[0], {
type: "input_audio",
input_audio: {
data: "Y29udmVydGVkLW1wMw==",
format: "mp3"
}
});
});