File size: 2,846 Bytes
fca5ceb c7e27e5 60b8d69 fca5ceb 6d6c2e6 fca5ceb 60b8d69 fca5ceb a4e83c4 fca5ceb 60b8d69 fca5ceb 60b8d69 fca5ceb 60b8d69 fca5ceb 04a1131 fca5ceb 04a1131 fca5ceb c00e850 fca5ceb c0a7163 60b8d69 c7e27e5 14f78a8 a4e83c4 c7e27e5 0db04e6 c00e850 fca5ceb 60b8d69 fca5ceb c7e27e5 c0a7163 fca5ceb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | # NeuroBridge Enterprise — Hugging Face Spaces deployment image
# Single container running FastAPI (port 8000) + Streamlit (port 7860).
# HF Spaces routes :7860 to the public URL automatically.
#
# Build philosophy: install deps + copy code + seed lightweight stub
# artifacts. Heavy pipeline runs (BBB train, EEG/MRI feature extraction,
# RAG ingest) live in docker-entrypoint.sh so they happen on first
# container start — the build can't fail because of pipeline logic, and
# the runtime is idempotent (no re-train if artifacts are present).
FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
DEPLOY_ENV=hf_spaces
# --- system deps for RDKit, nibabel, MNE ---
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
git \
libgomp1 \
libxrender1 \
libsm6 \
libxext6 \
supervisor \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# --- Python deps ---
# Install CPU-only torch first to avoid pulling ~2GB of NVIDIA CUDA wheels
# (cublas/cudnn/nccl/...) that we never use on a CPU-only HF Space and which
# blow past the build-time disk budget. Subsequent pip install -r sees torch
# already at the pinned version and skips it.
COPY requirements.txt ./
RUN pip install --index-url https://download.pytorch.org/whl/cpu \
torch==2.4.1 torchvision==0.19.1 \
&& pip install -r requirements.txt
# --- project source ---
COPY src/ ./src/
COPY tests/fixtures/ ./tests/fixtures/
COPY scripts/ ./scripts/
COPY supervisord.conf ./supervisord.conf
COPY docker-entrypoint.sh ./docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh
# --- Demo-time stub artifacts (MRI 2D / MRI volumetric ONNX / EEG joblib /
# clinical TF-IDF RAG / axial PNG fixture). Idempotent. Wrapped in
# `|| true` so a build-time failure here doesn't kill the image — the
# entrypoint re-runs the same script at container start.
RUN python scripts/seed_demo_artifacts.py || echo "WARN: seed_demo_artifacts failed at build, entrypoint will retry"
# Seed kb_sample docs into the knowledge_base directory; entrypoint will
# build the FAISS index from these on first start.
COPY tests/fixtures/kb_sample/ ./data/knowledge_base/seed/
# --- HF Spaces convention ---
EXPOSE 7860
# --- launch FastAPI + Streamlit under supervisord ---
# docker-entrypoint.sh handles all the heavy lifting on first start:
# - copy raw fixtures into data/raw if missing
# - run BBB pipeline + train BBB classifier if artifacts missing
# - run EEG pipeline if features parquet missing
# - run MRI pipeline if features parquet missing
# - build FAISS index if missing
# - re-seed demo stub artifacts if missing
ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["supervisord", "-n", "-c", "/app/supervisord.conf"]
|