Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
137 KiB
JSON
1 line
137 KiB
JSON
{"repo": "alexhiesch/apple-silicon-llm-bench", "files": {"config.yaml": {"b3a81b2c4fd659cec4d98328e735b302b591001b": {"t": 1786068510.1957335, "n": 118589, "h": "779242313bc6b038", "c": "# ─────────────────────────────────────────────────────────────────────────────\n# llm-bench — configuration file\n#\n# Edit this file to define which models, backends and quantizations to test.\n# The benchmark reads this file at startup; no code changes required.\n# ─────────────────────────────────────────────────────────────────────────────\n\n# Human-readable description of the machine running the benchmark.\nhardware:\n name: \"Apple M3 Max\"\n memory_gb: 64\n platform: \"darwin-arm64\"\n\n# ── Global settings ───────────────────────────────────────────────────────────\nsettings:\n runs: 3 # benchmark iterations per test (excluding warmup)\n warmup: 1 # warmup iterations before timed runs (captures cold TTFT)\n max_tokens: 512 # maximum tokens to generate per request\n temperature: 0.0 # deterministic output\n server_timeout: 600 # seconds to wait for server to become ready\n cooldown: 8 # seconds between tests (let DRAM settle)\n bench_port: 8090 # port used for backends we start ourselves\n\n# ── Prompts to run ────────────────────────────────────────────────────────────\n# Built-in names: short, long, code, context-4k, context-8k, context-16k, context-32k\n# Use \"all\" to run short + long + code. Use \"context\" for all context tiers.\nprompts:\n - short\n - long\n - code\n\n# ── Optional: define your own prompts ─────────────────────────────────────────\n# custom_prompts:\n# haiku:\n# messages:\n# - role: user\n# content: \"Write a haiku about neural networks.\"\n# sys-user:\n# messages:\n# - role: system\n# content: \"You are a helpful assistant.\"\n# - role: user\n# content: \"Explain backpropagation in two sentences.\"\n\n# ── Test matrix ───────────────────────────────────────────────────────────────\n# Each test is one (model × backend × quant × kv_cache) combination.\n#\n# Required fields:\n# id – unique slug used in CLI (--test), CSV output and reports\n# name – human-readable label shown in results table\n# backend – one of: ollama | mlx-lm | mlx-vlm | llama-server |\n# vllm-mlx | omlx | lm-studio | docker-model-runner\n# model_id – Ollama tag / HF repo ID / GGUF file path depending on backend\n# fmt – weight format label shown in report (e.g. MLX, GGUF, NVFP4, INT4)\n# quant – quantization label (e.g. 4bit, 8bit, Q4_K_M, nvfp4, int4)\n# kv_cache – KV cache variant label (default | kv8 | kv4 | kv2 | none | ...)\n#\n# Optional fields:\n# group – grouping label for the report table (default: \"default\")\n# enabled – set false to skip without deleting the entry (default: true)\n# extra_args – list of extra CLI arguments passed to the backend server\n# prereq – manual override for the readiness check string shown in --list\n# (leave empty \"\" to rely on auto-detection)\n# no_think – override the global --no-think flag for this specific test\n#\n# Backend-specific notes:\n# ollama – model_id is an Ollama tag; server is managed by Ollama itself\n# mlx-lm – model_id is an HF repo ID (mlx-community/…); uses mlx_lm.server\n# mlx-vlm – same as mlx-lm but uses mlx_vlm.server (better KV control)\n# llama-server – model_id is an absolute path to a GGUF file\n# vllm-mlx – model_id is an HF repo ID; needs vllm-mlx venv installed\n# omlx – model_id is the short model name as stored in ~/.omlx/models/\n# lm-studio – model_id is the model key as shown in LM Studio; server must\n# be started separately (or the benchmark starts it via lms CLI)\n# docker-model-runner – model_id is the full Docker image tag (docker.io/ai/…)\n# ─────────────────────────────────────────────────────────────────────────────\n\ntests:\n\n # ── Group A: Qwen3.5-35B-A3B (MoE) — apples-to-apples across backends ─────\n\n # ── A / Q4 — ~4-bit weight quantization ─────────────────────────────────────\n - id: A_Q4_1\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: A_Q4_2\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: A_Q4_3\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: A_Q4_4\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv2\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"2\"]\n\n - id: A_Q4_5\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.5:35b-a3b-q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: A_Q4_6\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.5:35b-a3b-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n\n - id: A_Q4_7\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.5:35b-a3b-int4\"\n fmt: INT4\n quant: int4\n kv_cache: default\n\n - id: A_Q4_8\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: llama-server\n # KNOWN ISSUE: Ollama stores Qwen3.5-MoE in a GGUF dialect that llama-server\n # rejects with: \"key qwen35moe.rope.dimension_sections has wrong array length;\n # expected 4, got 3\". The blob is a valid GGUF file but uses a newer spec that\n # the current llama.cpp parser doesn't accept for this MoE architecture.\n # FIX: Download the GGUF directly from HuggingFace instead of using the Ollama blob:\n # huggingface-cli download bartowski/Qwen3.5-35B-A3B-GGUF \\\n # --include \"Qwen3.5-35B-A3B-Q4_K_M.gguf\" --local-dir ~/.cache/llmfit/models/\n # Then set model_id to the absolute path below.\n model_id: \"ollama:qwen3.5:35b-a3b-q4_K_M\" # auto-resolve from Ollama blob (blocked, see above)\n # model_id: \"~/.cache/llmfit/models/Qwen3.5-35B-A3B-Q4_K_M.gguf\" # use this after download\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n enabled: false # blocked: Ollama GGUF dialect incompatible with current llama-server\n\n - id: A_Q4_9\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: docker-model-runner\n model_id: \"docker.io/ai/qwen3.5:35B-A3B-Q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ── A / Q8 — 8-bit weight quantization ──────────────────────────────────────\n - id: A_Q8_1\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: A_Q8_2\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: A_Q8_3\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: llama-server\n # Same GGUF dialect incompatibility as A_Q4_8 (same model family, same Ollama storage format).\n # Download directly from HuggingFace and point to the local file to use this test.\n model_id: \"ollama:qwen3.5:35b-a3b-q8_0\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n enabled: false # blocked: Ollama GGUF dialect incompatible + q8_0 not pulled yet\n\n # llama-server — Unsloth GGUF quants (direct HF download bypasses Ollama dialect issue)\n # Download→bench→purge via run_llamacpp_all.py\n - id: A_LC_Q4KM\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.5-35B-A3B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: A_LC_UDQ4\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: A_LC_UDQ2\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.5-35B-A3B-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n # ── Group B: Qwen3-Coder-Next (Dense, GQA) ───────────────────────────────────\n - id: B_Q4_1\n model: \"Coder\"\n group: \"B — Qwen3-Coder-Next (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: B_Q4_2\n model: \"Coder\"\n group: \"B — Qwen3-Coder-Next (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: cache32k\n extra_args: [\"--prompt-cache-bytes\", \"33554432\"]\n\n - id: B_Q4_3\n model: \"Coder\"\n group: \"B — Qwen3-Coder-Next (Dense)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n # KNOWN ISSUE: mlx-vlm doesn't support the qwen3_next architecture yet.\n # Error: \"Model type qwen3_next not supported. No module named 'mlx_vlm.models.qwen3_next'\"\n # Re-enable once mlx-vlm adds qwen3_next support (track: https://github.com/Blaizzy/mlx-vlm)\n enabled: false\n\n - id: B_Q4_4\n model: \"Coder\"\n group: \"B — Qwen3-Coder-Next (Dense)\"\n backend: llama-server\n # Provide absolute path to your GGUF file:\n model_id: \"~/.cache/llmfit/models/Qwen3-Coder-Next-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: B_Q4_5\n model: \"Coder\"\n group: \"B — Qwen3-Coder-Next (Dense)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3-Coder-Next-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: kv-q8\n extra_args: [\"-ctk\", \"q8_0\", \"-ctv\", \"q8_0\"]\n\n # ── Context scaling: Group A — Qwen3.5-35B-A3B ───────────────────────────────\n # Memory budget: ~22GB weights + KV\n # MoE architecture has very few GQA KV heads → KV ≈ 190 KB/token\n # 128k KV ≈ 24 GB → total ~46 GB → fits on 64 GB without KV quant\n # 256k would need KV-q4 (4-bit KV via mlx-vlm --kv-bits 4)\n\n - id: A_CTX_1\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n - id: A_CTX_2\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n # KV-q4 reduces KV memory 4× — useful only if you need >128k on 64 GB.\n # BENCHMARKED RESULT (2026-04-02): KV quantization via mlx-vlm is\n # counterproductive for performance: prefill drops from 231k t/s (mlx-lm)\n # to 550 t/s, TTFT at 128k = 238 seconds vs 567 ms for mlx-lm default.\n # mlx-vlm does not have optimized Metal shaders for quantized KV prefill.\n # Recommendation: use mlx-lm (A_CTX_1) instead — it fits 128k natively.\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n\n # ── Context scaling: Group B — Qwen3-Coder-Next ──────────────────────────────\n # Memory budget: ~15 GB weights\n # Dense GQA model with ~8 KV heads → KV ≈ 300–400 KB/token\n # 128k KV ≈ 38 GB → total ~53 GB → theoretically fits, but OOM in practice\n # BENCHMARKED (2026-04-02): context-128k crashes with connection refused — mlx-lm\n # exhausts unified memory before completing the prefill. Capped at 64k.\n\n - id: B_CTX_1\n model: \"Coder\"\n group: \"B — Qwen3-Coder-Next (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n prompts: [context-32k, context-64k]\n\n # ── Group C: Gemma 3 27B-IT ───────────────────────────────────────────────────\n # Why: sliding window attention (SWA) makes KV cache nearly constant across\n # context lengths — global attention only every 6th layer. At 128k tokens the\n # effective KV footprint is ~6 GB vs ~24 GB for a full-attention model of equal\n # size. This is the architectural answer to the KV memory problem.\n # Model: mlx-community/gemma-3-27b-it-4bit (~14 GB download)\n # Native context: 131072 tokens\n # Intelligence: matches GPT-4o on most coding / instruction-following benchmarks\n\n - id: C_Q4_1\n model: \"Gemma3-27B\"\n group: \"C — Gemma 3 27B-IT\"\n backend: mlx-lm\n model_id: \"mlx-community/gemma-3-27b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: C_CTX_1\n model: \"Gemma3-27B\"\n group: \"C — Gemma 3 27B-IT\"\n backend: mlx-lm\n model_id: \"mlx-community/gemma-3-27b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # KNOWN ISSUE (2026-04-02): all context tiers timed out (>600s per request).\n # Short/code baseline (C_Q4_1) works fine. Likely cause: mlx-lm's Gemma 3\n # implementation falls back to a slow sequential path for long prompts due to\n # the mixed SWA/global attention architecture. Track mlx-lm updates.\n enabled: false\n prompts: [context-32k, context-64k, context-128k]\n\n # ── Group D: Qwen3-32B (Dense, non-MoE) ──────────────────────────────────────\n # Why: direct comparison — same Qwen3 family but dense 32B vs MoE 35B-A3B.\n # Dense models are typically slower (more active params per token) but may have\n # better recall / coherence at long context vs sparse MoE activation.\n # Model: mlx-community/Qwen3-32B-4bit (~16 GB download)\n # Native context: 131072 tokens\n\n - id: D_Q4_1\n model: \"Qwen3-32B\"\n group: \"D — Qwen3-32B (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3-32B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: D_CTX_1\n model: \"Qwen3-32B\"\n group: \"D — Qwen3-32B (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3-32B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # BENCHMARKED RESULT (2026-04-02):\n # context-32k: dec=10.4 t/s pre=38955 t/s TTFT=838ms (all runs OK)\n # context-64k+: OOM crash (connection refused) — KV exceeds available RAM\n # Dense 32B decode is 7× slower than MoE 35B-A3B at same context (10 vs 74 t/s)\n # because all 32B params are activated per token. Practical context ceiling: 32k.\n # 64k/128k capped: would require ~38 GB (64k) / ~76 GB (128k) KV on top of ~16 GB weights.\n prompts: [context-32k]\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: D_LC_Q4KM\n model: \"Qwen3-32B\"\n group: \"D — Qwen3-32B (Dense)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3-32B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: D_LC_UDQ4\n model: \"Qwen3-32B\"\n group: \"D — Qwen3-32B (Dense)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3-32B-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: D_LC_UDQ2\n model: \"Qwen3-32B\"\n group: \"D — Qwen3-32B (Dense)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3-32B-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n # ── Group E: Llama 3.3 70B ────────────────────────────────────────────────────\n # BENCHMARKED (2026-04-02):\n # Baseline decode: 8.5–8.9 t/s (short+code) — memory-bandwidth limited.\n # At 4bit × 70B params: each token reads ~35 GB weights from DRAM.\n # M3 Max ~400 GB/s bandwidth → theoretical max ~11 t/s → measured 8.5 t/s.\n # Context tests: OOM crash at 32k (37 GB model + KV exceeds 64 GB).\n # Verdict: not viable for Claude Code replacement on 64 GB. The model is\n # intelligent but too large to run at practical context + decode speed.\n # Use case: single-shot quality evaluation only (short prompts, no long ctx).\n # Model: mlx-community/Llama-3.3-70B-Instruct-4bit (downloaded 2026-04-02)\n # Native context: 131072 tokens\n\n - id: E_Q4_1\n model: \"Llama3.3-70B\"\n group: \"E — Llama 3.3 70B\"\n backend: mlx-lm\n model_id: \"mlx-community/Llama-3.3-70B-Instruct-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: E_CTX_1\n model: \"Llama3.3-70B\"\n group: \"E — Llama 3.3 70B\"\n backend: mlx-lm\n model_id: \"mlx-community/Llama-3.3-70B-Instruct-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # KNOWN ISSUE (2026-04-02): OOM crash at context-32k — model weights alone consume\n # ~37 GB; at 32k context, FP16 KV ≈ 6–7 GB additional → exceeds 64 GB budget.\n # Verdict: Llama 3.3 70B cannot run at any context depth on 64 GB unified memory.\n # Use E_Q4_1 (baseline short/code) for quality comparison only.\n enabled: false\n prompts: [context-32k, context-64k]\n\n - id: E_CTX_2\n model: \"Llama3.3-70B\"\n group: \"E — Llama 3.3 70B\"\n backend: mlx-vlm\n model_id: \"mlx-community/Llama-3.3-70B-Instruct-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n # KV-q4 cuts KV footprint 4×: 128k KV ≈ 10.7 GB → total ~48 GB → fits\n # KNOWN ISSUE: verify mlx-vlm supports llama3 architecture before enabling\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-128k]\n enabled: false # enable once mlx-vlm llama3 architecture support confirmed\n\n # ── Group F: TurboQuant KV cache compression ──────────────────────────────────\n # TurboQuant (Google, ICLR 2026): PolarQuant-based KV compression via random\n # QR rotation + Lloyd-Max scalar quantizer. Data-oblivious, training-free.\n # V2 implementation uses mx.quantized_matmul (Metal-accelerated) → -2% speed.\n # 4-bit: 4.6x compression; 3-bit: 5.5x compression; 3.5-bit: 4.6x, <0.3% ppl loss.\n # Install: git clone https://github.com/sharpner/turboquant-mlx /tmp/turboquant-mlx\n # /opt/homebrew/Cellar/mlx-lm/0.31.1/libexec/bin/pip install -e /tmp/turboquant-mlx\n # Or use run_turboquant_omlx.py which handles the install automatically.\n\n - id: F_TQ4_1\n model: \"Qwen3.5\"\n group: \"F — TurboQuant\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq4bit\n extra_args: [\"--tq-bits\", \"4\"]\n\n - id: F_TQ35_1\n model: \"Qwen3.5\"\n group: \"F — TurboQuant\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq3.5bit\n extra_args: [\"--tq-bits\", \"3.5\"]\n\n - id: F_CTX_1\n model: \"Qwen3.5\"\n group: \"F — TurboQuant\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq4bit\n extra_args: [\"--tq-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: F_CTX_2\n model: \"Qwen3.5\"\n group: \"F — TurboQuant\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq3bit\n extra_args: [\"--tq-bits\", \"3\"]\n prompts: [context-32k, context-64k, context-128k]\n\n # ── Group G: oMLX — SSD-tiered paged KV cache ─────────────────────────────────\n # oMLX (v0.3.0) persists KV cache in two tiers: hot blocks in RAM (~8GB),\n # cold blocks on NVMe SSD. Across requests, unchanged prefix blocks are reused\n # without re-prefill. Claims 10x faster effective prefill at 8K context vs\n # cold-start baselines, and \"virtually unlimited context\" via SSD spill.\n # Models: already in ~/.omlx/models/ (Qwen3.5-35B-A3B-4bit, Qwen3-Coder-Next-4bit)\n # cold_ttft_ms (warmup run) vs steady TTFT reveals cache warmup benefit.\n\n - id: G_1\n model: \"Qwen3.5\"\n group: \"G — oMLX (SSD KV Cache)\"\n backend: omlx\n model_id: \"Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n\n - id: G_CTX_1\n model: \"Qwen3.5\"\n group: \"G — oMLX (SSD KV Cache)\"\n backend: omlx\n model_id: \"Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n # BENCHMARKED (2026-04-02): oMLX hard-caps at 32768 tokens per request.\n # HTTP 400: \"Prompt too long: N tokens exceeds max context window of 32768 tokens\"\n # The SSD tier provides cross-request KV reuse (prefix cache), NOT extended per-request context.\n # 64k/128k are structurally impossible in current oMLX release.\n prompts: [context-32k]\n\n - id: G_2\n model: \"Coder\"\n group: \"G — oMLX (SSD KV Cache)\"\n backend: omlx\n model_id: \"Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n\n - id: G_CTX_2\n model: \"Coder\"\n group: \"G — oMLX (SSD KV Cache)\"\n backend: omlx\n model_id: \"Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n # Same 32768-token hard cap as G_CTX_1 — see note above.\n prompts: [context-32k]\n\n # ── Group H: llama-server cache-reuse (KV prefix sharing for agentic patterns) ─\n # --cache-reuse 256: enables KV shifting — when the server detects a shared\n # prefix (≥256 tokens), it reuses existing KV entries instead of recomputing.\n # Directly models Claude Code's pattern: same system prompt prepended every turn.\n # Compare with B_Q4_5 (kv-q8 without cache reuse) to isolate the reuse benefit.\n # -c 131072 allocates full 128k context window upfront.\n\n - id: H_CR_1\n model: \"Coder\"\n group: \"H — llama cache-reuse\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3-Coder-Next-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: kv-q8+reuse\n extra_args: [\"-ctk\", \"q8_0\", \"-ctv\", \"q8_0\", \"--cache-reuse\", \"256\",\n \"-c\", \"131072\"]\n\n - id: H_CTX_1\n model: \"Coder\"\n group: \"H — llama cache-reuse\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3-Coder-Next-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: kv-q8+reuse\n extra_args: [\"-ctk\", \"q8_0\", \"-ctv\", \"q8_0\", \"--cache-reuse\", \"256\",\n \"-c\", \"131072\"]\n prompts: [context-32k, context-64k]\n\n # ── Ollama 0.19 context tests (prefix cache warmup) ────────────────────────────\n # Ollama 0.19 added cross-conversation prefix caching (MLX-based).\n # cold_ttft_ms (warmup run) vs steady TTFT reveals cache warmup benefit.\n # Using NVFP4 (fastest TTFT in prior benchmarks: 63ms).\n\n - id: A_OLL_CTX\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.5:35b-a3b-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n # cold_ttft_ms vs run TTFT shows Ollama 0.19 prefix cache warmup benefit.\n prompts: [context-32k, context-64k]\n\n # ── Ollama 0.19 INT4 context (fastest format in document: 134 t/s decode) ─────\n # INT4 is the highest-throughput format in Ollama 0.19. Compare directly with\n # A_OLL_CTX (NVFP4) to measure format quality/speed tradeoff at long context.\n\n - id: A_OLL_CTX_INT4\n model: \"Qwen3.5\"\n group: \"A — Qwen3.5-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.5:35b-a3b-int4\"\n fmt: INT4\n quant: int4\n kv_cache: default\n prompts: [context-32k, context-64k]\n\n # ── Group I: vllm-mlx ─────────────────────────────────────────────────────────\n # vllm-mlx: pure-MLX vLLM port — continuous batching, content-based prefix\n # caching. Document claims 21–87% higher throughput than llama.cpp, 4.3x\n # aggregate at 16 concurrent requests (not measured here — single-request mode).\n # Install: see VLLM_MLX_VENV in benchmark.py\n # model_id: HF repo ID (same as mlx-lm)\n\n - id: I_Q4_1\n model: \"Qwen3.5\"\n group: \"I — vllm-mlx\"\n backend: vllm-mlx\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: I_Q4_2\n model: \"Coder\"\n group: \"I — vllm-mlx\"\n backend: vllm-mlx\n model_id: \"mlx-community/Qwen3-Coder-Next-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: I_CTX_1\n model: \"Qwen3.5\"\n group: \"I — vllm-mlx\"\n backend: vllm-mlx\n model_id: \"mlx-community/Qwen3.5-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n # ── Group J: LM Studio ────────────────────────────────────────────────────────\n # LM Studio: GUI wrapper around llama.cpp (GGUF) or mlx-lm backends.\n # Document: Ollama 0.18 was ~37% slower than LM Studio with same GGUF model.\n # Using models already loaded in LM Studio (see: lms ls).\n # The model IDs must match exactly what `lms ls` shows.\n # Note: LM Studio loads models on request; first run captures cold load time.\n\n - id: J_Q4_1\n model: \"Qwen3.5\"\n group: \"J — LM Studio\"\n backend: lm-studio\n model_id: \"qwen3.5-35b-a3b\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: J_Q4_2\n model: \"Coder\"\n group: \"J — LM Studio\"\n backend: lm-studio\n model_id: \"qwen3-coder-next\"\n # KNOWN ISSUE: LM Studio's modelLoadingGuardrails (mode: \"high\") blocks this model\n # (44.86 GB) even when 54+ GB free — guardrail includes safety margin + KV estimate.\n # Workaround: set modelLoadingGuardrails.mode=\"off\" in ~/.lmstudio/settings.json,\n # restart lms server, run test, restore settings. Model loads in ~12s once allowed.\n # prereq override so --list shows the guardrail note instead of generic \"start LM Studio\"\n prereq: \"\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group K — Gemma 4 26B A4B (MoE) — Google 2026-04-03\n # Architecture: Gemma4ForConditionalGeneration (MoE, 4B active / 26B total)\n # KV: 8 heads × head_dim=256 × 30 layers ≈ 240 KB/token (FP16)\n # Memory budget: ~13 GB weights (4bit) + KV\n # ctx-32k: ~8 GB KV → ~21 GB total ✓\n # ctx-64k: ~15 GB KV → ~28 GB total ✓\n # ctx-128k: ~30 GB KV → ~43 GB total ✓\n # ctx-256k: ~61 GB KV → ~74 GB total ✗ OOM\n # NOTE: Gemma 4 is a VLM (Gemma4ForConditionalGeneration) — use mlx-vlm backend.\n # mlx-lm 0.31.1 has no gemma4 module; mlx-vlm 0.4.3+ supports gemma4.\n # TurboQuant (K_TQ*) disabled — patches mlx_lm.models.cache, incompatible with VLM.\n # Ollama tags available: gemma4:26b (Q4_K_M ~18 GB)\n # mlx-community models: gemma-4-26b-a4b-it-4bit, -mxfp4, -nvfp4\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: K_Q4_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: K_Q4_2\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: K_Q4_3\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv2\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"2\"]\n enabled: false # verify gemma4 kv2 path in mlx-vlm before enabling\n\n - id: K_Q4_4\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: ollama\n model_id: \"gemma4:26b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n # Enabled 2026-04-03: Ollama 0.20.0 supports gemma4 once service actually\n # runs 0.20.0 binary (required updating /opt/homebrew/opt/ollama symlink).\n\n - id: K_MXFP4_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n # mxfp4 = MX Microscaling FP4 — new MLX-native quantization (2026). Same weight\n # size as 4bit but uses block-floating-point encoding for higher fidelity.\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: K_NVFP4_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: K_CTX_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # ctx-256k capped: ~61 GB KV + ~13 GB weights = ~74 GB > 64 GB unified memory\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: K_CTX_2\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n # kv4 halves KV: ctx-128k ≈ 15 GB KV + 13 GB weights = ~28 GB — good margin.\n # Expect very high TTFT (same slow mlx-vlm quantized-KV prefill path as A_CTX_2).\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: K_OLL_CTX_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: ollama\n model_id: \"gemma4:26b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n # cold_ttft_ms (warmup) vs steady TTFT reveals Ollama prefix cache benefit.\n # Enabled 2026-04-03: Ollama 0.20.0 supports gemma4 (see K_Q4_4).\n prompts: [context-32k, context-64k, context-128k]\n\n # TurboQuant — disabled: mlx-lm 0.31.1 has no gemma4 module.\n # TurboQuant patches mlx_lm.models.cache — only applicable to mlx-lm architectures.\n # Re-enable once mlx-lm ships gemma4 support.\n - id: K_TQ4_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq4bit\n extra_args: [\"--tq-bits\", \"4\"]\n enabled: false # mlx-lm lacks gemma4 support\n\n - id: K_TQ35_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq3.5bit\n extra_args: [\"--tq-bits\", \"3.5\"]\n enabled: false\n\n - id: K_TQ3_1\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq3bit\n extra_args: [\"--tq-bits\", \"3\"]\n enabled: false\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: K_LC_Q4KM\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-UD-Q4_K_M.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_M\n kv_cache: default\n\n - id: K_LC_UDQ4\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: K_LC_UDQ2\n model: \"Gemma4-26B-A4B\"\n group: \"K — Gemma4 26B A4B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group L — Gemma 4 31B Dense\n # Architecture: Dense Gemma4 (full attention, not MoE)\n # Memory budget: ~17 GB weights (4bit) + KV\n # NOTE: VLM architecture — use mlx-vlm backend; mlx-lm not supported.\n # Model: mlx-community/gemma-4-31b-it-4bit\n # Ollama tags available: gemma4:31b (Q4_K_M ~20 GB)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: L_Q4_1\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: L_Q4_2\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: L_Q4_3\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: ollama\n model_id: \"gemma4:31b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n # Enabled 2026-04-03: Ollama 0.20.0 supports gemma4 (see K_Q4_4).\n\n - id: L_MXFP4_1\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31b-it-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n server_timeout: 1200 # 31B mxfp4 needs >600s to load on M3 Max\n\n - id: L_NVFP4_1\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31b-it-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: L_CTX_1\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: L_CTX_2\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: L_OLL_CTX_1\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: ollama\n model_id: \"gemma4:31b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n # Enabled 2026-04-03: Ollama 0.20.0 supports gemma4 (see K_Q4_4).\n prompts: [context-32k, context-64k, context-128k]\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: L_LC_Q4KM\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-31B-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: L_LC_UDQ4\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-31B-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: L_LC_UDQ2\n model: \"Gemma4-31B\"\n group: \"L — Gemma4 31B Dense\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-31B-it-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group M — Gemma 4 E4B (Efficient 4B) — Google 2026-04\n # Small, fast model from the Gemma 4 family. ~2 GB weights at 4bit.\n # mlx-community models: gemma-4-e4b-it-4bit, -mxfp4, -nvfp4\n # Ollama tag: gemma4:4b (check availability)\n # ctx-256k fits easily: even 256k KV << 64 GB unified memory for 4B model\n # VLM architecture (Gemma4ForConditionalGeneration) — use mlx-vlm backend\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: M_Q4_1\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: M_Q4_2\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: M_MXFP4_1\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e4b-it-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: M_NVFP4_1\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e4b-it-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: M_Q4_3\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: ollama\n model_id: \"gemma4:e4b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: M_CTX_1\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n enabled: true # mlx-vlm 0.4.4 fixes per_layer_projection bug — re-enabled and benchmarked 2026-04-05\n # with sequences >2048 tokens. All E4B context runs crash the server.\n # Root: project_per_layer_inputs in gemma4/language.py line 449.\n\n - id: M_OLL_CTX_1\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: ollama\n model_id: \"gemma4:e4b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: M_LC_Q4KM\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: M_LC_UDQ4\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: M_LC_UDQ2\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n - id: M_LC_UDQ6\n model: \"Gemma4-E4B\"\n group: \"M — Gemma4 E4B (4B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-UD-Q6_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q6_K_XL\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group N — Gemma 4 E2B (Efficient 2B) — Google 2026-04\n # Smallest Gemma 4 model. ~1 GB weights at 4bit.\n # mlx-community models: gemma-4-e2b-it-4bit, -nvfp4 (no mxfp4 available)\n # Ollama tag: gemma4:2b (check availability)\n # VLM architecture (Gemma4ForConditionalGeneration) — use mlx-vlm backend\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: N_Q4_1\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e2b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: N_Q4_2\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e2b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: N_NVFP4_1\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e2b-it-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n enabled: false # 2026-04-04: mlx-community/gemma-4-e2b-it-nvfp4 has no weight files (1 metadata file only)\n\n - id: N_Q4_3\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: ollama\n model_id: \"gemma4:e2b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: N_CTX_1\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-e2b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n enabled: true # mlx-vlm 0.4.4 fixes per_layer_projection bug — re-enabled and benchmarked 2026-04-05\n\n - id: N_OLL_CTX_1\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: ollama\n model_id: \"gemma4:e2b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: N_LC_Q4KM\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: N_LC_UDQ4\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: N_LC_UDQ2\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n - id: N_LC_UDQ6\n model: \"Gemma4-E2B\"\n group: \"N — Gemma4 E2B (2B Efficient)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-UD-Q6_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q6_K_XL\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group O — Qwen3.6-35B-A3B (MoE, Gated Delta Networks) — Qwen 2026-04-16\n # Architecture: same MoE 35B-A3B shell as Qwen3.5 (3B active / 35B total)\n # but with Gated Delta Networks — improved agentic coding, repo-level\n # reasoning, thinking preservation across conversation history.\n # Native context: 262144 tokens\n # Memory budget: identical to Group A (~22 GB weights 4bit + KV)\n # HuggingFace: Qwen/Qwen3.6-35B-A3B\n # NOTE: released 2026-04-16 — mlx-community quantizations and Ollama tags\n # may not be available yet. Check before running:\n # huggingface-cli search mlx-community/Qwen3.6\n # ollama list | grep qwen3.6\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: O_Q4_1\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: O_Q4_2\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.6:35b-a3b-q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: O_Q4_3\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.6:35b-a3b-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n\n - id: O_Q4_4\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.6:35b-a3b-int4\"\n fmt: INT4\n quant: int4\n kv_cache: default\n\n - id: O_Q8_1\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-35B-A3B-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: O_CTX_1\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n - id: O_OLL_CTX\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: ollama\n model_id: \"qwen3.6:35b-a3b-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n prompts: [context-32k, context-64k]\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: O_LC_Q4KM\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_M\n kv_cache: default\n\n - id: O_LC_UDQ4\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: O_LC_UDQ2\n model: \"Qwen3.6-35B\"\n group: \"O — Qwen3.6-35B-A3B (MoE)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-35B-A3B-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group P — Qwen3.6-27B (Dense, VLM, Gated DeltaNet) — Qwen 2026-04-22\n # Architecture: Qwen3_5ForConditionalGeneration (Dense 27B, VLM)\n # Hybrid attention: 16× (3× Gated DeltaNet + 1× Gated Attention per block)\n # 64 layers total; only 16 full-attention layers need per-token KV cache.\n # DeltaNet layers use fixed-size state → KV cost is ~¼ of a standard 27B model.\n # Native context: 262,144 tokens (extensible to ~1M with YaRN)\n # Memory budget: ~16 GB weights (4bit)\n # KV: ~64 KB/token (16 full-attn layers × 4 KV heads × 256 head_dim)\n # ctx-32k: ~2 GB KV → ~18 GB total ✓\n # ctx-64k: ~4 GB KV → ~20 GB total ✓\n # ctx-128k: ~8 GB KV → ~24 GB total ✓\n # ctx-256k: ~16 GB KV → ~32 GB total ✓\n # NOTE: VLM architecture (Qwen3_5ForConditionalGeneration) but mlx-lm also\n # supports qwen3_5 model type (text-only mode). Both mlx-lm and mlx-vlm work.\n # TurboQuant (mlx-lm-turboquant) also works via mlx-lm text path.\n # HuggingFace: Qwen/Qwen3.6-27B\n # mlx-community models: Qwen3.6-27B-4bit, -8bit, -mxfp4, -nvfp4\n # Ollama tags: qwen3.6:27b (Q4_K_M), :27b-nvfp4, :27b-q8_0\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: P_Q4_0\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: P_Q4_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n\n - id: P_Q4_2\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n\n - id: P_Q4_3\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv2\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"2\"]\n enabled: false # verify kv2 path in mlx-vlm for qwen3_5 before enabling\n\n - id: P_Q4_4\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: ollama\n model_id: \"qwen3.6:27b-q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: P_Q4_5\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: ollama\n model_id: \"qwen3.6:27b-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n\n - id: P_Q8_0\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-27B-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n # ~30 GB weights; feasible on 64 GB for short context but tight for long ctx\n\n - id: P_Q8_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n # ~30 GB weights; feasible on 64 GB for short context but tight for long ctx\n\n - id: P_MXFP4_0\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-27B-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n\n - id: P_MXFP4_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n\n - id: P_NVFP4_0\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-27B-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n\n - id: P_NVFP4_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n\n - id: P_VLLM_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: vllm-mlx\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: P_CTX_0\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # BENCHMARKED (2026-04-23): 32k/64k work fine. 128k crashes (connection refused).\n # Despite low theoretical KV cost (~8 GB at 128k), mlx-lm may allocate more due to\n # DeltaNet state buffers. Capped at 64k for now.\n prompts: [context-32k, context-64k]\n\n - id: P_CTX_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # Hybrid DeltaNet/attention → very low KV cost. 128k should fit easily.\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n\n - id: P_CTX_2\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-vlm\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n # kv4 halves KV: ctx-256k ≈ 8 GB KV + 16 GB weights = ~24 GB — good margin.\n # Expect high TTFT (slow mlx-vlm quantized-KV prefill path, see A_CTX_2).\n extra_args: [\"--max-kv-size\", \"262144\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n enabled: false # mlx-vlm returns HTTP 500 for qwen3_5 architecture\n\n - id: P_OLL_CTX\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: ollama\n model_id: \"qwen3.6:27b-q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n - id: P_TQ4_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq4bit\n extra_args: [\"--tq-bits\", \"4\"]\n\n - id: P_TQ35_1\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq3.5bit\n extra_args: [\"--tq-bits\", \"3.5\"]\n\n # llama-server (llama.cpp) — Unsloth Dynamic GGUF quants\n # Downloaded one-at-a-time and purged after run to save disk space.\n # Use run_llamacpp_qwen36.py to orchestrate download→bench→delete cycle.\n\n - id: P_LC_Q4KM\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: P_LC_UDQ4\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: P_LC_UDQ6\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-UD-Q6_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q6_K_XL\n kv_cache: default\n\n - id: P_LC_UDQ2\n model: \"Qwen3.6-27B\"\n group: \"P — Qwen3.6-27B (Dense, VLM)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group Q — MTP Speculative Decoding (BLOCKED — mlx-lm 0.31.3 limitations)\n #\n # Three approaches investigated, all blocked:\n #\n # 1. Google's official MTP drafter (gemma4_assistant model_type):\n # - Uses a centroid-based output head (num_centroids: 2048) that hooks\n # into backbone hidden states (pre_projection 5632→1024, post 1024→2816)\n # - NOT a standalone autoregressive model — designed to inject into backbone\n # forward pass, not work as an independent draft model\n # - mlx-lm 0.31.3 has no gemma4_assistant module (raises ValueError on load)\n #\n # 2. Naive speculative (E2B as draft for 26B):\n # - E2B is Gemma4ForConditionalGeneration (VLM) with num_kv_shared_layers=20\n # - mlx-lm gemma4.py loads 26B (num_kv_shared_layers=0) fine, but fails\n # for E2B: 20 layers × 7 KV weight tensors = 140 \"extra parameters\"\n # because gemma4_text.py doesn't match the quantized VLM weight layout\n # - Additionally: 26B is MoE (30 layers), E2B is dense (35 layers) →\n # architecturally incompatible for mlx-lm speculative decoding\n #\n # 3. E2B draft for E4B (both dense):\n # - Same num_kv_shared_layers bug affects E4B (num_kv_shared_layers=18)\n # - Both would need fixes in mlx-lm before this works\n #\n # Resolution: needs mlx-lm update (either gemma4_assistant support or fix\n # for num_kv_shared_layers weight loading in quantized Gemma4 VLMs).\n # Re-enable when mlx-lm 0.31.4+ ships with a fix.\n # ══════════════════════════════════════════════════════════════════════════════\n\n # ── llama.cpp speculative decoding (viable alternative to mlx-lm MTP) ───────\n # Gemma4-26B as main model, Gemma4-E2B as draft model.\n # Both share the same Gemma4 tokenizer (262144-token vocab) — required for\n # llama.cpp speculative decoding. Draft is offloaded fully (-ngld 99).\n # GGUFs downloaded via run_llamacpp_all.py (groups N + K).\n\n - id: Q_LC_SPEC1\n model: \"Gemma4-26B-A4B\"\n group: \"Q — Speculative Decoding (llama.cpp)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-UD-Q4_K_M.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_M\n kv_cache: spec-e2b\n extra_args: [\"-md\", \"/Users/HIESCHA/.cache/llmfit/models/gemma-4-E2B-it-Q4_K_M.gguf\", \"-ngld\", \"99\"]\n\n - id: Q_LC_SPEC2\n model: \"Gemma4-26B-A4B\"\n group: \"Q — Speculative Decoding (llama.cpp)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: spec-e2b\n extra_args: [\"-md\", \"/Users/HIESCHA/.cache/llmfit/models/gemma-4-E2B-it-Q4_K_M.gguf\", \"-ngld\", \"99\"]\n\n # ── dflash block diffusion speculative decoding (MLX native) ───────────────\n # Uses z-lab's 0.4B diffusion drafters — generates ~16 tokens per draft step.\n # Comparison: Q_LC_SPEC* uses llama.cpp + 2B E2B draft (classical spec decode)\n\n - id: Q_DF_K1\n model: \"Gemma4-26B-A4B\"\n group: \"Q — Speculative Decoding (DFlash)\"\n backend: dflash\n model_id: \"mlx-community/gemma-4-26b-a4b-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: dflash-0.4B\n extra_args: [\"--draft-model\", \"z-lab/gemma-4-26B-A4B-it-DFlash\"]\n\n # Q_DF_P1 removed: dflash drafter for Qwen3.6-27B shows no speedup over baseline\n # (~24 t/s vs 25 t/s baseline). Acceptance rate too low for block-diffusion to help.\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group R — MTP Speculative Decoding (self-draft via trained MTP heads)\n # Qwen3.6 models ship with MTP heads; no separate draft model needed.\n # Requires llama.cpp from am17an/llama.cpp:mtp-clean branch.\n # Expected speedup: 1.5-2x over baseline.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: R_MTP_P1\n model: \"Qwen3.6-27B\"\n group: \"R — MTP Speculative Decoding\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-MTP-UD-Q4_K_XL.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: mtp-2\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\"]\n\n - id: R_MTP_O1\n model: \"Qwen3.6-35B-A3B\"\n group: \"R — MTP Speculative Decoding\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-35B-A3B-MTP-UD-Q4_K_XL.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: mtp-2\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\"]\n # Re-enabled: using unsloth/Qwen3.6-35B-A3B-MTP-GGUF (MTP heads included)\n\n - id: R_MTP_P2\n model: \"Qwen3.6-27B\"\n group: \"R — MTP Speculative Decoding\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-MTP-IQ4_NL.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: IQ4_NL\n kv_cache: mtp-2\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group R — Thinking Mode (Qwen3.6 /think enabled, measures think+visible tps)\n # Uses llama-server with --reasoning on (separates thinking into reasoning_content)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: R_THINK_O1\n model: \"Qwen3.6-35B-A3B\"\n group: \"R — Thinking Mode\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-35B-A3B-MTP-UD-Q4_K_XL.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: think\n no_think: false\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\", \"--reasoning-format\", \"deepseek\"]\n\n - id: R_THINK_P1\n model: \"Qwen3.6-27B\"\n group: \"R — Thinking Mode\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-27B-MTP-UD-Q4_K_XL.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: think\n no_think: false\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\", \"--reasoning-format\", \"deepseek\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group T — Qwen3.6 backend comparisons (vllm-mlx, MXFP4_MOE)\n # Note: vllm-mlx --enable-mtp requires MTP heads in MLX weights, which no\n # current MLX quantization of Qwen3.6 includes. These run without MTP as\n # baseline comparison of vllm-mlx vs llama.cpp for the same models.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: T_VM_O1\n model: \"Qwen3.6-35B-A3B\"\n group: \"T — Qwen3.6 Backend Comparison\"\n backend: vllm-mlx\n model_id: \"mlx-community/Qwen3.6-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: T_VM_P1\n model: \"Qwen3.6-27B\"\n group: \"T — Qwen3.6 Backend Comparison\"\n backend: vllm-mlx\n model_id: \"mlx-community/Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: T_MX_O1\n model: \"Qwen3.6-35B-A3B\"\n group: \"T — Qwen3.6 Backend Comparison\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Qwen3.6-35B-A3B-MXFP4_MOE.gguf\"\n fmt: GGUF\n quant: MXFP4_MOE\n kv_cache: default\n extra_args: [\"-fa\", \"on\"]\n\n - id: T_OX_O1\n model: \"Qwen3.6-35B-A3B\"\n group: \"T — Qwen3.6 Backend Comparison\"\n backend: omlx\n model_id: \"Qwen3.6-35B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n\n - id: T_OX_P1\n model: \"Qwen3.6-27B\"\n group: \"T — Qwen3.6 Backend Comparison\"\n backend: omlx\n model_id: \"Qwen3.6-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group S — Unsloth Studio (llama.cpp b9134 wrapper with E2B speculative decoding)\n # Uses OpenAI-compat API with auth. Auto-downloads models.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: S_US_P1\n model: \"Qwen3.6-27B\"\n group: \"S — Unsloth Studio\"\n backend: unsloth-studio\n model_id: \"unsloth/Qwen3.6-27B-GGUF:UD-Q4_K_XL\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: e2b-spec\n api_key: \"sk-unsloth-123a4291dfc96ee67d435ccadce4abe4\"\n extra_args: [\"--max-seq-length\", \"8192\"]\n\n - id: S_US_P2\n model: \"Qwen3.6-27B\"\n group: \"S — Unsloth Studio\"\n backend: unsloth-studio\n model_id: \"unsloth/Qwen3.6-27B-GGUF:UD-Q2_K_XL\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: e2b-spec\n api_key: \"sk-unsloth-123a4291dfc96ee67d435ccadce4abe4\"\n extra_args: [\"--max-seq-length\", \"8192\"]\n\n - id: S_US_O1\n model: \"Qwen3.6-35B-A3B\"\n group: \"S — Unsloth Studio\"\n backend: unsloth-studio\n model_id: \"unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: e2b-spec\n api_key: \"sk-unsloth-123a4291dfc96ee67d435ccadce4abe4\"\n extra_args: [\"--max-seq-length\", \"8192\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group U — Gemma 4 12B (Dense, Unified/Encoder-Free) — Google 2026-06-03\n # Architecture: Dense 12B, unified encoder-free design (no separate vision/audio\n # encoders — raw patches/waveforms projected into LLM embedding space via\n # lightweight linear layers). Hybrid attention: sliding window (1024) + global.\n # Parameters: 11.95B, 48 layers\n # Native context: 256,144 tokens\n # Memory budget: ~6 GB weights (4bit), ~12 GB (8bit)\n # KV: sliding window keeps effective KV cost low for most layers\n # ctx-128k fits easily on 64 GB at 4bit\n # Thinking: supports enable_thinking=True (\"ultrathink\" mode)\n # NOTE: VLM architecture — use mlx-vlm backend (same as other Gemma 4 models).\n # HuggingFace: google/gemma-4-12B-it\n # mlx-community models: gemma-4-12B-it-4bit, -8bit, -mxfp4, -nvfp4\n # Ollama tags: gemma4:12b\n # GGUF: unsloth/gemma-4-12b-it-GGUF (Q4_K_M ~7 GB, UD-Q4_K_XL ~7.4 GB)\n # ══════════════════════════════════════════════════════════════════════════════\n\n # NOTE (2026-06-04): Gemma 4 12B uses model_type \"gemma4_unified\"\n # (Gemma4UnifiedForConditionalGeneration) — a new architecture not supported by\n # mlx-vlm (which only has gemma4 / Gemma4ForConditionalGeneration).\n # All mlx-vlm tests disabled until mlx-vlm ships gemma4_unified support.\n # Track: https://github.com/Blaizzy/mlx-vlm for updates.\n\n - id: U_Q4_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_Q4_2\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_Q8_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_MXFP4_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_NVFP4_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_Q4_3\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: ollama\n model_id: \"gemma4:12b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n # unblocked: Ollama 0.30.x supports gemma4:12b\n\n - id: U_CTX_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_CTX_2\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_OLL_CTX_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: ollama\n model_id: \"gemma4:12b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n # unblocked: Ollama 0.30.x supports gemma4:12b\n\n # llama-server — Unsloth GGUF quants (download→bench→purge via run_llamacpp_all.py)\n - id: U_LC_Q4KM\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: U_LC_UDQ4\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n\n - id: U_LC_UDQ2\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n - id: U_LC_UDQ6\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-UD-Q6_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q6_K_XL\n kv_cache: default\n\n # ── vllm-mlx ─────────────────────────────────────────────────────────────────\n - id: U_VM_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: vllm-mlx\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n # unblocked: vllm-mlx should support gemma4_unified via mlx-vlm 0.6.1\n\n # ── oMLX (SSD-tiered paged KV cache) ───────────────────────────────────────\n - id: U_OX_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: omlx\n model_id: \"gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n # unblocked: oMLX 0.4.1 supports gemma4_unified\n\n - id: U_OX_CTX_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: omlx\n model_id: \"gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n # unblocked: oMLX 0.4.1 supports gemma4_unified\n # oMLX hard-caps at 32768 tokens per request (same as other oMLX tests)\n prompts: [context-32k]\n\n # ── Docker Model Runner ─────────────────────────────────────────────────────\n - id: U_DMR_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: docker-model-runner\n model_id: \"docker.io/ai/gemma4:12B-Q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ── LM Studio ──────────────────────────────────────────────────────────────\n - id: U_LMS_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: lm-studio\n model_id: \"gemma-4-12b-it\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n # ── Speculative Decoding (llama.cpp: E2B as draft for 12B) ─────────────────\n # Both Gemma4-12B and E2B share the same 262144-token vocab → compatible.\n # E2B (~2.6 GB GGUF) as lightweight draft model for 12B main model.\n - id: U_SPEC_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Speculative)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: spec-e2b\n extra_args: [\"-md\", \"/Users/HIESCHA/.cache/llmfit/models/gemma-4-E2B-it-Q4_K_M.gguf\", \"-ngld\", \"99\"]\n\n - id: U_SPEC_2\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Speculative)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: spec-e2b\n extra_args: [\"-md\", \"/Users/HIESCHA/.cache/llmfit/models/gemma-4-E2B-it-Q4_K_M.gguf\", \"-ngld\", \"99\"]\n\n # ── DFlash block diffusion speculative decoding (MLX native) ────────────────\n # Uses z-lab's diffusion drafters — generates ~16 tokens per draft step.\n # NOTE: drafter (z-lab/gemma-4-12B-it-DFlash) may not exist yet — disable if unavailable.\n - id: U_DF_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Speculative)\"\n backend: dflash\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: dflash-0.4B\n extra_args: [\"--draft-model\", \"z-lab/gemma-4-12B-it-DFlash\"]\n enabled: false # enable once z-lab publishes DFlash drafter for 12B\n\n # ── MTP Speculative Decoding (self-draft via trained MTP heads) ─────────────\n # Blog says Gemma 4 12B ships with MTP drafters for reduced latency.\n # Requires llama.cpp MTP branch (vendor/llama-mtp).\n # GGUF: barozp/gemma4-12b-it-mtp-GGUF (community) — verify quality before trusting.\n - id: U_MTP_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (MTP)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-MTP-Q4_K_M.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: mtp-2\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\"]\n enabled: false # enable once MTP GGUF verified (barozp/gemma4-12b-it-mtp-GGUF or unsloth official)\n\n - id: U_MTP_2\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (MTP)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-MTP-UD-Q4_K_XL.gguf\"\n server_binary: \"~/Projects/Work/llm-bench/vendor/llama-mtp/build/bin/llama-server\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: mtp-2\n extra_args: [\"--spec-type\", \"draft-mtp\", \"--spec-draft-n-max\", \"2\", \"-fa\", \"on\", \"-np\", \"1\", \"-c\", \"8192\"]\n enabled: false # enable once MTP GGUF verified\n\n # ── TurboQuant (KV cache compression) ──────────────────────────────────────\n # BLOCKED: mlx-lm has no gemma4 module. TurboQuant patches mlx_lm.models.cache.\n # Re-enable once mlx-lm ships gemma4 support.\n - id: U_TQ4_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq4bit\n extra_args: [\"--tq-bits\", \"4\"]\n enabled: false # mlx-lm lacks gemma4 support\n\n - id: U_TQ35_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Dense, Unified)\"\n backend: mlx-lm-turboquant\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: tq3.5bit\n extra_args: [\"--tq-bits\", \"3.5\"]\n enabled: false # mlx-lm lacks gemma4 support\n\n # ── Ultrathink (thinking mode enabled) ──────────────────────────────────────\n # Gemma 4 12B supports thinking via enable_thinking=True. Measures think+visible tps.\n # Uses temperature=0.6 (required for thinking mode per Google docs).\n\n - id: U_THINK_1\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Ultrathink)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ultrathink\n no_think: false\n max_tokens: 2048\n extra_args: [\"--max-kv-size\", \"32768\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_THINK_2\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Ultrathink)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: ultrathink\n no_think: false\n max_tokens: 2048\n extra_args: [\"--max-kv-size\", \"32768\"]\n # unblocked: mlx-vlm 0.6.1 supports gemma4_unified\n\n - id: U_THINK_3\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Ultrathink)\"\n backend: ollama\n model_id: \"gemma4:12b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: ultrathink\n no_think: false\n max_tokens: 2048\n # unblocked: Ollama 0.30.x supports gemma4:12b\n\n - id: U_THINK_4\n model: \"Gemma4-12B\"\n group: \"U — Gemma4 12B (Ultrathink)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: ultrathink\n no_think: false\n max_tokens: 2048\n extra_args: [\"--reasoning-format\", \"deepseek\"]\n\n # ── Group W — QAT (Quantization-Aware Training) ──────────────────────────────\n # Official Google QAT checkpoints — quantization baked into training, not post-hoc.\n # Compare against same-bitwidth PTQ (U_LC_Q4KM, U_LC_UDQ4) for quality/speed delta.\n\n - id: W_QAT_Q4_1\n model: \"Gemma4-12B\"\n group: \"W — QAT (Gemma4 12B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12b-it-qat-q4_0.gguf\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: W_QAT_Q4_2\n model: \"Gemma4-12B\"\n group: \"W — QAT (Gemma4 12B)\"\n backend: ollama\n model_id: \"gemma4-12b-qat\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: W_QAT_UDQ4_1\n model: \"Gemma4-12B\"\n group: \"W — QAT (Gemma4 12B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-12B-it-qat-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q4_K_XL\n kv_cache: default\n\n # ── MLX QAT models (mlx-community quantizations of Google's QAT checkpoints) ─\n - id: W_QAT_MLX_1\n model: \"Gemma4-12B\"\n group: \"W — QAT (Gemma4 12B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-qat-4bit\"\n fmt: MLX\n quant: QAT-4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: W_QAT_NVFP4_1\n model: \"Gemma4-12B\"\n group: \"W — QAT (Gemma4 12B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-12B-it-qat-nvfp4\"\n fmt: NVFP4\n quant: QAT-nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group X — QAT (Gemma4 26B A4B) — Google official QAT checkpoints\n # Compare against Group K PTQ baselines (K_LC_Q4KM, K_Q4_1, etc.)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: X_QAT_Q4_1\n model: \"Gemma4-26B-A4B\"\n group: \"X — QAT (Gemma4 26B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-qat-q4_0.gguf\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: X_QAT_UDQ4_1\n model: \"Gemma4-26B-A4B\"\n group: \"X — QAT (Gemma4 26B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q4_K_XL\n kv_cache: default\n\n - id: X_QAT_OLL_1\n model: \"Gemma4-26B-A4B\"\n group: \"X — QAT (Gemma4 26B)\"\n backend: ollama\n model_id: \"gemma4:26b-qat\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: X_QAT_MLX_1\n model: \"Gemma4-26B-A4B\"\n group: \"X — QAT (Gemma4 26B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26B-A4B-it-qat-mxfp4\"\n fmt: MXFP4\n quant: QAT-mxfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: X_QAT_NVFP4_1\n model: \"Gemma4-26B-A4B\"\n group: \"X — QAT (Gemma4 26B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-26B-A4B-it-qat-nvfp4\"\n fmt: NVFP4\n quant: QAT-nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group Y — QAT (Gemma4 31B Dense) — Google official QAT checkpoints\n # Compare against Group L PTQ baselines (L_LC_Q4KM, L_Q4_1, etc.)\n # 31B dense is the largest Gemma4 model; QAT-Q4_0 ~20 GB GGUF.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: Y_QAT_Q4_1\n model: \"Gemma4-31B\"\n group: \"Y — QAT (Gemma4 31B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-31B-it-qat-q4_0.gguf\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: Y_QAT_UDQ4_1\n model: \"Gemma4-31B\"\n group: \"Y — QAT (Gemma4 31B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-31B-it-qat-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q4_K_XL\n kv_cache: default\n\n - id: Y_QAT_OLL_1\n model: \"Gemma4-31B\"\n group: \"Y — QAT (Gemma4 31B)\"\n backend: ollama\n model_id: \"gemma4:31b-qat\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: Y_QAT_MLX_1\n model: \"Gemma4-31B\"\n group: \"Y — QAT (Gemma4 31B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31B-it-qat-4bit\"\n fmt: MLX\n quant: QAT-4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: Y_QAT_NVFP4_1\n model: \"Gemma4-31B\"\n group: \"Y — QAT (Gemma4 31B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-31B-it-qat-nvfp4\"\n fmt: NVFP4\n quant: QAT-nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group Z — QAT (Gemma4 E4B + E2B) — Google official QAT checkpoints\n # Compare against Groups M/N PTQ baselines\n # ══════════════════════════════════════════════════════════════════════════════\n\n # ── E4B QAT ─────────────────────────────────────────────────────────────────\n - id: Z_E4B_QAT_Q4_1\n model: \"Gemma4-E4B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-qat-q4_0.gguf\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: Z_E4B_QAT_UDQ4_1\n model: \"Gemma4-E4B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-qat-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q4_K_XL\n kv_cache: default\n\n - id: Z_E4B_QAT_UDQ2_1\n model: \"Gemma4-E4B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E4B-it-qat-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q2_K_XL\n kv_cache: default\n\n - id: Z_E4B_QAT_OLL_1\n model: \"Gemma4-E4B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: ollama\n model_id: \"gemma4:e4b-qat\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: Z_E4B_QAT_MLX_1\n model: \"Gemma4-E4B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-E4B-it-qat-4bit\"\n fmt: MLX\n quant: QAT-4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: Z_E4B_QAT_NVFP4_1\n model: \"Gemma4-E4B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-E4B-it-qat-nvfp4\"\n fmt: NVFP4\n quant: QAT-nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n # ── E2B QAT ─────────────────────────────────────────────────────────────────\n - id: Z_E2B_QAT_Q4_1\n model: \"Gemma4-E2B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-qat-q4_0.gguf\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: Z_E2B_QAT_UDQ4_1\n model: \"Gemma4-E2B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-qat-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q4_K_XL\n kv_cache: default\n\n - id: Z_E2B_QAT_UDQ2_1\n model: \"Gemma4-E2B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/gemma-4-E2B-it-qat-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: QAT-UD-Q2_K_XL\n kv_cache: default\n\n - id: Z_E2B_QAT_OLL_1\n model: \"Gemma4-E2B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: ollama\n model_id: \"gemma4:e2b-qat\"\n fmt: GGUF\n quant: QAT-Q4_0\n kv_cache: default\n\n - id: Z_E2B_QAT_MLX_1\n model: \"Gemma4-E2B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-E2B-it-qat-4bit\"\n fmt: MLX\n quant: QAT-4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: Z_E2B_QAT_NVFP4_1\n model: \"Gemma4-E2B\"\n group: \"Z — QAT (Gemma4 E4B/E2B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/gemma-4-E2B-it-qat-nvfp4\"\n fmt: NVFP4\n quant: QAT-nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n # ── Group V — LiteRT-LM (Google Edge Runtime, Metal GPU) ─────────────────────\n # LiteRT-LM v0.13.1 — serves all imported models via OpenAI-compatible API on\n # port 9379. Use model_id \"name,gpu\" for Metal GPU backend.\n # Models: gemma4-e2b (2.4GB), gemma4-e4b (3.4GB), gemma4-12b (6.1GB)\n\n - id: V_E2B_1\n model: \"Gemma4-E2B\"\n group: \"V — LiteRT-LM\"\n backend: litert-lm\n model_id: \"gemma4-e2b,gpu\"\n fmt: LiteRT\n quant: default\n kv_cache: default\n\n - id: V_E4B_1\n model: \"Gemma4-E4B\"\n group: \"V — LiteRT-LM\"\n backend: litert-lm\n model_id: \"gemma4-e4b,gpu\"\n fmt: LiteRT\n quant: default\n kv_cache: default\n\n - id: V_12B_1\n model: \"Gemma4-12B\"\n group: \"V — LiteRT-LM\"\n backend: litert-lm\n model_id: \"gemma4-12b,gpu\"\n fmt: LiteRT\n quant: default\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group DG — DiffusionGemma 26B-A4B (Block Diffusion, MoE)\n # Architecture: DiffusionGemmaForBlockDiffusion — 26B MoE (3.8B active / 25.2B total)\n # Uses discrete diffusion with block-autoregressive multi-canvas sampling:\n # generates 256-token blocks in parallel via iterative denoising, NOT\n # standard autoregressive token-by-token generation.\n # Claims: up to 4x faster inference (1000+ tok/s on H100, 700+ on RTX 5090)\n # Native context: 256K tokens (sliding window 1024 + global attention)\n # Memory budget: same as Gemma4 26B A4B (~13 GB weights at 4bit + KV)\n # HuggingFace: google/diffusiongemma-26B-A4B-it (Apache 2.0)\n # mlx-community models: diffusiongemma-26B-A4B-it-4bit, -8bit, -5bit, -6bit,\n # -mxfp4, -mxfp8, -nvfp4, -bf16\n # GGUF: unsloth/diffusiongemma-26B-A4B-it-GGUF (Q4_K_M, Q5_K_M, Q6_K, Q8_0)\n # Backend support:\n # mlx-vlm 0.6.0+ — supports diffusion_gemma model type (block diffusion decoding)\n # Unsloth Studio — OpenAI-compat API with native diffusion decoding (uses llama.cpp internally)\n # vLLM (GPU) — supports diffusion decoding via OpenAI-compat API\n # llama.cpp — DRAFT PR #24423 only, no server mode yet (llama-diffusion-cli only)\n # Ollama — NOT supported (depends on llama.cpp merge)\n # NOTE: llama.cpp GGUF quants exist but standard llama-server cannot run them\n # with diffusion decoding. Only llama-diffusion-cli (from PR #24423) works.\n # Unsloth Studio wraps llama.cpp with its own diffusion path — use DG_US_* configs.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: DG_Q4_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n server_timeout: 1200\n temperature: 0.7\n\n - id: DG_Q4_2\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n server_timeout: 1200\n temperature: 0.7\n\n - id: DG_Q8_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n temperature: 0.7\n\n - id: DG_MXFP4_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-mxfp4\"\n fmt: MXFP4\n quant: mxfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n temperature: 0.7\n enabled: false # mlx-vlm dequantize crash: MXFP4 affine quant incompatible with diffusion soft-embedding\n\n - id: DG_NVFP4_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-nvfp4\"\n fmt: NVFP4\n quant: nvfp4\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n temperature: 0.7\n enabled: false # Same dequantize crash as MXFP4 — affine quant incompatible with diffusion path\n\n - id: DG_CTX_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n temperature: 0.7\n enabled: false # OOM crash — 15 GB model + 128k FP16 KV exceeds 64 GB\n\n - id: DG_CTX_2\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: mlx-vlm\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n temperature: 0.7\n enabled: false # OOM crash — even with kv4, large-context DG overflows 64 GB\n\n # ── vllm-mlx (may support diffusion decoding via mlx-vlm integration) ───────\n - id: DG_VM_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: vllm-mlx\n model_id: \"mlx-community/diffusiongemma-26B-A4B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n temperature: 0.7\n enabled: false # vllm-mlx's mlx_lm doesn't support diffusion_gemma model type\n\n # ── oMLX (SSD-tiered paged KV cache) ───────────────────────────────────────\n - id: DG_OX_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: omlx\n model_id: \"diffusiongemma-26B-A4B-it-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n temperature: 0.7\n\n # ── llama-diffusion-cli (PR #24423 branch build) via diffusion_server.py ─────\n - id: DG_DIFF_Q4\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: diffusion-cli\n model_id: \"hf:unsloth/diffusiongemma-26B-A4B-it-GGUF:diffusiongemma-26B-A4B-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n temperature: 0.7\n server_timeout: 30\n\n # ── Ollama — NOT supported (standard llama.cpp has no diffusion decoding) ───\n - id: DG_OLL_1\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: ollama\n model_id: \"diffusiongemma:26b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n enabled: false # Ollama/llama.cpp cannot do diffusion decoding yet (PR #24423 not merged)\n\n # ── llama-server — BLOCKED (no server mode in diffusion PR) ─────────────────\n # GGUF files exist (unsloth/diffusiongemma-26B-A4B-it-GGUF) but only\n # llama-diffusion-cli can decode them with diffusion; no HTTP server available.\n - id: DG_LC_Q4KM\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/diffusiongemma-26B-A4B-it-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n enabled: false # llama-server cannot do diffusion decoding (only llama-diffusion-cli from PR #24423)\n\n - id: DG_LC_Q8\n model: \"DiffusionGemma\"\n group: \"DG — DiffusionGemma 26B-A4B (Block Diffusion)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/diffusiongemma-26B-A4B-it-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n enabled: false # llama-server cannot do diffusion decoding\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group NC — North Mini Code 1.0 (Cohere, MoE 30B-A3B, Agentic Coding)\n # Architecture: cohere2_moe — 30B MoE (3B active / 30B total)\n # 128 experts, 8 active per token. Interleaved sliding-window + global\n # attention (3:1 ratio). SwiGLU FFN. Sigmoid-gated router.\n # Context: 128K tokens (trained Stage 1 @ 64K, Stage 2 @ 128K)\n # License: Apache 2.0\n # Purpose: agentic software engineering — SWE-Bench 80.2% pass@10,\n # outperforms Qwen3.5-35B-A3B, Gemma4-26B-A4B on Artificial Analysis\n # Coding Index (33.4). Direct competitor to Group A/O/B.\n # Memory budget: ~18 GB weights (4bit) + KV. Very similar to Qwen3.5 35B-A3B.\n # HuggingFace: CohereLabs/North-Mini-Code-1.0\n # mlx-community: North-Mini-Code-1.0-4bit, -5bit, -6bit, -bf16\n # GGUF: unsloth/North-Mini-Code-1.0-GGUF (UD-Q4_K_M ~19 GB, UD-Q4_K_XL ~19 GB,\n # UD-Q2_K_XL ~10 GB, Q8_0 ~32 GB, MXFP4_MOE ~19 GB)\n # NOTE: model_type is cohere2_moe — mlx-vlm 0.6.2+ supports this.\n # mlx-lm support unclear (cohere2_moe may not be in mlx_lm.models).\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: NC_Q4_1\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: NC_Q4_2\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: NC_Q4_3\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: mlx-lm\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n enabled: false # mlx-lm 0.31.1 doesn't support cohere2_moe architecture\n\n - id: NC_CTX_1\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: NC_CTX_2\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: mlx-vlm\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"131072\", \"--kv-bits\", \"4\"]\n prompts: [context-32k, context-64k, context-128k]\n\n # ── vllm-mlx ─────────────────────────────────────────────────────────────────\n - id: NC_VM_1\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: vllm-mlx\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n enabled: false # vllm-mlx's mlx_lm doesn't support cohere2_moe architecture\n\n # ── oMLX (SSD-tiered paged KV cache) ───────────────────────────────────────\n - id: NC_OX_1\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: omlx\n model_id: \"North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: ssd-paged\n\n # ── Ollama (HF GGUF path — BLOCKED: Ollama 0.30.7 only ships MLX runner) ─────\n - id: NC_OLL_1\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: ollama\n model_id: \"hf.co/unsloth/North-Mini-Code-1.0-GGUF:Q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n enabled: false # Ollama 0.30.7 only has MLX runner; HF GGUF requires llama-server runner\n\n # ── llama-server — Unsloth GGUF quants ─────────────────────────────────────\n - id: NC_LC_Q4KM\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/North-Mini-Code-1.0-UD-Q4_K_M.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_M\n kv_cache: default\n enabled: false # llama.cpp 9590 doesn't support cohere2moe architecture\n\n - id: NC_LC_UDQ4\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/North-Mini-Code-1.0-UD-Q4_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q4_K_XL\n kv_cache: default\n enabled: false # llama.cpp 9590 doesn't support cohere2moe architecture\n\n - id: NC_LC_UDQ2\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/North-Mini-Code-1.0-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n enabled: false # llama.cpp 9590 doesn't support cohere2moe architecture\n\n - id: NC_LC_MXFP4\n model: \"NorthCode\"\n group: \"NC — North Mini Code (MoE 30B-A3B)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/North-Mini-Code-1.0-MXFP4_MOE.gguf\"\n fmt: GGUF\n quant: MXFP4_MOE\n kv_cache: default\n extra_args: [\"-fa\", \"on\"]\n enabled: false # llama.cpp 9590 doesn't support cohere2moe architecture\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group H3 — Holo3.1 35B-A3B (Computer-Use Agent VLM, MoE)\n # Architecture: qwen3_5_moe — 35B MoE (3B active / 256 experts / 8 active)\n # Hidden: 2048, heads: 16, KV-heads: 2, layers: 40, context: 262k\n # Vision: 27-layer ViT (1152-dim) for screenshot/UI grounding\n # Primary use: computer-use agent (desktop/mobile/web automation)\n # Text-only benchmark measures decode speed for response generation latency.\n # Model: pipenetwork/Holo-3.1-35B-A3B-MLX-4bit (community conversion)\n # GGUF: Hcompany/Holo-3.1-35B-A3B-GGUF (official, Q4_K_M = 21.3 GB)\n # License: Apache 2.0\n\n - id: H3_Q4_1\n model: \"Holo3.1\"\n group: \"H3 — Holo3.1 35B-A3B (Computer-Use Agent)\"\n backend: mlx-vlm\n model_id: \"pipenetwork/Holo-3.1-35B-A3B-MLX-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n\n - id: H3_Q4_2\n model: \"Holo3.1\"\n group: \"H3 — Holo3.1 35B-A3B (Computer-Use Agent)\"\n backend: mlx-vlm\n model_id: \"pipenetwork/Holo-3.1-35B-A3B-MLX-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: kv4\n extra_args: [\"--max-kv-size\", \"32768\", \"--kv-bits\", \"4\"]\n\n - id: H3_Q8_1\n model: \"Holo3.1\"\n group: \"H3 — Holo3.1 35B-A3B (Computer-Use Agent)\"\n backend: mlx-vlm\n model_id: \"pipenetwork/Holo-3.1-35B-A3B-MLX-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"32768\"]\n enabled: false # 28 GB model — doesn't fit on disk alongside other models\n\n - id: H3_CTX_1\n model: \"Holo3.1\"\n group: \"H3 — Holo3.1 35B-A3B (Computer-Use Agent)\"\n backend: mlx-vlm\n model_id: \"pipenetwork/Holo-3.1-35B-A3B-MLX-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n extra_args: [\"--max-kv-size\", \"131072\"]\n prompts: [context-32k, context-64k, context-128k]\n\n - id: H3_LC_Q4KM\n model: \"Holo3.1\"\n group: \"H3 — Holo3.1 35B-A3B (Computer-Use Agent)\"\n backend: llama-server\n model_id: \"~/.cache/llmfit/models/Holo-3.1-35B-A3B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group QW27 — Qwen3.5-27B (Dense 27B, AA Index 37.1)\n # Architecture: qwen3_5 (dense transformer, NOT MoE)\n # Parameters: 27B total, 27B active — same quality tier as Qwen3.6-27B (AA 37.1)\n # but as a dense model should be faster per token on CPU/memory-bound workloads.\n # Context: 128K tokens\n # License: Apache 2.0\n # Purpose: high-quality dense 27B — direct comparison to MoE peers at same size tier.\n # AA Intelligence Index 37.1 (non-reasoning), among top open-weights models <40B.\n # Memory budget: Q4_K_M ~16 GB, MLX 4bit ~16 GB\n # HuggingFace base: Qwen/Qwen3.5-27B-FP8 (instruct weights, same family)\n # mlx-community: Qwen3.5-27B-4bit, -5bit, -6bit, -8bit\n # GGUF: bartowski/Qwen3.5-27B-Instruct-GGUF (Q4_K_M ~16 GB)\n # Ollama: qwen3.5:27b\n # NOTE: qwen3_5 architecture — supported by mlx-lm, llama.cpp, Ollama.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: QW27_Q4_1\n model: \"Qwen3.5-27B\"\n group: \"QW27 — Qwen3.5-27B (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.5-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: QW27_Q4_2\n model: \"Qwen3.5-27B\"\n group: \"QW27 — Qwen3.5-27B (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.5-27B-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: QW27_OLL_1\n model: \"Qwen3.5-27B\"\n group: \"QW27 — Qwen3.5-27B (Dense)\"\n backend: ollama\n model_id: \"qwen3.5:27b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: QW27_LC_Q4KM\n model: \"Qwen3.5-27B\"\n group: \"QW27 — Qwen3.5-27B (Dense)\"\n backend: llama-server\n model_id: \"~/.cache/huggingface/hub/models--bartowski--Qwen_Qwen3.5-27B-GGUF/snapshots/d7b113c40283f4d99f4eb0ec20d126ad653cc736/Qwen_Qwen3.5-27B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: QW27_CTX_1\n model: \"Qwen3.5-27B\"\n group: \"QW27 — Qwen3.5-27B (Dense)\"\n backend: mlx-lm\n model_id: \"mlx-community/Qwen3.5-27B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n prompts: [context-32k, context-64k, context-128k]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group QW122 — Qwen3.5-122B-A10B (MoE 122B total / 10B active, AA Index 35.9)\n # Architecture: qwen3_5_moe\n # Parameters: 122B total, 10B active per token. Same MoE family as Qwen3.5-35B-A3B.\n # Context: 128K tokens\n # License: Apache 2.0\n # Purpose: largest feasible MoE on 64 GB at aggressive quantization.\n # AA 35.9 non-reasoning — comparable to Qwen3.5-35B-A3B (30.7) but larger model.\n # MLX 4bit is ~65 GB and will NOT fit. GGUF UD-Q2_K_XL = 42.8 GB fits with headroom.\n # IQ2_M = 40.4 GB also fits and may have better perplexity than Q2_K_XL.\n # Memory budget: UD-Q2_K_XL ~42.8 GB, UD-IQ2_M ~40.4 GB\n # HuggingFace: Qwen/Qwen3.5-122B-A10B\n # GGUF: unsloth/Qwen3.5-122B-A10B-MTP-GGUF (UD-Q2_K_XL 42.8 GB, UD-IQ2_M 40.4 GB)\n # NOTE: mlx-community/Qwen3.5-122B-A10B-4bit is ~65 GB — too large for 64 GB machine.\n # llama.cpp must support qwen3_5_moe — verify at runtime; disable if unsupported.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: QW122_UDQ2_1\n model: \"Qwen3.5-122B\"\n group: \"QW122 — Qwen3.5-122B-A10B (MoE, Q2)\"\n backend: llama-server\n model_id: \"~/.cache/huggingface/hub/models--unsloth--Qwen3.5-122B-A10B-MTP-GGUF/snapshots/907becb33103ab66b23da06a2dc74a5fca0583bd/Qwen3.5-122B-A10B-UD-Q2_K_XL.gguf\"\n fmt: GGUF\n quant: UD-Q2_K_XL\n kv_cache: default\n\n - id: QW122_UDQ2_2\n model: \"Qwen3.5-122B\"\n group: \"QW122 — Qwen3.5-122B-A10B (MoE, Q2)\"\n backend: llama-server\n model_id: \"~/.cache/huggingface/hub/models--unsloth--Qwen3.5-122B-A10B-MTP-GGUF/snapshots/907becb33103ab66b23da06a2dc74a5fca0583bd/Qwen3.5-122B-A10B-UD-IQ2_M.gguf\"\n fmt: GGUF\n quant: UD-IQ2_M\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group MS4 — Mistral Small 4 (119B dense, AA Index 27.8)\n # Architecture: mistral3\n # Parameters: 119B dense — large dense model, NOT MoE.\n # Context: 128K tokens\n # License: Apache 2.0\n # Purpose: largest dense open-weights model feasible at extreme quantization.\n # AA 27.8 (reasoning) — strong reasoning model from Mistral.\n # IQ2_M = 38.9 GB fits; Q3_K_L = 61.7 GB fits tightly; Q4_K_M = 72.3 GB too big.\n # No MLX quants available for this model yet.\n # Memory budget: IQ2_M ~38.9 GB, IQ3_M ~52.2 GB, Q3_K_L ~61.7 GB (tight)\n # GGUF: mradermacher/Mistral-Small-4-119B-2603-i1-GGUF\n # NOTE: mistral3 arch — verify llama.cpp supports it; disable if not.\n # No Ollama tag found. llama-server only.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: MS4_IQ2_1\n model: \"MistralSmall4\"\n group: \"MS4 — Mistral Small 4 (119B Dense, IQ2)\"\n backend: llama-server\n model_id: \"~/.cache/huggingface/hub/models--mradermacher--Mistral-Small-4-119B-2603-i1-GGUF/snapshots/1cb5f803eab639379d7b0d593eceb6e6ab690443/Mistral-Small-4-119B-2603.i1-IQ2_M.gguf\"\n fmt: GGUF\n quant: IQ2_M\n kv_cache: default\n extra_args: [\"--chat-template\", \"chatml\", \"-c\", \"4096\", \"-np\", \"1\"]\n\n - id: MS4_IQ3_1\n model: \"MistralSmall4\"\n group: \"MS4 — Mistral Small 4 (119B Dense, IQ3)\"\n backend: llama-server\n model_id: \"~/.cache/huggingface/hub/models--mradermacher--Mistral-Small-4-119B-2603-i1-GGUF/snapshots/1cb5f803eab639379d7b0d593eceb6e6ab690443/Mistral-Small-4-119B-2603.i1-IQ3_M.gguf\"\n fmt: GGUF\n quant: IQ3_M\n kv_cache: default\n extra_args: [\"--chat-template\", \"chatml\", \"-c\", \"4096\", \"-np\", \"1\"]\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group DST2 — Devstral Small 2 (24B dense, AA Index 22.0)\n # Architecture: mistral3\n # Parameters: 24B dense — Mistral's second-generation coding model\n # Context: 128K tokens (32K sliding window attention)\n # License: Apache 2.0\n # Purpose: coding-focused 24B dense model from Mistral. Direct competitor to\n # Qwen3-Coder-Next and NorthCode on software engineering tasks.\n # AA 22.0 — lower than our other coding models but interesting as a non-Qwen data point.\n # Memory budget: Q4_K_M ~14.3 GB, MLX 4bit ~14 GB\n # HuggingFace: mistralai/Devstral-Small-2-24B-Instruct-2512\n # mlx-community: Devstral-Small-2-24B-Instruct-2512-4bit, -5bit, -6bit, -8bit\n # GGUF: bartowski/mistralai_Devstral-Small-2-24B-Instruct-2512-GGUF (Q4_K_M 14.3 GB)\n # Ollama: devstral:24b\n # NOTE: mistral3 arch — same as Mistral Small 4. Supported by mlx-lm and llama.cpp.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: DST2_Q4_1\n model: \"Devstral2\"\n group: \"DST2 — Devstral Small 2 (24B Coding)\"\n backend: mlx-lm\n model_id: \"mlx-community/Devstral-Small-2-24B-Instruct-2512-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: DST2_Q4_2\n model: \"Devstral2\"\n group: \"DST2 — Devstral Small 2 (24B Coding)\"\n backend: mlx-lm\n model_id: \"mlx-community/Devstral-Small-2-24B-Instruct-2512-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: DST2_OLL_1\n model: \"Devstral2\"\n group: \"DST2 — Devstral Small 2 (24B Coding)\"\n backend: ollama\n model_id: \"devstral:24b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: DST2_LC_Q4KM\n model: \"Devstral2\"\n group: \"DST2 — Devstral Small 2 (24B Coding)\"\n backend: llama-server\n model_id: \"~/.cache/huggingface/hub/models--bartowski--mistralai_Devstral-Small-2-24B-Instruct-2512-GGUF/snapshots/027695770ae1de77c2f6fb19f8e1ba9d65fcd15d/mistralai_Devstral-Small-2-24B-Instruct-2512-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group LFM25 — LFM2.5-8B-A1B (Liquid, 8B total / 1B active MoE, May 2026)\n # NOTE: Liquid's custom architecture — supported by llama.cpp, mlx-lm, Ollama.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: LFM25_Q4_1\n model: \"LFM2.5-8B\"\n group: \"LFM25 — LFM2.5-8B-A1B (MoE, 1B active)\"\n backend: mlx-lm\n model_id: \"LiquidAI/LFM2.5-8B-A1B-MLX-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: LFM25_Q8_1\n model: \"LFM2.5-8B\"\n group: \"LFM25 — LFM2.5-8B-A1B (MoE, 1B active)\"\n backend: mlx-lm\n model_id: \"LiquidAI/LFM2.5-8B-A1B-MLX-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: LFM25_OLL_1\n model: \"LFM2.5-8B\"\n group: \"LFM25 — LFM2.5-8B-A1B (MoE, 1B active)\"\n backend: ollama\n model_id: \"lfm2.5:8b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: LFM25_LC_Q4KM\n model: \"LFM2.5-8B\"\n group: \"LFM25 — LFM2.5-8B-A1B (MoE, 1B active)\"\n backend: llama-server\n model_id: \"hf:LiquidAI/LFM2.5-8B-A1B-GGUF:LFM2.5-8B-A1B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: LFM25_LC_Q8\n model: \"LFM2.5-8B\"\n group: \"LFM25 — LFM2.5-8B-A1B (MoE, 1B active)\"\n backend: llama-server\n model_id: \"hf:LiquidAI/LFM2.5-8B-A1B-GGUF:LFM2.5-8B-A1B-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group LFM2 — LFM2-24B-A2B (Liquid, 24B total / 2B active MoE, Feb 2026)\n # NOTE: Liquid's custom architecture — supported by llama.cpp, mlx-lm, Ollama.\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: LFM2_Q4_1\n model: \"LFM2-24B\"\n group: \"LFM2 — LFM2-24B-A2B (MoE, 2B active)\"\n backend: mlx-lm\n model_id: \"lmstudio-community/LFM2-24B-A2B-MLX-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: LFM2_Q8_1\n model: \"LFM2-24B\"\n group: \"LFM2 — LFM2-24B-A2B (MoE, 2B active)\"\n backend: mlx-lm\n model_id: \"lmstudio-community/LFM2-24B-A2B-MLX-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: LFM2_OLL_1\n model: \"LFM2-24B\"\n group: \"LFM2 — LFM2-24B-A2B (MoE, 2B active)\"\n backend: ollama\n model_id: \"lfm2:24b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: LFM2_LC_Q4KM\n model: \"LFM2-24B\"\n group: \"LFM2 — LFM2-24B-A2B (MoE, 2B active)\"\n backend: llama-server\n model_id: \"hf:LiquidAI/LFM2-24B-A2B-GGUF:LFM2-24B-A2B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: LFM2_LC_Q8\n model: \"LFM2-24B\"\n group: \"LFM2 — LFM2-24B-A2B (MoE, 2B active)\"\n backend: llama-server\n model_id: \"hf:LiquidAI/LFM2-24B-A2B-GGUF:LFM2-24B-A2B-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group NEM3 — Nemotron-3-Nano-30B-A3B (NVIDIA, 30B total / 3B active MoE)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: NEM3_Q4_1\n model: \"Nemotron-Nano-30B\"\n group: \"NEM3 — Nemotron-3-Nano-30B-A3B (MoE, 3B active)\"\n backend: mlx-lm\n model_id: \"lmstudio-community/NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: NEM3_Q8_1\n model: \"Nemotron-Nano-30B\"\n group: \"NEM3 — Nemotron-3-Nano-30B-A3B (MoE, 3B active)\"\n backend: mlx-lm\n model_id: \"lmstudio-community/NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: NEM3_OLL_1\n model: \"Nemotron-Nano-30B\"\n group: \"NEM3 — Nemotron-3-Nano-30B-A3B (MoE, 3B active)\"\n backend: ollama\n model_id: \"nemotron-3-nano:30b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: NEM3_LC_Q4KM\n model: \"Nemotron-Nano-30B\"\n group: \"NEM3 — Nemotron-3-Nano-30B-A3B (MoE, 3B active)\"\n backend: llama-server\n model_id: \"hf:unsloth/Nemotron-3-Nano-30B-A3B-GGUF:Nemotron-3-Nano-30B-A3B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group NEMC — Nemotron-Cascade-2-30B-A3B (NVIDIA, 30B / 3B active, Mar 2026)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: NEMC_Q4_1\n model: \"Nemotron-Cascade2-30B\"\n group: \"NEMC — Nemotron-Cascade-2-30B-A3B (MoE, 3B active)\"\n backend: mlx-lm\n model_id: \"mlx-community/Nemotron-Cascade-2-30B-A3B-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: NEMC_OLL_1\n model: \"Nemotron-Cascade2-30B\"\n group: \"NEMC — Nemotron-Cascade-2-30B-A3B (MoE, 3B active)\"\n backend: ollama\n model_id: \"nemotron-cascade-2:30b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: NEMC_LC_Q4KM\n model: \"Nemotron-Cascade2-30B\"\n group: \"NEMC — Nemotron-Cascade-2-30B-A3B (MoE, 3B active)\"\n backend: llama-server\n model_id: \"hf:bartowski/nvidia_Nemotron-Cascade-2-30B-A3B-GGUF:nvidia_Nemotron-Cascade-2-30B-A3B-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group GLM — GLM-4.7-Flash (Zhipu AI, 23B MoE / 3B active, Jan 2026)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: GLM_Q4_1\n model: \"GLM-4.7-Flash\"\n group: \"GLM — GLM-4.7-Flash (MoE, 3B active)\"\n backend: mlx-lm\n model_id: \"mlx-community/GLM-4.7-Flash-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: GLM_Q8_1\n model: \"GLM-4.7-Flash\"\n group: \"GLM — GLM-4.7-Flash (MoE, 3B active)\"\n backend: mlx-lm\n model_id: \"lmstudio-community/GLM-4.7-Flash-MLX-8bit\"\n fmt: MLX\n quant: 8bit\n kv_cache: default\n\n - id: GLM_OLL_1\n model: \"GLM-4.7-Flash\"\n group: \"GLM — GLM-4.7-Flash (MoE, 3B active)\"\n backend: ollama\n model_id: \"glm-4.7-flash\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: GLM_LC_Q4KM\n model: \"GLM-4.7-Flash\"\n group: \"GLM — GLM-4.7-Flash (MoE, 3B active)\"\n backend: llama-server\n model_id: \"hf:unsloth/GLM-4.7-Flash-GGUF:GLM-4.7-Flash-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group GR41 — Granite 4.1-8B (IBM, 8B dense, Apr 2026)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: GR41_Q4_1\n model: \"Granite-4.1-8B\"\n group: \"GR41 — Granite 4.1-8B (Dense)\"\n backend: ollama\n model_id: \"granite4.1:8b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: GR41_LC_Q4KM\n model: \"Granite-4.1-8B\"\n group: \"GR41 — Granite 4.1-8B (Dense)\"\n backend: llama-server\n model_id: \"hf:unsloth/granite-4.1-8b-GGUF:granite-4.1-8b-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: GR41_LC_Q8\n model: \"Granite-4.1-8B\"\n group: \"GR41 — Granite 4.1-8B (Dense)\"\n backend: llama-server\n model_id: \"hf:unsloth/granite-4.1-8b-GGUF:granite-4.1-8b-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group PHIM — Phi-mini-MoE (Microsoft, 7.6B / 2.4B active MoE, Jun 2025)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: PHIM_Q4_1\n model: \"Phi-mini-MoE\"\n group: \"PHIM — Phi-mini-MoE (MoE, 2.4B active)\"\n backend: mlx-lm\n model_id: \"mlx-community/Phi-3.5-MoE-instruct-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: PHIM_LC_Q4KM\n model: \"Phi-mini-MoE\"\n group: \"PHIM — Phi-mini-MoE (MoE, 2.4B active)\"\n backend: llama-server\n model_id: \"hf:gabriellarson/Phi-mini-MoE-instruct-GGUF:Phi-mini-MoE-instruct-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: PHIM_LC_Q8\n model: \"Phi-mini-MoE\"\n group: \"PHIM — Phi-mini-MoE (MoE, 2.4B active)\"\n backend: llama-server\n model_id: \"hf:gabriellarson/Phi-mini-MoE-instruct-GGUF:Phi-mini-MoE-instruct-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group REKA — Reka Flash 3.1 (Reka AI, 21B dense, Jul 2025, coding-strong)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: REKA_LC_Q4KM\n model: \"Reka-Flash-3.1\"\n group: \"REKA — Reka Flash 3.1 (21B Dense)\"\n backend: llama-server\n model_id: \"hf:bartowski/RekaAI_reka-flash-3.1-GGUF:RekaAI_reka-flash-3.1-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: REKA_LC_Q8\n model: \"Reka-Flash-3.1\"\n group: \"REKA — Reka Flash 3.1 (21B Dense)\"\n backend: llama-server\n model_id: \"hf:bartowski/RekaAI_reka-flash-3.1-GGUF:RekaAI_reka-flash-3.1-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group FAL3 — Falcon3-10B (TII/UAE, 10B dense, Dec 2024)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: FAL3_OLL_1\n model: \"Falcon3-10B\"\n group: \"FAL3 — Falcon3-10B (Dense)\"\n backend: ollama\n model_id: \"falcon3:10b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: FAL3_LC_Q4KM\n model: \"Falcon3-10B\"\n group: \"FAL3 — Falcon3-10B (Dense)\"\n backend: llama-server\n model_id: \"hf:bartowski/Falcon3-10B-Instruct-GGUF:Falcon3-10B-Instruct-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: FAL3_LC_Q8\n model: \"Falcon3-10B\"\n group: \"FAL3 — Falcon3-10B (Dense)\"\n backend: llama-server\n model_id: \"hf:bartowski/Falcon3-10B-Instruct-GGUF:Falcon3-10B-Instruct-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group LAG — Laguna-XS.2 (Poolside, 31B dense, Apr 2026, coding)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: LAG_Q4_1\n model: \"Laguna-XS.2\"\n group: \"LAG — Laguna-XS.2 (31B Dense, Coding)\"\n backend: mlx-lm\n model_id: \"mlx-community/Laguna-XS.2-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: LAG_OLL_1\n model: \"Laguna-XS.2\"\n group: \"LAG — Laguna-XS.2 (31B Dense, Coding)\"\n backend: ollama\n model_id: \"laguna-xs.2:q4_K_M\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: LAG_LC_Q4KM\n model: \"Laguna-XS.2\"\n group: \"LAG — Laguna-XS.2 (31B Dense, Coding)\"\n backend: llama-server\n model_id: \"hf:Lucebox/Laguna-XS.2-GGUF:laguna-xs2-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n enabled: false # 'laguna' arch not supported in llama.cpp b9610\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group NMC — North-Mini-Code-1.0 (Cohere, ~30B MoE 128E/8A, Jun 2026, coding)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: NMC_Q4_1\n model: \"North-Mini-Code\"\n group: \"NMC — North-Mini-Code-1.0 (MoE, Coding)\"\n backend: mlx-lm\n model_id: \"mlx-community/North-Mini-Code-1.0-4bit\"\n fmt: MLX\n quant: 4bit\n kv_cache: default\n\n - id: NMC_LC_Q4K\n model: \"North-Mini-Code\"\n group: \"NMC — North-Mini-Code-1.0 (MoE, Coding)\"\n backend: llama-server\n model_id: \"hf:michaelw9999/North-Mini-Code-1.0-GGUF:BLS-Mini-Code-1.0-Q4_K.gguf\"\n fmt: GGUF\n quant: Q4_K\n kv_cache: default\n server_timeout: 1200\n enabled: false # 'cohere2_moe' arch not supported in llama.cpp b9610\n\n # ══════════════════════════════════════════════════════════════════════════════\n # Group GOSS — GPT-OSS-20B (OpenAI, 20B dense, MXFP4 native, Jun 2025)\n # ══════════════════════════════════════════════════════════════════════════════\n\n - id: GOSS_MLX_1\n model: \"GPT-OSS-20B\"\n group: \"GOSS — GPT-OSS-20B (OpenAI, Dense, MXFP4)\"\n backend: mlx-lm\n model_id: \"mlx-community/gpt-oss-20b-MXFP4-Q8\"\n fmt: MLX\n quant: MXFP4-Q8\n kv_cache: default\n\n - id: GOSS_OLL_1\n model: \"GPT-OSS-20B\"\n group: \"GOSS — GPT-OSS-20B (OpenAI, Dense, MXFP4)\"\n backend: ollama\n model_id: \"gpt-oss:20b\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: GOSS_LC_Q4KM\n model: \"GPT-OSS-20B\"\n group: \"GOSS — GPT-OSS-20B (OpenAI, Dense, MXFP4)\"\n backend: llama-server\n model_id: \"hf:unsloth/gpt-oss-20b-GGUF:gpt-oss-20b-Q4_K_M.gguf\"\n fmt: GGUF\n quant: Q4_K_M\n kv_cache: default\n\n - id: GOSS_LC_Q8\n model: \"GPT-OSS-20B\"\n group: \"GOSS — GPT-OSS-20B (OpenAI, Dense, MXFP4)\"\n backend: llama-server\n model_id: \"hf:unsloth/gpt-oss-20b-GGUF:gpt-oss-20b-Q8_0.gguf\"\n fmt: GGUF\n quant: Q8_0\n kv_cache: default\n\n # ── F baseline re-run (clean AC power, precautionary) ────────────────────────\n # F_TQ4_1 and F_TQ35_1 ran at ~12:27-12:45 when battery was ~22% (above\n # Low Power Mode threshold). Decode speeds (89-93 t/s) match un-throttled\n # baselines so contamination is unlikely. Re-running to confirm cleanly on AC.\n # These duplicate IDs will produce a second CSV entry; HTML report uses median\n # across all runs so duplicates are handled correctly.\n #\n # To re-run only these two tests:\n # python3 benchmark.py --test F_TQ4_1 F_TQ35_1 --skip-unavailable --no-think --report-html\n"}}}} |