9 min read
When developers say “model X is dumb,” they often mean:
I ran model X through a half-configured harness with the wrong chat template, oversized context, low-quality quant, no tool parser, lossy compaction, and an unconstrained shell.
That is a harness failure and almost nobody mentions it when discussing model capabilities.

I’m sure you developed that intuition too, in fact, I just finished reading a very long reddit thread and the main claim was deliberately absurd:
Hugging Face is empty and exactly two local models exist on this entire planet: Qwen 3.6 35b a3b and Qwen 3.6 27b. That is the entire list. Your specs don’t matter. Your use case doesn’t matter.
That is obviously not true.
We know that Qwen is strong for coding and agentic work, and Gemma is better for creative writing, chat, translation, and human-like interaction.
Smaller models still matter for classification, embedded systems, latency, and cheap background jobs, but what matters more is:
These factors matter so much that the same workflow can look broken in one setup and stable in another.
That is the actual lesson that people avoid nowadays, everybody just want better models.
Let’s have a look at a simple setup which we will get into the details later:

That’s why a better question to ask is:
What is the smallest reliable agent stack I can standardize on, measure, and operate?
Because model roulette is not engineering, it is entertainment.
Let’s have a look at the details.
Editor’s note: To celebrate reaching 10,000 community members on Medium, who relentlessly design, ship, and iterate on agents every day, we’re also making the full repository available for free, which is part of our Agent Foundry program.
Every time someone asks, “What’s the best open-source model for X?”, the replies explode.
Gemma 4. Qwen 3.5 122B. GPT-OSS. Nemotron. Kimi. MiniMax. DeepSeek. Step. IBM Foundation Models. Small Qwen models.
Then it becomes:
Before long, the answer is 50 different models across 20 different hardware configurations, which is great for enthusiasts but terrible for engineering teams.
What we need isn’t more choice, but a short, opinionated default list that gets us 95% of the way there.
We want to collapse infinite choice into a handful of sensible defaults.
The right move is VERY boring:
That is the real there are only two models principle.
For most developer teams in the context of that thread, the practical shortlist looks like this:

This is a sane starting point for a local agent stack.
Qwen 3.6 27B is a dense causal language model with native 262,144-token context, MTP support, compatibility with Transformers, vLLM, SGLang, and KTransformers, and published coding-agent benchmark numbers such as SWE-bench Verified and Terminal-Bench 2.0.
Qwen 3.6 35B-A3B is a 35B-total MoE model with only 3B activated parameters, native 262,144-token context, vision support, MTP support, and similar deployment compatibility.

Gemma 4 is an open-weight multimodal family with text and image input, long context, support for more than 140 languages, coding/agentic improvements, reasoning capability, and a proper system role. It includes dense and MoE variants, including 31B dense and 26B-A4B.
The short version is:
Now let’s make that operational.
A coding model in a chat window is not the same thing as a coding agent.
A coding agent has to do a loop:
The loop matters more than most people admit, and if you are not familiar with loop engineering, you can read about it here:
agentnativedev.medium.com
This is why you will see comments about Qwen loops behave poorly in one harness, and behaving much better in OpenCode or in Hermes.
That is exactly what should happen if the failure is not just the raw model.
Agent harness quality includes:
When developers say “model X is dumb,” they often mean:
I ran model X through a half-configured harness with the wrong chat template, oversized context, low-quality quant, no tool parser, lossy compaction, and an unconstrained shell.
That is a stack failure.
Modern local runners expose enough knobs to make this a real systems problem.
[llama.cpp](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md) server supports an OpenAI-compatible API, multi-user parallel decoding, continuous batching, function calling/tool use, JSON-schema constrained responses, speculative decoding, multimodal support, monitoring, and runtime parameters for context, batching, KV cache, GPU layers, and MoE CPU offload.[vLLM](https://docs.vllm.ai/en/v0.21.0/serving/openai_compatible_server/) exposes an OpenAI-compatible server as well, and the vLLM Qwen 3.6 27B recipe documents deployment modes for BF16, FP8, INT4, NVFP4, long context, and MTP.[SGLang](https://sgl-project-sglang-93.mintlify.app/backend/openai-compatible-api) also provides OpenAI-compatible endpoints.That means your agent should not care whether the backend is llama.cpp, vLLM, SGLang, LM Studio, Ollama, or a hosted endpoint.
Your agent should speak to /v1/chat/``completions.
Once your agent talks to a standard API, you can swap runners without rewriting the product.
You can run Qwen 35B-A3B on a consumer workstation with GGUF today, Qwen 27B on vLLM tomorrow, and Gemma as a second opinion when the task is mostly writing, translation, or multimodal explanation.
The following table is a practical starting point.

The local agent stack should not treat these as competitors in one global leaderboard because they are different tools.
You should choose based on the job.
Dense models are often less surprising than MoE models.
Every token goes through the same full parameter set. There is no expert routing weirdness. For deep repo reasoning, multi-file changes, and tasks where small mistakes compound, that boring consistency matters.
Use Qwen 3.6 27B when:
MoE models still need memory for the weights.
You do not magically load only the active experts but at generation time, active parameters strongly influence compute.
People are trying to cram large MoEs into consumer hardware and getting usable tokens per second.
A low-active-parameter MoE can be a better local trade-off than a smaller dense model, if your memory system can feed it and the quant does not destroy behavior.
Use Qwen 3.6 35B-A3B when:
Also once you spill into system RAM, memory bandwidth becomes king.
DDR3, DDR4, DDR5, PCIe, CPU memory topology, mmap behavior, and offload strategy can matter more than people expect.
This is why two users can claim wildly different tokens per second on the same GPU, where they do not actually have the same system.
Gemma 4 is typically preferred for creative writing, roleplay, translation, multilingual use, explanations, and general chat.
For example, acustomer-support agent, translation assistant, document explainer, internal knowledge-base companion, or product-writing copilot may benefit more from Gemma-style language behavior than from a code-first model.
Gemma 4 family includes dense and MoE models, supports text and image input, long context, more than 140 languages, reasoning, coding/agentic capabilities, and system-role support.
That makes it a serious local candidate even if your primary coding loop stays on Qwen.
Use Gemma 4 when:
Do not force a coding model to be your product copywriter just because it writes decent Python.
Small models are useful.
A 0.6B, 4B, 8B, 9B, or 14B model can be the right tool for:
Running a 35B model for every tiny classification request is bad systems design.
The real stack often looks like this:
Remember that this is a product architecture.
Let’s get back to our local agent stack for a second.

The API boundary matters because it decouples the product from the model runner.
OpenCode supports local models through llama.cpp and other OpenAI-compatible providers. Cline also supports OpenAI-compatible providers, including local model servers such as Ollama and LM Studio, and any endpoint that behaves like the OpenAI API. Qwen-Agent can connect to your own deployed OpenAI-compatible service through vLLM or SGLang.
This means the agent harness can stay stable while you test model backends.
The general perception about quantization is following:
A garbage quant of a massive model is a bagillion times better than your precious micro-models anyway.
That is sometimes true enough to be tempting but it is not reliable enough to be a rule.
Quantization is not just compression because it changes behavior.
The lower you go, the more likely you are to damage:

You can think of the practical split:
The mistake is evaluating quants by whether they load but the correct evaluation is:

A smaller high-quality model can beat a damaged large quant for short tasks, strict JSON, low latency, and classification.
A low-quant larger model can beat a tiny model for reasoning-heavy tasks.
You have to test.