From ee908ee8d061daaccd6974e79a57f94b25d4125d Mon Sep 17 00:00:00 2001 From: huanshang141 <1375436987@qq.com> Date: Fri, 14 Feb 2025 00:34:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=94=B9ensure=5Fopenai=5Fbase=5F?= =?UTF-8?q?url=5Fhas=5Fv1=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=BC=BA=E5=88=B6?= =?UTF-8?q?=E4=BD=BF=E7=94=A8base=20url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- llm_adapters.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/llm_adapters.py b/llm_adapters.py index 6437509..7b20f45 100644 --- a/llm_adapters.py +++ b/llm_adapters.py @@ -7,10 +7,19 @@ from google import genai from google.genai import types def ensure_openai_base_url_has_v1(url: str) -> str: + """ + 处理base_url的规则: + 1. 如果url以#结尾,则移除#并直接使用用户提供的url + 2. 否则检查是否需要添加/v1后缀 + """ import re url = url.strip() if not url: return url + + if url.endswith('#'): + return url.rstrip('#') + if not re.search(r'/v\d+$', url): if '/v1' not in url: url = url.rstrip('/') + '/v1' From 72f20d15e5973c4f2a7be2a2200fd12fd78da53e Mon Sep 17 00:00:00 2001 From: huanshang141 <1375436987@qq.com> Date: Fri, 14 Feb 2025 00:38:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E4=B8=BAcheck=5Fbase=5Furl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- llm_adapters.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/llm_adapters.py b/llm_adapters.py index 7b20f45..538d2c3 100644 --- a/llm_adapters.py +++ b/llm_adapters.py @@ -6,7 +6,7 @@ from langchain_openai import ChatOpenAI, AzureChatOpenAI from google import genai from google.genai import types -def ensure_openai_base_url_has_v1(url: str) -> str: +def check_base_url(url: str) -> str: """ 处理base_url的规则: 1. 如果url以#结尾,则移除#并直接使用用户提供的url @@ -37,7 +37,7 @@ class DeepSeekAdapter(BaseLLMAdapter): 适配官方/OpenAI兼容接口(使用 langchain.ChatOpenAI) """ def __init__(self, api_key: str, base_url: str, model_name: str, max_tokens: int, temperature: float = 0.7, timeout: Optional[int] = 600): - self.base_url = ensure_openai_base_url_has_v1(base_url) + self.base_url = check_base_url(base_url) self.api_key = api_key self.model_name = model_name self.max_tokens = max_tokens @@ -65,7 +65,7 @@ class OpenAIAdapter(BaseLLMAdapter): 适配官方/OpenAI兼容接口(使用 langchain.ChatOpenAI) """ def __init__(self, api_key: str, base_url: str, model_name: str, max_tokens: int, temperature: float = 0.7, timeout: Optional[int] = 600): - self.base_url = ensure_openai_base_url_has_v1(base_url) + self.base_url = check_base_url(base_url) self.api_key = api_key self.model_name = model_name self.max_tokens = max_tokens @@ -162,7 +162,7 @@ class OllamaAdapter(BaseLLMAdapter): Ollama 同样有一个 OpenAI-like /v1/chat 接口,可直接使用 ChatOpenAI。 """ def __init__(self, api_key: str, base_url: str, model_name: str, max_tokens: int, temperature: float = 0.7, timeout: Optional[int] = 600): - self.base_url = ensure_openai_base_url_has_v1(base_url) + self.base_url = check_base_url(base_url) self.api_key = api_key self.model_name = model_name self.max_tokens = max_tokens @@ -187,7 +187,7 @@ class OllamaAdapter(BaseLLMAdapter): class MLStudioAdapter(BaseLLMAdapter): def __init__(self, api_key: str, base_url: str, model_name: str, max_tokens: int, temperature: float = 0.7, timeout: Optional[int] = 600): - self.base_url = ensure_openai_base_url_has_v1(base_url) + self.base_url = check_base_url(base_url) self.api_key = api_key self.model_name = model_name self.max_tokens = max_tokens