Image-Text-to-Text
GGUF
llama.cpp
rocm
amd
rocmfp4
rocmfpx
strix-halo
amd-strix-halo
gfx1151
ryzen-ai-max
ryzen-ai-max-395
radeon-8060s
Mixture of Experts
reasoning
multimodal
vision
nex
qwen3.5
quantized
conversational
Instructions to use kingjones777/Nex-N2.5-mini-ROCmFP4-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 kingjones777/Nex-N2.5-mini-ROCmFP4-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 kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0 # Run inference directly in the terminal: llama cli -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0 # Run inference directly in the terminal: llama cli -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
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 kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0 # Run inference directly in the terminal: ./llama-cli -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
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 kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
Use Docker
docker model run hf.co/kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
- LM Studio
- Jan
- vLLM
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
- Ollama
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF with Ollama:
ollama run hf.co/kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
- Unsloth Desktop
- Pi
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
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": "kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF with Docker Model Runner:
docker model run hf.co/kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
- Lemonade
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
Run and chat with the model
lemonade run user.Nex-N2.5-mini-ROCmFP4-GGUF-Q4_0
List all available models
lemonade list
- Hermes Agent
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-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 kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
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 kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0
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 "kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF:Q4_0" \ --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"
Model card: measured results, reproduction, known issues
Browse files
README.md
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
base_model: nex-agi/Nex-N2.5-mini
|
| 4 |
+
base_model_relation: quantized
|
| 5 |
+
pipeline_tag: image-text-to-text
|
| 6 |
+
library_name: gguf
|
| 7 |
+
tags:
|
| 8 |
+
- gguf
|
| 9 |
+
- llama.cpp
|
| 10 |
+
- rocm
|
| 11 |
+
- amd
|
| 12 |
+
- rocmfp4
|
| 13 |
+
- rocmfpx
|
| 14 |
+
- strix-halo
|
| 15 |
+
- amd-strix-halo
|
| 16 |
+
- gfx1151
|
| 17 |
+
- ryzen-ai-max
|
| 18 |
+
- ryzen-ai-max-395
|
| 19 |
+
- radeon-8060s
|
| 20 |
+
- moe
|
| 21 |
+
- reasoning
|
| 22 |
+
- multimodal
|
| 23 |
+
- vision
|
| 24 |
+
- nex
|
| 25 |
+
- qwen3.5
|
| 26 |
+
- quantized
|
| 27 |
+
---
|
| 28 |
+
|
| 29 |
+
# Nex-N2.5-mini β ROCmFP4 for AMD Strix Halo (gfx1151)
|
| 30 |
+
|
| 31 |
+
ROCmFP4 / ROCmFPX quantizations of **[nex-agi/Nex-N2.5-mini](https://huggingface.co/nex-agi/Nex-N2.5-mini)** β
|
| 32 |
+
35,107,181,936 parameters (BF16), 40-layer Qwen3.5 MoE (30 Gated DeltaNet linear-attention + 10 full-attention layers), 256 routed experts / 8 active, 262,144-token context, text + image β built and measured on an AMD Ryzen AI
|
| 33 |
+
Max+ 395 (Radeon 8060S, `gfx1151`). Upstream publishes no GGUF.
|
| 34 |
+
|
| 35 |
+
- Another public ROCmFP4 build of this model exists β [julianmb/Nex-N2.5-mini-ROCmFP4-GGUF](https://huggingface.co/julianmb/Nex-N2.5-mini-ROCmFP4-GGUF): its `Nex-N2.5-mini-ROCmFP4-STRIX_LEAN.gguf` stores `output.weight` as `Q4_0_ROCMFP4_FAST` and carries no imatrix metadata. Every tier here keeps `output.weight` at `Q6_K`, and the imatrix builds are a separate repo.
|
| 36 |
+
- **Vision projector included.**
|
| 37 |
+
- **No MTP head.** `mtp_num_hidden_layers: 1` is declared in `config.json`, but the checkpoint ships no `mtp.*` weights (the converted BF16 GGUF reads back 0 `nextn` tensors). There is no speculative
|
| 38 |
+
decoding on these files.
|
| 39 |
+
- Importance-matrix builds of the same three 4-bit tiers: **[kingjones777/Nex-N2.5-mini-ROCmFP4-imatrix-GGUF](https://huggingface.co/kingjones777/Nex-N2.5-mini-ROCmFP4-imatrix-GGUF)**.
|
| 40 |
+
|
| 41 |
+
## Which file should I use?
|
| 42 |
+
|
| 43 |
+
Ryzen AI Max+ 395 (MAX-1), ROCm 7.2.4, unpatched `llama-server` at `d3ca537` (see [Quick start](#quick-start)), `-c 65536`, one request at a time (`--parallel 1`), greedy (`temp 0`, `top_k 1`), `ignore_eos` so every arm generates exactly 256 tokens after a code prompt of 7,094β7,102 tokens (the first 30,000 characters of `convert_hf_to_gguf.py` plus an instruction), a unique nonce per request and `cache_prompt: false` (`cache_n = 0` asserted on every timed request), 1 warm-up then the median of 3. Decode numbers are the server's own `predicted_per_second`. Box iced: no other model loaded.
|
| 44 |
+
|
| 45 |
+
| File | ftype | Size | BPWβ΄ | KLD vs BF16 βΒ² | Same top-1 β | PPL (Γ BF16) | TG ROCm0 | TG Vulkan0 | PP ROCm0 |
|
| 46 |
+
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
| 47 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | 106 | 17.46 GiB | 4.32 | 0.1044 Β± 0.0014 | 86.66 % | 6.4740 Β± 0.0798 (Γ1.0393) | 63.94 | 68.16 | 1158 |
|
| 48 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-COHERENT.gguf` | 102 | 18.48 GiB | 4.58 | 0.0971 Β± 0.0013 | 87.29 % | 6.5617 Β± 0.0812 (Γ1.0534) | 61.74 | 68.00 | 1187 |
|
| 49 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-FAST.gguf` | 103 | 17.37 GiB | 4.30 | 0.1088 Β± 0.0014 | 86.41 % | 6.5498 Β± 0.0809 (Γ1.0515) | 63.31 | 68.62 | 1157 |
|
| 50 |
+
| *BF16 reference* | 32 | 64.61 GiBΒ³ | 16.01 | 0 | 100 % | 6.2290 Β± 0.0753ΒΉ | β | β | β |
|
| 51 |
+
|
| 52 |
+
TG = decode tokens/s after the 7,094β7,102-token code prompt, no draft head. PP = prefill tokens/s on ROCm0.
|
| 53 |
+
ΒΉ The BF16 PPL shown is the paired base every "Γ" ratio is computed against (averaged over the same scored tokens in the KL-divergence runs). The standalone BF16 run's own summary line reads 6.2303 Β± 0.0754.
|
| 54 |
+
Β² Quality columns: see *Where the quality numbers come from* below.
|
| 55 |
+
Β³ BF16 conversion of the checkpoint; not published.
|
| 56 |
+
β΄ BPW as printed by `llama-quantize`: bits per weight over the 34,660,610,688 weights in each GGUF. The 35,107,181,936-parameter count above also includes the 446,571,248-weight vision tower, which ships in the projector file.
|
| 57 |
+
|
| 58 |
+
**Start with `STRIX_LEAN`; take `COHERENT` if quality matters more than speed.** `STRIX_LEAN` decodes 3.6 % faster than `COHERENT` on ROCm0 (63.94 vs 61.74 tok/s; per-run ranges 63.56β63.96 and 61.74β61.80) and within 0.2 % of it on Vulkan0 (68.16 vs 68.00), and prefills within 2.4 % of it on ROCm0 (1158 vs 1187 tok/s). `COHERENT`'s KLD is 7.1 % lower (3.8Ο) for 1051 MiB more.
|
| 59 |
+
|
| 60 |
+
`FAST` does not buy a clear speed gain here: `FAST` decodes within 1.0 % of `STRIX_LEAN` on ROCm0 (63.31 vs 63.94 tok/s; per-run ranges 63.14β63.38 and 63.56β63.96) and within 0.7 % of it on Vulkan0 (68.62 vs 68.16), and prefills within 0.1 % of it on ROCm0 (1157 vs 1158 tok/s); its KLD is higher than `STRIX_LEAN`'s (0.1088 vs 0.1044, +4.2 %, 2.2Ο).
|
| 61 |
+
|
| 62 |
+
KLD order (lower is closer to BF16): `COHERENT` 0.0971, `STRIX_LEAN` 0.1044 (+7.6 % vs `COHERENT`), `FAST` 0.1088 (+12.1 % vs `COHERENT`). `STRIX_LEAN` is 1051 MiB smaller than `COHERENT`; `FAST` is 91 MiB smaller than `STRIX_LEAN`. Speed gaps below 3.0 % (decode) and 3.0 % (prefill) are called a tie: the larger of 3 % and the widest gap measured between files that do identical work per token (each imatrix file and its standard twin: decode 1.0 %, prefill 1.1 %).
|
| 63 |
+
|
| 64 |
+
**The [imatrix build](https://huggingface.co/kingjones777/Nex-N2.5-mini-ROCmFP4-imatrix-GGUF) is measurably closer to BF16 at the same size:** `STRIX_LEAN` 0.1044 β 0.0852 (-18.5 %, 10.0Ο); `COHERENT` 0.0971 β 0.0769 (-20.7 %, 11.3Ο); `FAST` 0.1088 β 0.0890 (-18.2 %, 10.2Ο).
|
| 65 |
+
|
| 66 |
+
Quality is graded against the **BF16 GGUF** (reference logits computed on the CPU) on a **held-out** corpus (wikitext-2 *test*, `-c 2048`, 40 chunks Γ 1,023 scored tokens each β the second half of every window, less its first token β = 40,920), never on the imatrix calibration text. **KLD** is the per-token KL divergence of each quant's next-token distribution from BF16's on the same tokens β far more sensitive than perplexity.
|
| 67 |
+
|
| 68 |
+
**Where the quality numbers come from.** Measured directly on these files, against BF16 logits computed **on the CPU** in the same session (first-window perplexity 5.6964; Vulkan0 gave 5.6953 for the same window). Every file was graded on ROCm0 (the columns above) and again on Vulkan0. The STRIX_LEAN grade was run twice on each backend and every per-chunk row matched: 40 of 40 on ROCm0, 40 of 40 on Vulkan0. Why not the GPU for the reference: see [Known issues](#known-issues-and-limits).
|
| 69 |
+
|
| 70 |
+
**Same files, same reference, graded on each backend** β KLD ROCm0 / Vulkan0: STRIX_LEAN 0.1044 / 0.1044 (0.0 %, 0.0Ο); COHERENT 0.0971 / 0.0972 (+0.1 %, 0.0Ο); FAST 0.1088 / 0.1088 (0.0 %, 0.0Ο); imatrix STRIX_LEAN 0.0852 / 0.0836 (-1.9 %, 0.9Ο); imatrix COHERENT 0.0769 / 0.0768 (-0.1 %, 0.1Ο); imatrix FAST 0.0890 / 0.0891 (+0.2 %, 0.1Ο). The two backends agree within noise on every file.
|
| 71 |
+
|
| 72 |
+
## Quick start
|
| 73 |
+
|
| 74 |
+
**1. Download**
|
| 75 |
+
|
| 76 |
+
```bash
|
| 77 |
+
hf download kingjones777/Nex-N2.5-mini-ROCmFP4-GGUF --local-dir ~/models/nex
|
| 78 |
+
```
|
| 79 |
+
|
| 80 |
+
**2. Build `llama-server`** β ROCmFPX at the measured commit (ROCm and Vulkan
|
| 81 |
+
prerequisites: the project's [build guide](https://github.com/charlie12345/ROCmFPX/blob/d3ca537/docs/build.md)). No patch.
|
| 82 |
+
|
| 83 |
+
```bash
|
| 84 |
+
git clone https://github.com/charlie12345/ROCmFPX.git && cd ROCmFPX
|
| 85 |
+
git checkout d3ca537
|
| 86 |
+
HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -R)" \
|
| 87 |
+
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
|
| 88 |
+
-DGGML_HIP=ON -DGGML_VULKAN=ON -DGPU_TARGETS=gfx1151 \
|
| 89 |
+
-DGGML_HIP_GRAPHS=ON -DGGML_HIP_NO_VMM=ON -DLLAMA_CURL=OFF
|
| 90 |
+
cmake --build build --target llama-server -j
|
| 91 |
+
```
|
| 92 |
+
|
| 93 |
+
(The CMake options of the measured build are listed in [Reproduction](#reproduction).)
|
| 94 |
+
|
| 95 |
+
`d3ca537` is also in the history of the official [ROCmFPX/ROCmFPX](https://github.com/ROCmFPX/ROCmFPX) repository.
|
| 96 |
+
|
| 97 |
+
**3. Serve**
|
| 98 |
+
|
| 99 |
+
```bash
|
| 100 |
+
env LD_LIBRARY_PATH=$PWD/build/bin:/opt/rocm/lib HSA_OVERRIDE_GFX_VERSION=11.5.1 GGML_HIP_ENABLE_UNIFIED_MEMORY=1 \
|
| 101 |
+
build/bin/llama-server \
|
| 102 |
+
-m ~/models/nex/Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf \
|
| 103 |
+
--mmproj ~/models/nex/mmproj-Nex-N2.5-mini-BF16.gguf \
|
| 104 |
+
--chat-template-file ~/models/nex/chat_template_enable_thinking.jinja --reasoning off \
|
| 105 |
+
-ngl 999 -fa on -dio --jinja -fit off --parallel 1 -dev ROCm0 \
|
| 106 |
+
-c 65536 --host 127.0.0.1 --port 8080
|
| 107 |
+
```
|
| 108 |
+
|
| 109 |
+
(`LD_LIBRARY_PATH` avoids a soname clash on machines that also have a Vulkan-only llama.cpp build.) The exact measured
|
| 110 |
+
argv is in [Reproduction](#reproduction).
|
| 111 |
+
|
| 112 |
+
**4. Call** β upstream sampling. Thinking is off unless the request sets `"enable_thinking": true` (as here; drop that
|
| 113 |
+
line for a direct answer):
|
| 114 |
+
|
| 115 |
+
```bash
|
| 116 |
+
curl http://127.0.0.1:8080/v1/chat/completions \
|
| 117 |
+
-H 'Content-Type: application/json' \
|
| 118 |
+
-d '{
|
| 119 |
+
"messages": [{"role": "user", "content": "Hello"}],
|
| 120 |
+
"temperature": 0.7,
|
| 121 |
+
"top_p": 0.95,
|
| 122 |
+
"top_k": 40,
|
| 123 |
+
"chat_template_kwargs": {"enable_thinking": true}
|
| 124 |
+
}'
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
| Flag | Why |
|
| 128 |
+
| --- | --- |
|
| 129 |
+
| `--chat-template-file β¦/chat_template_enable_thinking.jinja` | The model's own template plus one line (see [Reasoning controls](#reasoning-controls)). Without it llama-server leaves the reasoning in `content` and thinking-on tool calls fail ([measured](#tool-calling)). |
|
| 130 |
+
| `--reasoning off` | Thinking stays off unless a request passes `"enable_thinking": true`. |
|
| 131 |
+
| `--jinja` | Already on by default in this build; keep it on β the reasoning controls (`chat_template_kwargs`) and tool calling rely on the Jinja chat template. |
|
| 132 |
+
| `-fit off` | Autofit reads `MemAvailable` on integrated GPUs and can silently shrink context or push tensors to CPU. |
|
| 133 |
+
| `-cram <MiB>` | Not set above (default 8 GiB of host RAM for saved prompts). Set it on a shared box β see [Known issues](#known-issues-and-limits). |
|
| 134 |
+
| `--mmproj` | Loads the 27-layer vision tower. Drop the flag for text-only. |
|
| 135 |
+
|
| 136 |
+
Requires a llama.cpp build with ROCmFP4 / ROCmFPX tensor-type support; stock llama.cpp rejects these tensor types.
|
| 137 |
+
|
| 138 |
+
## Reasoning controls
|
| 139 |
+
|
| 140 |
+
The model's own chat template switches thinking with `chat_template_kwargs.reasoning_effort` and ignores
|
| 141 |
+
`enable_thinking`:
|
| 142 |
+
|
| 143 |
+
| `reasoning_effort` | What the stock template emits |
|
| 144 |
+
| --- | --- |
|
| 145 |
+
| `"none"` | empty `<think>\n\n</think>` (no thinking) |
|
| 146 |
+
| `"high"` | opens `<think>\n` (always think) |
|
| 147 |
+
| `"medium"`, unset, or anything else | opens `<think>` and lets the model decide (adaptive; upstream default is `"medium"`) |
|
| 148 |
+
|
| 149 |
+
llama-server decides how to split reasoning from the answer by rendering the template with `enable_thinking` on and
|
| 150 |
+
off. With this template both renders are the same, so it never extracts the reasoning ([measured](#tool-calling)).
|
| 151 |
+
`chat_template_enable_thinking.jinja` in this repo is the model's `chat_template.jinja` (sha256
|
| 152 |
+
`f1753536417ee87cded4bc5017354eb2123c079d20c634403a3d808b2ba3cc5b`) with one line added at the top (file sha256 `9183c7ba8510fb9628edd2265a4cad8c02b3aecec3cbdf65620f47494e75836d`):
|
| 153 |
+
|
| 154 |
+
```jinja
|
| 155 |
+
{%- if reasoning_effort is not defined and enable_thinking is defined %}{%- set reasoning_effort = 'high' if enable_thinking else 'none' %}{%- endif %}
|
| 156 |
+
```
|
| 157 |
+
|
| 158 |
+
Serve it with `--chat-template-file` and `--reasoning off`.
|
| 159 |
+
|
| 160 |
+
Measured on the standard STRIX_LEAN file with the included template file and `--reasoning off` (greedy probes: a direct question, a one-word instruction and a tool request, each with the tool schema attached; tool suite: 3 passes):
|
| 161 |
+
|
| 162 |
+
| request | thinking | reasoning ends up in | measured |
|
| 163 |
+
| --- | --- | --- | --- |
|
| 164 |
+
| no `chat_template_kwargs` | off (the server default with `--reasoning off`) | β | 0 of 3 replies with think tags in `content` |
|
| 165 |
+
| `"enable_thinking": true` | on | `reasoning_content` | tool suite with thinking on: 19/21 (a pass requires no think tags in `content`) |
|
| 166 |
+
| `"enable_thinking": false` | off | β | 0 of 3 replies with think tags in `content` |
|
| 167 |
+
| `"reasoning_effort": "none"` | off | β | 0 of 3 replies with think tags in `content` |
|
| 168 |
+
| `"reasoning_effort": "high"` | on | **`content`** β do not use | 3 of 3 replies with think tags in `content` |
|
| 169 |
+
| `"reasoning_effort": "medium"` | adaptive | **`content`** β do not use | 3 of 3 replies with think tags in `content` |
|
| 170 |
+
|
| 171 |
+
So: switch thinking with `enable_thinking` only. Thinking-off tool checks: 21/21.
|
| 172 |
+
|
| 173 |
+
Upstream serving (SGLang) uses `--reasoning-parser qwen3 --tool-call-parser qwen3_coder`. Recommended sampling:
|
| 174 |
+
temperature 0.7, top_p 0.95, top_k 40.
|
| 175 |
+
|
| 176 |
+
Earlier assistant turns are re-rendered **with** their reasoning (contexts grow faster than with templates that drop
|
| 177 |
+
it). With thinking on and a small `max_tokens`, the whole budget can go to reasoning and `content` comes back empty β
|
| 178 |
+
raise `max_tokens` before concluding the model is broken.
|
| 179 |
+
|
| 180 |
+
Tool calls use the XML-style `<tool_call><function=β¦><parameter=β¦>` format, which llama.cpp parses natively
|
| 181 |
+
through the Jinja chat template (on by default).
|
| 182 |
+
|
| 183 |
+
## Speed
|
| 184 |
+
|
| 185 |
+
| File | Backend | Workload | Decode tok/s (minβmax) | Prefill tok/s |
|
| 186 |
+
| --- | --- | --- | ---: | ---: |
|
| 187 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | ROCm0 | code | 63.94 (63.56β63.96) | 1158 |
|
| 188 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | Vulkan0 | code | 68.16 (68.10β68.21) | 1006 |
|
| 189 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-COHERENT.gguf` | ROCm0 | code | 61.74 (61.74β61.80) | 1187 |
|
| 190 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-COHERENT.gguf` | Vulkan0 | code | 68.00 (67.88β68.09) | 1001 |
|
| 191 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-FAST.gguf` | ROCm0 | code | 63.31 (63.14β63.38) | 1157 |
|
| 192 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-FAST.gguf` | Vulkan0 | code | 68.62 (68.60β68.67) | 999 |
|
| 193 |
+
| `Nex-N2.5-mini-imatrix-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | ROCm0 | code | 63.29 (63.19β63.41) | 1145 |
|
| 194 |
+
| `Nex-N2.5-mini-imatrix-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | Vulkan0 | code | 67.77 (67.74β67.86) | 995 |
|
| 195 |
+
| `Nex-N2.5-mini-imatrix-Q4_0-ROCmFP4-COHERENT.gguf` | ROCm0 | code | 61.56 (61.53β61.63) | 1184 |
|
| 196 |
+
| `Nex-N2.5-mini-imatrix-Q4_0-ROCmFP4-COHERENT.gguf` | Vulkan0 | code | 67.81 (67.77β67.85) | 999 |
|
| 197 |
+
| `Nex-N2.5-mini-imatrix-Q4_0-ROCmFP4-FAST.gguf` | ROCm0 | code | 63.03 (62.55β63.11) | 1154 |
|
| 198 |
+
| `Nex-N2.5-mini-imatrix-Q4_0-ROCmFP4-FAST.gguf` | Vulkan0 | code | 68.44 (68.42β68.56) | 994 |
|
| 199 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | ROCm0 | prose | 63.06 (62.94β63.09) | 1139 |
|
| 200 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | Vulkan0 | prose | 67.34 (67.31β67.35) | 978 |
|
| 201 |
+
|
| 202 |
+
`STRIX_LEAN`: ROCm0 decodes 6.2 % slower than Vulkan0 (63.94 vs 68.16 tok/s; ranges 63.56β63.96 / 68.10β68.21) and prefills 15.1 % faster than it (1158 vs 1006 tok/s). `COHERENT`: ROCm0 decodes 9.2 % slower than Vulkan0 (61.74 vs 68.00 tok/s; ranges 61.74β61.80 / 67.88β68.09) and prefills 18.5 % faster than it (1187 vs 1001 tok/s). `FAST`: ROCm0 decodes 7.7 % slower than Vulkan0 (63.31 vs 68.62 tok/s; ranges 63.14β63.38 / 68.60β68.67) and prefills 15.8 % faster than it (1157 vs 999 tok/s). STRIX_LEAN workload range on ROCm0: code 63.94 tok/s vs prose 63.06 (prose decodes within 1.4 % of code); Vulkan0 code 68.16 vs prose 67.34 (prose decodes within 1.2 % of code). Prompt lengths: code 7,094β7,102 tokens (the first 30,000 characters of `convert_hf_to_gguf.py` plus an instruction), prose 7,453β7,457 tokens (the first 34,000 characters of wikitext-2 *train* plus a writing instruction). Speed gaps below 3.0 % (decode) and 3.0 % (prefill) are called a tie: the larger of 3 % and the widest gap measured between files that do identical work per token (each imatrix file and its standard twin: decode 1.0 %, prefill 1.1 %).
|
| 203 |
+
|
| 204 |
+
## Prompt caching
|
| 205 |
+
|
| 206 |
+
Measured: pairs of requests that share a long code prefix and differ only in the closing instruction. The second
|
| 207 |
+
request of each pair runs warm (`cache_prompt: true`, resuming from what the first one left) and then cold
|
| 208 |
+
(`cache_prompt: false`), and the two replies are compared byte for byte. Every prompt is padded to one token length so
|
| 209 |
+
warm and cold see identical chunking.
|
| 210 |
+
|
| 211 |
+
| server | second-request prompt tokens reused | processed | warm reply = cold reply |
|
| 212 |
+
| --- | ---: | ---: | :---: |
|
| 213 |
+
| d3ca537, unpatched | **6,011** of 7,039 (all 5 pairs) | 1,028 | 5/5 |
|
| 214 |
+
|
| 215 |
+
In 5 request pairs sharing a long prefix at one fixed prompt length of 7,039 tokens, every second request resumed from the checkpoint the first one left 1,028 tokens before its end β **6,011 tokens reused (85 %), 1,028 processed** β median prefill **1.0 s instead of 6.2 s** cold (6.1Γ faster). Each warm reply was byte-identical to a cold run of the same prompt in **5/5** exchanges.
|
| 216 |
+
|
| 217 |
+
llama-server processes the last `n_ubatch` + 4 tokens of every prompt as two batches so it can checkpoint there (1,024 + 4 = 1,028 tokens with the `-ub 1024` used in these measurements, where the server default is `-ub 512`; [upstream PR #20288](https://github.com/ggml-org/llama.cpp/pull/20288)). A turn that resumes from a checkpoint left by a prompt of a *different* length therefore splits its tail differently from a cold run, and float rounding can flip a greedy token.
|
| 218 |
+
|
| 219 |
+
## Tool calling
|
| 220 |
+
|
| 221 |
+
The template emits the XML-style `<tool_call><function=β¦><parameter=β¦>` format, which llama.cpp parses natively
|
| 222 |
+
through the Jinja chat template (on by default). Suite run through `llama-server`, at the checkpoint's recommended
|
| 223 |
+
sampling (temperature 0.7, top-p 0.95, top-k 40):
|
| 224 |
+
|
| 225 |
+
**40/42** over three passes with the quick-start configuration, **6/14** with the stock template, run on `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf`. Quick start = the included template file + `--reasoning off`, thinking switched with `enable_thinking`; stock = the model's own template, thinking switched with `reasoning_effort` (`high` / `none`). A check passes only with a native `tool_calls` entry carrying the right arguments and no raw XML or think tags left in `content`.
|
| 226 |
+
|
| 227 |
+
| check | quick start, thinking ON | quick start, thinking OFF | stock template, thinking ON | stock template, thinking OFF |
|
| 228 |
+
| --- | :---: | :---: | :---: | :---: |
|
| 229 |
+
| multi-arg | 3/3 | 3/3 | β | β
|
|
| 230 |
+
| nested-object | 2/3 | 3/3 | β | β |
|
| 231 |
+
| enum | 3/3 | 3/3 | β | β
|
|
| 232 |
+
| correct-decline | 3/3 | 3/3 | β | β
|
|
| 233 |
+
| multi-turn | 3/3 | 3/3 | β | β
|
|
| 234 |
+
| streaming | 3/3 | 3/3 | β | β
|
|
| 235 |
+
| parallel | 2/3 | 3/3 | β | β
|
|
| 236 |
+
|
| 237 |
+
**Stock chat template: 6/14.** Every thinking-on check failed. Re-run with the raw replies kept, 7 of 7 thinking-on replies carried the reasoning and a `</think>` in `content`, and 0 had any `reasoning_content`. llama-server builds its reasoning parser by rendering the template with `enable_thinking` on and off; this template ignores `enable_thinking` (it switches on `reasoning_effort`), so the parser finds no reasoning markers and extracts nothing. Server switches did not help (`--reasoning-format deepseek`: 3 of 3 replies still had reasoning in `content`; `--chat-template-kwargs` with `reasoning_effort`: 3 of 3 replies still had reasoning in `content`; `--reasoning on`: 3 of 3 replies still had reasoning in `content`). With thinking off, `nested-object` failed on an HTTP 500 β see [Known issues](#known-issues-and-limits).
|
| 238 |
+
|
| 239 |
+
**With the included `chat_template_enable_thinking.jinja` and `--reasoning off` (the quick start): 13/14, 13/14, 14/14 over three passes of the same suite (40/42)** β thinking off 21/21, thinking on 19/21; the misses were `nested-object` with thinking on (pass 1), `parallel` with thinking on (pass 2). A pass requires a native `tool_calls` entry with the right arguments and no think tags in `content`. Each check is a single sample at the recommended temperature 0.7.
|
| 240 |
+
|
| 241 |
+
## Vision
|
| 242 |
+
|
| 243 |
+
`mmproj-Nex-N2.5-mini-BF16.gguf` is the 27-layer vision tower (width 1152),
|
| 244 |
+
loaded with `--mmproj`. Its attention follows the server's `-fa` setting, so both settings were checked.
|
| 245 |
+
|
| 246 |
+
Probe: a synthetic 448Γ448 image with a red circle and a blue square (a model that ignores the image cannot name both), sent to `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` with `--mmproj`, temperature 0. Pass = the reply names every expected term (`red`, `blue`, `circle`, `square`).
|
| 247 |
+
|
| 248 |
+
| | `-fa on` | `-fa off` |
|
| 249 |
+
| --- | :---: | :---: |
|
| 250 |
+
| STRIX_LEAN + projector | β
4/4 terms | β
4/4 terms |
|
| 251 |
+
|
| 252 |
+
β
**Images work with `-fa on` and `-fa off`.** The `-fa on` image test was repeated with the included template file and `--reasoning off` (the quick start): β
passed.
|
| 253 |
+
|
| 254 |
+
Reply (`-fa on`):
|
| 255 |
+
|
| 256 |
+
> The image shows two shapes: a red circle on the left and a blue square on the right.
|
| 257 |
+
|
| 258 |
+
## Memory
|
| 259 |
+
|
| 260 |
+
Measured footprint (drop in `MemAvailable`) of STRIX_LEAN with the vision projector, q8_0 KV cache, `-cram 512`, one slot, no draft head:
|
| 261 |
+
|
| 262 |
+
| context | after load | after one request (30,000-character code prompt) |
|
| 263 |
+
| ---: | ---: | ---: |
|
| 264 |
+
| 65,536 | 21.11 GiB | 21.29 GiB |
|
| 265 |
+
| 262,144 | 24.36 GiB | 24.52 GiB |
|
| 266 |
+
|
| 267 |
+
No row was decode-benchmarked beyond that one request. Nothing beyond these rows was measured.
|
| 268 |
+
|
| 269 |
+
## Quantization methodology
|
| 270 |
+
|
| 271 |
+
```bash
|
| 272 |
+
# 1. convert: text model and the vision projector (the checkpoint has no mtp.* tensors)
|
| 273 |
+
python convert_hf_to_gguf.py hf --outtype bf16 --model-name Nex-N2.5-mini --outfile Nex-N2.5-mini-BF16.gguf
|
| 274 |
+
python convert_hf_to_gguf.py hf --outtype bf16 --mmproj --model-name Nex-N2.5-mini --outfile mmproj-Nex-N2.5-mini-BF16.gguf
|
| 275 |
+
|
| 276 |
+
# 2. quantize from BF16 only; the LM head is forced up on every tier and read back by exact tensor name
|
| 277 |
+
llama-quantize --output-tensor-type q6_K Nex-N2.5-mini-BF16.gguf OUT Q4_0_ROCMFP4_STRIX_LEAN 16
|
| 278 |
+
llama-quantize --output-tensor-type q6_K --token-embedding-type q6_K Nex-N2.5-mini-BF16.gguf OUT Q4_0_ROCMFP4_COHERENT 16
|
| 279 |
+
llama-quantize --output-tensor-type q6_K Nex-N2.5-mini-BF16.gguf OUT Q4_0_ROCMFP4_FAST 16
|
| 280 |
+
|
| 281 |
+
# 3. BF16 reference logits on the CPU only (this build's ROCm0 path computes the BF16 MoE wrong β Known issues)
|
| 282 |
+
llama-perplexity -m Nex-N2.5-mini-BF16.gguf -f wikitext-2-raw/wiki.test.raw -c 2048 -b 2048 --chunks 40 --kl-divergence-base bf16.kld \
|
| 283 |
+
-dev none -ngl 0 --no-op-offload -t 16
|
| 284 |
+
# 4. grade each shipped file against those logits, on each GPU backend
|
| 285 |
+
llama-perplexity -m OUT --kl-divergence-base bf16.kld --kl-divergence -c 2048 -b 2048 -ngl 999 -fa on -dio -dev ROCm0
|
| 286 |
+
llama-perplexity -m OUT --kl-divergence-base bf16.kld --kl-divergence -c 2048 -b 2048 -ngl 999 -fa on -dio -dev Vulkan0
|
| 287 |
+
```
|
| 288 |
+
|
| 289 |
+
Receipts (the built file is the receipt β exact tensor names, never a substring match; `recipe/logs/`):
|
| 290 |
+
|
| 291 |
+
| File | `output.weight` | `token_embd.weight` | tensors |
|
| 292 |
+
| --- | --- | --- | ---: |
|
| 293 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | Q6_K | Q5_K | 733 |
|
| 294 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-COHERENT.gguf` | Q6_K | Q6_K | 733 |
|
| 295 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-FAST.gguf` | Q6_K | Q4_0_ROCMFP4_FAST | 733 |
|
| 296 |
+
|
| 297 |
+
`tie_word_embeddings` is false, so the output head is a real tensor and `--output-tensor-type q6_K` does real work.
|
| 298 |
+
All three tiers pin `output.weight` to `q6_K`; COHERENT also pins `token_embd.weight` to `q6_K`, while STRIX_LEAN and
|
| 299 |
+
FAST keep their tier's own embedding type (shown in the receipts).
|
| 300 |
+
|
| 301 |
+
## Reproduction
|
| 302 |
+
|
| 303 |
+
```
|
| 304 |
+
server : https://github.com/charlie12345/ROCmFPX @ d3ca537
|
| 305 |
+
unpatched; build dir /opt/llama-rocm/rocmfpx-724/build-hipvk, Release, Unix Makefiles, GGML_HIP=ON GGML_VULKAN=ON
|
| 306 |
+
GGML_HIP_GRAPHS=ON GGML_HIP_NO_VMM=ON GGML_NATIVE=ON AMDGPU_TARGETS=gfx1151 LLAMA_CURL=OFF
|
| 307 |
+
CMAKE_HIP_COMPILER=/opt/rocm-7.2.4/lib/llvm/bin/clang
|
| 308 |
+
sha256 llama-quantize 1559189968a30781f837e4d25ca3cdf26c8eb0351023675406535eddcbe0db13
|
| 309 |
+
sha256 llama-imatrix bfdce5c21a01bdc8043d69335b74a7b68b8335ae989991a1e10e21d5faeaeb8e
|
| 310 |
+
sha256 llama-perplexity c2175925bb0c61df89ff787845d8e03a35403f684be52719ac2987b8ca636a53
|
| 311 |
+
sha256 llama-server d077b98f3f04df4b482a5826c8922e39cda3aa8d2e2b2fbe1870f36d245cebe7
|
| 312 |
+
source : nex-agi/Nex-N2.5-mini revision 87420286149d9cce9bd46cd335ef9bda33c37c1b
|
| 313 |
+
model : Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf (the argv below; every file was measured the same way)
|
| 314 |
+
argv : /opt/llama-rocm/rocmfpx-724/build-hipvk/bin/llama-server -m /mnt/models/nex-n2.5-mini/out/Nex-N2.5-mini-Q4_0_ROCMFP4_STRIX_LEAN.gguf -dev ROCm0 -ngl 999 -fa on -dio --jinja -fit off --parallel 1 -c 65536 -b 2048 -ub 1024 --host 127.0.0.1 --port 18600 --no-webui
|
| 315 |
+
template : the quick-start tool-suite and image rows add --chat-template-file chat_template_enable_thinking.jinja
|
| 316 |
+
--reasoning off to this argv (recipe/pipeline/run_tools_roff.sh -> nex_tools_tpl.py; their server logs
|
| 317 |
+
read "chat template, thinking = 0"); the speed rows use the stock template
|
| 318 |
+
env : LD_LIBRARY_PATH=<build>/bin:/opt/rocm-7.2.4/lib
|
| 319 |
+
HSA_OVERRIDE_GFX_VERSION=11.5.1 GGML_HIP_ENABLE_UNIFIED_MEMORY=1
|
| 320 |
+
box : aimax β AMD Ryzen AI Max+ 395 / Radeon 8060S (gfx1151), 124 GiB, GTT 131072 MiB,
|
| 321 |
+
kernel 6.17.6-061706-generic, ROCm 7.2.4
|
| 322 |
+
protocol : 7,094β7,102-token code prompt, 256 generated tokens, temp 0 / top_k 1, ignore_eos, cache_prompt false,
|
| 323 |
+
1 warm-up + median of 3, no co-resident models (box iced)
|
| 324 |
+
measured : 2026-09-16 to 2026-09-17, by the pipeline in recipe/ (every raw number in recipe/results_summary.json and recipe/raw/)
|
| 325 |
+
```
|
| 326 |
+
|
| 327 |
+
## Files
|
| 328 |
+
|
| 329 |
+
| File | Size | sha256 |
|
| 330 |
+
| --- | ---: | --- |
|
| 331 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-STRIX_LEAN.gguf` | 17.46 GiB | `4437c3d8871acf04e4be8a9b773cf69697e5fc4b7b41fae41261f246ee5add9e` |
|
| 332 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-COHERENT.gguf` | 18.48 GiB | `43673ce7b05f6d3924f6268e7e3102bab8fc4f91771505ef5734beaddacaa2f1` |
|
| 333 |
+
| `Nex-N2.5-mini-Q4_0-ROCmFP4-FAST.gguf` | 17.37 GiB | `156b516ecfc0f8e400b165b7d42d959a0bd902814bb6949ca040c991494886d1` |
|
| 334 |
+
| `mmproj-Nex-N2.5-mini-BF16.gguf` | 0.84 GiB | `a80a82977e4787a838a612316c79a6533c1b098fcac19372cc78929120162a4e` |
|
| 335 |
+
| `chat_template_enable_thinking.jinja` | 7.7 KiB | `9183c7ba8510fb9628edd2265a4cad8c02b3aecec3cbdf65620f47494e75836d` |
|
| 336 |
+
|
| 337 |
+
`SHA256SUMS` covers every model file and the chat template file. `recipe/` holds the measurement pipeline (`recipe/pipeline/`), raw per-run
|
| 338 |
+
results (`recipe/raw/`), build and receipt logs (`recipe/logs/`), and `results_summary.json` with every measured value
|
| 339 |
+
on this card. Architecture facts (layer counts, vocabulary, vision depth) come from the checkpoint's `config.json` at
|
| 340 |
+
revision `87420286149d9cce9bd46cd335ef9bda33c37c1b`.
|
| 341 |
+
|
| 342 |
+
## Known issues and limits
|
| 343 |
+
|
| 344 |
+
- **Do not run the BF16 GGUF of this model on ROCm0 with this build.** `d3ca537` computes it wrong on that path: wikitext-2 perplexity 105.9 on ROCm0 vs 6.23 on the CPU (first window 139.1 vs 5.70; also wrong with `-fa off`). The 4-bit files are not affected β their ROCm0 grades are in the table β and the BF16 file is not published here; the quality reference was computed on the CPU instead.
|
| 345 |
+
- **llama-server rejects a tool call whose required arguments are not in the order the schema lists them** β HTTP 500, *The model produced output that does not match the expected peg-native format*: this build's parser for the XML tool-call format expects required arguments in definition order. On the standard STRIX_LEAN file with the stock template and thinking off, the `nested-object` request (three required arguments) hit it in the tool suite and in 2 of 4 repeats; the model had written a well-formed call with the arguments reordered. Be ready to retry on this error.
|
| 346 |
+
- **With the included template, do not set `reasoning_effort` to `high` or `medium`** β the reasoning goes back into `content` (6 of 6 probe replies). `enable_thinking: true` is the way to turn thinking on.
|
| 347 |
+
- **With thinking on, a very short answer can stay inside the think block.** Served as in the quick start, `Reply with the single word: ready` (no tools, `enable_thinking: true`, temperature 0) came back with the word in `reasoning_content` and an empty `content` on 2 of 2 FAST files tested. With thinking off the same request returned `ready` in `content`.
|
| 348 |
+
- **No MTP head.** The checkpoint's `config.json` declares `mtp_num_hidden_layers: 1`, but the weights contain **no** `mtp.*` tensors (1,026 tensors total). There is no multi-token-prediction head and no speculative decoding on these files β do not pass `--spec-type draft-mtp`.
|
| 349 |
+
- **The stock chat template ignores `enable_thinking`, and llama-server cannot separate its reasoning** (see [Tool calling](#tool-calling)). Serve with the included `chat_template_enable_thinking.jinja` and `--reasoning off`, and switch thinking per request with `enable_thinking` β see [Reasoning controls](#reasoning-controls).
|
| 350 |
+
- **Earlier assistant turns are re-rendered with their reasoning**, so multi-turn contexts grow faster than with templates that drop it.
|
| 351 |
+
- **`llama-server`'s host-RAM prompt cache defaults to 8 GiB** (`-cram 8192`). On a shared box, set `-cram` explicitly.
|
| 352 |
+
- Measured on Linux only (Ryzen AI Max+ 395, ROCm 7.2.4, unpatched `d3ca537`).
|
| 353 |
+
- **Not measured:** decode beyond a 7,457-token prompt (a 262,144-token context was loaded in the memory test, not benchmarked), long-context quality, video input, concurrency above 1, and task-level accuracy. Perplexity/KLD measure next-token fidelity to BF16 on prose, not reasoning or code correctness.
|
| 354 |
+
|
| 355 |
+
## License and attribution
|
| 356 |
+
|
| 357 |
+
Apache-2.0, inherited from the base model. Weights and architecture: **Nex-AGI**
|
| 358 |
+
([nex-agi/Nex-N2.5-mini](https://huggingface.co/nex-agi/Nex-N2.5-mini)). ROCmFP4 / ROCmFPX quantization format and
|
| 359 |
+
runtime: the ROCmFPX project. Quantization and measurements: kingjones777.
|