<?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: Thushara Jayanga</title>
    <description>The latest articles on DEV Community by Thushara Jayanga (@thusharajiat).</description>
    <link>https://dev.to/thusharajiat</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%2F4175593%2F365e95a1-9b97-4d22-9415-464b4ce1155b.jpg</url>
      <title>DEV Community: Thushara Jayanga</title>
      <link>https://dev.to/thusharajiat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thusharajiat"/>
    <language>en</language>
    <item>
      <title>Pahana: An Open-Source AI Ofrenda for Family Stories 🕯️</title>
      <dc:creator>Thushara Jayanga</dc:creator>
      <pubDate>Sun, 01 Nov 2026 05:59:58 +0000</pubDate>
      <link>https://dev.to/thusharajiat/pahana-an-open-source-ai-ofrenda-for-family-stories-ddc</link>
      <guid>https://dev.to/thusharajiat/pahana-an-open-source-ai-ofrenda-for-family-stories-ddc</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;Pahana turns a family elder's spoken stories into a digital ofrenda. You upload or record a short story, an open-weight speech model transcribes it, and an open LLM pulls out the foods, songs, places and sayings the elder mentioned. These appear as offerings on an animated altar with candles and flowers. You can also ask questions, and the "memory keeper" answers only from what was actually recorded, with citations to the exact sentence.&lt;/p&gt;

&lt;p&gt;I took the theme in two directions: a warm Remembrance mode for Día de&lt;br&gt;
los Muertos, and a Spooky mode for Halloween.&lt;/p&gt;

&lt;p&gt;It was inspired by my own grandmother's stories, which exist only in&lt;br&gt;
people's heads and will disappear unless someone writes them 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/thusharaJIAT" rel="noopener noreferrer"&gt;
        thusharaJIAT
      &lt;/a&gt; / &lt;a href="https://github.com/thusharaJIAT/Pahana---An-Open-Source-AI-Ofrenda-for-Family-Stories" rel="noopener noreferrer"&gt;
        Pahana---An-Open-Source-AI-Ofrenda-for-Family-Stories
      &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;Pahana---An-Open-Source-AI-Ofrenda-for-Family-Stories&lt;/h1&gt;

&lt;/div&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/thusharaJIAT/Pahana---An-Open-Source-AI-Ofrenda-for-Family-Stories" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;Everything at the core is open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-text:&lt;/strong&gt; &lt;a href="https://huggingface.co/openai/whisper-large-v3" rel="noopener noreferrer"&gt;Whisper large-v3&lt;/a&gt; (open-weight)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; &lt;a href="https://huggingface.co/Qwen/Qwen2.5-72B-Instruct" rel="noopener noreferrer"&gt;Qwen2.5-72B-Instruct&lt;/a&gt; (open-weight) for fact extraction and Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; &lt;a href="https://www.gradio.app/" rel="noopener noreferrer"&gt;Gradio&lt;/a&gt; (open-source), hosted on Hugging Face Spaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow:&lt;/strong&gt; audio → editable transcript with segment IDs (&lt;code&gt;[s1]&lt;/code&gt;, &lt;code&gt;[s2]&lt;/code&gt;...) → JSON fact extraction → ofrenda. For questions, the full transcript is passed to the model as context. The stories are short, so I skipped a vector database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because I was building something that speaks about people who have passed away, I added guardrails on purpose:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The AI is a memory keeper, never the person.&lt;/strong&gt; It says "here is what she said", never "I am your grandmother".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grounded answers only.&lt;/strong&gt; If the transcript doesn't say it, the answer is: &lt;em&gt;"There is no recording about this."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Citation check.&lt;/strong&gt; Every answer must cite segment IDs. If it cites an ID that doesn't exist, the answer is rejected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human in the loop.&lt;/strong&gt; The transcript is editable, because the AI drafts and the family confirms.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Family stories are some of the most personal data there is, so where&lt;br&gt;
they live matters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in:&lt;/strong&gt; Models are open-weight. If a hosted service shuts down,
Pahana can run elsewhere. Swapping Qwen for Llama or Gemma is a
one-line change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path to full privacy:&lt;/strong&gt; The inference calls go through a standard
client, so the same app can point at a local model (e.g. Ollama) and
run with the internet off. A closed API can't offer that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; Open models mean free tiers and self-hosting, so families
aren't paying per token to preserve their own history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptable:&lt;/strong&gt; Whisper's weaker Sinhala accuracy could be improved by
fine-tuning on open speech data. With a closed API, that's not possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Honest note:&lt;/strong&gt; my public demo uses hosted inference, so audio goes to&lt;br&gt;
the provider's servers. The privacy benefit is realized when you run it&lt;br&gt;
locally, which I haven't fully tested yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;When I tested it with the story I wrote, I asked about something the&lt;br&gt;
grandmother never mentioned. Instead of inventing an answer, it said "there's no recording about this." That small refusal felt right. A&lt;br&gt;
memory keeper should protect what was said, not make up what wasn't.&lt;/p&gt;

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