From f34651a1e8a3a6812a0dc4105c160c2beae77d41 Mon Sep 17 00:00:00 2001 From: qiaoborui Date: Mon, 16 Feb 2026 16:51:15 +0800 Subject: [PATCH] fix(codex): omit max_output_tokens for chatgpt codex backend --- pkg/providers/codex_provider.go | 5 ++--- pkg/providers/codex_provider_test.go | 5 +++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/providers/codex_provider.go b/pkg/providers/codex_provider.go index 6dff3a52e..06b30ce3c 100644 --- a/pkg/providers/codex_provider.go +++ b/pkg/providers/codex_provider.go @@ -260,9 +260,8 @@ func buildCodexParams(messages []Message, tools []ToolDefinition, model string, params.Instructions = openai.Opt(defaultCodexInstructions) } - if maxTokens, ok := options["max_tokens"].(int); ok { - params.MaxOutputTokens = openai.Opt(int64(maxTokens)) - } + // ChatGPT Codex backend currently rejects max_output_tokens with 400. + // Keep token budgeting at the agent layer for this provider. if len(tools) > 0 { params.Tools = translateToolsForCodex(tools) diff --git a/pkg/providers/codex_provider_test.go b/pkg/providers/codex_provider_test.go index 317b1a5de..e81553e8d 100644 --- a/pkg/providers/codex_provider_test.go +++ b/pkg/providers/codex_provider_test.go @@ -29,6 +29,9 @@ func TestBuildCodexParams_BasicMessage(t *testing.T) { if params.Instructions.Or("") != defaultCodexInstructions { t.Errorf("Instructions = %q, want %q", params.Instructions.Or(""), defaultCodexInstructions) } + if params.MaxOutputTokens.Valid() { + t.Errorf("MaxOutputTokens should be omitted for codex backend, got %d", params.MaxOutputTokens.Or(0)) + } } func TestBuildCodexParams_SystemAsInstructions(t *testing.T) { @@ -423,6 +426,8 @@ func TestResolveCodexModel(t *testing.T) { {name: "empty", input: "", wantModel: codexDefaultModel, wantFallback: true}, {name: "unsupported namespace", input: "anthropic/claude-3.5", wantModel: codexDefaultModel, wantFallback: true}, {name: "non-openai prefixed", input: "glm-4.7", wantModel: codexDefaultModel, wantFallback: true}, + {name: "codex alias", input: "gpt-5.3-codex", wantModel: "gpt-5.3-codex", wantFallback: false}, + {name: "codex alias with openai prefix", input: "openai/gpt-5.3-codex", wantModel: "gpt-5.3-codex", wantFallback: false}, {name: "openai prefix", input: "openai/gpt-5.2", wantModel: "gpt-5.2", wantFallback: false}, {name: "direct gpt", input: "gpt-4o", wantModel: "gpt-4o", wantFallback: false}, }