mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-06 07:12:12 +03:00
* fix routed target request parameters * chore: rerun CI * test(chatcore): align PR #7323 Codex-routing test with #7533 verbosity gating The "Codex Responses routing keeps reasoning effort while dropping GPT-only verbosity" test translated a Responses-shape request with credentials=null and only the positional `provider` arg set to "opencode-go". #7533's verbosity carry-over (Responses `text.verbosity` -> Chat `verbosity`) reads the destination from `credentials.provider`, which the source->openai translation step never threads from the positional provider arg — so `translated.verbosity` came back undefined instead of "low", failing before prepareUpstreamBody's sanitizer was even reached. The test's intent (per its own name/comment) is a combo/fallback reroute: translate while still addressed at Codex (an #7533-allowlisted OpenAI-param destination, so verbosity legitimately survives translateRequest), then resolve the final upstream target to opencode-go/GLM so prepareUpstreamBody's sanitizeRequestForResolvedTarget (#7050/#7533) strips the GPT-only verbosity for that concrete target while preserving reasoning_effort. Fixed by passing `credentials: { provider: "codex" }` to the first translateRequest call to match how production actually carries the destination provider, instead of relying on the provider positional argument. No production code changed — #7050 and #7533's sanitization are intentional and protected; only the test's setup was misaligned with them. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --------- Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com> Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
findOffendingField,
|
|
stripGroqUnsupportedFields,
|
|
} from "../../open-sse/config/providerFieldStrips.ts";
|
|
|
|
test("findOffendingField matches known field names in a 400 body", () => {
|
|
assert.equal(
|
|
findOffendingField("Invalid argument: reasoning_budget not supported"),
|
|
"reasoning_budget"
|
|
);
|
|
assert.equal(findOffendingField("unexpected field chat_template"), "chat_template");
|
|
assert.equal(findOffendingField("reasoning_content is not allowed"), "reasoning_content");
|
|
// #1468: Claude Code's top-level context_management field rejected by strict
|
|
// anthropic-compatible gateways → strip + retry regardless of the contextEditing flag.
|
|
assert.equal(
|
|
findOffendingField("context_management: Extra inputs are not permitted"),
|
|
"context_management"
|
|
);
|
|
assert.equal(
|
|
findOffendingField("Extra inputs are not permitted, field: 'verbosity', value: 'low'"),
|
|
"verbosity"
|
|
);
|
|
assert.equal(findOffendingField("all good"), null);
|
|
assert.equal(findOffendingField(""), null);
|
|
});
|
|
|
|
test("stripGroqUnsupportedFields drops non-empty messages[].name", () => {
|
|
const out = stripGroqUnsupportedFields({
|
|
messages: [{ role: "user", content: "hi", name: "bob" }],
|
|
});
|
|
assert.equal("name" in out.messages[0], false);
|
|
assert.equal(out.messages[0].content, "hi");
|
|
});
|
|
|
|
test("stripGroqUnsupportedFields drops logprobs/logit_bias/top_logprobs", () => {
|
|
const out = stripGroqUnsupportedFields({
|
|
messages: [],
|
|
logprobs: true,
|
|
logit_bias: { 1: 2 },
|
|
top_logprobs: 5,
|
|
});
|
|
assert.equal("logprobs" in out, false);
|
|
assert.equal("logit_bias" in out, false);
|
|
assert.equal("top_logprobs" in out, false);
|
|
});
|
|
|
|
test("stripGroqUnsupportedFields is immutable (does not mutate input)", () => {
|
|
const input = { messages: [{ role: "user", content: "hi", name: "bob" }], logprobs: true };
|
|
stripGroqUnsupportedFields(input);
|
|
assert.equal(input.messages[0].name, "bob");
|
|
assert.equal(input.logprobs, true);
|
|
});
|