Files
2026-07-13 13:39:12 +08:00

149 lines
4.9 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
selectCompressionStrategy,
getEffectiveMode,
applyCompression,
} from "../../open-sse/services/compression/strategySelector.ts";
import {
applyLiteCompression,
replaceImageUrls,
} from "../../open-sse/services/compression/lite.ts";
import {
createCompressionStats,
estimateCompressionTokens,
} from "../../open-sse/services/compression/stats.ts";
import type { CompressionConfig } from "../../open-sse/services/compression/types.ts";
const baseConfig: CompressionConfig = {
enabled: true,
defaultMode: "lite",
autoTriggerTokens: 0,
cacheMinutes: 5,
preserveSystemPrompt: true,
comboOverrides: {},
};
describe("Full Compression Pipeline", () => {
it("end-to-end: lite mode compresses whitespace and tracks stats", () => {
const body = {
messages: [
{ role: "system", content: "You are helpful." },
{ role: "system", content: "You are helpful." },
{ role: "user", content: "hello\n\n\n\nworld" },
],
};
// Step 1: Select strategy
const mode = selectCompressionStrategy(baseConfig, null, 100);
assert.equal(mode, "lite");
// Step 2: Apply compression
const result = applyCompression(body, mode);
assert.equal(result.compressed, true);
assert.ok(result.stats);
// Step 3: Verify stats
assert.ok(result.stats!.originalTokens > 0);
assert.ok(result.stats!.compressedTokens > 0);
assert.ok(result.stats!.compressedTokens <= result.stats!.originalTokens);
assert.ok(result.stats!.savingsPercent >= 0);
assert.equal(result.stats!.mode, "lite");
});
it("end-to-end: off mode returns unchanged body", () => {
const body = { messages: [{ role: "user", content: "test" }] };
const offConfig = { ...baseConfig, enabled: false };
const mode = selectCompressionStrategy(offConfig, null, 100);
assert.equal(mode, "off");
const result = applyCompression(body, mode);
assert.equal(result.compressed, false);
assert.equal(result.stats, null);
});
it("end-to-end: combo override selects lite for specific combo", () => {
const config: CompressionConfig = {
...baseConfig,
defaultMode: "off" as const,
comboOverrides: { "my-combo": "lite" as const },
};
const body = { messages: [{ role: "user", content: "test\n\n\n\nmessage" }] };
const mode = selectCompressionStrategy(config, "my-combo", 100);
assert.equal(mode, "lite");
const result = applyCompression(body, mode);
assert.equal(result.compressed, true);
});
it("end-to-end: auto-trigger activates compression", () => {
const config: CompressionConfig = {
...baseConfig,
defaultMode: "off" as const,
autoTriggerTokens: 50,
};
const body = { messages: [{ role: "user", content: "x".repeat(1000) }] };
// Below threshold → off
const mode1 = getEffectiveMode(config, null, 10);
assert.equal(mode1, "off");
// Above threshold → lite
const mode2 = getEffectiveMode(config, null, 100);
assert.equal(mode2, "lite");
});
it("lite compression + stats pipeline works together", () => {
const body = {
messages: [
{ role: "system", content: "Be helpful." },
{ role: "system", content: "Be helpful." },
{ role: "user", content: "hello\n\n\n\nworld" },
{ role: "user", content: "hello\n\n\n\nworld" },
],
};
const result = applyLiteCompression(body);
assert.equal(result.compressed, true);
assert.ok(result.stats);
assert.ok(result.stats.savingsPercent > 0);
assert.ok(result.stats.techniquesUsed.length >= 1);
});
it("lite compression preserves multimodal image payloads unless non-vision is explicit", () => {
const dataUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB";
const body = {
messages: [
{
role: "user",
content: [
{ type: "text", text: "Describe this image" },
{ type: "image_url", image_url: { url: dataUrl } },
],
},
],
};
const preserved = applyLiteCompression(body, { model: "openai/gpt-4.1" });
assert.equal(preserved.compressed, false);
assert.deepEqual(preserved.body, body);
const placeholder = replaceImageUrls(body, { model: "text-only-model", supportsVision: false });
assert.equal(placeholder.applied, true);
const content = placeholder.body.messages?.[0]?.content;
assert.ok(Array.isArray(content));
assert.deepEqual(content[1], { type: "text", text: "[image: png]" });
});
it("token estimation is consistent", () => {
const text = "hello world this is a test";
const tokens = estimateCompressionTokens(text);
assert.equal(tokens, Math.ceil(text.length / 4));
const obj = { messages: [{ role: "user", content: text }] };
const objTokens = estimateCompressionTokens(obj);
assert.equal(objTokens, Math.ceil(JSON.stringify(obj).length / 4));
});
});