Spaces:
Paused
Paused
| import { describe, expect, it } from "vitest"; | |
| import { TuiStreamAssembler } from "./tui-stream-assembler.js"; | |
| describe("TuiStreamAssembler", () => { | |
| it("keeps thinking before content even when thinking arrives later", () => { | |
| const assembler = new TuiStreamAssembler(); | |
| const first = assembler.ingestDelta( | |
| "run-1", | |
| { | |
| role: "assistant", | |
| content: [{ type: "text", text: "Hello" }], | |
| }, | |
| true, | |
| ); | |
| expect(first).toBe("Hello"); | |
| const second = assembler.ingestDelta( | |
| "run-1", | |
| { | |
| role: "assistant", | |
| content: [{ type: "thinking", thinking: "Brain" }], | |
| }, | |
| true, | |
| ); | |
| expect(second).toBe("[thinking]\nBrain\n\nHello"); | |
| }); | |
| it("omits thinking when showThinking is false", () => { | |
| const assembler = new TuiStreamAssembler(); | |
| const text = assembler.ingestDelta( | |
| "run-2", | |
| { | |
| role: "assistant", | |
| content: [ | |
| { type: "thinking", thinking: "Hidden" }, | |
| { type: "text", text: "Visible" }, | |
| ], | |
| }, | |
| false, | |
| ); | |
| expect(text).toBe("Visible"); | |
| }); | |
| it("falls back to streamed text on empty final payload", () => { | |
| const assembler = new TuiStreamAssembler(); | |
| assembler.ingestDelta( | |
| "run-3", | |
| { | |
| role: "assistant", | |
| content: [{ type: "text", text: "Streamed" }], | |
| }, | |
| false, | |
| ); | |
| const finalText = assembler.finalize( | |
| "run-3", | |
| { | |
| role: "assistant", | |
| content: [], | |
| }, | |
| false, | |
| ); | |
| expect(finalText).toBe("Streamed"); | |
| }); | |
| it("returns null when delta text is unchanged", () => { | |
| const assembler = new TuiStreamAssembler(); | |
| const first = assembler.ingestDelta( | |
| "run-4", | |
| { | |
| role: "assistant", | |
| content: [{ type: "text", text: "Repeat" }], | |
| }, | |
| false, | |
| ); | |
| expect(first).toBe("Repeat"); | |
| const second = assembler.ingestDelta( | |
| "run-4", | |
| { | |
| role: "assistant", | |
| content: [{ type: "text", text: "Repeat" }], | |
| }, | |
| false, | |
| ); | |
| expect(second).toBeNull(); | |
| }); | |
| }); | |