""" Provider adapter factory. Creates the appropriate adapter based on provider name. """ from .base import BaseProviderAdapter from .openai import OpenAIAdapter from .other_providers import ( GeminiAdapter, GLMAdapter, KimiAdapter, MinimaxAdapter, ModelScopeAdapter, NvidiaAdapter, SiliconFlowAdapter, ) # Cache adapter instances for reuse _adapter_cache: dict[str, BaseProviderAdapter] = {} def get_provider_adapter( provider: str, ) -> BaseProviderAdapter: """ Get provider adapter instance. Args: provider: Provider name (openai, gemini, siliconflow, etc.) Returns: Provider adapter instance """ # Return cached instance if available if provider in _adapter_cache: return _adapter_cache[provider] # Create new adapter instance adapter: BaseProviderAdapter match provider: case "openai" | "openai_compatibility": adapter = OpenAIAdapter() case "siliconflow": adapter = SiliconFlowAdapter() case "kimi": adapter = KimiAdapter() case "glm": adapter = GLMAdapter() case "deepseek": adapter = GLMAdapter() case "volcengine": adapter = GLMAdapter() case "modelscope": adapter = ModelScopeAdapter() case "gemini": adapter = GeminiAdapter() case "nvidia": adapter = NvidiaAdapter() case "minimax": adapter = MinimaxAdapter() case _: # Fallback to OpenAI adapter for unknown providers # (assumes OpenAI-compatible API) import warnings warnings.warn(f"Unknown provider: {provider}, using OpenAI adapter as fallback") adapter = OpenAIAdapter() # Cache for future use _adapter_cache[provider] = adapter return adapter def is_provider_supported(provider: str) -> bool: """Check if provider is supported.""" return provider in [ "openai", "openai_compatibility", "siliconflow", "kimi", "glm", "deepseek", "volcengine", "modelscope", "gemini", "nvidia", "minimax", ] # Export all supported providers SUPPORTED_PROVIDERS: list[str] = [ "openai", "openai_compatibility", "siliconflow", "kimi", "glm", "deepseek", "volcengine", "modelscope", "gemini", "nvidia", "minimax", ]