Spaces:
Paused
Paused
| import { describe, expect, it } from "vitest"; | |
| import { countToolResults, extractToolCallNames, hasToolCall } from "./transcript-tools.js"; | |
| describe("transcript-tools", () => { | |
| describe("extractToolCallNames", () => { | |
| it("extracts tool name from message.toolName/tool_name", () => { | |
| expect(extractToolCallNames({ toolName: " weather " })).toEqual(["weather"]); | |
| expect(extractToolCallNames({ tool_name: "notes" })).toEqual(["notes"]); | |
| }); | |
| it("extracts tool call names from content blocks (tool_use/toolcall/tool_call)", () => { | |
| const names = extractToolCallNames({ | |
| content: [ | |
| { type: "text", text: "hi" }, | |
| { type: "tool_use", name: "read" }, | |
| { type: "toolcall", name: "exec" }, | |
| { type: "tool_call", name: "write" }, | |
| ], | |
| }); | |
| expect(new Set(names)).toEqual(new Set(["read", "exec", "write"])); | |
| }); | |
| it("normalizes type and trims names; de-dupes", () => { | |
| const names = extractToolCallNames({ | |
| content: [ | |
| { type: " TOOL_CALL ", name: " read " }, | |
| { type: "tool_call", name: "read" }, | |
| { type: "tool_call", name: "" }, | |
| ], | |
| toolName: "read", | |
| }); | |
| expect(names).toEqual(["read"]); | |
| }); | |
| }); | |
| describe("hasToolCall", () => { | |
| it("returns true when tool call names exist", () => { | |
| expect(hasToolCall({ toolName: "weather" })).toBe(true); | |
| expect(hasToolCall({ content: [{ type: "tool_use", name: "read" }] })).toBe(true); | |
| }); | |
| it("returns false when no tool calls exist", () => { | |
| expect(hasToolCall({})).toBe(false); | |
| expect(hasToolCall({ content: [{ type: "text", text: "hi" }] })).toBe(false); | |
| }); | |
| }); | |
| describe("countToolResults", () => { | |
| it("counts tool_result blocks and tool_result_error blocks; tracks errors via is_error", () => { | |
| expect( | |
| countToolResults({ | |
| content: [ | |
| { type: "tool_result" }, | |
| { type: "tool_result", is_error: true }, | |
| { type: "tool_result_error" }, | |
| { type: "text", text: "ignore" }, | |
| ], | |
| }), | |
| ).toEqual({ total: 3, errors: 1 }); | |
| }); | |
| it("handles non-array content", () => { | |
| expect(countToolResults({ content: "nope" })).toEqual({ total: 0, errors: 0 }); | |
| }); | |
| }); | |
| }); | |