refactor: lazy-import LLM client modules in factory to avoid SDK init at collection time

This commit is contained in:
Clayton Brown 2026-04-21 16:56:16 +10:00
parent aae3c99743
commit 051ba93bc3
1 changed files with 7 additions and 4 deletions

View File

@ -1,10 +1,6 @@
from typing import Optional from typing import Optional
from .base_client import BaseLLMClient from .base_client import BaseLLMClient
from .openai_client import OpenAIClient
from .anthropic_client import AnthropicClient
from .google_client import GoogleClient
from .azure_client import AzureOpenAIClient
# Providers that use the OpenAI-compatible chat completions API # Providers that use the OpenAI-compatible chat completions API
_OPENAI_COMPATIBLE = ( _OPENAI_COMPATIBLE = (
@ -20,6 +16,9 @@ def create_llm_client(
) -> BaseLLMClient: ) -> BaseLLMClient:
"""Create an LLM client for the specified provider. """Create an LLM client for the specified provider.
Client modules are imported lazily so that collecting tests or importing
the package does not trigger heavy LLM SDK initialization.
Args: Args:
provider: LLM provider name provider: LLM provider name
model: Model name/identifier model: Model name/identifier
@ -35,15 +34,19 @@ def create_llm_client(
provider_lower = provider.lower() provider_lower = provider.lower()
if provider_lower in _OPENAI_COMPATIBLE: if provider_lower in _OPENAI_COMPATIBLE:
from .openai_client import OpenAIClient
return OpenAIClient(model, base_url, provider=provider_lower, **kwargs) return OpenAIClient(model, base_url, provider=provider_lower, **kwargs)
if provider_lower == "anthropic": if provider_lower == "anthropic":
from .anthropic_client import AnthropicClient
return AnthropicClient(model, base_url, **kwargs) return AnthropicClient(model, base_url, **kwargs)
if provider_lower == "google": if provider_lower == "google":
from .google_client import GoogleClient
return GoogleClient(model, base_url, **kwargs) return GoogleClient(model, base_url, **kwargs)
if provider_lower == "azure": if provider_lower == "azure":
from .azure_client import AzureOpenAIClient
return AzureOpenAIClient(model, base_url, **kwargs) return AzureOpenAIClient(model, base_url, **kwargs)
raise ValueError(f"Unsupported LLM provider: {provider}") raise ValueError(f"Unsupported LLM provider: {provider}")