From 0371062e8654d4100d75974210e1df0cf3b97331 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Wed, 10 Sep 2025 23:54:16 +0800 Subject: [PATCH] Normalize `select` to `STRING` type in Gemini OpenAI request outputs --- .../openai/chat-completions/cli_openai_request.go | 11 +++++++++++ .../openai/chat-completions/gemini_openai_request.go | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/internal/translator/gemini-cli/openai/chat-completions/cli_openai_request.go b/internal/translator/gemini-cli/openai/chat-completions/cli_openai_request.go index 0e98fdc5..602bdc22 100644 --- a/internal/translator/gemini-cli/openai/chat-completions/cli_openai_request.go +++ b/internal/translator/gemini-cli/openai/chat-completions/cli_openai_request.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/luispater/CLIProxyAPI/internal/misc" + "github.com/luispater/CLIProxyAPI/internal/util" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" "github.com/tidwall/sjson" @@ -230,6 +231,16 @@ func ConvertOpenAIRequestToGeminiCLI(modelName string, inputRawJSON []byte, _ bo } } + var pathsToType []string + root := gjson.ParseBytes(out) + util.Walk(root, "", "type", &pathsToType) + for _, p := range pathsToType { + typeResult := gjson.GetBytes(out, p) + if strings.ToLower(typeResult.String()) == "select" { + out, _ = sjson.SetBytes(out, p, "STRING") + } + } + return out } diff --git a/internal/translator/gemini/openai/chat-completions/gemini_openai_request.go b/internal/translator/gemini/openai/chat-completions/gemini_openai_request.go index d58ee568..62aaba6d 100644 --- a/internal/translator/gemini/openai/chat-completions/gemini_openai_request.go +++ b/internal/translator/gemini/openai/chat-completions/gemini_openai_request.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/luispater/CLIProxyAPI/internal/misc" + "github.com/luispater/CLIProxyAPI/internal/util" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" "github.com/tidwall/sjson" @@ -230,6 +231,16 @@ func ConvertOpenAIRequestToGemini(modelName string, inputRawJSON []byte, _ bool) } } + var pathsToType []string + root := gjson.ParseBytes(out) + util.Walk(root, "", "type", &pathsToType) + for _, p := range pathsToType { + typeResult := gjson.GetBytes(out, p) + if strings.ToLower(typeResult.String()) == "select" { + out, _ = sjson.SetBytes(out, p, "STRING") + } + } + return out }