<?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: Sahil Nagpure</title>
    <description>The latest articles on DEV Community by Sahil Nagpure (@sahil27).</description>
    <link>https://dev.to/sahil27</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%2F4157744%2F3b830d08-f922-4df6-8d83-90fb293abf74.png</url>
      <title>DEV Community: Sahil Nagpure</title>
      <link>https://dev.to/sahil27</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sahil27"/>
    <language>en</language>
    <item>
      <title>Garage Brain: An Open Model Fine-Tuned to Turn My Friend's Car and Bike Knowledge Into a Buying Advisor</title>
      <dc:creator>Sahil Nagpure</dc:creator>
      <pubDate>Mon, 05 Oct 2026 01:55:32 +0000</pubDate>
      <link>https://dev.to/sahil27/garage-brain-an-open-model-fine-tuned-to-turn-my-friends-car-and-bike-knowledge-into-a-buying-5of</link>
      <guid>https://dev.to/sahil27/garage-brain-an-open-model-fine-tuned-to-turn-my-friends-car-and-bike-knowledge-into-a-buying-5of</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My friend, can tell you the torque figure of a bike that launched last month, why one hatchback feels better than its spec sheet suggests, and which ₹2 lakh motorcycle you should buy if you hate vibrations. He watches reviews constantly, rides and drives a lot, and gets excited about every new launch.&lt;/p&gt;

&lt;p&gt;The problem is that all of that knowledge lives in his head and in a hundred browser tabs. People keep asking him, "What should I buy?", and the answer depends on whatever he happens to remember that day.&lt;/p&gt;

&lt;p&gt;So I built Garage Brain: a personal knowledge base of the cars and bikes he's tested or researched, with a buying advisor on top.&lt;/p&gt;

&lt;p&gt;He feeds it text: a video transcript, an article, or his own notes.&lt;br&gt;
A model turns it into a structured spec card: engine, power, torque, weight, price, mileage, pros, cons, who it's for.&lt;br&gt;
He reviews and approves each card. Nothing reaches the advisor until he's checked it.&lt;br&gt;
Anyone can ask a question like "bike under ₹2 lakh for city commuting plus weekend highway rides" and get a ranked answer. It uses only vehicles in his collection, with trade-offs for each pick.&lt;/p&gt;

&lt;p&gt;The advisor can't recommend a bike he's never looked at, and it can't invent a horsepower figure, because everything comes from his approved cards.&lt;br&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%2Fkc0gwjrtxanzixggo8lq.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%2Fkc0gwjrtxanzixggo8lq.png" alt="The public Garage Brain page" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://garage-brain.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;garage-brain.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&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%2Fyuafwx53aw3yz5p97v6i.png" alt="An answer with ranked picks1" width="800" height="408"&gt;&lt;br&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%2F62t779yintskqj5mvngt.png" alt="An answer with ranked picks2" width="800" height="408"&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SahilNagpure07" rel="noopener noreferrer"&gt;
        SahilNagpure07
      &lt;/a&gt; / &lt;a href="https://github.com/SahilNagpure07/GarageBrain" rel="noopener noreferrer"&gt;
        GarageBrain
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Garage Brain&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A personal car and bike knowledge base with a buying advisor, built for one enthusiast
Open-weight Qwen3-8B (LoRA fine-tuned with Tinker), open embeddings (bge-small)
MongoDB Atlas, FastAPI, deployed on Render.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;/admin&lt;/code&gt;, paste a transcript, article, or note. The fine-tuned Qwen3-8B extracts a JSON spec
card (any spec not stated in the text = null).&lt;/li&gt;
&lt;li&gt;The owner reviews and corrects the card, then approves it. Corrections are stored.&lt;/li&gt;
&lt;li&gt;A visitor asks, e.g., "₹2L bike for city + occasional highway" on the public page. The base
Qwen3-8B parses the request into filters, MongoDB applies hard constraints (type, price),
embeddings rank the rest by fit, and the model explains the top picks using only the saved notes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/export-training&lt;/code&gt; turns approved cards into new training data, so you can retrain v2.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Which model does what&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Card extraction (admin)&lt;/td&gt;
&lt;td&gt;Qwen3-8B + our LoRA (fine-tuned on Tinker)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SahilNagpure07/GarageBrain" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The idea: fine-tune for a skill, retrieve for knowledge.&lt;/p&gt;

&lt;p&gt;My first instinct was to train the model on my friend's opinions. I changed my mind because a small fine-tune is good at learning formats and habits and poor at memorizing facts. A model with the facts baked in couldn't tell what my friend said from what it half-remembers from the internet. It also couldn't be updated without retraining.&lt;/p&gt;

&lt;p&gt;So the pipeline splits the work:&lt;/p&gt;

&lt;p&gt;Extraction (fine-tuned). I trained Qwen3-8B with LoRA on Tinker to turn messy text into a strict JSON card. The key lesson I wanted it to learn is that any spec not stated in the text must be null, never guessed. Auto-captions garble names ("Duke" becomes "duck"), prices come in lakhs, and reviews ramble. The tuned model has to cope with all of that.&lt;br&gt;
Storage. Approved cards go into MongoDB with an embedding of their pros, cons and verdict.&lt;br&gt;
Advice (base model plus retrieval). For a question, the base model parses it into filters (type, budget). MongoDB applies those as hard constraints, because numeric limits shouldn't be left to an LLM. The embeddings rank the remaining candidates, and the model explains the top picks using only the cards it's handed.&lt;br&gt;
A feedback loop. Every correction my friend makes in the review screen can be exported as new training data for the next version.&lt;br&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%2F65kbhzj8ririu6mf3pf7.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%2F65kbhzj8ririu6mf3pf7.png" alt="The admin review page with an extracted card1" width="799" height="382"&gt;&lt;/a&gt;&lt;br&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%2Fqkkbxe0x8ioe0xk2lbd4.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%2Fqkkbxe0x8ioe0xk2lbd4.png" alt="The admin review page with an extracted card2" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;1. I could fine-tune the model for exactly the behavior I needed.&lt;/strong&gt;&lt;br&gt;
The most important property of this app is that the model says "I don't know" (null) instead of making up a number. Prompting a closed model for that is a hope. Fine-tuning an open-weight model on examples that reward null made it a habit, and I could measure the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. His knowledge stays in a database he controls.&lt;/strong&gt;&lt;br&gt;
The collection of cards lives in my MongoDB, in plain JSON he can read, export and correct. It isn't locked inside a chatbot's memory. The advisor is grounded in it, so if he disagrees with an answer, he fixes the card.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. I can swap the model without losing the work.&lt;/strong&gt;&lt;br&gt;
The training data, schema and evaluation script don't depend on one model. When a better open model appears, I can retrain on the same examples and compare it against today's numbers in the same table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The weights are mine.&lt;/strong&gt;&lt;br&gt;
Tinker handles the GPU work, but the result is a LoRA adapter on an open model, not a rented behavior behind an API.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Render&lt;/strong&gt;: the web app and API run as a Render web service, deployed from a render.yaml Blueprint.&lt;br&gt;
&lt;strong&gt;Best Use of Tinker&lt;/strong&gt;: the LoRA fine-tune of Qwen3-8B and the sampling client both run on Tinker.&lt;br&gt;
&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt;: all approved spec cards, their embeddings, and the review status live in Atlas. The advisor uses it for hard filters (vehicle type and budget) before ranking by embedding similarity. It also stores the corrections that become training data for the next model version.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
