93 lines
3.1 KiB
TypeScript
93 lines
3.1 KiB
TypeScript
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));
|
|
});
|
|
});
|