From 24f53bc237c6e992782232aa35e275597911a251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E5=BC=A0=E5=BC=9B?= Date: Sat, 14 Mar 2026 11:00:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor(llm=5Fclients):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E6=A8=A1=E5=BC=8F=E5=AE=9E=E7=8E=B0=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E5=AF=BC=E5=85=A5=E5=92=8C?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将硬编码的导入改为动态导入,并添加对缺失依赖的检查 为codex_oauth添加新的客户端支持 更新provider参数文档说明 --- tradingagents/llm_clients/factory.py | 47 +++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/tradingagents/llm_clients/factory.py b/tradingagents/llm_clients/factory.py index 028c88a2..27cc424d 100644 --- a/tradingagents/llm_clients/factory.py +++ b/tradingagents/llm_clients/factory.py @@ -1,9 +1,6 @@ from typing import Optional from .base_client import BaseLLMClient -from .openai_client import OpenAIClient -from .anthropic_client import AnthropicClient -from .google_client import GoogleClient def create_llm_client( @@ -15,7 +12,7 @@ def create_llm_client( """Create an LLM client for the specified provider. Args: - provider: LLM provider (openai, anthropic, google, xai, ollama, openrouter) + provider: LLM provider (openai, codex_oauth, anthropic, google, xai, ollama, openrouter) model: Model name/identifier base_url: Optional base URL for API endpoint **kwargs: Additional provider-specific arguments @@ -29,15 +26,57 @@ def create_llm_client( provider_lower = provider.lower() if provider_lower in ("openai", "ollama", "openrouter"): + try: + from .openai_client import OpenAIClient + except ModuleNotFoundError as exc: + raise ModuleNotFoundError( + "Missing dependency for OpenAI-compatible providers. " + "Install `langchain-openai`." + ) from exc + return OpenAIClient(model, base_url, provider=provider_lower, **kwargs) + if provider_lower == "codex_oauth": + try: + from .codex_oauth_client import CodexOAuthClient + except ModuleNotFoundError as exc: + raise ModuleNotFoundError( + "Missing dependency for codex_oauth provider. " + "Install `langchain-codex-oauth`." + ) from exc + + return CodexOAuthClient(model, base_url, **kwargs) + if provider_lower == "xai": + try: + from .openai_client import OpenAIClient + except ModuleNotFoundError as exc: + raise ModuleNotFoundError( + "Missing dependency for xAI provider. Install `langchain-openai`." + ) from exc + return OpenAIClient(model, base_url, provider="xai", **kwargs) if provider_lower == "anthropic": + try: + from .anthropic_client import AnthropicClient + except ModuleNotFoundError as exc: + raise ModuleNotFoundError( + "Missing dependency for Anthropic provider. " + "Install `langchain-anthropic`." + ) from exc + return AnthropicClient(model, base_url, **kwargs) if provider_lower == "google": + try: + from .google_client import GoogleClient + except ModuleNotFoundError as exc: + raise ModuleNotFoundError( + "Missing dependency for Google provider. " + "Install `langchain-google-genai`." + ) from exc + return GoogleClient(model, base_url, **kwargs) raise ValueError(f"Unsupported LLM provider: {provider}")