FROM python:3.11-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ gcc g++ git \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Pre-bake ESM-2 35M weights — ProtFunc uses esm2_t12_35M_UR50D (480d) RUN python -c "\ import esm; \ model, alphabet = esm.pretrained.esm2_t12_35M_UR50D(); \ print('ESM-2 35M baked into image')" # Static / config files COPY static/ static/ COPY go-basic.obo . COPY go_map.json . COPY go_names.json . COPY mlb_public_v1.pkl . COPY taxon_probe.json . COPY temperature_best.json . COPY platt_mammal.json . COPY unified_v1_recalibrated.json . # Model weights COPY unified_35M_v1.pth . COPY unified_35M_v1_thresholds.json . COPY baseline_res.pth . # Server COPY server.py . EXPOSE 8080 CMD ["sh", "-c", "uvicorn server:app --host 0.0.0.0 --port ${PORT:-8080}"] # UI v2 PRISM-style landing 20260509 # UI v4 credit + stage-canvases 20260509c