jamiepine/voicebox · error · RuntimeError

Downloadable CUDA backend releases are currently only publis

Error message

Downloadable CUDA backend releases are currently only published for Windows.

What it means

The CUDA backend ships as a prebuilt PyInstaller --onedir bundle downloaded from GitHub Releases, but those release assets are only published for Windows. ensure_cuda_download_supported() calls is_cuda_download_supported() which returns (sys.platform == 'win32'); on any other OS it raises RuntimeError with CUDA_DOWNLOAD_UNSUPPORTED_REASON. This is a hard platform gate enforced before any network call in _download_cuda_binary_locked().

Source

Thrown at backend/services/cuda.py:84


def is_cuda_download_supported() -> bool:
    """Return whether this platform has a matching CUDA release asset."""
    return sys.platform == "win32"


def get_cuda_download_unsupported_reason() -> str | None:
    """Explain why this platform cannot use the release-download flow."""
    if is_cuda_download_supported():
        return None
    return CUDA_DOWNLOAD_UNSUPPORTED_REASON


def ensure_cuda_download_supported() -> None:
    """Raise if downloading would fetch an asset built for another platform."""
    reason = get_cuda_download_unsupported_reason()
    if reason:
        raise RuntimeError(reason)


def get_cuda_binary_path() -> Optional[Path]:
    """Return path to the CUDA executable if it exists inside the onedir."""
    p = get_cuda_dir() / get_cuda_exe_name()
    if p.exists():
        return p
    return None


def get_cuda_libs_manifest_path() -> Path:
    """Path to the cuda-libs.json manifest inside the CUDA dir."""
    return get_cuda_dir() / "cuda-libs.json"


def get_installed_cuda_libs_version() -> Optional[str]:
    """Read the installed CUDA libs version from cuda-libs.json, or None."""
    manifest_path = get_cuda_libs_manifest_path()

View on GitHub (pinned to 51f49dea19)

Solutions

  1. On Linux/macOS use the ROCm backend (see backend/services/rocm.py and docker-compose.rocm.yml) or run the app on Windows.
  2. Gate any UI/API affordance behind get_cuda_download_unsupported_reason() and surface the reason instead of calling download_cuda_binary().
  3. Run on Windows where the release assets (voicebox-server-cuda.tar.gz, cuda-libs-*.tar.gz) are actually published.

Example fix

// before
await download_cuda_binary(version)

// after
from backend.services.cuda import get_cuda_download_unsupported_reason
reason = get_cuda_download_unsupported_reason()
if reason:
    return {"error": reason}  # route to ROCm/CPU backend instead
await download_cuda_binary(version)
Defensive patterns

Strategy: validation

Validate before calling

from backend.services.cuda import get_cuda_download_unsupported_reason
reason = get_cuda_download_unsupported_reason()
if reason:
    # platform unsupported: surface to user, route to ROCm/CPU backend
    raise SystemExit(reason)

Try / catch

try:
    await download_cuda_binary(version)
except RuntimeError as e:
    if "only published for Windows" in str(e):
        # platform gate — not retriable; switch backend
        ...
    raise

Prevention

When it happens

Trigger: Invoking download_cuda_binary() or check_and_update_cuda_binary() (or an HTTP endpoint / server-startup hook that calls them) on macOS or Linux. sys.platform is not 'win32', so get_cuda_download_unsupported_reason() returns the reason string and ensure_cuda_download_supported() raises.

Common situations: Running Voicebox on Linux/macOS and triggering the CUDA backend download from the UI; server-startup auto-update running on a Linux host; CI on Linux exercising the CUDA code path. On Linux the ROCm backend (rocm.py, docker-compose.rocm.yml) is the supported GPU path.

Related errors


AI-assisted analysis of jamiepine/voicebox@51f49dea19 (2026-08-12). Data as JSON: /api/errors/bf17e3a0ae89372a. Report an issue: GitHub.