<?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: Vishwajitsinh Mahida</title>
    <description>The latest articles on DEV Community by Vishwajitsinh Mahida (@vishwajitsinh_mahida_2547).</description>
    <link>https://dev.to/vishwajitsinh_mahida_2547</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%2F2207099%2Fd1242a7b-bd8a-4b13-ae98-5c5092638f1b.png</url>
      <title>DEV Community: Vishwajitsinh Mahida</title>
      <link>https://dev.to/vishwajitsinh_mahida_2547</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vishwajitsinh_mahida_2547"/>
    <language>en</language>
    <item>
      <title>"Trace Shape Reveals Model Capability: 3B vs 7B"</title>
      <dc:creator>Vishwajitsinh Mahida</dc:creator>
      <pubDate>Wed, 04 Nov 2026 20:59:46 +0000</pubDate>
      <link>https://dev.to/vishwajitsinh_mahida_2547/trace-shape-reveals-model-capability-3b-vs-7b-25m7</link>
      <guid>https://dev.to/vishwajitsinh_mahida_2547/trace-shape-reveals-model-capability-3b-vs-7b-25m7</guid>
      <description>&lt;h1&gt;
  
  
  Trace Shape Reveals Model Capability: 3B vs 7B
&lt;/h1&gt;

&lt;p&gt;Last week I traced the same agent running on two different model sizes. Same code, same task, same prompts. The only difference: the model.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Phone:&lt;/strong&gt; Qwen2.5-3B (3 billion parameters, running on a Pixel 8 Pro)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legion:&lt;/strong&gt; Qwen2.5-7B (7 billion parameters, running on an RTX 4060)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't read a single output. I just counted spans.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the traces showed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;3B model:&lt;/strong&gt; Every trace was exactly 2 spans. One &lt;code&gt;agent.run&lt;/code&gt;, one &lt;code&gt;llm.call&lt;/code&gt;. Zero tool calls. Ever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7B model:&lt;/strong&gt; Mean 5.8 spans per trace. Multiple &lt;code&gt;llm.call&lt;/code&gt; spans, multiple &lt;code&gt;tool.call&lt;/code&gt; spans. It actually used tools.&lt;/p&gt;

&lt;p&gt;The 3B model wasn't being lazy. It &lt;em&gt;couldn't&lt;/em&gt; do tool calls — not reliably, not in this setup. It would try to answer directly, skipping the tool-use loop entirely. The trace shape was degenerate: a straight line from start to finish, no branching, no tool interaction.&lt;/p&gt;

&lt;p&gt;The 7B model, same code, same prompts, would explore: call a tool, read the result, call another tool, synthesize. The trace shape was rich — branching, iterative, agentic.&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%2F0eu77pox8eg3mucnteuo.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%2F0eu77pox8eg3mucnteuo.png" alt="Trace shape comparison" width="800" height="396"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model         Traces  Mean spans  Tool calls
------------  ------  ----------  ----------
Qwen2.5-3B    6       2.0         0 (degenerate)
Qwen2.5-7B    ~500    5.8         yes (agentic)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;You can tell how capable a model is by looking at the &lt;em&gt;shape&lt;/em&gt; of its traces, without ever reading the outputs.&lt;/p&gt;

&lt;p&gt;This isn't about benchmark scores. It's about behavioral fingerprinting. A 3B model and a 7B model don't just give different quality answers — they behave differently as agents. The 3B doesn't do the agentic loop. The 7B does.&lt;/p&gt;

&lt;p&gt;If you're evaluating models for agentic use, don't just look at accuracy. Look at trace shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it use tools, or try to answer directly?&lt;/li&gt;
&lt;li&gt;How many steps does it take?&lt;/li&gt;
&lt;li&gt;Does the shape change with task complexity?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A model that can't produce rich trace shapes can't do agentic work, no matter what its benchmark scores say.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;p&gt;This is the second time trace shape has told the story:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prime Agent experiment:&lt;/strong&gt; Same model, different environments → 3.8x shift in span counts. Environment is input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This experiment:&lt;/strong&gt; Same environment, different models → degenerate vs rich traces. Model size determines agentic capability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In both cases, I never read a prompt or output. The metadata was enough.&lt;/p&gt;

&lt;p&gt;That's the thesis behind AgentPulse: &lt;strong&gt;trace shape is a behavioral fingerprint.&lt;/strong&gt; Whether you're detecting environment drift, model regressions, or capability gaps, the shape tells you first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All traces captured with AgentPulse (metadata-only). No prompts, outputs, or tool inputs were recorded.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>observability</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>We Traced Prime Agent 20 Times. Your Working Directory Is Invisible Input.</title>
      <dc:creator>Vishwajitsinh Mahida</dc:creator>
      <pubDate>Wed, 04 Nov 2026 20:37:09 +0000</pubDate>
      <link>https://dev.to/vishwajitsinh_mahida_2547/we-traced-prime-agent-20-times-your-working-directory-is-invisible-input-35f3</link>
      <guid>https://dev.to/vishwajitsinh_mahida_2547/we-traced-prime-agent-20-times-your-working-directory-is-invisible-input-35f3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;AgentPulse&lt;/strong&gt;, a metadata-only observability and evaluation layer for production AI agents. It never captures prompts, outputs, tool inputs, or secrets — only the shape of execution (span counts, timing, token usage, approved technical labels).&lt;/p&gt;

&lt;p&gt;This week I validated the eval layer on Prime Agent with 20 runs: same task, same model (gpt-5.4), only the working directory changed. Baseline (empty folder): median 6 spans. Candidate (cluttered folder): median 23 spans. &lt;strong&gt;3.8x increase&lt;/strong&gt; from folder contents alone.&lt;/p&gt;

&lt;p&gt;The evidence adapter verdict: &lt;code&gt;noise&lt;/code&gt; (confidence 0.6) — not &lt;code&gt;regression&lt;/code&gt;, because it requires 20 traces/set to claim regression. Correct conservative call on n=10.&lt;/p&gt;

&lt;p&gt;What I learned: (1) Trace shape is a behavioral fingerprint — no prompts needed. (2) Environment is input — working directory can 3.8x your costs. (3) Conservative evals build trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2F543hpq67ev7oo9e93bmb.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%2F543hpq67ev7oo9e93bmb.png" alt="Prime Agent span comparison" width="799" height="329"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Session    Spans  LLM  Tool  Time   Set
--------   -----  ---  ----  -----  ----
01a1a806   8      4    3     14:26  BASE
01a1a80a   8      4    3     14:30  BASE
01a1a80c   6      3    2     14:32  BASE
01a1a80e   4      2    1     14:34  BASE
01a1a80f   8      4    3     14:36  BASE
01a1a811   6      3    2     14:38  BASE
01a1a813   6      3    2     14:40  BASE
01a1a815   8      4    3     14:42  BASE
01a1a817   4      2    1     14:44  BASE
01a1a819   2      1    0     14:46  BASE
01a1a81a   12     6    5     14:49  CAND
01a1a81d   30     15   14    14:52  CAND
01a1a820   12     6    5     14:55  CAND
01a1a823   24     12   11    14:58  CAND
01a1a826   22     11   10    15:01  CAND
01a1a828   30     15   14    15:05  CAND
01a1a82b   22     11   10    15:08  CAND
01a1a82e   32     16   15    15:11  CAND
01a1a831   36     18   17    15:14  CAND
01a1a834   2      1    0     15:16  CAND
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adapter output: verdict &lt;code&gt;noise&lt;/code&gt;, median shift 17.0, IQR ratio 4.5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;Didn't use MLH partner tech — built on open-source (Python, TypeScript, Docker, ClickHouse, Postgres) with OpenAI API for the experiment. The value is in the methodology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;Didn't attend a hackathon — this is a solo build. But the most memorable moment was seeing 30+ span runs come back, and watching the adapter say &lt;code&gt;noise&lt;/code&gt; instead of &lt;code&gt;regression&lt;/code&gt; when I wanted the stronger verdict. That's when I knew the eval layer was working — it protects you from confirmation bias.__&lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>What 586 Real Traces Taught Us About LLM Agent Determinism</title>
      <dc:creator>Vishwajitsinh Mahida</dc:creator>
      <pubDate>Wed, 04 Nov 2026 03:41:00 +0000</pubDate>
      <link>https://dev.to/vishwajitsinh_mahida_2547/what-586-real-traces-taught-us-about-llm-agent-determinism-30cj</link>
      <guid>https://dev.to/vishwajitsinh_mahida_2547/what-586-real-traces-taught-us-about-llm-agent-determinism-30cj</guid>
      <description>&lt;h1&gt;
  
  
  What 586 Real Traces Taught Us About LLM Agent Determinism
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;How temperature selectively degrades agent reasoning — and what that means for observability.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;On November 3, 2026, we ran 586 traces of a LangGraph folder-research agent against AgentPulse, our metadata-only observability platform. The agent used Ollama with qwen2.5:7b on an RTX 4060 (Legion), plus 6 traces from a Pixel 8 Pro running qwen3b via llama.cpp in Termux.&lt;/p&gt;

&lt;p&gt;The experiment: same 10 questions, same corpus, four temperatures (0, 0.3, 0.7, 1.0). We measured trace shapes — span counts, durations, tool calls — to understand how sampling temperature affects agent behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; If you're building observability for AI agents, you need to know what "normal" looks like. Without a determinism baseline, every alert is a guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 1: Temperature 0 Is Deterministic
&lt;/h2&gt;

&lt;p&gt;At temp=0, qwen2.5:7b produced &lt;strong&gt;identical trace shapes&lt;/strong&gt; across 20 runs per question. Nine out of ten questions had standard deviation 0.0 on span counts. The tenth (Q1) had sd 0.4 — still remarkably tight.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Spans (temp=0)&lt;/th&gt;
&lt;th&gt;SD&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Q2-Q9 (except Q1)&lt;/td&gt;
&lt;td&gt;6-6, 8-8, 2-2, 11-11&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q1&lt;/td&gt;
&lt;td&gt;8-10&lt;/td&gt;
&lt;td&gt;0.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is the baseline. When temp=0, trace-shape changes are &lt;strong&gt;genuine regression signal&lt;/strong&gt;, not noise. Your alert thresholds can be tight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 2: Temperature Degrades Complex Reasoning First
&lt;/h2&gt;

&lt;p&gt;Here's what surprised us. Temperature doesn't add uniform noise. It &lt;strong&gt;selectively degrades&lt;/strong&gt; complex reasoning while simple lookups survive.&lt;/p&gt;

&lt;p&gt;At temp=0.3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Q1 (complex): sd 1.7 — already breaking&lt;/li&gt;
&lt;li&gt;Q4 (complex): sd 2.0 — breaking&lt;/li&gt;
&lt;li&gt;Q3, Q7, Q9 (simple): sd 0.0 — perfect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At temp=1.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Q7 (simple): sd 1.6 — finally breaks&lt;/li&gt;
&lt;li&gt;Q8 (simple): sd 0.0 — still perfect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The pattern:&lt;/strong&gt; Multi-file synthesis questions degrade at 0.3. Simple lookups survive to 1.0. The breakdown is &lt;strong&gt;question-dependent&lt;/strong&gt;, not just temperature-dependent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implication:&lt;/strong&gt; Your eval thresholds can't just be "wider at higher temp." They need to be per-question-type. A simple lookup at temp=0.7 should still be deterministic. A complex reasoning task at temp=0.3 is already noisy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 3: Compare Distributions, Not Means
&lt;/h2&gt;

&lt;p&gt;Our first eval prototype used mean comparison. It got 7/10 "correct" — but the 3 false positives were instructive.&lt;/p&gt;

&lt;p&gt;At temp=0.7, traces become &lt;strong&gt;bimodal&lt;/strong&gt;: sometimes the agent does full work (8 spans), sometimes it produces a degenerate 2-span trace. The mean shifts, triggering a "regression" alert. But the median and IQR tell the real story: high variance with overlapping IQR = &lt;strong&gt;noise&lt;/strong&gt;, not regression.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The rule:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shifted median + similar IQR = regression (alert)&lt;/li&gt;
&lt;li&gt;Same median + wider IQR = noise (don't alert)&lt;/li&gt;
&lt;li&gt;Bimodal = noise (the agent is inconsistent, not systematically worse)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We validated this on 500 traces. Mean-based detection fails. Median/IQR works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 4: Three Devices, One Platform
&lt;/h2&gt;

&lt;p&gt;We validated AgentPulse across three very different machines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legion&lt;/strong&gt; (RTX 4060): 580 traces, qwen2.5:7b, ~6s/trace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dell&lt;/strong&gt; (i5-1135G7): 72h soak running, synthetic load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pixel 8 Pro&lt;/strong&gt; (Tensor G3): 6 traces, qwen3b via llama.cpp, Termux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The phone was the hard one. We fought through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust ABI incompatibilities (uuid_utils on Python 3.13)&lt;/li&gt;
&lt;li&gt;Missing SSH client&lt;/li&gt;
&lt;li&gt;Model server configuration&lt;/li&gt;
&lt;li&gt;Registry label approval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it works. The phone agent runs, generates traces, and uploads them to the same workspace. &lt;strong&gt;Metadata-only observability works on mobile.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built
&lt;/h2&gt;

&lt;p&gt;From these findings, we built the &lt;strong&gt;quality-warning evidence adapter&lt;/strong&gt; — the statistical engine that connects real trace data to AgentPulse's alerting system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core logic:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compare baseline vs candidate using median and IQR (not mean)&lt;/li&gt;
&lt;li&gt;Infer question type from baseline shape (simple_lookup vs complex_reasoning)&lt;/li&gt;
&lt;li&gt;Adjust thresholds by question type (complex gets 1.5x tolerance)&lt;/li&gt;
&lt;li&gt;Classify: no_change, noise, regression, or insufficient_data&lt;/li&gt;
&lt;li&gt;Bimodal distributions → noise, never regression&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The adapter is live on GitHub (codex/quality-warning-evidence, commit 3df33f0). The API integration follows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;If you're building agent observability:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Establish your temp=0 baseline first.&lt;/strong&gt; Without it, you're guessing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thresholds must be per-question-type.&lt;/strong&gt; Complex reasoning degrades faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare distributions.&lt;/strong&gt; Means lie when data is bimodal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test on real hardware.&lt;/strong&gt; The phone taught us more than the GPU did.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Temperature doesn't just make agents "more random." It selectively kills complex reasoning first. Your monitoring needs to know the difference.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;586 traces. 3 devices. 1 night. The data is real, the findings are publishable, and the code is on GitHub.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>observability</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
