mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-05 08:58:34 +00:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { coalesceActivityMessages } from "@/components/thread/activity/activity-message-model";
|
|
import type { UIMessage } from "@/lib/types";
|
|
|
|
const trace = 'web_search({"query":"same query"})';
|
|
|
|
function progressMessage(id: string, phase: "start" | "end" | "error"): UIMessage {
|
|
return {
|
|
id,
|
|
role: "tool",
|
|
kind: "trace",
|
|
content: trace,
|
|
traces: [trace],
|
|
toolEvents: [{ phase, name: "web_search", arguments: { query: "same query" } }],
|
|
createdAt: 1,
|
|
};
|
|
}
|
|
|
|
describe("activity message coalescing", () => {
|
|
it("folds persisted start and terminal progress into one activity", () => {
|
|
const result = coalesceActivityMessages([
|
|
progressMessage("start", "start"),
|
|
progressMessage("end", "end"),
|
|
]);
|
|
|
|
expect(result).toHaveLength(1);
|
|
expect(result[0].toolEvents?.[0]?.phase).toBe("end");
|
|
});
|
|
|
|
it("keeps repeated completed calls as separate activities", () => {
|
|
const result = coalesceActivityMessages([
|
|
progressMessage("first", "end"),
|
|
progressMessage("second", "end"),
|
|
]);
|
|
|
|
expect(result).toHaveLength(2);
|
|
});
|
|
});
|