Files
OmniRoute/tests/unit/base-executor-sanitize-effort-max-mapping.test.ts
Chewji af0a9609f4 feat(sse): support native max reasoning effort and per-model clamping (#11875)
* fix(sse): map normalized xhigh to max for GLM-5.x+, DeepSeek-V4+, and provider aliases

* feat(sse): support native max reasoning effort and per-model clamping

* test(sse): add unit tests for Qwen 3.8, Claude 4.7+, GPT-5.6, and 2026 reasoning models

* fix(sse): align tests and file-size split for native max effort

Keep `max` as a first-class canonical tier. Split the new sanitizer
coverage out of base-executor-sanitize-effort.test.ts so the file stays
under testCap, and update discovery/catalog/vscode assertions to expect
native max instead of the old xhigh alias.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(sse): keep combo effort lists and drop unused collectSSE helper

Combo vscode routes still advertise the 5-tier list. Canonical `max` is
preserved in discovery (#9160) and github model metadata. Remove the
unused collectSSE helper that failed the absolute ESLint gate.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

---------

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: Chewji <Chewji9875@users.noreply.github.com>
2026-09-02 00:12:13 -03:00

385 lines
14 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
const { sanitizeReasoningEffortForProvider } = await import("../../open-sse/executors/base.ts");
function makeLog() {
const messages: Array<[string, string]> = [];
return {
info: (tag: string, msg: string) => messages.push([tag, msg]),
messages,
};
}
// Native `max` mapping / per-model clamp coverage for #11875.
// Split out of base-executor-sanitize-effort.test.ts so the original file stays under testCap 1000.
test("sanitizeReasoningEffortForProvider: cmd / z-ai/glm-5.3-flash maps xhigh → max and preserves max", () => {
const log = makeLog();
const bodyXHigh = { model: "z-ai/glm-5.3-flash", reasoning_effort: "xhigh", messages: [] };
const resXHigh = sanitizeReasoningEffortForProvider(
bodyXHigh,
"cmd",
"z-ai/glm-5.3-flash",
log
) as Record<string, unknown>;
assert.equal(resXHigh.reasoning_effort, "max");
const bodyMax = { model: "z-ai/glm-5.3-flash", reasoning_effort: "max", messages: [] };
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"cmd",
"z-ai/glm-5.3-flash",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "max");
});
test("sanitizeReasoningEffortForProvider: cmd / deepseek/deepseek-v4-flash-vision-exp maps xhigh → max and preserves max", () => {
const log = makeLog();
const bodyXHigh = {
model: "deepseek/deepseek-v4-flash-vision-exp",
reasoning_effort: "xhigh",
messages: [],
};
const resXHigh = sanitizeReasoningEffortForProvider(
bodyXHigh,
"cmd",
"deepseek/deepseek-v4-flash-vision-exp",
log
) as Record<string, unknown>;
assert.equal(resXHigh.reasoning_effort, "max");
const bodyMax = {
model: "deepseek/deepseek-v4-flash-vision-exp",
reasoning_effort: "max",
messages: [],
};
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"cmd",
"deepseek/deepseek-v4-flash-vision-exp",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "max");
});
test("sanitizeReasoningEffortForProvider: opencode-go / glm-5.3-flash maps xhigh → max and preserves max", () => {
const log = makeLog();
const bodyXHigh = { model: "glm-5.3-flash", reasoning_effort: "xhigh", messages: [] };
const resXHigh = sanitizeReasoningEffortForProvider(
bodyXHigh,
"opencode-go",
"glm-5.3-flash",
log
) as Record<string, unknown>;
assert.equal(resXHigh.reasoning_effort, "max");
const bodyMax = { model: "glm-5.3-flash", reasoning_effort: "max", messages: [] };
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"opencode-go",
"glm-5.3-flash",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "max");
});
test("sanitizeReasoningEffortForProvider: opencode-go / deepseek-v4-flash-vision-exp maps xhigh → max and preserves max", () => {
const log = makeLog();
const bodyXHigh = {
model: "deepseek-v4-flash-vision-exp",
reasoning_effort: "xhigh",
messages: [],
};
const resXHigh = sanitizeReasoningEffortForProvider(
bodyXHigh,
"opencode-go",
"deepseek-v4-flash-vision-exp",
log
) as Record<string, unknown>;
assert.equal(resXHigh.reasoning_effort, "max");
const bodyMax = { model: "deepseek-v4-flash-vision-exp", reasoning_effort: "max", messages: [] };
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"opencode-go",
"deepseek-v4-flash-vision-exp",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "max");
});
test("sanitizeReasoningEffortForProvider: ollamacloud / glm-5.3-flash:cloud maps xhigh → max and preserves max", () => {
const log = makeLog();
const bodyXHigh = { model: "glm-5.3-flash:cloud", reasoning_effort: "xhigh", messages: [] };
const resXHigh = sanitizeReasoningEffortForProvider(
bodyXHigh,
"ollamacloud",
"glm-5.3-flash:cloud",
log
) as Record<string, unknown>;
assert.equal(resXHigh.reasoning_effort, "max");
const bodyMax = { model: "glm-5.3-flash:cloud", reasoning_effort: "max", messages: [] };
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"ollamacloud",
"glm-5.3-flash:cloud",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "max");
});
test("sanitizeReasoningEffortForProvider: ollamacloud / deepseek-v4-pro:cloud maps xhigh → max and preserves max", () => {
const log = makeLog();
const bodyXHigh = { model: "deepseek-v4-pro:cloud", reasoning_effort: "xhigh", messages: [] };
const resXHigh = sanitizeReasoningEffortForProvider(
bodyXHigh,
"ollamacloud",
"deepseek-v4-pro:cloud",
log
) as Record<string, unknown>;
assert.equal(resXHigh.reasoning_effort, "max");
const bodyMax = { model: "deepseek-v4-pro:cloud", reasoning_effort: "max", messages: [] };
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"ollamacloud",
"deepseek-v4-pro:cloud",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "max");
});
test("sanitizeReasoningEffortForProvider: future models (glm-5.4, deepseek-v5, kimi-k4) on arbitrary providers map xhigh → max and preserve max", () => {
const log = makeLog();
for (const m of [
"glm-5.4",
"glm-5.4-flash",
"glm-6.0",
"deepseek-v5",
"deepseek-v5-pro",
"kimi-k4",
"moonshotai/Kimi-K4",
]) {
const bXHigh = { model: m, reasoning_effort: "xhigh", messages: [] };
const rXHigh = sanitizeReasoningEffortForProvider(bXHigh, "some-proxy", m, log) as Record<
string,
unknown
>;
assert.equal(rXHigh.reasoning_effort, "max", `model ${m} should map xhigh → max`);
const bMax = { model: m, reasoning_effort: "max", messages: [] };
const rMax = sanitizeReasoningEffortForProvider(bMax, "some-proxy", m, log) as Record<
string,
unknown
>;
assert.equal(rMax.reasoning_effort, "max", `model ${m} should preserve max`);
}
});
test("sanitizeReasoningEffortForProvider: muse-spark-1.2 clamps max/ultra → xhigh and none → minimal", () => {
const log = makeLog();
const bodyMax = { model: "muse-spark-1.2", reasoning_effort: "max", messages: [] };
const resMax = sanitizeReasoningEffortForProvider(
bodyMax,
"codex",
"muse-spark-1.2",
log
) as Record<string, unknown>;
assert.equal(resMax.reasoning_effort, "xhigh", "muse-spark-1.2 clamps max to xhigh");
const bodyUltra = { model: "muse-spark-1.2", reasoning_effort: "ultra", messages: [] };
const resUltra = sanitizeReasoningEffortForProvider(
bodyUltra,
"codex",
"muse-spark-1.2",
log
) as Record<string, unknown>;
assert.equal(resUltra.reasoning_effort, "xhigh", "muse-spark-1.2 clamps ultra to xhigh");
const bodyNone = { model: "muse-spark-1.2", reasoning_effort: "none", messages: [] };
const resNone = sanitizeReasoningEffortForProvider(
bodyNone,
"codex",
"muse-spark-1.2",
log
) as Record<string, unknown>;
assert.equal(resNone.reasoning_effort, "minimal", "muse-spark-1.2 clamps none to minimal");
const bodyMed = { model: "muse-spark-1.2", reasoning_effort: "medium", messages: [] };
const resMed = sanitizeReasoningEffortForProvider(
bodyMed,
"codex",
"muse-spark-1.2",
log
) as Record<string, unknown>;
assert.equal(resMed.reasoning_effort, "medium", "muse-spark-1.2 preserves medium");
});
test("sanitizeReasoningEffortForProvider: GLM-5.3 and GLM-5.3-flash mappings and forced thinking", () => {
const log = makeLog();
for (const model of ["glm-5.3", "glm-5.3-flash", "z-ai/glm-5.3-flash"]) {
// none/minimal/low → low
for (const effort of ["none", "minimal", "low"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "glm", model, log) as Record<string, unknown>;
assert.equal(r.reasoning_effort, "low", `${model} should map ${effort} → low`);
}
// medium/high → high
for (const effort of ["medium", "high"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "glm", model, log) as Record<string, unknown>;
assert.equal(r.reasoning_effort, "high", `${model} should map ${effort} → high`);
}
// xhigh/max/ultra → max
for (const effort of ["xhigh", "max", "ultra"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "glm", model, log) as Record<string, unknown>;
assert.equal(r.reasoning_effort, "max", `${model} should map ${effort} → max`);
}
// thinking.type="disabled" is forced to "enabled"
const bDisabled = {
model,
reasoning_effort: "max",
thinking: { type: "disabled" },
messages: [],
};
const rDisabled = sanitizeReasoningEffortForProvider(bDisabled, "glm", model, log) as Record<
string,
unknown
>;
assert.deepEqual(rDisabled.thinking, { type: "enabled" });
}
});
test("sanitizeReasoningEffortForProvider: GLM-5.2 mappings", () => {
const log = makeLog();
const model = "glm-5.2";
// none/minimal → none
for (const effort of ["none", "minimal"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "glm", model, log) as Record<string, unknown>;
assert.equal(r.reasoning_effort, "none", `glm-5.2 should map ${effort} → none`);
}
// low/medium → high
for (const effort of ["low", "medium"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "glm", model, log) as Record<string, unknown>;
assert.equal(r.reasoning_effort, "high", `glm-5.2 should map ${effort} → high`);
}
// high → high
const bHigh = { model, reasoning_effort: "high", messages: [] };
const rHigh = sanitizeReasoningEffortForProvider(bHigh, "glm", model, log) as Record<
string,
unknown
>;
assert.equal(rHigh.reasoning_effort, "high");
// xhigh/max/ultra → max
for (const effort of ["xhigh", "max", "ultra"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "glm", model, log) as Record<string, unknown>;
assert.equal(r.reasoning_effort, "max", `glm-5.2 should map ${effort} → max`);
}
});
test("sanitizeReasoningEffortForProvider: o1-preview strips reasoning_effort", () => {
const log = makeLog();
const body = { model: "o1-preview", reasoning_effort: "high", messages: [] };
const res = sanitizeReasoningEffortForProvider(body, "openai", "o1-preview", log) as Record<
string,
unknown
>;
assert.equal(res.reasoning_effort, undefined, "o1-preview strips reasoning_effort");
});
test("sanitizeReasoningEffortForProvider: o1, o1-mini, o3-mini clamp xhigh/max/ultra → high", () => {
const log = makeLog();
for (const model of ["o1", "o1-mini", "o3-mini", "o3-pro"]) {
for (const effort of ["xhigh", "max", "ultra"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "openai", model, log) as Record<
string,
unknown
>;
assert.equal(r.reasoning_effort, "high", `${model} should clamp ${effort} → high`);
}
for (const effort of ["low", "medium", "high"]) {
const b = { model, reasoning_effort: effort, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "openai", model, log) as Record<
string,
unknown
>;
assert.equal(r.reasoning_effort, effort, `${model} should preserve ${effort}`);
}
}
});
test("sanitizeReasoningEffortForProvider: Qwen 3.8 family (qwen3.8-max, qwen3.8-flash, qwen3.8-coder) reasoning effort handling", () => {
const log = makeLog();
// qwen3.8-max on DashScope / qwen-cloud accepts low, medium, xhigh (and passes through max)
const bQwenMax = { model: "qwen3.8-max", reasoning_effort: "xhigh", messages: [] };
const rQwenMax = sanitizeReasoningEffortForProvider(
bQwenMax,
"qwen-cloud",
"qwen3.8-max",
log
) as Record<string, unknown>;
assert.equal(rQwenMax.reasoning_effort, "xhigh", "qwen3.8-max preserves xhigh natively");
const bQwenMaxLiteral = { model: "qwen3.8-max", reasoning_effort: "max", messages: [] };
const rQwenMaxLiteral = sanitizeReasoningEffortForProvider(
bQwenMaxLiteral,
"qwen-cloud",
"qwen3.8-max",
log
) as Record<string, unknown>;
assert.equal(rQwenMaxLiteral.reasoning_effort, "max", "qwen3.8-max passes max through");
// qwen-3.8 on opencode-go / command-code gateways maps xhigh → max
const bQwenCmd = { model: "qwen-3.8", reasoning_effort: "xhigh", messages: [] };
const rQwenCmd = sanitizeReasoningEffortForProvider(bQwenCmd, "cmd", "qwen-3.8", log) as Record<
string,
unknown
>;
assert.equal(rQwenCmd.reasoning_effort, "max", "qwen-3.8 on command-code maps xhigh → max");
});
test("sanitizeReasoningEffortForProvider: 2026 comprehensive models (Claude 4.7+, GPT-5.6, Kimi K4, DeepSeek V4) pass-through & normalization", () => {
const log = makeLog();
// Claude 4.7 / 5.0 allows all tiers
for (const m of ["claude-opus-4-7", "claude-opus-4-8", "claude-5-sonnet", "claude-5-opus"]) {
for (const effort of ["low", "medium", "high", "xhigh", "max"]) {
const b = { model: m, output_config: { effort }, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "claude", m, log) as Record<string, unknown>;
assert.equal(
(r.output_config as Record<string, unknown>).effort,
effort,
`${m} should support ${effort}`
);
}
}
// GPT-5.6 Sol/Terra allow ultra/max/xhigh
for (const effort of ["low", "medium", "high", "xhigh", "max", "ultra"]) {
const b = { model: "gpt-5.6-sol", reasoning: { effort }, messages: [] };
const r = sanitizeReasoningEffortForProvider(b, "codex", "gpt-5.6-sol", log) as Record<
string,
unknown
>;
assert.equal(
(r.reasoning as Record<string, unknown>).effort,
effort,
`gpt-5.6-sol should preserve ${effort}`
);
}
});