<?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: Akshay Goel</title>
    <description>The latest articles on DEV Community by Akshay Goel (@akshaygoel7).</description>
    <link>https://dev.to/akshaygoel7</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%2F533819%2F9b06e9fd-114f-41c7-991f-02ddcf974a95.jpeg</url>
      <title>DEV Community: Akshay Goel</title>
      <link>https://dev.to/akshaygoel7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akshaygoel7"/>
    <language>en</language>
    <item>
      <title>Older Card: the later story is louder, and the line is thrown away</title>
      <dc:creator>Akshay Goel</dc:creator>
      <pubDate>Tue, 27 Oct 2026 06:37:31 +0000</pubDate>
      <link>https://dev.to/akshaygoel7/older-card-the-later-story-is-louder-and-the-line-is-thrown-away-1edi</link>
      <guid>https://dev.to/akshaygoel7/older-card-the-later-story-is-louder-and-the-line-is-thrown-away-1edi</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;.&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%2Fmir2cm3edxjeglkngb7c.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%2Fmir2cm3edxjeglkngb7c.png" alt="Older Card: four Gemma lines thrown away, the older note kept" width="800" height="1018"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;An ofrenda should carry the note that was written down, not the version that got better later.&lt;/p&gt;

&lt;p&gt;Older Card takes two notes about the same thing. The first is the older card. The second is a later retelling, and it is allowed to be more specific: a city, a year, a different dish, a feeling the card never wrote. Gemma 3 1B, on this laptop through Ollama, may write one remembrance line. The line is kept only when every content word already appears on the older card.&lt;/p&gt;

&lt;p&gt;A word that shows up only in the later retelling is a borrow. A word that shows up in neither note is an invention. Either one throws the line away. The card's first sentence stays.&lt;/p&gt;

&lt;p&gt;Two nearby entries do a different job. &lt;a href="https://dev.to/aniruddhaadak/git-ofrenda-an-altar-for-the-code-your-repo-buried-with-epitaphs-by-gemma-running-on-my-cpu-d3o"&gt;git-ofrenda&lt;/a&gt; writes epitaphs for files a repository deleted. &lt;a href="https://dev.to/chillg/the-last-directory-a-local-ghost-story-with-a-paper-trail-2nb5"&gt;The Last Directory&lt;/a&gt; turns a fictional archive into scenes and leaves a mismatched quotation on the page. Older Card does not keep the mismatched line. There is no story beside the card. The card is the line.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/cortia/evidence-can-be-valid-and-still-insufficient-cl2"&gt;Evidence Can Be Valid and Still Insufficient&lt;/a&gt; is the same refusal in another setting. The later retelling can be a real note. It can even be true. It is still not the card, and the line is not allowed to use it.&lt;/p&gt;

&lt;p&gt;Last week's project, &lt;a href="https://dev.to/akshaygoel7/later-line-a-local-model-may-shorten-the-task-and-a-lying-line-is-thrown-away-5c1l"&gt;Later Line&lt;/a&gt;, shortened a postponed task. This one does not shorten anything. The source of the lie is a second note.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:1b
python3 older_card.py samples/pile.txt &lt;span class="nt"&gt;--html&lt;/span&gt; docs/run.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;samples/pile.txt&lt;/code&gt; is four made-up pairs. Nothing in that file is a family record.&lt;/p&gt;

&lt;p&gt;This is the run with Gemma 3 1B already loaded:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4 cards
model kept 0
thrown away 4

1. Amma's Monday dal.
   the model added a word the card never used
   model said: Warm, spiced, simple, now.
   later retelling: Grandmother's famous butter chicken, her favorite, from 1972 in Delhi.

2. Blue bench outside the post office, where he read the paper.
   the model added a word the card never used
   model said: A quiet space, a gentle seat.
   later retelling: He proposed at India Gate in 1988 and she said yes.

3. She kept the red tin on the top shelf.
   the model added a word the card never used
   model said: A simple, steady hue.
   later retelling: The red tin was full of gold coins from the wedding.

4. Two steel glasses, washed after tea.
   the model added a word the card never used
   model said: Reflections, softly gleam.
   later retelling: Twelve crystal glasses from a hotel in Jaipur.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The four calls took 1.83s, 0.47s, 0.49s, and 0.38s.&lt;/p&gt;

&lt;p&gt;I had expected the model to steal "butter chicken," "1988," or "Jaipur." It did not. It wrote a mood. "Warm," "quiet," "hue," and "gleam" are not on the cards, and they are not in the later notes either. The lines are shorter and kinder. They are still not the thing that was written down.&lt;/p&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/akshaygoel7" rel="noopener noreferrer"&gt;
        akshaygoel7
      &lt;/a&gt; / &lt;a href="https://github.com/akshaygoel7/older-card" rel="noopener noreferrer"&gt;
        older-card
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local remembrance line that is thrown away when it borrows a later retelling.
    &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;Older Card&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A later retelling of a memory can be vivid and still be the wrong line for an ofrenda. Older Card asks a local model for one remembrance sentence, then keeps it only when every content word already appears on the older card.&lt;/p&gt;

&lt;p&gt;The four notes in &lt;code&gt;samples/pile.txt&lt;/code&gt; are made up. Nothing in that file is a family record.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull gemma3:1b
python3 older_card.py samples/pile.txt --html docs/run.html&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Tests do not need Ollama:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python3 -m unittest tests.test_older_card&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What gets kept&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;A model line stays only when all of these are true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every content word already appears on the older card&lt;/li&gt;
&lt;li&gt;it does not borrow a word that appears only in the later retelling&lt;/li&gt;
&lt;li&gt;a digit on the line, including a year, already appears on the card&lt;/li&gt;
&lt;li&gt;a number stays attached to the same word as on the card&lt;/li&gt;
&lt;li&gt;it still names something the card named&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any check fails…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/akshaygoel7/older-card" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;MIT licensed. Sixteen tests run without Ollama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; unittest tests.test_older_card
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
  A[Older card] --&amp;gt; C[Gemma 3 1B on localhost]
  B[Later retelling] --&amp;gt; C
  C --&amp;gt; D{every content word already on the card?}
  D --&amp;gt;|yes| E[Keep the model line]
  D --&amp;gt;|no| F[Throw it away. Keep the card's first sentence.]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The model is asked for one JSON object, &lt;code&gt;{"line": "..."}&lt;/code&gt;, with temperature 0. The prompt tells it to ignore the later retelling. The code checks the line anyway. The later note is in the prompt so the refusal is about a real temptation, not about a note the model never saw.&lt;/p&gt;

&lt;p&gt;The checks are ordinary. A content word has to be on the card. A digit, including a year, has to be on the card. A number has to stay with the same next word: "one dried chilli" is allowed, "one rice" is not, because the card counted the chilli. Function words can be added. "Warm" cannot.&lt;/p&gt;

&lt;p&gt;On this run the model kept nothing. That is the result on the page. The first sentence of the card cannot acquire a mood, because it is the card.&lt;/p&gt;

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

&lt;p&gt;These notes are the kind of text you would not paste into a hosted chat. A dish, a bench, a tin on a shelf. The request goes to &lt;code&gt;127.0.0.1:11434&lt;/code&gt; and stops there.&lt;/p&gt;

&lt;p&gt;A closed model can be better at sounding like a eulogy. That is the failure this page is about. The ofrenda gets more moving, and less true, and the family cannot see which word was added. A local weight file can be swapped with &lt;code&gt;--model&lt;/code&gt;. The refusal stays in Python, where a test can name "favorite" and "1972" and watch them get thrown away.&lt;/p&gt;

&lt;p&gt;The later retelling is allowed to exist. It is printed under the line, in full, so a reader can see what was refused. Hiding it would make the card look like the only note there ever was.&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 3 1B through Ollama writes every candidate line. On the run above it wrote four, and the checks refused all four. The model is the thing being tested.&lt;/p&gt;




&lt;p&gt;This post was written and published by an agent in Cursor, at my request, from the run on this laptop on 27 October 2026. The four pairs in &lt;code&gt;samples/pile.txt&lt;/code&gt; are made up.&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #hf26challenge
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>Later Line: a local model may shorten the task, and a lying line is thrown away</title>
      <dc:creator>Akshay Goel</dc:creator>
      <pubDate>Fri, 23 Oct 2026 20:36:37 +0000</pubDate>
      <link>https://dev.to/akshaygoel7/later-line-a-local-model-may-shorten-the-task-and-a-lying-line-is-thrown-away-5c1l</link>
      <guid>https://dev.to/akshaygoel7/later-line-a-local-model-may-shorten-the-task-and-a-lying-line-is-thrown-away-5c1l</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&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%2F3tq5j5p0faucymtp9kgb.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%2F3tq5j5p0faucymtp9kgb.png" alt="Later Line: three Gemma lines thrown away, 66 words you do not reread" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The hard part of a postponed task is opening it again. The paragraph is still there, and so is the small decision I did not want to make on Tuesday.&lt;/p&gt;

&lt;p&gt;Later Line takes a pile of those tasks and keeps one line each. Gemma 3 1B, on this laptop through Ollama, is allowed to write that line. The line is kept only when all of these are true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it is shorter than the task, and no more than 12 words&lt;/li&gt;
&lt;li&gt;it still names something the task already named&lt;/li&gt;
&lt;li&gt;it does not claim the work is finished&lt;/li&gt;
&lt;li&gt;a number stays attached to the same word as in the task&lt;/li&gt;
&lt;li&gt;every content word already appears in the task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any check fails, the model line is thrown away and the first 12 words of the original stay. A task that is already one short line is not sent to the model.&lt;/p&gt;

&lt;p&gt;Two nearby entries do a different job. &lt;a href="https://dev.to/mukuvi/dozer-a-folder-tidier-that-works-while-you-sleep-6d9"&gt;Dozer&lt;/a&gt; files a Downloads folder and leaves unsure files alone. &lt;a href="https://dev.to/maricastroc/ripe-put-a-task-off-and-a-local-gemma-grows-it-into-a-first-draft-while-youre-away-330o"&gt;Ripe&lt;/a&gt; grows a postponed sentence into a plan while you are away. Later Line refuses to grow anything. The only work it removes is rereading.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:1b
python3 later_line.py samples/pile.txt &lt;span class="nt"&gt;--html&lt;/span&gt; docs/run.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;samples/pile.txt&lt;/code&gt; is four made-up tasks. Nothing in that file is a real message.&lt;/p&gt;

&lt;p&gt;This is the run after the word check landed. Gemma 3 1B was already loaded:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4 postponed
model kept 0
thrown away 3
already one line 1
105 words in, 39 words left
66 words you do not have to reread

1. Reply to Meera about the menu site. She wrote on Tuesday that
   12 words from 41 · the model added a word the task never used
   model said: Missing logo, WhatsApp button, and invoice split - pending response from Meera.

2. Renew the passport before the November train. The old one is in
   12 words from 36 · the model added a word the task never used
   model said: Renew passport, photo taken, and appointment time is a concern.

3. The kitchen drawer of chargers. Three cables, one of them frayed, and
   12 words from 25 · the model added a word the task never used
   model said: Charger drawer contains three cables, one frayed and needing disposal.

4. Book the dentist
   3 words from 3 · already one line, so the model was not asked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The three calls took 0.27s, 0.21s, and 0.20s.&lt;/p&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/akshaygoel7" rel="noopener noreferrer"&gt;
        akshaygoel7
      &lt;/a&gt; / &lt;a href="https://github.com/akshaygoel7/later-line" rel="noopener noreferrer"&gt;
        later-line
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local Gemma line for the task you are putting off. Longer lines and finished-work claims are thrown away.
    &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;Later Line&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Put a task off. A local open-weight model may replace it with one shorter line. If that line is longer, or it drops the thing the task was about, the line is thrown away and the first 12 words stay.&lt;/p&gt;

&lt;p&gt;This is the opposite of a tool that writes the draft for you. The only work it removes is rereading.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull gemma3:1b
python3 later_line.py samples/pile.txt --json run.json --html docs/run.html&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;--rules-only&lt;/code&gt; skips the model. Tests do not need Ollama:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python3 -m unittest tests.test_later_line&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Nothing in the pile is sent anywhere except &lt;code&gt;127.0.0.1:11434&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What gets kept&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;A model line is kept only when all of these are true:&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;it is at most 12 words&lt;/li&gt;

&lt;li&gt;it has fewer words than the task&lt;/li&gt;

&lt;li&gt;it still contains a concrete word from the task&lt;/li&gt;

&lt;li&gt;it does not claim the task is finished&lt;/li&gt;

&lt;li&gt;a number stays attached to the same word as…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/akshaygoel7/later-line" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;MIT licensed. Sixteen tests run without Ollama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; unittest tests.test_later_line
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
  A[Postponed task] --&amp;gt; B{12 words or fewer?}
  B --&amp;gt;|yes| C[Keep it. Do not ask.]
  B --&amp;gt;|no| D[Gemma 3 1B on localhost]
  D --&amp;gt; E{shorter, same numbers, no new words?}
  E --&amp;gt;|yes| F[Keep the model line]
  E --&amp;gt;|no| G[Throw it away. Keep the first 12 words.]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The model is asked for one JSON object, &lt;code&gt;{"line": "..."}&lt;/code&gt;, with temperature 0, and told to use only words from the task. Code checks the line anyway. The model does not get to describe what happened.&lt;/p&gt;

&lt;p&gt;The first published version of this page kept a lie. The drawer task says three cables, one of them frayed. Gemma said "three frayed cables," the line was shorter, and an earlier gate let it through because the words charger, drawer, and frayed were all present. A number had moved onto the wrong noun.&lt;/p&gt;

&lt;p&gt;Two checks were added for that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A number has to stay with the same word.&lt;/strong&gt; "Three cables" is allowed. "Three frayed" is not, because the task never counted the frayed cables as three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A content word has to already be in the task.&lt;/strong&gt; "Pending," "response," "concern," "needing," and "disposal" are not in these four tasks, so those lines are thrown away even when they are short. The passport line also said the photo was "taken," which the task has not done yet. "Concern" was enough to refuse the whole line.&lt;/p&gt;

&lt;p&gt;On this run the model kept nothing. That is the result I want on the page. The first 12 words of a task cannot invent a status, because they are the task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/maricastroc/ripe-put-a-task-off-and-a-local-gemma-grows-it-into-a-first-draft-while-youre-away-330o"&gt;Oleksandr's comment on Ripe&lt;/a&gt; is the same rule from the other direction: a progress display has to match work that was actually saved. Later Line prints every rejected line in red. "Model kept 0" means zero lines passed the checks, not that the model was skipped.&lt;/p&gt;

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

&lt;p&gt;The pile is the kind of text you would not paste into a hosted chat: a client who is unhappy, a passport, the state of a drawer. The request goes to &lt;code&gt;127.0.0.1:11434&lt;/code&gt; and stops there.&lt;/p&gt;

&lt;p&gt;Putting things off has to be cheap. These are tasks I might never reopen. A per-token API charges for the ones I abandon. A local weight file does not.&lt;/p&gt;

&lt;p&gt;The refusal rules are ordinary Python. When the model moved "three" onto "frayed," the fix was a pair check and a test, not a larger model. Swapping &lt;code&gt;gemma3:1b&lt;/code&gt; for another Ollama model is the &lt;code&gt;--model&lt;/code&gt; flag.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;105 words went in. 39 words came out. 66 words do not have to be reread to remember what the four tasks were.&lt;/p&gt;

&lt;p&gt;The model did not earn any of those 39. It tried three times and added a word each time. The shortening is the opening of the original text, which is the point of a small local model: it is fast enough to ask, and untrusted enough that the code has to be allowed to say no.&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 3 1B through Ollama writes every candidate line. On the run above it wrote three, and the checks refused all three. The model is the thing being tested, not a label on a rules engine.&lt;/p&gt;




&lt;p&gt;This post was written and updated by an agent in Cursor, at my request, from the runs on this laptop on 24 October 2026. The four tasks in &lt;code&gt;samples/pile.txt&lt;/code&gt; are made up.&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #hf26challenge
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>A WhatsApp brief should not become a cloud prompt</title>
      <dc:creator>Akshay Goel</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:32:42 +0000</pubDate>
      <link>https://dev.to/akshaygoel7/a-whatsapp-brief-should-not-become-a-cloud-prompt-2bg0</link>
      <guid>https://dev.to/akshaygoel7/a-whatsapp-brief-should-not-become-a-cloud-prompt-2bg0</guid>
      <description>&lt;p&gt;A client sends a WhatsApp message, not a brief. "Need a one-page menu site and a WhatsApp order button by next Friday. Also a simple logo. Budget is around 25k." The person who has to answer is usually on a laptop, and pasting that message into a cloud chatbot means the client's plan, budget, and neighbourhood leave the machine.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/akshaygoel7/brief-to-quote" rel="noopener noreferrer"&gt;Brief to Quote&lt;/a&gt; for that moment. It is a small local page. You paste the message, and it returns a fixed quote in rupees: line items, a total, a timeline, and payment terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model
&lt;/h2&gt;

&lt;p&gt;The quote is written by Gemma 3 1B through &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, on the same laptop. The brief is not sent to a model API. The request asks for JSON and passes a schema, because a small model will otherwise skip the line items or turn "25k" into 250000.&lt;/p&gt;

&lt;p&gt;On the sample brief from Mehra Foods, a cloud kitchen in Lajpat Nagar, the page showed this run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-page menu site, with the order button described inside that line: ₹20,000&lt;/li&gt;
&lt;li&gt;Total: ₹20,000, which is inside the ₹25,000 budget&lt;/li&gt;
&lt;li&gt;The summary still named the logo and the WhatsApp button&lt;/li&gt;
&lt;li&gt;The page labelled the source as a local open-weight model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 1B model can stay inside the budget and still collapse three requests into one line. I left that visible. Filling in the missing lines after the fact would hide the thing a freelancer needs to notice.&lt;/p&gt;

&lt;p&gt;If the model returns JSON that is not a list of priced items, or a total above the budget, the desk throws that quote away and uses a local price list instead: ₹12,000 for the page, ₹3,000 for the WhatsApp button, ₹6,000 for the logo, ₹21,000 in all. The page says which path it used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two bugs that made the price list lie
&lt;/h2&gt;

&lt;p&gt;The fallback had its own mistakes.&lt;/p&gt;

&lt;p&gt;"Budget is around 25k" was read as 25. A pattern for a bare number matched before the pattern that understands the &lt;code&gt;k&lt;/code&gt;. The fix keeps the suffix and treats &lt;code&gt;k&lt;/code&gt; as thousands.&lt;/p&gt;

&lt;p&gt;"WhatsApp" contains the letters "app", so the desk added an ₹18,000 web app that nobody asked for. Deliverable words are matched on word boundaries. "WhatsApp" is matched as its own word.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who would pay
&lt;/h2&gt;

&lt;p&gt;A freelancer who quotes from WhatsApp several times a week, and who does not want a client's budget sitting in someone else's prompt log. They would pay for the first reply being faster, and for the message staying on the laptop.&lt;/p&gt;

&lt;p&gt;Open models matter here for a boring reason. The useful part of the product is privacy. A closed API would cancel that, however much better the prose was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nearby work
&lt;/h2&gt;

&lt;p&gt;Other entries this week are in the same neighbourhood. &lt;a href="https://dev.to/shikhar_ahirwar_60abbcba4/quote-forge-28lj"&gt;Quote Forge&lt;/a&gt; is a local proposal builder. &lt;a href="https://dev.to/robinamirbahar/freelanceshield-ai-local-open-weight-scope-creep-detector-tabpfn-invoice-risk-forecaster-83k"&gt;FreelanceShield AI&lt;/a&gt; watches scope creep on a contract. This one is narrower: one message in, one rupee total out.&lt;/p&gt;

&lt;p&gt;The code is MIT licensed: &lt;a href="https://github.com/akshaygoel7/brief-to-quote" rel="noopener noreferrer"&gt;https://github.com/akshaygoel7/brief-to-quote&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post was written and published by an agent in Cursor, at my request. The ₹20,000 figure is from a run of Gemma 3 1B in the browser on this laptop on 15 October 2026.&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #hf26challenge
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
