ModalTranscriberMCP / src /adapters /transcription_adapter_factory.py
richard-su's picture
Upload folder using huggingface_hub
b5df735 verified
"""
Factory for creating transcription adapters
"""
import os
from typing import Optional
from ..interfaces.transcriber import ITranscriber
from ..utils.config import AudioProcessingConfig
from ..utils.errors import ConfigurationError
from .local_adapter import LocalTranscriptionAdapter
from .modal_adapter import ModalTranscriptionAdapter
class TranscriptionAdapterFactory:
"""Factory for creating appropriate transcription adapters"""
@staticmethod
def create_adapter(
deployment_mode: str = "auto",
config: Optional[AudioProcessingConfig] = None,
endpoint_url: Optional[str] = None
) -> ITranscriber:
"""
Create transcription adapter based on deployment mode
Args:
deployment_mode: "local", "modal", or "auto"
config: Configuration object
endpoint_url: Modal endpoint URL (for modal/auto mode)
Returns:
ITranscriber: Appropriate transcription adapter
"""
config = config or AudioProcessingConfig()
# Auto mode: decide based on environment and endpoint availability
if deployment_mode == "auto":
if endpoint_url:
print(f"🌐 Auto mode: Using Modal adapter with endpoint {endpoint_url}")
return ModalTranscriptionAdapter(config=config, endpoint_url=endpoint_url)
else:
print(f"🏠 Auto mode: Using Local adapter (no endpoint configured)")
return LocalTranscriptionAdapter(config=config)
# Explicit local mode
elif deployment_mode == "local":
print(f"🏠 Using Local transcription adapter")
return LocalTranscriptionAdapter(config=config)
# Explicit modal mode
elif deployment_mode == "modal":
if not endpoint_url:
raise ConfigurationError(
"Modal endpoint URL is required for modal mode",
config_key="endpoint_url"
)
print(f"🌐 Using Modal transcription adapter with endpoint {endpoint_url}")
return ModalTranscriptionAdapter(config=config, endpoint_url=endpoint_url)
else:
raise ConfigurationError(
f"Unsupported deployment mode: {deployment_mode}. Use 'local', 'modal', or 'auto'",
config_key="deployment_mode"
)
@staticmethod
def _detect_deployment_mode() -> str:
"""Auto-detect deployment mode based on environment"""
import os
# Check if running in Modal environment
if os.environ.get("MODAL_TASK_ID"):
return "local" # We're inside Modal, use local processing
else:
return "modal" # We're outside Modal, use remote endpoint