diff --git a/llm_adapters.py b/llm_adapters.py index ab1ad16..52012ea 100644 --- a/llm_adapters.py +++ b/llm_adapters.py @@ -9,11 +9,20 @@ from azure.ai.inference import ChatCompletionsClient from azure.core.credentials import AzureKeyCredential from azure.ai.inference.models import SystemMessage, UserMessage -def ensure_openai_base_url_has_v1(url: str) -> str: +def check_base_url(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' @@ -31,7 +40,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 @@ -59,7 +68,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 @@ -156,7 +165,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 @@ -181,7 +190,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