mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
Compress MCP registry and list metadata descriptions for tools, prompts, resources, and resource templates while keeping tool-response bodies unchanged. Expose those savings in compression status as `mcp_metadata_estimate` metadata rather than provider usage. Add Caveman rule-pack support for custom regex flags and match-specific replacement maps, update English rules for upstream parity, and tighten article and pleasantry handling. Also process RTK multipart text blocks independently so mixed media content compresses safely without duplicating output.
133 lines
5.3 KiB
TypeScript
133 lines
5.3 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
compressDescriptionsInPlace,
|
|
compressMcpListMetadata,
|
|
compressMcpRegistryMetadata,
|
|
compressMcpDescription,
|
|
getMcpDescriptionCompressionStats,
|
|
maybeCompressMcpDescription,
|
|
resetMcpDescriptionCompressionStats,
|
|
} from "../../../open-sse/mcp-server/descriptionCompressor.ts";
|
|
|
|
describe("MCP description compression", () => {
|
|
it("compresses MCP-style descriptions while preserving substance", () => {
|
|
const input =
|
|
"Get the current weather for a given location. Returns the temperature in Fahrenheit. Please make sure to provide the location as a city name.";
|
|
const result = compressMcpDescription(input);
|
|
assert.ok(result.after < result.before);
|
|
assert.match(result.compressed, /weather/i);
|
|
assert.match(result.compressed, /Fahrenheit/i);
|
|
assert.match(result.compressed, /city name/i);
|
|
assert.doesNotMatch(result.compressed, /\bthe\b/i);
|
|
});
|
|
|
|
it("preserves code, URLs, paths, identifiers, and versions", () => {
|
|
const input =
|
|
"Call config.api.endpoint() with API_KEY_VALUE from /tmp/the/file.txt. See https://example.com/the/api for version 3.7.9.";
|
|
const result = compressMcpDescription(input).compressed;
|
|
assert.match(result, /config\.api\.endpoint\(\)/);
|
|
assert.match(result, /API_KEY_VALUE/);
|
|
assert.match(result, /\/tmp\/the\/file\.txt/);
|
|
assert.match(result, /https:\/\/example\.com\/the\/api/);
|
|
assert.match(result, /3\.7\.9/);
|
|
});
|
|
|
|
it("walks nested list metadata and skips non-string fields", () => {
|
|
const payload = {
|
|
result: {
|
|
tools: [
|
|
{ name: "get_weather", description: "The function returns the weather for a city." },
|
|
{ name: "nested", inputSchema: { description: { not: "string" } } },
|
|
],
|
|
},
|
|
};
|
|
compressDescriptionsInPlace(payload.result);
|
|
assert.doesNotMatch(payload.result.tools[0].description, /\bthe\b/i);
|
|
assert.deepEqual(payload.result.tools[1].inputSchema.description, { not: "string" });
|
|
});
|
|
|
|
it("compresses only MCP list metadata containers, not tool-call response bodies", () => {
|
|
resetMcpDescriptionCompressionStats();
|
|
const payload = {
|
|
result: {
|
|
tools: [
|
|
{ name: "get_weather", description: "The function returns the weather for a city." },
|
|
],
|
|
prompts: [{ name: "ask", description: "The prompt asks for a detailed summary." }],
|
|
resources: [{ name: "docs", description: "The resource contains the project docs." }],
|
|
resourceTemplates: [
|
|
{ name: "doc", description: "The template returns the matching project document." },
|
|
],
|
|
content: [
|
|
{
|
|
type: "text",
|
|
description: "The tool response body should remain unchanged.",
|
|
},
|
|
],
|
|
},
|
|
};
|
|
|
|
const output = compressMcpListMetadata(payload);
|
|
|
|
assert.doesNotMatch(output.result.tools[0].description, /\bthe\b/i);
|
|
assert.doesNotMatch(output.result.prompts[0].description, /\bthe\b/i);
|
|
assert.doesNotMatch(output.result.resources[0].description, /\bthe\b/i);
|
|
assert.doesNotMatch(output.result.resourceTemplates[0].description, /\bthe\b/i);
|
|
assert.equal(
|
|
output.result.content[0].description,
|
|
"The tool response body should remain unchanged."
|
|
);
|
|
});
|
|
|
|
it("compresses registry metadata for tools, prompts, and resources", () => {
|
|
const metadata = compressMcpRegistryMetadata({
|
|
description: "The function returns the current weather for a city.",
|
|
inputSchema: {},
|
|
});
|
|
|
|
assert.doesNotMatch(metadata.description as string, /\bthe\b/i);
|
|
assert.deepEqual(metadata.inputSchema, {});
|
|
});
|
|
|
|
it("honors settings and environment kill switches", () => {
|
|
const originalEnv = process.env.OMNIROUTE_MCP_DESCRIPTION_COMPRESSION;
|
|
const originalAliasEnv = process.env.OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS;
|
|
try {
|
|
delete process.env.OMNIROUTE_MCP_DESCRIPTION_COMPRESSION;
|
|
delete process.env.OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS;
|
|
const input = "The function returns the weather for a city.";
|
|
assert.equal(maybeCompressMcpDescription(input, { enabled: false }), input);
|
|
|
|
process.env.OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS = "off";
|
|
assert.equal(maybeCompressMcpDescription(input, { enabled: true }), input);
|
|
} finally {
|
|
if (originalEnv === undefined) {
|
|
delete process.env.OMNIROUTE_MCP_DESCRIPTION_COMPRESSION;
|
|
} else {
|
|
process.env.OMNIROUTE_MCP_DESCRIPTION_COMPRESSION = originalEnv;
|
|
}
|
|
if (originalAliasEnv === undefined) {
|
|
delete process.env.OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS;
|
|
} else {
|
|
process.env.OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS = originalAliasEnv;
|
|
}
|
|
}
|
|
});
|
|
|
|
it("records MCP description savings separately", () => {
|
|
resetMcpDescriptionCompressionStats();
|
|
const input =
|
|
"The function returns the current weather for a city and the detailed forecast summary.";
|
|
const output = maybeCompressMcpDescription(input, { enabled: true });
|
|
const stats = getMcpDescriptionCompressionStats();
|
|
|
|
assert.notEqual(output, input);
|
|
assert.equal(stats.descriptionsCompressed, 1);
|
|
assert.equal(stats.charsBefore, input.length);
|
|
assert.equal(stats.charsAfter, output.length);
|
|
assert.ok(stats.charsSaved > 0);
|
|
assert.ok(stats.estimatedTokensSaved > 0);
|
|
});
|
|
});
|