27 lines
1.5 KiB
JavaScript
27 lines
1.5 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {buildCompactionRequest, estimateTokens, normalizeCompaction} from "../src/services/contextCompaction.js";
|
|
|
|
const valid = {
|
|
summary: "The user is implementing context compaction.",
|
|
current_goals: ["Keep recent messages verbatim"],
|
|
important_facts: [], decisions: ["Use the existing Ollama client"], constraints: [],
|
|
technical_state: ["The context model is configured separately"], open_tasks: [],
|
|
problems_and_solutions: [], user_preferences: [], important_exact_values: ["CONTEXT_MODEL"]
|
|
};
|
|
|
|
test("compaction output is strictly validated and bounded", () => {
|
|
assert.deepEqual(normalizeCompaction(JSON.stringify(valid), 5000), valid);
|
|
assert.equal(normalizeCompaction("not json"), null);
|
|
assert.equal(normalizeCompaction(JSON.stringify({...valid, summary: "", current_goals: [], important_facts: [], decisions: [], constraints: [], technical_state: [], open_tasks: [], problems_and_solutions: [], user_preferences: [], important_exact_values: []}), 5000), null);
|
|
assert.equal(normalizeCompaction(JSON.stringify(valid), 10), null);
|
|
});
|
|
|
|
test("compaction request merges existing state with only expired records", () => {
|
|
const request = buildCompactionRequest("existing fact", [{role: "user", content: "old request"}]);
|
|
assert.match(request, /existing fact/);
|
|
assert.match(request, /old request/);
|
|
assert.match(request, /Newly expired conversation records/);
|
|
assert.equal(estimateTokens("1234"), 1);
|
|
});
|