fix: honor Codex reasoning suffix aliases (#2335)

Integrated into release/v3.8.0 — fixes issue #2331: Codex model suffix aliases now correctly override client-injected reasoning defaults
This commit is contained in:
terence71-glitch
2026-05-18 00:38:25 +02:00
committed by GitHub
parent 696e16b361
commit 0e2d04526c
2 changed files with 24 additions and 7 deletions

View File

@@ -1388,15 +1388,13 @@ export class CodexExecutor extends BaseExecutor {
const fallbackReasoningEffort = allowConnectionReasoningDefaults
? requestDefaults.reasoningEffort || "medium"
: undefined;
// Issue #2331: model suffix aliases (for example gpt-5.5-xhigh) represent an
// explicit model selection, so they must override client-injected defaults such
// as OpenCode's automatic reasoning.effort=medium for GPT-5-family requests.
const rawEffort =
explicitReasoning || requestReasoningEffort || modelEffort || fallbackReasoningEffort;
modelEffort || explicitReasoning || requestReasoningEffort || fallbackReasoningEffort;
if (explicitReasoning) {
body.reasoning = {
...(reasoningRecord || {}),
effort: clampEffort(cleanModel, explicitReasoning),
};
} else if (rawEffort) {
if (rawEffort) {
body.reasoning = {
...(reasoningRecord || {}),
effort: clampEffort(cleanModel, rawEffort),

View File

@@ -317,6 +317,25 @@ test("CodexExecutor preserves native responses payloads for Codex passthrough",
assert.ok(!("_nativeCodexPassthrough" in transformed));
});
test("CodexExecutor gives model reasoning suffix precedence over client defaults", () => {
const executor = new CodexExecutor();
const transformed = executor.transformRequest(
"gpt-5.5-xhigh",
{
model: "gpt-5.5-xhigh",
input: [],
reasoning: { effort: "medium", summary: "auto" },
reasoning_effort: "low",
},
true,
{}
);
assert.equal(transformed.model, "gpt-5.5");
assert.deepEqual(transformed.reasoning, { effort: "xhigh", summary: "auto" });
assert.equal(transformed.reasoning_effort, undefined);
});
test("CodexExecutor strips streaming fields for compact passthrough", () => {
const executor = new CodexExecutor();
const transformed = executor.transformRequest(