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 <noreply@anthropic.com>
This commit is contained in:
Alex
2026-04-02 12:01:01 +08:00
parent cb8973e99b
commit f3ebd7d256

View File

@@ -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<string, unknown>).max_completion_tokens !== undefined) {
body.max_completion_tokens = (params as Record<string, unknown>).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<string, unknown>).max_completion_tokens === 'number'
? (params as Record<string, unknown>).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) {