From 537ac24a9c58ba60acf5d6c7841e52e7632bf65d Mon Sep 17 00:00:00 2001 From: nusquama Date: Thu, 2 Apr 2026 08:36:01 +0800 Subject: [PATCH] fix: use max_completion_tokens instead of max_tokens for OpenAI-compatible APIs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Azure OpenAI and newer OpenAI models (o1, o3, o4...) reject `max_tokens` with a 400 error and require `max_completion_tokens` instead. Maps `params.max_tokens` → `max_completion_tokens` in the request body, which is the current standard across OpenAI-compatible providers. --- src/services/api/openaiShim.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/services/api/openaiShim.ts b/src/services/api/openaiShim.ts index 4b70a63c..fcbf4938 100644 --- a/src/services/api/openaiShim.ts +++ b/src/services/api/openaiShim.ts @@ -636,9 +636,13 @@ class OpenAIShimMessages { const body: Record = { model: request.resolvedModel, messages: openaiMessages, - max_tokens: params.max_tokens, stream: params.stream ?? false, } + if (params.max_tokens !== undefined) { + body.max_completion_tokens = params.max_tokens + } else if ((params as Record).max_completion_tokens !== undefined) { + body.max_completion_tokens = (params as Record).max_completion_tokens + } if (params.stream) { body.stream_options = { include_usage: true }