The MT Providers framework provides a unified interface for machine translation services. This document contains the complete API reference for developers.
Abstract base class that all translation providers must inherit from.
from mt_providers import BaseTranslationProvider
from mt_providers.types import TranslationConfig, TranslationResponse
class MyProvider(BaseTranslationProvider):
name = "my_provider"
requires_region = False
supports_async = True
max_chunk_size = 5000
def translate(self, text: str, source_lang: str, target_lang: str) -> TranslationResponse:
# Implementation here
passname(str): Unique identifier for the providerrequires_region(bool): Whether provider requires a region parametersupports_async(bool): Whether provider supports async operationsmax_chunk_size(int): Maximum characters per translation request
translate(text, source_lang, target_lang): Translate a single textbulk_translate(texts, source_lang, target_lang): Translate multiple textstranslate_async(text, source_lang, target_lang): Async translation (optional)
Register a translation provider with the framework.
Parameters:
name(str): Unique identifier for the providerprovider_class(Type[BaseTranslationProvider]): Provider class
Raises:
ProviderError: If provider name is already registered or class is invalid
Get a registered provider by name.
Parameters:
name(str): Name of the provider to retrieve
Returns:
Type[BaseTranslationProvider]: The provider class
Raises:
ProviderNotFoundError: If provider is not found
Discover and register providers from entry points.
Parameters:
entry_point_group(str): Entry point group nameraise_errors(bool): Whether to raise exceptions on errors
Returns:
List[str]: List of successfully registered provider names
List all registered provider names.
Returns:
List[str]: Sorted list of provider names
Configuration object for translation providers.
@dataclass
class TranslationConfig:
api_key: str
endpoint: Optional[str] = None
region: Optional[str] = None
timeout: int = 30
rate_limit: Optional[int] = None
retry_attempts: int = 3
retry_backoff: float = 1.0Standardized response from translation operations.
class TranslationResponse(TypedDict):
translated_text: str
source_lang: str
target_lang: str
provider: str
char_count: int
status: TranslationStatus
error: Optional[str]
request_id: str
timestamp: datetime
metadata: Dict[str, Any]Enumeration of translation statuses.
class TranslationStatus(Enum):
SUCCESS = "success"
FAILED = "failed"
PENDING = "pending"TranslationError (base)
├── ProviderError
│ ├── ProviderNotFoundError
│ └── ConfigurationError
└── ValidationError
Base exception class for all translation-related errors.
Base exception for provider-related errors.
Raised when a requested provider is not found in the registry.
Raised when there is an error in provider configuration.
Raised when validation fails for inputs like language codes.
from mt_providers import get_provider
from mt_providers.types import TranslationConfig
# Configure provider
config = TranslationConfig(
api_key="your-api-key",
region="your-region"
)
# Get provider instance
translator = get_provider("microsoft")(config)
# Translate text
result = translator.translate("Hello world", "en", "es")
print(result["translated_text"]) # "¡Hola mundo!"texts = ["Hello", "World", "How are you?"]
results = translator.bulk_translate(texts, "en", "es")
for result in results:
print(f"{result['translated_text']} (status: {result['status']})")import asyncio
async def translate_async():
result = await translator.translate_async("Hello world", "en", "es")
print(result["translated_text"])
asyncio.run(translate_async())from mt_providers.exceptions import ProviderNotFoundError, ConfigurationError
try:
translator = get_provider("nonexistent")
except ProviderNotFoundError as e:
print(f"Provider not found: {e}")
try:
config = TranslationConfig(api_key="") # Invalid config
translator = get_provider("microsoft")(config)
except ConfigurationError as e:
print(f"Configuration error: {e}")from mt_providers.utils import validate_language_code, normalize_language_code
# Validate language codes
assert validate_language_code("en-US") == True
assert validate_language_code("invalid") == False
# Normalize language codes
normalized = normalize_language_code("en-US") # Returns "en-us"from mt_providers.registry import check_provider_health
from mt_providers.types import TranslationConfig
config = TranslationConfig(api_key="test-key")
is_healthy = await check_provider_health("microsoft", config)- Use
bulk_translate()for multiple texts to reduce API calls - Configure appropriate
rate_limitto avoid hitting API limits - Set reasonable
timeoutvalues for network requests - Use async methods when available for better concurrency