From 74183ff07941be4b2cf27af3402b6c9fd62f32fa Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sun, 21 Sep 2025 20:56:35 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BC=A0=E5=85=A5?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89base=5Furl(=E5=AE=9E=E9=AA=8C?= =?UTF-8?q?=E6=80=A7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/llm_models/model_client/gemini_client.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/llm_models/model_client/gemini_client.py b/src/llm_models/model_client/gemini_client.py index e58466d1..237d0724 100644 --- a/src/llm_models/model_client/gemini_client.py +++ b/src/llm_models/model_client/gemini_client.py @@ -4,6 +4,7 @@ import base64 from typing import Callable, AsyncIterator, Optional, Coroutine, Any, List from google import genai +from google.genai import _base_url as genai_base_url from google.genai.types import ( Content, Part, @@ -349,6 +350,11 @@ class GeminiClient(BaseClient): api_key=api_provider.api_key, ) # 这里和openai不一样,gemini会自己决定自己是否需要retry + # 尝试传入自定义base_url(实验性,必须为Gemini格式) + if hasattr(api_provider, "base_url") and api_provider.base_url: + self.base_url = api_provider.base_url + self.client._api_client._base_url = self.base_url + @staticmethod def clamp_thinking_budget(tb: int, model_id: str) -> int: """ From be3b80f90e09d1ae8cbc33b36adcbe072cc97544 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sun, 21 Sep 2025 21:08:07 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/llm_models/model_client/gemini_client.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/llm_models/model_client/gemini_client.py b/src/llm_models/model_client/gemini_client.py index 237d0724..4ff7d9d6 100644 --- a/src/llm_models/model_client/gemini_client.py +++ b/src/llm_models/model_client/gemini_client.py @@ -4,7 +4,6 @@ import base64 from typing import Callable, AsyncIterator, Optional, Coroutine, Any, List from google import genai -from google.genai import _base_url as genai_base_url from google.genai.types import ( Content, Part, @@ -352,8 +351,7 @@ class GeminiClient(BaseClient): # 尝试传入自定义base_url(实验性,必须为Gemini格式) if hasattr(api_provider, "base_url") and api_provider.base_url: - self.base_url = api_provider.base_url - self.client._api_client._base_url = self.base_url + self._api_client.http_options.base_url = api_provider.base_url @staticmethod def clamp_thinking_budget(tb: int, model_id: str) -> int: From 036be7a99b6fb32e7ee2bc3c2953b96eee7619c0 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sun, 21 Sep 2025 21:36:02 +0800 Subject: [PATCH 3/6] Update gemini_client.py --- src/llm_models/model_client/gemini_client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/llm_models/model_client/gemini_client.py b/src/llm_models/model_client/gemini_client.py index 4ff7d9d6..d80924ba 100644 --- a/src/llm_models/model_client/gemini_client.py +++ b/src/llm_models/model_client/gemini_client.py @@ -351,7 +351,8 @@ class GeminiClient(BaseClient): # 尝试传入自定义base_url(实验性,必须为Gemini格式) if hasattr(api_provider, "base_url") and api_provider.base_url: - self._api_client.http_options.base_url = api_provider.base_url + self.client._api_client._base_url = api_provider.base_url + self._api_client = self.client._api_client @staticmethod def clamp_thinking_budget(tb: int, model_id: str) -> int: From ce8b80a721bd8d416cf773ed8e1d1ea477a44830 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sun, 21 Sep 2025 21:54:37 +0800 Subject: [PATCH 4/6] Update gemini_client.py --- src/llm_models/model_client/gemini_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llm_models/model_client/gemini_client.py b/src/llm_models/model_client/gemini_client.py index d80924ba..7f747ad2 100644 --- a/src/llm_models/model_client/gemini_client.py +++ b/src/llm_models/model_client/gemini_client.py @@ -351,7 +351,7 @@ class GeminiClient(BaseClient): # 尝试传入自定义base_url(实验性,必须为Gemini格式) if hasattr(api_provider, "base_url") and api_provider.base_url: - self.client._api_client._base_url = api_provider.base_url + self.client._api_client._http_options.base_url = api_provider.base_url self._api_client = self.client._api_client @staticmethod From 978c627d7d059e0417fa0db6a0e3427e06c9245a Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sun, 21 Sep 2025 22:05:41 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/llm_models/model_client/gemini_client.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/llm_models/model_client/gemini_client.py b/src/llm_models/model_client/gemini_client.py index 7f747ad2..67c7475e 100644 --- a/src/llm_models/model_client/gemini_client.py +++ b/src/llm_models/model_client/gemini_client.py @@ -351,7 +351,14 @@ class GeminiClient(BaseClient): # 尝试传入自定义base_url(实验性,必须为Gemini格式) if hasattr(api_provider, "base_url") and api_provider.base_url: - self.client._api_client._http_options.base_url = api_provider.base_url + base_url = api_provider.base_url.rstrip("/") # 去掉末尾 / + self.client._api_client._http_options.base_url = base_url + + # 如果 base_url 已经带了 /v1 或 /v1beta,就清掉 SDK 的 api_version + if base_url.endswith("/v1") or base_url.endswith("/v1beta"): + self.client._api_client._http_options.api_version = None + + # 让 GeminiClient 内部也能访问底层 api_client self._api_client = self.client._api_client @staticmethod From 9ad5ebb209eafe59d8d794affd5360e4614aeb22 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sun, 21 Sep 2025 22:06:40 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=BB=98=E8=AE=A4API?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/model_config_template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/model_config_template.toml b/template/model_config_template.toml index 6b85cea3..9eae0e3e 100644 --- a/template/model_config_template.toml +++ b/template/model_config_template.toml @@ -23,7 +23,7 @@ retry_interval = 10 [[api_providers]] # 特殊:Google的Gimini使用特殊API,与OpenAI格式不兼容,需要配置client为"gemini" name = "Google" -base_url = "https://api.google.com/v1" +base_url = "https://generativelanguage.googleapis.com/v1beta" api_key = "your-google-api-key-1" client_type = "gemini" max_retry = 2