| # HF Space container entrypoint (issue #26): pull the public serving assets, | |
| # put the OCR CSV where the app expects it, then serve the API + built SPA on | |
| # one port. The dataset is public, so no HF token is needed. | |
| set -euo pipefail | |
| DATASET="${ENDOPATH_DATASET:-reversely/tcga-ucec-embedding}" | |
| DEST="${ENDOPATH_EMBEDDINGS_DIR:-/app/data/images}" | |
| echo "downloading dataset ${DATASET} -> ${DEST} ..." | |
| # The Space has no persistent storage, so every boot re-fetches ~2470 files. A | |
| # single transient hub stall used to abort the boot under `set -e` and leave the | |
| # Space in RUNTIME_ERROR with no auto-retry (#255). snapshot_download resumes a | |
| # partial download, so retrying only fetches what is missing: ride out a transient | |
| # stall across a few attempts, and still fail loud if the download is truly broken. | |
| for attempt in 1 2 3 4 5; do | |
| if python - "$DATASET" "$DEST" <<'PY' | |
| import sys | |
| from huggingface_hub import snapshot_download | |
| snapshot_download(repo_id=sys.argv[1], repo_type="dataset", local_dir=sys.argv[2]) | |
| PY | |
| then | |
| echo "dataset download complete on attempt ${attempt}" | |
| break | |
| fi | |
| if [ "${attempt}" -eq 5 ]; then | |
| echo "dataset download failed after ${attempt} attempts, aborting" >&2 | |
| exit 1 | |
| fi | |
| echo "dataset download attempt ${attempt} failed; retrying in $((attempt * 10))s ..." >&2 | |
| sleep "$((attempt * 10))" | |
| done | |
| # The report OCR text ships under ocr/ in the dataset; report_text_for_case | |
| # reads it from data/raw/TCGA_Reports.csv. | |
| mkdir -p /app/data/raw | |
| if [ -f "${DEST}/ocr/TCGA_Reports.csv" ]; then | |
| cp -f "${DEST}/ocr/TCGA_Reports.csv" /app/data/raw/TCGA_Reports.csv | |
| fi | |
| exec uvicorn endopath.api:app --host 0.0.0.0 --port "${PORT:-7860}" | |