From 78067492975cf5c839309c93abfcdcfca25fa7c2 Mon Sep 17 00:00:00 2001 From: tinkle-community Date: Fri, 12 Dec 2025 23:32:32 +0800 Subject: [PATCH] fix: use max_completion_tokens for OpenAI newer models --- mcp/client.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mcp/client.go b/mcp/client.go index f696a87f..bead83ef 100644 --- a/mcp/client.go +++ b/mcp/client.go @@ -200,7 +200,12 @@ func (client *Client) buildMCPRequestBody(systemPrompt, userPrompt string) map[s "model": client.Model, "messages": messages, "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 } @@ -469,11 +474,16 @@ func (client *Client) buildRequestBodyFromRequest(req *Request) map[string]any { 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 { - requestBody["max_tokens"] = *req.MaxTokens + requestBody[tokenKey] = *req.MaxTokens } else { // If not set in Request, use Client's MaxTokens - requestBody["max_tokens"] = client.MaxTokens + requestBody[tokenKey] = client.MaxTokens } if req.TopP != nil {