Spaces:
Sleeping
Sleeping
| # syntax=docker/dockerfile:1 | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # LectureLens API β Dockerfile | |
| # Target: Hugging Face Spaces (Docker runtime, CPU only, port 7860) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.11-slim | |
| # ββ System dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| ffmpeg \ | |
| libsndfile1 \ | |
| libgomp1 \ | |
| curl \ | |
| git \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ββ HF Spaces requires a non-root user βββββββββββββββββββββββββββββββββββββββ | |
| RUN useradd -m -u 1000 user | |
| USER user | |
| ENV PATH="/home/user/.local/bin:$PATH" | |
| WORKDIR /home/user/app | |
| # ββ Python dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY --chown=user requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # ββ Application code ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY --chown=user app/ ./app/ | |
| COPY --chown=user thresholds.yaml . | |
| # ββ Download DNSMOS ONNX model at build time ββββββββββββββββββββββββββββββββββ | |
| # Model source: Microsoft DNS-Challenge repo (~8 MB) | |
| RUN mkdir -p dnsmos && \ | |
| curl -fL \ | |
| "https://github.com/microsoft/DNS-Challenge/raw/master/DNSMOS/DNSMOS/sig_bak_ovr.onnx" \ | |
| -o dnsmos/sig_bak_ovr.onnx && \ | |
| echo "β DNSMOS model downloaded ($(du -sh dnsmos/sig_bak_ovr.onnx | cut -f1))" | |
| # ββ Environment defaults (override in HF Space β Settings β Variables) ββββββββ | |
| ENV LECTURELENS_API_KEY="changeme" \ | |
| MAX_FILE_SIZE_MB="500" \ | |
| FRAME_SAMPLE_RATE_SECONDS="5" \ | |
| THRESHOLDS_CONFIG_PATH="thresholds.yaml" \ | |
| DNSMOS_MODEL_PATH="dnsmos/sig_bak_ovr.onnx" \ | |
| HOST="0.0.0.0" \ | |
| PORT="7860" \ | |
| PYTHONUNBUFFERED="1" \ | |
| PYTHONDONTWRITEBYTECODE="1" | |
| # ββ Port required by Hugging Face Spaces βββββββββββββββββββββββββββββββββββββ | |
| EXPOSE 7860 | |
| # ββ Health check ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| HEALTHCHECK --interval=30s --timeout=15s --start-period=90s --retries=3 \ | |
| CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/health')" | |
| # ββ Start Uvicorn βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| CMD ["uvicorn", "app.main:app", \ | |
| "--host", "0.0.0.0", \ | |
| "--port", "7860", \ | |
| "--workers", "1", \ | |
| "--log-level", "info"] | |