149 lines
4.9 KiB
TypeScript
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));
|
|
});
|
|
});
|