mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-19 21:32:20 +03:00
* feat(compression): make Lite tool-result truncation length configurable Lite truncated tool results at a hardcoded 2000 characters. Coding-agent payloads (file reads, crash dumps) lost the middle of the content with no supported way to raise the cap. Honor lite.maxToolLength from settings, then OMNIROUTE_LITE_MAX_TOOL_LENGTH, then 2000. Existing installs keep the old length. Related to #13178. Signed-off-by: Minxi Hou <houminxi@gmail.com> #13178 stays open. * compression/lite: keep a stored cap when a step or toggle write is incomplete An out-of-range step maxToolLength was still a number, so it hid a valid global cap and fell through to env. A toggle-only settings PUT replaced the whole lite row and dropped the stored cap. Save treated an out-of-range number like a cleared field. Reject the bad Save, merge omitted caps, and use null to clear. Related to #13178. Signed-off-by: Minxi Hou <houminxi@gmail.com> * compression/lite: stop dashboard copy from hard-coding a 2000-char cap The page overlays schema descriptions from i18n. Updating only LITE_SCHEMA left operators seeing "over 2,000 characters" after the cap became configurable. Also assert the Save error string, not the Save button. Related to #13178. Signed-off-by: Minxi Hou <houminxi@gmail.com> * chore(changelog): move #13915 entry to a changelog.d fragment --------- Signed-off-by: Minxi Hou <houminxi@gmail.com> Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
114 lines
4.4 KiB
TypeScript
114 lines
4.4 KiB
TypeScript
import { describe, it, beforeEach } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
aggressiveEngine,
|
|
cavemanEngine,
|
|
liteEngine,
|
|
ultraEngine,
|
|
} from "../../../open-sse/services/compression/engines/cavemanAdapter.ts";
|
|
import { rtkEngine as realRtkEngine } from "../../../open-sse/services/compression/engines/rtk/index.ts";
|
|
import {
|
|
clearCompressionEngineRegistry,
|
|
getEngine,
|
|
getEngineEntry,
|
|
listEnabledEngines,
|
|
listEngines,
|
|
registerEngine,
|
|
setEngineEnabled,
|
|
updateEngineConfig,
|
|
} from "../../../open-sse/services/compression/index.ts";
|
|
|
|
describe("compression engine registry contract", () => {
|
|
beforeEach(() => {
|
|
clearCompressionEngineRegistry();
|
|
});
|
|
|
|
it("registers and retrieves an engine by id", () => {
|
|
registerEngine(cavemanEngine);
|
|
|
|
assert.equal(getEngine("caveman"), cavemanEngine);
|
|
assert.equal(getEngine("missing"), null);
|
|
});
|
|
|
|
it("lists engine entries and filters enabled entries", () => {
|
|
registerEngine(cavemanEngine);
|
|
registerEngine(realRtkEngine);
|
|
|
|
assert.equal(listEngines().length, 2);
|
|
assert.equal(listEnabledEngines().length, 2);
|
|
|
|
assert.equal(setEngineEnabled("rtk", false), true);
|
|
assert.equal(
|
|
listEnabledEngines()
|
|
.map((entry) => entry.engine.id)
|
|
.join(","),
|
|
"caveman"
|
|
);
|
|
});
|
|
|
|
it("updates config only after engine validation passes", () => {
|
|
registerEngine(realRtkEngine);
|
|
|
|
const invalid = updateEngineConfig("rtk", { intensity: "extreme" });
|
|
assert.equal(invalid.valid, false);
|
|
assert.match(invalid.errors.join(" "), /intensity/);
|
|
|
|
const valid = updateEngineConfig("rtk", {
|
|
intensity: "aggressive",
|
|
applyToCodeBlocks: true,
|
|
});
|
|
assert.equal(valid.valid, true);
|
|
assert.deepEqual(getEngineEntry("rtk")?.config, {
|
|
intensity: "aggressive",
|
|
applyToCodeBlocks: true,
|
|
});
|
|
});
|
|
|
|
it("exposes schema and validation for built-in adapters", () => {
|
|
const cavemanSchema = cavemanEngine.getConfigSchema();
|
|
const rtkSchema = realRtkEngine.getConfigSchema();
|
|
const aggressiveSchema = aggressiveEngine.getConfigSchema();
|
|
const ultraSchema = ultraEngine.getConfigSchema();
|
|
|
|
assert.ok(cavemanSchema.some((field) => field.key === "intensity"));
|
|
assert.ok(rtkSchema.some((field) => field.key === "applyToCodeBlocks"));
|
|
assert.ok(aggressiveSchema.some((field) => field.key === "maxTokensPerMessage"));
|
|
assert.ok(ultraSchema.some((field) => field.key === "compressionRate"));
|
|
|
|
// Lite exposes its OWN minimal schema (preserveSystemPrompt), NOT the aggressive
|
|
// summarizer/threshold fields it previously leaked.
|
|
const liteSchema = liteEngine.getConfigSchema();
|
|
assert.ok(liteSchema.some((field) => field.key === "preserveSystemPrompt"));
|
|
assert.ok(
|
|
liteSchema.some((field) => field.key === "compressToolResults" && field.defaultValue === true)
|
|
);
|
|
assert.ok(
|
|
liteSchema.some((field) => field.key === "maxToolLength" && field.defaultValue === 2000)
|
|
);
|
|
const truncateField = liteSchema.find((field) => field.key === "compressToolResults");
|
|
assert.ok(truncateField?.description && !/2,000/.test(truncateField.description));
|
|
assert.ok(!liteSchema.some((field) => field.key === "maxTokensPerMessage"));
|
|
assert.ok(!liteSchema.some((field) => field.key === "summarizerEnabled"));
|
|
assert.equal(
|
|
liteEngine.validateConfig({
|
|
preserveSystemPrompt: true,
|
|
compressToolResults: false,
|
|
}).valid,
|
|
true
|
|
);
|
|
assert.equal(liteEngine.validateConfig({ preserveSystemPrompt: "yes" }).valid, false);
|
|
assert.equal(liteEngine.validateConfig({ compressToolResults: "no" }).valid, false);
|
|
assert.equal(liteEngine.validateConfig({ maxToolLength: 8000 }).valid, true);
|
|
assert.equal(liteEngine.validateConfig({ maxToolLength: 10 }).valid, false);
|
|
assert.equal(liteEngine.validateConfig({ maxToolLength: 256 }).valid, true);
|
|
assert.equal(cavemanEngine.validateConfig({ intensity: "full" }).valid, true);
|
|
assert.equal(cavemanEngine.validateConfig({ intensity: "bad" }).valid, false);
|
|
assert.equal(realRtkEngine.validateConfig({ maxLinesPerResult: 20 }).valid, true);
|
|
assert.equal(aggressiveEngine.validateConfig({ maxTokensPerMessage: 2048 }).valid, true);
|
|
assert.equal(aggressiveEngine.validateConfig({ maxTokensPerMessage: 10 }).valid, false);
|
|
assert.equal(ultraEngine.validateConfig({ compressionRate: 0.4 }).valid, true);
|
|
assert.equal(ultraEngine.validateConfig({ compressionRate: 4 }).valid, false);
|
|
});
|
|
});
|