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

89 lines
3.4 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import { getRulesForContext } from "../../../open-sse/services/compression/cavemanRules.ts";
import { applyRulesToText } from "../../../open-sse/services/compression/caveman.ts";
import { cavemanCompress } from "../../../open-sse/services/compression/caveman.ts";
describe("multi-turn dedup rules", () => {
it("should replace repeated context references", () => {
const rules = getRulesForContext("all").filter((r) => r.name === "repeated_context");
assert.ok(rules.length > 0);
const { text } = applyRulesToText("As we discussed earlier, this needs fixing", rules);
assert.ok(text.includes("See above"));
});
it("should replace repeated questions", () => {
const rules = getRulesForContext("user").filter((r) => r.name === "repeated_question");
assert.ok(rules.length > 0);
const { text } = applyRulesToText("Same question as before about the API", rules);
assert.ok(text.includes("[same question]"));
});
it("should shorten reestablished context", () => {
const rules = getRulesForContext("all").filter((r) => r.name === "reestablished_context");
assert.ok(rules.length > 0);
const { text } = applyRulesToText("Going back to the code above, I need help", rules);
assert.ok(text.includes("Re:"));
});
it("should replace summaries with 'Summary:'", () => {
const rules = getRulesForContext("assistant").filter((r) => r.name === "summary_replacement");
assert.ok(rules.length > 0);
const { text } = applyRulesToText(
"To summarize what we've discussed, here are the key points:",
rules
);
assert.ok(text.includes("Summary:"));
});
it("should handle multi-message scenarios", () => {
const body = {
messages: [
{
role: "user",
content:
"Please help me fix this TypeScript error: TypeError: Cannot read property of undefined",
},
{
role: "assistant",
content:
"The error indicates you're trying to access a property on a null or undefined value. You should add a null check.",
},
{
role: "user",
content:
"As we discussed earlier, I tried adding null checks but the error persists. Could you please provide a more detailed explanation of what might be causing this?",
},
],
};
const result = cavemanCompress(body, {
enabled: true,
compressRoles: ["user", "assistant"],
skipRules: [],
minMessageLength: 50,
preservePatterns: [],
});
assert.equal(result.compressed, true);
assert.ok(result.stats.rulesApplied && result.stats.rulesApplied.length > 0);
});
it("should NOT dedupe unique content", () => {
const body = {
messages: [
{ role: "user", content: "How do I implement OAuth 2.0 in my Express application?" },
{ role: "assistant", content: "You can use the passport library with the OAuth2Strategy." },
{ role: "user", content: "What about implementing rate limiting for the API endpoints?" },
],
};
const result = cavemanCompress(body, {
enabled: true,
compressRoles: ["user"],
skipRules: [],
minMessageLength: 50,
preservePatterns: [],
});
const lastUserMsg = result.body.messages[2].content as string;
assert.ok(lastUserMsg.includes("rate limiting"), "Unique content should be preserved");
});
});