Files
diegosouzapw--omniroute/tests/unit/gemini-finish-reason-normalization.test.ts
2026-07-13 13:39:12 +08:00

51 lines
1.5 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
const { geminiToOpenAIResponse } =
await import("../../open-sse/translator/response/gemini-to-openai.ts");
const { translateNonStreamingResponse } =
await import("../../open-sse/handlers/responseTranslator.ts");
const { FORMATS } = await import("../../open-sse/translator/formats.ts");
test("Gemini non-stream: prohibited content finish reason becomes content_filter", () => {
const result = translateNonStreamingResponse(
{
responseId: "resp-prohibited",
modelVersion: "gemini-2.5-flash",
candidates: [
{
content: { parts: [{ text: "partial text" }] },
finishReason: "PROHIBITED_CONTENT",
},
],
},
FORMATS.GEMINI,
FORMATS.OPENAI
);
assert.equal((result as any).choices[0].message.content, "partial text");
assert.equal((result as any).choices[0].finish_reason, "content_filter");
});
test("Gemini stream: prohibited content finish reason becomes content_filter", () => {
const result = geminiToOpenAIResponse(
{
responseId: "resp-prohibited",
modelVersion: "gemini-2.5-flash",
candidates: [
{
content: { parts: [{ text: "partial text" }] },
finishReason: "PROHIBITED_CONTENT",
},
],
},
{ toolCalls: new Map() }
);
assert.equal(result.at(-1).choices[0].finish_reason, "content_filter");
assert.equal(
result.some((event: any) => event.choices?.[0]?.delta?.content === "partial text"),
true
);
});