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

254 lines
9.2 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
scoreToken,
pruneByScore,
STOPWORDS,
FORCE_PRESERVE_RE,
} from "../../../open-sse/services/compression/ultraHeuristic.ts";
import { ultraCompress } from "../../../open-sse/services/compression/ultra.ts";
import type { UltraConfig } from "../../../open-sse/services/compression/types.ts";
describe("scoreToken", () => {
it("should return 0 for stopword 'the'", () => {
assert.strictEqual(scoreToken("the"), 0.1);
});
it("should return 0.1 for stopword 'and'", () => {
assert.strictEqual(scoreToken("and"), 0.1);
});
it("should return 1.0 for URL token", () => {
assert.strictEqual(scoreToken("https://example.com"), 1.0);
});
it("should return 1.0 for number token", () => {
assert.strictEqual(scoreToken("123"), 1.0);
});
it("should return 1.0 for file path token", () => {
assert.strictEqual(scoreToken("/path/to/file"), 1.0);
});
it("should return 1.0 for backslash token", () => {
assert.strictEqual(scoreToken("\\path\\file"), 1.0);
});
it("should return 1.0 for dot token", () => {
assert.strictEqual(scoreToken(".txt"), 1.0);
});
it("should return 1.0 for Error: prefix", () => {
assert.strictEqual(scoreToken("Error:"), 1.0);
});
it("should return 1.0 for Exception: prefix", () => {
assert.strictEqual(scoreToken("Exception:"), 1.0);
});
it("should return 1.0 for backtick token", () => {
assert.strictEqual(scoreToken("```"), 1.0);
});
it("should return 0.8 for capitalized word (proper noun)", () => {
assert.strictEqual(scoreToken("John"), 0.8);
});
it("should return 0.7 for word length >= 6", () => {
assert.strictEqual(scoreToken("example"), 0.7);
});
it("should return 0.2 for very short word", () => {
assert.strictEqual(scoreToken("ab"), 0.2);
});
it("should return 0.5 for medium-length word", () => {
assert.strictEqual(scoreToken("hello"), 0.5);
});
it("should return 0.2 for empty string", () => {
assert.strictEqual(scoreToken(""), 0.2);
});
});
describe("pruneByScore", () => {
it("should return empty array for empty string", () => {
assert.strictEqual(pruneByScore(""), "");
});
it("should keep all tokens when compressionRate=1.0", () => {
const text = "the quick brown fox";
const result = pruneByScore(text, 1.0);
assert.strictEqual(result, text);
});
it("should remove some tokens when compressionRate=0.5", () => {
const text = "the quick brown fox jumps over the lazy dog";
const result = pruneByScore(text, 0.5);
assert(result.length < text.length);
});
it("should always keep force-preserved tokens (URLs)", () => {
const text = "check https://example.com for details";
const result = pruneByScore(text, 0.3);
assert.notEqual(result.split(/\s+/).indexOf("https://example.com"), -1);
});
it("should always keep force-preserved tokens (numbers)", () => {
const text = "the value is 42 units";
const result = pruneByScore(text, 0.3);
assert(result.includes("42"));
});
it("result length should be <= input length", () => {
const text = "the quick brown fox jumps over the lazy dog";
const result = pruneByScore(text, 0.5);
assert(result.length <= text.length);
});
it("should preserve whitespace structure", () => {
const text = "word1 word2 word3";
const result = pruneByScore(text, 1.0);
assert(result.includes("word1") && result.includes("word2") && result.includes("word3"));
});
it("should handle zero compression rate", () => {
const text = "the quick brown fox";
const result = pruneByScore(text, 0.0);
assert(result.length <= text.length);
});
it("should normalize multiple spaces to single space in pruneByScore", () => {
const text = "word1 word2";
const result = pruneByScore(text, 1.0);
assert(result.includes("word1") && result.includes("word2"));
});
});
describe("ultraCompress", () => {
const baseConfig: UltraConfig = {
enabled: true,
compressionRate: 0.5,
minScoreThreshold: 0.3,
slmFallbackToAggressive: false,
maxTokensPerMessage: 0,
};
it("should return object with compressed and stats", async () => {
const messages = [{ role: "user", content: "the quick brown fox" }];
const result = await ultraCompress(messages, baseConfig);
assert(result.messages);
assert(result.stats);
assert(result.stats.originalTokens !== undefined);
assert(result.stats.compressedTokens !== undefined);
});
it("should return empty compressed for empty string", async () => {
const messages = [{ role: "user", content: "" }];
const result = await ultraCompress(messages, baseConfig);
assert.strictEqual(result.messages[0].content, "");
});
it("should handle recursion guard for already-compressed strings", async () => {
const messages = [{ role: "user", content: "[COMPRESSED: already compressed" }];
const result = await ultraCompress(messages, baseConfig);
assert.strictEqual(result.messages[0].content, "[COMPRESSED: already compressed");
});
it("should keep all tokens when compressionRate=1.0", async () => {
const config = { ...baseConfig, compressionRate: 1.0 };
const messages = [{ role: "user", content: "the quick brown fox jumps" }];
const result = await ultraCompress(messages, config);
assert.strictEqual(result.stats.originalTokens, result.stats.compressedTokens);
});
it("should remove tokens when compressionRate=0.5", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "the quick brown fox jumps over lazy dog" }];
const result = await ultraCompress(messages, config);
assert(result.stats.compressedTokens < result.stats.originalTokens);
});
it("should keep only force-preserved tokens when compressionRate=0.0", async () => {
const config = { ...baseConfig, compressionRate: 0.0 };
const messages = [{ role: "user", content: "check https://example.com here" }];
const result = await ultraCompress(messages, config);
assert(result.stats.compressedTokens <= result.stats.originalTokens);
});
it("should ensure compressedTokens <= originalTokens", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "the quick brown fox jumps over the lazy dog" }];
const result = await ultraCompress(messages, config);
assert(result.stats.compressedTokens <= result.stats.originalTokens);
});
it("should add [COMPRESSED: prefix to output", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "the quick brown fox" }];
const result = await ultraCompress(messages, config);
assert(result.stats.techniquesUsed.includes("ultra-heuristic-pruning"));
});
it("should handle multiple messages", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [
{ role: "user", content: "the quick brown fox" },
{ role: "assistant", content: "the lazy dog jumped" },
];
const result = await ultraCompress(messages, config);
assert.strictEqual(result.messages.length, 2);
});
it("should preserve message role and other fields", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "hello world", id: "msg1" }];
const result = await ultraCompress(messages, config);
assert.strictEqual(result.messages[0].role, "user");
assert.strictEqual(result.messages[0].id, "msg1");
});
it("should handle multimodal content (text blocks)", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [
{
role: "user",
content: [
{ type: "text", text: "the quick brown fox" },
{ type: "image", url: "https://example.com/img.png" },
],
},
];
const result = await ultraCompress(messages, config);
assert(Array.isArray(result.messages[0].content));
});
it("should include stats with timestamp", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "the quick brown fox" }];
const result = await ultraCompress(messages, config);
assert(result.stats.timestamp > 0);
});
it("should include stats with durationMs", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "the quick brown fox" }];
const result = await ultraCompress(messages, config);
assert(result.stats.durationMs !== undefined && result.stats.durationMs >= 0);
});
it("should mark mode as 'ultra' in stats", async () => {
const config = { ...baseConfig, compressionRate: 0.5 };
const messages = [{ role: "user", content: "the quick brown fox" }];
const result = await ultraCompress(messages, config);
assert.strictEqual(result.stats.mode, "ultra");
});
it("should calculate savingsPercent correctly", async () => {
const config = { ...baseConfig, compressionRate: 1.0 };
const messages = [{ role: "user", content: "the quick brown fox" }];
const result = await ultraCompress(messages, config);
assert.strictEqual(result.stats.savingsPercent, 0);
});
});