Spaces:
Runtime error
Runtime error
| # Tri-Netra AI AI - HuggingFace Spaces (Docker SDK) image. | |
| # | |
| # Build target: a small public demo of the layered brain-MRI tumor pipeline. | |
| # Inference is ONNX-only (~430 MB total for v3 UNet + T1c specialist + 3 | |
| # classifiers), so CPU on free Spaces is fast enough (~30-40 ms/image). | |
| # The LLM explanation defaults to HuggingFace Inference Providers (open-weight | |
| # Llama 3.3 70B + Gemma 3 27B IT via $HF_TOKEN Space secret); if no token is | |
| # set the dashboard falls back to the deterministic radiology report which is | |
| # rich on its own and zero-hallucination by construction. | |
| # | |
| # Model weights are NOT bundled into this image (the HF Space free-tier 1 GB | |
| # repo cap is too small). dashboard.py downloads them from a separate HF | |
| # Model repo (default: anannyavyas1/Tri-Netra-AI-Models) on first boot via | |
| # huggingface_hub. See scripts/upload_models_to_hf.py for how to populate | |
| # that Model repo from your local .pt -> .onnx exports. | |
| FROM python:3.11-slim | |
| # System deps: libgl/libglib for OpenCV (cv2), libgomp for ONNXruntime | |
| # parallelism, curl for the Spaces health probe. | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgl1 \ | |
| libglib2.0-0 \ | |
| libgomp1 \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| # Install Python deps first so Docker layer caching speeds up rebuilds when | |
| # code changes but requirements don't. | |
| COPY requirements-spaces.txt /app/requirements-spaces.txt | |
| RUN pip install --no-cache-dir --upgrade pip \ | |
| && pip install --no-cache-dir -r requirements-spaces.txt | |
| # Copy application code. We intentionally do NOT copy datasets, training | |
| # scripts, or any model weights; only what the dashboard actually needs at | |
| # request time. ONNX weights are fetched from anannyavyas1/Tri-Netra-AI-Models on | |
| # first boot - see _ensure_onnx_models_downloaded() in dashboard.py. | |
| COPY dashboard.py /app/dashboard.py | |
| COPY db.py /app/db.py | |
| COPY generate_pdf.py /app/generate_pdf.py | |
| COPY src /app/src | |
| COPY web_dashboard /app/web_dashboard | |
| # Empty per-model directories so .pt/.onnx downloads land in predictable | |
| # paths (find_weights_path searches these). Also drop in any small | |
| # metrics .json that's present (for /metrics) - missing is fine. | |
| COPY real_eval_current /app/real_eval_current | |
| COPY segmentation_artifacts /app/segmentation_artifacts | |
| # Spaces convention: PORT=7860 and bind 0.0.0.0. The dashboard reads both from | |
| # environment so no CLI flag is needed. | |
| ENV PORT=7860 \ | |
| HOST=0.0.0.0 \ | |
| PYTHONUNBUFFERED=1 \ | |
| PYTHONIOENCODING=utf-8 \ | |
| LOG_LEVEL=INFO | |
| # Prefer ONNX over PyTorch on the inference path. Override with ONNX_DISABLE=1 | |
| # to debug-fall-back to the PyTorch path. | |
| ENV ONNX_DISABLE= | |
| # LLM defaults for the public demo. The deployer adds HF_TOKEN as a Space | |
| # secret to enable the layered LLM pipeline; without it the dashboard returns | |
| # the deterministic radiology report (still very rich + zero hallucinations). | |
| ENV HF_MODEL_TEXT="meta-llama/Llama-3.3-70B-Instruct" \ | |
| HF_MODEL_VISION="google/gemma-3-27b-it" | |
| # Where to fetch ONNX weights from on first boot. Point at your own Model | |
| # repo if you forked. | |
| ENV HF_MODELS_REPO="anannyavyas1/Tri-Netra-AI-Models" | |
| EXPOSE 7860 | |
| # HF Spaces health probes /health (we expose it explicitly in dashboard.py). | |
| HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ | |
| CMD curl -fs http://localhost:${PORT}/health || exit 1 | |
| CMD ["python", "dashboard.py"] | |