Spaces:
Sleeping
Sleeping
| FROM python:3.10-slim | |
| # ffmpeg is required at runtime: the browser records audio in whatever codec | |
| # MediaRecorder produces (typically webm/opus), and app.py shells out to | |
| # ffmpeg to convert it to 16kHz mono WAV before ASR inference. | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| ffmpeg \ | |
| libsndfile1 \ | |
| git \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| COPY . . | |
| ENV PORT=7860 | |
| # Same fix applied in the training/probing notebooks earlier in this project: | |
| # a broken numba-cuda shim can crash `import nemo.collections.asr` with an | |
| # unrelated "numba.cuda.types has no attribute NPDatetime" error. NeMo doesn't | |
| # need numba's CUDA-JIT target for inference (GPU tensor ops go through | |
| # PyTorch/CUDA directly), so disabling it here is a safe, cheap guard against | |
| # that entire class of failure inside the container too. | |
| ENV NUMBA_DISABLE_CUDA=1 | |
| EXPOSE 7860 | |
| RUN mkdir -p /app/results && chmod -R 777 /app/results | |
| # Single worker: app.py keeps session state in an in-memory dict (see its | |
| # docstring). Do not scale this to multiple gunicorn workers without first | |
| # moving session state to a shared store (Redis, a database, etc). | |
| CMD ["python", "app.py"] |