<?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: Rohit</title>
    <description>The latest articles on DEV Community by Rohit (@rohitpd).</description>
    <link>https://dev.to/rohitpd</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%2F4157335%2F4027d8e7-d0a7-4173-a405-8d9351f07124.jpg</url>
      <title>DEV Community: Rohit</title>
      <link>https://dev.to/rohitpd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rohitpd"/>
    <language>en</language>
    <item>
      <title>Cursed Code Reviewer</title>
      <dc:creator>Rohit</dc:creator>
      <pubDate>Sat, 31 Oct 2026 14:35:02 +0000</pubDate>
      <link>https://dev.to/rohitpd/cursed-code-reviewer-5fk6</link>
      <guid>https://dev.to/rohitpd/cursed-code-reviewer-5fk6</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

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

&lt;p&gt;The Cursed Code Reviewer. You point it at a code file, pick a ghost (COBOL, FORTRAN, Perl, Lisp or BASIC), and the ghost of that dead language haunts your code with a spooky greeting, three numbered review comments, and a farewell. COBOL shouts in capital letters, and BASIC prints &lt;code&gt;10 PRINT 'BOO'&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It's one Python file of about 100 lines, and it runs entirely on my laptop.&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%2Fo1jqv15dhfa3bnrpgbks.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%2Fo1jqv15dhfa3bnrpgbks.png" alt="The ghost of Perl reviewing coach.py in the terminal" width="800" height="143"&gt;&lt;/a&gt;&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/rohitphani007" rel="noopener noreferrer"&gt;
        rohitphani007
      &lt;/a&gt; / &lt;a href="https://github.com/rohitphani007/Cursed-Code-Reviewer" rel="noopener noreferrer"&gt;
        Cursed-Code-Reviewer
      &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;Cursed Code Reviewer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;The ghost of a dead programming language haunts your code. Point it at a file, pick a ghost, and it gives you a spooky greeting, three numbered review comments, and a farewell. It runs entirely on your own computer with a small open-weight model through Ollama, so your code never leaves your machine.&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest Open-Source AI Challenge, Week 4: Ghost in the Machine.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; and make sure it is running.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the model:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;ollama pull llama3.2:3b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the Python package:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;pip install ollama
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;python haunt.py &amp;lt;code_file&amp;gt; [ghost]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;python haunt.py haunt.py cobol
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ghosts: &lt;code&gt;cobol&lt;/code&gt;, &lt;code&gt;fortran&lt;/code&gt;, &lt;code&gt;perl&lt;/code&gt;, &lt;code&gt;lisp&lt;/code&gt;, &lt;code&gt;basic&lt;/code&gt;. The default is &lt;code&gt;cobol&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To try another model, change the &lt;code&gt;MODEL&lt;/code&gt; line at the top of &lt;code&gt;haunt.py&lt;/code&gt; and pull that model with &lt;code&gt;ollama pull&lt;/code&gt;.&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;p&gt;The script numbers the lines of your file…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rohitphani007/Cursed-Code-Reviewer" 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;It uses Ollama to run a small open-weight model locally. I tried &lt;code&gt;qwen2.5-coder:3b&lt;/code&gt; and &lt;code&gt;llama3.2:3b&lt;/code&gt;, and switching between them is a one-line change. The script numbers the lines of the file, sends it to the model with a short system prompt, and prints the reply between a greeting and a farewell.&lt;/p&gt;

&lt;p&gt;The first version didn't work, and the changes are the interesting part:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It ignored the persona.&lt;/strong&gt; I asked for a spooky review and got a plain, bulleted code review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It copied my example.&lt;/strong&gt; After I added an example of the style, the model reused it word for word and reviewed a "loop on line 4" that didn't exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It printed my placeholders.&lt;/strong&gt; When I switched to placeholders like &lt;code&gt;&amp;lt;spooky greeting&amp;gt;&lt;/code&gt;, it printed labels such as "GHOSTLY GREETING" and left &lt;code&gt;&amp;lt;spooky farewell&amp;gt;&lt;/code&gt; in the output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What worked:&lt;/strong&gt; I moved the greeting and farewell into plain Python and gave the model one small job, three numbered points about real things in the code. The spooky parts are now guaranteed, though the review points themselves are still fairly plain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How accurate is it? Not very. On one file and one run each, Qwen named an import that doesn't exist and gave one point that made no sense. Llama only mentioned things that really were in the file, but one of its three claims was false and another misread a joke in my code. A 3B model is a fun second opinion, not a trustworthy reviewer.&lt;/p&gt;

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

&lt;p&gt;My code never leaves my laptop. That matters for assignments and private projects, and a hosted reviewer would mean pasting them into someone else's server. It works offline once the model is downloaded, and it costs nothing however many files I run through it.&lt;/p&gt;

&lt;p&gt;It also let me experiment quickly. The ghost's personality is a short block of text, and I rewrote it four times in an evening. I swapped the model with one line and compared the results on the same file. A hosted API would also have let me change the prompt, but every attempt would have cost money, and I couldn’t have run it offline or kept my files off someone else’s server.&lt;/p&gt;

&lt;p&gt;The limits are real. The model is small, so the feedback is sometimes invented or misread, and the generated text is only as good as what a 3B model can do on a CPU.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>pgaichallenge</category>
    </item>
    <item>
      <title>Deadline Extractor</title>
      <dc:creator>Rohit</dc:creator>
      <pubDate>Sun, 25 Oct 2026 07:32:00 +0000</pubDate>
      <link>https://dev.to/rohitpd/deadline-extractor-23nd</link>
      <guid>https://dev.to/rohitpd/deadline-extractor-23nd</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

&lt;p&gt;The Problem: As students, our class group chats are flooded with hundreds of messages daily: jokes, memes, discussions, and random chatter. Somewhere in that noise, a professor or class rep drops: "Submit DBMS assignment by Friday 5pm", followed 6 hours later by "Deadline extended to Sunday 8pm". We miss deadlines simply because we don't have the energy to manually scroll back through 500 messages every evening.&lt;/p&gt;

&lt;p&gt;The Sloth Solution: Instead of manually tracking tasks, Deadline Extractor does the heavy lifting while you chill. You feed it an exported group chat, and it uses an open-weight local model to:&lt;/p&gt;

&lt;p&gt;Separate real submission requirements from casual banter.&lt;br&gt;
Anchor colloquial dates ("Monday", "tomorrow by midnight") to exact timestamps.&lt;br&gt;
Detect deadline updates/extensions and overwrite earlier ones.&lt;br&gt;
Export everything into a .ics calendar file ready for Google Calendar, Apple Calendar, or Outlook.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Zero Data Leaves Your Machine: Group chats contain deeply private conversations, student banters, and personal contact info. Sending this data to proprietary cloud APIs is a privacy violation. Running open weights via Ollama keeps 100% of the data on your laptop.&lt;br&gt;
100% Free &amp;amp; Offline: A student on a train or in a hostel with poor internet can still extract their syllabus and deadlines without paying for API subscriptions.&lt;br&gt;
Open Weight Flexibility: Powered by Meta's open llama3.2:3b, swappable for Mistral or Gemma with a single configuration flag.&lt;/p&gt;

&lt;p&gt;Tech Stack:&lt;/p&gt;

&lt;p&gt;AI Engine: Llama 3.2 3B via Ollama&lt;br&gt;
Backend: Python, dateparser, ics&lt;br&gt;
Frontend: Streamlit &amp;amp; CLI&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Demo Video Youtube Link:  &lt;iframe src="https://www.youtube.com/embed/6teLLI68qNY" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Git Hub Link: &lt;/p&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/rohitphani007" rel="noopener noreferrer"&gt;
        rohitphani007
      &lt;/a&gt; / &lt;a href="https://github.com/rohitphani007/Deadline-Extractor" rel="noopener noreferrer"&gt;
        Deadline-Extractor
      &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;🦥 Deadline Extractor&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Stop scrolling through 500 messages. Let the sloth do it.&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://hacktoberfest.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6f8b5fabab6f08c962a993aa3b48d8f1bdb975828688e392fa53bfb5e9d65ba5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572466573742d323032362d6f72616e6765" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;
&lt;a href="https://python.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f5641ef7113d69151aa77264d83c1d3a9b919fe5c6161524e26ff77fcfa48eee/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302b2d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python 3.10+"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rohitphani007/Deadline-Extractor/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/153acf9dff19deb8abfc598c53bac50a4ceae0f5c83a552711060d3d78d2c057/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e3f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href=""&gt;&lt;img src="https://camo.githubusercontent.com/552d7c3b17aa31c04bde1d855db33e9049b8545f5d4a2321e95b7f1afc0b5dfd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52756e732d3130302532355f4c6f63616c6c792d707572706c653f7374796c653d666f722d7468652d6261646765266c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465" alt="Runs Locally"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;😩 The Problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Every student knows the pain. Your class WhatsApp group has 500+ unread messages, and somewhere in the avalanche of memes, random polls, and "who has the notes?" threads, the class rep posted an assignment deadline — &lt;strong&gt;three days ago&lt;/strong&gt;. You only find out when your friend casually asks, "Did you submit the compiler design assignment?" and your stomach drops. That dreaded &lt;em&gt;"Wait, THAT was due today?!"&lt;/em&gt; moment hits different at 11:47 PM.&lt;/p&gt;
&lt;p&gt;Class reps shouldn't have to be human reminder bots. Students shouldn't have to archaeologically dig through chat histories to find what's due. There has to be a better way.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 The Solution&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Deadline Extractor&lt;/strong&gt; takes your exported chat file, runs it through a &lt;strong&gt;local open-weight AI model&lt;/strong&gt;, and produces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📋 A &lt;strong&gt;clean, sorted table&lt;/strong&gt; of all assignment deadlines&lt;/li&gt;
&lt;li&gt;📅 An…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rohitphani007/Deadline-Extractor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>pgaichallenge</category>
      <category>productivity</category>
    </item>
    <item>
      <title>CP Hint Coach</title>
      <dc:creator>Rohit</dc:creator>
      <pubDate>Wed, 14 Oct 2026 09:53:05 +0000</pubDate>
      <link>https://dev.to/rohitpd/cp-hint-coach-35gf</link>
      <guid>https://dev.to/rohitpd/cp-hint-coach-35gf</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;CP Hint Coach is a small app for people practicing competitive programming. You paste a problem and whatever you've tried so far, and it gives you four hints that get more revealing one at a time: a nudge, a key observation, the approach in plain English, and finally a code skeleton with the main logic left blank. The goal is to get you unstuck without handing you the solution.&lt;/p&gt;

&lt;p&gt;I built it for students and self-learners preparing for contests or coding interviews. When they get stuck on a Codeforces or LeetCode problem they usually either stay stuck or open the editorial, and the editorial skips the part that actually teaches them, which is working out the idea yourself. Coaches could also hand it to their students as something that helps without giving answers away. Whether anyone would pay for it is something I haven't been able to find out yet.&lt;/p&gt;

&lt;p&gt;There's also an optional Codeforces lookup. Type a handle and it lists problems you recently got a non-accepted verdict on.&lt;/p&gt;

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

&lt;p&gt;The model runs on the user's own machine, so there's no hosted version to link to. Here's a short screen recording of it working:   &lt;iframe src="https://www.youtube.com/embed/CEViEcBe5o8" width="710" height="399"&gt;
  &lt;/iframe&gt;
&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/rohitphani007" rel="noopener noreferrer"&gt;
        rohitphani007
      &lt;/a&gt; / &lt;a href="https://github.com/rohitphani007/CP-Hint-Coach-HBF" rel="noopener noreferrer"&gt;
        CP-Hint-Coach-HBF
      &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;CP Hint Coach&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A hint coach for competitive programming that runs on your own computer. You paste a problem and whatever you have tried so far, and it gives you four hints that get more revealing one step at a time. The idea is to get you unstuck without handing you the solution.&lt;/p&gt;
&lt;p&gt;It uses an open-weight model through Ollama, so hint generation does not need a cloud API or an account.&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest Week 2 Dev challenge (theme: Side Hustle).&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;When you are stuck on a Codeforces, LeetCode or CodeChef problem, there are usually only two options. You stay stuck for an hour, or you open the editorial (or paste the problem into a chatbot) and see the whole solution. The first costs you momentum and the second costs you the practice, because the part where you work out the idea is the part that…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rohitphani007/CP-Hint-Coach-HBF" 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;It's about 450 lines of Python. The interface is Streamlit, the model runs through Ollama, and the model I used is &lt;code&gt;qwen2.5-coder:3b&lt;/code&gt;, an open-weight code model. The Codeforces lookup uses their public API.&lt;/p&gt;

&lt;p&gt;When you press the button, the app sends the problem, your attempt and your chosen language to the model in a single request. The prompt asks for four hints as JSON. The app parses the reply, with a fallback for when the JSON is slightly broken, and keeps all four hidden. You reveal them one at a time, so each new level only appears after you press the button for it. The coach's behavior lives in one prompt file, and the model name is one line in &lt;code&gt;coach.py&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;A practice session isn't one question. You ask, unlock a hint, try something, get stuck again, unlock another. With a local model none of those requests has a per-request fee, which is what makes a tool like this realistic to give away, or to charge a small amount for, without a bill that grows with every hint.&lt;/p&gt;

&lt;p&gt;It also keeps your work private. Your attempts and code never leave your machine, and after the model is downloaded, hint generation works with no internet. The one exception is the Codeforces lookup, which is optional, needs a connection, and only sends the handle you type.&lt;/p&gt;

&lt;p&gt;The third thing is control. Because I run the model myself, I can change how much each level reveals, or swap in a different model and compare the results, by editing one file. A closed API would let me change the prompt but not the model underneath it.&lt;/p&gt;

&lt;p&gt;Open doesn't mean the same thing for every model, though. Ollama lists the 3B model I used under the Qwen Research License, not a fully permissive one, so if I were really selling this I'd have to read those terms carefully or choose a model with a clearer license. I also didn't compare against a closed model, and a larger one would probably do better on hard problems. What the open model gave me was a tool that costs nothing per request, keeps data local, and lets me change anything.&lt;/p&gt;

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