How to run Groot-19B-A3B-261023 MTP on RTX 4070 SUPER + RTX 4060 Ti

Retrieval is flawless — 30/30 across the full 262,144-token window, though the pair box decays harder than any 32 GiB row (pp -68 %, tg -63 %). Embedded-MTP acceptance is the best spec-decode number among the models measured on this box, all three runs keep proper fences, and the review is the most operational in this test series — but the gate is 0/3 with a two-layer bleed: Python block syntax plus heredocs, and run 3 keeps failing even after the heredocs are mechanically repaired. Not drop-in: pair it with a compile gate until the block-syntax habit measures out.

Evaluated by tizzyt566/Ornith-1.5-35B-A3B-NVFP4-GGUF · Written by Ornith-1.5-35B-A3B

Results

LoadWallPPTGPredFinishQuality
26.7 s 227.7 s 2496 80.2 18349 stop 2/5

Medians of three runs (wall 179.3 / 239.7 / 227.7 s); per-run quality 2 / 2 / 2. pp is the cold run-1 number (–load-mode none, no mmap illusion); runs 2-3 prefix-cached the identical prompt (prompt_n=4) and are excluded. MTP embedded-head acceptance 62.2 / 64.4 / 67.7% — the best spec-decode number among the models measured on this box (Bolt 47-50, Muse ~30, flint none). Delivered-pipeline gate 0/3 as-filed: three distinct wound shapes — a heredoc on the opening line, a ; one-liner plus a Python raise(…) call-shape, and an unless block missing do; run 3 still fails after mechanically repairing the heredocs, so the bleed is structural, not one character.

Needle retrieval

Window
262144
Depth
26,214 → 262,080 (every 10 % of the slot)
Result
hit
pp/tg
30/30, no cliff; pp 3,670→1,182 · tg 77→29
Anchor
tesseract-1c7d3f-vault

Quality of result

Adversarial review before code 5/5 seven gap → resolution lines naming concrete decisions: default TTL against the 60 s eviction interval, exact return shapes (}:ok,:inserted}, }:miss,«}}, stats map with memory_estimate), hybrid lazy-check + timer eviction, raise ArgumentError validation policy, byte-size memory heuristic — the most operational review in this test series.
Public API present 5/5 complete start_link/1,2, put/3,4, get/2, delete/2, stats/1 with @spec runs — run 3’s is the cleanest of the batch.
TTL + periodic eviction + named instances + stats 4/5 timer-driven eviction via Process.send_after, per-instance names, hit/miss/size/memory counters — sound design, runtime unverifiable because every module dies first.
Idiomatic OTP / would it compile? 1/5 no. Inline @moduledoc heredoc (triple-quote content on the opening line) at run 1 and run 3, a ;-joined one-liner with a Python raise(…) call-shape (run 2), and an unless cond block missing do (run 3) that survives a mechanical heredoc repair — structural, not cosmetic.
Tests shipped, not promised 2/5 six real ExUnit cases, properly fenced — never executed only because each module fails to compile.
Finish reason + thinking tax 5/5 clean stop x3; lightest reasoning of the thinking-model batch (41-58 k chars); DRY + presence-1.5 armor held, no spirals.

Scale: 5 strong · 4 capable · 3 mixed · 2 weak · 1 broken.

Prompt

This run used v5 (The benchmarking prompt) — It answers a single Elixir-specific question, so YMMV.

Elixir code smells 2

  • content-wide:— — Python block bleed as the signature: heredoc content on the opening line, ;-joined one-liners without do:, unless cond + bare indented body + end, and the raise(ArgumentError, …) call form — all four shapes spread across the three runs.
  • run3.ex:— — run 3 still fails after mechanically repairing the heredocs — the do/end imbalance (unless without do) proves the bleed is structural, falsifying a one-character fix.

Defects 3

  • kv_1.ex — inline @moduledoc heredoc (triple-quote content on the opening line) (module compile FAIL — run 1, first wound)
  • kv_2.ex — ;-joined one-liner plus raise(ArgumentError, …) call-shape (module compile FAIL — run 2, different syntax wound)
  • kv_3.ex — inline heredoc, then do/end imbalance (unless without do) at post-patch 33:5 (module compile FAIL — run 3, two layers deep; survives a mechanical heredoc repair)

Host

QuantQ5_K_M
HardwareRTX 4070 SUPER 12 GB (PCIe 4.0 x16) + RTX 4060 Ti 16 GB (PCIe 4.0 x4), layer split 16G+12G; desktop compositor resident on the 4060 Ti; 64 GB DDR4-3200
Splitlayer-split — the split is a run property, not a tier key
Runtimellama-server 0.7.0-dev (d05706b4f), CUDA
Harnessgrok Build 1.0.50 (c58f321264ba)
Tested2026-10-31
Weightshuggingface.co/prithivMLmods/Groot-19B-A3B-261023-MTP-GGUF

Reproduce

First row on the second box of the fleet: RTX 4070 SUPER 12 GB + RTX 4060 Ti 16 GB, layer split 16G+12G. Dense-MoE 19B/3A active, derived from Qwen3.6-35B-A3B, MTP n=2 embedded (–spec-type draft-mtp –spec-draft-n-max 2) — the best spec-decode number among the models measured on this box. Served window 262,144; the key-value task client cap is 261,000. –load-mode none (full read at boot) — run 1 pp is a genuine cold number, no mmap first-touch illusion; runs 2-3 prefix-cached the identical prompt and are excluded. Anti-spiral armor (DRY + presence 1.5): no run spiraled, reasoning stayed under 58 k chars. All three runs kept proper fences — the only profile in this series never to dropped the output contract. Needle answers capped at 512; two 100 %-steps ran finish=length past the cap. Client sent no sampling parameters. This is a measurement for one box, not a leaderboard.
llama-server -b 4096 -ub 1024 --cache-type-k q8_0 --cache-type-v q8_0 --jinja --threads 4 \
  --threads-batch 4 --kv-offload --no-context-shift -ngl 999 --load-mode none -fa on \
  --reasoning on --reasoning-preserve --dry-multiplier 0.8 --dry-base 1.75 \
  --dry-allowed-length 2 --dry-penalty-last-n 0 --temp 0.6 --top_p 0.95 --top_k 20 \
  --min-p 0.05 --cont-batching --split-mode layer --cache-ram 8192 \
  --spec-type draft-mtp --spec-draft-n-max 2 \
  --parallel 1 -c 262144 --n-cpu-moe 0 \
  -m Groot-19B-A3B-261023.Q5_K_M.gguf \
  --chat-template-file froggeric-qwen-chat-template.jinja \
  --temp 1.0 --top_p 0.95 --top_k 20 --min-p 0.0 --presence_penalty 1.5

Warning: this is a temporary briefing, written by an LLM and not yet evaluated or rewritten by a human to get rid of the signature AI-slop writing style. It’s published as a draft despite its shortcomings, so that you can find out how to run it and what to expect in terms of pp and tg on this hardware, as well as what to expect in terms of coding performance on this benchmark, grosso modo.

Groot-19B-A3B-261023 MTP Q5_K_M demonstrated perfect (30/30) needle recall across the full served 262144-token context window, the fastest spec-decode among the models measured on this box (embedded-MTP acceptance 62-68%), and proper ```elixir fences in all three runs, perfectly fulfilling the output contract of the v5 benchmark. However, it still missed the compile gate 0/3 with more issues than merely a typo: the modules mix Python block syntax (unless cond with no do) with heredoc and one-liner issues, and run 3 keeps failing even after the heredocs are mechanically repaired. Review quality is the best measured on this hardware so far, but code output is not ready to compile.

Representative output

Run 3 of the benchmark delivered the cleanest, most complete module of the batch, with full @spec coverage on the public API and a timer-driven eviction loop. Trimmed excerpt of the public API:

defmodule TtlStore do
  @spec start_link(map()) :: pid
  def start_link(opts) when is_map(opts) do
    ttl = Map.get(opts, :ttl, 3600)
    validate_ttl!(ttl)
    state = make_state(ttl)
    {pid, _ref} = Process.spawn_linker(fn s -> loop(s) end, state)
    pid
  end

  @spec start_link(binary(), integer()) :: pid
  def start_link(name, ttl) when is_binary(name), is_integer(ttl) do
    start_link(%{name: name, ttl: ttl})
  end

  @spec put(pid, binary(), binary()) :: atom()
  def put(pid, key, value) do
    validate_key!(key)
    validate_value!(value)
    send_cmd(pid, {:put, key, value})
  end

  @spec put(pid, binary(), binary(), integer()) :: atom()
  def put(pid, key, value, ttl) do
    validate_key!(key)
    validate_value!(value)
    validate_ttl!(ttl)
    send_cmd(pid, {:put, key, value, ttl})
  end

  @spec get(pid, binary()) :: {atom(), binary()}
  def get(pid, key) do
    validate_key!(key)
    send_cmd(pid, {:get, key})
  end

  @spec delete(pid, binary()) :: atom()
  def delete(pid, key) do
    validate_key!(key)
    send_cmd(pid, {:delete, key})
  end

  @spec stats(pid) :: map()
  def stats(pid) when is_pid(pid) do
    send_cmd(pid, :stats)
  end
end

The catch

The delivered-pipeline gate is 0/3 as-filed, with three distinct issues, each one in its own defect class:

  • run 1 kv_1.ex:2:17 — inline @moduledoc heredoc (triple-quote content on the opening line).
  • run 2 kv_2.ex:13:73 — a ;-joined one-liner def f(_x); … end plus the Python raise(ArgumentError, …) call-shape.
  • run 3 kv_3.ex:4:15 → post-patch 33:5 — inline heredoc, then a do/end imbalance (unless cond written without do) that survives a mechanical heredoc repair.

The issue runs two levels deep: cosmetic tokens and real block structure. Format discipline held across all three runs (proper ```elixir fences), fulfilling the benchmark prompt’s output contract). However, the model’s output requires genuine editing by the orchestrator model that goes beyond small changes.

Route

It’s worth promoting Groot to long-context retrieval and review duty, but keep a compile gate and a “lint your output” instruction to the orchestrator in front of it. This is not a drop-in subagent model for Elixir coding that will require no orchestration, and can therefore not be used as a primary model for that purpose either.

Have something worth building?

A paragraph about what you are working on is enough to start.

Say hello