From f3ebd7d256e7454658cc65b5f29d3b8d0226d80d Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Apr 2026 12:01:01 +0800 Subject: [PATCH] fix: convert max_tokens to max_completion_tokens for Azure OpenAI Azure OpenAI API rejects the max_tokens parameter and requires max_completion_tokens instead. This change ensures the conversion is robust by validating that max_tokens is a positive number before using it, preventing edge cases like null or "null" string values from being incorrectly sent. Co-Authored-By: Claude Opus 4.6 --- src/services/api/openaiShim.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/services/api/openaiShim.ts b/src/services/api/openaiShim.ts index 9b77d07e..9a500490 100644 --- a/src/services/api/openaiShim.ts +++ b/src/services/api/openaiShim.ts @@ -656,10 +656,20 @@ class OpenAIShimMessages { messages: openaiMessages, 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 + // Convert max_tokens to max_completion_tokens for OpenAI API compatibility. + // Azure OpenAI requires max_completion_tokens and does not accept max_tokens. + // Ensure max_tokens is a valid positive number before using it. + const maxTokensValue = typeof params.max_tokens === 'number' && params.max_tokens > 0 + ? params.max_tokens + : undefined + const maxCompletionTokensValue = typeof (params as Record).max_completion_tokens === 'number' + ? (params as Record).max_completion_tokens as number + : undefined + + if (maxTokensValue !== undefined) { + body.max_completion_tokens = maxTokensValue + } else if (maxCompletionTokensValue !== undefined) { + body.max_completion_tokens = maxCompletionTokensValue } if (params.stream) {