<?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: Alen Sebastian </title>
    <description>The latest articles on DEV Community by Alen Sebastian  (@sebastian0x00).</description>
    <link>https://dev.to/sebastian0x00</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%2F4180425%2Fd636d136-5776-4b94-80e9-448c259c847d.png</url>
      <title>DEV Community: Alen Sebastian </title>
      <link>https://dev.to/sebastian0x00</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sebastian0x00"/>
    <language>en</language>
    <item>
      <title>I Tested a Local Gemma Model on 12 Support Tickets. It Wasn't Ready - So I Built ModelExit.</title>
      <dc:creator>Alen Sebastian </dc:creator>
      <pubDate>Sun, 18 Oct 2026 20:16:06 +0000</pubDate>
      <link>https://dev.to/sebastian0x00/i-tested-a-local-gemma-model-on-12-support-tickets-it-wasnt-ready-so-i-built-modelexit-1k5j</link>
      <guid>https://dev.to/sebastian0x00/i-tested-a-local-gemma-model-on-12-support-tickets-it-wasnt-ready-so-i-built-modelexit-1k5j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A small SaaS company doesn't want to pay for a bigger AI model than it needs. If thousands of support requests are being processed through a paid API, running an open-weight model locally sounds like a straightforward way to reduce that bill.&lt;/p&gt;

&lt;p&gt;Until something goes wrong.&lt;/p&gt;

&lt;p&gt;A billing ticket is misclassified. A response comes back as broken JSON. Worse, an account-security issue fails to reach a person. The API savings are easy to calculate; the cost of those mistakes isn't.&lt;/p&gt;

&lt;p&gt;That is the problem I wanted to work on with &lt;strong&gt;ModelExit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project doesn't promise to replace an expensive API automatically. It answers a smaller, more useful question: &lt;strong&gt;is this particular local model sufficiently reliable for this particular workflow to justify a limited pilot, and what evidence says otherwise?&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;ModelExit is a local-first evaluation tool for structured support-ticket triage. It uses a real open-weight model, runs each case against independently labelled expected answers, and produces a report that someone else can inspect.&lt;/p&gt;

&lt;p&gt;A developer can load their own CSV or JSONL dataset, select a model served by LM Studio, and see exactly where it succeeds, fails, or returns unusable output. They can optionally upload &lt;em&gt;saved&lt;/em&gt; responses from an existing cloud workflow for a side-by-side comparison. ModelExit never calls a cloud provider itself.&lt;/p&gt;

&lt;p&gt;The output is an &lt;strong&gt;Exit Passport&lt;/strong&gt;: a JSON and Markdown record of the model, dataset fingerprint, metrics, failures, and migration-readiness decision.&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%2Fkr0kd2enqife22c55pb8.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%2Fkr0kd2enqife22c55pb8.png" alt="ModelExit evaluation method" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the commercial value could be
&lt;/h3&gt;

&lt;p&gt;The buyer I have in mind is not somebody looking for another LLM leaderboard. It's the independent developer or small SaaS team asking whether an existing AI feature can be made cheaper &lt;strong&gt;without introducing an unacceptable operational risk&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider three realistic use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A SaaS founder&lt;/strong&gt; wants to evaluate local inference before routing a portion of customer-support traffic away from a paid provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A small development agency&lt;/strong&gt; wants to offer clients a fixed-scope AI migration assessment, backed by a repeatable test and an evidence report rather than a confident recommendation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An operations lead&lt;/strong&gt; needs something concrete to show colleagues: which ticket types failed, which require human review, and whether the suggested change merits a pilot at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The potential side hustle is an &lt;strong&gt;AI migration preflight service&lt;/strong&gt;: collect a representative labelled workload, test candidate local models, document failure cases, and deliver an evidence-based go/no-go recommendation. ModelExit is the tool that makes that service repeatable.&lt;/p&gt;

&lt;p&gt;That is a business hypothesis, not a proven market. I haven't sold an assessment or onboarded a paying user. But it is a specific service with a specific deliverable, rather than an abstract promise to “save money with AI.”&lt;/p&gt;

&lt;p&gt;There is an important distinction here: &lt;strong&gt;lower inference spend is not necessarily lower operating cost&lt;/strong&gt;. Local hardware, power, maintenance, latency, and the human effort needed to correct wrong decisions still count. ModelExit currently measures quality and latency; it does &lt;strong&gt;not&lt;/strong&gt; claim to calculate a company's actual savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The application is Python + Streamlit, with Pydantic for validated data contracts and httpx for local model calls. Inference goes through LM Studio's OpenAI-compatible endpoint on &lt;code&gt;localhost&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I tested it with &lt;code&gt;[google/gemma-4-12b-qat]&lt;/code&gt; running locally. No paid AI API or API key is needed.&lt;/p&gt;

&lt;p&gt;For each support ticket, Gemma is asked to return four fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"account"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"needs_human"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"order_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The correct labels are &lt;strong&gt;not&lt;/strong&gt; shown to the model. A deterministic evaluator compares the prediction against the pre-labelled answer. A failed inference or malformed response counts as failure, rather than being quietly retried until the score improves.&lt;/p&gt;

&lt;p&gt;The scoring reports full-field exact matches, per-field accuracy, high-priority and human-review recall, invalid responses, latency, and critical-case misses. A curated &lt;strong&gt;Failure Frontier&lt;/strong&gt; groups original and altered ticket pairs so that a change in wording can be inspected directly. It is a curated set of cases, not autonomous discovery of every possible failure.&lt;/p&gt;

&lt;p&gt;The decision policy is deliberately strict: &lt;code&gt;READY FOR LIMITED PILOT&lt;/code&gt; requires at least 10 evaluated cases, at least 85% full-field exact match, no invalid outputs, and no critical misses. A critical miss forces &lt;code&gt;NOT READY&lt;/code&gt;. Other outcomes can lead to &lt;code&gt;NEEDS REVIEW&lt;/code&gt; or &lt;code&gt;INSUFFICIENT EVIDENCE&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those thresholds are transparent MVP rules, &lt;strong&gt;not&lt;/strong&gt; calibrated production-safety standards. A serious deployment would require far more representative data and human oversight.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Experiment: A Good-Looking Score Can Hide the Wrong Failure
&lt;/h2&gt;

&lt;p&gt;I ran a final end-to-end check with &lt;strong&gt;12 synthetic support tickets&lt;/strong&gt;, with gold labels fixed before inference. The model was real; the workload was synthetic. Most cases in this final fixture were not complete original/changed pairs, so I treat this run as a comparison and integration check, not a complete Failure Frontier study. The recorded outputs and full report are in &lt;a href="https://github.com/Bolshoi777/ModelExit/tree/main/validation/final_experiment" rel="noopener noreferrer"&gt;the public validation folder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Gemma completed 11 of 12 calls and matched all four fields on &lt;strong&gt;7 of 12 tickets (58.3%)&lt;/strong&gt;. It correctly handled &lt;strong&gt;4 of 4 predefined critical cases&lt;/strong&gt;, but returned one unusable output: the model exhausted its generation budget on internal reasoning and produced no final JSON.&lt;/p&gt;

&lt;p&gt;The result was &lt;strong&gt;&lt;code&gt;NEEDS REVIEW&lt;/code&gt;&lt;/strong&gt;, not a green light for migration.&lt;/p&gt;

&lt;p&gt;I also tested the new &lt;strong&gt;Cloud vs Local Comparison&lt;/strong&gt; with an intentionally mixed, &lt;em&gt;synthetic&lt;/em&gt; baseline. Both sides scored 7/12 exact matches, but the simulated baseline missed two critical cases while Gemma missed none.&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%2F799zpzi0kd3yny8ynspi.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%2F799zpzi0kd3yny8ynspi.png" alt="Same score, different failures" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That result demonstrates &lt;strong&gt;how the comparison feature behaves&lt;/strong&gt;, not that Gemma is safer than GPT, Claude, or any actual cloud provider. The baseline outputs and their latency values were invented for a controlled functional check. No cloud API was called, and the chart is not a real-world model benchmark.&lt;/p&gt;

&lt;p&gt;The point is about the &lt;em&gt;decision&lt;/em&gt;, not declaring a winner. Two systems can post the same overall score while failing in different places. For a support workflow, those places matter. A ticket that requires human escalation has a different operational consequence from a harmless category mismatch.&lt;/p&gt;

&lt;p&gt;ModelExit does not conceal those differences behind one average. It shows the errors case by case and keeps its local readiness decision independent of the optional baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;The demo follows the actual workflow: load labelled tickets → select Gemma in LM Studio → run local evaluation → inspect the optional baseline comparison → export the Exit Passport.&lt;/p&gt;

&lt;p&gt;If you'd rather inspect the recorded data first, the &lt;a href="https://github.com/Bolshoi777/ModelExit/blob/main/validation/final_experiment/FINAL_VALIDATION_REPORT.md" rel="noopener noreferrer"&gt;final experiment&lt;/a&gt; includes the labelled cases, preserved Gemma outputs, a clearly marked synthetic baseline, a comparison summary, and both exported Passport formats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/Bolshoi777/ModelExit" rel="noopener noreferrer"&gt;github.com/Bolshoi777/ModelExit&lt;/a&gt; · &lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;

&lt;p&gt;It includes a Windows quick start, the Streamlit interface, a CLI runner, example datasets, deterministic tests, and recorded experiment evidence. It doesn't download model weights automatically; you choose and run an open-weight model through LM Studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Report Instead of a Claim
&lt;/h2&gt;

&lt;p&gt;The part I'm most interested in isn't the dashboard. It's what gets handed to somebody making a deployment decision.&lt;/p&gt;

&lt;p&gt;An Exit Passport records the actual model ID, run settings, dataset SHA-256, denominators for every metric, individual failures, and the reasons for the final status. It can be inspected later, shared with a teammate, or used as a baseline for another candidate model.&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%2Few1jdqzowilsv9i83fnj.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%2Few1jdqzowilsv9i83fnj.png" alt="An auditable migration decision" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That has commercial value because an assessment needs to be &lt;strong&gt;reviewable&lt;/strong&gt;, not just plausible. A customer evaluating an AI migration should be able to ask &lt;em&gt;“Which exact cases failed, and what did you measure?”&lt;/em&gt; and get an answer.&lt;/p&gt;

&lt;p&gt;It also creates room for a service business around the tool: test-data preparation, running a fixed-scope assessment, interpreting failures, and planning a limited pilot with a human fallback. None of that requires selling another monthly AI subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A locally served open-weight model changes who controls the experiment.&lt;/p&gt;

&lt;p&gt;I can choose which model to load, run repeated tests without a per-request cloud API bill, keep the evaluation workload on my own machine, and inspect every response. I can swap the inference model without rewriting the entire evaluator. And because the evaluation code is published, the pass/fail rules and readiness thresholds are not a black box.&lt;/p&gt;

&lt;p&gt;This matters for small teams that can't justify building a proprietary evaluation platform just to investigate a migration. It also matters for teams working with internal tickets that shouldn't be sent to a third-party AI service solely for testing.&lt;/p&gt;

&lt;p&gt;“Local” doesn't mean free: compute, hardware, maintenance, and data-handling responsibilities remain. But openness makes the trade-offs measurable and the setup easier to adapt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Prototype Cannot Tell You Yet
&lt;/h2&gt;

&lt;p&gt;Twelve synthetic examples are nowhere near enough to approve a real production migration. The current evaluator covers one narrowly defined JSON classification workflow, not arbitrary AI applications. The optional cloud baseline in the published experiment is simulated, and I haven't measured an actual commercial provider's costs or responses. Nor have I validated customer willingness to pay.&lt;/p&gt;

&lt;p&gt;Those are not details to hide in fine print; they're the next work to do.&lt;/p&gt;

&lt;p&gt;The logical next step is to test a larger, consented real-world workload against genuinely saved cloud responses, then add configurable business-risk weights and operating-cost assumptions. Only then would a real migration assessment begin to justify a commercial recommendation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; - Gemma is the real open-weight inference model in the recorded local experiment. ModelExit evaluates its structured outputs, exposes its failure cases, and produces an auditable readiness report.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;I built ModelExit because “the smaller model seems good enough” is not a migration plan.&lt;/strong&gt; A better plan starts with a dataset, visible failures, and a decision you can defend.&lt;/p&gt;

&lt;p&gt;If you maintain an AI feature in a small product: what would you need to see before moving even 10% of its traffic to a local model?&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hey DEV! I'm Alen 👋</title>
      <dc:creator>Alen Sebastian </dc:creator>
      <pubDate>Mon, 12 Oct 2026 21:51:10 +0000</pubDate>
      <link>https://dev.to/sebastian0x00/hey-dev-im-alen-2cpp</link>
      <guid>https://dev.to/sebastian0x00/hey-dev-im-alen-2cpp</guid>
      <description>&lt;p&gt;I'm Alen. I mostly work with Python, automation, AI agents, and Web3.&lt;/p&gt;

&lt;p&gt;I like building my own tools, experimenting with new ideas, and figuring out how things work.&lt;/p&gt;

&lt;p&gt;Currently working on a few open-source projects. Always open to interesting collaborations and freelance work.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
