feat: add DeepSeek and Minimax (m2.7) translation providers
New providers: - DeepSeek: direct API with deepseek-chat model, very cost-effective - Minimax: MiniMax-M1 model via OpenAI-compatible API, supports m2.7 Changes: - Full provider implementations with retry, health check, batch support - Provider config with env vars (DEEPSEEK_*, MINIMAX_*) - Auto-registration in provider registry - Updated fallback chain to include new providers - Updated setup-env.sh wizard with options 6 (deepseek) and 7 (minimax) - Updated manage-keys.sh with new menu entries and provider switching - Updated docker-compose.yml with new env vars Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -96,12 +96,31 @@ class ProvidersConfig:
|
||||
OPENROUTER_API_KEY: str = os.getenv("OPENROUTER_API_KEY", "")
|
||||
OPENROUTER_MODEL: str = os.getenv("OPENROUTER_MODEL", "deepseek/deepseek-chat")
|
||||
|
||||
# DeepSeek (direct API)
|
||||
DEEPSEEK_ENABLED: bool = os.getenv("DEEPSEEK_ENABLED", "false").lower() == "true"
|
||||
DEEPSEEK_API_KEY: str = os.getenv("DEEPSEEK_API_KEY", "")
|
||||
DEEPSEEK_MODEL: str = os.getenv("DEEPSEEK_MODEL", "deepseek-chat")
|
||||
DEEPSEEK_BASE_URL: str = os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1")
|
||||
DEEPSEEK_TIMEOUT: int = int(os.getenv("DEEPSEEK_TIMEOUT", "60"))
|
||||
DEEPSEEK_MAX_RETRIES: int = int(os.getenv("DEEPSEEK_MAX_RETRIES", "3"))
|
||||
DEEPSEEK_RETRY_DELAY: float = float(os.getenv("DEEPSEEK_RETRY_DELAY", "1.0"))
|
||||
|
||||
# Minimax (direct API - m2.7, MiniMax-M1)
|
||||
MINIMAX_ENABLED: bool = os.getenv("MINIMAX_ENABLED", "false").lower() == "true"
|
||||
MINIMAX_API_KEY: str = os.getenv("MINIMAX_API_KEY", "")
|
||||
MINIMAX_MODEL: str = os.getenv("MINIMAX_MODEL", "MiniMax-M1")
|
||||
MINIMAX_BASE_URL: str = os.getenv("MINIMAX_BASE_URL", "https://api.minimax.chat/v1")
|
||||
MINIMAX_GROUP_ID: str = os.getenv("MINIMAX_GROUP_ID", "")
|
||||
MINIMAX_TIMEOUT: int = int(os.getenv("MINIMAX_TIMEOUT", "60"))
|
||||
MINIMAX_MAX_RETRIES: int = int(os.getenv("MINIMAX_MAX_RETRIES", "3"))
|
||||
MINIMAX_RETRY_DELAY: float = float(os.getenv("MINIMAX_RETRY_DELAY", "1.0"))
|
||||
|
||||
# Fallback chain configuration
|
||||
# General fallback chain (backward compatibility)
|
||||
FALLBACK_CHAIN: List[str] = [
|
||||
name.strip()
|
||||
for name in os.getenv(
|
||||
"PROVIDER_FALLBACK_CHAIN", "google,deepl,openai,ollama,openrouter"
|
||||
"PROVIDER_FALLBACK_CHAIN", "google,deepl,deepseek,minimax,openai,ollama,openrouter"
|
||||
).split(",")
|
||||
if name.strip()
|
||||
]
|
||||
@@ -186,6 +205,18 @@ class ProvidersConfig:
|
||||
base_url="https://openrouter.ai/api/v1",
|
||||
model=cls.OPENROUTER_MODEL,
|
||||
),
|
||||
"deepseek": ProviderSettings(
|
||||
enabled=cls.DEEPSEEK_ENABLED,
|
||||
api_key=cls.DEEPSEEK_API_KEY if cls.DEEPSEEK_API_KEY else None,
|
||||
base_url=cls.DEEPSEEK_BASE_URL,
|
||||
model=cls.DEEPSEEK_MODEL,
|
||||
),
|
||||
"minimax": ProviderSettings(
|
||||
enabled=cls.MINIMAX_ENABLED,
|
||||
api_key=cls.MINIMAX_API_KEY if cls.MINIMAX_API_KEY else None,
|
||||
base_url=cls.MINIMAX_BASE_URL,
|
||||
model=cls.MINIMAX_MODEL,
|
||||
),
|
||||
}
|
||||
return settings_map.get(provider_name.lower(), ProviderSettings())
|
||||
|
||||
@@ -206,7 +237,7 @@ class ProvidersConfig:
|
||||
return False
|
||||
|
||||
# Providers requiring API keys
|
||||
providers_requiring_key = {"deepl", "openai", "openrouter", "google_cloud"}
|
||||
providers_requiring_key = {"deepl", "openai", "openrouter", "google_cloud", "deepseek", "minimax"}
|
||||
|
||||
if provider_name.lower() in providers_requiring_key:
|
||||
return bool(settings.api_key)
|
||||
|
||||
Reference in New Issue
Block a user