fix: use max_completion_tokens for OpenAI newer models

This commit is contained in:
tinkle-community
2025-12-12 23:32:32 +08:00
parent 5391f39749
commit 7806749297

View File

@@ -200,7 +200,12 @@ func (client *Client) buildMCPRequestBody(systemPrompt, userPrompt string) map[s
"model": client.Model, "model": client.Model,
"messages": messages, "messages": messages,
"temperature": client.config.Temperature, // Use configured temperature "temperature": client.config.Temperature, // Use configured temperature
"max_tokens": client.MaxTokens, }
// OpenAI newer models use max_completion_tokens instead of max_tokens
if client.Provider == ProviderOpenAI {
requestBody["max_completion_tokens"] = client.MaxTokens
} else {
requestBody["max_tokens"] = client.MaxTokens
} }
return requestBody return requestBody
} }
@@ -469,11 +474,16 @@ func (client *Client) buildRequestBodyFromRequest(req *Request) map[string]any {
requestBody["temperature"] = client.config.Temperature requestBody["temperature"] = client.config.Temperature
} }
// OpenAI newer models use max_completion_tokens instead of max_tokens
tokenKey := "max_tokens"
if client.Provider == ProviderOpenAI {
tokenKey = "max_completion_tokens"
}
if req.MaxTokens != nil { if req.MaxTokens != nil {
requestBody["max_tokens"] = *req.MaxTokens requestBody[tokenKey] = *req.MaxTokens
} else { } else {
// If not set in Request, use Client's MaxTokens // If not set in Request, use Client's MaxTokens
requestBody["max_tokens"] = client.MaxTokens requestBody[tokenKey] = client.MaxTokens
} }
if req.TopP != nil { if req.TopP != nil {