Spaces:
Sleeping
Sleeping
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # DDI Checker β HuggingFace Spaces Dockerfile | |
| # | |
| # HuggingFace Spaces requirements: | |
| # β’ Container must listen on port 7860 (mapped automatically by HF) | |
| # β’ The image is run as a non-root user; data must live in /app | |
| # β’ Secrets (API keys) are injected as Space Secrets β environment variables | |
| # | |
| # Large binary assets (FAISS index, GNN weights) should be committed with | |
| # Git LFS **or** downloaded at build time using the RUN curl/wget block below. | |
| # | |
| # Build locally: | |
| # docker build -t ddi-checker . | |
| # docker run -p 7860:7860 ddi-checker | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.10-slim | |
| # System deps β libgomp is required by faiss-cpu | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgomp1 \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| # ββ Python dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Copy requirements first so Docker can cache this layer independently of code. | |
| COPY requirements.txt . | |
| # Install CPU-only PyTorch (much smaller image; HuggingFace Spaces free tier | |
| # has no GPU). Override the default torch index so we don't pull CUDA wheels. | |
| RUN pip install --no-cache-dir \ | |
| torch==2.2.2 torchvision==0.17.2 \ | |
| --index-url https://download.pytorch.org/whl/cpu | |
| # Install torch-geometric CPU wheels | |
| RUN pip install --no-cache-dir \ | |
| torch_geometric \ | |
| pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv \ | |
| -f https://data.pyg.org/whl/torch-2.2.2+cpu.html || \ | |
| pip install --no-cache-dir torch_geometric | |
| # Install the rest of the project dependencies | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # ββ Application code ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY . . | |
| # NOTE: sentence-transformer model is loaded lazily at runtime (only when | |
| # use_rag=True is passed to /api/check). Pre-downloading here caused numpy | |
| # ABI conflicts during build; the lazy loader in _ensure_faiss() handles it. | |
| # ββ HuggingFace Spaces runs on port 7860 βββββββββββββββββββββββββββββββββββββ | |
| EXPOSE 7860 | |
| # Set env vars expected by the app | |
| ENV PYTHONUNBUFFERED=1 \ | |
| TRANSFORMERS_NO_TF=1 \ | |
| TF_CPP_MIN_LOG_LEVEL=3 \ | |
| FLASK_ENV=production | |
| # Gunicorn: single worker (avoids double-loading the 2.5 GB FAISS index), | |
| # generous timeout for the first request that triggers background FAISS load. | |
| CMD ["python", "-m", "gunicorn", \ | |
| "--workers", "1", \ | |
| "--threads", "4", \ | |
| "--bind", "0.0.0.0:7860", \ | |
| "--timeout", "120", \ | |
| "--access-logfile", "-", \ | |
| "app:app"] | |