This repository holds the folder structure and helper scripts for local model servers.
When I say a model is “running,” I mean the local server process serving that model is running. The scripts in each model folder start and stop that server, usually exposing an OpenAI-compatible endpoint on localhost.
mlx/for MLX-served modelsgguf/for GGUF models used withllama.cpp- Gemma 4 can be tested in both families: MLX for the experimental E4B-it and 26B-A4B 4bit builds, GGUF for the llama.cpp builds
- Qwen 3.5 currently has MLX folders for both
0.8Band9B - each model lives in its own subfolder
- each model folder uses the same script names:
start.shstop.sh
- the repo root has helper scripts:
status_check_all_models.shstop_all_models.sh
- Clone the repo.
- Install the runtime you need:
mlx-lmfor the Qwen 3.5 folders and the Gemma 4 MLX folders, ideally in the Hermes venv or another Python that can importmlx_lmllama.cppfor the Gemma 4 GGUF folders
- Download the model files into the matching model folder.
- Run that folder’s
start.sh.
Download into:
~/Models/mlx/qwen3.5/Qwen3.5-0.8B/
Example:
hf download Qwen/Qwen3.5-0.8B --local-dir ~/Models/mlx/qwen3.5/Qwen3.5-0.8BDownload into:
~/Models/mlx/qwen3.5/Qwen3.5-9B/
Example:
python3 - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="mlx-community/Qwen3.5-9B-MLX-4bit",
local_dir="/Users/michaeldanko/Models/mlx/qwen3.5/Qwen3.5-9B",
local_dir_use_symlinks=False,
)
PYHermes should point its model name at the exact local path returned by the server, or a stable served id if the MLX server exposes one.
Download into:
~/Models/mlx/gemma4/gemma-4-e4b-it-4bit/
Hermes should point its model name at the exact local path returned by the server, not the short name. For this model, that is:
/Users/michaeldanko/Models/mlx/gemma4/gemma-4-e4b-it-4bit
Example:
python3 - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="mlx-community/gemma-4-e4b-it-4bit",
local_dir="/Users/michaeldanko/Models/mlx/gemma4/gemma-4-e4b-it-4bit",
local_dir_use_symlinks=False,
)
PYDownload into:
~/Models/mlx/gemma4/gemma-4-26b-a4b-it-4bit/
Example:
python3 - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="mlx-community/gemma-4-26b-a4b-it-4bit",
local_dir="/Users/michaeldanko/Models/mlx/gemma4/gemma-4-26b-a4b-it-4bit",
local_dir_use_symlinks=False,
)
PYDownload into:
~/Models/gguf/gemma4/gemma-4-e4b-it-Q4_K_M/
Example:
hf download ggml-org/gemma-4-E4B-it-GGUF gemma-4-e4b-it-Q4_K_M.gguf \
--local-dir ~/Models/gguf/gemma4/gemma-4-e4b-it-Q4_K_MDownload into:
~/Models/gguf/gemma4/gemma-4-26B-A4B-it-Q4_K_M/
Example:
hf download ggml-org/gemma-4-26B-A4B-it-GGUF gemma-4-26B-A4B-it-Q4_K_M.gguf \
--local-dir ~/Models/gguf/gemma4/gemma-4-26B-A4B-it-Q4_K_M- The repo is intended to be safe to publish publicly. Large model files, caches, logs, and pid files are ignored by git.
- The scripts are the portable part. The model payloads are downloaded separately on each machine.
- If a model changes, update the matching folder only and keep the script names the same.
- For llama.cpp models, the start script can enforce a runtime context directly with
--ctx-size. - For MLX models, the current server CLI does not expose a matching context override flag, so the script records the intended model context and Hermes profiles should use the same
context_length.