Local coding model comparison

Complete run · generated 2026-09-28 · run on an AMD Ryzen AI 9 HX 370 laptop, 62 GB RAM, no discrete GPU (Ollama ran on the CPU) · ollama version is 0.34.4

Bottom line

For everyday local coding on this machine, use Qwen3.6-35B-A3B with thinking off. It had the best average on the hard tasks (85%, averaged over three runs), a routine score of 97%, and the fastest generation (about 26 tokens per second). It finished the three hard tasks in about 6.5 minutes.

Other findings

Confidence: the ranking of the two Qwen3-Coder models below Qwen3.6 is fairly solid (three runs each). The comparison between Qwen3.6 and Qwen3.8 is not: Qwen3.8 has one run per task, so its hard score of 79% versus Qwen3.6's 85% is within the noise.

Follow-up: does a bigger thinking budget help Qwen3.6?

Afterwards I re-ran Qwen3.6-35B-A3B with thinking on and the token limit per reply raised from 8,000 to 16,000 (with a larger 32,000-token context window). On the hard agent task it scored 28, 24 and 25 of 29 across three runs (about 89% on average, against 83% with thinking off and 24 of 29 at the old limit), taking 6 to 10 minutes per run instead of about 3. It never reached the 29 of 29 that Qwen3.8 got with thinking on. On the filter task it used all 16,000 tokens (17.5 minutes) without writing an answer and scored 1 of 51. So more room helps a little on the agent task and does not fix the filter task. These runs are in a separate file and are not included in the tables above.

Overall

Each score is the share of hidden checks a model passed, averaged over tasks with equal weight (and over repeat runs where there are any). Routine is six everyday tasks; Hard is three harder ones. Speeds are medians; times are the wall time of the first run. Rows are ordered by hard score.

ModelRoutine scoreHard scorePerfect tasks (of 9)Generate tok/sRead prompt tok/sTime, 6 routineTime, 3 hardCold load
qwen3.6:35b-a3b23 GB · 35.5B Q4_K_M · MoE, ~3B active97%85%5/925.91323.1 min6.4 min19 s
qwen3.8:27b18 GB · 27.3B Q4_K_M · Dense100%79%7/98.6236.7 min11.4 min18 s
qwen3.8:27b thinking on18 GB · 27.3B Q4_K_M · Densenot run78%2/96.425not run39.7 min17 s
qwen3.6:35b-a3b thinking on23 GB · 35.5B Q4_K_M · MoE, ~3B active91%72%6/921.011623.9 min18.5 min13 s
qwen3-coder-next:q2_k_l28 GB · 79.7B Q2_K · MoE, ~3B active97%67%5/917.61003.7 min4.7 min32 s
qwen3-coder:30b19 GB · 30.5B Q4_K_M · MoE, ~3B active96%62%5/921.41443.1 min6.7 min18 s

Score by task

ModelMerge intervalsLRU cacheExpression evaluatorFix 3 bugsMulti-file changeAgent loopFilter compilerRefactorHard agent
qwen3.6:35b-a3b100%3 runs: 1.00–1.00100%3 runs: 1.00–1.0086%3 runs: 0.79–0.9595%3 runs: 0.85–1.00100%3 runs: 1.00–1.00100%3 runs: 1.00–1.0071%3 runs: 0.51–0.84100%3 runs: 1.00–1.0083%3 runs: 0.83–0.83
qwen3.8:27b100%9/9100%7/7100%19/19100%13/13100%10/10100%53%27/51100%22/2283%
qwen3.8:27b thinking onnot runnot runnot runnot runnot runnot run33%17/51100%22/22100%
qwen3.6:35b-a3b thinking on100%9/9100%7/747%9/19100%13/13100%10/10100%33%17/51100%22/2283%
qwen3-coder-next:q2_k_l100%3 runs: 1.00–1.00100%3 runs: 1.00–1.0091%3 runs: 0.84–0.95100%3 runs: 1.00–1.0093%3 runs: 0.80–1.00100%3 runs: 1.00–1.0042%3 runs: 0.33–0.51100%3 runs: 1.00–1.0059%3 runs: 0.59–0.59
qwen3-coder:30b100%3 runs: 1.00–1.00100%3 runs: 1.00–1.0079%3 runs: 0.74–0.84100%3 runs: 1.00–1.00100%3 runs: 1.00–1.00100%3 runs: 1.00–1.0040%3 runs: 0.35–0.4383%3 runs: 0.50–1.0063%3 runs: 0.59–0.66

For scale: a model that changes nothing on the hard agent task scores 52%; an answer that always returns false scores about 25% on the filter task; a refactor that returns an empty object scores about 5%.

Speed

ModelGenerate tok/sRead prompt tok/sCold loadTypical thinking length
qwen3.6:35b-a3b25.913219 s—
qwen3.8:27b8.62318 s—
qwen3.8:27b thinking on6.42517 s4389 tokens (approx.)
qwen3.6:35b-a3b thinking on21.011613 s5383 tokens (approx.)
qwen3-coder-next:q2_k_l17.610032 s—
qwen3-coder:30b21.414418 s—

Agent loop details

ModelTaskHidden tests passedAvg stepsInvalid tool callsFailed editsLoopsHow it endedMedian time
qwen3.6:35b-a3bAgent loop7/7, 7/7, 7/76.3000final-message, final-message, final-message44 s
qwen3.6:35b-a3bHard agent24/29, 24/29, 24/2911.7000final-message, final-message, final-message2.7 min
qwen3.8:27bAgent loop7/75.0000final-message2.0 min
qwen3.8:27bHard agent24/296.0000final-message5.1 min
qwen3.8:27b thinking onHard agent29/297.0000final-message10.6 min
qwen3.6:35b-a3b thinking onAgent loop7/76.0000final-message2.4 min
qwen3.6:35b-a3b thinking onHard agent24/297.0000final-message5.1 min
qwen3-coder-next:q2_k_lAgent loop7/7, 7/7, 7/74.3000final-message, final-message, final-message41 s
qwen3-coder-next:q2_k_lHard agent17/29, 17/29, 17/2913.7000final-message, final-message, final-message1.5 min
qwen3-coder:30bAgent loop7/7, 7/7, 7/78.7000final-message, final-message, final-message42 s
qwen3-coder:30bHard agent19/29, 17/29, 19/2915.3000final-message, final-message, final-message3.0 min

What was tested

Every answer was scored automatically against hidden checks; the checks were first verified against a known-correct solution (100%) and a deliberately wrong one (low). Each model was cold-loaded, with a 16K-token context. Runs used temperature 0 (repeat runs used 0.3), thinking off unless marked, and a token cap per answer.

Limits