<?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: Yuuzu</title>
    <description>The latest articles on DEV Community by Yuuzu (@yuuzulight).</description>
    <link>https://dev.to/yuuzulight</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%2F4063009%2F9906f6cf-4280-4ee2-9ebe-a9230afc01e7.png</url>
      <title>DEV Community: Yuuzu</title>
      <link>https://dev.to/yuuzulight</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yuuzulight"/>
    <language>en</language>
    <item>
      <title>Mana: 2-3 Seconds to Feeling Human</title>
      <dc:creator>Yuuzu</dc:creator>
      <pubDate>Tue, 04 Aug 2026 23:42:09 +0000</pubDate>
      <link>https://dev.to/yuuzulight/mana-2-3-seconds-to-feeling-human-3e0b</link>
      <guid>https://dev.to/yuuzulight/mana-2-3-seconds-to-feeling-human-3e0b</guid>
      <description>&lt;p&gt;so I shipped a voice AI assistant that runs entirely on my machine. no cloud, no APIs, no latency nightmares. &lt;/p&gt;

&lt;p&gt;the original idea came from Alice in Sword Art Online — an AI that feels like an actual person, not a chatbot. mixed with JARVIS's anticipation and Neuro-sama's quirky personality. here's what actually went into getting from "wouldn't it be cool" to "this runs 24/7 without issues."&lt;/p&gt;

&lt;h2&gt;
  
  
  the problem with voice AI
&lt;/h2&gt;

&lt;p&gt;most voice assistants are cloud-first: you speak → sent to server → processed → response → back to you. each hop adds latency. you're looking at 3-6 seconds before you hear anything. for a voice interaction, that's dead. it kills the feeling of talking to something intelligent.&lt;/p&gt;

&lt;p&gt;I wanted something faster. something that &lt;em&gt;responds&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;the constraint: do it locally. use an 8GB VRAM GPU, run everything on-device, no external APIs except for the live2d avatar bits (because that's hard to render locally and still look good).&lt;/p&gt;

&lt;h2&gt;
  
  
  the latency wall
&lt;/h2&gt;

&lt;p&gt;here's the reality: I have a GPU with 8GB VRAM. no budget to experiment with better cards or more models. so every architecture decision was forced by what actually fits.&lt;/p&gt;

&lt;p&gt;naive approach: chain multiple specialized models.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User speaks
  → Transcription model (Whisper)
  → Planning model (3B: what should I do?)
  → Coding model (7B: generate implementation)
  → Verification model (4B: is this correct?)
  → TTS (speak the answer)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;math: 1s + 2s + 3s + 1.5s = 7.5s of latency before the user hears anything. nope.&lt;/p&gt;

&lt;p&gt;the problem isn't just that each model is slow. it's &lt;em&gt;model loading overhead&lt;/em&gt;. every time you swap from one model to another, you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unload model A from VRAM&lt;/li&gt;
&lt;li&gt;load model B into VRAM&lt;/li&gt;
&lt;li&gt;stall while the GPU rearranges memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with only 8GB, this gets gnarly fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  the decision: one unified model
&lt;/h2&gt;

&lt;p&gt;the constraint was hardware. 8GB VRAM. no more, no less. that forced clarity: pick one model that does everything, or pick nothing.&lt;/p&gt;

&lt;p&gt;so I went with a single model (4B by default, with 7B/8B quality modes available) that does reasoning + code generation + explanation in &lt;em&gt;one pass&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;latency: ~2-3 seconds total. actually conversational.&lt;/p&gt;

&lt;p&gt;this is the difference between a chatbot and a companion. JARVIS doesn't pause for 6 seconds before responding. neither does Mana. turns out, when you're forced to optimize for latency (because you only have 8GB to work with), you accidentally build something that feels human.&lt;/p&gt;

&lt;p&gt;the tradeoff: a 4B model is weaker than larger models, but fits in 8GB VRAM and keeps latency down. for voice queries, that accuracy loss is negligible. I can bump to 7B or 8B for quality mode when latency isn't critical.&lt;/p&gt;

&lt;h3&gt;
  
  
  why this works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;context preservation&lt;/strong&gt; — the LLM reasons internally ("user wants me to find X in their data"), then codes, then explains. no information loss at model boundaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VRAM efficiency&lt;/strong&gt; — load the 4B model once (~2-3GB in INT8). keep it there. reuse it for every query. upgrade to 7B/8B only when you want quality over speed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;simple output format&lt;/strong&gt; — use XML tags to split the LLM response:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;reasoning&amp;gt;&lt;/span&gt;what I understood&lt;span class="nt"&gt;&amp;lt;/reasoning&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;code&amp;gt;&lt;/span&gt;implementation&lt;span class="nt"&gt;&amp;lt;/code&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;explanation&amp;gt;&lt;/span&gt;what to say via TTS&lt;span class="nt"&gt;&amp;lt;/explanation&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then execute code silently, speak only the explanation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;no code narration&lt;/strong&gt; — this was key. don't read the SQL query aloud. just say "I found the data and sorted it by date." TTS is for explanation, not narration.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  architecture in practice
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Voice input]
  ↓ Whisper (local transcription)
[Text]
  ↓ Qwen 4B (reasoning + code + explanation)
[Structured output]
  ├─ Code (execute silently, log results)
  └─ Explanation (TTS via Kokoro/Chatterbox/Fish Speech)
  ↓
[Audio output to user]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;total latency from "hey Mana" to hearing the response: ~2-3 seconds. feels like talking to something intelligent.&lt;/p&gt;

&lt;h2&gt;
  
  
  the VRAM budget (8GB GPU)
&lt;/h2&gt;

&lt;p&gt;with an 8GB GPU, the budget is tight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qwen 4B (INT8): ~2-3GB&lt;/li&gt;
&lt;li&gt;Whisper (base): ~1.5GB&lt;/li&gt;
&lt;li&gt;TTS service (Kokoro/Chatterbox): ~2-3GB&lt;/li&gt;
&lt;li&gt;OS + system overhead: ~1-2GB&lt;/li&gt;
&lt;li&gt;Live2D avatar rendering: ~0.5-1GB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;total: actually fits (barely). I quantize aggressively, drop smaller models, and flush unused ones. the tradeoff is worth it — every millisecond of startup or response latency costs the feeling of talking to something alive.&lt;/p&gt;

&lt;h2&gt;
  
  
  what shipped
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;desktop launcher&lt;/strong&gt; (Electron) — microphone, screen capture, avatar overlay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;node backend&lt;/strong&gt; — transcription, LLM inference, TTS, editor integration (Zed support)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;local models&lt;/strong&gt; — Qwen 4B (chat), Whisper (transcription), Kokoro/Chatterbox/Fish Speech (TTS options)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;screen awareness&lt;/strong&gt; — "summarize what's on screen" works by OCR-ing the active window locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;live2d avatar&lt;/strong&gt; — emotes react to responses, lip-syncs the TTS audio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;obsidian vault integration&lt;/strong&gt; — Mana stores memory, conversation history, user preferences, and skill definitions in an Obsidian vault. acts as the persistent brain. survives restarts and grows over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gaming mode&lt;/strong&gt; — Mana reduces idle work and background processing while games are running. designed to be available during gameplay without performance impact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;local web search&lt;/strong&gt; — web search runs through a local SearXNG instance (no API keys, no third-party tracking). can look up Wikipedia, read pages, summarize results — all locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;it's been running 24/7 for about 3 months now. no crashes. no "processing never finished" hangs. it just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  what I'd do differently
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;earlier profiling&lt;/strong&gt; — I spent weeks optimizing things that didn't matter (TTS buffer sizes), then found the real bottleneck (model loading) in one afternoon with a profiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;accept quantization earlier&lt;/strong&gt; — INT8 quantization costs ~5-10% accuracy on reasoning. for voice queries, that's negligible. I fought it for weeks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;screen context is expensive&lt;/strong&gt; — OCR-ing the screen every query tanks latency. I ended up making it opt-in ("hey Mana, look at my screen").&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  next
&lt;/h2&gt;

&lt;p&gt;currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;vision integration&lt;/strong&gt; — using a multimodal GGUF to understand screenshots, not just text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;code execution sandboxing&lt;/strong&gt; — right now Mana can run arbitrary code. that's fun but risky.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;observability&lt;/strong&gt; — adding structured logging so I can see where latency is actually happening in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the long-term goal (as hardware allows):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;sub-1 second response time&lt;/strong&gt; — responses fast enough they feel instantaneous. this requires better hardware or deeper optimization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;skill generation on demand&lt;/strong&gt; — when Mana can't do something, it generates code for a new skill, you review and approve it, and it's added to the toolbox permanently. like teaching it new tricks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;personality that evolves&lt;/strong&gt; — Mana stores its personality in Obsidian (soul.md) and learns from feedback. "be more casual" → it updates. over time, it becomes increasingly tuned to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;voice that sounds natural&lt;/strong&gt; — move beyond basic TTS toward something with emotion, timing, natural pauses. current TTS services (Kokoro, Chatterbox, Fish Speech) are the baseline; true human-like speech is the target.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;context memory&lt;/strong&gt; — remembering past conversations, understanding user patterns, anticipating needs. JARVIS-style presence.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;that's it. local-first voice AI that ships on consumer hardware. the constraint (8GB VRAM) forced good decisions: use one model, quantize aggressively, separate concerns (code vs. explanation), measure everything.&lt;/p&gt;

&lt;p&gt;the rest is just execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;at the core, the goal was Alice. an AI that feels like talking to a real person. turns out, the technical constraints &lt;em&gt;create&lt;/em&gt; that feeling. instant response. screen awareness. a quirky personality through code decisions. JARVIS's anticipation through context preservation. Neuro-sama's realness through being unfiltered and responsive.&lt;/p&gt;

&lt;p&gt;you can't fake that with prompts. you have to build it into the architecture.&lt;/p&gt;

&lt;p&gt;want to try it? it's open source: &lt;a href="https://github.com/Yuuzulight/Mana" rel="noopener noreferrer"&gt;github.com/Yuuzulight/Mana&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>software</category>
    </item>
  </channel>
</rss>
