From 9253bdbf77c4e9909e2ecf4acde133941ba35877 Mon Sep 17 00:00:00 2001 From: hkfires <10558748+hkfires@users.noreply.github.com> Date: Sat, 20 Sep 2025 15:48:40 +0800 Subject: [PATCH] feat(provider): Introduce dedicated provider type for Gemini-Web --- internal/client/gemini-web_client.go | 6 +++--- internal/constant/constant.go | 1 + .../openai/chat-completions/init.go | 20 +++++++++++++++++++ .../gemini-web/openai/responses/init.go | 20 +++++++++++++++++++ internal/translator/init.go | 3 +++ 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 internal/translator/gemini-web/openai/chat-completions/init.go create mode 100644 internal/translator/gemini-web/openai/responses/init.go diff --git a/internal/client/gemini-web_client.go b/internal/client/gemini-web_client.go index 44f3224b..2a1aa37c 100644 --- a/internal/client/gemini-web_client.go +++ b/internal/client/gemini-web_client.go @@ -207,7 +207,7 @@ func (c *GeminiWebClient) registerModelsOnce() { if c.modelsRegistered { return } - c.RegisterModels(GEMINI, geminiWeb.GetGeminiWebAliasedModels()) + c.RegisterModels(GEMINIWEB, geminiWeb.GetGeminiWebAliasedModels()) c.modelsRegistered = true } @@ -219,8 +219,8 @@ func (c *GeminiWebClient) EnsureRegistered() { } } -func (c *GeminiWebClient) Type() string { return GEMINI } -func (c *GeminiWebClient) Provider() string { return GEMINI } +func (c *GeminiWebClient) Type() string { return GEMINIWEB } +func (c *GeminiWebClient) Provider() string { return GEMINIWEB } func (c *GeminiWebClient) CanProvideModel(modelName string) bool { geminiWeb.EnsureGeminiWebAliasMap() _, ok := geminiWeb.GeminiWebAliasMap[strings.ToLower(modelName)] diff --git a/internal/constant/constant.go b/internal/constant/constant.go index 4e39d93f..bfa7558d 100644 --- a/internal/constant/constant.go +++ b/internal/constant/constant.go @@ -3,6 +3,7 @@ package constant const ( GEMINI = "gemini" GEMINICLI = "gemini-cli" + GEMINIWEB = "gemini-web" CODEX = "codex" CLAUDE = "claude" OPENAI = "openai" diff --git a/internal/translator/gemini-web/openai/chat-completions/init.go b/internal/translator/gemini-web/openai/chat-completions/init.go new file mode 100644 index 00000000..9384bd04 --- /dev/null +++ b/internal/translator/gemini-web/openai/chat-completions/init.go @@ -0,0 +1,20 @@ +package chat_completions + +import ( + . "github.com/luispater/CLIProxyAPI/v5/internal/constant" + "github.com/luispater/CLIProxyAPI/v5/internal/interfaces" + geminiChat "github.com/luispater/CLIProxyAPI/v5/internal/translator/gemini/openai/chat-completions" + "github.com/luispater/CLIProxyAPI/v5/internal/translator/translator" +) + +func init() { + translator.Register( + OPENAI, + GEMINIWEB, + geminiChat.ConvertOpenAIRequestToGemini, + interfaces.TranslateResponse{ + Stream: geminiChat.ConvertGeminiResponseToOpenAI, + NonStream: geminiChat.ConvertGeminiResponseToOpenAINonStream, + }, + ) +} diff --git a/internal/translator/gemini-web/openai/responses/init.go b/internal/translator/gemini-web/openai/responses/init.go new file mode 100644 index 00000000..c7ed6149 --- /dev/null +++ b/internal/translator/gemini-web/openai/responses/init.go @@ -0,0 +1,20 @@ +package responses + +import ( + . "github.com/luispater/CLIProxyAPI/v5/internal/constant" + "github.com/luispater/CLIProxyAPI/v5/internal/interfaces" + geminiResponses "github.com/luispater/CLIProxyAPI/v5/internal/translator/gemini/openai/responses" + "github.com/luispater/CLIProxyAPI/v5/internal/translator/translator" +) + +func init() { + translator.Register( + OPENAI_RESPONSE, + GEMINIWEB, + geminiResponses.ConvertOpenAIResponsesRequestToGemini, + interfaces.TranslateResponse{ + Stream: geminiResponses.ConvertGeminiResponseToOpenAIResponses, + NonStream: geminiResponses.ConvertGeminiResponseToOpenAIResponsesNonStream, + }, + ) +} diff --git a/internal/translator/init.go b/internal/translator/init.go index 4905fc1f..f54db620 100644 --- a/internal/translator/init.go +++ b/internal/translator/init.go @@ -23,6 +23,9 @@ import ( _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/gemini/openai/chat-completions" _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/gemini/openai/responses" + _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/gemini-web/openai/chat-completions" + _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/gemini-web/openai/responses" + _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/openai/claude" _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/openai/gemini" _ "github.com/luispater/CLIProxyAPI/v5/internal/translator/openai/gemini-cli"