veeiiinnnnn's picture
Add backend-python and Dockerfile
4ef118d
"""
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",
]