Spaces:
Running
Running
| # Deploying MLX Model Explorer | |
| The Space and dataset are created **private**, verified end to end, and only then made public. | |
| Prerequisites: `hf auth login` as a member of `mlx-community` with write access, plus the project venv (`uv pip install -r requirements.txt`). | |
| ## 1. Verify locally | |
| ```bash | |
| .venv/bin/python -m pytest | |
| EXPLORER_SINK=local EXPLORER_FLUSH_SECONDS=20 .venv/bin/uvicorn app.main:app --port 7860 | |
| # walk through the UI; events land in .runtime/local_dataset/data/events/ | |
| docker build --platform linux/amd64 -t mlx-model-explorer . \ | |
| && docker run --rm -p 7860:7860 -e EXPLORER_SINK=local mlx-model-explorer | |
| ``` | |
| ## 2. Create private repos | |
| ```bash | |
| .venv/bin/python scripts/deploy.py status | |
| .venv/bin/python scripts/deploy.py create # refuses if the Space exists; add --allow-existing-dataset if the dataset was created earlier | |
| ``` | |
| This creates `mlx-community/mlx-model-explorer-data` (private dataset, card uploaded) and `codelion/mlx-model-explorer` (private Docker Space with `EXPLORER_SINK=hub`, `DATASET_REPO`, `EXPLORER_FLUSH_SECONDS=600`). | |
| > **Why the Space isn't in `mlx-community`:** Hugging Face now requires a Team or Enterprise plan for an organization to run Docker or Gradio Spaces on free CPU (`402 Payment Required`). The dataset can live in the org. Once an org admin has a plan or a hardware grant, deploy there with `SPACE_REPO=mlx-community/mlx-model-explorer scripts/deploy.py create --allow-existing-dataset` followed by `upload`. | |
| ## 3. Dataset write token | |
| Create a **fine-grained** token at https://huggingface.co/settings/tokens with *write* permission on `mlx-community/mlx-model-explorer-data` only. Don't use a personal all-access token: anything in a Space secret is available to the running app. | |
| ```bash | |
| HF_DATASET_WRITE_TOKEN=hf_xxx .venv/bin/python scripts/deploy.py secret | |
| ``` | |
| ## 4. Test the ingestion path against the private dataset from this machine | |
| ```bash | |
| EXPLORER_SINK=hub EXPLORER_DATA_PREFIX=data/_test EXPLORER_FLUSH_SECONDS=30 \ | |
| HF_TOKEN=$(cat ~/.cache/huggingface/token) .venv/bin/uvicorn app.main:app --port 7860 | |
| ``` | |
| ## 5. Upload and test the private Space | |
| ```bash | |
| .venv/bin/python scripts/deploy.py variable EXPLORER_DATA_PREFIX data/_test # keep test events separate | |
| .venv/bin/python scripts/deploy.py upload | |
| .venv/bin/python scripts/deploy.py status # wait for RUNNING | |
| ``` | |
| Open https://huggingface.co/spaces/codelion/mlx-model-explorer while logged in. Run the full flow, then confirm a shard appears under `data/_test/` in the dataset (after the flush interval, or restart the Space to force a flush). | |
| To submit a benchmark to the private Space, use its direct URL and a token: | |
| ```bash | |
| python bench/mlx_explorer_bench.py --model mlx-community/Qwen3-0.6B-4bit \ | |
| --submit https://codelion-mlx-model-explorer.hf.space --hf-token $(cat ~/.cache/huggingface/token) | |
| ``` | |
| ## 6. Go public (only after review) | |
| ```bash | |
| .venv/bin/python scripts/deploy.py variable EXPLORER_DATA_PREFIX data/events | |
| .venv/bin/python scripts/deploy.py clean-test-data | |
| .venv/bin/python scripts/deploy.py publish --yes-make-public | |
| ``` | |
| `publish` refuses while `data/_test/` still exists. | |
| ## Updating | |
| Change code, run the tests, `docker build` locally, then `scripts/deploy.py upload -m "what changed"`. Events are append-only, so redeploys never touch existing data. On shutdown the app flushes buffered events, and anything that fails to upload is retried from the on-disk spool. | |
| ## Kill switch | |
| `scripts/deploy.py variable EXPLORER_SINK off` stops all collection. The UI keeps working and the event endpoint accepts nothing. | |