Files
diegosouzapw--omniroute/tests/unit/translator-helper-tool-description-coercion.test.ts
2026-07-13 13:39:12 +08:00

59 lines
2.1 KiB
TypeScript

// Regression: tool descriptions must always be strings for strict upstream
// validation (e.g., NVIDIA NIM, Codex). Ports upstream PR decolua/9router#397
// (Ibrahim Ryan), restricted to the gap that still exists in OmniRoute —
// the two non-string-tolerant paths in openaiHelper.filterToOpenAIFormat
// (Claude-style and Gemini-style tool normalization). The other locations
// upstream-patched (claude-to-openai.ts, openai-responses.ts) already coerce
// via String/toString in OmniRoute.
import test from "node:test";
import assert from "node:assert/strict";
const openaiHelper = await import(
"../../open-sse/translator/helpers/openaiHelper.ts"
);
test("filterToOpenAIFormat coerces non-string Claude-tool description to string", () => {
const result = openaiHelper.filterToOpenAIFormat({
messages: [{ role: "user", content: "hi" }],
tools: [
{
name: "claude-tool",
// Non-string truthy value — must NOT leak through to upstream.
description: { invalid: "object" } as unknown as string,
input_schema: { type: "object" },
},
],
});
assert.equal(typeof result.tools[0].function.description, "string");
});
test("filterToOpenAIFormat coerces null/undefined Claude-tool description to empty string", () => {
const result = openaiHelper.filterToOpenAIFormat({
messages: [{ role: "user", content: "hi" }],
tools: [
{ name: "t1", description: null as unknown as string, input_schema: {} },
{ name: "t2", description: undefined, input_schema: {} },
],
});
assert.equal(result.tools[0].function.description, "");
assert.equal(result.tools[1].function.description, "");
});
test("filterToOpenAIFormat coerces non-string Gemini functionDeclarations description", () => {
const result = openaiHelper.filterToOpenAIFormat({
messages: [{ role: "user", content: "hi" }],
tools: [
{
functionDeclarations: [
{
name: "gemini-tool",
description: 12345 as unknown as string,
parameters: { type: "object" },
},
],
},
],
});
assert.equal(typeof result.tools[0].function.description, "string");
});