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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user