import { test } from "node:test"; import assert from "node:assert/strict"; import { parseAnthropicToolUses } from "./anthropic"; import { parseOpenAIToolCalls } from "./openai"; import { parseGeminiFunctionCalls } from "./gemini"; test("parseAnthropicToolUses extracts tool_use blocks", () => { const json = { content: [ { type: "text", text: "let me search" }, { type: "tool_use", id: "tu_1", name: "search_transcripts", input: { query: "platner" } }, { type: "tool_use", id: "tu_2", name: "finish", input: {} }, ], }; assert.deepEqual(parseAnthropicToolUses(json), [ { id: "tu_1", name: "search_transcripts", query: "platner", video: "", aroundSeconds: undefined }, { id: "tu_2", name: "finish", query: "", video: "", aroundSeconds: undefined }, ]); assert.deepEqual(parseAnthropicToolUses({ content: "no tools" }), []); }); test("parseOpenAIToolCalls parses JSON arguments", () => { const json = { choices: [ { message: { tool_calls: [ { id: "call_1", function: { name: "search_transcripts", arguments: '{"query":"senate campaign"}' }, }, { id: "call_2", function: { name: "finish", arguments: "{}" } }, ], }, }, ], }; assert.deepEqual(parseOpenAIToolCalls(json), [ { id: "call_1", name: "search_transcripts", query: "senate campaign", video: "", aroundSeconds: undefined }, { id: "call_2", name: "finish", query: "", video: "", aroundSeconds: undefined }, ]); // Malformed arguments degrade to an empty query, not a throw. const bad = { choices: [ { message: { tool_calls: [ { id: "x", function: { name: "search_transcripts", arguments: "{not json" }, }, ], }, }, ], }; assert.deepEqual(parseOpenAIToolCalls(bad), [ { id: "x", name: "search_transcripts", query: "", video: "", aroundSeconds: undefined }, ]); assert.deepEqual(parseOpenAIToolCalls({ choices: [{ message: {} }] }), []); }); test("parseGeminiFunctionCalls extracts functionCall parts", () => { const json = { candidates: [ { content: { parts: [ { text: "searching" }, { functionCall: { name: "search_transcripts", args: { query: "timeline" } } }, ], }, }, ], }; assert.deepEqual(parseGeminiFunctionCalls(json), [ { id: "", name: "search_transcripts", query: "timeline", video: "", aroundSeconds: undefined }, ]); assert.deepEqual(parseGeminiFunctionCalls({ candidates: [] }), []); });