9router/tests/unit/openai-to-claude-response-tools.test.js

62 lines
2 KiB
JavaScript
Raw Normal View History

import { describe, expect, it } from "vitest";
import { openaiToClaudeResponse } from "../../open-sse/translator/response/openai-to-claude.js";
function createState() {
return { toolCalls: new Map(), nextBlockIndex: 0 };
}
function getInputJsonDelta(events) {
return events.find((event) => event.type === "content_block_delta" && event.delta?.type === "input_json_delta")?.delta.partial_json;
}
describe("openaiToClaudeResponse tool argument sanitization", () => {
it("drops invalid Read pages and clamps numeric bounds", () => {
const state = createState();
openaiToClaudeResponse({
id: "chatcmpl-test-read",
model: "test-model",
choices: [{ delta: { tool_calls: [{ index: 0, id: "toolu_read", function: { name: "Read" } }] } }],
}, state);
const events = openaiToClaudeResponse({
id: "chatcmpl-test-read",
model: "test-model",
choices: [{
delta: { tool_calls: [{ index: 0, function: { arguments: JSON.stringify({ file_path: "F:/repo/file.js", offset: -5, limit: 999999999, pages: "" }) } }] },
finish_reason: "tool_calls",
}],
}, state);
expect(JSON.parse(getInputJsonDelta(events))).toEqual({
file_path: "F:/repo/file.js",
offset: 0,
limit: 2000,
});
});
it("keeps valid PDF pages", () => {
const state = createState();
openaiToClaudeResponse({
id: "chatcmpl-test-pdf",
model: "test-model",
choices: [{ delta: { tool_calls: [{ index: 0, id: "toolu_pdf", function: { name: "proxy_Read" } }] } }],
}, state);
const events = openaiToClaudeResponse({
id: "chatcmpl-test-pdf",
model: "test-model",
choices: [{
delta: { tool_calls: [{ index: 0, function: { arguments: JSON.stringify({ file_path: "F:/repo/doc.pdf", pages: "1-3" }) } }] },
finish_reason: "tool_calls",
}],
}, state);
expect(JSON.parse(getInputJsonDelta(events))).toEqual({
file_path: "F:/repo/doc.pdf",
pages: "1-3",
});
});
});