# Deploy the Space 1. Create a Docker Space in `build-small-hackathon/backyard-radiology-professor`. 2. Accept the MedGemma license for the account behind the token. 3. Add `HF_TOKEN` as a Space secret. 4. Push this repository unchanged. When Hugging Face GPU billing is available, startup downloads the exact GGUF revisions in `scripts/prepare_runtime.py`, prepares X-Raydar, starts the pinned CUDA llama.cpp router on port 8080, verifies both model presets, and serves Gradio on port 7860. When the official org cannot allocate paid GPU hardware, deploy the real backend on Modal. In that mode the Space serves the same Gradio workstation and proxies inference requests to Modal. Configure: - Variable `RAD_TRAINER_REMOTE_BACKEND_URL` - Secret `RAD_TRAINER_MODAL_KEY` - Secret `RAD_TRAINER_MODAL_SECRET` Use `scripts/configure_hf_space.py` to upload the application and set all three. See [deploy_modal_backend.md](deploy_modal_backend.md) for the authenticated scale-to-zero workflow. Required router aliases: - `medgemma-professor` - `medgemma-localizer` Deployment acceptance: ```bash uv run python scripts/validate_golden_cases.py --app-url https://SPACE.hf.space uv run python scripts/benchmark_runtime.py --app-url https://SPACE.hf.space ``` Commit the resulting reports as `artifacts/validation/space-golden-cases.json` and `artifacts/validation/space-runtime-benchmark.json`. The local equivalents are generated from the identical container before deployment. For a workstation GPU that also drives a desktop, record idle board usage before starting the container and pass it as `--gpu-baseline-mb`. The benchmark reports both raw board peak and application-attributed peak. Use `0` on a dedicated Space GPU. The Space profile uses an 8192-token professor context and full GPU offload. Docker Compose selects `runtime/models.local-wsl.ini`, a separate 6144-token, full-offload profile for a desktop RTX 4090. Move the Space to L40S if the L4 exceeds 22 GB peak VRAM, stays below 5 generated tokens/s, or has warm first-token latency above 20 seconds after the documented 6K fallback has also been measured.