From 2f62ea8569c66fda672aecca3778d30382a037b7 Mon Sep 17 00:00:00 2001 From: 0xrushi <6279035+0xrushi@users.noreply.github.com> Date: Mon, 13 Oct 2025 21:53:39 -0400 Subject: [PATCH 1/2] Remove unused Dockerfiles and pyproject files for blackwell and parakeet. Update Docker configurations to accept CUDA version as a build argument in speaker recognition and ASR services. Enhance dependency management in pyproject.toml for speaker recognition and ASR services with optional CUDA versions. --- backends/advanced/Dockerfile.blackwell | 33 ---------- backends/advanced/pyproject.blackwell.toml | 53 --------------- extras/asr-services/Dockerfile_Parakeet | 6 +- .../Dockerfile_Parakeet.blackwell | 25 ------- extras/asr-services/docker-compose.yml | 2 + extras/asr-services/pyproject.blackwell.toml | 62 ------------------ extras/asr-services/pyproject.toml | 60 ++++++++++++++++- extras/speaker-recognition/Dockerfile | 7 +- extras/speaker-recognition/docker-compose.yml | 2 + extras/speaker-recognition/pyproject.toml | 65 ++++++++++++++++--- 10 files changed, 127 insertions(+), 188 deletions(-) delete mode 100644 backends/advanced/Dockerfile.blackwell delete mode 100644 backends/advanced/pyproject.blackwell.toml delete mode 100644 extras/asr-services/Dockerfile_Parakeet.blackwell delete mode 100644 extras/asr-services/pyproject.blackwell.toml diff --git a/backends/advanced/Dockerfile.blackwell b/backends/advanced/Dockerfile.blackwell deleted file mode 100644 index 892541a9..00000000 --- a/backends/advanced/Dockerfile.blackwell +++ /dev/null @@ -1,33 +0,0 @@ -FROM python:3.12-slim-bookworm AS builder - -# Install system dependencies for building -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ - libsndfile1 \ - git \ - curl \ - ffmpeg \ - && rm -rf /var/lib/apt/lists/* - -# Install uv -COPY --from=ghcr.io/astral-sh/uv:0.6.10 /uv /uvx /bin/ - -# Set up the working directory -WORKDIR /app - -# Copy dependency files -COPY pyproject.blackwell.toml pyproject.toml -COPY README.md . - -# Install dependencies using uv -RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync - - -# Copy application code -COPY . . - - -# Run the application -CMD ["uv", "run", "python3", "src/advanced_omi_backend/main.py"] diff --git a/backends/advanced/pyproject.blackwell.toml b/backends/advanced/pyproject.blackwell.toml deleted file mode 100644 index 2f661dea..00000000 --- a/backends/advanced/pyproject.blackwell.toml +++ /dev/null @@ -1,53 +0,0 @@ -[project] -name = "advanced-omi-backend" -version = "0.1.0" -description = "Add your description here" -readme = "README.md" -requires-python = ">=3.12" -dependencies = [ - "easy-audio-interfaces>=0.5.1", - "fastapi>=0.115.12", - "mem0ai>=0.1.111", - "motor>=3.7.1", - "ollama>=0.4.8", - "python-dotenv>=1.1.0", - "uvicorn>=0.34.2", - "wyoming>=1.6.1", - "aiohttp>=3.8.0", - "langfuse==3.3.0", - "spacy>=3.8.2", - "en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl", -] - -[dependency-groups] -deepgram = [ - "deepgram-sdk>=4.0.0", -] -dev = [ - "black>=25.1.0", - "isort>=6.0.1", -] -tests = [ - "pytest>=8.4.1", - "pytest-asyncio>=1.0.0", -] - - -[tool.isort] -profile = "black" - -[tool.uv.sources] -useful-moonshine-onnx = { git = "https://github.com/usefulsensors/moonshine.git", subdirectory = "moonshine-onnx" } -torchaudio = { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" } -torchvision = { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" } -torch = [ - { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" }, -] - -[[tool.uv.index]] -name = "pypi" -url = "https://pypi.org/simple" - -[[tool.uv.index]] -name = "pytorch-cu128" -url = "https://download.pytorch.org/whl/cu128" diff --git a/extras/asr-services/Dockerfile_Parakeet b/extras/asr-services/Dockerfile_Parakeet index a67bd494..91e4ba8b 100644 --- a/extras/asr-services/Dockerfile_Parakeet +++ b/extras/asr-services/Dockerfile_Parakeet @@ -2,6 +2,10 @@ ######################### builder ################################# FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder + +# Accept CUDA version as build argument +ARG CUDA_VERSION + WORKDIR /app # NeMo and texterrors need libs and C++ compiler @@ -13,7 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ # Dependency manifest first for cache‑friendly installs COPY pyproject.toml uv.lock ./ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-install-project --group parakeet + uv sync --no-install-project --group parakeet --extra ${CUDA_VERSION} # Should prepare the .venv for use :) diff --git a/extras/asr-services/Dockerfile_Parakeet.blackwell b/extras/asr-services/Dockerfile_Parakeet.blackwell deleted file mode 100644 index 2870eb27..00000000 --- a/extras/asr-services/Dockerfile_Parakeet.blackwell +++ /dev/null @@ -1,25 +0,0 @@ -# syntax=docker/dockerfile:1 - -######################### builder ################################# -FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder -WORKDIR /app - -# NeMo and texterrors need libs and C++ compiler -RUN apt-get update && apt-get install -y --no-install-recommends \ - libsndfile1 \ - build-essential git portaudio19-dev ffmpeg \ - && rm -rf /var/lib/apt/lists/* - -# Dependency manifest first for cache‑friendly installs -COPY pyproject.blackwell.toml ./pyproject.toml -RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-install-project --group parakeet - -RUN uv pip install --upgrade --no-deps --force-reinstall "numpy<2.0" - -COPY . . - -ENV PATH="/app/.venv/bin:$PATH" - -EXPOSE 8765 -CMD ["python", "parakeet-offline.py", "--port", "8765"] diff --git a/extras/asr-services/docker-compose.yml b/extras/asr-services/docker-compose.yml index 6ea39a77..73af530e 100644 --- a/extras/asr-services/docker-compose.yml +++ b/extras/asr-services/docker-compose.yml @@ -3,6 +3,8 @@ services: build: context: . dockerfile: Dockerfile_Parakeet + args: + CUDA_VERSION: ${CUDA_VERSION:-cu128} image: parakeet-asr:latest ports: - "${PARAKEET_HOST_PORT:-8767}:${PARAKEET_CONTAINER_PORT:-8765}" diff --git a/extras/asr-services/pyproject.blackwell.toml b/extras/asr-services/pyproject.blackwell.toml deleted file mode 100644 index 75435a19..00000000 --- a/extras/asr-services/pyproject.blackwell.toml +++ /dev/null @@ -1,62 +0,0 @@ -[project] -name = "asr-services" -version = "0.1.0" -description = "Wyoming compatible WebSocket ASR server for friend-lite" -requires-python = ">=3.10" - -dependencies = [ - "torch>=2.3", - "torchaudio>=2.3", - "websockets>=12.0", - "numpy>=1.26", - "soundfile>=0.12", - "friend-lite-sdk>=0.1.0", - "fastapi>=0.115.12", - "uvicorn>=0.34.2", - "silero-vad>=5.1.2", - "wyoming>=1.6.1", - "easy-audio-interfaces>=0.4.2", -] - -[dependency-groups] -demo = [ - "fastrtc>=0.0.23", - "gradio>=4.0", - "sounddevice>=0.5.1", -] -dev = [ - "black>=25.1.0", -] -#moonshine = [ -# "useful-moonshine-onnx", -#] -parakeet = [ - "nemo-toolkit[asr]>=2.2.0", - "cuda-python>=12.3", - "numpy>=1.26,<2.0", -] - -[tool.uv] -compile-bytecode = false -conflicts = [ - [ - { group = "demo" }, - { group = "parakeet" } - ] -] - -[tool.uv.sources] -#useful-moonshine-onnx = { git = "https://github.com/usefulsensors/moonshine.git", subdirectory = "moonshine-onnx" } -torchaudio = { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" } -torchvision = { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" } -torch = [ - { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" }, -] - -[[tool.uv.index]] -name = "pypi" -url = "https://pypi.org/simple" - -[[tool.uv.index]] -name = "pytorch-cu128" -url = "https://download.pytorch.org/whl/cu128" diff --git a/extras/asr-services/pyproject.toml b/extras/asr-services/pyproject.toml index 2951167e..29a80808 100644 --- a/extras/asr-services/pyproject.toml +++ b/extras/asr-services/pyproject.toml @@ -5,8 +5,6 @@ description = "Wyoming compatible WebSocket ASR server for friend-lite" requires-python = ">=3.10" dependencies = [ - "torch>=2.3", - "torchaudio>=2.3", "websockets>=12.0", "numpy>=1.26", "soundfile>=0.12", @@ -19,17 +17,67 @@ dependencies = [ "httpx>=0.28.1", ] +[project.optional-dependencies] +local-audio = [ + "easy-audio-interfaces[local-audio]>=0.7.1", +] + +cu121 = [ + "torch>=2.3", + "torchaudio>=2.3", +] + +cu126 = [ + "torch>=2.3", + "torchaudio>=2.3", +] + +cu128 = [ + "torch>=2.3", + "torchaudio>=2.3", +] + [tool.uv] compile-bytecode = true conflicts = [ [ { group = "demo" }, { group = "parakeet" } - ] + ], + [ + { extra = "cu121" }, + { extra = "cu126" }, + { extra = "cu128" }, + ], ] [tool.uv.sources] useful-moonshine-onnx = { git = "https://github.com/usefulsensors/moonshine.git", subdirectory = "moonshine-onnx" } +torch = [ + { index = "pytorch-cu121", extra = "cu121" }, + { index = "pytorch-cu126", extra = "cu126" }, + { index = "pytorch-cu128", extra = "cu128" }, +] +torchaudio = [ + { index = "pytorch-cu121", extra = "cu121" }, + { index = "pytorch-cu126", extra = "cu126" }, + { index = "pytorch-cu128", extra = "cu128" }, +] + +[[tool.uv.index]] +name = "pytorch-cu121" +url = "https://download.pytorch.org/whl/cu121" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu126" +url = "https://download.pytorch.org/whl/cu126" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu128" +url = "https://download.pytorch.org/whl/cu128" +explicit = true [dependency-groups] demo = [ @@ -37,6 +85,7 @@ demo = [ "gradio>=5.29.0", "sounddevice>=0.5.1", ] + dev = [ "black>=25.1.0", "requests>=2.31.0", @@ -46,8 +95,13 @@ dev = [ moonshine = [ "useful-moonshine-onnx", ] + parakeet = [ "nemo-toolkit[asr]>=2.2.0", "cuda-python>=12.3", "numpy>=1.26,<2.0", ] + +[build-system] +requires = ["setuptools>=64", "wheel"] +build-backend = "setuptools.build_meta" diff --git a/extras/speaker-recognition/Dockerfile b/extras/speaker-recognition/Dockerfile index 06d66f1b..66c80c98 100644 --- a/extras/speaker-recognition/Dockerfile +++ b/extras/speaker-recognition/Dockerfile @@ -1,5 +1,7 @@ FROM python:3.12-bookworm +ARG CUDA_VERSION + # Install system dependencies including PortAudio for pyaudio RUN apt-get update && apt-get install -y \ build-essential \ @@ -17,14 +19,13 @@ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv # Copy dependency files first (for better caching) COPY pyproject.toml ./ -COPY uv.lock ./ # Create minimal package structure for dependency installation RUN mkdir -p src/simple_speaker_recognition COPY src/simple_speaker_recognition/__init__.py src/simple_speaker_recognition/ # Install dependencies and package -RUN uv sync --no-dev +RUN uv sync --no-dev --extra ${CUDA_VERSION} # Create directories RUN mkdir -p /app/audio_chunks /app/debug /app/data /models @@ -37,4 +38,4 @@ ENV PYTHONPATH=/app EXPOSE 8085 # Run the service -CMD ["uv", "run", "--no-dev", "simple-speaker-service"] \ No newline at end of file +CMD ["uv", "run", "--extra", "${CUDA_VERSION}", "--no-dev", "simple-speaker-service"] \ No newline at end of file diff --git a/extras/speaker-recognition/docker-compose.yml b/extras/speaker-recognition/docker-compose.yml index 96dac6a4..213700e7 100644 --- a/extras/speaker-recognition/docker-compose.yml +++ b/extras/speaker-recognition/docker-compose.yml @@ -42,6 +42,8 @@ services: build: context: . dockerfile: Dockerfile + args: + CUDA_VERSION: ${CUDA_VERSION:-cu121} deploy: resources: reservations: diff --git a/extras/speaker-recognition/pyproject.toml b/extras/speaker-recognition/pyproject.toml index 4a48f513..fa7987ad 100644 --- a/extras/speaker-recognition/pyproject.toml +++ b/extras/speaker-recognition/pyproject.toml @@ -28,13 +28,67 @@ dependencies = [ "alembic>=1.13.0", # Data processing "pandas>=2.0.0", - "scikit-learn>=1.4.0", # For t-SNE/UMAP visualization + "scikit-learn>=1.4.0", "umap-learn>=0.5.3", "faiss-cpu>=1.9", +] + +[project.optional-dependencies] +local-audio = [ + "easy-audio-interfaces[local-audio]>=0.7.1", +] + +cu121 = [ + "torch>=2.0.0", + "torchaudio>=2.0.0", +] + +cu126 = [ + "torch>=2.0.0", + "torchaudio>=2.0.0", +] + +cu128 = [ "torch>=2.0.0", "torchaudio>=2.0.0", ] +[tool.uv] +conflicts = [ + [ + { extra = "cu121" }, + { extra = "cu126" }, + { extra = "cu128" }, + ], +] + +[tool.uv.sources] +torch = [ + { index = "pytorch-cu121", extra = "cu121" }, + { index = "pytorch-cu126", extra = "cu126" }, + { index = "pytorch-cu128", extra = "cu128" }, +] +torchaudio = [ + { index = "pytorch-cu121", extra = "cu121" }, + { index = "pytorch-cu126", extra = "cu126" }, + { index = "pytorch-cu128", extra = "cu128" }, +] + +[[tool.uv.index]] +name = "pytorch-cu121" +url = "https://download.pytorch.org/whl/cu121" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu126" +url = "https://download.pytorch.org/whl/cu126" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu128" +url = "https://download.pytorch.org/whl/cu128" +explicit = true + [build-system] requires = ["setuptools>=64", "wheel"] build-backend = "setuptools.build_meta" @@ -42,11 +96,6 @@ build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] -[project.optional-dependencies] -local-audio = [ - "easy-audio-interfaces[local-audio]>=0.7.1", -] - [project.scripts] simple-speaker-service = "simple_speaker_recognition.api.service:main" simple-speaker-web = "simple_speaker_recognition.web.app:main" @@ -59,8 +108,8 @@ dev = [ test = [ "pytest", - "requests", # For integration tests + "requests", ] [tool.isort] -profile = "black" +profile = "black" From d4423aa476792803096d5865c1064bf6e5156c0f Mon Sep 17 00:00:00 2001 From: 0xrushi <6279035+0xrushi@users.noreply.github.com> Date: Mon, 13 Oct 2025 21:57:28 -0400 Subject: [PATCH 2/2] 121 default --- extras/asr-services/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/asr-services/docker-compose.yml b/extras/asr-services/docker-compose.yml index 73af530e..65a621cf 100644 --- a/extras/asr-services/docker-compose.yml +++ b/extras/asr-services/docker-compose.yml @@ -4,7 +4,7 @@ services: context: . dockerfile: Dockerfile_Parakeet args: - CUDA_VERSION: ${CUDA_VERSION:-cu128} + CUDA_VERSION: ${CUDA_VERSION:-cu121} image: parakeet-asr:latest ports: - "${PARAKEET_HOST_PORT:-8767}:${PARAKEET_CONTAINER_PORT:-8765}"