Instructions to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M # Run inference directly in the terminal: llama cli -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M # Run inference directly in the terminal: llama cli -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Use Docker
docker model run hf.co/patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
- LM Studio
- Jan
- Ollama
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with Ollama:
ollama run hf.co/patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
- Unsloth Desktop
- Pi
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with Docker Model Runner:
docker model run hf.co/patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
- Lemonade
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Run and chat with the model
lemonade run user.GLM-5.3-Flash-REAP50-GGUF-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF:Q4_K_M" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
research: quant-drift harness, NVFP4 MTP capture/gate, and the MTP capture negative result
8654e38 verified Download research/quant_transfer.py from patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF: direct link, hf CLI and curl.
- Browser
- Download file 4.24 kB
-
https://huggingface.co/patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF/resolve/main/research/quant_transfer.py
- Command line
-
hf download hf://patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF/research/quant_transfer.py
-
curl -L -o quant_transfer.py https://huggingface.co/patrickbdevaney/GLM-5.3-Flash-REAP50-GGUF/resolve/main/research/quant_transfer.py
4.24 kB
| #!/usr/bin/env python | |
| """Does a draft head trained on one quant's hidden states transfer to another quant? | |
| The traces are being captured from IQ3_M. A draft head consumes the BASE MODEL'S hidden state, | |
| and that state is not the same tensor across quantisations - IQ3_M and IQ4_XS are different | |
| functions of the same weights. So "train on IQ3_M, serve on IQ4_XS" is a train/serve | |
| distribution shift, and whether it costs acceptance is an empirical question, not something | |
| that can be asserted from the fact that both are the same REAP checkpoint. | |
| This compares hidden states for the SAME tokens under two quants. Rows are matched by the ids | |
| each run emitted, so a tokenisation difference can never silently misalign rows. | |
| Matching is done PER SEQUENCE, not over the concatenated stream. Both runs see the same prompts, | |
| but the probe file is rebuilt by splitting and rejoining the chunk on the separator, and that | |
| round-trip can normalise a line ending here and there. One such sequence shifts every row after | |
| it, which would make the whole capture look incomparable when in fact only that sequence is. | |
| So each sequence is checked on its own and only the ones whose ids agree exactly are compared - | |
| the rest are reported as skipped, since a partial sample is a real measurement and a | |
| whole-stream abort is not. | |
| High cosine (>~0.99) means one head serves every quant. Low cosine means the head is | |
| quant-specific and the honest options are a per-quant head or a mixed-quant capture. | |
| """ | |
| import sys, numpy as np | |
| ref_bin, ref_ids, probe_bin, probe_ids = sys.argv[1:5] | |
| ref_lens, probe_lens = sys.argv[5], sys.argv[6] | |
| D = 4096 | |
| a_ids = np.fromfile(ref_ids, dtype=np.int32) | |
| b_ids = np.fromfile(probe_ids, dtype=np.int32) | |
| a_len = np.fromfile(ref_lens, dtype=np.int32) | |
| b_len = np.fromfile(probe_lens, dtype=np.int32) | |
| nseq = min(len(a_len), len(b_len)) | |
| a_off = np.concatenate([[0], np.cumsum(a_len)]) | |
| b_off = np.concatenate([[0], np.cumsum(b_len)]) | |
| # Read only the rows we actually keep. The bins are 250 MB each; there is no reason to hold | |
| # both in full when most of the file is sequences we may end up skipping anyway. | |
| A_ref = np.memmap(ref_bin, dtype=np.float16, mode="r").reshape(-1, D) | |
| B_ref = np.memmap(probe_bin, dtype=np.float16, mode="r").reshape(-1, D) | |
| keep_a, keep_b, skipped = [], [], [] | |
| for i in range(nseq): | |
| la, lb = int(a_len[i]), int(b_len[i]) | |
| ia, ib = int(a_off[i]), int(b_off[i]) | |
| if la != lb or not np.array_equal(a_ids[ia:ia+la], b_ids[ib:ib+lb]): | |
| skipped.append(i) | |
| continue | |
| keep_a.append(np.arange(ia, ia+la)) | |
| keep_b.append(np.arange(ib, ib+lb)) | |
| if not keep_a: | |
| print("FAIL: no sequence tokenised identically under both quants - not comparable") | |
| sys.exit(1) | |
| ka = np.concatenate(keep_a); kb = np.concatenate(keep_b) | |
| n = len(ka) | |
| print(f"matched {nseq-len(skipped)}/{nseq} sequences, {n} tokens" | |
| + (f"; skipped seqs {skipped} (tokenisation drift in the probe rebuild)" if skipped else "")) | |
| A = np.asarray(A_ref[ka], dtype=np.float32) | |
| B = np.asarray(B_ref[kb], dtype=np.float32) | |
| cos = (A*B).sum(1) / (np.linalg.norm(A,axis=1)*np.linalg.norm(B,axis=1) + 1e-9) | |
| rel = np.linalg.norm(A-B,axis=1) / (np.linalg.norm(A,axis=1) + 1e-9) | |
| print(f"cosine mean {cos.mean():.5f} p50 {np.percentile(cos,50):.5f} " | |
| f"p5 {np.percentile(cos,5):.5f} min {cos.min():.5f}") | |
| print(f"rel L2 mean {rel.mean():.5f} p95 {np.percentile(rel,95):.5f} max {rel.max():.5f}") | |
| print(f"rows with cosine < 0.99: {100*(cos<0.99).mean():.2f}%") | |
| print(f"rows with cosine < 0.95: {100*(cos<0.95).mean():.2f}%") | |
| m = cos.mean() | |
| print() | |
| if m >= 0.99: | |
| print("VERDICT: states track closely across quants. One head should serve all of them;") | |
| print(" confirm with a real acceptance measurement once a head exists.") | |
| elif m >= 0.95: | |
| print("VERDICT: measurable drift. A single head is likely usable but will lose some") | |
| print(" acceptance off its training quant. Prefer capturing from the quant you") | |
| print(" will actually serve, or mix quants in the capture.") | |
| else: | |
| print("VERDICT: states differ substantially. A head trained on one quant should NOT be") | |
| print(" advertised as optimal for the others - capture per-quant or mix.") | |