26 lines
1.4 KiB
TypeScript
26 lines
1.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { summarizeToolResultContent, summarizeToolResultData } from "../client/tool-result-summary.ts";
|
|
|
|
test("summarizes image result content", () => {
|
|
assert.equal(summarizeToolResultContent([{ type: "image", mimeType: "image/png" }]), "1 image · image/png");
|
|
assert.equal(summarizeToolResultContent([{ type: "image", mimeType: "image/png" }, { type: "image", mimeType: "image/jpeg" }]), "2 images · image/png, image/jpeg");
|
|
assert.equal(summarizeToolResultContent([{ type: "text" }]), "");
|
|
});
|
|
|
|
test("summarizes generic result counts and pagination", () => {
|
|
assert.equal(summarizeToolResultData({ items: [{}, {}], page: { has_more: true } }, false, 20), "2 items · more available");
|
|
assert.equal(summarizeToolResultData({ results: { one: { rows: [{}] } }, truncated: true }, false, 20), "1 item · truncated");
|
|
});
|
|
|
|
test("summarizes errors without exposing an unbounded error code", () => {
|
|
const code = "x".repeat(100);
|
|
assert.equal(summarizeToolResultData({ error: code }, false, 0), `error: ${"x".repeat(80)}`);
|
|
assert.equal(summarizeToolResultData({}, true, 0), "error");
|
|
});
|
|
|
|
test("uses output size only when structured data has no summary", () => {
|
|
assert.equal(summarizeToolResultData({}, false, 1234), "1,234 chars");
|
|
assert.equal(summarizeToolResultData({}, false, 0), "no output");
|
|
});
|