<?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: Sethumadhavan N</title>
    <description>The latest articles on DEV Community by Sethumadhavan N (@sethumadhavan004).</description>
    <link>https://dev.to/sethumadhavan004</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%2F4185233%2F44d7ad28-31c3-4209-a0de-7a20fe45b519.jpg</url>
      <title>DEV Community: Sethumadhavan N</title>
      <link>https://dev.to/sethumadhavan004</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sethumadhavan004"/>
    <language>en</language>
    <item>
      <title>Who's booking the hotel? What small local LLMs get wrong in meetings, and the code that catches it</title>
      <dc:creator>Sethumadhavan N</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:39:04 +0000</pubDate>
      <link>https://dev.to/sethumadhavan004/whos-booking-the-hotel-what-small-local-llms-get-wrong-in-meetings-and-the-code-that-catches-it-370n</link>
      <guid>https://dev.to/sethumadhavan004/whos-booking-the-hotel-what-small-local-llms-get-wrong-in-meetings-and-the-code-that-catches-it-370n</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I used this week's DEV challenge to make a product I had been thinking of making for some time now: a voice-based meeting assistant. I had made some earlier versions and prototypes, but most of them were wrappers around a bunch of LLM API calls that orchestrated the flow. I was burdened by two dependencies: the model's availability on the free tier, and the cost of using it for actual meetings.&lt;/p&gt;

&lt;p&gt;Both had been hurdles. But Hacktoberfest has brought me not just a solution to my problem, but an opportunity to improve myself towards the role I aspire to.&lt;/p&gt;

&lt;p&gt;When I read the challenge parameters, even the general ones that require open models excited me to be part of such a community and competition. But when the special theme dropped, I thought it was a sign from heaven. Slow and Steady, wow. It was perfect for me and my laptop. I had to wait 5 seconds for the challenge page to load, and then I saw that they were actually referring to my laptop. It made me super excited and determined to complete my project.&lt;/p&gt;

&lt;p&gt;But this time, I did not just wrap something; I made research my primary focus. Research into which open model was right for my slow but steady laptop: which model made the best of the limited resources my laptop provides, to give a steady performance. And I was very glad to find the actual parameters that matter here.&lt;/p&gt;

&lt;p&gt;So in this post (and a research paper I am planning), I will explain in detail the meeting assistant I built, which is powered by local models and runs steadily even on an 8 GB RAM laptop. Yes, it is comparatively slow, but it is a steady tool that provides cost independence, data privacy and, most importantly, complete customization. One could even fine-tune their own personal assistant, right down to the binaries (future work).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just click your name and speak: the app transcribes each turn and writes the action items (owner, task, deadline) as sticky notes, one color per person. A white card means nobody has taken that task yet, and a red check marks anything the code is unsure about. You decide. Audio and notes never leave the laptop.&lt;/p&gt;

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

&lt;p&gt;This video shows a short demo of the app and how to use it. We tested it in an actual meeting with my friends, planning a trip, but for a proper demo the video was recreated from a script based on that meeting.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/XEpmtArXQPA" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A scripted re-enactment: screen-recording a live meeting wasn't feasible on this laptop. The voices are synthetic (Kokoro); the transcription, notes and timings are real, from one recorded take.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I have shared the eval harness and the app code in the public repo.&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/Sethumadhavan004" rel="noopener noreferrer"&gt;
        Sethumadhavan004
      &lt;/a&gt; / &lt;a href="https://github.com/Sethumadhavan004/meeting-assistant" rel="noopener noreferrer"&gt;
        meeting-assistant
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local meeting assistant on an 8 GB CPU-only laptop, plus an eval of small open models.
    &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;Meeting Assistant: local, on an 8 GB laptop&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A privacy-first meeting note-taker that runs entirely on a CPU-only, 8 GB laptop. Click your name
talk; it transcribes with &lt;strong&gt;Moonshine&lt;/strong&gt;, turns the meeting into &lt;strong&gt;owner · task · deadline&lt;/strong&gt; with a
small open model (&lt;strong&gt;Ternary Bonsai 4B&lt;/strong&gt; by default), and then checks the model's work in plain code
Audio and notes never leave the machine.&lt;/p&gt;
&lt;p&gt;Behind it is an eval of three small open models on this exact laptop, because the first question was
not "how do I build it" but "which model is good enough here, and what does each choice cost?"&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Sethumadhavan004/meeting-assistant/docs/demo-poster.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSethumadhavan004%2Fmeeting-assistant%2FHEAD%2Fdocs%2Fdemo-poster.jpg" alt="The app after a meeting: one sticky note per task, coloured by owner; a white card for a task nobody took"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/XEpmtArXQPA" rel="nofollow noopener noreferrer"&gt;youtu.be/XEpmtArXQPA&lt;/a&gt; (70 s, a scripted re-enactment; see below) · &lt;strong&gt;Write-up:&lt;/strong&gt; &lt;em&gt;link coming (DEV)&lt;/em&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speaker buttons:&lt;/strong&gt; click your name, speak, click the next person. Exact names, no guessing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-text on CPU&lt;/strong&gt; with Moonshine, about 10× faster than real time here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action items&lt;/strong&gt;…&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/Sethumadhavan004/meeting-assistant" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Setup is in the README. The eval method is in &lt;a href="https://github.com/Sethumadhavan004/meeting-assistant/blob/main/eval/README.md" rel="noopener noreferrer"&gt;&lt;code&gt;eval/README.md&lt;/code&gt;&lt;/a&gt;, and how the video was made is in &lt;a href="https://github.com/Sethumadhavan004/meeting-assistant/tree/main/demo" rel="noopener noreferrer"&gt;&lt;code&gt;demo/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Open-source AI used (all local, CPU only):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Moonshine&lt;/strong&gt; for speech-to-text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ternary-Bonsai-2-4B&lt;/strong&gt;, run with PrismML's llama.cpp fork (the app's default model).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Granite 4.2 3B&lt;/strong&gt; and &lt;strong&gt;Phi-4-mini&lt;/strong&gt;, run with Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; for the local web app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kokoro&lt;/strong&gt; for the demo voices only.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;A Ryzen 3 4300U with 8 GB of single-channel RAM and no GPU.&lt;/li&gt;
&lt;li&gt;8 test meetings with 53 action items that I wrote by hand before any model ran, plus 2 held-out meetings for the second round.&lt;/li&gt;
&lt;li&gt;A harness that logs quality, speed, tokens and RAM for every run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The limited resources I had forced me to do something crucial that everyone should do: research what a model actually does, what is needed and what is not. Below is what I found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I found:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The speed limit is arithmetic.&lt;/strong&gt;  The numbers on paper didn't hold up in testing. The smallest model, Bonsai, should have been about twice as fast as the others; in practice its whole runs took longer than Phi's (36 s vs 27 s). Memory bandwidth (21.3 GB/s) divided by model size gives a ceiling on speed. Granite and Phi reached 72–73% of theirs. The 2-bit Bonsai reached only 45%, probably because it is compute-bound. The impact of compute is something that I was able to infer thanks to this study.&lt;/li&gt;
&lt;/ol&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%2Fqvmo3xrnbsi0ddqcde1u.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%2Fqvmo3xrnbsi0ddqcde1u.png" alt="Speed vs ceiling: Granite 73%, Phi 72%, Bonsai 45%" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Thinking" made it worse.&lt;/strong&gt;  I tested every model with thinking mode on and off, changing nothing else. With thinking mode on, Granite's recall fell from .94 to .28 and a run took 454 s instead of 44 s. 7 of 16 thinking runs hit the 3,000-token limit with no answer. On a small machine, "think harder" isn't free. We need special optimizations and fine-tuning at different levels, which is planned for future work.&lt;/li&gt;
&lt;/ol&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%2Faqscv4t5qrynpg8hvf2d.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%2Faqscv4t5qrynpg8hvf2d.png" alt="Quality vs time: thinking mode is about 10× slower with lower recall" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Finding tasks is easy; owners are hard.&lt;/strong&gt; All three models found 91–94% of the tasks. But "we need a venue" went to the speaker, Akhash, in 5 out of 5 baseline setups. A better system prompt cut invented deadlines from 6 to 0 (Phi and Bonsai), but it didn't fix owners. What these models miss is the subtle part that needs the whole picture: who actually took the task. To solve this, we use helper programs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;About ten lines of plain code fixed owners.&lt;/strong&gt; Rule: if someone says "we need…" and never takes the task, the task is unowned. This fixed 11 wrong owners with 0 false alarms. (I wrote the rule after seeing these meetings, so it still needs testing on new ones.) The helper programs act as guardrails that enforce what is hard to get through the prompt alone with small models (SLMs).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real use found what the eval couldn't.&lt;/strong&gt; The first demo take lost the first half-second of every turn ("We need a hotel" → "Tell near"). The fix was one microphone stream per meeting, with a test that fails on the old code. Lesson: test the whole pipeline with audio, not just text. At the end of the day, actual implementation in an application is where new variables are introduced and one has to tackle them properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So in the end, to reach amaze, amaze, amaze, one has to enhance, enhance and enhance.&lt;/p&gt;

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

&lt;p&gt;Open innovation gives one an opportunity to improve not just oneself but also a community. And I am happy to share that I was able to build something because of such open innovation: a meeting assistant that is powered by local models. I did not just use them out of the box, but made an eval harness that compares the available options. This eval harness is my small contribution back to the open innovation without which I would not have been able to build this.&lt;/p&gt;

&lt;p&gt;The use of open models also keeps the data on my laptop, and removes the cost dependency.&lt;/p&gt;

&lt;p&gt;My actual laptop is very basic, and that is why I was able to research how I can make the best out of the resources I have. This sent me on a journey of understanding what the exact parameters and aspects are that affect the models, and how I can use them. The impact of RAM size is the most fundamental, but I was able to see that one specific model (Ternary-Bonsai-2-4B) reached a much lower share of its bandwidth ceiling, probably because of compute. That is something I was only able to know because I did the actual study. This post and the research paper that is in the works will contain even more insights that I was able to observe.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;The app's AI is all open-weight. For building it, I used Claude Code as a mentor and coding helper: we worked in stages, measured first, changed one thing at a time, and ran a review panel before recording the demo. That plan is in &lt;a href="https://github.com/Sethumadhavan004/meeting-assistant/blob/main/demo/plan-and-panel.md" rel="noopener noreferrer"&gt;&lt;code&gt;demo/plan-and-panel.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;This enables one to properly document meetings that happen between people, with no manual effort other than clicking your name before you speak. In the demo, 18 seconds of speech were transcribed in 4.8 seconds, and the notes were ready 21 seconds after the meeting. The review of the generated notes is a necessary step, and as we improve the app and the harness around the model, we improve the performance as well.&lt;/p&gt;




&lt;p&gt;This can be improved and could give better results with bigger models like Gemma 4, but this project was built on a laptop that can't handle them. I expect the performance would be better with them. I would be glad if someone reproduced it with my eval harness and shared how the performance varies.&lt;/p&gt;

&lt;p&gt;I would appreciate any feedback or criticism on how one can do a better job, as that enables me to grow, learn and improve myself. So thank you all for that in advance.&lt;/p&gt;

&lt;p&gt;I made this application for two purposes. One was to learn and understand how SLMs work, and how one can integrate them into an app at the deepest level, by actually doing it myself. The other was to make a tool that helps my productivity, acting as my primary note-taking app. Open innovation and local models have opened a path to a future in which one can create their own personally styled assistant. Voice-based assistants used to be sci-fi film concepts, but in the storage space needed to store that sci-fi movie, we now have a model and a harness that can actually do it.&lt;/p&gt;

&lt;p&gt;And this is just the beginning, and I am super excited to be part of this New Age of Building.&lt;/p&gt;

&lt;p&gt;Plus Ultra&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Double-Edged Sword</title>
      <dc:creator>Sethumadhavan N</dc:creator>
      <pubDate>Thu, 15 Oct 2026 16:04:41 +0000</pubDate>
      <link>https://dev.to/sethumadhavan004/the-double-edged-sword-22di</link>
      <guid>https://dev.to/sethumadhavan004/the-double-edged-sword-22di</guid>
      <description>&lt;p&gt;It increasingly feels as though nobody wants to hire freshers anymore, as the job that they once did can now be automated via an agent call, and the weekly refresh of tokens that Anthropic does to promote the new feature they drop twice a month does not help.&lt;/p&gt;

&lt;p&gt;Feeling stranded is not a new feeling, but the entire landscape being shifted with each new announcement from the "Saviors of Humanity" companies is just too much stimulation for someone who is just starting out in the tech world.&lt;/p&gt;

&lt;p&gt;But as someone who is trying to build his career in AI, I am facing the reality of how success is a culmination of hard work and opportunity. Working towards the goal is possible only in the environment that allows you to grow, making you close the distance between yourself and the goal.&lt;/p&gt;

&lt;p&gt;But the current recruitment phase in the AI domain has become a double-edged sword.&lt;/p&gt;

&lt;p&gt;The so-called big companies are too rigid in their hiring processes, and even though they have resources, they do not take the risk of research and development through actually creating talent in-house. Thus, in this space, the startups are the greatest risk-takers but also those who are most benefitted if their bets pay off. They are the ones who are already taking the risk, believing in an idea, betting against a market that is always clinging to its past, trying to build a product that can do real impact in the world.&lt;/p&gt;

&lt;p&gt;Recruitment in startups can be said to be merit-based, where the talented can open that particular door by impressing the founders and tech leads, but what if there is potential but no concrete skills that are immediately deployable? Will they be willing to basically take potential candidates and then grow them into the engineers that solve real-world complex problems, someone who becomes a pillar of support in their collective journey towards achieving their goal?&lt;/p&gt;

&lt;p&gt;It is true that we can't just bet on concepts and theories; in the end, only the results matter. One cannot hire a person because he writes a really nice blog or has a very cool project that has yet to become big. The type of person and the energy he brings to the table is a crucial factor that cannot be measured from an ATS score.&lt;/p&gt;

&lt;p&gt;The diversity that gives the energy also contains the tension, as ideas collide between strong-minded people. The vibe and rhythm of a team are not just abstract concepts but real implications of how well-coordinated and motivated the team is. And maybe startups are not inclined towards this risk because they already have enough on their plate, and thus make exceptions for the exceptional ones.&lt;/p&gt;

&lt;p&gt;If "Ifs" and "buts" were candy and nuts, we'd all have a Merry Christmas. So in the end, I guess we can agree there has to be a test of merit, a threshold that a candidate has to meet, but whether he is given the opportunity to prove himself is the more important question I would ask.&lt;/p&gt;

&lt;p&gt;I mean, do the most daring group of individuals dare to wield this double-edged sword?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>career</category>
    </item>
  </channel>
</rss>
