| import { describe, it } from "node:test"; | |
| import assert from "node:assert/strict"; | |
| import { | |
| estimateCompressionTokens, | |
| createCompressionStats, | |
| trackCompressionStats, | |
| } from "../../../open-sse/services/compression/stats.ts"; | |
| describe("estimateCompressionTokens", () => { | |
| it("returns 0 for null", () => { | |
| assert.equal(estimateCompressionTokens(null), 0); | |
| }); | |
| it("returns 0 for undefined", () => { | |
| assert.equal(estimateCompressionTokens(undefined), 0); | |
| }); | |
| it("returns 0 for empty string", () => { | |
| assert.equal(estimateCompressionTokens(""), 0); | |
| }); | |
| it("estimates tokens from text (chars/4)", () => { | |
| assert.equal(estimateCompressionTokens("hello world"), 3); | |
| }); | |
| it("estimates tokens from object", () => { | |
| const tokens = estimateCompressionTokens({ messages: [{ role: "user", content: "test" }] }); | |
| assert.ok(tokens > 0); | |
| }); | |
| it("handles long strings", () => { | |
| const tokens = estimateCompressionTokens("x".repeat(400)); | |
| assert.equal(tokens, 100); | |
| }); | |
| }); | |
| describe("createCompressionStats", () => { | |
| it("calculates savings correctly", () => { | |
| const original = { messages: [{ role: "user", content: "x".repeat(100) }] }; | |
| const compressed = { messages: [{ role: "user", content: "x".repeat(80) }] }; | |
| const origTokens = Math.ceil(JSON.stringify(original).length / 4); | |
| const compTokens = Math.ceil(JSON.stringify(compressed).length / 4); | |
| const expectedSavings = Math.round(((origTokens - compTokens) / origTokens) * 10000) / 100; | |
| const stats = createCompressionStats(original, compressed, "lite", ["whitespace"]); | |
| assert.equal(stats.originalTokens, origTokens); | |
| assert.equal(stats.compressedTokens, compTokens); | |
| assert.equal(stats.savingsPercent, expectedSavings); | |
| assert.deepEqual(stats.techniquesUsed, ["whitespace"]); | |
| assert.equal(stats.mode, "lite"); | |
| assert.ok(stats.timestamp > 0); | |
| }); | |
| it("handles zero original tokens", () => { | |
| const original = {}; | |
| const compressed = {}; | |
| const stats = createCompressionStats(original, compressed, "off", []); | |
| assert.equal(stats.savingsPercent, 0); | |
| }); | |
| it("rounds savings to 2 decimal places", () => { | |
| const original = { messages: [{ role: "user", content: "x".repeat(97) }] }; | |
| const compressed = { messages: [{ role: "user", content: "x".repeat(80) }] }; | |
| const stats = createCompressionStats(original, compressed, "lite", ["test"]); | |
| assert.ok(Number.isFinite(stats.savingsPercent)); | |
| }); | |
| }); | |
| describe("trackCompressionStats", () => { | |
| it("does not throw for zero tokens", () => { | |
| const stats = { | |
| originalTokens: 0, | |
| compressedTokens: 0, | |
| savingsPercent: 0, | |
| techniquesUsed: [], | |
| mode: "off" as const, | |
| timestamp: Date.now(), | |
| }; | |
| assert.doesNotThrow(() => trackCompressionStats(stats)); | |
| }); | |
| it("logs compression stats", () => { | |
| const stats = { | |
| originalTokens: 100, | |
| compressedTokens: 80, | |
| savingsPercent: 20, | |
| techniquesUsed: ["whitespace"], | |
| mode: "lite" as const, | |
| timestamp: Date.now(), | |
| }; | |
| assert.doesNotThrow(() => trackCompressionStats(stats)); | |
| }); | |
| }); | |