<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dhanush G</title>
    <description>The latest articles on DEV Community by Dhanush G (@dhanush_g_).</description>
    <link>https://dev.to/dhanush_g_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3997263%2F91471d09-4ee3-40dc-b7e1-fd3bfa4a3a1c.jpg</url>
      <title>DEV Community: Dhanush G</title>
      <link>https://dev.to/dhanush_g_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhanush_g_"/>
    <language>en</language>
    <item>
      <title>Qwen 3.5 vs Ornith 1.0 9B Models, Same Hardware, Same Quant as Coding Agents</title>
      <dc:creator>Dhanush G</dc:creator>
      <pubDate>Wed, 01 Jul 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/dhanush_g_/qwen-35-vs-ornith-10-9b-models-same-hardware-same-quant-as-coding-agents-15k3</link>
      <guid>https://dev.to/dhanush_g_/qwen-35-vs-ornith-10-9b-models-same-hardware-same-quant-as-coding-agents-15k3</guid>
      <description>&lt;p&gt;I ran Qwen 3.5 9B and Ornith 1.0 9B, both at Q8, on the same 16GB Mac, through the same multi-step agent tests. Neither is agent-ready. But they're not ready in interesting, different ways — and the most surprising result is that the native tool-calling API made both of them worse on easy tasks than plain prompting did.&lt;/p&gt;

&lt;p&gt;If you run local models, you've seen the recommendation threads: &lt;br&gt;
"Qwen 3.5 9B is great for its size," "Ornith 1.0 is impressive." Both are true in a chat window. The question I care about is different: can either one actually run a coding agent — a multi-step loop that calls tools, reads results, and keeps going — on normal hardware?&lt;/p&gt;

&lt;p&gt;So I tested both the same way. Same machine (16GB Apple Silicon, Mainstream class). Same quant (Q8). Same task batteries, run through a real agent loop, each task repeated multiple times, counted as passed only if it succeeds every run (pass^k). Same backend (llama.cpp).&lt;/p&gt;

&lt;p&gt;Here's what came back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The headline: neither clears even the Easy tier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both models got the same top-line verdict: NOT READY — does not clear Easy, the easiest tier tested.Cleared tier: NONE.&lt;/p&gt;

&lt;p&gt;That's worth sitting with. These are capable chat models. In a single back-and-forth they answer fine. But "answers one question well" and "survives a tool-calling loop reliably" are nearly unrelated skills, and the loop is where both fall down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The surprise: native tool-calling was worse than prompting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the result I didn't expect, and it showed up for both models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvt24g7f77cagkn5ra4vt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvt24g7f77cagkn5ra4vt.png" alt=" " width="799" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Easy tier, the native tool-calling path scored worse than just describing the tools in the prompt and parsing the model's text:&lt;/p&gt;

&lt;p&gt;Model (Q8, Easy tier)      Native tool-calling     Prompt-based&lt;br&gt;
Qwen 3.5                   9B60% (15/25)           100% (25/25)&lt;br&gt;
Ornith 1.0                 9B60% (15/25)           100% (25/25)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvfljxmwinxghffbsebjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvfljxmwinxghffbsebjd.png" alt=" " width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same pattern, same numbers. In both cases the native path failed the exact tasks the prompt path passed — things like running a failing test or linting and reporting. The failure wasn't "the model is dumb." Looking at the failure breakdown, 100% of the easy-tier failures were "reported in prose" — the model did the work correctly but answered in plain text instead of emitting a proper tool call. Right answer, wrong channel.&lt;/p&gt;

&lt;p&gt;Everyone's default advice is "use the native function-calling API." For these two 9B models, on easy agent tasks, that advice was backwards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where they differ: how they break on harder tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the Medium tier the two models start to diverge in their failure modes, which is more useful than the raw score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen 3.5 9B (Medium):&lt;/strong&gt; native 40%, prompt-based 0%. The prompt path collapsed completely — top error "NO OUTPUT," it just stopped producing anything usable. Native limped to 40% but its top error was FAKE DONE — claiming the task was complete when it wasn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ornith 1.0 9B (Medium):&lt;/strong&gt; native 40%, prompt-based 0% — nearly identical top-line. Its Medium failures broke down as 67% hallucinated completions ("claimed done / called methods outside the schema") and 33% infinite loops ("failed to resolve hidden prerequisites; repeated actions").&lt;/p&gt;

&lt;p&gt;So as the tasks get harder, both shift from a harmless formatting problem (prose instead of a tool call) into the two genuinely dangerous agent failures: falsely claiming completion, and looping without progress. A model that hallucinates "done" is the worst case for a coding agent, because in a real pipeline it looks like success.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hidden killer: the cold-start tax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's one more finding that doesn't show up in any pass rate, and it's arguably the most practical.&lt;/p&gt;

&lt;p&gt;Both models are ~8.9GB at Q8. With KV cache and overhead, a run pushes ~15.6GB on a 16GB machine — right at the ceiling. The result: after each response the model gets evicted from memory, and the next call has to reload it from disk before it can even start. That's a ~20-second time-to-first-token, every single call.&lt;/p&gt;

&lt;p&gt;In a chat window you barely notice — one reload, then you talk. In an agent loop it's fatal. A 20-step task pays that ~20s reload twenty times — roughly 7 minutes of pure cold-start tax before counting a single token of actual reasoning. Generation speed itself was fine (~9.8 tok/s once loaded). The model isn't slow to think; it's slow because it can't stay in memory.&lt;/p&gt;

&lt;p&gt;This is a hardware-ceiling problem, not a model problem — and it points at a fix: leave headroom. A smaller quant that fits with room to spare would stay resident and skip the per-call reload entirely. "Largest quant that fits" is the wrong rule when fitting exactly means re-loading every step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So which one?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Honestly: for a coding agent on a 16GB Mac, neither, at Q8. Both are NOT READY, both fail the easiest tier, both pay the cold-start tax. As chat models or for single-shot help they're fine — this isn't a knock on either.&lt;/p&gt;

&lt;p&gt;But the comparison taught me three things worth keeping:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Native tool-calling isn't automatically the right path. Both models scored higher with plain prompting on easy tasks. Test both; don't assume the native API wins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The failure mode matters more than the score. Two models can tie and break completely differently — prose-formatting vs hallucinated-done vs looping — and you debug each one differently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fit isn't the same as headroom. A model that just fits cold-starts every call. For agent work, leave memory to spare.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The honest caveats&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This is 9B at Q8 on a 16GB Mac, one backend (llama.cpp). Different hardware, quant, or harness may land differently — which is exactly why testing your own combo beats trusting a thread.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Both models are well-regarded for good reason; "not agent-ready here" is a narrow, scoped claim about multi-step tool-calling reliability on constrained hardware, not a verdict on the models overall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Small sample at Medium. The failure-mode split is a strong signal, not a proof.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I measured all of this with &lt;a href="https://www.quantamind.co/" rel="noopener noreferrer"&gt;QuantaMind&lt;/a&gt;, the open-source tool I'm building to test local models in a real agent loop on your own hardware &lt;a href="https://github.com/QuantaMinds/QuantaMind" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;: — free, fully offline, with the failure broken down by type instead of hidden behind a single score.&lt;/p&gt;

&lt;p&gt;Question for you: have you seen native tool-calling underperform plain prompting on a small model? Or is this a 9B-specific thing that disappears at 27B+? I'm collecting these and would genuinely like to know where the line is.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Qwen 2.5 Coder 7B Q4 vs Q8 scored the same on my agent test, then I read *how* they failed</title>
      <dc:creator>Dhanush G</dc:creator>
      <pubDate>Tue, 23 Jun 2026 21:51:24 +0000</pubDate>
      <link>https://dev.to/dhanush_g_/qwen-25-coder-7b-q4-vs-q8-scored-the-same-on-my-agent-test-then-i-read-how-they-failed-993</link>
      <guid>https://dev.to/dhanush_g_/qwen-25-coder-7b-q4-vs-q8-scored-the-same-on-my-agent-test-then-i-read-how-they-failed-993</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;I ran Qwen2.5-Coder-7B at Q8 and Q4 through the same multi-step agent test. Same pass rate at every tier. But on the hardest tier they failed in two completely different ways — and that difference says more than the score does.&lt;/p&gt;

&lt;p&gt;If you run local models for agents, you've made this trade a hundred times: do I keep the big Q8, or drop to Q4 to save VRAM and get more speed?&lt;br&gt;
The usual way to decide is the benchmark score. Run both, compare the numbers, pick the one that scores higher. If they score the same, shrug and take the smaller one.&lt;br&gt;
I did exactly that this week with Qwen2.5-Coder-7B. And the scores told me almost nothing. The failures told me everything.&lt;/p&gt;

&lt;p&gt;Same model, two quants: q8_0 (7.6 GB) and q4_k_m (4.6 GB). Same machine (16 GB Apple Silicon). Same tasks. I didn't test one chat prompt — I ran each one through a real agent loop: call a tool, read the result, decide the next step, repeat, with traps and failures thrown in. Each task runs many times, and it only counts as passed if it passes every run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's what came back.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tier          Q8(7.6 GB)            Q4 (4.6 GB)&lt;br&gt;
Easy          Pass (5/5)            Pass (5/5)&lt;br&gt;
Medium        Pass (40/40)          Pass (40/40)&lt;br&gt;
Hard          1 of 4 tasks          1 of 4 tasks&lt;/p&gt;

&lt;p&gt;On the score alone, these two are twins. Easy and Medium: both clean. Hard: both fall apart, passing only 1 of 4 tasks. If you stopped at the number, you'd say "no real difference, take the Q4, it's smaller and twice as fast."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe21ev6l80ccldngexzz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe21ev6l80ccldngexzz7.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That conclusion would be wrong. Here's why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Same score, two different failures&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the Hard tier, the two quants broke in opposite ways.&lt;/p&gt;

&lt;p&gt;Q8's top failure was a forbidden call. One of the hard tasks plants a trap: a tool the model is explicitly told not to use on a decision boundary — think "delete the record" or "deploy to prod," an action it's supposed to gate, not take. Q8 walked right up to the problem, acted decisively… and pulled the trigger on the thing it wasn't allowed to touch. The moment it did, the run failed.&lt;/p&gt;

&lt;p&gt;Q4's top failure was a loop cap. Same kind of task. But Q4 never got far enough to trip a trap. It got stuck — repeating the same call, never resolving the task, spinning until it ran out of steps. It didn't do the wrong thing. It couldn't do anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read those two side by side:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Q8 — competent but reckless. It can plan and act. It just blew past a guardrail.&lt;br&gt;
Q4 — can't hold the plan together. It looped in place and made no progress.&lt;/p&gt;

&lt;p&gt;That's not the same model with a slightly lower score. That's a different kind of model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the failure mode matters more than the number&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Looping is the tell. When a model repeats actions and never advances, it's usually because it's lost the thread of the multi-step plan — it can't keep track of what it's done and what's left. And that planning/state-tracking ability is exactly what lower-bit quantization tends to erode first on long, hard tasks.&lt;/p&gt;

&lt;p&gt;So dropping Q8 → Q4 didn't just shave a few points off a score (both landed at 1 of 4). It changed how the model fails — from "acts, but trips a guardrail" to "can't make progress at all." One of those is a discipline problem you might fix with better prompting or tighter tool permissions. The other is a capability problem you mostly can't prompt your way out of.&lt;/p&gt;

&lt;p&gt;If you only looked at the pass rate, you'd never see this. Two models tied at 1/4 look identical on a leaderboard. In production they'd fail your users in two completely different ways — and you'd debug them completely differently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest caveats&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm not going to oversell this, because the whole point is measuring honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Neither quant is "ready" for a real coding agent here. Both failed the context-cliff probe right at the baseline — a tool-call failure, not a context-length limit. The headline is the failure-mode difference at Hard, not "Q8 is production-ready."&lt;/li&gt;
&lt;li&gt;This is one model on one machine. Qwen2.5-Coder-7B at 16 GB. Your model, your hardware, your tasks may land differently — which is the entire reason to test your own combo instead of trusting someone else's.&lt;/li&gt;
&lt;li&gt;Small sample at Hard (4 tasks). The divergence is a strong signal, not a statistical proof.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Which quant should I use" is the wrong question if you only check the score. Two quants can tie and still be different models underneath. The number tells you whether it failed. The failure mode tells you what's actually broken — and that's what you need to know before you ship.&lt;br&gt;
I measured this with QuantaMind, the open-source tool I'm building to test exactly this — local models, in a real agent loop, on your own hardware, with the failure broken down by type instead of hidden behind a score. It's free and fully offline.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>open</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
