From 13e8b114614bb62a5008303fa366931813f6cd8a Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Fri, 13 Mar 2026 19:26:32 +0200 Subject: [PATCH 01/23] Will make CUDA optional to reduce bundle sizes # Conflicts: # .github/workflows/ci.yml # installer.iss --- .github/workflows/ci.yml | 7 -- buzz/cuda_manager.py | 124 ++++++++++++++++++++++++ buzz/cuda_setup.py | 6 +- buzz/settings/settings.py | 3 + buzz/widgets/cuda_installer_widget.py | 133 ++++++++++++++++++++++++++ buzz/widgets/main_window.py | 21 ++++ installer.iss | 1 - 7 files changed, 286 insertions(+), 9 deletions(-) create mode 100644 buzz/cuda_manager.py create mode 100644 buzz/widgets/cuda_installer_widget.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40bc01ff8..9d6a89983 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -181,11 +181,6 @@ jobs: run: | if [ "$RUNNER_OS" == "Windows" ]; then uv pip install msvc-runtime - uv pip install -U torch==2.8.0+cu129 torchaudio==2.8.0+cu129 --index-url https://download.pytorch.org/whl/cu129 - uv pip install nvidia-cublas-cu12==12.9.1.4 nvidia-cuda-cupti-cu12==12.9.79 nvidia-cuda-runtime-cu12==12.9.79 --extra-index-url https://pypi.ngc.nvidia.com - - uv cache clean - uv run pip cache purge fi shell: bash @@ -264,7 +259,6 @@ jobs: name: Buzz-${{ runner.os }}-${{ runner.arch }} path: | dist/Buzz*-windows.exe - dist/Buzz*-windows-*.bin dist/Buzz*-mac.dmg dist/Buzz*.AppImage @@ -365,7 +359,6 @@ jobs: files: | Buzz*-unix.tar.gz Buzz*.exe - Buzz*.bin Buzz*.dmg Buzz*.AppImage diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py new file mode 100644 index 000000000..737e58c57 --- /dev/null +++ b/buzz/cuda_manager.py @@ -0,0 +1,124 @@ +""" +Utilities for checking and installing CUDA support at runtime. +""" + +import logging +import os +import subprocess +import sys +from pathlib import Path + +logger = logging.getLogger(__name__) + +# Pinned CUDA torch versions for in-app installation +CUDA_INDEX_URL = "https://download.pytorch.org/whl/cu129" +CUDA_TORCH_PACKAGES = [ + "torch==2.8.0+cu129", + "torchaudio==2.8.0+cu129", +] +CUDA_NVIDIA_PACKAGES = [ + "nvidia-cublas-cu12==12.9.1.4", + "nvidia-cuda-cupti-cu12==12.9.79", + "nvidia-cuda-runtime-cu12==12.9.79", +] +CUDA_NVIDIA_INDEX_URL = "https://pypi.ngc.nvidia.com" + + +def is_snap() -> bool: + """Returns True if running inside a Snap package.""" + return "SNAP" in os.environ + + +def is_flatpak() -> bool: + """Returns True if running inside a Flatpak sandbox.""" + return "FLATPAK_ID" in os.environ + + +def should_offer_cuda_prompt() -> bool: + """Returns True on platforms where in-app CUDA installation is supported.""" + if sys.platform == "win32": + return True + if sys.platform == "linux": + return is_snap() or is_flatpak() + return False + + +def is_cuda_torch_installed() -> bool: + """Returns True if torch with CUDA support is available.""" + try: + import torch + return torch.cuda.is_available() + except ImportError: + return False + + +def is_nvidia_gpu_present() -> bool: + """Returns True if an NVIDIA GPU is detected. + + Tries nvidia-smi first, then falls back to /proc/driver/nvidia/version + which is accessible inside Snap and Flatpak sandboxes without executing + an external binary. + """ + try: + result = subprocess.run( + ["nvidia-smi"], + capture_output=True, + timeout=5, + ) + if result.returncode == 0: + return True + except (FileNotFoundError, subprocess.TimeoutExpired, OSError): + pass + + # Fallback: kernel driver version file — present when NVIDIA driver is loaded + return Path("/proc/driver/nvidia/version").exists() + + +def install_cuda(progress_callback=None): + """ + Install CUDA-enabled torch and nvidia libraries into user site-packages. + + Args: + progress_callback: Optional callable(str) called with status messages. + """ + def report(msg): + logger.info(msg) + if progress_callback: + progress_callback(msg) + + report("Installing CUDA-enabled PyTorch...") + _pip_install( + CUDA_TORCH_PACKAGES, + extra_args=["--index-url", CUDA_INDEX_URL, "--user"], + progress_callback=report, + ) + + report("Installing NVIDIA CUDA libraries...") + _pip_install( + CUDA_NVIDIA_PACKAGES, + extra_args=["--extra-index-url", CUDA_NVIDIA_INDEX_URL, "--user"], + progress_callback=report, + ) + + report("CUDA installation complete. Please restart Buzz to enable GPU acceleration.") + + +def _pip_install(packages, extra_args=None, progress_callback=None): + cmd = [sys.executable, "-m", "pip", "install"] + packages + if extra_args: + cmd += extra_args + + process = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + ) + for line in process.stdout: + line = line.rstrip() + if line and progress_callback: + progress_callback(line) + + process.wait() + if process.returncode != 0: + raise RuntimeError(f"pip install failed with exit code {process.returncode}") diff --git a/buzz/cuda_setup.py b/buzz/cuda_setup.py index d99b402ef..69c82f14e 100644 --- a/buzz/cuda_setup.py +++ b/buzz/cuda_setup.py @@ -25,8 +25,12 @@ def _get_nvidia_package_lib_dirs() -> list[Path]: """Find all nvidia package library directories in site-packages.""" lib_dirs = [] - # Find site-packages directories + # Find site-packages directories (including user site-packages for runtime-installed CUDA) site_packages_dirs = [] + import site + user_site = site.getusersitepackages() + if user_site: + site_packages_dirs.append(Path(user_site)) for path in sys.path: if "site-packages" in path: site_packages_dirs.append(Path(path)) diff --git a/buzz/settings/settings.py b/buzz/settings/settings.py index 0f9242a4b..062eca2e0 100644 --- a/buzz/settings/settings.py +++ b/buzz/settings/settings.py @@ -85,6 +85,9 @@ class Key(enum.Enum): LAST_UPDATE_CHECK = "update/last-check" UPDATE_AVAILABLE_VERSION = "update/available-version" + CUDA_PROMPT_SHOWN = "cuda/prompt-shown" + CUDA_INSTALL_DECLINED = "cuda/install-declined" + def get_user_identifier(self) -> str: user_id = self.value(self.Key.USER_IDENTIFIER, "") if not user_id: diff --git a/buzz/widgets/cuda_installer_widget.py b/buzz/widgets/cuda_installer_widget.py new file mode 100644 index 000000000..010e1c2fa --- /dev/null +++ b/buzz/widgets/cuda_installer_widget.py @@ -0,0 +1,133 @@ +""" +Dialog for installing GPU (CUDA) acceleration at runtime. +""" + +import logging +from typing import Optional + +from PyQt6.QtCore import QRunnable, QThreadPool, pyqtSignal, QObject +from PyQt6.QtWidgets import ( + QDialog, + QVBoxLayout, + QHBoxLayout, + QLabel, + QPushButton, + QProgressBar, + QTextEdit, + QWidget, +) + +from buzz.locale import _ +from buzz.widgets.icon import BUZZ_ICON_PATH +from PyQt6.QtGui import QIcon + +logger = logging.getLogger(__name__) + + +class _InstallSignals(QObject): + progress = pyqtSignal(str) + finished = pyqtSignal() + error = pyqtSignal(str) + + +class _InstallWorker(QRunnable): + def __init__(self): + super().__init__() + self.signals = _InstallSignals() + + def run(self): + try: + from buzz.cuda_manager import install_cuda + install_cuda(progress_callback=self.signals.progress.emit) + self.signals.finished.emit() + except Exception as exc: + logger.exception("CUDA installation failed") + self.signals.error.emit(str(exc)) + + +class CudaInstallerDialog(QDialog): + """Dialog that offers to install CUDA GPU acceleration.""" + + def __init__(self, parent: Optional[QWidget] = None): + super().__init__(parent) + self.setWindowTitle(_("GPU Acceleration")) + self.setWindowIcon(QIcon(BUZZ_ICON_PATH)) + self.setMinimumWidth(500) + + layout = QVBoxLayout(self) + layout.setSpacing(12) + + header = QLabel(_("Install GPU Acceleration?")) + header.setStyleSheet("font-size: 15px; font-weight: bold;") + layout.addWidget(header) + + desc = QLabel( + _( + "An NVIDIA GPU was detected. Installing GPU acceleration allows Buzz " + "to transcribe audio significantly faster using CUDA.\n\n" + "This will download and install PyTorch with CUDA support (~2 GB). " + "Buzz must be restarted after installation." + ) + ) + desc.setWordWrap(True) + layout.addWidget(desc) + + self.log_view = QTextEdit() + self.log_view.setReadOnly(True) + self.log_view.setMaximumHeight(120) + self.log_view.setVisible(False) + layout.addWidget(self.log_view) + + self.progress_bar = QProgressBar() + self.progress_bar.setRange(0, 0) # indeterminate + self.progress_bar.setVisible(False) + layout.addWidget(self.progress_bar) + + self.status_label = QLabel("") + layout.addWidget(self.status_label) + + button_layout = QHBoxLayout() + self.install_button = QPushButton(_("Install GPU Support")) + self.install_button.setDefault(True) + self.install_button.clicked.connect(self._on_install_clicked) + + self.decline_button = QPushButton(_("Not Now")) + self.decline_button.clicked.connect(self.reject) + + button_layout.addStretch() + button_layout.addWidget(self.decline_button) + button_layout.addWidget(self.install_button) + layout.addLayout(button_layout) + + def _on_install_clicked(self): + self.install_button.setEnabled(False) + self.decline_button.setEnabled(False) + self.progress_bar.setVisible(True) + self.log_view.setVisible(True) + + worker = _InstallWorker() + worker.signals.progress.connect(self._on_progress) + worker.signals.finished.connect(self._on_finished) + worker.signals.error.connect(self._on_error) + + QThreadPool.globalInstance().start(worker) + + def _on_progress(self, message: str): + self.log_view.append(message) + self.status_label.setText(message[:80]) + + def _on_finished(self): + self.progress_bar.setVisible(False) + self.status_label.setText( + _("Installation complete! Restart Buzz to enable GPU acceleration.") + ) + self.install_button.setText(_("Close")) + self.install_button.setEnabled(True) + self.install_button.clicked.disconnect() + self.install_button.clicked.connect(self.accept) + + def _on_error(self, error: str): + self.progress_bar.setVisible(False) + self.status_label.setText(_("Installation failed: {}").format(error)) + self.install_button.setEnabled(True) + self.decline_button.setEnabled(True) diff --git a/buzz/widgets/main_window.py b/buzz/widgets/main_window.py index f877321af..aebb910ee 100644 --- a/buzz/widgets/main_window.py +++ b/buzz/widgets/main_window.py @@ -165,6 +165,9 @@ def __init__(self, transcription_service: TranscriptionService): #Initialize and run update checker self._init_update_checker() + #Offer CUDA installation on Windows if not done before + self._maybe_show_cuda_prompt() + def on_preferences_changed(self, preferences: Preferences): self.preferences = preferences self.save_preferences(preferences) @@ -516,6 +519,24 @@ def _on_update_available(self, update_info: UpdateInfo): self._update_info = update_info self.toolbar.set_update_available(True) + def _maybe_show_cuda_prompt(self): + """On first launch (Windows/Snap/Flatpak), offer CUDA installation if an NVIDIA GPU is present.""" + from buzz import cuda_manager + if not cuda_manager.should_offer_cuda_prompt(): + return + if self.settings.value(Settings.Key.CUDA_PROMPT_SHOWN, False): + return + self.settings.set_value(Settings.Key.CUDA_PROMPT_SHOWN, True) + + if not cuda_manager.is_nvidia_gpu_present(): + return + if cuda_manager.is_cuda_torch_installed(): + return + + from buzz.widgets.cuda_installer_widget import CudaInstallerDialog + dialog = CudaInstallerDialog(self) + dialog.show() + def on_update_action_triggered(self): """Called when user clicks the update action in toolbar.""" if self._update_info is None: diff --git a/installer.iss b/installer.iss index b13d5061f..88ada84e6 100644 --- a/installer.iss +++ b/installer.iss @@ -26,7 +26,6 @@ OutputDir={#OutputDir} OutputBaseFilename={#AppName}-{#AppVersion}-windows SetupIconFile={#AppIconPath} UninstallDisplayIcon={app}\{#AppExeName} -DiskSpanning=yes Compression=lzma SolidCompression=yes WizardStyle=modern From 339b1ed4eacc6c37b1bfb645ba11bb78b048b8d4 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 15 Mar 2026 19:13:48 +0200 Subject: [PATCH 02/23] Fix for running installation locally --- buzz/cuda_manager.py | 63 +++++++++++++++++++++++++-- buzz/widgets/cuda_installer_widget.py | 3 +- buzz/widgets/main_window.py | 16 ++++--- 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index 737e58c57..a0bf50b79 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -74,9 +74,17 @@ def is_nvidia_gpu_present() -> bool: return Path("/proc/driver/nvidia/version").exists() +def _in_virtualenv() -> bool: + """Returns True if running inside a virtualenv or uv venv.""" + return sys.prefix != sys.base_prefix or "VIRTUAL_ENV" in os.environ + + def install_cuda(progress_callback=None): """ - Install CUDA-enabled torch and nvidia libraries into user site-packages. + Install CUDA-enabled torch and nvidia libraries. + + Installs to user site-packages when possible. Inside a virtualenv the + --user flag is omitted (pip forbids it) and packages go into the venv. Args: progress_callback: Optional callable(str) called with status messages. @@ -86,25 +94,72 @@ def report(msg): if progress_callback: progress_callback(msg) + user_flag = [] if _in_virtualenv() else ["--user"] + report("Installing CUDA-enabled PyTorch...") _pip_install( CUDA_TORCH_PACKAGES, - extra_args=["--index-url", CUDA_INDEX_URL, "--user"], + extra_args=["--index-url", CUDA_INDEX_URL] + user_flag, progress_callback=report, ) report("Installing NVIDIA CUDA libraries...") _pip_install( CUDA_NVIDIA_PACKAGES, - extra_args=["--extra-index-url", CUDA_NVIDIA_INDEX_URL, "--user"], + extra_args=["--extra-index-url", CUDA_NVIDIA_INDEX_URL] + user_flag, progress_callback=report, ) report("CUDA installation complete. Please restart Buzz to enable GPU acceleration.") +def _get_pip_cmd() -> list[str]: + """Return a [python, '-m', 'pip'] command that is guaranteed to work. + + Handles three environments: + - PyInstaller frozen bundle: sys.executable is the app binary; find a real + Python interpreter in PATH instead. + - Normal Python without pip (uv venv, minimal snap/flatpak image): bootstrap + pip via ensurepip, then retry. + - Normal Python with pip: use sys.executable directly. + """ + import shutil + + # Frozen PyInstaller bundle — sys.executable can't run -m pip + if getattr(sys, "frozen", False): + for candidate in ("python3", "python"): + python = shutil.which(candidate) + if python: + return [python, "-m", "pip"] + raise RuntimeError( + "Could not find a Python interpreter in PATH to run pip. " + "Please install Python and try again." + ) + + pip_cmd = [sys.executable, "-m", "pip"] + + # Check if pip is already available + probe = subprocess.run(pip_cmd + ["--version"], capture_output=True, timeout=15) + if probe.returncode == 0: + return pip_cmd + + # Try to bootstrap pip via ensurepip (available in CPython stdlib) + logger.info("pip not found, bootstrapping via ensurepip...") + bootstrap = subprocess.run( + [sys.executable, "-m", "ensurepip", "--upgrade"], + capture_output=True, timeout=60, + ) + if bootstrap.returncode != 0: + raise RuntimeError( + "pip is not available and ensurepip failed. " + "Please install pip manually and try again." + ) + + return pip_cmd + + def _pip_install(packages, extra_args=None, progress_callback=None): - cmd = [sys.executable, "-m", "pip", "install"] + packages + cmd = _get_pip_cmd() + ["install"] + packages if extra_args: cmd += extra_args diff --git a/buzz/widgets/cuda_installer_widget.py b/buzz/widgets/cuda_installer_widget.py index 010e1c2fa..04cff0f4f 100644 --- a/buzz/widgets/cuda_installer_widget.py +++ b/buzz/widgets/cuda_installer_widget.py @@ -5,7 +5,7 @@ import logging from typing import Optional -from PyQt6.QtCore import QRunnable, QThreadPool, pyqtSignal, QObject +from PyQt6.QtCore import QRunnable, QThreadPool, Qt, pyqtSignal, QObject from PyQt6.QtWidgets import ( QDialog, QVBoxLayout, @@ -53,6 +53,7 @@ def __init__(self, parent: Optional[QWidget] = None): self.setWindowTitle(_("GPU Acceleration")) self.setWindowIcon(QIcon(BUZZ_ICON_PATH)) self.setMinimumWidth(500) + self.setWindowFlags(self.windowFlags() | Qt.WindowType.WindowStaysOnTopHint) layout = QVBoxLayout(self) layout.setSpacing(12) diff --git a/buzz/widgets/main_window.py b/buzz/widgets/main_window.py index aebb910ee..befda2147 100644 --- a/buzz/widgets/main_window.py +++ b/buzz/widgets/main_window.py @@ -528,14 +528,16 @@ def _maybe_show_cuda_prompt(self): return self.settings.set_value(Settings.Key.CUDA_PROMPT_SHOWN, True) - if not cuda_manager.is_nvidia_gpu_present(): - return - if cuda_manager.is_cuda_torch_installed(): - return - + from PyQt6.QtCore import QTimer from buzz.widgets.cuda_installer_widget import CudaInstallerDialog - dialog = CudaInstallerDialog(self) - dialog.show() + + def _show(): + dialog = CudaInstallerDialog(self) + dialog.show() + dialog.raise_() + dialog.activateWindow() + + QTimer.singleShot(500, _show) def on_update_action_triggered(self): """Called when user clicks the update action in toolbar.""" From 68cb39e7226b1df171b0c8d6ce8ed8ed050ff1fc Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Fri, 27 Mar 2026 21:13:07 +0200 Subject: [PATCH 03/23] Forcing Torch CPU on Linux --- pyproject.toml | 33 +- uv.lock | 1024 ++++++++++++++++++++---------------------------- 2 files changed, 434 insertions(+), 623 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7a059cb63..2ccc1ab69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,14 +36,10 @@ dependencies = [ "torch==2.2.2; sys_platform == 'darwin' and platform_machine == 'x86_64'", "torchaudio==2.2.2; sys_platform == 'darwin' and platform_machine == 'x86_64'", "ctranslate2==4.3.1; sys_platform == 'darwin' and platform_machine == 'x86_64'", - # For ARM macOS (arm64) - use latest CPU-only versions from PyPI - "torch==2.8.0; sys_platform == 'darwin' and platform_machine == 'arm64'", - "torchaudio==2.8.0; sys_platform == 'darwin' and platform_machine == 'arm64'", - "ctranslate2>=4.6.2,<5; sys_platform == 'darwin' and platform_machine == 'arm64'", - # For Linux/Windows - use CUDA versions from pytorch index - "torch==2.8.0; sys_platform != 'darwin'", - "torchaudio==2.8.0; sys_platform != 'darwin'", + # For Linux/Windows/ARM Mac - use CPU versions from pytorch index "ctranslate2>=4.6.2,<5; sys_platform != 'darwin'", + "torch==2.8.0+cpu; sys_platform != 'darwin' or platform_machine != 'x86_64'", + "torchaudio==2.8.0+cpu; sys_platform != 'darwin' or platform_machine != 'x86_64'", # faster whisper need cudnn 9 "nvidia-cudnn-cu12>=9,<10; sys_platform != 'darwin'", # CUDA runtime libraries are provided by torch dependencies, no need to specify explicitly @@ -82,8 +78,6 @@ dependencies = [ "certifi>=2025.11.12", "truststore>=0.10.0", "torchcodec>=0.9.0; sys_platform != 'darwin' or platform_machine != 'x86_64'", - "torch>=2.2.2", - "torchaudio>=2.2.2", "datasets>=4.4.1", ] repository = "https://github.com/chidiwilliams/buzz" @@ -131,26 +125,15 @@ override-dependencies = [ [tool.uv.sources] torch = [ - { index = "PyPI", marker = "sys_platform == 'darwin'" }, - { index = "pytorch-cu129", marker = "sys_platform != 'darwin'" }, + { index = "pytorch-cpu", marker = "sys_platform != 'darwin' or platform_machine != 'x86_64'" }, ] torchaudio = [ - { index = "PyPI", marker = "sys_platform == 'darwin'" }, - { index = "pytorch-cu129", marker = "sys_platform != 'darwin'" }, + { index = "pytorch-cpu", marker = "sys_platform != 'darwin' or platform_machine != 'x86_64'" }, ] - -[[tool.uv.index]] -name = "nvidia" -url = "https://pypi.ngc.nvidia.com/" - -[[tool.uv.index]] -name = "pytorch-cu129" -url = "https://download.pytorch.org/whl/cu129" - [[tool.uv.index]] -name = "PyPI" -url = "https://pypi.org/simple/" -default = true +name = "pytorch-cpu" +url = "https://download.pytorch.org/whl/cpu" +explicit = true [tool.hatch.metadata] allow-direct-references = true diff --git a/uv.lock b/uv.lock index 6ebef32f6..d5d9e888d 100644 --- a/uv.lock +++ b/uv.lock @@ -19,7 +19,7 @@ overrides = [ [[package]] name = "absl-py" version = "2.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/10/2a/c93173ffa1b39c1d0395b7e842bbdc62e556ca9d8d3b5572926f3e4ca752/absl_py-2.3.1.tar.gz", hash = "sha256:a97820526f7fbfd2ec1bce83f3f25e3a14840dac0d8e02a0b71cd75db3f77fc9", size = 116588, upload-time = "2025-07-03T09:31:44.05Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl", hash = "sha256:eeecf07f0c2a93ace0772c92e596ace6d3d3996c042b2128459aaae2a76de11d", size = 135811, upload-time = "2025-07-03T09:31:42.253Z" }, @@ -28,7 +28,7 @@ wheels = [ [[package]] name = "accelerate" version = "1.12.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, { name = "numpy" }, @@ -36,9 +36,8 @@ dependencies = [ { name = "psutil" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/8e/ac2a9566747a93f8be36ee08532eb0160558b07630a081a6056a9f89bf1d/accelerate-1.12.0.tar.gz", hash = "sha256:70988c352feb481887077d2ab845125024b2a137a5090d6d7a32b57d03a45df6", size = 398399, upload-time = "2025-11-21T11:27:46.973Z" } wheels = [ @@ -48,7 +47,7 @@ wheels = [ [[package]] name = "aiohappyeyeballs" version = "2.6.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, @@ -57,7 +56,7 @@ wheels = [ [[package]] name = "aiohttp" version = "3.13.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, { name = "aiosignal" }, @@ -91,7 +90,7 @@ wheels = [ [[package]] name = "aiosignal" version = "1.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frozenlist" }, { name = "typing-extensions" }, @@ -104,7 +103,7 @@ wheels = [ [[package]] name = "alembic" version = "1.17.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mako", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "sqlalchemy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -118,7 +117,7 @@ wheels = [ [[package]] name = "altgraph" version = "0.17.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/f8/97fdf103f38fed6792a1601dbc16cc8aac56e7459a9fff08c812d8ae177a/altgraph-0.17.5.tar.gz", hash = "sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7", size = 48428, upload-time = "2025-11-21T20:35:50.583Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a9/ba/000a1996d4308bc65120167c21241a3b205464a2e0b58deda26ae8ac21d1/altgraph-0.17.5-py2.py3-none-any.whl", hash = "sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597", size = 21228, upload-time = "2025-11-21T20:35:49.444Z" }, @@ -127,7 +126,7 @@ wheels = [ [[package]] name = "annotated-types" version = "0.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, @@ -136,13 +135,13 @@ wheels = [ [[package]] name = "antlr4-python3-runtime" version = "4.9.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b", size = 117034, upload-time = "2021-11-06T17:52:23.524Z" } [[package]] name = "anyio" version = "4.12.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "typing-extensions" }, @@ -155,7 +154,7 @@ wheels = [ [[package]] name = "astroid" version = "2.15.8" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "lazy-object-proxy" }, { name = "wrapt" }, @@ -168,7 +167,7 @@ wheels = [ [[package]] name = "asttokens" version = "3.0.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, @@ -177,7 +176,7 @@ wheels = [ [[package]] name = "attrs" version = "25.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, @@ -186,7 +185,7 @@ wheels = [ [[package]] name = "audioread" version = "3.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a1/4a/874ecf9b472f998130c2b5e145dcdb9f6131e84786111489103b66772143/audioread-3.1.0.tar.gz", hash = "sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190", size = 20082, upload-time = "2025-10-26T19:44:13.484Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7e/16/fbe8e1e185a45042f7cd3a282def5bb8d95bb69ab9e9ef6a5368aa17e426/audioread-3.1.0-py3-none-any.whl", hash = "sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4", size = 23143, upload-time = "2025-10-26T19:44:12.016Z" }, @@ -195,7 +194,7 @@ wheels = [ [[package]] name = "autopep8" version = "2.3.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycodestyle" }, ] @@ -207,7 +206,7 @@ wheels = [ [[package]] name = "av" version = "16.0.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/15/c3/fd72a0315bc6c943ced1105aaac6e0ec1be57c70d8a616bd05acaa21ffee/av-16.0.1.tar.gz", hash = "sha256:dd2ce779fa0b5f5889a6d9e00fbbbc39f58e247e52d31044272648fe16ff1dbf", size = 3904030, upload-time = "2025-10-13T12:28:51.082Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/44/78/12a11d7a44fdd8b26a65e2efa1d8a5826733c8887a989a78306ec4785956/av-16.0.1-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:e41a8fef85dfb2c717349f9ff74f92f9560122a9f1a94b1c6c9a8a9c9462ba71", size = 27206375, upload-time = "2025-10-13T12:25:44.423Z" }, @@ -222,7 +221,7 @@ wheels = [ [[package]] name = "backoff" version = "2.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, @@ -231,7 +230,7 @@ wheels = [ [[package]] name = "bitsandbytes" version = "0.47.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } resolution-markers = [ "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", "sys_platform != 'darwin' and sys_platform != 'linux'", @@ -239,7 +238,7 @@ resolution-markers = [ ] dependencies = [ { name = "numpy", marker = "sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/aa/eb/477d6b5602f469c7305fd43eec71d890c39909f615c1d7138f6e7d226eff/bitsandbytes-0.47.0-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:2f805b76891a596025e9e13318b675d08481b9ee650d65e5d2f9d844084c6521", size = 30004641, upload-time = "2025-08-11T18:51:20.524Z" }, @@ -250,14 +249,14 @@ wheels = [ [[package]] name = "bitsandbytes" version = "0.49.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } resolution-markers = [ "platform_machine == 'arm64' and sys_platform == 'darwin'", ] dependencies = [ { name = "numpy", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, { name = "packaging", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8e/96/2b825cb874477a26478df0ce8ce3550abe81af1c7bcbc47871f0619b120c/bitsandbytes-0.49.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:17d5b57e6d51b78bcfc07da0e93db061181b25bffabfafe101dd9b75c2710872", size = 129838, upload-time = "2025-12-11T20:50:39.645Z" }, @@ -266,7 +265,7 @@ wheels = [ [[package]] name = "braceexpand" version = "0.1.7" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/54/93/badd4f5ccf25209f3fef2573073da9fe4a45a3da99fca2f800f942130c0f/braceexpand-0.1.7.tar.gz", hash = "sha256:e6e539bd20eaea53547472ff94f4fb5c3d3bf9d0a89388c4b56663aba765f705", size = 7777, upload-time = "2021-05-07T13:49:07.323Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fa/93/e8c04e80e82391a6e51f218ca49720f64236bc824e92152a2633b74cf7ab/braceexpand-0.1.7-py2.py3-none-any.whl", hash = "sha256:91332d53de7828103dcae5773fb43bc34950b0c8160e35e0f44c4427a3b85014", size = 5923, upload-time = "2021-05-07T13:49:05.146Z" }, @@ -278,13 +277,13 @@ version = "1.4.5" source = { editable = "." } dependencies = [ { name = "accelerate" }, - { name = "bitsandbytes", version = "0.47.0", source = { registry = "https://pypi.org/simple/" }, marker = "sys_platform != 'darwin'" }, - { name = "bitsandbytes", version = "0.49.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "bitsandbytes", version = "0.47.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'darwin'" }, + { name = "bitsandbytes", version = "0.49.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, { name = "certifi" }, { name = "cmake" }, { name = "coverage" }, - { name = "ctranslate2", version = "4.3.1", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "ctranslate2", version = "4.6.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' or sys_platform != 'darwin'" }, + { name = "ctranslate2", version = "4.3.1", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "ctranslate2", version = "4.6.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'darwin'" }, { name = "darkdetect" }, { name = "dataclasses-json" }, { name = "datasets" }, @@ -327,13 +326,10 @@ dependencies = [ { name = "srt-equalizer" }, { name = "stable-ts" }, { name = "submitit" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, - { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "torchcodec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, { name = "transformers" }, @@ -375,7 +371,6 @@ requires-dist = [ { name = "cmake", specifier = ">=4.2.0,<5" }, { name = "coverage", specifier = "==7.12.0" }, { name = "ctranslate2", marker = "sys_platform != 'darwin'", specifier = ">=4.6.2,<5" }, - { name = "ctranslate2", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = ">=4.6.2,<5" }, { name = "ctranslate2", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==4.3.1" }, { name = "darkdetect", specifier = ">=0.8.0,<0.9" }, { name = "dataclasses-json", specifier = ">=0.6.4,<0.7" }, @@ -419,16 +414,10 @@ requires-dist = [ { name = "srt-equalizer", specifier = ">=0.1.10,<0.2" }, { name = "stable-ts", specifier = ">=2.19.1,<3" }, { name = "submitit", specifier = ">=1.5.2,<2" }, - { name = "torch", marker = "sys_platform != 'darwin'", specifier = "==2.8.0", index = "https://download.pytorch.org/whl/cu129" }, - { name = "torch", marker = "sys_platform != 'darwin'", specifier = ">=2.2.2", index = "https://download.pytorch.org/whl/cu129" }, - { name = "torch", marker = "sys_platform == 'darwin'", specifier = ">=2.2.2", index = "https://pypi.org/simple/" }, - { name = "torch", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==2.8.0", index = "https://pypi.org/simple/" }, - { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2", index = "https://pypi.org/simple/" }, - { name = "torchaudio", marker = "sys_platform != 'darwin'", specifier = "==2.8.0", index = "https://download.pytorch.org/whl/cu129" }, - { name = "torchaudio", marker = "sys_platform != 'darwin'", specifier = ">=2.2.2", index = "https://download.pytorch.org/whl/cu129" }, - { name = "torchaudio", marker = "sys_platform == 'darwin'", specifier = ">=2.2.2", index = "https://pypi.org/simple/" }, - { name = "torchaudio", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==2.8.0", index = "https://pypi.org/simple/" }, - { name = "torchaudio", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2", index = "https://pypi.org/simple/" }, + { name = "torch", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = "==2.8.0+cpu", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2" }, + { name = "torchaudio", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = "==2.8.0+cpu", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torchaudio", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2" }, { name = "torchcodec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = ">=0.9.0" }, { name = "tqdm", specifier = ">=4.67.1,<5" }, { name = "transformers", specifier = ">=4.53,<5" }, @@ -465,7 +454,7 @@ dev = [ [[package]] name = "certifi" version = "2026.4.22" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, @@ -474,7 +463,7 @@ wheels = [ [[package]] name = "cffi" version = "2.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] @@ -497,7 +486,7 @@ wheels = [ [[package]] name = "cfgv" version = "3.5.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, @@ -506,7 +495,7 @@ wheels = [ [[package]] name = "charset-normalizer" version = "3.4.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, @@ -531,7 +520,7 @@ wheels = [ [[package]] name = "click" version = "8.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] @@ -543,7 +532,7 @@ wheels = [ [[package]] name = "cloudpickle" version = "3.1.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, @@ -552,7 +541,7 @@ wheels = [ [[package]] name = "cmake" version = "4.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e2/bb/1f5fa918267ecf3b24158efa53d71193ecacfa93d0e86264e46239ae7abb/cmake-4.2.0.tar.gz", hash = "sha256:7744c20e4a23e68dea276d819767d2bdbb45442cc342560b03ff693b755cd181", size = 37433, upload-time = "2025-11-21T15:06:31.914Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b1/3f/8c6419e6cde2dec09701f8542abb1b6cedabc9e5290ac9c896cec2c12dd0/cmake-4.2.0-py3-none-macosx_10_10_universal2.whl", hash = "sha256:28595ec42fb6f81128b7a9bdbdfcb7b785ad197dbfb1b785cec5727a97a521f4", size = 51571817, upload-time = "2025-11-21T15:05:35.639Z" }, @@ -578,15 +567,16 @@ wheels = [ [[package]] name = "colorama" version = "0.4.6" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://download.pytorch.org/whl/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", upload-time = "2023-10-05T23:50:34Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "coloredlogs" version = "15.0.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "humanfriendly" }, ] @@ -598,7 +588,7 @@ wheels = [ [[package]] name = "colorlog" version = "6.10.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] @@ -610,7 +600,7 @@ wheels = [ [[package]] name = "contourpy" version = "1.3.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -632,7 +622,7 @@ wheels = [ [[package]] name = "coverage" version = "7.12.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/89/26/4a96807b193b011588099c3b5c89fbb05294e5b90e71018e065465f34eb6/coverage-7.12.0.tar.gz", hash = "sha256:fc11e0a4e372cb5f282f16ef90d4a585034050ccda536451901abfb19a57f40c", size = 819341, upload-time = "2025-11-18T13:34:20.766Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/02/bf/638c0427c0f0d47638242e2438127f3c8ee3cfc06c7fdeb16778ed47f836/coverage-7.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:29644c928772c78512b48e14156b81255000dcfd4817574ff69def189bcb3647", size = 217704, upload-time = "2025-11-18T13:32:28.906Z" }, @@ -654,7 +644,7 @@ wheels = [ [[package]] name = "cryptography" version = "46.0.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, ] @@ -687,7 +677,7 @@ wheels = [ [[package]] name = "ctc-segmentation" version = "1.7.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cython", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -698,7 +688,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/f4/ed/78dd82e0b022ed4cb [[package]] name = "ctranslate2" version = "4.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } resolution-markers = [ "platform_machine == 'x86_64' and sys_platform == 'darwin'", ] @@ -714,7 +704,7 @@ wheels = [ [[package]] name = "ctranslate2" version = "4.6.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } resolution-markers = [ "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", "sys_platform != 'darwin' and sys_platform != 'linux'", @@ -738,7 +728,7 @@ wheels = [ [[package]] name = "cycler" version = "0.12.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, @@ -747,7 +737,7 @@ wheels = [ [[package]] name = "cython" version = "3.2.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/29/17/55fc687ba986f2210298fa2f60fec265fa3004c3f9a1e958ea1fe2d4e061/cython-3.2.2.tar.gz", hash = "sha256:c3add3d483acc73129a61d105389344d792c17e7c1cee24863f16416bd071634", size = 3275797, upload-time = "2025-11-30T12:48:20.942Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/57/0f/6fd78dc581373722bb9dedfc90c35b59ba88af988756315af227a877c7a2/cython-3.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:692a41c8fe06fb2dc55ca2c8d71c80c469fd16fe69486ed99f3b3cbb2d3af83f", size = 2968037, upload-time = "2025-11-30T12:48:47.279Z" }, @@ -769,7 +759,7 @@ wheels = [ [[package]] name = "cytoolz" version = "1.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "toolz" }, ] @@ -800,7 +790,7 @@ wheels = [ [[package]] name = "darkdetect" version = "0.8.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/45/77/7575be73bf12dee231d0c6e60ce7fb7a7be4fcd58823374fc59a6e48262e/darkdetect-0.8.0.tar.gz", hash = "sha256:b5428e1170263eb5dea44c25dc3895edd75e6f52300986353cd63533fe7df8b1", size = 7681, upload-time = "2022-12-16T14:14:42.113Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl", hash = "sha256:a7509ccf517eaad92b31c214f593dbcf138ea8a43b2935406bbd565e15527a85", size = 8955, upload-time = "2022-12-16T14:14:40.92Z" }, @@ -809,7 +799,7 @@ wheels = [ [[package]] name = "dataclasses-json" version = "0.6.7" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "marshmallow" }, { name = "typing-inspect" }, @@ -822,7 +812,7 @@ wheels = [ [[package]] name = "datasets" version = "4.4.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dill" }, { name = "filelock" }, @@ -847,7 +837,7 @@ wheels = [ [[package]] name = "decorator" version = "5.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, @@ -856,20 +846,19 @@ wheels = [ [[package]] name = "diffq" version = "0.2.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cython" }, { name = "numpy" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/fd/4c58807bf855c5929ffa6da55f26dd6b9ae462a4193f5e09cc49fbbfd451/diffq-0.2.4.tar.gz", hash = "sha256:049064861e974ebf00d0badab8b324c775037371419eda3150985b9d477b5bd2", size = 157139, upload-time = "2023-05-05T12:39:43.089Z" } [[package]] name = "dill" version = "0.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, @@ -878,7 +867,7 @@ wheels = [ [[package]] name = "distlib" version = "0.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, @@ -887,7 +876,7 @@ wheels = [ [[package]] name = "distro" version = "1.9.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, @@ -896,20 +885,19 @@ wheels = [ [[package]] name = "docopt" version = "0.6.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901, upload-time = "2014-06-16T11:18:57.406Z" } [[package]] name = "dora-search" version = "0.1.12" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "omegaconf" }, { name = "retrying" }, { name = "submitit" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "treetable" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d5/9d/9a13947db237375486c0690f4741dd2b7e1eee20e0ffcb55dbd1b21cc600/dora_search-0.1.12.tar.gz", hash = "sha256:2956fd2c4c7e4b9a4830e83f0d4cf961be45cfba1a2f0570281e91d15ac516fb", size = 87111, upload-time = "2023-05-23T14:36:24.743Z" } @@ -917,7 +905,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/d5/9d/9a13947db23737548 [[package]] name = "editdistance" version = "0.8.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d5/18/9f4f975ca87a390832b1c22478f3702fcdf739f83211e24d054b7551270d/editdistance-0.8.1.tar.gz", hash = "sha256:d1cdf80a5d5014b0c9126a69a42ce55a457b457f6986ff69ca98e4fe4d2d8fed", size = 50006, upload-time = "2024-02-10T07:44:53.914Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/4c/7f195588949b4e72436dc7fc902632381f96e586af829685b56daebb38b8/editdistance-0.8.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04af61b3fcdd287a07c15b6ae3b02af01c5e3e9c3aca76b8c1d13bd266b6f57", size = 106723, upload-time = "2024-02-10T07:43:50.268Z" }, @@ -936,7 +924,7 @@ wheels = [ [[package]] name = "einops" version = "0.8.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/81/df4fbe24dff8ba3934af99044188e20a98ed441ad17a274539b74e82e126/einops-0.8.1.tar.gz", hash = "sha256:de5d960a7a761225532e0f1959e5315ebeafc0cd43394732f103ca44b9837e84", size = 54805, upload-time = "2025-02-09T03:17:00.434Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl", hash = "sha256:919387eb55330f5757c6bea9165c5ff5cfe63a642682ea788a6d472576d81737", size = 64359, upload-time = "2025-02-09T03:17:01.998Z" }, @@ -945,7 +933,7 @@ wheels = [ [[package]] name = "executing" version = "2.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, @@ -954,11 +942,11 @@ wheels = [ [[package]] name = "faster-whisper" version = "1.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "av" }, - { name = "ctranslate2", version = "4.3.1", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "ctranslate2", version = "4.6.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "ctranslate2", version = "4.3.1", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "ctranslate2", version = "4.6.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "huggingface-hub" }, { name = "onnxruntime" }, { name = "tokenizers" }, @@ -971,7 +959,7 @@ wheels = [ [[package]] name = "ffmpeg-python" version = "0.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "future" }, ] @@ -983,7 +971,7 @@ wheels = [ [[package]] name = "fiddle" version = "0.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "absl-py", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "graphviz", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -998,16 +986,16 @@ wheels = [ [[package]] name = "filelock" version = "3.20.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } -sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2" }, + { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" }, ] [[package]] name = "flake8" version = "7.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mccabe" }, { name = "pycodestyle" }, @@ -1021,7 +1009,7 @@ wheels = [ [[package]] name = "flatbuffers" version = "25.9.23" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/9d/1f/3ee70b0a55137442038f2a33469cc5fddd7e0ad2abf83d7497c18a2b6923/flatbuffers-25.9.23.tar.gz", hash = "sha256:676f9fa62750bb50cf531b42a0a2a118ad8f7f797a511eda12881c016f093b12", size = 22067, upload-time = "2025-09-24T05:25:30.106Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ee/1b/00a78aa2e8fbd63f9af08c9c19e6deb3d5d66b4dda677a0f61654680ee89/flatbuffers-25.9.23-py2.py3-none-any.whl", hash = "sha256:255538574d6cb6d0a79a17ec8bc0d30985913b87513a01cce8bcdb6b4c44d0e2", size = 30869, upload-time = "2025-09-24T05:25:28.912Z" }, @@ -1030,7 +1018,7 @@ wheels = [ [[package]] name = "fonttools" version = "4.61.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/33/f9/0e84d593c0e12244150280a630999835a64f2852276161b62a0f98318de0/fonttools-4.61.0.tar.gz", hash = "sha256:ec520a1f0c7758d7a858a00f090c1745f6cde6a7c5e76fb70ea4044a15f712e7", size = 3561884, upload-time = "2025-11-28T17:05:49.491Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/00/5d/19e5939f773c7cb05480fe2e881d63870b63ee2b4bdb9a77d55b1d36c7b9/fonttools-4.61.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e24a1565c4e57111ec7f4915f8981ecbb61adf66a55f378fdc00e206059fcfef", size = 2846930, upload-time = "2025-11-28T17:04:46.639Z" }, @@ -1047,7 +1035,7 @@ wheels = [ [[package]] name = "frozenlist" version = "1.8.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, @@ -1072,10 +1060,10 @@ wheels = [ [[package]] name = "fsspec" version = "2024.12.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/11/de70dee31455c546fbc88301971ec03c328f3d1138cfba14263f651e9551/fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/11/de70dee31455c546fbc88301971ec03c328f3d1138cfba14263f651e9551/fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f", size = 291600, upload-time = "2024-12-19T19:57:30.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/86/5486b0188d08aa643e127774a99bac51ffa6cf343e3deb0583956dca5b22/fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2" }, + { url = "https://files.pythonhosted.org/packages/de/86/5486b0188d08aa643e127774a99bac51ffa6cf343e3deb0583956dca5b22/fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2", size = 183862, upload-time = "2024-12-19T19:57:28.258Z" }, ] [package.optional-dependencies] @@ -1086,7 +1074,7 @@ http = [ [[package]] name = "future" version = "1.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a7/b2/4140c69c6a66432916b26158687e821ba631a4c9273c474343badf84d3ba/future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05", size = 1228490, upload-time = "2024-02-21T11:52:38.461Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326, upload-time = "2024-02-21T11:52:35.956Z" }, @@ -1095,7 +1083,7 @@ wheels = [ [[package]] name = "gitdb" version = "4.0.12" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "smmap", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1107,7 +1095,7 @@ wheels = [ [[package]] name = "gitpython" version = "3.1.45" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1119,7 +1107,7 @@ wheels = [ [[package]] name = "graphviz" version = "0.21" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f8/b3/3ac91e9be6b761a4b30d66ff165e54439dcd48b83f4e20d644867215f6ca/graphviz-0.21.tar.gz", hash = "sha256:20743e7183be82aaaa8ad6c93f8893c923bd6658a04c32ee115edb3c8a835f78", size = 200434, upload-time = "2025-06-15T09:35:05.824Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl", hash = "sha256:54f33de9f4f911d7e84e4191749cac8cc5653f815b06738c54db9a15ab8b1e42", size = 47300, upload-time = "2025-06-15T09:35:04.433Z" }, @@ -1128,7 +1116,7 @@ wheels = [ [[package]] name = "greenlet" version = "3.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c7/e5/40dbda2736893e3e53d25838e0f19a2b417dfc122b9989c91918db30b5d3/greenlet-3.3.0.tar.gz", hash = "sha256:a82bb225a4e9e4d653dd2fb7b8b2d36e4fb25bc0165422a11e48b88e9e6f78fb", size = 190651, upload-time = "2025-12-04T14:49:44.05Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f8/0a/a3871375c7b9727edaeeea994bfff7c63ff7804c9829c19309ba2e058807/greenlet-3.3.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b01548f6e0b9e9784a2c99c5651e5dc89ffcbe870bc5fb2e5ef864e9cc6b5dcb", size = 276379, upload-time = "2025-12-04T14:23:30.498Z" }, @@ -1143,7 +1131,7 @@ wheels = [ [[package]] name = "grpcio" version = "1.76.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1164,7 +1152,7 @@ wheels = [ [[package]] name = "h11" version = "0.16.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, @@ -1173,7 +1161,7 @@ wheels = [ [[package]] name = "hatchling" version = "1.28.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, { name = "pathspec" }, @@ -1188,7 +1176,7 @@ wheels = [ [[package]] name = "hf-xet" version = "1.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5e/6e/0f11bacf08a67f7fb5ee09740f2ca54163863b07b70d579356e9222ce5d8/hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f", size = 506020, upload-time = "2025-10-24T19:04:32.129Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/96/2d/22338486473df5923a9ab7107d375dbef9173c338ebef5098ef593d2b560/hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848", size = 2866099, upload-time = "2025-10-24T19:04:15.366Z" }, @@ -1203,7 +1191,7 @@ wheels = [ [[package]] name = "httpcore" version = "1.0.9" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "h11" }, @@ -1216,7 +1204,7 @@ wheels = [ [[package]] name = "httpx" version = "0.28.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "certifi" }, @@ -1231,7 +1219,7 @@ wheels = [ [[package]] name = "huggingface-hub" version = "0.36.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, @@ -1250,7 +1238,7 @@ wheels = [ [[package]] name = "humanfriendly" version = "10.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyreadline3", marker = "sys_platform == 'win32'" }, ] @@ -1262,7 +1250,7 @@ wheels = [ [[package]] name = "humanize" version = "4.14.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b6/43/50033d25ad96a7f3845f40999b4778f753c3901a11808a584fed7c00d9f5/humanize-4.14.0.tar.gz", hash = "sha256:2fa092705ea640d605c435b1ca82b2866a1b601cdf96f076d70b79a855eba90d", size = 82939, upload-time = "2025-10-15T13:04:51.214Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl", hash = "sha256:d57701248d040ad456092820e6fde56c930f17749956ac47f4f655c0c547bfff", size = 132092, upload-time = "2025-10-15T13:04:49.404Z" }, @@ -1271,7 +1259,7 @@ wheels = [ [[package]] name = "hydra-colorlog" version = "1.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorlog" }, { name = "hydra-core" }, @@ -1284,7 +1272,7 @@ wheels = [ [[package]] name = "hydra-core" version = "1.3.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "antlr4-python3-runtime" }, { name = "omegaconf" }, @@ -1298,7 +1286,7 @@ wheels = [ [[package]] name = "identify" version = "2.6.15" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" }, @@ -1307,7 +1295,7 @@ wheels = [ [[package]] name = "idna" version = "3.11" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, @@ -1316,7 +1304,7 @@ wheels = [ [[package]] name = "indic-numtowords" version = "1.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/46/683e92580d9c1752917d2f9ec2a44d2adc21cdfe4deeaa0fe87fc23dbea8/indic_numtowords-1.1.0.tar.gz", hash = "sha256:d1addc21444c332e05bfd8726af427960c096c2a16776d98bee4fbc36ade5d25", size = 44220, upload-time = "2025-08-18T12:24:13.075Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/1e/16/b2b6491d95a15bda712163b4e27428f2cb1ac3a1b4fb59b140dbc76f6ce5/indic_numtowords-1.1.0-py3-none-any.whl", hash = "sha256:bf4b7b9e539323d9b00bc868caa2d9369170b8f3ac4d19619bf9c6cdc6f89572", size = 71635, upload-time = "2025-08-18T12:24:11.065Z" }, @@ -1325,7 +1313,7 @@ wheels = [ [[package]] name = "inflect" version = "7.5.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "typeguard", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1338,7 +1326,7 @@ wheels = [ [[package]] name = "iniconfig" version = "2.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, @@ -1347,7 +1335,7 @@ wheels = [ [[package]] name = "intervaltree" version = "3.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sortedcontainers" }, ] @@ -1356,7 +1344,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/50/fb/396d568039d213446 [[package]] name = "ipython" version = "9.8.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "decorator", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1377,7 +1365,7 @@ wheels = [ [[package]] name = "ipython-pygments-lexers" version = "1.1.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1389,7 +1377,7 @@ wheels = [ [[package]] name = "isort" version = "5.13.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/87/f9/c1eb8635a24e87ade2efce21e3ce8cd6b8630bb685ddc9cdaca1349b2eb5/isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", size = 175303, upload-time = "2023-12-13T20:37:26.124Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310, upload-time = "2023-12-13T20:37:23.244Z" }, @@ -1398,7 +1386,7 @@ wheels = [ [[package]] name = "jaraco-classes" version = "3.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools" }, ] @@ -1410,7 +1398,7 @@ wheels = [ [[package]] name = "jaraco-context" version = "6.0.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912, upload-time = "2024-08-20T03:39:27.358Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825, upload-time = "2024-08-20T03:39:25.966Z" }, @@ -1419,7 +1407,7 @@ wheels = [ [[package]] name = "jaraco-functools" version = "4.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools" }, ] @@ -1431,7 +1419,7 @@ wheels = [ [[package]] name = "jedi" version = "0.19.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1443,7 +1431,7 @@ wheels = [ [[package]] name = "jeepney" version = "0.9.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, @@ -1452,18 +1440,19 @@ wheels = [ [[package]] name = "jinja2" version = "3.1.6" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl", upload-time = "2025-10-14T18:38:59Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "jiter" version = "0.12.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/45/9d/e0660989c1370e25848bb4c52d061c71837239738ad937e83edca174c273/jiter-0.12.0.tar.gz", hash = "sha256:64dfcd7d5c168b38d3f9f8bba7fc639edb3418abcc74f22fdbe6b8938293f30b", size = 168294, upload-time = "2025-11-09T20:49:23.302Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/92/c9/5b9f7b4983f1b542c64e84165075335e8a236fa9e2ea03a0c79780062be8/jiter-0.12.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:305e061fa82f4680607a775b2e8e0bcb071cd2205ac38e6ef48c8dd5ebe1cf37", size = 314449, upload-time = "2025-11-09T20:47:22.999Z" }, @@ -1488,7 +1477,7 @@ wheels = [ [[package]] name = "jiwer" version = "3.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "rapidfuzz", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1501,7 +1490,7 @@ wheels = [ [[package]] name = "joblib" version = "1.5.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077, upload-time = "2025-08-27T12:15:46.575Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload-time = "2025-08-27T12:15:45.188Z" }, @@ -1510,7 +1499,7 @@ wheels = [ [[package]] name = "jsonschema" version = "4.25.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "jsonschema-specifications" }, @@ -1525,7 +1514,7 @@ wheels = [ [[package]] name = "jsonschema-specifications" version = "2025.9.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] @@ -1537,18 +1526,17 @@ wheels = [ [[package]] name = "julius" version = "0.2.7" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a1/19/c9e1596b5572c786b93428d0904280e964c930fae7e6c9368ed9e1b63922/julius-0.2.7.tar.gz", hash = "sha256:3c0f5f5306d7d6016fcc95196b274cae6f07e2c9596eed314e4e7641554fbb08", size = 59640, upload-time = "2022-09-19T16:13:34.2Z" } [[package]] name = "kaldi-python-io" version = "1.2.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1557,7 +1545,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/80/45/e3e542ffa8970ebd7 [[package]] name = "keyring" version = "25.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jaraco-classes" }, { name = "jaraco-context" }, @@ -1574,7 +1562,7 @@ wheels = [ [[package]] name = "kiwisolver" version = "1.4.9" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/86/c9/13573a747838aeb1c76e3267620daa054f4152444d1f3d1a2324b78255b5/kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999", size = 123686, upload-time = "2025-08-10T21:26:10.034Z" }, @@ -1595,7 +1583,7 @@ wheels = [ [[package]] name = "lameenc" version = "1.8.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/e4/87/25e9619de89b64e9c66c5205a8de15671ee0e129b2e045c23c1f98fd9ec6/lameenc-1.8.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ef7d7ccad32f5febd812fb078fe63e46b4ec411d2ef612a79fd0391ef9f65b35", size = 193831, upload-time = "2025-01-01T22:08:42.652Z" }, { url = "https://files.pythonhosted.org/packages/0b/43/d17cd461a1bdc29661739350f04c0a7e12b11241a975662b8c6578d27f82/lameenc-1.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c980a676314d3c344f080be8ef05c98d60d201da6a492c3658c6bf5a733a1e11", size = 182214, upload-time = "2025-01-01T22:19:40.067Z" }, @@ -1608,7 +1596,7 @@ wheels = [ [[package]] name = "lazy-loader" version = "0.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1620,7 +1608,7 @@ wheels = [ [[package]] name = "lazy-object-proxy" version = "1.12.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/08/a2/69df9c6ba6d316cfd81fe2381e464db3e6de5db45f8c43c6a23504abf8cb/lazy_object_proxy-1.12.0.tar.gz", hash = "sha256:1f5a462d92fd0cfb82f1fab28b51bfb209fabbe6aabf7f0d51472c0c124c0c61", size = 43681, upload-time = "2025-08-22T13:50:06.783Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0d/1b/b5f5bd6bda26f1e15cd3232b223892e4498e34ec70a7f4f11c401ac969f1/lazy_object_proxy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ee0d6027b760a11cc18281e702c0309dd92da458a74b4c15025d7fc490deede", size = 26746, upload-time = "2025-08-22T13:42:37.572Z" }, @@ -1634,7 +1622,7 @@ wheels = [ [[package]] name = "levenshtein" version = "0.27.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "rapidfuzz", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1656,7 +1644,7 @@ wheels = [ [[package]] name = "lhotse" version = "1.32.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "audioread" }, { name = "click" }, @@ -1668,9 +1656,8 @@ dependencies = [ { name = "pyyaml" }, { name = "soundfile" }, { name = "tabulate" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2e/fd/32baf46d238f029a22b2c1762fc717ebdb85515fb48bafa395d3de5da0f5/lhotse-1.32.1.tar.gz", hash = "sha256:8b0e946d1bd2c695b09df831ea612913f1a1f103b1aea36a4b43a8778be0a3d5", size = 674412, upload-time = "2025-11-24T16:42:25.511Z" } @@ -1681,7 +1668,7 @@ wheels = [ [[package]] name = "libcst" version = "1.8.6" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1700,7 +1687,7 @@ wheels = [ [[package]] name = "librosa" version = "0.11.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "audioread", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "decorator", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1724,7 +1711,7 @@ wheels = [ [[package]] name = "librt" version = "0.7.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b3/d9/6f3d3fcf5e5543ed8a60cc70fa7d50508ed60b8a10e9af6d2058159ab54e/librt-0.7.3.tar.gz", hash = "sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798", size = 144549, upload-time = "2025-12-06T19:04:45.553Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/29/90/ed8595fa4e35b6020317b5ea8d226a782dcbac7a997c19ae89fb07a41c66/librt-0.7.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3", size = 55687, upload-time = "2025-12-06T19:03:39.245Z" }, @@ -1743,15 +1730,14 @@ wheels = [ [[package]] name = "lightning" version = "2.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fsspec", extra = ["http"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pytorch-lightning", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "torchmetrics", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1764,7 +1750,7 @@ wheels = [ [[package]] name = "lightning-utilities" version = "0.15.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "setuptools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1778,7 +1764,7 @@ wheels = [ [[package]] name = "lilcom" version = "1.8.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] @@ -1794,7 +1780,7 @@ wheels = [ [[package]] name = "llvmlite" version = "0.45.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/99/8d/5baf1cef7f9c084fb35a8afbde88074f0d6a727bc63ef764fe0e7543ba40/llvmlite-0.45.1.tar.gz", hash = "sha256:09430bb9d0bb58fc45a45a57c7eae912850bedc095cd0810a57de109c69e1c32", size = 185600, upload-time = "2025-10-01T17:59:52.046Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e2/7c/82cbd5c656e8991bcc110c69d05913be2229302a92acb96109e166ae31fb/llvmlite-0.45.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:28e763aba92fe9c72296911e040231d486447c01d4f90027c8e893d89d49b20e", size = 43043524, upload-time = "2025-10-01T18:03:30.666Z" }, @@ -1807,7 +1793,7 @@ wheels = [ [[package]] name = "loguru" version = "0.7.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, @@ -1820,7 +1806,7 @@ wheels = [ [[package]] name = "macholib" version = "1.16.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "altgraph", marker = "sys_platform == 'darwin'" }, ] @@ -1832,7 +1818,7 @@ wheels = [ [[package]] name = "mako" version = "1.3.10" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1844,7 +1830,7 @@ wheels = [ [[package]] name = "markdown" version = "3.10" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/7dd27d9d863b3376fcf23a5a13cb5d024aed1db46f963f1b5735ae43b3be/markdown-3.10.tar.gz", hash = "sha256:37062d4f2aa4b2b6b32aefb80faa300f82cc790cb949a35b8caede34f2b68c0e", size = 364931, upload-time = "2025-11-03T19:51:15.007Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl", hash = "sha256:b5b99d6951e2e4948d939255596523444c0e677c669700b1d17aa4a8a464cb7c", size = 107678, upload-time = "2025-11-03T19:51:13.887Z" }, @@ -1853,7 +1839,7 @@ wheels = [ [[package]] name = "markdown-it-py" version = "4.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1865,7 +1851,8 @@ wheels = [ [[package]] name = "markupsafe" version = "3.0.2" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } wheels = [ { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", upload-time = "2026-02-19T22:23:09Z" }, { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", upload-time = "2026-02-19T22:23:09Z" }, @@ -1878,7 +1865,7 @@ wheels = [ [[package]] name = "marshmallow" version = "3.26.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] @@ -1890,7 +1877,7 @@ wheels = [ [[package]] name = "matplotlib" version = "3.10.7" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "contourpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "cycler", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1916,7 +1903,7 @@ wheels = [ [[package]] name = "matplotlib-inline" version = "0.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -1928,7 +1915,7 @@ wheels = [ [[package]] name = "mccabe" version = "0.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", size = 9658, upload-time = "2022-01-24T01:14:51.113Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350, upload-time = "2022-01-24T01:14:49.62Z" }, @@ -1937,7 +1924,7 @@ wheels = [ [[package]] name = "mdurl" version = "0.1.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, @@ -1946,7 +1933,7 @@ wheels = [ [[package]] name = "mediapy" version = "1.1.6" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ipython", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "matplotlib", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -1961,7 +1948,7 @@ wheels = [ [[package]] name = "ml-dtypes" version = "0.5.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] @@ -1977,7 +1964,7 @@ wheels = [ [[package]] name = "monotonic" version = "1.6" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ea/ca/8e91948b782ddfbd194f323e7e7d9ba12e5877addf04fb2bf8fca38e86ac/monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7", size = 7615, upload-time = "2021-08-11T14:37:28.79Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9a/67/7e8406a29b6c45be7af7740456f7f37025f0506ae2e05fb9009a53946860/monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c", size = 8154, upload-time = "2021-04-09T21:58:05.122Z" }, @@ -1986,7 +1973,7 @@ wheels = [ [[package]] name = "more-itertools" version = "10.8.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ea/5d/38b681d3fce7a266dd9ab73c66959406d565b3e85f21d5e66e1181d93721/more_itertools-10.8.0.tar.gz", hash = "sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd", size = 137431, upload-time = "2025-09-02T15:23:11.018Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl", hash = "sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b", size = 69667, upload-time = "2025-09-02T15:23:09.635Z" }, @@ -1995,16 +1982,16 @@ wheels = [ [[package]] name = "mpmath" version = "1.3.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" }, + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, ] [[package]] name = "msgpack" version = "1.1.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939, upload-time = "2025-10-08T09:15:01.472Z" }, @@ -2021,7 +2008,7 @@ wheels = [ [[package]] name = "multidict" version = "6.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877, upload-time = "2025-10-06T14:49:20.884Z" }, @@ -2048,7 +2035,7 @@ wheels = [ [[package]] name = "multiprocess" version = "0.70.18" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dill" }, ] @@ -2064,7 +2051,7 @@ wheels = [ [[package]] name = "musdb" version = "0.4.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "pyaml" }, @@ -2079,7 +2066,7 @@ wheels = [ [[package]] name = "museval" version = "0.4.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema" }, { name = "musdb" }, @@ -2097,7 +2084,7 @@ wheels = [ [[package]] name = "mypy" version = "1.19.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "librt" }, { name = "mypy-extensions" }, @@ -2118,7 +2105,7 @@ wheels = [ [[package]] name = "mypy-extensions" version = "1.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, @@ -2127,7 +2114,7 @@ wheels = [ [[package]] name = "nemo-toolkit" version = "2.5.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fsspec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "huggingface-hub", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2141,8 +2128,7 @@ dependencies = [ { name = "setuptools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tensorboard", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "text-unidecode", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "wget", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "wrapt", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2154,8 +2140,8 @@ wheels = [ [package.optional-dependencies] asr = [ - { name = "bitsandbytes", version = "0.47.0", source = { registry = "https://pypi.org/simple/" }, marker = "sys_platform != 'darwin'" }, - { name = "bitsandbytes", version = "0.49.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "bitsandbytes", version = "0.47.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'darwin'" }, + { name = "bitsandbytes", version = "0.49.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, { name = "braceexpand", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "cloudpickle", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "ctc-segmentation", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2204,16 +2190,16 @@ asr = [ [[package]] name = "networkx" version = "3.6.1" -source = { registry = "https://download.pytorch.org/whl/cu129" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762" }, + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, ] [[package]] name = "nltk" version = "3.9.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "joblib" }, @@ -2228,7 +2214,7 @@ wheels = [ [[package]] name = "nodeenv" version = "1.9.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, @@ -2237,7 +2223,7 @@ wheels = [ [[package]] name = "num2words" version = "0.5.14" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docopt", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -2249,7 +2235,7 @@ wheels = [ [[package]] name = "numba" version = "0.62.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "llvmlite" }, { name = "numpy" }, @@ -2266,23 +2252,23 @@ wheels = [ [[package]] name = "numpy" version = "1.26.4" -source = { registry = "https://download.pytorch.org/whl/cu129" } -sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129, upload-time = "2024-02-06T00:26:44.495Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218" }, - { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b" }, - { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b" }, - { url = "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed" }, - { url = "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a" }, - { url = "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0" }, - { url = "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110" }, - { url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818" }, + { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", size = 20335901, upload-time = "2024-02-05T23:55:32.801Z" }, + { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", size = 13685868, upload-time = "2024-02-05T23:55:56.28Z" }, + { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", size = 13925109, upload-time = "2024-02-05T23:56:20.368Z" }, + { url = "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", size = 17950613, upload-time = "2024-02-05T23:56:56.054Z" }, + { url = "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", size = 13572172, upload-time = "2024-02-05T23:57:21.56Z" }, + { url = "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", size = 17786643, upload-time = "2024-02-05T23:57:56.585Z" }, + { url = "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", size = 5677803, upload-time = "2024-02-05T23:58:08.963Z" }, + { url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", size = 15517754, upload-time = "2024-02-05T23:58:36.364Z" }, ] [[package]] name = "nv-one-logger-core" version = "2.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "overrides", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pydantic", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2298,7 +2284,7 @@ wheels = [ [[package]] name = "nv-one-logger-pytorch-lightning-integration" version = "2.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "lightning", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "nv-one-logger-core", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2314,7 +2300,7 @@ wheels = [ [[package]] name = "nv-one-logger-training-telemetry" version = "2.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nv-one-logger-core", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "strenum", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2327,138 +2313,47 @@ wheels = [ [[package]] name = "nvidia-cublas-cu12" -version = "12.9.1.4" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:7a950dae01add3b415a5a5cdc4ec818fb5858263e9cca59004bb99fdbbd3a5d6" }, - { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:453611eb21a7c1f2c2156ed9f3a45b691deda0440ec550860290dc901af5b4c2" }, - { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.9.1.4-py3-none-win_amd64.whl", hash = "sha256:1e5fee10662e6e52bd71dec533fbbd4971bb70a5f24f3bc3793e5c2e9dc640bf" }, +version = "12.8.4.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", ] - -[[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.9.79" -source = { registry = "https://download.pytorch.org/whl/cu129" } wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cuda-cupti-cu12/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:096bcf334f13e1984ba36685ad4c1d6347db214de03dbb6eebb237b41d9d934f" }, + { url = "https://files.pythonhosted.org/packages/29/99/db44d685f0e257ff0e213ade1964fc459b4a690a73293220e98feb3307cf/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b86f6dd8935884615a0683b663891d43781b819ac4f2ba2b0c9604676af346d0", size = 590537124, upload-time = "2025-03-07T01:43:53.556Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/e24b560ab2e2eaeb3c839129175fb330dfcfc29e5203196e5541a4c44682/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142", size = 594346921, upload-time = "2025-03-07T01:44:31.254Z" }, ] [[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.9.86" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cuda-nvrtc-cu12/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:210cf05005a447e29214e9ce50851e83fc5f4358df8b453155d5e1918094dcb4" }, +name = "nvidia-cublas-cu12" +version = "12.9.1.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform != 'darwin' and sys_platform != 'linux'", + "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", ] - -[[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.9.79" -source = { registry = "https://download.pytorch.org/whl/cu129" } wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cuda-runtime-cu12/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25bba2dfb01d48a9b59ca474a1ac43c6ebf7011f1b0b8cc44f54eb6ac48a96c3" }, + { url = "https://files.pythonhosted.org/packages/82/6c/90d3f532f608a03a13c1d6c16c266ffa3828e8011b1549d3b61db2ad59f5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:7a950dae01add3b415a5a5cdc4ec818fb5858263e9cca59004bb99fdbbd3a5d6", size = 575006342, upload-time = "2025-06-05T20:04:16.902Z" }, + { url = "https://files.pythonhosted.org/packages/45/a1/a17fade6567c57452cfc8f967a40d1035bb9301db52f27808167fbb2be2f/nvidia_cublas_cu12-12.9.1.4-py3-none-win_amd64.whl", hash = "sha256:1e5fee10662e6e52bd71dec533fbbd4971bb70a5f24f3bc3793e5c2e9dc640bf", size = 553153899, upload-time = "2025-06-05T20:13:35.556Z" }, ] [[package]] name = "nvidia-cudnn-cu12" version = "9.10.2.21" -source = { registry = "https://download.pytorch.org/whl/cu129" } -dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cudnn-cu12/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8" }, - { url = "https://pypi.nvidia.com/nvidia-cudnn-cu12/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8" }, - { url = "https://pypi.nvidia.com/nvidia-cudnn-cu12/nvidia_cudnn_cu12-9.10.2.21-py3-none-win_amd64.whl", hash = "sha256:c6288de7d63e6cf62988f0923f96dc339cea362decb1bf5b3141883392a7d65e" }, -] - -[[package]] -name = "nvidia-cufft-cu12" -version = "11.4.1.4" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')" }, -] -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cufft-cu12/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c67884f2a7d276b4b80eb56a79322a95df592ae5e765cf1243693365ccab4e28" }, -] - -[[package]] -name = "nvidia-cufile-cu12" -version = "1.14.1.1" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cufile-cu12/nvidia_cufile_cu12-1.14.1.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9552e2231792e94b1ff17bc99e958cc0e6bbbaa4a9d91fa2dbeed97716628fe6" }, -] - -[[package]] -name = "nvidia-curand-cu12" -version = "10.3.10.19" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.10.19-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:49b274db4780d421bd2ccd362e1415c13887c53c214f0d4b761752b8f9f6aa1e" }, -] - -[[package]] -name = "nvidia-cusolver-cu12" -version = "11.7.5.82" -source = { registry = "https://download.pytorch.org/whl/cu129" } -dependencies = [ - { name = "nvidia-cublas-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')" }, - { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')" }, - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')" }, -] -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:15da72d1340d29b5b3cf3fd100e3cd53421dde36002eda6ed93811af63c40d88" }, -] - -[[package]] -name = "nvidia-cusparse-cu12" -version = "12.5.10.65" -source = { registry = "https://download.pytorch.org/whl/cu129" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')" }, -] -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:73060ce019ac064a057267c585bf1fd5a353734151f87472ff02b2c5c9984e78" }, -] - -[[package]] -name = "nvidia-cusparselt-cu12" -version = "0.7.1" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-cusparselt-cu12/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623" }, -] - -[[package]] -name = "nvidia-nccl-cu12" -version = "2.27.3" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-nccl-cu12/nvidia_nccl_cu12-2.27.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adf27ccf4238253e0b826bce3ff5fa532d65fc42322c8bfdfaf28024c0fbe039" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')" }, + { name = "nvidia-cublas-cu12", version = "12.9.1.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, ] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.9.86" -source = { registry = "https://download.pytorch.org/whl/cu129" } -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9" }, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.9.79" -source = { registry = "https://download.pytorch.org/whl/cu129" } wheels = [ - { url = "https://pypi.nvidia.com/nvidia-nvtx-cu12/nvidia_nvtx_cu12-12.9.79-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fec150986817f2b4e7eed72ed059f2dcb9ba3856b9a96134e448eac946a6952f" }, + { url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" }, + { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, + { url = "https://files.pythonhosted.org/packages/3d/90/0bd6e586701b3a890fd38aa71c387dab4883d619d6e5ad912ccbd05bfd67/nvidia_cudnn_cu12-9.10.2.21-py3-none-win_amd64.whl", hash = "sha256:c6288de7d63e6cf62988f0923f96dc339cea362decb1bf5b3141883392a7d65e", size = 692992268, upload-time = "2025-06-06T21:55:18.114Z" }, ] [[package]] name = "omegaconf" version = "2.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "antlr4-python3-runtime" }, { name = "pyyaml" }, @@ -2471,7 +2366,7 @@ wheels = [ [[package]] name = "onnx" version = "1.20.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ml-dtypes" }, { name = "numpy" }, @@ -2491,7 +2386,7 @@ wheels = [ [[package]] name = "onnxruntime" version = "1.18.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coloredlogs" }, { name = "flatbuffers" }, @@ -2511,7 +2406,7 @@ wheels = [ [[package]] name = "openai" version = "1.109.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "distro" }, @@ -2530,15 +2425,14 @@ wheels = [ [[package]] name = "openai-whisper" version = "20250625" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools" }, { name = "numba" }, { name = "numpy" }, { name = "tiktoken" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, { name = "triton", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'linux2'" }, ] @@ -2547,16 +2441,13 @@ sdist = { url = "https://files.pythonhosted.org/packages/35/8e/d36f8880bcf18ec02 [[package]] name = "openunmix" version = "1.3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, - { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/ef/4ad54e3ecb1e89f7f7bdb4c7b751e43754e892d3c32a8550e5d0882565df/openunmix-1.3.0.tar.gz", hash = "sha256:cc9245ce728700f5d0b72c67f01be4162777e617cdc47f9b035963afac180fc8", size = 45889, upload-time = "2024-04-16T11:10:47.121Z" } @@ -2567,7 +2458,7 @@ wheels = [ [[package]] name = "optuna" version = "4.6.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "alembic", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "colorlog", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2585,7 +2476,7 @@ wheels = [ [[package]] name = "overrides" version = "7.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, @@ -2594,7 +2485,7 @@ wheels = [ [[package]] name = "packaging" version = "24.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, @@ -2603,7 +2494,7 @@ wheels = [ [[package]] name = "pandas" version = "2.3.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, @@ -2624,7 +2515,7 @@ wheels = [ [[package]] name = "parso" version = "0.8.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, @@ -2633,7 +2524,7 @@ wheels = [ [[package]] name = "pathspec" version = "0.12.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, @@ -2642,7 +2533,7 @@ wheels = [ [[package]] name = "pefile" version = "2024.8.26" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/4f/2750f7f6f025a1507cd3b7218691671eecfd0bbebebe8b39aa0fe1d360b8/pefile-2024.8.26.tar.gz", hash = "sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632", size = 76008, upload-time = "2024-08-26T20:58:38.155Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/54/16/12b82f791c7f50ddec566873d5bdd245baa1491bac11d15ffb98aecc8f8b/pefile-2024.8.26-py3-none-any.whl", hash = "sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f", size = 74766, upload-time = "2024-08-26T21:01:02.632Z" }, @@ -2651,7 +2542,7 @@ wheels = [ [[package]] name = "peft" version = "0.18.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "accelerate" }, { name = "huggingface-hub" }, @@ -2660,9 +2551,8 @@ dependencies = [ { name = "psutil" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, { name = "transformers" }, ] @@ -2674,7 +2564,7 @@ wheels = [ [[package]] name = "pexpect" version = "4.9.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -2686,26 +2576,26 @@ wheels = [ [[package]] name = "pillow" version = "12.0.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/90/4fcce2c22caf044e660a198d740e7fbc14395619e3cb1abad12192c0826c/pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371" }, - { url = "https://files.pythonhosted.org/packages/fd/e0/ed960067543d080691d47d6938ebccbf3976a931c9567ab2fbfab983a5dd/pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082" }, - { url = "https://files.pythonhosted.org/packages/e7/a1/f81fdeddcb99c044bf7d6faa47e12850f13cee0849537a7d27eeab5534d4/pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f" }, - { url = "https://files.pythonhosted.org/packages/88/e1/9098d3ce341a8750b55b0e00c03f1630d6178f38ac191c81c97a3b047b44/pillow-12.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d" }, - { url = "https://files.pythonhosted.org/packages/a7/62/a22e8d3b602ae8cc01446d0c57a54e982737f44b6f2e1e019a925143771d/pillow-12.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953" }, - { url = "https://files.pythonhosted.org/packages/4f/87/424511bdcd02c8d7acf9f65caa09f291a519b16bd83c3fb3374b3d4ae951/pillow-12.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8" }, - { url = "https://files.pythonhosted.org/packages/dc/4d/435c8ac688c54d11755aedfdd9f29c9eeddf68d150fe42d1d3dbd2365149/pillow-12.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79" }, - { url = "https://files.pythonhosted.org/packages/2b/f2/ad34167a8059a59b8ad10bc5c72d4d9b35acc6b7c0877af8ac885b5f2044/pillow-12.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba" }, - { url = "https://files.pythonhosted.org/packages/0c/b1/a7391df6adacf0a5c2cf6ac1cf1fcc1369e7d439d28f637a847f8803beb3/pillow-12.0.0-cp312-cp312-win32.whl", hash = "sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0" }, - { url = "https://files.pythonhosted.org/packages/a2/0b/d87733741526541c909bbf159e338dcace4f982daac6e5a8d6be225ca32d/pillow-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a" }, - { url = "https://files.pythonhosted.org/packages/bc/96/aaa61ce33cc98421fb6088af2a03be4157b1e7e0e87087c888e2370a7f45/pillow-12.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad" }, + { url = "https://files.pythonhosted.org/packages/2c/90/4fcce2c22caf044e660a198d740e7fbc14395619e3cb1abad12192c0826c/pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371", size = 5249377, upload-time = "2025-10-15T18:22:05.993Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e0/ed960067543d080691d47d6938ebccbf3976a931c9567ab2fbfab983a5dd/pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082", size = 4650343, upload-time = "2025-10-15T18:22:07.718Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a1/f81fdeddcb99c044bf7d6faa47e12850f13cee0849537a7d27eeab5534d4/pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f", size = 6232981, upload-time = "2025-10-15T18:22:09.287Z" }, + { url = "https://files.pythonhosted.org/packages/88/e1/9098d3ce341a8750b55b0e00c03f1630d6178f38ac191c81c97a3b047b44/pillow-12.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d", size = 8041399, upload-time = "2025-10-15T18:22:10.872Z" }, + { url = "https://files.pythonhosted.org/packages/a7/62/a22e8d3b602ae8cc01446d0c57a54e982737f44b6f2e1e019a925143771d/pillow-12.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953", size = 6347740, upload-time = "2025-10-15T18:22:12.769Z" }, + { url = "https://files.pythonhosted.org/packages/4f/87/424511bdcd02c8d7acf9f65caa09f291a519b16bd83c3fb3374b3d4ae951/pillow-12.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8", size = 7040201, upload-time = "2025-10-15T18:22:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4d/435c8ac688c54d11755aedfdd9f29c9eeddf68d150fe42d1d3dbd2365149/pillow-12.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79", size = 6462334, upload-time = "2025-10-15T18:22:16.375Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f2/ad34167a8059a59b8ad10bc5c72d4d9b35acc6b7c0877af8ac885b5f2044/pillow-12.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba", size = 7134162, upload-time = "2025-10-15T18:22:17.996Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b1/a7391df6adacf0a5c2cf6ac1cf1fcc1369e7d439d28f637a847f8803beb3/pillow-12.0.0-cp312-cp312-win32.whl", hash = "sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0", size = 6298769, upload-time = "2025-10-15T18:22:19.923Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0b/d87733741526541c909bbf159e338dcace4f982daac6e5a8d6be225ca32d/pillow-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a", size = 7001107, upload-time = "2025-10-15T18:22:21.644Z" }, + { url = "https://files.pythonhosted.org/packages/bc/96/aaa61ce33cc98421fb6088af2a03be4157b1e7e0e87087c888e2370a7f45/pillow-12.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad", size = 2436012, upload-time = "2025-10-15T18:22:23.621Z" }, ] [[package]] name = "plac" version = "1.4.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/23/09/26ef2d614cabdcc52a7f383d0dc7967bf46be3c9700898c594e37b710c3d/plac-1.4.5.tar.gz", hash = "sha256:5f05bf85235c017fcd76c73c8101d4ff8e96beb3dc58b9a37de49cac7de82d14", size = 38988, upload-time = "2025-04-04T14:03:25.651Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/15/36/38676114a0dbee137ec366daa86603d667a07e9a52667d5ebf5c580100ba/plac-1.4.5-py2.py3-none-any.whl", hash = "sha256:87187786b4e446688b1cf5112e18fed8a23ab3b316c25fe91266a10bd1736b16", size = 22468, upload-time = "2025-04-04T14:03:24.761Z" }, @@ -2714,7 +2604,7 @@ wheels = [ [[package]] name = "platformdirs" version = "4.5.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, @@ -2723,7 +2613,7 @@ wheels = [ [[package]] name = "pluggy" version = "1.6.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, @@ -2732,7 +2622,7 @@ wheels = [ [[package]] name = "polib" version = "1.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/10/9a/79b1067d27e38ddf84fe7da6ec516f1743f31f752c6122193e7bce38bdbf/polib-1.2.0.tar.gz", hash = "sha256:f3ef94aefed6e183e342a8a269ae1fc4742ba193186ad76f175938621dbfc26b", size = 161658, upload-time = "2023-02-23T17:53:56.873Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/6b/99/45bb1f9926efe370c6dbe324741c749658e44cb060124f28dad201202274/polib-1.2.0-py2.py3-none-any.whl", hash = "sha256:1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d", size = 20634, upload-time = "2023-02-23T17:53:59.919Z" }, @@ -2741,7 +2631,7 @@ wheels = [ [[package]] name = "pooch" version = "1.8.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "platformdirs", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2755,7 +2645,7 @@ wheels = [ [[package]] name = "posthog" version = "3.25.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backoff" }, { name = "distro" }, @@ -2772,7 +2662,7 @@ wheels = [ [[package]] name = "pre-commit" version = "2.21.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgv" }, { name = "identify" }, @@ -2788,7 +2678,7 @@ wheels = [ [[package]] name = "prompt-toolkit" version = "3.0.52" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -2800,7 +2690,7 @@ wheels = [ [[package]] name = "propcache" version = "0.4.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, @@ -2824,7 +2714,7 @@ wheels = [ [[package]] name = "protobuf" version = "5.29.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/29/d09e70352e4e88c9c7a198d5645d7277811448d76c23b00345670f7c8a38/protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84", size = 425226, upload-time = "2025-05-28T23:51:59.82Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/5f/11/6e40e9fc5bba02988a214c07cf324595789ca7820160bfd1f8be96e48539/protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079", size = 422963, upload-time = "2025-05-28T23:51:41.204Z" }, @@ -2838,7 +2728,7 @@ wheels = [ [[package]] name = "psutil" version = "7.1.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e1/88/bdd0a41e5857d5d703287598cbf08dad90aed56774ea52ae071bae9071b6/psutil-7.1.3.tar.gz", hash = "sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74", size = 489059, upload-time = "2025-11-02T12:25:54.619Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ef/94/46b9154a800253e7ecff5aaacdf8ebf43db99de4a2dfa18575b02548654e/psutil-7.1.3-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab", size = 238359, upload-time = "2025-11-02T12:26:25.284Z" }, @@ -2852,7 +2742,7 @@ wheels = [ [[package]] name = "ptyprocess" version = "0.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, @@ -2861,7 +2751,7 @@ wheels = [ [[package]] name = "pure-eval" version = "0.2.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, @@ -2870,7 +2760,7 @@ wheels = [ [[package]] name = "py-cpuinfo" version = "9.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, @@ -2879,7 +2769,7 @@ wheels = [ [[package]] name = "pyaml" version = "25.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] @@ -2891,7 +2781,7 @@ wheels = [ [[package]] name = "pyannote-core" version = "5.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "scipy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2906,7 +2796,7 @@ wheels = [ [[package]] name = "pyannote-database" version = "5.1.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pandas", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pyannote-core", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2921,7 +2811,7 @@ wheels = [ [[package]] name = "pyannote-metrics" version = "3.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docopt", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "matplotlib", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2942,7 +2832,7 @@ wheels = [ [[package]] name = "pyarrow" version = "22.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/30/53/04a7fdc63e6056116c9ddc8b43bc28c12cdd181b85cbeadb79278475f3ae/pyarrow-22.0.0.tar.gz", hash = "sha256:3d600dc583260d845c7d8a6db540339dd883081925da2bd1c5cb808f720b3cd9", size = 1151151, upload-time = "2025-10-24T12:30:00.762Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/af/63/ba23862d69652f85b615ca14ad14f3bcfc5bf1b99ef3f0cd04ff93fdad5a/pyarrow-22.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bea79263d55c24a32b0d79c00a1c58bb2ee5f0757ed95656b01c0fb310c5af3d", size = 34211578, upload-time = "2025-10-24T10:05:21.583Z" }, @@ -2957,7 +2847,7 @@ wheels = [ [[package]] name = "pybind11" version = "3.0.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2f/7b/a6d8dcb83c457e24a9df1e4d8fd5fb8034d4bbc62f3c324681e8a9ba57c2/pybind11-3.0.1.tar.gz", hash = "sha256:9c0f40056a016da59bab516efb523089139fcc6f2ba7e4930854c61efb932051", size = 546914, upload-time = "2025-08-22T20:09:27.265Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cd/8a/37362fc2b949d5f733a8b0f2ff51ba423914cabefe69f1d1b6aab710f5fe/pybind11-3.0.1-py3-none-any.whl", hash = "sha256:aa8f0aa6e0a94d3b64adfc38f560f33f15e589be2175e103c0a33c6bce55ee89", size = 293611, upload-time = "2025-08-22T20:09:25.235Z" }, @@ -2966,7 +2856,7 @@ wheels = [ [[package]] name = "pycodestyle" version = "2.14.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472, upload-time = "2025-06-20T18:49:48.75Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, @@ -2975,7 +2865,7 @@ wheels = [ [[package]] name = "pycparser" version = "2.23" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, @@ -2984,7 +2874,7 @@ wheels = [ [[package]] name = "pydantic" version = "2.12.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, { name = "pydantic-core" }, @@ -2999,7 +2889,7 @@ wheels = [ [[package]] name = "pydantic-core" version = "2.41.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] @@ -3028,7 +2918,7 @@ wheels = [ [[package]] name = "pydub" version = "0.25.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326, upload-time = "2021-03-10T02:09:54.659Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327, upload-time = "2021-03-10T02:09:53.503Z" }, @@ -3037,7 +2927,7 @@ wheels = [ [[package]] name = "pyflakes" version = "3.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3d015808458391acbf9df40b1e54750ef175d39180b1/pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58", size = 64669, upload-time = "2025-06-20T18:45:27.834Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551, upload-time = "2025-06-20T18:45:26.937Z" }, @@ -3046,7 +2936,7 @@ wheels = [ [[package]] name = "pygments" version = "2.19.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, @@ -3055,7 +2945,7 @@ wheels = [ [[package]] name = "pyinstaller" version = "6.17.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "altgraph" }, { name = "macholib", marker = "sys_platform == 'darwin'" }, @@ -3083,7 +2973,7 @@ wheels = [ [[package]] name = "pyinstaller-hooks-contrib" version = "2025.10" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, { name = "setuptools" }, @@ -3096,7 +2986,7 @@ wheels = [ [[package]] name = "pylint" version = "2.17.7" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astroid" }, { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -3114,7 +3004,7 @@ wheels = [ [[package]] name = "pyloudnorm" version = "0.1.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "future", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3128,7 +3018,7 @@ wheels = [ [[package]] name = "pyparsing" version = "3.2.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, @@ -3137,7 +3027,7 @@ wheels = [ [[package]] name = "pyqt6" version = "6.9.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyqt6-qt6" }, { name = "pyqt6-sip" }, @@ -3154,7 +3044,7 @@ wheels = [ [[package]] name = "pyqt6-qt6" version = "6.9.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/51/40/04f652e714f85ba6b0c24f4ead860f2c5769f9e64737f415524d792d5914/pyqt6_qt6-6.9.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:3854c7f83ee4e8c2d91e23ab88b77f90e2ca7ace34fe72f634a446959f2b4d4a", size = 66236777, upload-time = "2025-06-03T14:53:17.684Z" }, { url = "https://files.pythonhosted.org/packages/57/31/e4fa40568a59953ce5cf9a5adfbd1be4a806dafd94e39072d3cc0bed5468/pyqt6_qt6-6.9.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:123e4aeb037c099bb4696a3ea8edcb1d9d62cedd0b2b950556b26024c97f3293", size = 60551574, upload-time = "2025-06-03T14:53:48.42Z" }, @@ -3167,7 +3057,7 @@ wheels = [ [[package]] name = "pyqt6-sip" version = "13.10.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2f/4a/96daf6c2e4f689faae9bd8cebb52754e76522c58a6af9b5ec86a2e8ec8b4/pyqt6_sip-13.10.2.tar.gz", hash = "sha256:464ad156bf526500ce6bd05cac7a82280af6309974d816739b4a9a627156fafe", size = 92548, upload-time = "2025-05-23T12:26:49.901Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/22/5b/1240017e0d59575289ba52b58fd7f95e7ddf0ed2ede95f3f7e2dc845d337/pyqt6_sip-13.10.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:83e6a56d3e715f748557460600ec342cbd77af89ec89c4f2a68b185fa14ea46c", size = 112199, upload-time = "2025-05-23T12:26:32.503Z" }, @@ -3180,7 +3070,7 @@ wheels = [ [[package]] name = "pyreadline3" version = "3.5.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/0f/49/4cea918a08f02817aabae639e3d0ac046fef9f9180518a3ad394e22da148/pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7", size = 99839, upload-time = "2024-09-19T02:40:10.062Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178, upload-time = "2024-09-19T02:40:08.598Z" }, @@ -3189,7 +3079,7 @@ wheels = [ [[package]] name = "pytest" version = "7.4.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "iniconfig" }, @@ -3204,7 +3094,7 @@ wheels = [ [[package]] name = "pytest-benchmark" version = "4.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "py-cpuinfo" }, { name = "pytest" }, @@ -3217,7 +3107,7 @@ wheels = [ [[package]] name = "pytest-cov" version = "4.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage" }, { name = "pytest" }, @@ -3230,7 +3120,7 @@ wheels = [ [[package]] name = "pytest-mock" version = "3.15.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] @@ -3242,7 +3132,7 @@ wheels = [ [[package]] name = "pytest-qt" version = "4.5.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pluggy" }, { name = "pytest" }, @@ -3256,7 +3146,7 @@ wheels = [ [[package]] name = "pytest-timeout" version = "2.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] @@ -3268,7 +3158,7 @@ wheels = [ [[package]] name = "pytest-xvfb" version = "2.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, { name = "pyvirtualdisplay" }, @@ -3281,7 +3171,7 @@ wheels = [ [[package]] name = "python-dateutil" version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] @@ -3293,14 +3183,13 @@ wheels = [ [[package]] name = "pytorch-lightning" version = "2.6.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fsspec", extra = ["http"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "torchmetrics", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3313,7 +3202,7 @@ wheels = [ [[package]] name = "pytz" version = "2025.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, @@ -3322,7 +3211,7 @@ wheels = [ [[package]] name = "pyvirtualdisplay" version = "3.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/86/9f/23e5a82987c26d225139948a224a93318d7a7c8b166d4dbe4de7426dc4e4/PyVirtualDisplay-3.0.tar.gz", hash = "sha256:09755bc3ceb6eb725fb07eca5425f43f2358d3bf08e00d2a9b792a1aedd16159", size = 18560, upload-time = "2022-02-13T07:57:05.783Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/90/eb/c3b8deb661cb3846db63288c99bbb39f217b7807fc8acb2fd058db41e2e6/PyVirtualDisplay-3.0-py3-none-any.whl", hash = "sha256:40d4b8dfe4b8de8552e28eb367647f311f88a130bf837fe910e7f180d5477f0e", size = 15258, upload-time = "2022-02-13T07:57:04.051Z" }, @@ -3331,7 +3220,7 @@ wheels = [ [[package]] name = "pywin32-ctypes" version = "0.2.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, @@ -3340,7 +3229,7 @@ wheels = [ [[package]] name = "pyyaml" version = "6.0.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, @@ -3358,7 +3247,7 @@ wheels = [ [[package]] name = "rapidfuzz" version = "3.14.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d3/28/9d808fe62375b9aab5ba92fa9b29371297b067c2790b2d7cda648b1e2f8d/rapidfuzz-3.14.3.tar.gz", hash = "sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f", size = 57863900, upload-time = "2025-11-01T11:54:52.321Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fa/8e/3c215e860b458cfbedb3ed73bc72e98eb7e0ed72f6b48099604a7a3260c2/rapidfuzz-3.14.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226", size = 1945306, upload-time = "2025-11-01T11:53:06.452Z" }, @@ -3377,7 +3266,7 @@ wheels = [ [[package]] name = "referencing" version = "0.37.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py" }, @@ -3391,7 +3280,7 @@ wheels = [ [[package]] name = "regex" version = "2025.11.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cc/a9/546676f25e573a4cf00fe8e119b78a37b6a8fe2dc95cda877b30889c9c45/regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01", size = 414669, upload-time = "2025-11-03T21:34:22.089Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e8/74/18f04cb53e58e3fb107439699bd8375cf5a835eec81084e0bddbd122e4c2/regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41", size = 489312, upload-time = "2025-11-03T21:31:34.343Z" }, @@ -3413,7 +3302,7 @@ wheels = [ [[package]] name = "requests" version = "2.32.5" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "charset-normalizer" }, @@ -3428,7 +3317,7 @@ wheels = [ [[package]] name = "resampy" version = "0.4.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numba", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3441,7 +3330,7 @@ wheels = [ [[package]] name = "retrying" version = "1.4.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c8/5a/b17e1e257d3e6f2e7758930e1256832c9ddd576f8631781e6a072914befa/retrying-1.4.2.tar.gz", hash = "sha256:d102e75d53d8d30b88562d45361d6c6c934da06fab31bd81c0420acb97a8ba39", size = 11411, upload-time = "2025-08-03T03:35:25.189Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/67/f3/6cd296376653270ac1b423bb30bd70942d9916b6978c6f40472d6ac038e7/retrying-1.4.2-py3-none-any.whl", hash = "sha256:bbc004aeb542a74f3569aeddf42a2516efefcdaff90df0eb38fbfbf19f179f59", size = 10859, upload-time = "2025-08-03T03:35:23.829Z" }, @@ -3450,7 +3339,7 @@ wheels = [ [[package]] name = "rich" version = "14.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pygments", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3463,7 +3352,7 @@ wheels = [ [[package]] name = "rpds-py" version = "0.30.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, @@ -3486,7 +3375,7 @@ wheels = [ [[package]] name = "ruamel-yaml" version = "0.18.16" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "(platform_machine != 'x86_64' and platform_python_implementation == 'CPython') or (platform_python_implementation == 'CPython' and sys_platform != 'darwin')" }, ] @@ -3498,7 +3387,7 @@ wheels = [ [[package]] name = "ruamel-yaml-clib" version = "0.2.15" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ea/97/60fda20e2fb54b83a61ae14648b0817c8f5d84a3821e40bfbdae1437026a/ruamel_yaml_clib-0.2.15.tar.gz", hash = "sha256:46e4cc8c43ef6a94885f72512094e482114a8a706d3c555a34ed4b0d20200600", size = 225794, upload-time = "2025-11-16T16:12:59.761Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/72/4b/5fde11a0722d676e469d3d6f78c6a17591b9c7e0072ca359801c4bd17eee/ruamel_yaml_clib-0.2.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb15a2e2a90c8475df45c0949793af1ff413acfb0a716b8b94e488ea95ce7cff", size = 149088, upload-time = "2025-11-16T16:13:22.836Z" }, @@ -3516,7 +3405,7 @@ wheels = [ [[package]] name = "ruff" version = "0.1.15" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/42/33/7165f88a156be1c2fd13a18b3af6e75bbf82da5b6978cd2128d666accc18/ruff-0.1.15.tar.gz", hash = "sha256:f6dfa8c1b21c913c326919056c390966648b680966febcb796cc9d1aaab8564e", size = 1971643, upload-time = "2024-01-29T23:06:05.541Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/11/2c/fac0658910ea3ea87a23583e58277533154261b73f9460388eb2e6e02e8f/ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df", size = 14357437, upload-time = "2024-01-29T23:05:04.991Z" }, @@ -3540,7 +3429,7 @@ wheels = [ [[package]] name = "sacremoses" version = "0.1.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "joblib", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3555,7 +3444,7 @@ wheels = [ [[package]] name = "safetensors" version = "0.7.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0", size = 200878, upload-time = "2025-11-19T15:18:43.199Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fa/47/aef6c06649039accf914afef490268e1067ed82be62bcfa5b7e886ad15e8/safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517", size = 467781, upload-time = "2025-11-19T15:18:35.84Z" }, @@ -3577,7 +3466,7 @@ wheels = [ [[package]] name = "scikit-learn" version = "1.7.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3596,7 +3485,7 @@ wheels = [ [[package]] name = "scipy" version = "1.16.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] @@ -3617,7 +3506,7 @@ wheels = [ [[package]] name = "secretstorage" version = "3.5.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography", marker = "sys_platform == 'linux'" }, { name = "jeepney", marker = "sys_platform == 'linux'" }, @@ -3630,7 +3519,7 @@ wheels = [ [[package]] name = "sentencepiece" version = "0.2.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/4a/be/32ce495aa1d0e0c323dcb1ba87096037358edee539cac5baf8755a6bd396/sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133", size = 1943152, upload-time = "2025-08-12T06:59:40.048Z" }, @@ -3646,7 +3535,7 @@ wheels = [ [[package]] name = "sentry-sdk" version = "2.47.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "urllib3", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3659,7 +3548,7 @@ wheels = [ [[package]] name = "setuptools" version = "80.9.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, @@ -3668,7 +3557,7 @@ wheels = [ [[package]] name = "shellingham" version = "1.5.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, @@ -3677,7 +3566,7 @@ wheels = [ [[package]] name = "simplejson" version = "3.20.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/41/f4/a1ac5ed32f7ed9a088d62a59d410d4c204b3b3815722e2ccfb491fa8251b/simplejson-3.20.2.tar.gz", hash = "sha256:5fe7a6ce14d1c300d80d08695b7f7e633de6cd72c80644021874d985b3393649", size = 85784, upload-time = "2025-09-26T16:29:36.64Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9d/9e/1a91e7614db0416885eab4136d49b7303de20528860ffdd798ce04d054db/simplejson-3.20.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4376d5acae0d1e91e78baeba4ee3cf22fbf6509d81539d01b94e0951d28ec2b6", size = 93523, upload-time = "2025-09-26T16:28:00.356Z" }, @@ -3699,7 +3588,7 @@ wheels = [ [[package]] name = "six" version = "1.17.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, @@ -3708,7 +3597,7 @@ wheels = [ [[package]] name = "smmap" version = "5.0.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload-time = "2025-01-02T07:14:40.909Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload-time = "2025-01-02T07:14:38.724Z" }, @@ -3717,7 +3606,7 @@ wheels = [ [[package]] name = "sniffio" version = "1.3.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, @@ -3726,7 +3615,7 @@ wheels = [ [[package]] name = "sortedcontainers" version = "2.4.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, @@ -3735,7 +3624,7 @@ wheels = [ [[package]] name = "sounddevice" version = "0.5.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] @@ -3750,7 +3639,7 @@ wheels = [ [[package]] name = "soundfile" version = "0.13.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, { name = "numpy" }, @@ -3769,7 +3658,7 @@ wheels = [ [[package]] name = "sox" version = "1.5.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3779,7 +3668,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/3d/a2/d8e0d8fd7abf509ea [[package]] name = "soxr" version = "1.0.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -3795,7 +3684,7 @@ wheels = [ [[package]] name = "sqlalchemy" version = "2.0.44" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or (platform_machine == 'x86_64' and sys_platform != 'darwin')" }, { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3816,13 +3705,13 @@ wheels = [ [[package]] name = "srt" version = "3.5.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b7/4a1bc231e0681ebf339337b0cd05b91dc6a0d701fa852bb812e244b7a030/srt-3.5.3.tar.gz", hash = "sha256:4884315043a4f0740fd1f878ed6caa376ac06d70e135f306a6dc44632eed0cc0", size = 28296, upload-time = "2023-03-28T02:35:44.007Z" } [[package]] name = "srt-equalizer" version = "0.1.10" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "srt" }, ] @@ -3834,17 +3723,14 @@ wheels = [ [[package]] name = "stable-ts" version = "2.19.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "openai-whisper" }, - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, - { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/94/d9/d326f9dbbb7da6806aa8cfc080342e5f78dc33552f4339bdc8a6251d11a3/stable_ts-2.19.1.tar.gz", hash = "sha256:0ecaf1ed93e029839569618d2da9a57b883ad04db21f0680146e0650caaf4f52", size = 189132, upload-time = "2025-08-16T16:53:48.811Z" } @@ -3852,7 +3738,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/94/d9/d326f9dbbb7da6806 [[package]] name = "stack-data" version = "0.6.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asttokens", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "executing", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3866,7 +3752,7 @@ wheels = [ [[package]] name = "stempeg" version = "0.2.6" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ffmpeg-python" }, { name = "numpy" }, @@ -3879,7 +3765,7 @@ wheels = [ [[package]] name = "strenum" version = "0.4.15" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/85/ad/430fb60d90e1d112a62ff57bdd1f286ec73a2a0331272febfddd21f330e1/StrEnum-0.4.15.tar.gz", hash = "sha256:878fb5ab705442070e4dd1929bb5e2249511c0bcf2b0eeacf3bcd80875c82eff", size = 23384, upload-time = "2023-06-29T22:02:58.399Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/81/69/297302c5f5f59c862faa31e6cb9a4cd74721cd1e052b38e464c5b402df8b/StrEnum-0.4.15-py3-none-any.whl", hash = "sha256:a30cda4af7cc6b5bf52c8055bc4bf4b2b6b14a93b574626da33df53cf7740659", size = 8851, upload-time = "2023-06-29T22:02:56.947Z" }, @@ -3888,7 +3774,7 @@ wheels = [ [[package]] name = "submitit" version = "1.5.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cloudpickle" }, { name = "typing-extensions" }, @@ -3901,19 +3787,19 @@ wheels = [ [[package]] name = "sympy" version = "1.14.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mpmath" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517" } +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" }, + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, ] [[package]] name = "tabulate" version = "0.9.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload-time = "2022-10-06T17:21:48.54Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload-time = "2022-10-06T17:21:44.262Z" }, @@ -3922,7 +3808,7 @@ wheels = [ [[package]] name = "tensorboard" version = "2.20.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "absl-py", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "grpcio", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3942,7 +3828,7 @@ wheels = [ [[package]] name = "tensorboard-data-server" version = "0.7.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356, upload-time = "2023-10-23T21:23:32.16Z" }, { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598, upload-time = "2023-10-23T21:23:33.714Z" }, @@ -3952,7 +3838,7 @@ wheels = [ [[package]] name = "termcolor" version = "3.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/87/56/ab275c2b56a5e2342568838f0d5e3e66a32354adcc159b495e374cda43f5/termcolor-3.2.0.tar.gz", hash = "sha256:610e6456feec42c4bcd28934a8c87a06c3fa28b01561d46aa09a9881b8622c58", size = 14423, upload-time = "2025-10-25T19:11:42.586Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl", hash = "sha256:a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6", size = 7698, upload-time = "2025-10-25T19:11:41.536Z" }, @@ -3961,7 +3847,7 @@ wheels = [ [[package]] name = "text-unidecode" version = "1.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload-time = "2019-08-30T21:36:45.405Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload-time = "2019-08-30T21:37:03.543Z" }, @@ -3970,7 +3856,7 @@ wheels = [ [[package]] name = "texterrors" version = "0.5.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "levenshtein", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "loguru", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3985,7 +3871,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/9b/47/9a391643961698df3 [[package]] name = "threadpoolctl" version = "3.6.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, @@ -3994,7 +3880,7 @@ wheels = [ [[package]] name = "tiktoken" version = "0.12.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "regex" }, { name = "requests" }, @@ -4013,7 +3899,7 @@ wheels = [ [[package]] name = "tokenizers" version = "0.21.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, ] @@ -4038,7 +3924,7 @@ wheels = [ [[package]] name = "toml" version = "0.10.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, @@ -4047,7 +3933,7 @@ wheels = [ [[package]] name = "tomlkit" version = "0.13.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, @@ -4056,7 +3942,7 @@ wheels = [ [[package]] name = "toolz" version = "1.1.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, @@ -4065,7 +3951,7 @@ wheels = [ [[package]] name = "torch" version = "2.2.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } resolution-markers = [ "platform_machine == 'x86_64' and sys_platform == 'darwin'", ] @@ -4083,73 +3969,41 @@ wheels = [ [[package]] name = "torch" -version = "2.8.0" -source = { registry = "https://pypi.org/simple/" } +version = "2.8.0+cpu" +source = { registry = "https://download.pytorch.org/whl/cpu" } resolution-markers = [ + "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", + "sys_platform != 'darwin' and sys_platform != 'linux'", + "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", "platform_machine == 'arm64' and sys_platform == 'darwin'", "platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'", ] dependencies = [ - { name = "filelock", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "fsspec", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "jinja2", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "networkx", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "setuptools", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "sympy", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "filelock", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "fsspec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "jinja2", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "networkx", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "setuptools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "sympy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/be/66/5c9a321b325aaecb92d4d1855421e3a055abd77903b7dab6575ca07796db/torch-2.8.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:619c2869db3ada2c0105487ba21b5008defcc472d23f8b80ed91ac4a380283b0", size = 73630478, upload-time = "2025-08-06T14:53:57.144Z" }, -] - -[[package]] -name = "torch" -version = "2.8.0+cu129" -source = { registry = "https://download.pytorch.org/whl/cu129" } -resolution-markers = [ - "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", - "sys_platform != 'darwin' and sys_platform != 'linux'", - "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -dependencies = [ - { name = "filelock", marker = "sys_platform != 'darwin'" }, - { name = "fsspec", marker = "sys_platform != 'darwin'" }, - { name = "jinja2", marker = "sys_platform != 'darwin'" }, - { name = "networkx", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "sys_platform != 'darwin'" }, - { name = "sympy", marker = "sys_platform != 'darwin'" }, - { name = "triton", marker = "sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu129/torch-2.8.0%2Bcu129-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:692fe6e513b667f789a543fa9b1baba58e77a46d5c8629764ca0c00a56823e1f", upload-time = "2025-10-02T00:08:10Z" }, - { url = "https://download-r2.pytorch.org/whl/cu129/torch-2.8.0%2Bcu129-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:02c7258e917f3043c978b53acf6f02b818db0d0d85db0e58ae578af333b9b4e2", upload-time = "2025-10-02T00:10:15Z" }, - { url = "https://download-r2.pytorch.org/whl/cu129/torch-2.8.0%2Bcu129-cp312-cp312-win_amd64.whl", hash = "sha256:2bc729898e422b9f3da54349eed98f2f0b5dd415434508ee2ab2a13fb021815d", upload-time = "2025-10-02T00:11:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:0e34e276722ab7dd0dffa9e12fe2135a9b34a0e300c456ed7ad6430229404eb5" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:610f600c102386e581327d5efc18c0d6edecb9820b4140d26163354a99cd800d", upload-time = "2025-10-02T00:08:10Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:cb9a8ba8137ab24e36bf1742cb79a1294bd374db570f09fc15a5e1318160db4e", upload-time = "2025-10-02T00:10:15Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:2be20b2c05a0cce10430cc25f32b689259640d273232b2de357c35729132256d" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-win_arm64.whl", hash = "sha256:99fc421a5d234580e45957a7b02effbf3e1c884a5dd077afc85352c77bf41434", upload-time = "2025-10-02T00:11:01Z" }, ] [[package]] name = "torchaudio" version = "2.2.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } resolution-markers = [ "platform_machine == 'x86_64' and sys_platform == 'darwin'", ] dependencies = [ - { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/05/39/fcc68b1f848a38b57446b624be42db66fec3587972941a5b86fc19b8bd45/torchaudio-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:da3cc523696166ea525d2b3377d789da5388f36d94a20a324b09df00f1c43458", size = 3400705, upload-time = "2024-03-27T21:12:10.303Z" }, @@ -4157,53 +4011,27 @@ wheels = [ [[package]] name = "torchaudio" -version = "2.8.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } +version = "2.8.0+cpu" +source = { registry = "https://download.pytorch.org/whl/cpu" } resolution-markers = [ + "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", + "sys_platform != 'darwin' and sys_platform != 'linux'", "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -dependencies = [ - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu129/torchaudio-2.8.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:67d4f6cbfcb795157850db6a3735301b929cdfe2b56032dc3365105b49a4ee84", upload-time = "2025-08-05T20:12:08Z" }, -] - -[[package]] -name = "torchaudio" -version = "2.8.0" -source = { registry = "https://pypi.org/simple/" } -resolution-markers = [ "platform_machine == 'arm64' and sys_platform == 'darwin'", "platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'", ] dependencies = [ - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/cc/c2e2a3eb6ee956f73c68541e439916f8146170ea9cc61e72adea5c995312/torchaudio-2.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ddef94bf181e6447cbb05f38beaca8f6c5bb8d2b9ddced1aa3452025b9fc70d3", size = 1856736, upload-time = "2025-08-06T14:58:36.3Z" }, -] - -[[package]] -name = "torchaudio" -version = "2.8.0+cu129" -source = { registry = "https://download.pytorch.org/whl/cu129" } -resolution-markers = [ - "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", - "sys_platform != 'darwin' and sys_platform != 'linux'", -] -dependencies = [ - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu129/torchaudio-2.8.0%2Bcu129-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:40df9011972519120f284f56e5e7d131d4250ea69653499028d1d30b353f932e", upload-time = "2025-08-05T20:12:08Z" }, - { url = "https://download-r2.pytorch.org/whl/cu129/torchaudio-2.8.0%2Bcu129-cp312-cp312-win_amd64.whl", hash = "sha256:bfe0d4c6e770ef3b1f7a287a4c8d33ac276a1d983306573ee28e42de02a32fe3", upload-time = "2025-08-05T20:12:08Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9377faee65a290578280ac7f4884c3586253dac2ca28c60f458ff6efe86a6b05", upload-time = "2025-08-05T20:12:08Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:9b302192b570657c1cc787a4d487ae4bbb7f2aab1c01b1fcc46757e7f86f391e", upload-time = "2025-08-05T20:12:08Z" }, ] [[package]] name = "torchcodec" version = "0.9.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/60/88/dc4a7928ee80823913b1ec9d6433458b32d5510288030b122c9b3d58b484/torchcodec-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:30d031eafbe287a2a54b90b35109f7e0711b393bbb263cf90487f533b8ac92d4", size = 4063923, upload-time = "2025-12-04T14:16:35.491Z" }, { url = "https://files.pythonhosted.org/packages/42/10/742531478a71585bcb901913a9a806dc6b8c4097f39e6e82213a129cbaf1/torchcodec-0.9.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c4b5964e85e616097b35db6927561bbac1cbf227e1a8d4dffb0acf00a7e94725", size = 2061634, upload-time = "2025-12-04T14:16:28.386Z" }, @@ -4213,13 +4041,12 @@ wheels = [ [[package]] name = "torchmetrics" version = "1.8.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/2e/48a887a59ecc4a10ce9e8b35b3e3c5cef29d902c4eac143378526e7485cb/torchmetrics-1.8.2.tar.gz", hash = "sha256:cf64a901036bf107f17a524009eea7781c9c5315d130713aeca5747a686fe7a5", size = 580679, upload-time = "2025-09-03T14:00:54.077Z" } wheels = [ @@ -4229,7 +4056,7 @@ wheels = [ [[package]] name = "tqdm" version = "4.67.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] @@ -4241,7 +4068,7 @@ wheels = [ [[package]] name = "traitlets" version = "5.14.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, @@ -4250,7 +4077,7 @@ wheels = [ [[package]] name = "transformers" version = "4.53.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "huggingface-hub" }, @@ -4271,7 +4098,7 @@ wheels = [ [[package]] name = "treetable" version = "0.2.6" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/f1/e5f28b2485d8d3169ff0167e3e560fa912a96e71916bf11365c9e40f11f5/treetable-0.2.6.tar.gz", hash = "sha256:7e1d62dbce503fbf24561aee1461b8fbcc2c232ff45661c3b9d0c2081c795bdf", size = 9577, upload-time = "2025-09-02T20:40:06.557Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e4/16/dd00f9fc5b84cb3fb396d62245e11761accfd9d27fd56ce0024bdd38a0ae/treetable-0.2.6-py3-none-any.whl", hash = "sha256:fa7dfa0297d2bbc5882191edd2e15f79a5e883e352f489e2acadb221db565adf", size = 7379, upload-time = "2025-09-03T18:57:17.784Z" }, @@ -4280,19 +4107,18 @@ wheels = [ [[package]] name = "triton" version = "3.4.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "setuptools", marker = "sys_platform != 'darwin'" }, + { name = "setuptools", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/triton-3.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ea4a1c15f079bbf49ff02c312210fdb8ff05b1503ea30812610e2a3b171f3b", upload-time = "2026-01-22T22:47:17Z" }, - { url = "https://download-r2.pytorch.org/whl/triton-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8550672b1184f05187f4140db32e33e61b592046fd3e1eb907e3b7db5321b750", upload-time = "2026-01-22T22:47:24Z" }, + { url = "https://files.pythonhosted.org/packages/d0/66/b1eb52839f563623d185f0927eb3530ee4d5ffe9d377cdaf5346b306689e/triton-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c1d84a5c0ec2c0f8e8a072d7fd150cab84a9c239eaddc6706c081bfae4eb04", size = 155560068, upload-time = "2025-07-30T19:58:37.081Z" }, ] [[package]] name = "trove-classifiers" version = "2025.12.1.14" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/80/e1/000add3b3e0725ce7ee0ea6ea4543f1e1d9519742f3b2320de41eeefa7c7/trove_classifiers-2025.12.1.14.tar.gz", hash = "sha256:a74f0400524fc83620a9be74a07074b5cbe7594fd4d97fd4c2bfde625fdc1633", size = 16985, upload-time = "2025-12-01T14:47:11.456Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/4f/7e/bc19996fa86cad8801e8ffe6f1bba5836ca0160df76d0410d27432193712/trove_classifiers-2025.12.1.14-py3-none-any.whl", hash = "sha256:a8206978ede95937b9959c3aff3eb258bbf7b07dff391ddd4ea7e61f316635ab", size = 14184, upload-time = "2025-12-01T14:47:10.113Z" }, @@ -4310,7 +4136,7 @@ wheels = [ [[package]] name = "typeguard" version = "4.4.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -4322,7 +4148,7 @@ wheels = [ [[package]] name = "typer" version = "0.20.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "rich", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -4337,27 +4163,29 @@ wheels = [ [[package]] name = "typing-extensions" version = "4.15.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] [[package]] name = "typing-inspect" version = "0.9.0" -source = { registry = "https://download.pytorch.org/whl/cu129" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, { name = "typing-extensions" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } wheels = [ - { url = "https://download.pytorch.org/whl/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", upload-time = "2024-10-30T00:09:55Z" }, + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, ] [[package]] name = "typing-inspection" version = "0.4.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] @@ -4369,7 +4197,7 @@ wheels = [ [[package]] name = "tzdata" version = "2025.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, @@ -4378,7 +4206,7 @@ wheels = [ [[package]] name = "urllib3" version = "2.6.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5e/1d/0f3a93cca1ac5e8287842ed4eebbd0f7a991315089b1a0b01c7788aa7b63/urllib3-2.6.1.tar.gz", hash = "sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f", size = 432678, upload-time = "2025-12-08T15:25:26.773Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bc/56/190ceb8cb10511b730b564fb1e0293fa468363dbad26145c34928a60cb0c/urllib3-2.6.1-py3-none-any.whl", hash = "sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b", size = 131138, upload-time = "2025-12-08T15:25:25.51Z" }, @@ -4387,7 +4215,7 @@ wheels = [ [[package]] name = "uroman" version = "1.3.1.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "regex" }, ] @@ -4399,7 +4227,7 @@ wheels = [ [[package]] name = "virtualenv" version = "20.35.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, @@ -4413,7 +4241,7 @@ wheels = [ [[package]] name = "vulkan" version = "1.3.275.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] @@ -4425,7 +4253,7 @@ wheels = [ [[package]] name = "wandb" version = "0.23.1" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "gitpython", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -4454,7 +4282,7 @@ wheels = [ [[package]] name = "wcwidth" version = "0.2.14" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" }, @@ -4463,7 +4291,7 @@ wheels = [ [[package]] name = "webdataset" version = "1.0.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "braceexpand", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -4477,7 +4305,7 @@ wheels = [ [[package]] name = "werkzeug" version = "3.1.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, ] @@ -4489,13 +4317,13 @@ wheels = [ [[package]] name = "wget" version = "3.2" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857, upload-time = "2015-10-22T15:26:37.51Z" } [[package]] name = "whisper-normalizer" version = "0.1.12" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "indic-numtowords", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "more-itertools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -4509,7 +4337,7 @@ wheels = [ [[package]] name = "win32-setctime" version = "1.2.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, @@ -4518,7 +4346,7 @@ wheels = [ [[package]] name = "wrapt" version = "1.17.3" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547, upload-time = "2025-08-12T05:53:21.714Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9f/41/cad1aba93e752f1f9268c77270da3c469883d56e2798e7df6240dcb2287b/wrapt-1.17.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0", size = 53998, upload-time = "2025-08-12T05:51:47.138Z" }, @@ -4537,7 +4365,7 @@ wheels = [ [[package]] name = "xxhash" version = "3.6.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c", size = 32744, upload-time = "2025-10-02T14:34:34.622Z" }, @@ -4560,7 +4388,7 @@ wheels = [ [[package]] name = "yarl" version = "1.22.0" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "multidict" }, @@ -4589,9 +4417,9 @@ wheels = [ [[package]] name = "yt-dlp" -version = "2026.3.17" -source = { registry = "https://pypi.org/simple/" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/34/7c6b4e3f89cb6416d2cd7ab6dab141a1df97ab0fb22d15816db2c92148c9/yt_dlp-2026.3.17.tar.gz", hash = "sha256:ba7aa31d533f1ffccfe70e421596d7ca8ff0bf1398dc6bb658b7d9dec057d2c9", size = 3119221, upload-time = "2026-03-17T23:43:00.244Z" } +version = "2026.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/6f/7427d23609353e5ef3470ff43ef551b8bd7b166dd4fef48957f0d0e040fe/yt_dlp-2026.3.3.tar.gz", hash = "sha256:3db7969e3a8964dc786bdebcffa2653f31123bf2a630f04a17bdafb7bbd39952", size = 3118658, upload-time = "2026-03-03T16:54:53.909Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/13/5093bcb954878e50f7217fd2ab94282b53934022e4e4a03265582da83bf5/yt_dlp-2026.3.17-py3-none-any.whl", hash = "sha256:32992db94303a8a5d211a183f2174834fe7f8c29d83ed2e7a324eae97a8f26d8", size = 3315134, upload-time = "2026-03-17T23:42:57.863Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a4/8b5cd28ab87aef48ef15e74241befec3445496327db028f34147a9e0f14f/yt_dlp-2026.3.3-py3-none-any.whl", hash = "sha256:166c6e68c49ba526474bd400e0129f58aa522c2896204aa73be669c3d2f15e63", size = 3315599, upload-time = "2026-03-03T16:54:51.899Z" }, ] From 17fab6cdccf7d172c10cc83b0d631d56c22610d7 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sat, 28 Mar 2026 13:59:28 +0200 Subject: [PATCH 04/23] Fixed issues in SNAPs --- buzz/cuda_manager.py | 43 +++++++++++++++----- buzz/cuda_setup.py | 20 +++++++++ buzz/transcriber/recording_transcriber.py | 2 +- buzz/transcriber/whisper_file_transcriber.py | 4 +- 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index a0bf50b79..95382d7a5 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -79,13 +79,36 @@ def _in_virtualenv() -> bool: return sys.prefix != sys.base_prefix or "VIRTUAL_ENV" in os.environ +def _get_install_target() -> list[str]: + """Return pip target flags for the current environment. + + In Snap/Flatpak the Python interpreter's user-site is disabled or points to + the read-only bundle, so we use --target with an explicit writable path. + In a virtualenv --user is forbidden; packages go into the venv directly. + Otherwise we use --user so packages land in ~/.local. + """ + if is_snap(): + snap_user_data = os.environ.get("SNAP_USER_DATA") + if snap_user_data: + target = str(Path(snap_user_data) / "cuda_packages") + else: + target = str(Path.home() / ".local" / "share" / "buzz" / "cuda_packages") + Path(target).mkdir(parents=True, exist_ok=True) + return ["--target", target] + if is_flatpak(): + xdg_data = os.environ.get("XDG_DATA_HOME", str(Path.home() / ".local" / "share")) + target = str(Path(xdg_data) / "buzz" / "cuda_packages") + Path(target).mkdir(parents=True, exist_ok=True) + return ["--target", target] + if _in_virtualenv(): + return [] + return ["--user"] + + def install_cuda(progress_callback=None): """ Install CUDA-enabled torch and nvidia libraries. - Installs to user site-packages when possible. Inside a virtualenv the - --user flag is omitted (pip forbids it) and packages go into the venv. - Args: progress_callback: Optional callable(str) called with status messages. """ @@ -94,19 +117,19 @@ def report(msg): if progress_callback: progress_callback(msg) - user_flag = [] if _in_virtualenv() else ["--user"] + target_flags = _get_install_target() - report("Installing CUDA-enabled PyTorch...") + report("Installing NVIDIA CUDA libraries...") _pip_install( - CUDA_TORCH_PACKAGES, - extra_args=["--index-url", CUDA_INDEX_URL] + user_flag, + CUDA_NVIDIA_PACKAGES, + extra_args=["--extra-index-url", CUDA_NVIDIA_INDEX_URL] + target_flags, progress_callback=report, ) - report("Installing NVIDIA CUDA libraries...") + report("Installing CUDA-enabled PyTorch...") _pip_install( - CUDA_NVIDIA_PACKAGES, - extra_args=["--extra-index-url", CUDA_NVIDIA_INDEX_URL] + user_flag, + CUDA_TORCH_PACKAGES, + extra_args=["--index-url", CUDA_INDEX_URL] + target_flags, progress_callback=report, ) diff --git a/buzz/cuda_setup.py b/buzz/cuda_setup.py index 69c82f14e..28dd935de 100644 --- a/buzz/cuda_setup.py +++ b/buzz/cuda_setup.py @@ -21,6 +21,18 @@ logger = logging.getLogger(__name__) +def _get_cuda_target_dir() -> Path | None: + """Return the --target directory used during CUDA install for snap/flatpak, or None.""" + snap_user_data = os.environ.get("SNAP_USER_DATA") + if snap_user_data: + return Path(snap_user_data) / "cuda_packages" + flatpak_id = os.environ.get("FLATPAK_ID") + if flatpak_id: + xdg_data = os.environ.get("XDG_DATA_HOME", str(Path.home() / ".local" / "share")) + return Path(xdg_data) / "buzz" / "cuda_packages" + return None + + def _get_nvidia_package_lib_dirs() -> list[Path]: """Find all nvidia package library directories in site-packages.""" lib_dirs = [] @@ -28,6 +40,14 @@ def _get_nvidia_package_lib_dirs() -> list[Path]: # Find site-packages directories (including user site-packages for runtime-installed CUDA) site_packages_dirs = [] import site + + # For snap/flatpak, packages are installed to an explicit --target directory + cuda_target = _get_cuda_target_dir() + if cuda_target and cuda_target.exists(): + if str(cuda_target) not in sys.path: + sys.path.insert(0, str(cuda_target)) + site_packages_dirs.append(cuda_target) + user_site = site.getusersitepackages() if user_site: site_packages_dirs.append(Path(user_site)) diff --git a/buzz/transcriber/recording_transcriber.py b/buzz/transcriber/recording_transcriber.py index 3d0105baf..651ec59ac 100644 --- a/buzz/transcriber/recording_transcriber.py +++ b/buzz/transcriber/recording_transcriber.py @@ -208,7 +208,7 @@ def start(self): initial_prompt=initial_prompt, temperature=DEFAULT_WHISPER_TEMPERATURE, no_speech_threshold=0.4, - fp16=False, + fp16=use_cuda, ) elif ( self.transcription_options.model.model_type diff --git a/buzz/transcriber/whisper_file_transcriber.py b/buzz/transcriber/whisper_file_transcriber.py index 5198c448b..eb65c3e7a 100644 --- a/buzz/transcriber/whisper_file_transcriber.py +++ b/buzz/transcriber/whisper_file_transcriber.py @@ -360,7 +360,7 @@ def patched_torch_load(*args, **kwargs): temperature=DEFAULT_WHISPER_TEMPERATURE, initial_prompt=task.transcription_options.initial_prompt, no_speech_threshold=0.4, - fp16=False, + fp16=use_cuda, ) return [ Segment( @@ -380,7 +380,7 @@ def patched_torch_load(*args, **kwargs): temperature=task.transcription_options.temperature, initial_prompt=task.transcription_options.initial_prompt, verbose=False, - fp16=False, + fp16=use_cuda, ) segments = result.get("segments") return [ From 670f7bbfb89f2bee284878e622121754a30d5713 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sat, 28 Mar 2026 19:43:20 +0200 Subject: [PATCH 05/23] Fixes for windows --- Buzz.spec | 24 ++++++++++++ buzz/cuda_manager.py | 54 +++++++++++++++++++++++---- buzz/cuda_setup.py | 39 +++++++++++++++---- buzz/widgets/cuda_installer_widget.py | 4 +- 4 files changed, 103 insertions(+), 18 deletions(-) diff --git a/Buzz.spec b/Buzz.spec index 173d8c2bc..1f62e34d7 100644 --- a/Buzz.spec +++ b/Buzz.spec @@ -94,6 +94,30 @@ else: binaries.append(("buzz/whisper_cpp/*", "buzz/whisper_cpp")) +# Bundle a standalone Python 3.12 interpreter for runtime pip installs (e.g. CUDA). +# We copy python.exe, DLLs, and the stdlib from the uv-managed base interpreter. +if platform.system() == "Windows": + import sys as _sys + _base = _sys.base_prefix # e.g. .../uv/python/cpython-3.12.12-windows-x86_64-none + _py_dest = "python" + if os.path.isfile(os.path.join(_base, "python.exe")): + binaries.append((os.path.join(_base, "python.exe"), _py_dest)) + binaries.append((os.path.join(_base, "python3.dll"), _py_dest)) + binaries.append((os.path.join(_base, "python312.dll"), _py_dest)) + for _vcrt in ("vcruntime140.dll", "vcruntime140_1.dll"): + _vcrt_path = os.path.join(_base, _vcrt) + if os.path.isfile(_vcrt_path): + binaries.append((_vcrt_path, _py_dest)) + # Bundle DLLs directory (C extensions like _ssl, _socket, etc.) + _dlls_dir = os.path.join(_base, "DLLs") + if os.path.isdir(_dlls_dir): + for _f in os.listdir(_dlls_dir): + binaries.append((os.path.join(_dlls_dir, _f), os.path.join(_py_dest, "DLLs"))) + # Bundle standard library + datas.append((os.path.join(_base, "Lib"), os.path.join(_py_dest, "Lib"))) + else: + print(f"WARNING: Could not find bundleable Python at {_base}") + if platform.system() == "Windows": datas += [("dll_backup", "dll_backup")] datas += collect_data_files("msvc-runtime") diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index 95382d7a5..32423e087 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -7,6 +7,7 @@ import subprocess import sys from pathlib import Path +from typing import Any logger = logging.getLogger(__name__) @@ -47,8 +48,24 @@ def is_cuda_torch_installed() -> bool: """Returns True if torch with CUDA support is available.""" try: import torch - return torch.cuda.is_available() + cuda_available = torch.cuda.is_available() + logger.info( + "CUDA check: torch version=%s, cuda_built=%s, cuda_available=%s, cuda_version=%s", + torch.__version__, + torch.version.cuda, + cuda_available, + torch.version.cuda if cuda_available else "N/A", + ) + if not cuda_available and torch.version.cuda: + # CUDA was compiled in but is not available at runtime — likely a DLL loading issue + logger.warning( + "CUDA check: torch was built with CUDA %s but cuda is not available. " + "This usually means CUDA DLLs failed to load. torch.cuda.is_available() returned False.", + torch.version.cuda, + ) + return cuda_available except ImportError: + logger.info("CUDA check: torch is not installed") return False @@ -64,6 +81,7 @@ def is_nvidia_gpu_present() -> bool: ["nvidia-smi"], capture_output=True, timeout=5, + **_subprocess_hide_window_kwargs(), ) if result.returncode == 0: return True @@ -148,21 +166,30 @@ def _get_pip_cmd() -> list[str]: """ import shutil - # Frozen PyInstaller bundle — sys.executable can't run -m pip + # Frozen PyInstaller bundle — sys.executable can't run -m pip. + # Use the bundled Python 3.12 interpreter shipped alongside the app. if getattr(sys, "frozen", False): - for candidate in ("python3", "python"): + # PyInstaller extracts bundled data to sys._MEIPASS (_internal dir) + internal_dir = Path(getattr(sys, "_MEIPASS", Path(sys.executable).parent)) + python_name = "python.exe" if sys.platform == "win32" else "python3" + bundled_python = internal_dir / "python" / python_name + if bundled_python.is_file(): + return [str(bundled_python), "-m", "pip"] + # Fallback: look in PATH + for candidate in ("python3.12", "python3", "python"): python = shutil.which(candidate) if python: return [python, "-m", "pip"] raise RuntimeError( - "Could not find a Python interpreter in PATH to run pip. " - "Please install Python and try again." + "Could not find a Python interpreter. " + "Please install Python 3.12 and try again." ) pip_cmd = [sys.executable, "-m", "pip"] + hide_kwargs = _subprocess_hide_window_kwargs() # Check if pip is already available - probe = subprocess.run(pip_cmd + ["--version"], capture_output=True, timeout=15) + probe = subprocess.run(pip_cmd + ["--version"], capture_output=True, timeout=15, **hide_kwargs) if probe.returncode == 0: return pip_cmd @@ -170,7 +197,7 @@ def _get_pip_cmd() -> list[str]: logger.info("pip not found, bootstrapping via ensurepip...") bootstrap = subprocess.run( [sys.executable, "-m", "ensurepip", "--upgrade"], - capture_output=True, timeout=60, + capture_output=True, timeout=60, **hide_kwargs, ) if bootstrap.returncode != 0: raise RuntimeError( @@ -181,8 +208,18 @@ def _get_pip_cmd() -> list[str]: return pip_cmd +def _subprocess_hide_window_kwargs() -> dict[str, Any]: + """Return kwargs to hide the console window on Windows.""" + if sys.platform == "win32": + si = subprocess.STARTUPINFO() + si.dwFlags |= subprocess.STARTF_USESHOWWINDOW + si.wShowWindow = subprocess.SW_HIDE + return {"startupinfo": si, "creationflags": subprocess.CREATE_NO_WINDOW} + return {} + + def _pip_install(packages, extra_args=None, progress_callback=None): - cmd = _get_pip_cmd() + ["install"] + packages + cmd = _get_pip_cmd() + ["install", "--break-system-packages"] + packages if extra_args: cmd += extra_args @@ -191,6 +228,7 @@ def _pip_install(packages, extra_args=None, progress_callback=None): stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, + **_subprocess_hide_window_kwargs(), ) for line in process.stdout: line = line.rstrip() diff --git a/buzz/cuda_setup.py b/buzz/cuda_setup.py index 28dd935de..316249c51 100644 --- a/buzz/cuda_setup.py +++ b/buzz/cuda_setup.py @@ -33,11 +33,8 @@ def _get_cuda_target_dir() -> Path | None: return None -def _get_nvidia_package_lib_dirs() -> list[Path]: - """Find all nvidia package library directories in site-packages.""" - lib_dirs = [] - - # Find site-packages directories (including user site-packages for runtime-installed CUDA) +def _get_site_packages_dirs() -> list[Path]: + """Return all site-packages directories, including user site-packages.""" site_packages_dirs = [] import site @@ -47,14 +44,30 @@ def _get_nvidia_package_lib_dirs() -> list[Path]: if str(cuda_target) not in sys.path: sys.path.insert(0, str(cuda_target)) site_packages_dirs.append(cuda_target) + logger.info("CUDA target dir (snap/flatpak): %s", cuda_target) user_site = site.getusersitepackages() if user_site: - site_packages_dirs.append(Path(user_site)) + user_site_path = Path(user_site) + site_packages_dirs.append(user_site_path) + logger.info("User site-packages: %s (exists=%s)", user_site_path, user_site_path.exists()) + # Ensure user site-packages is on sys.path so torch can be imported + if str(user_site_path) not in sys.path and user_site_path.exists(): + sys.path.insert(0, str(user_site_path)) + logger.info("Added user site-packages to sys.path: %s", user_site_path) for path in sys.path: if "site-packages" in path: site_packages_dirs.append(Path(path)) + return site_packages_dirs + + +def _get_nvidia_package_lib_dirs() -> list[Path]: + """Find all nvidia package library directories in site-packages.""" + lib_dirs = [] + + site_packages_dirs = _get_site_packages_dirs() + # Also check relative to the current module for frozen apps if getattr(sys, "frozen", False): # For frozen apps, check the _internal directory @@ -71,7 +84,7 @@ def _get_nvidia_package_lib_dirs() -> list[Path]: if bin_subdir.exists(): lib_dirs.append(bin_subdir) - # Check each site-packages for nvidia packages + # Check each site-packages for nvidia packages AND torch/lib for sp_dir in site_packages_dirs: nvidia_dir = sp_dir / "nvidia" if nvidia_dir.exists(): @@ -84,6 +97,10 @@ def _get_nvidia_package_lib_dirs() -> list[Path]: bin_subdir = pkg_dir / "bin" if bin_subdir.exists(): lib_dirs.append(bin_subdir) + # torch/lib contains torch_cuda and other CUDA-related DLLs + torch_lib_dir = sp_dir / "torch" / "lib" + if torch_lib_dir.exists(): + lib_dirs.append(torch_lib_dir) return lib_dirs @@ -91,11 +108,14 @@ def _get_nvidia_package_lib_dirs() -> list[Path]: def _setup_windows_dll_directories(): """Add nvidia library directories to Windows DLL search path.""" lib_dirs = _get_nvidia_package_lib_dirs() + if not lib_dirs: + logger.warning("CUDA setup: no nvidia/torch library directories found") for lib_dir in lib_dirs: try: os.add_dll_directory(str(lib_dir)) + logger.info("CUDA setup: added DLL directory: %s", lib_dir) except (OSError, AttributeError) as e: - pass + logger.warning("CUDA setup: failed to add DLL directory %s: %s", lib_dir, e) def _preload_linux_libraries(): @@ -142,6 +162,7 @@ def setup_cuda_libraries(): or CUDA-dependent libraries are imported. """ system = platform.system() + logger.info("CUDA setup: platform=%s, frozen=%s", system, getattr(sys, "frozen", False)) if system == "Windows": _setup_windows_dll_directories() @@ -149,6 +170,8 @@ def setup_cuda_libraries(): _preload_linux_libraries() # macOS doesn't have CUDA support, so nothing to do + logger.info("CUDA setup: complete") + # Auto-run setup when this module is imported setup_cuda_libraries() diff --git a/buzz/widgets/cuda_installer_widget.py b/buzz/widgets/cuda_installer_widget.py index 04cff0f4f..3f2c39c9d 100644 --- a/buzz/widgets/cuda_installer_widget.py +++ b/buzz/widgets/cuda_installer_widget.py @@ -75,9 +75,9 @@ def __init__(self, parent: Optional[QWidget] = None): self.log_view = QTextEdit() self.log_view.setReadOnly(True) - self.log_view.setMaximumHeight(120) + self.log_view.setMinimumHeight(120) self.log_view.setVisible(False) - layout.addWidget(self.log_view) + layout.addWidget(self.log_view, 1) # stretch factor so it expands with window self.progress_bar = QProgressBar() self.progress_bar.setRange(0, 0) # indeterminate From 8178aed9cb964e23a6d0969f9149f0f6f4c6cf75 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sat, 28 Mar 2026 21:12:35 +0200 Subject: [PATCH 06/23] Adding translations --- buzz/locale/ca_ES/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/da_DK/LC_MESSAGES/buzz.po | 48 ++++++++++++++- buzz/locale/de_DE/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/en_US/LC_MESSAGES/buzz.po | 44 +++++++++++++- buzz/locale/es_ES/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/it_IT/LC_MESSAGES/buzz.po | 53 ++++++++++++++-- buzz/locale/ja_JP/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/lv_LV/LC_MESSAGES/buzz.po | 88 +++++++++++++++------------ buzz/locale/nl/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/pl_PL/LC_MESSAGES/buzz.po | 48 ++++++++++++++- buzz/locale/pt_BR/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/uk_UA/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/zh_CN/LC_MESSAGES/buzz.po | 51 ++++++++++++++-- buzz/locale/zh_TW/LC_MESSAGES/buzz.po | 48 ++++++++++++++- buzz/widgets/about_dialog.py | 11 ++++ buzz/widgets/cuda_installer_widget.py | 12 ++-- buzz/widgets/main_window.py | 6 ++ 17 files changed, 680 insertions(+), 86 deletions(-) diff --git a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po index 8a043fe2a..0b93a7c02 100644 --- a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2025-10-17 07:59+0200\n" "Last-Translator: Éric Duarte \n" "Language-Team: Catalan \n" @@ -659,6 +659,48 @@ msgstr "" "No s'ha pogut reiniciar la transcripció: no s'ha trobat el treballador del " "transcriptor." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Acceleració GPU Nvidia" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Utilitza només la CPU i desactiveu l'acceleració de la GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"L'acceleració GPU per a Nvidia permet a Buzz transcriure àudio significativament més ràpid mitjançant CUDA. Per a altres marques de GPU, aquesta acceleració no tindrà cap efecte.\n" +"\n" +"Això descarregarà i instal·larà PyTorch amb suport CUDA (~2 GB). Buzz s'ha de reiniciar després de la instal·lació." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Instal·lar suport GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Ara no" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Instal·lació completada! Reinicieu Buzz per activar l'acceleració GPU." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Tanca" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "La instal·lació ha fallat: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Enregistrament en directe" @@ -811,6 +853,10 @@ msgstr "Comprova si hi ha actualitzacions" msgid "Show logs" msgstr "Mostra els registres" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Instal·lar acceleració CUDA" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Estàs al dia!" @@ -1681,9 +1727,6 @@ msgstr "" #~ "Per habilitar els permisos necessaris, executeu les ordres següents al " #~ "terminal" -#~ msgid "Close" -#~ msgstr "Tanca" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Introduïu les instruccions per a la IA sobre com traduir..." diff --git a/buzz/locale/da_DK/LC_MESSAGES/buzz.po b/buzz/locale/da_DK/LC_MESSAGES/buzz.po index dcd20f405..e49def3df 100644 --- a/buzz/locale/da_DK/LC_MESSAGES/buzz.po +++ b/buzz/locale/da_DK/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: \n" "Last-Translator: Ole Guldberg2 \n" "Language-Team: \n" @@ -653,6 +653,48 @@ msgid "Could not restart transcription: transcriber worker not found." msgstr "" "Kunne ikke genstarte transkription: transkriptionsprocessen blev ikke fundet." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU-acceleration" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Brug kun CPU og deaktiver GPU-acceleration" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Installation af GPU-acceleration til Nvidia GPU'er giver Buzz mulighed for at transskribere lyd betydeligt hurtigere ved hjælp af CUDA. For andre GPU-mærker vil denne acceleration ikke have nogen effekt.\n" +"\n" +"Dette vil downloade og installere PyTorch med CUDA-understøttelse (~2 GB). Buzz skal genstartes efter installation." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Installer GPU-understøttelse" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Ikke nu" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Installation fuldført! Genstart Buzz for at aktivere GPU-acceleration." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Installation mislykkedes: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Live optagelse" @@ -805,6 +847,10 @@ msgstr "Tjek for opdateringer" msgid "Show logs" msgstr "Vis logfiler" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Installer CUDA-acceleration" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Du er opdateret!" diff --git a/buzz/locale/de_DE/LC_MESSAGES/buzz.po b/buzz/locale/de_DE/LC_MESSAGES/buzz.po index 69ee547b8..329f30ebf 100644 --- a/buzz/locale/de_DE/LC_MESSAGES/buzz.po +++ b/buzz/locale/de_DE/LC_MESSAGES/buzz.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2025-03-05 14:41+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -662,6 +662,48 @@ msgstr "" "Transkription konnte nicht neu gestartet werden: Transkriptions-Worker nicht " "gefunden." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU-Beschleunigung" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Nur CPU verwenden und GPU-Beschleunigung deaktivieren" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Die Installation der GPU-Beschleunigung für Nvidia GPUs ermöglicht es Buzz, Audio mithilfe von CUDA deutlich schneller zu transkribieren. Für andere GPU-Marken hat diese Beschleunigung keine Auswirkung.\n" +"\n" +"Dies lädt PyTorch mit CUDA-Unterstützung herunter und installiert es (~2 GB). Buzz muss nach der Installation neu gestartet werden." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "GPU-Unterstützung installieren" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Nicht jetzt" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Installation abgeschlossen! Starte Buzz neu, um die GPU-Beschleunigung zu aktivieren." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Schließen" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Installation fehlgeschlagen: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Live-Aufnahme" @@ -814,6 +856,10 @@ msgstr "Nach Updates suchen" msgid "Show logs" msgstr "Protokolle anzeigen" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "CUDA-Beschleunigung installieren" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Sie sind auf dem Laufenden!" @@ -1688,8 +1734,5 @@ msgstr "" #~ "Um die erforderlichen Berechtigungen zu aktivieren, führen Sie die " #~ "folgenden Befehle im Terminal aus" -#~ msgid "Close" -#~ msgstr "Schließen" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Geben Sie Anweisungen für die KI zum Übersetzen ein..." diff --git a/buzz/locale/en_US/LC_MESSAGES/buzz.po b/buzz/locale/en_US/LC_MESSAGES/buzz.po index 5740108ae..32221954d 100644 --- a/buzz/locale/en_US/LC_MESSAGES/buzz.po +++ b/buzz/locale/en_US/LC_MESSAGES/buzz.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -632,6 +632,44 @@ msgstr "" msgid "Could not restart transcription: transcriber worker not found." msgstr "" +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install Nvidia GPU Acceleration?" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "" @@ -782,6 +820,10 @@ msgstr "" msgid "Show logs" msgstr "" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "" diff --git a/buzz/locale/es_ES/LC_MESSAGES/buzz.po b/buzz/locale/es_ES/LC_MESSAGES/buzz.po index a697286fc..60e53684f 100644 --- a/buzz/locale/es_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/es_ES/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2025-09-08 12:43+0200\n" "Last-Translator: Éric Duarte \n" "Language-Team: \n" @@ -687,6 +687,48 @@ msgstr "" "No se pudo reiniciar la transcripción: no se encontró el trabajador del " "transcriptor." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Aceleración GPU de Nvidia" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Usa solo CPU y desactiva la aceleración de GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Instalar la aceleración GPU para GPUs Nvidia permite a Buzz transcribir audio significativamente más rápido usando CUDA. Para otras marcas de GPU esta aceleración no tendrá efecto.\n" +"\n" +"Esto descargará e instalará PyTorch con soporte CUDA (~2 GB). Buzz debe reiniciarse después de la instalación." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Instalar soporte GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Ahora no" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "¡Instalación completa! Reinicia Buzz para activar la aceleración GPU." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Cerrar" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "La instalación falló: {}" + # automatic translation #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" @@ -845,6 +887,10 @@ msgstr "Buscar actualizaciones" msgid "Show logs" msgstr "Mostrar registros" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Instalar aceleración CUDA" + # automatic translation #: buzz/widgets/about_dialog.py msgid "You're up to date!" @@ -1740,9 +1786,6 @@ msgstr "" #~ "Para habilitar los permisos necesarios ejecute los siguientes comandos en " #~ "el terminal" -#~ msgid "Close" -#~ msgstr "Cerrar" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Introduzca instrucciones para la IA sobre cómo traducir..." diff --git a/buzz/locale/it_IT/LC_MESSAGES/buzz.po b/buzz/locale/it_IT/LC_MESSAGES/buzz.po index d59ef179c..c499a75cc 100644 --- a/buzz/locale/it_IT/LC_MESSAGES/buzz.po +++ b/buzz/locale/it_IT/LC_MESSAGES/buzz.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" -"PO-Revision-Date: 2026-04-12 21:42+0200\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" +"PO-Revision-Date: 2026-01-25 21:42+0200\n" "Language-Team: (Italiano) Albano Battistella \n" "Language: it_IT\n" "MIME-Version: 1.0\n" @@ -658,6 +658,48 @@ msgstr "" msgid "Could not restart transcription: transcriber worker not found." msgstr "Impossibile riavviare la trascrizione: trascrittore non trovato." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Accelerazione GPU Nvidia" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Utilizza solo la CPU e disattiva l'accelerazione GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"L'installazione dell'accelerazione GPU per GPU Nvidia consente a Buzz di trascrivere l'audio in modo significativamente più veloce tramite CUDA. Per altre marche di GPU questa accelerazione non avrà alcun effetto.\n" +"\n" +"Verranno scaricati e installati PyTorch con supporto CUDA (~2 GB). Buzz deve essere riavviato dopo l'installazione." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Installa supporto GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Non ora" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Installazione completata! Riavvia Buzz per abilitare l'accelerazione GPU." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Chiudi" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Installazione fallita: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Registrazione in diretta" @@ -810,6 +852,10 @@ msgstr "Controlla gli aggiornamenti" msgid "Show logs" msgstr "Mostra log" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Installa accelerazione CUDA" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Il programma è aggiornato!" @@ -1683,9 +1729,6 @@ msgstr "" #~ "Per abilitare le autorizzazioni necessarie, eseguire i seguenti comandi " #~ "nel terminale" -#~ msgid "Close" -#~ msgstr "Chiudi" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Inserisci le istruzioni per l'IA su come tradurre..." diff --git a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po index 9435ef852..f56d15ced 100644 --- a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po +++ b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: \n" "Last-Translator: nunawa <71294849+nunawa@users.noreply.github.com>\n" "Language-Team: \n" @@ -649,6 +649,48 @@ msgstr "" msgid "Could not restart transcription: transcriber worker not found." msgstr "文字起こしを再開できませんでした: 文字起こしワーカーが見つかりません。" +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU アクセラレーション" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "CPUのみを使用してGPUアクセラレーションを無効にする" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Nvidia GPU 向けの GPU アクセラレーションをインストールすると、CUDA を使用して Buzz が音声をはるかに高速に文字起こしできるようになります。他の GPU ブランドではこのアクセラレーションは効果がありません。\n" +"\n" +"CUDA サポート付きの PyTorch がダウンロード・インストールされます(約 2 GB)。インストール後、Buzz を再起動する必要があります。" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "GPU サポートをインストール" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "後で" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "インストール完了!GPU アクセラレーションを有効にするには Buzz を再起動してください。" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "閉じる" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "インストールに失敗しました: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "ライブ録音" @@ -801,6 +843,10 @@ msgstr "アップデートを確認する" msgid "Show logs" msgstr "ログを表示" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "CUDA アクセラレーションをインストール" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "最新の状態です!" @@ -1660,9 +1706,6 @@ msgstr "" #~ "必要なパーミッションを有効にするには、ターミナルで以下のコマンドを実行して" #~ "ください" -#~ msgid "Close" -#~ msgstr "閉じる" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "AIのための翻訳方法の指示を入力..." diff --git a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po index f35288d65..4a7b8862d 100644 --- a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po +++ b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2026-03-06 13:23+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -656,6 +656,48 @@ msgstr "" msgid "Could not restart transcription: transcriber worker not found." msgstr "Neizdevās sākt atpazīšanu: Kļūda lietotnē, pārstartējiet." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU paātrinājums" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install Nvidia GPU Acceleration?" +msgstr "Instalēt Nvidia GPU paātrināšanu" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"GPU paātrinājuma instalēšana Nvidia GPU kartēm ļauj Buzz ievērojami ātrāk atpazīt audio, izmantojot CUDA. " +"Citu GPU ražotāju kartēm šim paātrinājumam nebūs nekādas ietekmes.\n" +"\n" +"Tiks lejupielādēts un instalēts PyTorch ar CUDA atbalstu (~2 GB). Pēc instalēšanas Buzz ir jārestartē." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Instalēt GPU atbalstu" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Ne tagad" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Instalēšana pabeigta! Restartējiet Buzz, lai aktivizētu GPU paātrinājumu." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Aizvērt" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Instalēšana neizdevās: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Dzīvā ierakstīšana" @@ -808,6 +850,10 @@ msgstr "Pārbaudīt atjauninājumus" msgid "Show logs" msgstr "Parādīt sistēmas žurnālu" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Instalēt CUDA paātrinājumu" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Jums ir jaunākā versija!" @@ -1640,42 +1686,4 @@ msgid "" "to be downloaded." msgstr "" "Runas atdalīšana neizdevās! Pārbaudiet interneta savienojumu, iespējams " -"jālejupielādē modelis." - -#~ msgid "Live recording mode:" -#~ msgstr "Dzīvā ieraksta režīms:" - -#~ msgid "Comma-separated, e.g. \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\"" -#~ msgstr "Atdalīti ar komatu, piemēram, \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\"" - -#~ msgid "Temperature:" -#~ msgstr "Temperatūra:" - -#~ msgid "Please translate each text sent to you from English to Spanish." -#~ msgstr "Lūdzu, iztulko katru tev atsūtīto tekstu no angļu valodas latviski." - -#~ msgid "Translation error, see logs!" -#~ msgstr "Kļūda tulkojot, skatiet sistēmas žurnālu!" - -#~ msgid "Snap permission notice" -#~ msgstr "Snap atļauju piezīme" - -#~ msgid "" -#~ "Detected missing permissions, please check that snap permissions have " -#~ "been granted" -#~ msgstr "" -#~ "Ne visi nepieciešamie moduļi darbojas korekti, iespējams nav piešķirtas " -#~ "snap atļaujas" - -#~ msgid "" -#~ "To enable necessary permissions run the following commands in the terminal" -#~ msgstr "Lai piešķirtu nepieciešamās atļaujas izpildiet šīs komandas" - -#~ msgid "Close" -#~ msgstr "Aizvērt" - -#~ msgid "Enter instructions for AI on how to translate..." -#~ msgstr "Ievadiet tulkošanas norādes mākslīgajam intelektam..." - -#~ msgid "Enter target characters per subtitle:" -#~ msgstr "Ievadiet vēlamo simbolu skaitu tekstā:" +"jālejupielādē modelis." \ No newline at end of file diff --git a/buzz/locale/nl/LC_MESSAGES/buzz.po b/buzz/locale/nl/LC_MESSAGES/buzz.po index 62b26b5ef..2960d01c4 100644 --- a/buzz/locale/nl/LC_MESSAGES/buzz.po +++ b/buzz/locale/nl/LC_MESSAGES/buzz.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2025-03-20 18:30+0100\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: none\n" @@ -663,6 +663,48 @@ msgstr "" "Transcriptie kon niet opnieuw worden gestart: transcriptieproces niet " "gevonden." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU-versnelling" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Alleen CPU gebruiken en GPU-versnelling uitschakelen" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Het installeren van GPU-versnelling voor Nvidia GPU's stelt Buzz in staat om audio aanzienlijk sneller te transcriberen met CUDA. Voor andere GPU-merken heeft deze versnelling geen effect.\n" +"\n" +"Dit downloadt en installeert PyTorch met CUDA-ondersteuning (~2 GB). Buzz moet na de installatie opnieuw worden gestart." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "GPU-ondersteuning installeren" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Niet nu" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Installatie voltooid! Herstart Buzz om GPU-versnelling in te schakelen." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Sluiten" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Installatie mislukt: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Live-opname" @@ -813,6 +855,10 @@ msgstr "Controleren op updates" msgid "Show logs" msgstr "Logboeken tonen" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "CUDA-versnelling installeren" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "De software is actueel!" @@ -1683,8 +1729,5 @@ msgstr "" #~ msgstr "" #~ "De rechten kunnen met behulp van deze terminalopdrachten worden verleend" -#~ msgid "Close" -#~ msgstr "Sluiten" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Voer vertaalinstructies in…" diff --git a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po index e297b7b9d..9bc07d5bf 100644 --- a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po +++ b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2024-03-17 20:50+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -658,6 +658,48 @@ msgstr "" "Nie można uruchomić ponownie transkrypcji: nie znaleziono procesu " "transkrypcji." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Akceleracja GPU Nvidia" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Używaj tylko CPU i wyłącz akcelerację GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Instalacja akceleracji GPU dla kart Nvidia pozwala Buzz znacznie szybciej transkrybować dźwięk przy użyciu CUDA. Dla innych marek GPU ta akceleracja nie będzie miała żadnego efektu.\n" +"\n" +"Spowoduje to pobranie i zainstalowanie PyTorch z obsługą CUDA (~2 GB). Po instalacji Buzz musi zostać ponownie uruchomiony." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Zainstaluj obsługę GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Nie teraz" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Instalacja zakończona! Uruchom ponownie Buzz, aby włączyć akcelerację GPU." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Instalacja nie powiodła się: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Nagrywanie na żywo" @@ -810,6 +852,10 @@ msgstr "Sprawdź aktualizacje" msgid "Show logs" msgstr "Pokaż logi" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Zainstaluj akcelerację CUDA" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Posiadasz najnowszą wersję!" diff --git a/buzz/locale/pt_BR/LC_MESSAGES/buzz.po b/buzz/locale/pt_BR/LC_MESSAGES/buzz.po index ce6d1d63b..b051c2087 100644 --- a/buzz/locale/pt_BR/LC_MESSAGES/buzz.po +++ b/buzz/locale/pt_BR/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2025-11-01 17:43-0300\n" "Last-Translator: Paulo Schopf \n" "Language-Team: none\n" @@ -656,6 +656,48 @@ msgstr "" "Não foi possível reiniciar a transcrição: trabalhador de transcrição não " "encontrado." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Aceleração GPU Nvidia" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Usar somente a CPU e desabilitar aceleração por GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Instalar a aceleração GPU para GPUs Nvidia permite ao Buzz transcrever áudio significativamente mais rápido usando CUDA. Para outras marcas de GPU, essa aceleração não terá efeito.\n" +"\n" +"Isso irá baixar e instalar o PyTorch com suporte a CUDA (~2 GB). O Buzz deve ser reiniciado após a instalação." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Instalar suporte a GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Agora não" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Instalação concluída! Reinicie o Buzz para ativar a aceleração GPU." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Fechar" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Falha na instalação: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Gravação ao Vivo" @@ -808,6 +850,10 @@ msgstr "Verificar atualizações" msgid "Show logs" msgstr "Mostrar logs" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Instalar aceleração CUDA" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "Você está atualizado!" @@ -1676,9 +1722,6 @@ msgstr "" #~ "Para habilitar as permissões necessárias, execute os seguintes comandos " #~ "no terminal" -#~ msgid "Close" -#~ msgstr "Fechar" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Instrua a IA sobre como traduzir..." diff --git a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po index b4551924d..36664d945 100644 --- a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po +++ b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: \n" "Last-Translator: Yevhen Popok \n" "Language-Team: \n" @@ -652,6 +652,48 @@ msgid "Could not restart transcription: transcriber worker not found." msgstr "" "Не вдалося перезапустити транскрипцію: обробник транскрипції не знайдено." +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Апаратне прискорення Nvidia GPU" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "Використовувати лише CPU та вимкнути прискорення GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"Встановлення апаратного прискорення GPU для відеокарт Nvidia дозволяє Buzz значно швидше транскрибувати аудіо за допомогою CUDA. Для відеокарт інших виробників це прискорення не матиме жодного ефекту.\n" +"\n" +"Це завантажить і встановить PyTorch з підтримкою CUDA (~2 ГБ). Після встановлення необхідно перезапустити Buzz." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "Встановити підтримку GPU" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "Не зараз" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "Встановлення завершено! Перезапустіть Buzz, щоб увімкнути апаратне прискорення GPU." + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "Закрити" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "Помилка встановлення: {}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "Живий запис" @@ -804,6 +846,10 @@ msgstr "Перевірити оновлення" msgid "Show logs" msgstr "Показати журнали" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "Встановити прискорення CUDA" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "У вас актуальна версія!" @@ -1671,8 +1717,5 @@ msgstr "" #~ msgstr "" #~ "Для активації необхідних дозволів, запустіть наступну команду в терміналі" -#~ msgid "Close" -#~ msgstr "Закрити" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Введіть інструкції для перекладу ШІ..." diff --git a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po index e1283701e..3ba7dbe3d 100644 --- a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2023-05-01 15:45+0800\n" "Last-Translator: \n" "Language-Team: lamb \n" @@ -644,6 +644,48 @@ msgstr "无法重新开始识别:模型不可用且无法下载。" msgid "Could not restart transcription: transcriber worker not found." msgstr "无法重新开始识别:未找到识别工作进程。" +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU 加速" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "仅使用 CPU 并禁用 GPU 加速" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"为 Nvidia GPU 安装 GPU 加速后,Buzz 可以使用 CUDA 显著加快音频转录速度。对于其他品牌的 GPU,此加速将不起作用。\n" +"\n" +"这将下载并安装支持 CUDA 的 PyTorch(约 2 GB)。安装完成后必须重启 Buzz。" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "安装 GPU 支持" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "暂不安装" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "安装完成!请重启 Buzz 以启用 GPU 加速。" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "关闭" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "安装失败:{}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "实时录制" @@ -794,6 +836,10 @@ msgstr "检查更新" msgid "Show logs" msgstr "显示日志" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "安装 CUDA 加速" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "已经是最新版本" @@ -1642,9 +1688,6 @@ msgstr "语音提取失败!请检查您的网络连接——可能需要下载 #~ "To enable necessary permissions run the following commands in the terminal" #~ msgstr "要启用必要的权限,请在终端中运行以下命令" -#~ msgid "Close" -#~ msgstr "关闭" - #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "输入AI如何翻译的说明..." diff --git a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po index 6c8e07a03..6557d44ed 100644 --- a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 09:00+0300\n" +"POT-Creation-Date: 2026-03-28 21:04+0200\n" "PO-Revision-Date: 2023-05-01 15:45+0800\n" "Last-Translator: \n" "Language-Team: Lamb\n" @@ -645,6 +645,48 @@ msgstr "無法重新開始轉錄:模型不可用且無法下載。" msgid "Could not restart transcription: transcriber worker not found." msgstr "無法重新開始轉錄:找不到轉錄工作器。" +#: buzz/widgets/cuda_installer_widget.py +msgid "Nvidia GPU Acceleration" +msgstr "Nvidia GPU 加速" + +#: buzz/widgets/cuda_installer_widget.py +#, fuzzy +msgid "Install Nvidia GPU Acceleration?" +msgstr "僅使用 CPU 並停用 GPU 加速" + +#: buzz/widgets/cuda_installer_widget.py +msgid "" +"Installing GPU acceleration for Nvidia GPUS allows Buzz to transcribe audio " +"significantly faster using CUDA. For other GPU brands this acceleration will " +"have no effect\n" +"\n" +"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"be restarted after installation." +msgstr "" +"為 Nvidia GPU 安裝 GPU 加速後,Buzz 可以使用 CUDA 大幅提升音訊轉錄速度。對於其他品牌的 GPU,此加速將不起作用。\n" +"\n" +"這將下載並安裝支援 CUDA 的 PyTorch(約 2 GB)。安裝完成後必須重新啟動 Buzz。" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Install GPU Support" +msgstr "安裝 GPU 支援" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Not Now" +msgstr "暫不安裝" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation complete! Restart Buzz to enable GPU acceleration." +msgstr "安裝完成!請重新啟動 Buzz 以啟用 GPU 加速。" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Close" +msgstr "" + +#: buzz/widgets/cuda_installer_widget.py +msgid "Installation failed: {}" +msgstr "安裝失敗:{}" + #: buzz/widgets/recording_transcriber_widget.py msgid "Live Recording" msgstr "現場錄製" @@ -795,6 +837,10 @@ msgstr "檢查更新" msgid "Show logs" msgstr "顯示日誌" +#: buzz/widgets/about_dialog.py +msgid "Install CUDA Acceleration" +msgstr "安裝 CUDA 加速" + #: buzz/widgets/about_dialog.py msgid "You're up to date!" msgstr "你是最新的!" diff --git a/buzz/widgets/about_dialog.py b/buzz/widgets/about_dialog.py index 5c6b67573..8efaf6294 100644 --- a/buzz/widgets/about_dialog.py +++ b/buzz/widgets/about_dialog.py @@ -20,6 +20,7 @@ from buzz.widgets.icon import BUZZ_ICON_PATH, BUZZ_LARGE_ICON_PATH from buzz.locale import _ from buzz.settings.settings import APP_NAME +from buzz.widgets.cuda_installer_widget import CudaInstallerDialog class AboutDialog(QDialog): @@ -84,6 +85,9 @@ def __init__( self.show_logs_button = QPushButton(_("Show logs"), self) self.show_logs_button.clicked.connect(self.on_click_show_logs) + self.cuda_installer_button = QPushButton(_("Install CUDA Acceleration"), self) + self.cuda_installer_button.clicked.connect(self.on_click_cuda_installer) + button_box = QDialogButtonBox( QDialogButtonBox.StandardButton(QDialogButtonBox.StandardButton.Close), self ) @@ -95,6 +99,7 @@ def __init__( layout.addWidget(version_label) layout.addWidget(self.check_updates_button) layout.addWidget(self.show_logs_button) + layout.addWidget(self.cuda_installer_button) layout.addWidget(button_box) self.setLayout(layout) @@ -109,6 +114,12 @@ def on_click_show_logs(self): log_dir = user_log_dir(appname="Buzz") QDesktopServices.openUrl(QUrl.fromLocalFile(log_dir)) + def on_click_cuda_installer(self): + dialog = CudaInstallerDialog(self) + dialog.show() + dialog.raise_() + dialog.activateWindow() + def on_latest_release_reply(self, reply: QNetworkReply): if reply.error() == QNetworkReply.NetworkError.NoError: response = json.loads(reply.readAll().data()) diff --git a/buzz/widgets/cuda_installer_widget.py b/buzz/widgets/cuda_installer_widget.py index 3f2c39c9d..a4ecb6463 100644 --- a/buzz/widgets/cuda_installer_widget.py +++ b/buzz/widgets/cuda_installer_widget.py @@ -50,22 +50,24 @@ class CudaInstallerDialog(QDialog): def __init__(self, parent: Optional[QWidget] = None): super().__init__(parent) - self.setWindowTitle(_("GPU Acceleration")) + self.setWindowTitle(_("Nvidia GPU Acceleration")) self.setWindowIcon(QIcon(BUZZ_ICON_PATH)) - self.setMinimumWidth(500) + self.setMinimumWidth(600) + self.setMinimumHeight(400) self.setWindowFlags(self.windowFlags() | Qt.WindowType.WindowStaysOnTopHint) layout = QVBoxLayout(self) layout.setSpacing(12) - header = QLabel(_("Install GPU Acceleration?")) + header = QLabel(_("Install Nvidia GPU Acceleration?")) header.setStyleSheet("font-size: 15px; font-weight: bold;") layout.addWidget(header) desc = QLabel( _( - "An NVIDIA GPU was detected. Installing GPU acceleration allows Buzz " - "to transcribe audio significantly faster using CUDA.\n\n" + "Installing GPU acceleration for Nvidia GPUS allows Buzz " + "to transcribe audio significantly faster using CUDA. " + "For other GPU brands this acceleration will have no effect\n\n" "This will download and install PyTorch with CUDA support (~2 GB). " "Buzz must be restarted after installation." ) diff --git a/buzz/widgets/main_window.py b/buzz/widgets/main_window.py index befda2147..a1a2d27aa 100644 --- a/buzz/widgets/main_window.py +++ b/buzz/widgets/main_window.py @@ -522,6 +522,12 @@ def _on_update_available(self, update_info: UpdateInfo): def _maybe_show_cuda_prompt(self): """On first launch (Windows/Snap/Flatpak), offer CUDA installation if an NVIDIA GPU is present.""" from buzz import cuda_manager + is_nvidia_gpu_present = cuda_manager.is_nvidia_gpu_present() + + logging.debug(f"Nvidia GPU detected: {is_nvidia_gpu_present}") + + if not is_nvidia_gpu_present: + return if not cuda_manager.should_offer_cuda_prompt(): return if self.settings.value(Settings.Key.CUDA_PROMPT_SHOWN, False): From 1bd3bd139006416e4f604eb6668fcb7dda1bddc4 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 09:10:30 +0300 Subject: [PATCH 07/23] Adding translations --- buzz/widgets/about_dialog.py | 1 + 1 file changed, 1 insertion(+) diff --git a/buzz/widgets/about_dialog.py b/buzz/widgets/about_dialog.py index 8efaf6294..61165e8ee 100644 --- a/buzz/widgets/about_dialog.py +++ b/buzz/widgets/about_dialog.py @@ -91,6 +91,7 @@ def __init__( button_box = QDialogButtonBox( QDialogButtonBox.StandardButton(QDialogButtonBox.StandardButton.Close), self ) + button_box.button(QDialogButtonBox.StandardButton.Close).setText(_("Close")) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) From a44cf018fd21f333e9f9db4c71831fb6e64edc36 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 09:23:39 +0300 Subject: [PATCH 08/23] Version bump --- share/metainfo/io.github.chidiwilliams.Buzz.metainfo.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/share/metainfo/io.github.chidiwilliams.Buzz.metainfo.xml b/share/metainfo/io.github.chidiwilliams.Buzz.metainfo.xml index e7f155121..8afff8306 100644 --- a/share/metainfo/io.github.chidiwilliams.Buzz.metainfo.xml +++ b/share/metainfo/io.github.chidiwilliams.Buzz.metainfo.xml @@ -65,12 +65,13 @@ - + https://github.com/chidiwilliams/buzz/releases/tag/v1.4.5 -

Bug fixes and minor improvements.

+

Unbundled CUDA to make app installations smaller. CUDA Acceleration for Nvidia GPUs can be installed optionally from Help - About Buzz

  • Appimage support for Linux
  • +
  • Minor fixes to model loading and initial prompt processing
@@ -148,4 +149,4 @@
- + \ No newline at end of file From 5c2b08e8f24c56a1726ce4dc18e83249c332999d Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 12:47:54 +0300 Subject: [PATCH 09/23] Snap fix --- buzz/cuda_manager.py | 23 +++++++-- buzz/cuda_setup.py | 118 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 115 insertions(+), 26 deletions(-) diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index 32423e087..8c35d3669 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -11,18 +11,33 @@ logger = logging.getLogger(__name__) -# Pinned CUDA torch versions for in-app installation +# Pinned versions matching uv.lock for the cu129 build of PyTorch. +# All packages are served from the PyTorch wheel index; pip selects the +# correct platform wheel automatically (Linux-only packages have no +# Windows wheel and are silently skipped by pip on Windows). CUDA_INDEX_URL = "https://download.pytorch.org/whl/cu129" CUDA_TORCH_PACKAGES = [ "torch==2.8.0+cu129", "torchaudio==2.8.0+cu129", ] +# Full set of NVIDIA runtime libraries required by torch+cu129. +# Versions are pinned to those resolved in uv.lock to prevent accidental upgrades. CUDA_NVIDIA_PACKAGES = [ "nvidia-cublas-cu12==12.9.1.4", "nvidia-cuda-cupti-cu12==12.9.79", + "nvidia-cuda-nvrtc-cu12==12.9.86", "nvidia-cuda-runtime-cu12==12.9.79", + "nvidia-cudnn-cu12==9.10.2.21", + "nvidia-cufft-cu12==11.4.1.4", + "nvidia-cufile-cu12==1.14.1.1", + "nvidia-curand-cu12==10.3.10.19", + "nvidia-cusolver-cu12==11.7.5.82", + "nvidia-cusparse-cu12==12.5.10.65", + "nvidia-cusparselt-cu12==0.7.1", + "nvidia-nccl-cu12==2.27.3", + "nvidia-nvjitlink-cu12==12.9.86", + "nvidia-nvtx-cu12==12.9.79", ] -CUDA_NVIDIA_INDEX_URL = "https://pypi.ngc.nvidia.com" def is_snap() -> bool: @@ -140,14 +155,14 @@ def report(msg): report("Installing NVIDIA CUDA libraries...") _pip_install( CUDA_NVIDIA_PACKAGES, - extra_args=["--extra-index-url", CUDA_NVIDIA_INDEX_URL] + target_flags, + extra_args=["--index-url", CUDA_INDEX_URL] + target_flags, progress_callback=report, ) report("Installing CUDA-enabled PyTorch...") _pip_install( CUDA_TORCH_PACKAGES, - extra_args=["--index-url", CUDA_INDEX_URL] + target_flags, + extra_args=["--index-url", CUDA_INDEX_URL, "--no-deps"] + target_flags, progress_callback=report, ) diff --git a/buzz/cuda_setup.py b/buzz/cuda_setup.py index 316249c51..0b7bf8e56 100644 --- a/buzz/cuda_setup.py +++ b/buzz/cuda_setup.py @@ -6,7 +6,8 @@ pip packages. On Windows: Uses os.add_dll_directory() to add library paths -On Linux: Uses ctypes to preload libraries (LD_LIBRARY_PATH is read at process start) +On Linux: Re-execs the process with LD_LIBRARY_PATH set when cuda_packages are present, + then preloads libraries with RTLD_GLOBAL for any remaining gaps. On macOS: No action needed (CUDA not supported) """ @@ -118,41 +119,114 @@ def _setup_windows_dll_directories(): logger.warning("CUDA setup: failed to add DLL directory %s: %s", lib_dir, e) -def _preload_linux_libraries(): - """Preload CUDA libraries on Linux using ctypes. +def _collect_cuda_lib_dirs(cuda_target: Path) -> list[str]: + """Return all library directories under cuda_packages as strings.""" + lib_dirs: list[str] = [] - On Linux, LD_LIBRARY_PATH is only read at process start, so we need to - manually load the libraries using ctypes before torch tries to load them. - """ - lib_dirs = _get_nvidia_package_lib_dirs() + torch_lib = cuda_target / "torch" / "lib" + if torch_lib.exists(): + lib_dirs.append(str(torch_lib)) - # Libraries to skip - NVBLAS requires special configuration and causes issues - skip_patterns = ["libnvblas"] + nvidia_dir = cuda_target / "nvidia" + if nvidia_dir.exists(): + for pkg_dir in sorted(nvidia_dir.iterdir()): + if pkg_dir.is_dir(): + lib_subdir = pkg_dir / "lib" + if lib_subdir.exists(): + lib_dirs.append(str(lib_subdir)) + + return lib_dirs - loaded_libs = set() +def _setup_linux_cuda(): + """Set up CUDA libraries on Linux for snap/flatpak CUDA installs. + + LD_LIBRARY_PATH is read by the dynamic linker only at process start, so + preloading individual .so files with ctypes is fragile: if *any* library + in the dependency chain (e.g. libcusparseLt.so.0 → libcuda.so.1) is not + yet in the search path, the load silently fails, and later imports of torch + or torchaudio crash with "cannot open shared object file". + + The reliable fix is to re-exec the current process with LD_LIBRARY_PATH + extended to include all cuda_packages lib dirs. After re-exec the dynamic + linker finds every CUDA library via the standard search path for the + entire lifetime of the process. + + A sentinel value in LD_LIBRARY_PATH prevents infinite re-exec loops. + """ + # Ensure cuda_packages is on sys.path so Python can import torch + _get_site_packages_dirs() + + cuda_target = _get_cuda_target_dir() + if cuda_target is None or not cuda_target.exists(): + logger.debug("CUDA setup: no cuda_packages dir found, skipping") + return + + torch_lib = cuda_target / "torch" / "lib" + if not torch_lib.exists(): + logger.debug("CUDA setup: no torch/lib in cuda_packages, skipping") + return + + sentinel = str(torch_lib) + current_ld = os.environ.get("LD_LIBRARY_PATH", "") + + if sentinel in current_ld.split(":"): + # Already re-exec'd (or user manually set the path) — nothing to do + logger.info("CUDA setup: LD_LIBRARY_PATH already contains cuda torch/lib, proceeding") + return + + # Build new LD_LIBRARY_PATH: cuda_packages lib dirs prepended to existing path + extra_dirs = _collect_cuda_lib_dirs(cuda_target) + new_ld = ":".join(extra_dirs) + if current_ld: + new_ld = new_ld + ":" + current_ld + os.environ["LD_LIBRARY_PATH"] = new_ld + + # Re-exec the process so the dynamic linker picks up the new LD_LIBRARY_PATH. + # We read the original argv from /proc/self/cmdline to preserve the exact + # invocation (works for both `python -m buzz` and frozen binaries). + try: + with open("/proc/self/cmdline", "rb") as f: + raw_args = [a.decode("utf-8", errors="replace") for a in f.read().split(b"\x00") if a] + executable = raw_args[0] + logger.info("CUDA setup: re-execing %s with LD_LIBRARY_PATH=%s", executable, new_ld) + os.execv(executable, raw_args) + except Exception as e: + # Re-exec failed (e.g. AppArmor restriction) — fall back to ctypes preloading + logger.warning("CUDA setup: re-exec failed (%s), falling back to ctypes preload", e) + _preload_linux_libraries_fallback() + + +def _preload_linux_libraries_fallback(): + """Fallback: preload CUDA .so files with RTLD_GLOBAL when re-exec is not possible.""" + lib_dirs = _get_nvidia_package_lib_dirs() + skip_patterns = ["libnvblas"] + candidates = [] for lib_dir in lib_dirs: if not lib_dir.exists(): continue - - # Find all .so files in the directory for lib_file in sorted(lib_dir.glob("*.so*")): - if lib_file.name in loaded_libs: - continue if lib_file.is_symlink() and not lib_file.exists(): continue - - # Skip problematic libraries - if any(pattern in lib_file.name for pattern in skip_patterns): + if any(p in lib_file.name for p in skip_patterns): continue + candidates.append(lib_file) + loaded: set[str] = set() + for pass_num in range(5): + newly = 0 + for lib_file in candidates: + if lib_file.name in loaded: + continue try: - # Use RTLD_GLOBAL so symbols are available to other libraries ctypes.CDLL(str(lib_file), mode=ctypes.RTLD_GLOBAL) - loaded_libs.add(lib_file.name) + loaded.add(lib_file.name) + newly += 1 except OSError as e: - # Some libraries may have missing dependencies, that's ok - pass + logger.debug("Preload pass %d: skipping %s: %s", pass_num + 1, lib_file.name, e) + logger.info("Preload pass %d: +%d libs (%d total)", pass_num + 1, newly, len(loaded)) + if newly == 0: + break def setup_cuda_libraries(): @@ -167,7 +241,7 @@ def setup_cuda_libraries(): if system == "Windows": _setup_windows_dll_directories() elif system == "Linux": - _preload_linux_libraries() + _setup_linux_cuda() # macOS doesn't have CUDA support, so nothing to do logger.info("CUDA setup: complete") From 25e23844fdf3276eeb0546a24a8d6c0bb55711ed Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 12:52:30 +0300 Subject: [PATCH 10/23] Snap fix --- buzz/cuda_manager.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index 8c35d3669..e251c6f65 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -20,14 +20,22 @@ "torch==2.8.0+cu129", "torchaudio==2.8.0+cu129", ] -# Full set of NVIDIA runtime libraries required by torch+cu129. + +# NVIDIA runtime libraries — sourced from the official NVIDIA PyPI index. # Versions are pinned to those resolved in uv.lock to prevent accidental upgrades. -CUDA_NVIDIA_PACKAGES = [ +CUDA_NVIDIA_INDEX_URL = "https://pypi.ngc.nvidia.com" + +# Packages that have wheels for both Linux and Windows (verified via uv.lock). +CUDA_NVIDIA_PACKAGES_COMMON = [ "nvidia-cublas-cu12==12.9.1.4", + "nvidia-cudnn-cu12==9.10.2.21", +] + +# Packages that only have Linux (manylinux) wheels in uv.lock. +CUDA_NVIDIA_PACKAGES_LINUX = [ "nvidia-cuda-cupti-cu12==12.9.79", "nvidia-cuda-nvrtc-cu12==12.9.86", "nvidia-cuda-runtime-cu12==12.9.79", - "nvidia-cudnn-cu12==9.10.2.21", "nvidia-cufft-cu12==11.4.1.4", "nvidia-cufile-cu12==1.14.1.1", "nvidia-curand-cu12==10.3.10.19", @@ -152,10 +160,13 @@ def report(msg): target_flags = _get_install_target() + nvidia_packages = CUDA_NVIDIA_PACKAGES_COMMON + ( + CUDA_NVIDIA_PACKAGES_LINUX if sys.platform != "win32" else [] + ) report("Installing NVIDIA CUDA libraries...") _pip_install( - CUDA_NVIDIA_PACKAGES, - extra_args=["--index-url", CUDA_INDEX_URL] + target_flags, + nvidia_packages, + extra_args=["--index-url", CUDA_NVIDIA_INDEX_URL] + target_flags, progress_callback=report, ) From 029f6e38c7354041794666f15d9fde477ebfee2a Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 13:39:53 +0300 Subject: [PATCH 11/23] Snap fix --- buzz/cuda_manager.py | 4 +--- buzz/locale/ca_ES/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/da_DK/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/de_DE/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/en_US/LC_MESSAGES/buzz.po | 2 +- buzz/locale/es_ES/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/it_IT/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/ja_JP/LC_MESSAGES/buzz.po | 2 +- buzz/locale/lv_LV/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/nl/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/pl_PL/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/pt_BR/LC_MESSAGES/buzz.po | 4 ++-- buzz/locale/uk_UA/LC_MESSAGES/buzz.po | 2 +- buzz/locale/zh_CN/LC_MESSAGES/buzz.po | 2 +- buzz/locale/zh_TW/LC_MESSAGES/buzz.po | 2 +- buzz/widgets/cuda_installer_widget.py | 2 +- 16 files changed, 25 insertions(+), 27 deletions(-) diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index e251c6f65..3e9e97eda 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -23,8 +23,6 @@ # NVIDIA runtime libraries — sourced from the official NVIDIA PyPI index. # Versions are pinned to those resolved in uv.lock to prevent accidental upgrades. -CUDA_NVIDIA_INDEX_URL = "https://pypi.ngc.nvidia.com" - # Packages that have wheels for both Linux and Windows (verified via uv.lock). CUDA_NVIDIA_PACKAGES_COMMON = [ "nvidia-cublas-cu12==12.9.1.4", @@ -166,7 +164,7 @@ def report(msg): report("Installing NVIDIA CUDA libraries...") _pip_install( nvidia_packages, - extra_args=["--index-url", CUDA_NVIDIA_INDEX_URL] + target_flags, + extra_args=["--index-url", CUDA_INDEX_URL] + target_flags, progress_callback=report, ) diff --git a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po index 0b93a7c02..d803f99f7 100644 --- a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po @@ -674,12 +674,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "L'acceleració GPU per a Nvidia permet a Buzz transcriure àudio significativament més ràpid mitjançant CUDA. Per a altres marques de GPU, aquesta acceleració no tindrà cap efecte.\n" "\n" -"Això descarregarà i instal·larà PyTorch amb suport CUDA (~2 GB). Buzz s'ha de reiniciar després de la instal·lació." +"Això descarregarà i instal·larà PyTorch amb suport CUDA (~8 GB). Buzz s'ha de reiniciar després de la instal·lació." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/da_DK/LC_MESSAGES/buzz.po b/buzz/locale/da_DK/LC_MESSAGES/buzz.po index e49def3df..0b79cb91c 100644 --- a/buzz/locale/da_DK/LC_MESSAGES/buzz.po +++ b/buzz/locale/da_DK/LC_MESSAGES/buzz.po @@ -668,12 +668,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Installation af GPU-acceleration til Nvidia GPU'er giver Buzz mulighed for at transskribere lyd betydeligt hurtigere ved hjælp af CUDA. For andre GPU-mærker vil denne acceleration ikke have nogen effekt.\n" "\n" -"Dette vil downloade og installere PyTorch med CUDA-understøttelse (~2 GB). Buzz skal genstartes efter installation." +"Dette vil downloade og installere PyTorch med CUDA-understøttelse (~8 GB). Buzz skal genstartes efter installation." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/de_DE/LC_MESSAGES/buzz.po b/buzz/locale/de_DE/LC_MESSAGES/buzz.po index 329f30ebf..cf08df4ff 100644 --- a/buzz/locale/de_DE/LC_MESSAGES/buzz.po +++ b/buzz/locale/de_DE/LC_MESSAGES/buzz.po @@ -677,12 +677,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Die Installation der GPU-Beschleunigung für Nvidia GPUs ermöglicht es Buzz, Audio mithilfe von CUDA deutlich schneller zu transkribieren. Für andere GPU-Marken hat diese Beschleunigung keine Auswirkung.\n" "\n" -"Dies lädt PyTorch mit CUDA-Unterstützung herunter und installiert es (~2 GB). Buzz muss nach der Installation neu gestartet werden." +"Dies lädt PyTorch mit CUDA-Unterstützung herunter und installiert es (~8 GB). Buzz muss nach der Installation neu gestartet werden." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/en_US/LC_MESSAGES/buzz.po b/buzz/locale/en_US/LC_MESSAGES/buzz.po index 32221954d..afc3d3a71 100644 --- a/buzz/locale/en_US/LC_MESSAGES/buzz.po +++ b/buzz/locale/en_US/LC_MESSAGES/buzz.po @@ -646,7 +646,7 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" diff --git a/buzz/locale/es_ES/LC_MESSAGES/buzz.po b/buzz/locale/es_ES/LC_MESSAGES/buzz.po index 60e53684f..44aee59ff 100644 --- a/buzz/locale/es_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/es_ES/LC_MESSAGES/buzz.po @@ -702,12 +702,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Instalar la aceleración GPU para GPUs Nvidia permite a Buzz transcribir audio significativamente más rápido usando CUDA. Para otras marcas de GPU esta aceleración no tendrá efecto.\n" "\n" -"Esto descargará e instalará PyTorch con soporte CUDA (~2 GB). Buzz debe reiniciarse después de la instalación." +"Esto descargará e instalará PyTorch con soporte CUDA (~8 GB). Buzz debe reiniciarse después de la instalación." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/it_IT/LC_MESSAGES/buzz.po b/buzz/locale/it_IT/LC_MESSAGES/buzz.po index c499a75cc..10e6d1bc4 100644 --- a/buzz/locale/it_IT/LC_MESSAGES/buzz.po +++ b/buzz/locale/it_IT/LC_MESSAGES/buzz.po @@ -673,12 +673,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "L'installazione dell'accelerazione GPU per GPU Nvidia consente a Buzz di trascrivere l'audio in modo significativamente più veloce tramite CUDA. Per altre marche di GPU questa accelerazione non avrà alcun effetto.\n" "\n" -"Verranno scaricati e installati PyTorch con supporto CUDA (~2 GB). Buzz deve essere riavviato dopo l'installazione." +"Verranno scaricati e installati PyTorch con supporto CUDA (~8 GB). Buzz deve essere riavviato dopo l'installazione." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po index f56d15ced..a660e21a0 100644 --- a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po +++ b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po @@ -664,7 +664,7 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Nvidia GPU 向けの GPU アクセラレーションをインストールすると、CUDA を使用して Buzz が音声をはるかに高速に文字起こしできるようになります。他の GPU ブランドではこのアクセラレーションは効果がありません。\n" diff --git a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po index 4a7b8862d..f41271cfa 100644 --- a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po +++ b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po @@ -670,13 +670,13 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "GPU paātrinājuma instalēšana Nvidia GPU kartēm ļauj Buzz ievērojami ātrāk atpazīt audio, izmantojot CUDA. " "Citu GPU ražotāju kartēm šim paātrinājumam nebūs nekādas ietekmes.\n" "\n" -"Tiks lejupielādēts un instalēts PyTorch ar CUDA atbalstu (~2 GB). Pēc instalēšanas Buzz ir jārestartē." +"Tiks lejupielādēts un instalēts PyTorch ar CUDA atbalstu (~8 GB). Pēc instalēšanas Buzz ir jārestartē." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/nl/LC_MESSAGES/buzz.po b/buzz/locale/nl/LC_MESSAGES/buzz.po index 2960d01c4..a27167508 100644 --- a/buzz/locale/nl/LC_MESSAGES/buzz.po +++ b/buzz/locale/nl/LC_MESSAGES/buzz.po @@ -678,12 +678,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Het installeren van GPU-versnelling voor Nvidia GPU's stelt Buzz in staat om audio aanzienlijk sneller te transcriberen met CUDA. Voor andere GPU-merken heeft deze versnelling geen effect.\n" "\n" -"Dit downloadt en installeert PyTorch met CUDA-ondersteuning (~2 GB). Buzz moet na de installatie opnieuw worden gestart." +"Dit downloadt en installeert PyTorch met CUDA-ondersteuning (~8 GB). Buzz moet na de installatie opnieuw worden gestart." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po index 9bc07d5bf..cabf23da6 100644 --- a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po +++ b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po @@ -673,12 +673,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Instalacja akceleracji GPU dla kart Nvidia pozwala Buzz znacznie szybciej transkrybować dźwięk przy użyciu CUDA. Dla innych marek GPU ta akceleracja nie będzie miała żadnego efektu.\n" "\n" -"Spowoduje to pobranie i zainstalowanie PyTorch z obsługą CUDA (~2 GB). Po instalacji Buzz musi zostać ponownie uruchomiony." +"Spowoduje to pobranie i zainstalowanie PyTorch z obsługą CUDA (~8 GB). Po instalacji Buzz musi zostać ponownie uruchomiony." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/pt_BR/LC_MESSAGES/buzz.po b/buzz/locale/pt_BR/LC_MESSAGES/buzz.po index b051c2087..c6bf0a096 100644 --- a/buzz/locale/pt_BR/LC_MESSAGES/buzz.po +++ b/buzz/locale/pt_BR/LC_MESSAGES/buzz.po @@ -671,12 +671,12 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Instalar a aceleração GPU para GPUs Nvidia permite ao Buzz transcrever áudio significativamente mais rápido usando CUDA. Para outras marcas de GPU, essa aceleração não terá efeito.\n" "\n" -"Isso irá baixar e instalar o PyTorch com suporte a CUDA (~2 GB). O Buzz deve ser reiniciado após a instalação." +"Isso irá baixar e instalar o PyTorch com suporte a CUDA (~8 GB). O Buzz deve ser reiniciado após a instalação." #: buzz/widgets/cuda_installer_widget.py msgid "Install GPU Support" diff --git a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po index 36664d945..6f02e2c35 100644 --- a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po +++ b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po @@ -667,7 +667,7 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "Встановлення апаратного прискорення GPU для відеокарт Nvidia дозволяє Buzz значно швидше транскрибувати аудіо за допомогою CUDA. Для відеокарт інших виробників це прискорення не матиме жодного ефекту.\n" diff --git a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po index 3ba7dbe3d..e59ce207c 100644 --- a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po @@ -659,7 +659,7 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "为 Nvidia GPU 安装 GPU 加速后,Buzz 可以使用 CUDA 显著加快音频转录速度。对于其他品牌的 GPU,此加速将不起作用。\n" diff --git a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po index 6557d44ed..55714c432 100644 --- a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po @@ -660,7 +660,7 @@ msgid "" "significantly faster using CUDA. For other GPU brands this acceleration will " "have no effect\n" "\n" -"This will download and install PyTorch with CUDA support (~2 GB). Buzz must " +"This will download and install PyTorch with CUDA support (~8 GB). Buzz must " "be restarted after installation." msgstr "" "為 Nvidia GPU 安裝 GPU 加速後,Buzz 可以使用 CUDA 大幅提升音訊轉錄速度。對於其他品牌的 GPU,此加速將不起作用。\n" diff --git a/buzz/widgets/cuda_installer_widget.py b/buzz/widgets/cuda_installer_widget.py index a4ecb6463..f60457f9e 100644 --- a/buzz/widgets/cuda_installer_widget.py +++ b/buzz/widgets/cuda_installer_widget.py @@ -68,7 +68,7 @@ def __init__(self, parent: Optional[QWidget] = None): "Installing GPU acceleration for Nvidia GPUS allows Buzz " "to transcribe audio significantly faster using CUDA. " "For other GPU brands this acceleration will have no effect\n\n" - "This will download and install PyTorch with CUDA support (~2 GB). " + "This will download and install PyTorch with CUDA support (~8 GB). " "Buzz must be restarted after installation." ) ) From 5aa5596ea58231dda65163a251a0b5ddc0becd24 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 14:21:35 +0300 Subject: [PATCH 12/23] Rearranging whisper types --- buzz/model_loader.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/buzz/model_loader.py b/buzz/model_loader.py index 050379c59..d46f334a4 100644 --- a/buzz/model_loader.py +++ b/buzz/model_loader.py @@ -174,12 +174,20 @@ def get_expected_whisper_model_size(size: WhisperModelSize) -> Optional[int]: return WHISPER_MODEL_SIZES.get(size, None) class ModelType(enum.Enum): - WHISPER = "Whisper" WHISPER_CPP = "Whisper.cpp" HUGGING_FACE = "Hugging Face" FASTER_WHISPER = "Faster Whisper" + WHISPER = "OpenAI Whisper" OPEN_AI_WHISPER_API = "OpenAI Whisper API" + @classmethod + def _missing_(cls, value): + # Migrate old stored values to new display names + legacy_map = { + "Whisper": cls.WHISPER, + } + return legacy_map.get(value) + @property def supports_initial_prompt(self): return self in ( From 09c3ba0a1e98553169a50e7fcd5b750d41c148eb Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 14:47:29 +0300 Subject: [PATCH 13/23] Test fixes --- buzz/model_loader.py | 2 +- tests/model_loader_test.py | 2 +- tests/transcriber/whisper_file_transcriber_test.py | 4 ++-- tests/widgets/model_type_combo_box_test.py | 4 ++-- uv.lock | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/buzz/model_loader.py b/buzz/model_loader.py index d46f334a4..d57e938cf 100644 --- a/buzz/model_loader.py +++ b/buzz/model_loader.py @@ -328,7 +328,7 @@ def __init__( def __str__(self): match self.model_type: case ModelType.WHISPER: - return f"Whisper ({self.whisper_model_size})" + return f"OpenAI Whisper ({self.whisper_model_size})" case ModelType.WHISPER_CPP: return f"Whisper.cpp ({self.whisper_model_size})" case ModelType.HUGGING_FACE: diff --git a/tests/model_loader_test.py b/tests/model_loader_test.py index 331cd009a..f14004358 100644 --- a/tests/model_loader_test.py +++ b/tests/model_loader_test.py @@ -152,7 +152,7 @@ def test_str_whisper(self): model = TranscriptionModel( model_type=ModelType.WHISPER, whisper_model_size=WhisperModelSize.TINY ) - assert str(model) == "Whisper (Tiny)" + assert str(model) == "OpenAI Whisper (Tiny)" def test_str_whisper_cpp(self): model = TranscriptionModel( diff --git a/tests/transcriber/whisper_file_transcriber_test.py b/tests/transcriber/whisper_file_transcriber_test.py index 2cf34b0ba..c787087a3 100644 --- a/tests/transcriber/whisper_file_transcriber_test.py +++ b/tests/transcriber/whisper_file_transcriber_test.py @@ -81,13 +81,13 @@ class TestWhisperFileTranscriber: pytest.param( "/a/b/c.mp4", OutputFormat.SRT, - "/a/b/c-translate--Whisper-tiny.srt", + "/a/b/c-translate--OpenAI Whisper-tiny.srt", marks=pytest.mark.skipif(platform.system() == "Windows", reason=""), ), pytest.param( "C:\\a\\b\\c.mp4", OutputFormat.SRT, - "C:\\a\\b\\c-translate--Whisper-tiny.srt", + "C:\\a\\b\\c-translate--OpenAI Whisper-tiny.srt", marks=pytest.mark.skipif(platform.system() != "Windows", reason=""), ), ], diff --git a/tests/widgets/model_type_combo_box_test.py b/tests/widgets/model_type_combo_box_test.py index 39babb63e..121a6e432 100644 --- a/tests/widgets/model_type_combo_box_test.py +++ b/tests/widgets/model_type_combo_box_test.py @@ -11,16 +11,16 @@ class TestModelTypeComboBox: [ pytest.param( [ - "Whisper", "Whisper.cpp", "Hugging Face", "Faster Whisper", + "OpenAI Whisper", "OpenAI Whisper API", # Faster Whisper is not available on macOS x86_64 ] if not (platform.system() == "Darwin" and platform.machine() == "x86_64") else [ - "Whisper", "Whisper.cpp", "Hugging Face", + "OpenAI Whisper", "OpenAI Whisper API", ], ), diff --git a/uv.lock b/uv.lock index d5d9e888d..f33778780 100644 --- a/uv.lock +++ b/uv.lock @@ -4417,9 +4417,9 @@ wheels = [ [[package]] name = "yt-dlp" -version = "2026.3.3" +version = "2026.3.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/6f/7427d23609353e5ef3470ff43ef551b8bd7b166dd4fef48957f0d0e040fe/yt_dlp-2026.3.3.tar.gz", hash = "sha256:3db7969e3a8964dc786bdebcffa2653f31123bf2a630f04a17bdafb7bbd39952", size = 3118658, upload-time = "2026-03-03T16:54:53.909Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/34/7c6b4e3f89cb6416d2cd7ab6dab141a1df97ab0fb22d15816db2c92148c9/yt_dlp-2026.3.17.tar.gz", hash = "sha256:ba7aa31d533f1ffccfe70e421596d7ca8ff0bf1398dc6bb658b7d9dec057d2c9", size = 3119221, upload-time = "2026-03-17T23:43:00.244Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/a4/8b5cd28ab87aef48ef15e74241befec3445496327db028f34147a9e0f14f/yt_dlp-2026.3.3-py3-none-any.whl", hash = "sha256:166c6e68c49ba526474bd400e0129f58aa522c2896204aa73be669c3d2f15e63", size = 3315599, upload-time = "2026-03-03T16:54:51.899Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/5093bcb954878e50f7217fd2ab94282b53934022e4e4a03265582da83bf5/yt_dlp-2026.3.17-py3-none-any.whl", hash = "sha256:32992db94303a8a5d211a183f2174834fe7f8c29d83ed2e7a324eae97a8f26d8", size = 3315134, upload-time = "2026-03-17T23:42:57.863Z" }, ] From 8ad3367e917801d59ea4b8e03c39b969b9434ea8 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 16:27:41 +0300 Subject: [PATCH 14/23] Test fixes --- buzz/widgets/recording_transcriber_widget.py | 24 +++++++++++-- .../transcriber/recording_transcriber_test.py | 3 +- tests/widgets/conftest.py | 35 +++++++++++++++++-- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/buzz/widgets/recording_transcriber_widget.py b/buzz/widgets/recording_transcriber_widget.py index 8c6ba922c..602a33b86 100644 --- a/buzz/widgets/recording_transcriber_widget.py +++ b/buzz/widgets/recording_transcriber_widget.py @@ -642,7 +642,7 @@ def on_model_loaded(self, model_path: str): self.transcription_thread.started.connect(self.transcriber.start) self.transcription_thread.finished.connect( - self.transcription_thread.deleteLater + self._on_transcription_thread_finished ) self.transcription_thread.finished.connect( lambda: setattr(self, 'transcription_thread', None) @@ -1152,8 +1152,28 @@ def closeEvent(self, event: QCloseEvent) -> None: self._do_close() super().closeEvent(event) - def _on_close_transcriber_finished(self): + def _cleanup_transcription_thread(self): + """Wait for the OS thread to exit, schedule deletion, and clear the reference. + + QThread::finished is emitted before the OS thread fully exits, so we + must call thread.wait() before dropping the last reference or calling + deleteLater() — otherwise Qt destroys the C++ object while the thread + is still in its final cleanup steps. + """ + thread = self.transcription_thread self.transcription_thread = None + if thread is not None: + try: + thread.wait() + thread.deleteLater() + except RuntimeError: + pass + + def _on_transcription_thread_finished(self): + self._cleanup_transcription_thread() + + def _on_close_transcriber_finished(self): + self._cleanup_transcription_thread() self.close() def _do_close(self): diff --git a/tests/transcriber/recording_transcriber_test.py b/tests/transcriber/recording_transcriber_test.py index 3ceef3cc8..6a118f43a 100644 --- a/tests/transcriber/recording_transcriber_test.py +++ b/tests/transcriber/recording_transcriber_test.py @@ -414,6 +414,7 @@ def test_start_local_whisper_server_creates_openai_client(self): # Mock a successful process mock_process = MagicMock() mock_process.poll.return_value = None # Process is running + mock_process.stderr = iter([]) mock_popen.return_value = mock_process transcriber = RecordingTranscriber( @@ -522,7 +523,7 @@ def test_start_local_whisper_server_handles_failure(self): # Mock a failed process mock_process = MagicMock() mock_process.poll.return_value = 1 # Process terminated with error - mock_process.stderr.read.return_value = b"Error loading model" + mock_process.stderr = iter([b"Error loading model"]) mock_popen.return_value = mock_process transcriber = RecordingTranscriber( diff --git a/tests/widgets/conftest.py b/tests/widgets/conftest.py index 67b1ec05b..88a1cb4e4 100644 --- a/tests/widgets/conftest.py +++ b/tests/widgets/conftest.py @@ -1,20 +1,49 @@ -import gc import logging import pytest -from unittest.mock import patch +from unittest.mock import patch, MagicMock from buzz.settings.settings import Settings +@pytest.fixture(autouse=True) +def mock_amplitude_listener_stream(): + # RecordingAmplitudeListener creates a real sounddevice.InputStream that + # fires C-level callbacks from a background thread. If the Qt object is + # deleted (via deleteLater + processEvents) while the C thread is still + # active it causes a segfault or "Exception ignored from cffi callback" + # that contaminates later tests. Patch it out so no real audio hardware + # stream is created during widget tests. + mock_stream = MagicMock() + mock_stream.samplerate = 16000 + with patch("buzz.recording.sounddevice.InputStream", return_value=mock_stream): + yield + + @pytest.fixture(autouse=True) def mock_get_password(): with patch("buzz.widgets.recording_transcriber_widget.get_password", return_value=None): yield +@pytest.fixture(autouse=True) +def mock_message_box(): + # Prevent QMessageBox dialogs from blocking tests (e.g. when a background + # transcription thread emits an error after the test has already "passed") + with patch("buzz.widgets.recording_transcriber_widget.QMessageBox"): + yield + + @pytest.fixture(autouse=True) def force_gc_between_tests(): yield - gc.collect() + from PyQt6.QtCore import QCoreApplication + # Flush pending deleteLater() and queued cross-thread signals. + # We intentionally do NOT call gc.collect() here: PyQt6 signal/slot + # infrastructure can leave Python tuples with corrupted type pointers in + # CPython's cyclic-GC tracking list, causing a PyTuple_GET_SIZE assertion + # failure inside gc.collect(). Python's reference-counting handles + # non-cyclic objects; PyQt6's own lifecycle management handles Qt cycles. + for _ in range(3): + QCoreApplication.processEvents() @pytest.fixture(scope="package") From 5ebc1a87291ba324d8c19a40fbb7bd25a4cefccd Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 16:54:54 +0300 Subject: [PATCH 15/23] Adding more tests --- buzz/widgets/icon_presentation.py | 60 ---- tests/cuda_manager_test.py | 316 ++++++++++++++++++++ tests/cuda_setup_test.py | 238 +++++++++++++++ tests/widgets/audio_meter_widget_test.py | 27 ++ tests/widgets/cuda_installer_widget_test.py | 145 +++++++++ 5 files changed, 726 insertions(+), 60 deletions(-) delete mode 100644 buzz/widgets/icon_presentation.py create mode 100644 tests/cuda_manager_test.py create mode 100644 tests/cuda_setup_test.py create mode 100644 tests/widgets/cuda_installer_widget_test.py diff --git a/buzz/widgets/icon_presentation.py b/buzz/widgets/icon_presentation.py deleted file mode 100644 index 6f230971b..000000000 --- a/buzz/widgets/icon_presentation.py +++ /dev/null @@ -1,60 +0,0 @@ -from PyQt6.QtGui import QIcon, QPixmap, QPainter, QPalette -from PyQt6.QtCore import QSize -from PyQt6.QtSvg import QSvgRenderer -import os -from buzz.assets import APP_BASE_DIR - -class PresentationIcon: - "Icons for presentation window controls" - def __init__(self, parent, svg_path: str, color: str = None): - self.parent = parent - self.svg_path = svg_path - self.color = color or self.get_default_color() - - - def get_default_color(self) -> str: - """Get default icon color based on theme""" - palette = self.parent.palette() - is_dark = palette.window().color().black() > 127 - - return "#EEE" if is_dark else "#555" - - def get_icon(self) -> QIcon: - """Load SVG icon and return as QIcon""" - #Load from asset first - full_path = os.path.join(APP_BASE_DIR, "assets", "icons", os.path.basename(self.svg_path)) - - if not os.path.exists(full_path): - pixmap = QPixmap(24, 24) - pixmap.fill(self.color) - - return QIcon(pixmap) - - #Load SVG - renderer = QSvgRenderer(full_path) - pixmap = QPixmap(24, 24) - pixmap.fill(Qt.GlobalColor.transparent) - painter = QPainter(pixmap) - renderer.render(painter) - painter.end() - - return QIcon(pixmap) - - - - - - - - - - - - - - - - - - - diff --git a/tests/cuda_manager_test.py b/tests/cuda_manager_test.py new file mode 100644 index 000000000..deb596f48 --- /dev/null +++ b/tests/cuda_manager_test.py @@ -0,0 +1,316 @@ +import subprocess +import sys +from pathlib import Path +from unittest.mock import MagicMock, patch, call + +import pytest + +from buzz.cuda_manager import ( + CUDA_INDEX_URL, + CUDA_NVIDIA_PACKAGES_LINUX, + is_cuda_torch_installed, + is_flatpak, + is_nvidia_gpu_present, + is_snap, + should_offer_cuda_prompt, + _get_install_target, + _get_pip_cmd, + _in_virtualenv, + _pip_install, + _subprocess_hide_window_kwargs, + install_cuda, +) + + +class TestIsSnap: + def test_returns_true_when_snap_env_set(self, monkeypatch): + monkeypatch.setenv("SNAP", "/snap/buzz/current") + assert is_snap() is True + + def test_returns_false_when_snap_env_not_set(self, monkeypatch): + monkeypatch.delenv("SNAP", raising=False) + assert is_snap() is False + + +class TestIsFlatpak: + def test_returns_true_when_flatpak_env_set(self, monkeypatch): + monkeypatch.setenv("FLATPAK_ID", "io.github.chidiwilliams.buzz") + assert is_flatpak() is True + + def test_returns_false_when_flatpak_env_not_set(self, monkeypatch): + monkeypatch.delenv("FLATPAK_ID", raising=False) + assert is_flatpak() is False + + +class TestShouldOfferCudaPrompt: + def test_returns_true_on_windows(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "win32") + assert should_offer_cuda_prompt() is True + + def test_returns_true_on_linux_snap(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "linux") + monkeypatch.setenv("SNAP", "/snap/buzz/current") + monkeypatch.delenv("FLATPAK_ID", raising=False) + assert should_offer_cuda_prompt() is True + + def test_returns_true_on_linux_flatpak(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "linux") + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.setenv("FLATPAK_ID", "io.github.chidiwilliams.buzz") + assert should_offer_cuda_prompt() is True + + def test_returns_false_on_linux_bare(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "linux") + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + assert should_offer_cuda_prompt() is False + + def test_returns_false_on_macos(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "darwin") + assert should_offer_cuda_prompt() is False + + +class TestIsCudaTorchInstalled: + def test_returns_true_when_cuda_available(self): + mock_torch = MagicMock() + mock_torch.cuda.is_available.return_value = True + mock_torch.__version__ = "2.0.0+cu118" + mock_torch.version.cuda = "11.8" + with patch.dict("sys.modules", {"torch": mock_torch}): + assert is_cuda_torch_installed() is True + + def test_returns_false_when_cuda_not_available(self): + mock_torch = MagicMock() + mock_torch.cuda.is_available.return_value = False + mock_torch.__version__ = "2.0.0" + mock_torch.version.cuda = None + with patch.dict("sys.modules", {"torch": mock_torch}): + assert is_cuda_torch_installed() is False + + def test_returns_false_when_torch_not_installed(self): + with patch.dict("sys.modules", {"torch": None}): + with patch("builtins.__import__", side_effect=ImportError): + assert is_cuda_torch_installed() is False + + def test_logs_warning_when_cuda_compiled_but_unavailable(self): + mock_torch = MagicMock() + mock_torch.cuda.is_available.return_value = False + mock_torch.__version__ = "2.0.0+cu118" + mock_torch.version.cuda = "11.8" + with patch.dict("sys.modules", {"torch": mock_torch}): + with patch("buzz.cuda_manager.logger") as mock_logger: + is_cuda_torch_installed() + mock_logger.warning.assert_called_once() + + +class TestIsNvidiaGpuPresent: + def test_returns_true_when_nvidia_smi_succeeds(self): + with patch("subprocess.run") as mock_run: + mock_run.return_value = MagicMock(returncode=0) + assert is_nvidia_gpu_present() is True + + def test_falls_back_to_proc_file_when_nvidia_smi_missing(self, tmp_path): + with patch("subprocess.run", side_effect=FileNotFoundError): + with patch("buzz.cuda_manager.Path") as mock_path_cls: + mock_path_cls.return_value.exists.return_value = True + assert is_nvidia_gpu_present() is True + + def test_returns_false_when_nvidia_smi_fails_and_no_proc_file(self): + with patch("subprocess.run") as mock_run: + mock_run.return_value = MagicMock(returncode=1) + with patch("pathlib.Path.exists", return_value=False): + assert is_nvidia_gpu_present() is False + + def test_handles_timeout(self): + with patch("subprocess.run", side_effect=subprocess.TimeoutExpired(["nvidia-smi"], 5)): + with patch("pathlib.Path.exists", return_value=False): + assert is_nvidia_gpu_present() is False + + +class TestInVirtualenv: + def test_returns_true_when_virtual_env_set(self, monkeypatch): + monkeypatch.setenv("VIRTUAL_ENV", "/some/venv") + assert _in_virtualenv() is True + + def test_returns_true_when_prefix_differs(self, monkeypatch): + monkeypatch.delenv("VIRTUAL_ENV", raising=False) + with patch.object(sys, "prefix", "/some/venv"): + with patch.object(sys, "base_prefix", "/usr"): + assert _in_virtualenv() is True + + def test_returns_false_when_no_venv(self, monkeypatch): + monkeypatch.delenv("VIRTUAL_ENV", raising=False) + with patch.object(sys, "prefix", sys.base_prefix): + assert _in_virtualenv() is False + + +class TestGetInstallTarget: + def test_snap_uses_snap_user_data(self, monkeypatch, tmp_path): + snap_dir = tmp_path / "snap_data" + monkeypatch.setenv("SNAP", "/snap/buzz/current") + monkeypatch.setenv("SNAP_USER_DATA", str(snap_dir)) + monkeypatch.delenv("FLATPAK_ID", raising=False) + flags = _get_install_target() + assert flags[0] == "--target" + assert "cuda_packages" in flags[1] + assert str(snap_dir) in flags[1] + + def test_snap_falls_back_to_home_when_no_snap_user_data(self, monkeypatch): + monkeypatch.setenv("SNAP", "/snap/buzz/current") + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + with patch("pathlib.Path.mkdir"): + flags = _get_install_target() + assert flags[0] == "--target" + assert "cuda_packages" in flags[1] + + def test_flatpak_uses_xdg_data_home(self, monkeypatch, tmp_path): + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.setenv("FLATPAK_ID", "io.github.chidiwilliams.buzz") + monkeypatch.setenv("XDG_DATA_HOME", str(tmp_path)) + with patch("pathlib.Path.mkdir"): + flags = _get_install_target() + assert flags[0] == "--target" + assert "buzz" in flags[1] + assert "cuda_packages" in flags[1] + + def test_virtualenv_returns_empty(self, monkeypatch): + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + monkeypatch.setenv("VIRTUAL_ENV", "/some/venv") + assert _get_install_target() == [] + + def test_bare_returns_user_flag(self, monkeypatch): + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + monkeypatch.delenv("VIRTUAL_ENV", raising=False) + with patch.object(sys, "prefix", sys.base_prefix): + assert _get_install_target() == ["--user"] + + +class TestSubprocessHideWindowKwargs: + def test_returns_empty_on_linux(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "linux") + assert _subprocess_hide_window_kwargs() == {} + + def test_returns_startupinfo_on_windows(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "win32") + # Only run on actual windows, otherwise mock the STARTUPINFO + if sys.platform != "win32": + mock_si = MagicMock() + with patch("subprocess.STARTUPINFO", return_value=mock_si): + with patch("subprocess.STARTF_USESHOWWINDOW", 1): + with patch("subprocess.SW_HIDE", 0): + with patch("subprocess.CREATE_NO_WINDOW", 0x08000000): + result = _subprocess_hide_window_kwargs() + assert "startupinfo" in result + assert "creationflags" in result + + +class TestGetPipCmd: + def test_returns_sys_executable_when_pip_available(self): + with patch("subprocess.run") as mock_run: + mock_run.return_value = MagicMock(returncode=0) + cmd = _get_pip_cmd() + assert cmd == [sys.executable, "-m", "pip"] + + def test_bootstraps_pip_when_not_available(self): + responses = [ + MagicMock(returncode=1), # pip --version fails + MagicMock(returncode=0), # ensurepip succeeds + ] + with patch("subprocess.run", side_effect=responses): + cmd = _get_pip_cmd() + assert cmd == [sys.executable, "-m", "pip"] + + def test_raises_when_ensurepip_also_fails(self): + responses = [ + MagicMock(returncode=1), # pip --version fails + MagicMock(returncode=1), # ensurepip fails + ] + with patch("subprocess.run", side_effect=responses): + with pytest.raises(RuntimeError, match="pip is not available"): + _get_pip_cmd() + + +class TestPipInstall: + def test_calls_pip_with_packages(self): + mock_proc = MagicMock() + mock_proc.stdout = iter(["Collecting torch\n", "Successfully installed\n"]) + mock_proc.returncode = 0 + mock_proc.wait.return_value = None + + with patch("buzz.cuda_manager._get_pip_cmd", return_value=[sys.executable, "-m", "pip"]): + with patch("subprocess.Popen", return_value=mock_proc) as mock_popen: + _pip_install(["torch==2.0.0"], extra_args=["--index-url", "https://example.com"]) + + cmd = mock_popen.call_args[0][0] + assert "torch==2.0.0" in cmd + assert "--index-url" in cmd + + def test_raises_on_nonzero_exit(self): + mock_proc = MagicMock() + mock_proc.stdout = iter([]) + mock_proc.returncode = 1 + mock_proc.wait.return_value = None + + with patch("buzz.cuda_manager._get_pip_cmd", return_value=[sys.executable, "-m", "pip"]): + with patch("subprocess.Popen", return_value=mock_proc): + with pytest.raises(RuntimeError, match="pip install failed"): + _pip_install(["torch==2.0.0"]) + + def test_calls_progress_callback(self): + mock_proc = MagicMock() + mock_proc.stdout = iter(["line1\n", "line2\n"]) + mock_proc.returncode = 0 + mock_proc.wait.return_value = None + + calls = [] + with patch("buzz.cuda_manager._get_pip_cmd", return_value=[sys.executable, "-m", "pip"]): + with patch("subprocess.Popen", return_value=mock_proc): + _pip_install(["pkg"], progress_callback=calls.append) + + assert "line1" in calls + assert "line2" in calls + + +class TestInstallCuda: + def test_calls_pip_install_twice(self, monkeypatch): + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + monkeypatch.setenv("VIRTUAL_ENV", "/some/venv") + + with patch("buzz.cuda_manager._pip_install") as mock_pip: + install_cuda() + + assert mock_pip.call_count == 2 + + def test_passes_progress_callback(self, monkeypatch): + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + monkeypatch.setenv("VIRTUAL_ENV", "/some/venv") + + messages = [] + with patch("buzz.cuda_manager._pip_install"): + install_cuda(progress_callback=messages.append) + + assert any("NVIDIA" in m for m in messages) + assert any("PyTorch" in m for m in messages) + + def test_linux_excludes_linux_only_packages_on_windows(self, monkeypatch): + monkeypatch.setattr(sys, "platform", "win32") + monkeypatch.delenv("SNAP", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + + captured = [] + + def fake_pip(packages, **kwargs): + captured.append(packages) + + with patch("buzz.cuda_manager._pip_install", side_effect=fake_pip): + with patch("buzz.cuda_manager._get_install_target", return_value=[]): + install_cuda() + + nvidia_pkgs = captured[0] + for pkg in CUDA_NVIDIA_PACKAGES_LINUX: + assert pkg not in nvidia_pkgs diff --git a/tests/cuda_setup_test.py b/tests/cuda_setup_test.py new file mode 100644 index 000000000..11193c8ed --- /dev/null +++ b/tests/cuda_setup_test.py @@ -0,0 +1,238 @@ +import sys +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest + + +class TestGetCudaTargetDir: + def test_returns_snap_path(self, monkeypatch, tmp_path): + monkeypatch.setenv("SNAP_USER_DATA", str(tmp_path)) + monkeypatch.delenv("FLATPAK_ID", raising=False) + from buzz.cuda_setup import _get_cuda_target_dir + result = _get_cuda_target_dir() + assert result == tmp_path / "cuda_packages" + + def test_returns_flatpak_path(self, monkeypatch, tmp_path): + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.setenv("FLATPAK_ID", "io.github.chidiwilliams.buzz") + monkeypatch.setenv("XDG_DATA_HOME", str(tmp_path)) + from buzz.cuda_setup import _get_cuda_target_dir + result = _get_cuda_target_dir() + assert result == tmp_path / "buzz" / "cuda_packages" + + def test_returns_none_when_no_env(self, monkeypatch): + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + from buzz.cuda_setup import _get_cuda_target_dir + result = _get_cuda_target_dir() + assert result is None + + def test_flatpak_falls_back_to_home(self, monkeypatch): + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.setenv("FLATPAK_ID", "io.github.chidiwilliams.buzz") + monkeypatch.delenv("XDG_DATA_HOME", raising=False) + from buzz.cuda_setup import _get_cuda_target_dir + result = _get_cuda_target_dir() + assert result is not None + assert "cuda_packages" in str(result) + + +class TestGetSitePackagesDirs: + def test_adds_cuda_target_to_sys_path(self, monkeypatch, tmp_path): + cuda_target = tmp_path / "cuda_packages" + cuda_target.mkdir() + monkeypatch.setenv("SNAP_USER_DATA", str(tmp_path)) + monkeypatch.delenv("FLATPAK_ID", raising=False) + + from buzz.cuda_setup import _get_site_packages_dirs + dirs = _get_site_packages_dirs() + + assert cuda_target in dirs + assert str(cuda_target) in sys.path + + def test_returns_list_including_existing_site_packages(self, monkeypatch): + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + + from buzz.cuda_setup import _get_site_packages_dirs + dirs = _get_site_packages_dirs() + assert isinstance(dirs, list) + + +class TestCollectCudaLibDirs: + def test_includes_torch_lib(self, tmp_path): + torch_lib = tmp_path / "torch" / "lib" + torch_lib.mkdir(parents=True) + + from buzz.cuda_setup import _collect_cuda_lib_dirs + dirs = _collect_cuda_lib_dirs(tmp_path) + assert str(torch_lib) in dirs + + def test_includes_nvidia_package_libs(self, tmp_path): + nvidia_cublas = tmp_path / "nvidia" / "cublas" / "lib" + nvidia_cublas.mkdir(parents=True) + + from buzz.cuda_setup import _collect_cuda_lib_dirs + dirs = _collect_cuda_lib_dirs(tmp_path) + assert str(nvidia_cublas) in dirs + + def test_returns_empty_when_no_dirs_exist(self, tmp_path): + from buzz.cuda_setup import _collect_cuda_lib_dirs + dirs = _collect_cuda_lib_dirs(tmp_path) + assert dirs == [] + + +class TestGetNvidiaPackageLibDirs: + def test_finds_nvidia_lib_dirs(self, monkeypatch, tmp_path): + sp = tmp_path / "site-packages" + nvidia_lib = sp / "nvidia" / "cublas" / "lib" + nvidia_lib.mkdir(parents=True) + + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + + with patch("buzz.cuda_setup._get_site_packages_dirs", return_value=[sp]): + from buzz.cuda_setup import _get_nvidia_package_lib_dirs + dirs = _get_nvidia_package_lib_dirs() + + assert nvidia_lib in dirs + + def test_finds_torch_lib_dir(self, monkeypatch, tmp_path): + sp = tmp_path / "site-packages" + torch_lib = sp / "torch" / "lib" + torch_lib.mkdir(parents=True) + + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + + with patch("buzz.cuda_setup._get_site_packages_dirs", return_value=[sp]): + from buzz.cuda_setup import _get_nvidia_package_lib_dirs + dirs = _get_nvidia_package_lib_dirs() + + assert torch_lib in dirs + + +class TestSetupLinuxCuda: + def test_skips_when_no_cuda_target(self, monkeypatch): + monkeypatch.delenv("SNAP_USER_DATA", raising=False) + monkeypatch.delenv("FLATPAK_ID", raising=False) + + with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=None): + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() # should not raise + + def test_skips_when_cuda_target_does_not_exist(self, monkeypatch, tmp_path): + nonexistent = tmp_path / "nonexistent" + with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=nonexistent): + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() # should not raise + + def test_skips_when_no_torch_lib(self, monkeypatch, tmp_path): + cuda_target = tmp_path / "cuda_packages" + cuda_target.mkdir() + with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() # should not raise + + def test_reexecs_when_sentinel_not_in_ld_path(self, monkeypatch, tmp_path): + cuda_target = tmp_path / "cuda_packages" + torch_lib = cuda_target / "torch" / "lib" + torch_lib.mkdir(parents=True) + + monkeypatch.delenv("LD_LIBRARY_PATH", raising=False) + + with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): + with patch("buzz.cuda_setup._collect_cuda_lib_dirs", return_value=[str(torch_lib)]): + with patch("os.execv", side_effect=OSError("test")) as mock_execv: + with patch("buzz.cuda_setup._preload_linux_libraries_fallback") as mock_fallback: + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() + + mock_fallback.assert_called_once() + + def test_no_reexec_when_sentinel_already_in_ld_path(self, monkeypatch, tmp_path): + cuda_target = tmp_path / "cuda_packages" + torch_lib = cuda_target / "torch" / "lib" + torch_lib.mkdir(parents=True) + + monkeypatch.setenv("LD_LIBRARY_PATH", str(torch_lib)) + + with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): + with patch("os.execv") as mock_execv: + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() + + mock_execv.assert_not_called() + + +class TestSetupWindowsDllDirectories: + def test_calls_add_dll_directory(self, tmp_path): + lib_dir = tmp_path / "lib" + lib_dir.mkdir() + + with patch("buzz.cuda_setup._get_nvidia_package_lib_dirs", return_value=[lib_dir]): + with patch("buzz.cuda_setup.os") as mock_os: + from buzz.cuda_setup import _setup_windows_dll_directories + _setup_windows_dll_directories() + + mock_os.add_dll_directory.assert_called_once_with(str(lib_dir)) + + def test_logs_warning_when_no_lib_dirs(self): + with patch("buzz.cuda_setup._get_nvidia_package_lib_dirs", return_value=[]): + with patch("buzz.cuda_setup.logger") as mock_logger: + from buzz.cuda_setup import _setup_windows_dll_directories + _setup_windows_dll_directories() + + mock_logger.warning.assert_called_once() + + +class TestSetupCudaLibraries: + def test_calls_windows_setup_on_windows(self): + with patch("platform.system", return_value="Windows"): + with patch("buzz.cuda_setup._setup_windows_dll_directories") as mock_win: + from buzz.cuda_setup import setup_cuda_libraries + setup_cuda_libraries() + mock_win.assert_called_once() + + def test_calls_linux_setup_on_linux(self): + with patch("platform.system", return_value="Linux"): + with patch("buzz.cuda_setup._setup_linux_cuda") as mock_linux: + from buzz.cuda_setup import setup_cuda_libraries + setup_cuda_libraries() + mock_linux.assert_called_once() + + def test_does_nothing_on_macos(self): + with patch("platform.system", return_value="Darwin"): + with patch("buzz.cuda_setup._setup_windows_dll_directories") as mock_win: + with patch("buzz.cuda_setup._setup_linux_cuda") as mock_linux: + from buzz.cuda_setup import setup_cuda_libraries + setup_cuda_libraries() + mock_win.assert_not_called() + mock_linux.assert_not_called() + + +class TestPreloadLinuxLibrariesFallback: + def test_loads_so_files(self, tmp_path): + lib_dir = tmp_path / "lib" + lib_dir.mkdir() + so_file = lib_dir / "libfoo.so.1" + so_file.touch() + + with patch("buzz.cuda_setup._get_nvidia_package_lib_dirs", return_value=[lib_dir]): + with patch("ctypes.CDLL") as mock_cdll: + from buzz.cuda_setup import _preload_linux_libraries_fallback + _preload_linux_libraries_fallback() + mock_cdll.assert_called() + + def test_skips_libnvblas(self, tmp_path): + lib_dir = tmp_path / "lib" + lib_dir.mkdir() + skip_file = lib_dir / "libnvblas.so.1" + skip_file.touch() + + with patch("buzz.cuda_setup._get_nvidia_package_lib_dirs", return_value=[lib_dir]): + with patch("ctypes.CDLL") as mock_cdll: + from buzz.cuda_setup import _preload_linux_libraries_fallback + _preload_linux_libraries_fallback() + mock_cdll.assert_not_called() diff --git a/tests/widgets/audio_meter_widget_test.py b/tests/widgets/audio_meter_widget_test.py index d91e5d702..62f9e142c 100644 --- a/tests/widgets/audio_meter_widget_test.py +++ b/tests/widgets/audio_meter_widget_test.py @@ -54,3 +54,30 @@ def test_fixed_height(self, qtbot: QtBot): widget = AudioMeterWidget() qtbot.add_widget(widget) assert widget.height() == 56 + + def test_update_queue_size(self, qtbot: QtBot): + widget = AudioMeterWidget() + qtbot.add_widget(widget) + widget.update_queue_size(5) + assert widget.queue_size == 5 + + def test_reset_amplitude_clears_queue_size(self, qtbot: QtBot): + widget = AudioMeterWidget() + qtbot.add_widget(widget) + widget.update_queue_size(3) + widget.reset_amplitude() + assert widget.queue_size == 0 + + def test_initial_queue_size_is_zero(self, qtbot: QtBot): + widget = AudioMeterWidget() + qtbot.add_widget(widget) + assert widget.queue_size == 0 + + def test_paint_event_does_not_raise(self, qtbot: QtBot): + widget = AudioMeterWidget() + qtbot.add_widget(widget) + widget.show() + widget.update_amplitude(0.5) + widget.update_average_amplitude(0.1) + widget.update_queue_size(2) + widget.repaint() # triggers paintEvent diff --git a/tests/widgets/cuda_installer_widget_test.py b/tests/widgets/cuda_installer_widget_test.py new file mode 100644 index 000000000..e9e22444a --- /dev/null +++ b/tests/widgets/cuda_installer_widget_test.py @@ -0,0 +1,145 @@ +from unittest.mock import MagicMock, patch + +import pytest +from pytestqt.qtbot import QtBot + +from buzz.widgets.cuda_installer_widget import CudaInstallerDialog, _InstallWorker + + +class TestInstallWorker: + def test_calls_install_cuda_and_emits_finished(self): + worker = _InstallWorker() + finished_mock = MagicMock() + worker.signals.finished.connect(finished_mock) + + with patch("buzz.cuda_manager.install_cuda") as mock_install: + worker.run() + + mock_install.assert_called_once() + finished_mock.assert_called_once() + + def test_emits_error_on_exception(self): + worker = _InstallWorker() + error_mock = MagicMock() + worker.signals.error.connect(error_mock) + + with patch("buzz.cuda_manager.install_cuda", side_effect=RuntimeError("fail")): + worker.run() + + error_mock.assert_called_once_with("fail") + + def test_passes_progress_callback_to_install(self): + worker = _InstallWorker() + progress_mock = MagicMock() + worker.signals.progress.connect(progress_mock) + + def fake_install(progress_callback=None): + if progress_callback: + progress_callback("installing...") + + with patch("buzz.cuda_manager.install_cuda", side_effect=fake_install): + worker.run() + + progress_mock.assert_called_once_with("installing...") + + +class TestCudaInstallerDialog: + def test_dialog_creates_with_correct_title(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + assert "GPU" in dialog.windowTitle() or "Nvidia" in dialog.windowTitle() + + def test_install_button_exists(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + assert dialog.install_button is not None + assert dialog.install_button.isEnabled() + + def test_decline_button_exists(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + assert dialog.decline_button is not None + + def test_progress_bar_hidden_initially(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + assert not dialog.progress_bar.isVisible() + + def test_log_view_hidden_initially(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + assert not dialog.log_view.isVisible() + + def test_install_click_shows_progress_bar(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog.show() + + with patch("buzz.widgets.cuda_installer_widget.QThreadPool"): + dialog._on_install_clicked() + + assert dialog.progress_bar.isVisible() + assert dialog.log_view.isVisible() + assert not dialog.install_button.isEnabled() + assert not dialog.decline_button.isEnabled() + + def test_on_progress_appends_to_log(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog._on_progress("step 1") + assert "step 1" in dialog.log_view.toPlainText() + + def test_on_progress_updates_status_label(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog._on_progress("Installing packages...") + assert dialog.status_label.text() != "" + + def test_on_progress_truncates_long_message(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + long_msg = "x" * 200 + dialog._on_progress(long_msg) + assert len(dialog.status_label.text()) <= 80 + + def test_on_finished_re_enables_install_button(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog.install_button.setEnabled(False) + dialog._on_finished() + assert dialog.install_button.isEnabled() + + def test_on_finished_hides_progress_bar(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog.progress_bar.setVisible(True) + dialog._on_finished() + assert not dialog.progress_bar.isVisible() + + def test_on_finished_shows_completion_message(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog._on_finished() + assert "complete" in dialog.status_label.text().lower() or "restart" in dialog.status_label.text().lower() + + def test_on_error_shows_error_message(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog._on_error("something went wrong") + assert "something went wrong" in dialog.status_label.text() + + def test_on_error_re_enables_buttons(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog.install_button.setEnabled(False) + dialog.decline_button.setEnabled(False) + dialog._on_error("fail") + assert dialog.install_button.isEnabled() + assert dialog.decline_button.isEnabled() + + def test_on_error_hides_progress_bar(self, qtbot: QtBot): + dialog = CudaInstallerDialog() + qtbot.add_widget(dialog) + dialog.progress_bar.setVisible(True) + dialog._on_error("fail") + assert not dialog.progress_bar.isVisible() From 10813b1af3bf91356710f16f3f79fea9682076ba Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 17:35:54 +0300 Subject: [PATCH 16/23] Adjusting mac dependencies --- pyproject.toml | 13 +++--- uv.lock | 115 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 91 insertions(+), 37 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2ccc1ab69..a46e9cfeb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,13 @@ dependencies = [ "torch==2.2.2; sys_platform == 'darwin' and platform_machine == 'x86_64'", "torchaudio==2.2.2; sys_platform == 'darwin' and platform_machine == 'x86_64'", "ctranslate2==4.3.1; sys_platform == 'darwin' and platform_machine == 'x86_64'", - # For Linux/Windows/ARM Mac - use CPU versions from pytorch index + # For Linux/Windows - use CPU versions from pytorch index "ctranslate2>=4.6.2,<5; sys_platform != 'darwin'", - "torch==2.8.0+cpu; sys_platform != 'darwin' or platform_machine != 'x86_64'", - "torchaudio==2.8.0+cpu; sys_platform != 'darwin' or platform_machine != 'x86_64'", + "torch==2.8.0+cpu; sys_platform != 'darwin'", + "torchaudio==2.8.0+cpu; sys_platform != 'darwin'", + # For ARM Mac - use regular PyPI torch + "torch==2.8.0; sys_platform == 'darwin' and platform_machine == 'arm64'", + "torchaudio==2.8.0; sys_platform == 'darwin' and platform_machine == 'arm64'", # faster whisper need cudnn 9 "nvidia-cudnn-cu12>=9,<10; sys_platform != 'darwin'", # CUDA runtime libraries are provided by torch dependencies, no need to specify explicitly @@ -125,10 +128,10 @@ override-dependencies = [ [tool.uv.sources] torch = [ - { index = "pytorch-cpu", marker = "sys_platform != 'darwin' or platform_machine != 'x86_64'" }, + { index = "pytorch-cpu", marker = "sys_platform != 'darwin'" }, ] torchaudio = [ - { index = "pytorch-cpu", marker = "sys_platform != 'darwin' or platform_machine != 'x86_64'" }, + { index = "pytorch-cpu", marker = "sys_platform != 'darwin'" }, ] [[tool.uv.index]] name = "pytorch-cpu" diff --git a/uv.lock b/uv.lock index f33778780..98807ba86 100644 --- a/uv.lock +++ b/uv.lock @@ -37,7 +37,8 @@ dependencies = [ { name = "pyyaml" }, { name = "safetensors" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/8e/ac2a9566747a93f8be36ee08532eb0160558b07630a081a6056a9f89bf1d/accelerate-1.12.0.tar.gz", hash = "sha256:70988c352feb481887077d2ab845125024b2a137a5090d6d7a32b57d03a45df6", size = 398399, upload-time = "2025-11-21T11:27:46.973Z" } wheels = [ @@ -256,7 +257,7 @@ resolution-markers = [ dependencies = [ { name = "numpy", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, { name = "packaging", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8e/96/2b825cb874477a26478df0ce8ce3550abe81af1c7bcbc47871f0619b120c/bitsandbytes-0.49.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:17d5b57e6d51b78bcfc07da0e93db061181b25bffabfafe101dd9b75c2710872", size = 129838, upload-time = "2025-12-11T20:50:39.645Z" }, @@ -327,9 +328,11 @@ dependencies = [ { name = "stable-ts" }, { name = "submitit" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "torchcodec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm" }, { name = "transformers" }, @@ -414,9 +417,11 @@ requires-dist = [ { name = "srt-equalizer", specifier = ">=0.1.10,<0.2" }, { name = "stable-ts", specifier = ">=2.19.1,<3" }, { name = "submitit", specifier = ">=1.5.2,<2" }, - { name = "torch", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = "==2.8.0+cpu", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torch", marker = "sys_platform != 'darwin'", specifier = "==2.8.0+cpu", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torch", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==2.8.0" }, { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2" }, - { name = "torchaudio", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = "==2.8.0+cpu", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torchaudio", marker = "sys_platform != 'darwin'", specifier = "==2.8.0+cpu", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torchaudio", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==2.8.0" }, { name = "torchaudio", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2" }, { name = "torchcodec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = ">=0.9.0" }, { name = "tqdm", specifier = ">=4.67.1,<5" }, @@ -851,7 +856,8 @@ dependencies = [ { name = "cython" }, { name = "numpy" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/fd/4c58807bf855c5929ffa6da55f26dd6b9ae462a4193f5e09cc49fbbfd451/diffq-0.2.4.tar.gz", hash = "sha256:049064861e974ebf00d0badab8b324c775037371419eda3150985b9d477b5bd2", size = 157139, upload-time = "2023-05-05T12:39:43.089Z" } @@ -897,7 +903,8 @@ dependencies = [ { name = "retrying" }, { name = "submitit" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "treetable" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d5/9d/9a13947db237375486c0690f4741dd2b7e1eee20e0ffcb55dbd1b21cc600/dora_search-0.1.12.tar.gz", hash = "sha256:2956fd2c4c7e4b9a4830e83f0d4cf961be45cfba1a2f0570281e91d15ac516fb", size = 87111, upload-time = "2023-05-23T14:36:24.743Z" } @@ -1529,7 +1536,8 @@ version = "0.2.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a1/19/c9e1596b5572c786b93428d0904280e964c930fae7e6c9368ed9e1b63922/julius-0.2.7.tar.gz", hash = "sha256:3c0f5f5306d7d6016fcc95196b274cae6f07e2c9596eed314e4e7641554fbb08", size = 59640, upload-time = "2022-09-19T16:13:34.2Z" } @@ -1657,7 +1665,8 @@ dependencies = [ { name = "soundfile" }, { name = "tabulate" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2e/fd/32baf46d238f029a22b2c1762fc717ebdb85515fb48bafa395d3de5da0f5/lhotse-1.32.1.tar.gz", hash = "sha256:8b0e946d1bd2c695b09df831ea612913f1a1f103b1aea36a4b43a8778be0a3d5", size = 674412, upload-time = "2025-11-24T16:42:25.511Z" } @@ -1737,7 +1746,8 @@ dependencies = [ { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pytorch-lightning", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "torchmetrics", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2128,7 +2138,8 @@ dependencies = [ { name = "setuptools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tensorboard", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "text-unidecode", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "wget", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "wrapt", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -2432,7 +2443,8 @@ dependencies = [ { name = "numpy" }, { name = "tiktoken" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "tqdm" }, { name = "triton", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'linux2'" }, ] @@ -2445,9 +2457,11 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/ef/4ad54e3ecb1e89f7f7bdb4c7b751e43754e892d3c32a8550e5d0882565df/openunmix-1.3.0.tar.gz", hash = "sha256:cc9245ce728700f5d0b72c67f01be4162777e617cdc47f9b035963afac180fc8", size = 45889, upload-time = "2024-04-16T11:10:47.121Z" } @@ -2552,7 +2566,8 @@ dependencies = [ { name = "pyyaml" }, { name = "safetensors" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "tqdm" }, { name = "transformers" }, ] @@ -3189,7 +3204,8 @@ dependencies = [ { name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "torchmetrics", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, @@ -3728,9 +3744,11 @@ dependencies = [ { name = "numpy" }, { name = "openai-whisper" }, { name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torchaudio", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/94/d9/d326f9dbbb7da6806aa8cfc080342e5f78dc33552f4339bdc8a6251d11a3/stable_ts-2.19.1.tar.gz", hash = "sha256:0ecaf1ed93e029839569618d2da9a57b883ad04db21f0680146e0650caaf4f52", size = 189132, upload-time = "2025-08-16T16:53:48.811Z" } @@ -3967,6 +3985,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/78/29dcab24a344ffd9ee9549ec0ab2c7885c13df61cde4c65836ee275efaeb/torch-2.2.2-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:eb4d6e9d3663e26cd27dc3ad266b34445a16b54908e74725adb241aa56987533", size = 150797270, upload-time = "2024-03-27T21:08:29.623Z" }, ] +[[package]] +name = "torch" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "platform_machine == 'arm64' and sys_platform == 'darwin'", + "platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "filelock", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "fsspec", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "jinja2", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "networkx", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "setuptools", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "sympy", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/66/5c9a321b325aaecb92d4d1855421e3a055abd77903b7dab6575ca07796db/torch-2.8.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:619c2869db3ada2c0105487ba21b5008defcc472d23f8b80ed91ac4a380283b0", size = 73630478, upload-time = "2025-08-06T14:53:57.144Z" }, +] + [[package]] name = "torch" version = "2.8.0+cpu" @@ -3975,17 +4014,15 @@ resolution-markers = [ "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", "sys_platform != 'darwin' and sys_platform != 'linux'", "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "platform_machine == 'arm64' and sys_platform == 'darwin'", - "platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'", ] dependencies = [ - { name = "filelock", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "fsspec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "jinja2", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "networkx", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "setuptools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "sympy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "filelock", marker = "sys_platform != 'darwin'" }, + { name = "fsspec", marker = "sys_platform != 'darwin'" }, + { name = "jinja2", marker = "sys_platform != 'darwin'" }, + { name = "networkx", marker = "sys_platform != 'darwin'" }, + { name = "setuptools", marker = "sys_platform != 'darwin'" }, + { name = "sympy", marker = "sys_platform != 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:0e34e276722ab7dd0dffa9e12fe2135a9b34a0e300c456ed7ad6430229404eb5" }, @@ -4009,6 +4046,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/05/39/fcc68b1f848a38b57446b624be42db66fec3587972941a5b86fc19b8bd45/torchaudio-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:da3cc523696166ea525d2b3377d789da5388f36d94a20a324b09df00f1c43458", size = 3400705, upload-time = "2024-03-27T21:12:10.303Z" }, ] +[[package]] +name = "torchaudio" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "platform_machine == 'arm64' and sys_platform == 'darwin'", + "platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/cc/c2e2a3eb6ee956f73c68541e439916f8146170ea9cc61e72adea5c995312/torchaudio-2.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ddef94bf181e6447cbb05f38beaca8f6c5bb8d2b9ddced1aa3452025b9fc70d3", size = 1856736, upload-time = "2025-08-06T14:58:36.3Z" }, +] + [[package]] name = "torchaudio" version = "2.8.0+cpu" @@ -4017,11 +4069,9 @@ resolution-markers = [ "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", "sys_platform != 'darwin' and sys_platform != 'linux'", "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "platform_machine == 'arm64' and sys_platform == 'darwin'", - "platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'", ] dependencies = [ - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9377faee65a290578280ac7f4884c3586253dac2ca28c60f458ff6efe86a6b05", upload-time = "2025-08-05T20:12:08Z" }, @@ -4046,7 +4096,8 @@ dependencies = [ { name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, { name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, - { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" }, + { name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" }, + { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/2e/48a887a59ecc4a10ce9e8b35b3e3c5cef29d902c4eac143378526e7485cb/torchmetrics-1.8.2.tar.gz", hash = "sha256:cf64a901036bf107f17a524009eea7781c9c5315d130713aeca5747a686fe7a5", size = 580679, upload-time = "2025-09-03T14:00:54.077Z" } wheels = [ From 914a8f1325a18bd4b6c9c42748826bc27c331446 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 18:57:04 +0300 Subject: [PATCH 17/23] Teest fix --- buzz/transcriber/recording_transcriber.py | 11 +++++++++-- buzz/widgets/recording_transcriber_widget.py | 7 ++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/buzz/transcriber/recording_transcriber.py b/buzz/transcriber/recording_transcriber.py index 651ec59ac..e520f6ddf 100644 --- a/buzz/transcriber/recording_transcriber.py +++ b/buzz/transcriber/recording_transcriber.py @@ -3,6 +3,7 @@ import platform import os import sys +import socket import wave import time import tempfile @@ -78,6 +79,7 @@ def __init__( ) self.process = None self._stderr_lines: list[bytes] = [] + self._whisper_server_port: int = 3003 def start(self): self.is_running = True @@ -432,9 +434,14 @@ def start_local_whisper_server(self): if not os.path.exists(server_path): server_path = os.path.join(APP_BASE_DIR, "buzz", "whisper_cpp", server_executable) + # Pick a free port to avoid conflicts when multiple tests or instances run concurrently + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as _s: + _s.bind(('127.0.0.1', 0)) + self._whisper_server_port = _s.getsockname()[1] + cmd = [ server_path, - "--port", "3003", + "--port", str(self._whisper_server_port), "--inference-path", "/audio/transcriptions", "--threads", str(os.getenv("BUZZ_WHISPERCPP_N_THREADS", (os.cpu_count() or 8) // 2)), "--model", self.model_path, @@ -510,7 +517,7 @@ def start_local_whisper_server(self): self.openai_client = OpenAI( api_key="not-used", - base_url="http://127.0.0.1:3003", + base_url=f"http://127.0.0.1:{self._whisper_server_port}", timeout=30.0, max_retries=0 ) diff --git a/buzz/widgets/recording_transcriber_widget.py b/buzz/widgets/recording_transcriber_widget.py index 602a33b86..1ba710e3f 100644 --- a/buzz/widgets/recording_transcriber_widget.py +++ b/buzz/widgets/recording_transcriber_widget.py @@ -1077,6 +1077,7 @@ def on_transcriber_error(self, error: str): self.reset_record_button() self.set_recording_status_stopped() self.reset_recording_amplitude_listener() + self.transcription_stopped.emit() QMessageBox.critical( self, "", @@ -1123,7 +1124,11 @@ def closeEvent(self, event: QCloseEvent) -> None: super().closeEvent(event) return - if self.current_status == self.RecordingStatus.RECORDING: + thread_running = ( + self.transcription_thread is not None + and self.transcription_thread.isRunning() + ) + if self.current_status == self.RecordingStatus.RECORDING or thread_running: # Defer the close until the transcription thread finishes to avoid # blocking the GUI thread with a synchronous wait. event.ignore() From 3f86007f8f3f3412ea7de1186c6878ec57341b1d Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 29 Mar 2026 19:43:50 +0300 Subject: [PATCH 18/23] Teest fix --- buzz/widgets/recording_transcriber_widget.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/buzz/widgets/recording_transcriber_widget.py b/buzz/widgets/recording_transcriber_widget.py index 1ba710e3f..dc641f0d2 100644 --- a/buzz/widgets/recording_transcriber_widget.py +++ b/buzz/widgets/recording_transcriber_widget.py @@ -1124,11 +1124,7 @@ def closeEvent(self, event: QCloseEvent) -> None: super().closeEvent(event) return - thread_running = ( - self.transcription_thread is not None - and self.transcription_thread.isRunning() - ) - if self.current_status == self.RecordingStatus.RECORDING or thread_running: + if self.current_status == self.RecordingStatus.RECORDING or self.transcription_thread is not None: # Defer the close until the transcription thread finishes to avoid # blocking the GUI thread with a synchronous wait. event.ignore() From 9a3de78bb1df57b6477ff05bd6fb86a6257d0e00 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Mon, 4 May 2026 17:48:38 +0300 Subject: [PATCH 19/23] uv.lock upate --- uv.lock | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/uv.lock b/uv.lock index 98807ba86..116a7a14b 100644 --- a/uv.lock +++ b/uv.lock @@ -1129,6 +1129,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f8/0a/a3871375c7b9727edaeeea994bfff7c63ff7804c9829c19309ba2e058807/greenlet-3.3.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b01548f6e0b9e9784a2c99c5651e5dc89ffcbe870bc5fb2e5ef864e9cc6b5dcb", size = 276379, upload-time = "2025-12-04T14:23:30.498Z" }, { url = "https://files.pythonhosted.org/packages/43/ab/7ebfe34dce8b87be0d11dae91acbf76f7b8246bf9d6b319c741f99fa59c6/greenlet-3.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349345b770dc88f81506c6861d22a6ccd422207829d2c854ae2af8025af303e3", size = 597294, upload-time = "2025-12-04T14:50:06.847Z" }, { url = "https://files.pythonhosted.org/packages/a4/39/f1c8da50024feecd0793dbd5e08f526809b8ab5609224a2da40aad3a7641/greenlet-3.3.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8e18ed6995e9e2c0b4ed264d2cf89260ab3ac7e13555b8032b25a74c6d18655", size = 607742, upload-time = "2025-12-04T14:57:42.349Z" }, + { url = "https://files.pythonhosted.org/packages/77/cb/43692bcd5f7a0da6ec0ec6d58ee7cddb606d055ce94a62ac9b1aa481e969/greenlet-3.3.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c024b1e5696626890038e34f76140ed1daf858e37496d33f2af57f06189e70d7", size = 622297, upload-time = "2025-12-04T15:07:13.552Z" }, { url = "https://files.pythonhosted.org/packages/75/b0/6bde0b1011a60782108c01de5913c588cf51a839174538d266de15e4bf4d/greenlet-3.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:047ab3df20ede6a57c35c14bf5200fcf04039d50f908270d3f9a7a82064f543b", size = 609885, upload-time = "2025-12-04T14:26:02.368Z" }, { url = "https://files.pythonhosted.org/packages/49/0e/49b46ac39f931f59f987b7cd9f34bfec8ef81d2a1e6e00682f55be5de9f4/greenlet-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d9ad37fc657b1102ec880e637cccf20191581f75c64087a549e66c57e1ceb53", size = 1567424, upload-time = "2025-12-04T15:04:23.757Z" }, { url = "https://files.pythonhosted.org/packages/05/f5/49a9ac2dff7f10091935def9165c90236d8f175afb27cbed38fb1d61ab6b/greenlet-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83cd0e36932e0e7f36a64b732a6f60c2fc2df28c351bae79fbaf4f8092fe7614", size = 1636017, upload-time = "2025-12-04T14:27:29.688Z" }, @@ -1864,12 +1865,16 @@ version = "3.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } wheels = [ - { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", upload-time = "2026-02-19T22:23:09Z" }, - { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", upload-time = "2026-02-19T22:23:09Z" }, - { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", upload-time = "2026-02-19T22:23:09Z" }, - { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = "2026-02-19T22:23:11Z" }, - { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", upload-time = "2026-02-19T22:23:11Z" }, - { url = "https://download.pytorch.org/whl/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", upload-time = "2026-02-19T22:23:11Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, ] [[package]] @@ -4025,11 +4030,11 @@ dependencies = [ { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:0e34e276722ab7dd0dffa9e12fe2135a9b34a0e300c456ed7ad6430229404eb5" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:610f600c102386e581327d5efc18c0d6edecb9820b4140d26163354a99cd800d", upload-time = "2025-10-02T00:08:10Z" }, - { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:cb9a8ba8137ab24e36bf1742cb79a1294bd374db570f09fc15a5e1318160db4e", upload-time = "2025-10-02T00:10:15Z" }, - { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:2be20b2c05a0cce10430cc25f32b689259640d273232b2de357c35729132256d" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-win_arm64.whl", hash = "sha256:99fc421a5d234580e45957a7b02effbf3e1c884a5dd077afc85352c77bf41434", upload-time = "2025-10-02T00:11:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:0e34e276722ab7dd0dffa9e12fe2135a9b34a0e300c456ed7ad6430229404eb5", upload-time = "2025-10-01T23:33:41Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:610f600c102386e581327d5efc18c0d6edecb9820b4140d26163354a99cd800d", upload-time = "2025-10-01T23:33:45Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:cb9a8ba8137ab24e36bf1742cb79a1294bd374db570f09fc15a5e1318160db4e", upload-time = "2025-10-01T23:33:48Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:2be20b2c05a0cce10430cc25f32b689259640d273232b2de357c35729132256d", upload-time = "2025-10-01T23:33:52Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp312-cp312-win_arm64.whl", hash = "sha256:99fc421a5d234580e45957a7b02effbf3e1c884a5dd077afc85352c77bf41434", upload-time = "2025-10-01T23:34:10Z" }, ] [[package]] @@ -4074,8 +4079,8 @@ dependencies = [ { name = "torch", version = "2.8.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform != 'darwin'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9377faee65a290578280ac7f4884c3586253dac2ca28c60f458ff6efe86a6b05", upload-time = "2025-08-05T20:12:08Z" }, - { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:9b302192b570657c1cc787a4d487ae4bbb7f2aab1c01b1fcc46757e7f86f391e", upload-time = "2025-08-05T20:12:08Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9377faee65a290578280ac7f4884c3586253dac2ca28c60f458ff6efe86a6b05", upload-time = "2025-08-05T20:12:02Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:9b302192b570657c1cc787a4d487ae4bbb7f2aab1c01b1fcc46757e7f86f391e", upload-time = "2025-08-05T20:12:02Z" }, ] [[package]] @@ -4178,7 +4183,7 @@ wheels = [ [[package]] name = "truststore" version = "0.10.4" -source = { registry = "https://pypi.org/simple/" } +source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, From ced7df3e0205f0a26a5dc7a89bc90ba8991319e6 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Mon, 4 May 2026 18:22:04 +0300 Subject: [PATCH 20/23] Fix for finding local CUDA --- buzz/cuda_setup.py | 56 +++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/buzz/cuda_setup.py b/buzz/cuda_setup.py index 0b7bf8e56..8bae3e861 100644 --- a/buzz/cuda_setup.py +++ b/buzz/cuda_setup.py @@ -138,8 +138,25 @@ def _collect_cuda_lib_dirs(cuda_target: Path) -> list[str]: return lib_dirs +def _collect_site_packages_cuda_lib_dirs() -> list[str]: + """Return all nvidia/torch lib dirs found in any site-packages directory.""" + lib_dirs: list[str] = [] + for sp_dir in _get_site_packages_dirs(): + torch_lib = sp_dir / "torch" / "lib" + if torch_lib.exists(): + lib_dirs.append(str(torch_lib)) + nvidia_dir = sp_dir / "nvidia" + if nvidia_dir.exists(): + for pkg_dir in sorted(nvidia_dir.iterdir()): + if pkg_dir.is_dir(): + lib_subdir = pkg_dir / "lib" + if lib_subdir.exists(): + lib_dirs.append(str(lib_subdir)) + return lib_dirs + + def _setup_linux_cuda(): - """Set up CUDA libraries on Linux for snap/flatpak CUDA installs. + """Set up CUDA libraries on Linux. LD_LIBRARY_PATH is read by the dynamic linker only at process start, so preloading individual .so files with ctypes is fragile: if *any* library @@ -148,39 +165,36 @@ def _setup_linux_cuda(): or torchaudio crash with "cannot open shared object file". The reliable fix is to re-exec the current process with LD_LIBRARY_PATH - extended to include all cuda_packages lib dirs. After re-exec the dynamic - linker finds every CUDA library via the standard search path for the - entire lifetime of the process. + extended to include all cuda lib dirs. After re-exec the dynamic linker + finds every CUDA library via the standard search path for the entire + lifetime of the process. - A sentinel value in LD_LIBRARY_PATH prevents infinite re-exec loops. + A sentinel env var prevents infinite re-exec loops. """ - # Ensure cuda_packages is on sys.path so Python can import torch + # Ensure cuda_packages (snap/flatpak) is on sys.path so Python can import torch _get_site_packages_dirs() - cuda_target = _get_cuda_target_dir() - if cuda_target is None or not cuda_target.exists(): - logger.debug("CUDA setup: no cuda_packages dir found, skipping") - return - - torch_lib = cuda_target / "torch" / "lib" - if not torch_lib.exists(): - logger.debug("CUDA setup: no torch/lib in cuda_packages, skipping") + if os.environ.get("BUZZ_CUDA_SETUP_DONE"): + logger.info("CUDA setup: already done (sentinel set), proceeding") return - sentinel = str(torch_lib) - current_ld = os.environ.get("LD_LIBRARY_PATH", "") + # Collect lib dirs from snap/flatpak cuda_packages OR regular site-packages + cuda_target = _get_cuda_target_dir() + if cuda_target is not None and cuda_target.exists(): + extra_dirs = _collect_cuda_lib_dirs(cuda_target) + else: + extra_dirs = _collect_site_packages_cuda_lib_dirs() - if sentinel in current_ld.split(":"): - # Already re-exec'd (or user manually set the path) — nothing to do - logger.info("CUDA setup: LD_LIBRARY_PATH already contains cuda torch/lib, proceeding") + if not extra_dirs: + logger.debug("CUDA setup: no nvidia/torch lib dirs found, skipping") return - # Build new LD_LIBRARY_PATH: cuda_packages lib dirs prepended to existing path - extra_dirs = _collect_cuda_lib_dirs(cuda_target) + current_ld = os.environ.get("LD_LIBRARY_PATH", "") new_ld = ":".join(extra_dirs) if current_ld: new_ld = new_ld + ":" + current_ld os.environ["LD_LIBRARY_PATH"] = new_ld + os.environ["BUZZ_CUDA_SETUP_DONE"] = "1" # Re-exec the process so the dynamic linker picks up the new LD_LIBRARY_PATH. # We read the original argv from /proc/self/cmdline to preserve the exact From f06b8b1aa73fa42b02aa1893804f68b17cdc8090 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Mon, 4 May 2026 19:01:13 +0300 Subject: [PATCH 21/23] Ensuring pip --- buzz/cuda_manager.py | 46 ++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/buzz/cuda_manager.py b/buzz/cuda_manager.py index 3e9e97eda..213098d3b 100644 --- a/buzz/cuda_manager.py +++ b/buzz/cuda_manager.py @@ -178,6 +178,26 @@ def report(msg): report("CUDA installation complete. Please restart Buzz to enable GPU acceleration.") +def _ensure_pip(python: str) -> list[str]: + """Return [python, '-m', 'pip'], bootstrapping pip via ensurepip if needed.""" + hide_kwargs = _subprocess_hide_window_kwargs() + pip_cmd = [python, "-m", "pip"] + probe = subprocess.run(pip_cmd + ["--version"], capture_output=True, timeout=15, **hide_kwargs) + if probe.returncode == 0: + return pip_cmd + logger.info("pip not found for %s, bootstrapping via ensurepip...", python) + bootstrap = subprocess.run( + [python, "-m", "ensurepip", "--upgrade"], + capture_output=True, timeout=60, **hide_kwargs, + ) + if bootstrap.returncode != 0: + raise RuntimeError( + f"pip is not available for {python} and ensurepip failed. " + "Please install pip manually and try again." + ) + return pip_cmd + + def _get_pip_cmd() -> list[str]: """Return a [python, '-m', 'pip'] command that is guaranteed to work. @@ -198,38 +218,18 @@ def _get_pip_cmd() -> list[str]: python_name = "python.exe" if sys.platform == "win32" else "python3" bundled_python = internal_dir / "python" / python_name if bundled_python.is_file(): - return [str(bundled_python), "-m", "pip"] + return _ensure_pip(str(bundled_python)) # Fallback: look in PATH for candidate in ("python3.12", "python3", "python"): python = shutil.which(candidate) if python: - return [python, "-m", "pip"] + return _ensure_pip(python) raise RuntimeError( "Could not find a Python interpreter. " "Please install Python 3.12 and try again." ) - pip_cmd = [sys.executable, "-m", "pip"] - hide_kwargs = _subprocess_hide_window_kwargs() - - # Check if pip is already available - probe = subprocess.run(pip_cmd + ["--version"], capture_output=True, timeout=15, **hide_kwargs) - if probe.returncode == 0: - return pip_cmd - - # Try to bootstrap pip via ensurepip (available in CPython stdlib) - logger.info("pip not found, bootstrapping via ensurepip...") - bootstrap = subprocess.run( - [sys.executable, "-m", "ensurepip", "--upgrade"], - capture_output=True, timeout=60, **hide_kwargs, - ) - if bootstrap.returncode != 0: - raise RuntimeError( - "pip is not available and ensurepip failed. " - "Please install pip manually and try again." - ) - - return pip_cmd + return _ensure_pip(sys.executable) def _subprocess_hide_window_kwargs() -> dict[str, Any]: From 3d9ca664fddd759754e692e392f1423c2e9d9646 Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Mon, 4 May 2026 19:06:03 +0300 Subject: [PATCH 22/23] CUDA installer UI adjustments --- buzz/widgets/cuda_installer_widget.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/buzz/widgets/cuda_installer_widget.py b/buzz/widgets/cuda_installer_widget.py index f60457f9e..4b51e2633 100644 --- a/buzz/widgets/cuda_installer_widget.py +++ b/buzz/widgets/cuda_installer_widget.py @@ -107,6 +107,7 @@ def _on_install_clicked(self): self.decline_button.setEnabled(False) self.progress_bar.setVisible(True) self.log_view.setVisible(True) + self.status_label.setVisible(False) worker = _InstallWorker() worker.signals.progress.connect(self._on_progress) @@ -117,10 +118,13 @@ def _on_install_clicked(self): def _on_progress(self, message: str): self.log_view.append(message) - self.status_label.setText(message[:80]) + self.log_view.verticalScrollBar().setValue( + self.log_view.verticalScrollBar().maximum() + ) def _on_finished(self): self.progress_bar.setVisible(False) + self.status_label.setVisible(True) self.status_label.setText( _("Installation complete! Restart Buzz to enable GPU acceleration.") ) @@ -131,6 +135,7 @@ def _on_finished(self): def _on_error(self, error: str): self.progress_bar.setVisible(False) + self.status_label.setVisible(True) self.status_label.setText(_("Installation failed: {}").format(error)) self.install_button.setEnabled(True) self.decline_button.setEnabled(True) From 109fa994cad9d2a3149b5f519f5e9bcd831db6bd Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Mon, 4 May 2026 20:23:39 +0300 Subject: [PATCH 23/23] Fixed tests --- buzz/cuda_setup.py | 7 +++ buzz/transcriber/cuda_device.py | 17 ++++++ buzz/transcriber/recording_transcriber.py | 12 ++-- buzz/transcriber/whisper_file_transcriber.py | 13 +++-- buzz/transformers_whisper.py | 5 +- tests/cuda_setup_test.py | 59 ++++++++++++++------ tests/widgets/cuda_installer_widget_test.py | 13 ----- 7 files changed, 81 insertions(+), 45 deletions(-) create mode 100644 buzz/transcriber/cuda_device.py diff --git a/buzz/cuda_setup.py b/buzz/cuda_setup.py index 8bae3e861..248fa5a94 100644 --- a/buzz/cuda_setup.py +++ b/buzz/cuda_setup.py @@ -178,6 +178,13 @@ def _setup_linux_cuda(): logger.info("CUDA setup: already done (sentinel set), proceeding") return + # Never re-exec inside a multiprocessing worker — it would destroy the IPC pipe. + # The parent process already set LD_LIBRARY_PATH before spawning workers. + import multiprocessing + if multiprocessing.parent_process() is not None: + logger.debug("CUDA setup: skipping re-exec in worker subprocess") + return + # Collect lib dirs from snap/flatpak cuda_packages OR regular site-packages cuda_target = _get_cuda_target_dir() if cuda_target is not None and cuda_target.exists(): diff --git a/buzz/transcriber/cuda_device.py b/buzz/transcriber/cuda_device.py new file mode 100644 index 000000000..6a2e70e13 --- /dev/null +++ b/buzz/transcriber/cuda_device.py @@ -0,0 +1,17 @@ +import logging + + +def cuda_works() -> bool: + """Return True only if CUDA is available AND a kernel actually executes without error.""" + try: + import torch + except ImportError: + return False + if not torch.cuda.is_available() or not torch.version.cuda: + return False + try: + torch.zeros(1, device="cuda") + return True + except Exception as e: + logging.debug("CUDA smoke test failed, falling back to CPU: %s", e) + return False diff --git a/buzz/transcriber/recording_transcriber.py b/buzz/transcriber/recording_transcriber.py index e520f6ddf..300b80691 100644 --- a/buzz/transcriber/recording_transcriber.py +++ b/buzz/transcriber/recording_transcriber.py @@ -17,6 +17,7 @@ import torch import numpy as np +from buzz.transcriber.cuda_device import cuda_works import sounddevice from sounddevice import PortAudioError from openai import OpenAI @@ -88,7 +89,7 @@ def start(self): keep_samples = int(self.keep_sample_seconds * self.sample_rate) force_cpu = os.getenv("BUZZ_FORCE_CPU", "false") - use_cuda = torch.cuda.is_available() and force_cpu == "false" + use_cuda = cuda_works() and force_cpu == "false" if torch.cuda.is_available(): logging.debug(f"CUDA version detected: {torch.version.cuda}") @@ -110,12 +111,11 @@ def start(self): model_root_dir = os.getenv("BUZZ_MODEL_ROOT", model_root_dir) device = "auto" - if torch.cuda.is_available() and torch.version.cuda < "12": - logging.debug("Unsupported CUDA version (<12), using CPU") + if not cuda_works(): + logging.debug("CUDA not available or not functional, using CPU") device = "cpu" - - if not torch.cuda.is_available(): - logging.debug("CUDA is not available, using CPU") + elif torch.version.cuda < "12": + logging.debug("Unsupported CUDA version (<12), using CPU") device = "cpu" if force_cpu != "false": diff --git a/buzz/transcriber/whisper_file_transcriber.py b/buzz/transcriber/whisper_file_transcriber.py index eb65c3e7a..4d18d0f59 100644 --- a/buzz/transcriber/whisper_file_transcriber.py +++ b/buzz/transcriber/whisper_file_transcriber.py @@ -11,6 +11,8 @@ import torch import platform + +from buzz.transcriber.cuda_device import cuda_works import subprocess from platformdirs import user_cache_dir from multiprocessing.connection import Connection @@ -268,12 +270,11 @@ def transcribe_faster_whisper(cls, task: FileTranscriptionTask) -> List[Segment] force_cpu = os.getenv("BUZZ_FORCE_CPU", "false") device = "auto" - if torch.cuda.is_available() and torch.version.cuda < "12": - logging.debug("Unsupported CUDA version (<12), using CPU") + if not cuda_works(): + logging.debug("CUDA not available or not functional, using CPU") device = "cpu" - - if not torch.cuda.is_available(): - logging.debug("CUDA is not available, using CPU") + elif torch.version.cuda < "12": + logging.debug("Unsupported CUDA version (<12), using CPU") device = "cpu" if force_cpu != "false": @@ -334,7 +335,7 @@ def transcribe_faster_whisper(cls, task: FileTranscriptionTask) -> List[Segment] @classmethod def transcribe_openai_whisper(cls, task: FileTranscriptionTask) -> List[Segment]: force_cpu = os.getenv("BUZZ_FORCE_CPU", "false") - use_cuda = torch.cuda.is_available() and force_cpu == "false" + use_cuda = cuda_works() and force_cpu == "false" device = "cuda" if use_cuda else "cpu" diff --git a/buzz/transformers_whisper.py b/buzz/transformers_whisper.py index aee8a8cfb..f5a0866b6 100644 --- a/buzz/transformers_whisper.py +++ b/buzz/transformers_whisper.py @@ -9,6 +9,7 @@ import torch import requests +from buzz.transcriber.cuda_device import cuda_works from typing import Union from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline, BitsAndBytesConfig from transformers.pipelines import AutomaticSpeechRecognitionPipeline @@ -245,7 +246,7 @@ def _transcribe_whisper( ): """Transcribe using Whisper model.""" force_cpu = os.getenv("BUZZ_FORCE_CPU", "false") - use_cuda = torch.cuda.is_available() and force_cpu == "false" + use_cuda = cuda_works() and force_cpu == "false" device = "cuda" if use_cuda else "cpu" torch_dtype = torch.float16 if use_cuda else torch.float32 @@ -464,7 +465,7 @@ def _transcribe_mms( from transformers.pipelines.audio_utils import ffmpeg_read as mms_ffmpeg_read force_cpu = os.getenv("BUZZ_FORCE_CPU", "false") - use_cuda = torch.cuda.is_available() and force_cpu == "false" + use_cuda = cuda_works() and force_cpu == "false" device = "cuda" if use_cuda else "cpu" # Map language code to ISO 639-3 for MMS diff --git a/tests/cuda_setup_test.py b/tests/cuda_setup_test.py index 11193c8ed..2eb4f47ac 100644 --- a/tests/cuda_setup_test.py +++ b/tests/cuda_setup_test.py @@ -1,8 +1,5 @@ import sys -from pathlib import Path -from unittest.mock import MagicMock, patch - -import pytest +from unittest.mock import patch class TestGetCudaTargetDir: @@ -117,46 +114,57 @@ class TestSetupLinuxCuda: def test_skips_when_no_cuda_target(self, monkeypatch): monkeypatch.delenv("SNAP_USER_DATA", raising=False) monkeypatch.delenv("FLATPAK_ID", raising=False) + monkeypatch.delenv("BUZZ_CUDA_SETUP_DONE", raising=False) with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=None): - from buzz.cuda_setup import _setup_linux_cuda - _setup_linux_cuda() # should not raise + with patch("buzz.cuda_setup._collect_site_packages_cuda_lib_dirs", return_value=[]): + with patch("multiprocessing.parent_process", return_value=None): + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() # should not raise def test_skips_when_cuda_target_does_not_exist(self, monkeypatch, tmp_path): + monkeypatch.delenv("BUZZ_CUDA_SETUP_DONE", raising=False) nonexistent = tmp_path / "nonexistent" with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=nonexistent): - from buzz.cuda_setup import _setup_linux_cuda - _setup_linux_cuda() # should not raise + with patch("buzz.cuda_setup._collect_site_packages_cuda_lib_dirs", return_value=[]): + with patch("multiprocessing.parent_process", return_value=None): + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() # should not raise def test_skips_when_no_torch_lib(self, monkeypatch, tmp_path): + monkeypatch.delenv("BUZZ_CUDA_SETUP_DONE", raising=False) cuda_target = tmp_path / "cuda_packages" cuda_target.mkdir() with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): - from buzz.cuda_setup import _setup_linux_cuda - _setup_linux_cuda() # should not raise + with patch("buzz.cuda_setup._collect_site_packages_cuda_lib_dirs", return_value=[]): + with patch("multiprocessing.parent_process", return_value=None): + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() # should not raise - def test_reexecs_when_sentinel_not_in_ld_path(self, monkeypatch, tmp_path): + def test_reexecs_when_sentinel_not_set(self, monkeypatch, tmp_path): cuda_target = tmp_path / "cuda_packages" torch_lib = cuda_target / "torch" / "lib" torch_lib.mkdir(parents=True) + monkeypatch.delenv("BUZZ_CUDA_SETUP_DONE", raising=False) monkeypatch.delenv("LD_LIBRARY_PATH", raising=False) with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): with patch("buzz.cuda_setup._collect_cuda_lib_dirs", return_value=[str(torch_lib)]): - with patch("os.execv", side_effect=OSError("test")) as mock_execv: - with patch("buzz.cuda_setup._preload_linux_libraries_fallback") as mock_fallback: - from buzz.cuda_setup import _setup_linux_cuda - _setup_linux_cuda() + with patch("multiprocessing.parent_process", return_value=None): + with patch("os.execv", side_effect=OSError("test")): + with patch("buzz.cuda_setup._preload_linux_libraries_fallback") as mock_fallback: + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() - mock_fallback.assert_called_once() + mock_fallback.assert_called_once() - def test_no_reexec_when_sentinel_already_in_ld_path(self, monkeypatch, tmp_path): + def test_no_reexec_when_sentinel_already_set(self, monkeypatch, tmp_path): cuda_target = tmp_path / "cuda_packages" torch_lib = cuda_target / "torch" / "lib" torch_lib.mkdir(parents=True) - monkeypatch.setenv("LD_LIBRARY_PATH", str(torch_lib)) + monkeypatch.setenv("BUZZ_CUDA_SETUP_DONE", "1") with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): with patch("os.execv") as mock_execv: @@ -165,6 +173,21 @@ def test_no_reexec_when_sentinel_already_in_ld_path(self, monkeypatch, tmp_path) mock_execv.assert_not_called() + def test_no_reexec_in_worker_subprocess(self, monkeypatch, tmp_path): + cuda_target = tmp_path / "cuda_packages" + torch_lib = cuda_target / "torch" / "lib" + torch_lib.mkdir(parents=True) + + monkeypatch.delenv("BUZZ_CUDA_SETUP_DONE", raising=False) + + with patch("buzz.cuda_setup._get_cuda_target_dir", return_value=cuda_target): + with patch("multiprocessing.parent_process", return_value=object()): + with patch("os.execv") as mock_execv: + from buzz.cuda_setup import _setup_linux_cuda + _setup_linux_cuda() + + mock_execv.assert_not_called() + class TestSetupWindowsDllDirectories: def test_calls_add_dll_directory(self, tmp_path): diff --git a/tests/widgets/cuda_installer_widget_test.py b/tests/widgets/cuda_installer_widget_test.py index e9e22444a..61db84a63 100644 --- a/tests/widgets/cuda_installer_widget_test.py +++ b/tests/widgets/cuda_installer_widget_test.py @@ -89,19 +89,6 @@ def test_on_progress_appends_to_log(self, qtbot: QtBot): dialog._on_progress("step 1") assert "step 1" in dialog.log_view.toPlainText() - def test_on_progress_updates_status_label(self, qtbot: QtBot): - dialog = CudaInstallerDialog() - qtbot.add_widget(dialog) - dialog._on_progress("Installing packages...") - assert dialog.status_label.text() != "" - - def test_on_progress_truncates_long_message(self, qtbot: QtBot): - dialog = CudaInstallerDialog() - qtbot.add_widget(dialog) - long_msg = "x" * 200 - dialog._on_progress(long_msg) - assert len(dialog.status_label.text()) <= 80 - def test_on_finished_re_enables_install_button(self, qtbot: QtBot): dialog = CudaInstallerDialog() qtbot.add_widget(dialog)