Als je een AI-gedreven SaaS bouwt, wil je niet voor elke API-call betalen. Ik draai een multi-agent orchestratiesysteem op een Mac Mini M4 met 24GB RAM en wilde weten: welk lokaal LLM kan ik inzetten voor code generatie, data extractie en Nederlandse content?
Geen synthetische benchmarks. Geen MMLU-scores. Ik heb een benchmark framework gebouwd dat exact de taken test die mijn systeem dagelijks uitvoert: SEOcrawler code schrijven, bash scripts migreren naar Python, Nederlandse marketingteksten genereren.
Dit is het verhaal van drie rondes testen, 30+ benchmark runs, en waarom de "beste" modelpick niet zo simpel is als je denkt. (Zoek je de MKB-versie zonder technische diepgang? Lees AI-teksten schrijven zonder ChatGPT: 6 gratis modellen getest.)
De testopzet
Hardware
- Machine: Mac Mini M4, 24GB unified memory
- LLM runtime: Ollama (lokaal)
- Alle modellen draaien op dezelfde machine — geen cloud, geen API
Benchmark framework
Zelf gebouwd Python framework (llm_benchmark.py) met:
- Gestructureerde prompts met verwacht output-formaat (JSON of Python code)
- Automatische scoring: format compliance, field completeness, snelheid
- Nederlandse taaldetectie (stopword density)
- Character limit validatie (Google Ads headlines, meta descriptions)
- Progress checkpointing en resume na crashes
- Geheugenbeheer tussen runs: model unloaden,
purge, swap monitoring
Geteste modellen
| Model | Architectuur | Download | Actieve params | Minimum RAM |
|---|---|---|---|---|
| phi4-mini | Dense | ~2 GB | 3.8B | 8 GB |
| qwen3.5:9b | Dense + thinking | 6.6 GB | 9B | 16 GB |
| qwen2.5-coder:14b | Dense | 9.1 GB | 14B | 16 GB |
| codestral | Dense | 12 GB | 22B | 16 GB |
| devstral | MoE | 14 GB | ~3.5B actief van 24B | 16 GB |
| qwen3.5:27b | Dense | 17 GB | 27B | 32 GB+ |
| qwen3.5:35b-a3b | MoE + thinking | 23 GB | ~3.5B actief van 35B | 24 GB |
| claude-haiku / claude-sonnet | Cloud API | n.v.t. | n.v.t. | n.v.t. |
Taakcategorieën
Coding (8 taken): Session analyse (JSON), docstring generatie, test case generatie (pytest), error classificatie, print-to-logger conversie, Nederlandse bedrijfsdata extractie, digest narrative, bash-to-Python migratie.
Coding V2 (8 taken, moeilijker): Crawl4AI extraction pipeline, FastAPI SSE streaming, async batch upsert met retry, Nederlandse bedrijfsdata validator (KvK/BTW/IBAN), receipt processor, dispatcher routing, health monitor, state consolidator.
Marketing (10 taken): LinkedIn posts, Google Ads, SEO meta tags, review responses, productbeschrijvingen, re-engagement emails, FAQ's, lead kwalificatie, concurrentieanalyse, Instagram carousels — allemaal in het Nederlands.
Ronde 1: eerste vergelijking (num_predict=4096)
Resultaten
| Model | Format OK | Completeness | Snelheid | Opmerking |
|---|---|---|---|---|
| qwen2.5-coder:14b | 7/7 (100%) | 94% | 8.6 tok/s | Duidelijke winnaar |
| qwen3.5:35b-a3b (no-think) | 4/8 (50%) | 50% | 9.1 tok/s | MoE voordeel in snelheid |
| qwen3.5:35b-a3b (think) | 3/8 (38%) | 38% | 9.2 tok/s | Thinking eet tokens op |
| qwen3.5:9b (no-think) | 0/7 (0%) | 0% | 12.2 tok/s | Snelste maar lege output |
| qwen3.5:9b (think) | 0/7 (0%) | 0% | 12.2 tok/s | Token limit te laag |
| qwen3.5:27b | 0/7 (0%) | 0% | 0.0 tok/s | Totale mislukking |

De 27B catastrofe
Het qwen3.5:27b model was een complete ramp op 24GB:
- 17GB model + 8GB context = meer dan beschikbaar geheugen
- Het systeem ging zwaar swappen
- Alle 8 taken timeden uit na 300 seconden
- Na het unloaden was er nog maar 4.6 GB vrij
- Rerun met langere timeout: 3/8 format OK, maar slechts 4.0 tok/s
Het 27B dense model past simpelweg niet in 24GB RAM met een werkbare context window. Het 35B MoE model (dat slechts ~3.5B parameters per token activeert) draait ironisch genoeg prima.
Verrassingen
- qwen2.5-coder:14b was overduidelijk de beste — 94% completeness, 100% format compliance
- Thinking mode maakte dingen erger bij qwen3.5 — de thinking tokens aten het output budget op
- Het grotere model (27B) was het slechtste — tegenintuitief maar logisch gezien de geheugenbeperkingen
- MoE architectuur was verrassend efficiënt — 35B heet "35B" maar activeert slechts 3.5B per token
Extra modellen: Mistral en phi4-mini
Halverwege de eerste ronde heb ik drie modellen bijgepakt:
| Model | Type | Grootte | Format | Completeness | Snelheid |
|---|---|---|---|---|---|
| devstral | MoE | 14 GB | 7/8 | 82% | 5.4 tok/s |
| codestral | Dense | 12 GB | 7/8 | 71% | 5.8 tok/s |
| phi4-mini | Dense | ~2 GB | 8/8 | 90% | 28.4 tok/s |
phi4-mini was een verrassing: 28.4 tokens per seconde, 90% completeness, en het kleinste model van allemaal. Perfect voor snelle, gestructureerde taken waar je geen diep redeneren nodig hebt.

Ronde 2: het token-plafond doorbreken
De hypothese
Na analyse van de Ronde 1 resultaten zag ik een patroon: de qwen3.5 modellen genereerden consequent 4096 tokens (het maximum) maar de output was leeg of incompleet. Vooral bij thinking mode ging alles naar de "denkstappen" en bleef er niets over voor het antwoord.
Hypothese: De slechte scores zijn een token ceiling artefact, niet een kwaliteitsprobleem.
Nieuwe instellingen
num_predict: 4096 → 8192 (verdubbeld)
num_ctx: 8192 → 16384 (verdubbeld)
timeout: 300s → 900-1200s (verdrievoudigd)Resultaten
qwen3.5:35b-a3b (MoE)
| Modus | Ronde 1 | Ronde 2 | Verschil |
|---|---|---|---|
| no-think format | 4/8 | 6/8 | +50% |
| no-think completeness | 50% | 65% | +30% |
| thinking format | 3/8 | 7/8 | +133% |
| thinking completeness | 38% | 78% | +105% |
qwen3.5:9b
| Modus | Ronde 1 | Ronde 2 | Verschil |
|---|---|---|---|
| no-think format | 0/7 | 6/8 | van 0% naar 75% |
| no-think completeness | 0% | 75% | van niets naar bruikbaar |
| thinking format | 0/7 | 7/8 | van 0% naar 88% |
| thinking completeness | 0% | 78% | van niets naar bruikbaar |
De doorbraak
De resultaten bevestigden de hypothese overtuigend:
- 9b ging van 0% naar 75-78% completeness — puur door token limits te verhogen
- Thinking mode werd plotseling beter dan no-think — precies het omgekeerde van Ronde 1
- Snelheid bleef nagenoeg gelijk (geen penalty voor grotere context)
De les: als je thinking-modellen test met te lage token limits, meet je het plafond, niet het model.
Dit is een van de meest onderschatte foutbronnen in lokale LLM benchmarks. De community deelt constant resultaten met default token limits, zonder te beseffen dat ze appels met peren vergelijken.
Ronde 2b: marketing taken (alle modellen)
Met de hogere token limits de volledige marketing benchmark gedraaid.
Kwaliteit
| Model | Mode | Format | Completeness | tok/s |
|---|---|---|---|---|
| qwen3.5:35b-a3b | no-think | 10/10 | 100% | 8.8 |
| devstral | thinking | 10/10 | 98% | 5.9 |
| qwen3.5:35b-a3b | thinking | 10/10 | 99% | 8.8 |
| phi4-mini | thinking | 10/10 | 92% | 32.0 |
| codestral | thinking | 10/10 | 91% | 6.2 |
| qwen3.5:9b | thinking | 9/10 | 89% | 12.0 |
| qwen3.5:9b | no-think | 8/10 | 78% | 12.5 |
Snelheid: de echte eye-opener
Tokens per seconde zegt weinig voor eindgebruikers. De echte vraag: hoelang duurt het om een taak af te ronden?
| Taak | phi4-mini | codestral | devstral | qwen 35B | qwen 9B |
|---|---|---|---|---|---|
| LinkedIn post | 9s | 37s | 1m18 | 9m25 | 9m54 |
| Google Ads | 10s | 40s | 29s | 7m00 | 11m24 |
| SEO meta tags | 8s | 1m18 | 1m06 | 10m00 | 10m12 |
| Review response | 7s | 35s | 32s | 5m42 | 5m12 |
| Productbeschrijving | 11s | 46s | 51s | 7m54 | 6m30 |
| Re-engagement email | 10s | 56s | 44s | 10m12 | 9m12 |
| 5 FAQ's | 12s | 1m24 | 1m18 | 10m12 | 3m42 |
| Lead kwalificatie | 6s | 32s | 32s | 7m00 | 1m54 |
| Concurrentievergelijking | 11s | 1m18 | 1m24 | 9m30 | 4m06 |
| Instagram carousel | 8s | 1m12 | 1m06 | 6m48 | 4m48 |
| Alle 10 taken | ~1.5 min | ~9 min | ~8 min | ~1u16m | ~1u07m |
Phi4-mini doet alle 10 taken in anderhalf minuut. Qwen 35B heeft daar meer dan een uur voor nodig.
De verklaring: Mistral-modellen en phi4-mini genereren compactere output. Qwen produceert uitgebreidere teksten — bij marketing is dat niet per se beter.
Thinking mode: wisselend effect bij marketing
| Model | no-think | thinking |
|---|---|---|
| qwen3.5:35b | 100% compleet | 99% compleet |
| qwen3.5:9b | 78% compleet | 89% compleet |
Bij het 35B model maakt thinking mode geen verschil (of is het marginaal slechter). Bij het kleinere 9B model helpt thinking wél — het compenseert voor het gebrek aan parameters. De trade-off: thinking kost extra tijd en tokens.
Ronde 3: real-world coding V2
Na de eerste twee rondes heb ik een nieuwe benchmark gebouwd met hardere, realistischere taken. Token settings: num_predict=16384, num_ctx=32768.
Taken
SEOcrawler code (4 taken):
- Crawl4AI extraction pipeline — CSS selectors, fallback, structured SEO data
- FastAPI SSE streaming — event protocol, async generator, heartbeat
- Async batch upsert — retry logic, deduplication, batch processing
- Nederlandse bedrijfsdata validator — KvK, BTW, IBAN, postcode, telefoon
Bash-to-Python migratie (4 taken): 5. Receipt processor — NDJSON generatie, flood protection 6. Dispatcher routing — terminal claim, queue management 7. Health monitor — process checks, auto-restart, cooldown 8. State consolidator — merge terminal/queue/receipt state

Resultaten
| Model | Success | Format OK | Completeness | tok/s | Gem. tijd |
|---|---|---|---|---|---|
| qwen2.5-coder:14b | 8/8 | 8/8 | 94% | 8.6 | 50.7s |
| devstral | 7/8 | 7/8 | 82% | 5.0 | ~60s |
| qwen3.5:35b-a3b | 7/8 | 7/8 | 78% | 9.2 | ~120s |
| qwen3.5:9b | 6/8 | 6/8 | 70% | 9.3 | ~120s |
| codestral | 7/8 | 7/8 | 72% | 5.6 | ~55s |
qwen2.5-coder:14b blijft de beste voor code-taken. Dat is logisch: het is specifiek getraind op code, terwijl de andere modellen general-purpose zijn.
De qwen3.5:9b faalde op twee taken door timeouts (1800 seconden): de async batch upsert en de Nederlandse validator. Deze taken vereisen complex redeneren over retry-logica en validatiepatronen — te zwaar voor een 9B model.
Kwalitatieve observaties
Sterke punten over alle modellen:
- KvK/BTW extractie correct, juridische pagina's herkend
- Error classificatie: root cause correct geïdentificeerd (React SPA timeout)
- Print-to-logger: correcte log levels, systematische conversie
- Bash-to-Python: structureel correct, pathlib, signal handling
Structurele zwaktes:
- Test generatie: fixtures goed, maar specifieke gevraagde tests ontbreken (~20% completeness)
- Digest narrative (NL): lege output bij alle modellen — tokens gaan naar thinking, niets naar antwoord
- Nederlandse bedrijfsdata validator: alleen qwen2.5-coder:14b produceerde werkende regex voor alle patronen
Claude vergelijking: cloud als referentiepunt
Om de lokale resultaten in perspectief te plaatsen, heb ik dezelfde 10 marketing taken door Claude Haiku en Claude Sonnet gestuurd via de API.
Resultaten
| Model | Success | Completeness | tok/s | Gem. tijd | Kosten/run |
|---|---|---|---|---|---|
| claude-haiku | 10/10 | 100% | 11.8 | 24.3s | ~€0,01 |
| claude-sonnet | 10/10 | 98% | 15.0 | 19.4s | ~€0,05 |
Per taak vergelijking
| Taak | Haiku tijd | Sonnet tijd | Haiku tok/s | Sonnet tok/s |
|---|---|---|---|---|
| LinkedIn Post | 27.0s | 16.5s | 8.4 | 13.1 |
| Google Ads | 53.0s | 28.0s | 1.3 | 2.9 |
| SEO Meta Tags | 24.7s | 10.3s | 5.9 | 16.5 |
| Review Response | 12.3s | 14.7s | 15.4 | 16.4 |
| Product Description | 19.2s | 19.5s | 12.9 | 13.7 |
| Re-engagement Email | 31.3s | 17.5s | 10.8 | 18.0 |
| FAQ Generation | 25.1s | 20.4s | 14.2 | 19.5 |
| Lead Qualification | 14.8s | 13.8s | 8.9 | 15.4 |
| Competitor Comparison | 16.8s | 29.5s | 25.9 | 18.3 |
| Instagram Carousel | 18.6s | 23.3s | 14.8 | 15.8 |
Lokaal vs cloud: het complete plaatje
| Model | Totale tijd (10 taken) | Kwaliteit | Kosten |
|---|---|---|---|
| phi4-mini (lokaal) | ~1,5 min | 92% | €0 |
| claude-sonnet (cloud) | ~3 min | 98% | ~€0,05 |
| claude-haiku (cloud) | ~4 min | 100% | ~€0,01 |
| devstral (lokaal) | ~8 min | 98% | €0 |
| codestral (lokaal) | ~9 min | 91% | €0 |
| qwen3.5:9b (lokaal) | ~1u07m | 78-89% | €0 |
| qwen3.5:35b-a3b (lokaal) | ~1u16m | 99-100% | €0 |
Claude levert de beste balans tussen snelheid en kwaliteit. Maar phi4-mini is sneller, en devstral matcht de kwaliteit — beide gratis. Qwen 35B levert de beste Nederlandse taalvaardigheid, maar betaalt dat met uur-lange runtimes.
📖 Lees ook: Qwen3.5 Lokaal Draaien: Waarom Dit AI-Model Alles Verandert voor het MKB — Diepere duik in het best scorende Nederlandse model
Tijdlijn van de benchmark
60 uur compute, 30+ runs, drie rondes:
- 5 maart, 17:30 — Eerste run: qwen3.5:9b vs qwen2.5-coder:14b. Coder wint overduidelijk.
- 5 maart, 18:14 — Heavy models: qwen3.5:27b crasht (swap), 35B-a3b scoort matig.
- 6 maart, 07:03 — Ronde 2: token limits verdubbeld. Doorbraak — scores verdrievoudigen.
- 6 maart, 10:36 — Extra modellen: devstral, codestral, phi4-mini getest.
- 6 maart, 13:34 — Marketing benchmark gestart. Alle modellen, alle taken.
- 7 maart, 00:00-06:00 — Marketing runs door de nacht (Qwen modellen duren uren per run).
- 7 maart, 16:12 — Claude Haiku + Sonnet via API getest. Referentiepunt.
- 7 maart, 16:19-20:21 — Alle lokale modellen opnieuw op marketing, individueel.
- 7-8 maart — Coding V2 benchmark: hardere taken, maximale token settings.
Conclusies van deze lokale LLM benchmark
Modelkeuze hangt af van de taak
| Use case | Beste keuze | Waarom |
|---|---|---|
| Gestructureerde code output | qwen2.5-coder:14b | Hoogste format compliance (100%), 94% completeness |
| Snelle gestructureerde taken | phi4-mini | 28-32 tok/s, 90% compleet, 2 GB |
| Nederlandse marketing content | qwen3.5:35b-a3b (no-think) | 99-100% compleet, beste taalvaardigheid |
| Redeneer-intensieve taken | qwen3.5:35b-a3b (thinking) | Met voldoende token budget (8192+) |
| Snelheid prioriteit | phi4-mini of devstral | 32 resp. 6 tok/s |
| Cloud referentie | claude-haiku | 100% compleet, €0,01/run |
Vijf lessen
-
Token limits zijn cruciaal bij thinking-modellen — te laag en je meet het plafond, niet het model. Dit is de #1 fout in de meeste LLM benchmarks.
-
MoE architectuur maakt het verschil bij beperkt geheugen — 35B parameters in 23GB, activeert slechts 3.5B per token. Het 27B dense model faalde compleet waar het 35B MoE prima draaide.
-
Groter is niet altijd beter — phi4-mini (2 GB) scoort 90% completeness op coding taken en is het snelste model in elke categorie.
-
Marketing taken zijn fundamenteel anders dan coding taken — thinking mode helpt bij code, schaadt bij marketing. Test altijd op je eigen use case.
-
Nederlandse taalvaardigheid varieert sterk — Qwen 3.5 doet goed Nederlands. Mistral-modellen zijn wisselend ("Winter is op de deur" in plaats van "voor de deur"). phi4-mini is correct maar compact.
Het multi-model antwoord
In de praktijk gebruik ik nu een mix:
- phi4-mini voor snelle, gestructureerde analyses en intelligence queries
- qwen2.5-coder:14b voor code generatie en refactoring
- devstral voor snelle marketing drafts
- qwen3.5:35b-a3b voor complexe redeneer-taken en hoogwaardige Nederlandse content
Het is geen kwestie van "het beste model" kiezen. Het is een kwestie van het juiste model voor de juiste taak — dezelfde filosofie achter mijn AI-architectuur aanpak.
📖 Lees ook: Waarom een Mac de Beste Keuze Is voor AI Lokaal Draaien — Waarom unified memory het verschil maakt voor lokale LLMs
Veelgestelde vragen over lokale LLM benchmarks
Technische details
Benchmark framework
Het framework is zelf gebouwd en bevat:
- Automatische Ollama model management (pull, unload, memory cleanup)
- Progress checkpointing met JSON (resume na crash)
- Markdown + JSON rapportage
- Memory monitoring (psutil) tussen runs
- macOS
purgevoor geheugenoptimalisatie
Reproduceren
# Coding benchmark
python3 scripts/llm_benchmark.py \
--models qwen3.5:9b \
--num-predict 8192 --num-ctx 16384
# Marketing benchmark
python3 scripts/llm_benchmark.py \
--models qwen3.5:9b \
--marketing \
--num-predict 8192 --num-ctx 16384
# Real-world coding V2
python3 scripts/llm_benchmark_coding_v2.py \
--models qwen2.5-coder:14b \
--num-predict 16384 --num-ctx 32768Alle ruwe data
De benchmark resultaten (30+ JSON/Markdown rapportbestanden) staan in de .claude/vnx-system/reports/benchmarks/ directory van de SEOcrawler repo.
📖 Lees ook: Mijn AI Development Stack: Tools, Workflow en Wat het Kost — De volledige tool stack waarin deze modellen draaien
Vincent van Deth
AI Strategy & Architecture
Met jarenlange ervaring in marketingstrategie en AI-architectuur help ik bedrijven om hun groeipotentieel te maximaliseren met data-gedreven inzichten en AI-automatisering.
Mijn expertise ligt in het ontwerpen van AI-agent workflows, het strategisch inzetten van multi-agent systemen en het verbeteren van processen door schaalbare, auditeerbare oplossingen.
Of het nu gaat om het verfijnen van je AI-strategie, het selecteren van de juiste modellen of het implementeren van governance voor AI-gestuurde processen — ik bied maatwerkadvies dat leidt tot meetbare resultaten.