Spaces:
Sleeping
Sleeping
| # MyAbs — HF Docker Space image. | |
| # | |
| # Why Docker (not the Gradio SDK): ANARCI is bioconda-only and OpenMM/pdbfixer | |
| # are conda-forge — none install cleanly from PyPI. A miniforge base lets us | |
| # recreate the exact stack verified in WSL conda `base` (2026-07). | |
| # | |
| # Layer order matters: conda deps first (so pip sees anarci/torch already | |
| # satisfied and never tries to pull the non-existent PyPI anarci or a CUDA torch). | |
| FROM condaforge/miniforge3:latest | |
| # ---- conda-only deps (pin python to mirror the verified env) -------------- | |
| # anarci + hmmer -> bioconda (IMGT numbering; hmmer is ANARCI's engine) | |
| # openmm + pdbfixer -> conda-forge (ABodyBuilder2 structure refinement) | |
| # biopython is used for Shrake-Rupley SASA (exposure gating of liability flags); | |
| # it also comes in via anarci, but pin it explicitly since the app now needs it. | |
| RUN mamba install -y -n base \ | |
| -c conda-forge -c bioconda \ | |
| python=3.13 anarci hmmer openmm pdbfixer biopython && \ | |
| mamba clean -afy | |
| # ---- pip deps ------------------------------------------------------------- | |
| # CPU-only torch FIRST so ImmuneBuilder sees torch satisfied and does not pull | |
| # the multi-GB CUDA build. | |
| RUN pip install --no-cache-dir \ | |
| torch --index-url https://download.pytorch.org/whl/cpu && \ | |
| pip install --no-cache-dir \ | |
| ImmuneBuilder gradio py3Dmol | |
| # The pip package ships WITHOUT the ~674MB ABodyBuilder2 ensemble — it downloads | |
| # on first init. Do that here at BUILD time (as root) so the weights are baked | |
| # into the image (world-readable), avoiding a runtime download AND the | |
| # PermissionError the non-root runtime user would hit writing into site-packages. | |
| RUN python -c "from ImmuneBuilder import ABodyBuilder2; ABodyBuilder2()" | |
| # ---- HF Spaces requirement: run as uid 1000 with a writable home ---------- | |
| # The miniforge base already has a user at uid 1000, so -o allows the dup uid | |
| # while still giving us a clean "user" account + /home/user. | |
| RUN useradd -m -o -u 1000 user | |
| USER user | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH \ | |
| GRADIO_SERVER_NAME=0.0.0.0 \ | |
| GRADIO_SERVER_PORT=7860 | |
| WORKDIR /home/user/app | |
| COPY --chown=user:user app.py . | |
| EXPOSE 7860 | |
| CMD ["python", "app.py"] | |