<?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: Komal Sahu</title>
    <description>The latest articles on DEV Community by Komal Sahu (@komal_sahu_443794ed690be5).</description>
    <link>https://dev.to/komal_sahu_443794ed690be5</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%2F4016484%2F33dcc6d7-0d81-41dd-893a-c2b763a6a4b5.png</url>
      <title>DEV Community: Komal Sahu</title>
      <link>https://dev.to/komal_sahu_443794ed690be5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/komal_sahu_443794ed690be5"/>
    <language>en</language>
    <item>
      <title>Building Advaita AI: My First Hackathon, First Time Coding Seriously</title>
      <dc:creator>Komal Sahu</dc:creator>
      <pubDate>Sun, 05 Jul 2026 17:01:47 +0000</pubDate>
      <link>https://dev.to/komal_sahu_443794ed690be5/building-advaita-ai-my-first-hackathon-first-time-coding-seriously-473f</link>
      <guid>https://dev.to/komal_sahu_443794ed690be5/building-advaita-ai-my-first-hackathon-first-time-coding-seriously-473f</guid>
      <description>&lt;p&gt;I'm a CS student. Before this hackathon, I knew a little Python — enough to follow a tutorial, not enough to build something on my own.&lt;/p&gt;

&lt;p&gt;I didn't own a laptop; I was working on a borrowed one, which meant every install, every command, came with a small voice in my head saying &lt;em&gt;don't break anything&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;When I saw the "Hangover Part AI: Where's My Context?" hackathon by WeMakeDevs, the idea hooked me immediately — AI forgets everything the moment a conversation ends, and Cognee exists to fix that.&lt;/p&gt;

&lt;p&gt;I decided to build something for myself: a personal assistant that actually remembers&lt;br&gt;
what I tell it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Attempt: Voilora AI
&lt;/h2&gt;

&lt;p&gt;My first version was called Voilora AI. I got a basic chatbot working with Cognee and Groq, and for a few hours it worked beautifully — it remembered my name, recalled it later, even picked up on my mood. &lt;br&gt;
I thought I was done.&lt;/p&gt;

&lt;p&gt;Then it broke. Badly.&lt;/p&gt;

&lt;p&gt;A storage mismatch error started appearing every time I restarted the app —&lt;br&gt;
&lt;code&gt;File not found&lt;/code&gt;, over and over, no matter how many times I cleared the cache or deleted folders.&lt;/p&gt;

&lt;p&gt;I spent hours chasing it, and eventually understood the real cause: Cognee's metadata database and its file storage had gone out of sync after too many restarts during testing.&lt;/p&gt;

&lt;p&gt;By the time I found the fix, I had also hit an "event loop" error from mixing async code with Streamlit's rerun behavior, and separately, Groq's daily free-tier token limit ran out mid-testing.&lt;/p&gt;

&lt;p&gt;At some point, frustrated, I made a decision: start over, cleanly, with everything I'd just learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting Over: Advaita AI
&lt;/h2&gt;

&lt;p&gt;The name changed for a reason. Advaita means "non-duality" — the idea that nothing is truly separate, everything is one continuous thread.&lt;/p&gt;

&lt;p&gt;It felt like the right name for an AI that doesn't treat every conversation as a blank slate.&lt;/p&gt;

&lt;p&gt;This time I built it in layers, testing each piece before adding the next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Cognee for memory (&lt;code&gt;add&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;cognify&lt;/code&gt;, &lt;code&gt;prune&lt;/code&gt;),
Groq for fast responses, FastEmbed for local embeddings so I didn't need another paid API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Streamlit, styled to feel less like a demo and more like a
real product — a dark theme, custom chat bubbles, a sidebar showing
Cognee's memory lifecycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extras&lt;/strong&gt;: voice input (transcribed with Whisper via Groq), document upload, mood detection, and a memory summary feature — small additions that made the project feel like &lt;em&gt;mine&lt;/em&gt;, not just a copy of the example.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Actually Broke (and What I Learned)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Event loops&lt;/strong&gt;: Streamlit reruns your whole script on every interaction.&lt;br&gt;
If you create a new asyncio event loop each time, anything Cognee is holding onto from a previous loop breaks. The fix was running each async call in its own thread with a fresh loop — not elegant, but it worked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Metadata drift&lt;/strong&gt;: &lt;code&gt;cognee.prune.prune_data()&lt;/code&gt; alone isn't enough to reset memory cleanly. You need &lt;code&gt;prune_system(metadata=True)&lt;/code&gt; too, or ghost references to old files stick around and throw errors later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rate limits are real&lt;/strong&gt;: Groq's free tier has a daily token cap. I hit it in the middle of testing, right when I needed the app most. The fix was as simple as a second API key, but it taught me to always have a backup plan for external services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speed vs. reliability&lt;/strong&gt;: Calling &lt;code&gt;cognee.search()&lt;/code&gt; before every reply&lt;br&gt;
made responses accurate but slow. Skipping it made replies instant but sometimes wrong. I ended up finding a middle ground — reply fast, but index immediately after, so the next question is answered correctly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these were things I could have anticipated. I learned them by breaking the app, reading error messages I didn't understand at first, and slowly making sense of them one at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Mattered to Me
&lt;/h2&gt;

&lt;p&gt;I'll be honest about my motivation: I don't own a laptop, and winning this hackathon would mean I finally could.&lt;/p&gt;

&lt;p&gt;But somewhere in the process of fixing the fortieth error, the goal changed a little.&lt;/p&gt;

&lt;p&gt;I stopped just wanting to win, and started wanting to &lt;em&gt;understand&lt;/em&gt; what I was building — why an async loop breaks, why a database needs its metadata cleared, why a production app needs error handling instead of a silent &lt;code&gt;except: pass&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That shift is the actual result of this hackathon, prize or no prize.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Advaita AI Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;remember()&lt;/strong&gt; — stores text, voice notes, and documents into Cognee's knowledge graph&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;recall()&lt;/strong&gt; — answers questions using Cognee's hybrid graph-vector
search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;improve()&lt;/strong&gt; — runs Cognee's &lt;code&gt;cognify()&lt;/code&gt; to enrich memory connections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;forget()&lt;/strong&gt; — fully clears memory, including metadata&lt;/li&gt;
&lt;li&gt;A memory summary feature, mood detection, and voice/document input on top of the core lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not polished like a commercial product. But it's mine — built,broken, and rebuilt over two days, mostly from a borrowed laptop and a lot of stubbornness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/komalsahu-codes/Advaita-AI" rel="noopener noreferrer"&gt;https://github.com/komalsahu-codes/Advaita-AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading — and thanks to WeMakeDevs and Cognee for the reason to finally sit down and actually learn to build something.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>python</category>
    </item>
  </channel>
</rss>
