Spaces:
Sleeping
Sleeping
| """ | |
| Platform detection for backend selection. | |
| """ | |
| import platform | |
| from typing import Literal | |
| def is_apple_silicon() -> bool: | |
| """ | |
| Check if running on Apple Silicon (arm64 macOS). | |
| Returns: | |
| True if on Apple Silicon, False otherwise | |
| """ | |
| return platform.system() == "Darwin" and platform.machine() == "arm64" | |
| def get_backend_type() -> Literal["mlx", "pytorch"]: | |
| """ | |
| Detect the best backend for the current platform. | |
| Returns: | |
| "mlx" on Apple Silicon (if MLX is available and functional), "pytorch" otherwise | |
| """ | |
| if is_apple_silicon(): | |
| try: | |
| import mlx.core # noqa: F401 — triggers native lib loading | |
| return "mlx" | |
| except (ImportError, OSError, RuntimeError): | |
| # MLX not installed, or native libraries failed to load inside a | |
| # PyInstaller bundle (OSError on missing .dylib / .metallib). | |
| # Fall through to PyTorch. | |
| return "pytorch" | |
| return "pytorch" | |