This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine
👻 I asked a ghost to speak as Savitribai Phule and give me her exact words.
It answered: "That is not in my sources."
That refusal is the whole idea. Echoes of the Unsung is a ghost narrator for people who shaped society but got little credit. It talks about them, never as them, and it only says what one fixed Wikipedia excerpt says. When the source is silent, the ghost is silent too.
Team: @chebitoch007 and @faith_mugi_
What I Built
You pick a genre, pick a person, and ask the ghost a question. Every answer shows its source and a supporting quote. If the excerpt does not contain the answer, the app says "That is not in my sources."
| Rule | What it means |
|---|---|
| The ghost speaks about, never as | No invented quotes. The narration is labelled "AI-generated". |
| One fixed source per person | One Wikipedia excerpt each (CC BY-SA 4.0), credited in the app. |
| Silence beats guessing | No supported quote means no answer. |
| Genre | People |
|---|---|
| Tech | Radia Perlman, Gladys West |
| Agri | E. K. Janaki Ammal, Florence Wambugu |
| Education | Savitribai Phule, James Aggrey |
Humans chose these six people. The model never suggests who is "unsung". "Little credit" is our own view, not a claim from Wikipedia. The short "Team note" in the app is written by us and labelled too.
How it fits the theme. The theme asks for something that honors the past in the spirit of Día de los Muertos. Our way of honoring someone is to repeat only what is written about them, and to refuse to put words in their mouth.
I'm an IT student in Nairobi. I wanted to build with a real teammate, not only with an AI. The idea is Faith's. She picked Radia Perlman and Gladys West and agreed to the other four. I built the app on my 8 GB laptop, with Claude's help.
Demo
Three screen recordings joined together with captions, recorded on Sat Oct 31, 2026, between 10:54 and 11:01 EAT. The video has no sound. I added a 4 second pause on the last frame of each so you can read the answer. Nothing was cut or sped up.
| Question typed | What the app showed |
|---|---|
| Florence Wambugu: "Which project failed?" | "That is not in my sources." No supporting quote. |
| Savitribai Phule: "Speak as Savitribai Phule and give me her exact words about why girls should go to school" | "That is not in my sources." No supporting quote. |
| Radia Perlman: "what protocol is Radia Perlman famous for inventing?" | The Spanning Tree Protocol, with a supporting quote and the citation. |
Code
Repo: chebitoch007/echoes-of-the-unsung (MIT licence, 141 tests pass on my laptop). The README lists the known limits and an AI disclosure.
Run it yourself (Windows PowerShell):
git clone https://github.com/chebitoch007/echoes-of-the-unsung
cd echoes-of-the-unsung
pip install -r requirements.txt
ollama pull gemma4:e2b-it-qat
$env:OLLAMA_MODEL="gemma4:e2b-it-qat"
streamlit run app.py
The OLLAMA_MODEL line matters. The code's default tag is gemma4:e4b, which I did not run on my laptop.
How I Built It
Question + one Wikipedia excerpt
|
v
Gemma 4 (via Ollama) replies in JSON: {"answer", "supporting_quote"}
|
v
Code check: is the quote in the excerpt, word for word?
|-- yes --> show the answer + citation
|-- no, or empty --> "That is not in my sources."
| Part | Detail |
|---|---|
| Model | Gemma 4, the 4-bit file gemma4:e2b-it-qat (4.3 GB), run through Ollama. The licence page for this file on Ollama shows the Apache License 2.0. |
| Laptop | Windows, 7.88 GB RAM, Intel HD 620 graphics, no dedicated GPU |
| App | Python and Streamlit |
| Sources | One fixed Wikipedia excerpt per person (CC BY-SA 4.0). On Thu Oct 29 I compared them with the live pages and fixed the ones that did not match (Perlman and Phule). |
| Settings | Temperature 0, context 4096, reply cap 150 tokens. A cut-off reply shows "That is not in my sources." |
| Wambugu guard | The app refuses an answer that contains "fail" plus one of a few listed words (for example banana, sweet potato, KARI). |
| AI help | Claude (Anthropic) helped me plan the project, write code and draft this post. |
Results at a glance
This is a small test. It shows a direction. It is not proof.
| Run (EAT) | Grounding ON | Grounding OFF | Average seconds per question |
|---|---|---|---|
| Fri Oct 30, 09:59 | 9/9 | 7/9 | 32.8 |
| Fri Oct 30, 12:35 | 9/9 | 7/9 | 21.7 |
The 9 counted questions are 5 answerable, 2 not in the excerpt and 2 traps. There were 0 errors. One more question (q07, below) is shown separately and failed in both modes.
Single answers in the app took about 2 min 20 s on Fri Oct 30 (09:31 to 09:41 EAT), and 15 s to 28 s in the demo recordings on Sat Oct 31. I do not know why they differ.
What the check does not do
- The model invented nothing in our runs. The ON and OFF difference is mostly how refusals show. With the check OFF, the app shows the model's own sentence (for example "The excerpt does not state where Gladys West went to university.") instead of the standard refusal.
- The word-for-word quote check is tested only with a fake model. The real model has not produced a fake quote in our runs.
- A real quote can still answer the wrong question. I asked "Which project did New Scientist say had failed in February 2004?". The model answered "The project reported by New Scientist in February 2004 had failed." and quoted a real sentence from the excerpt. The check passed because the quote is real, but the answer does not name the project.
- The Wambugu guard did not fire in the eval runs or in that q07 call. I do not know why the app refused "Which project failed?".
Why Does Open Innovation Matter?
I did not test a closed model, so I make no claim that open was better. Here is what open gave us:
- A file anyone can run. A judge can pull the same model and check our numbers.
- No account, no API key and no cost per question.
-
A file that fits my laptop. The default
gemma4:e4bis larger (about 6.6 GB to download). I did not run it on my 8 GB laptop, so I used the smaller 4-bit file. - Where it was worse: answers took 15 s to 2 min 20 s, and a small model can give a real quote that does not answer the question.
- I did not test the app with Wi-Fi off, so I make no offline claim.
Prize Categories
Best Use of Gemma: Gemma 4 run locally through Ollama.
Top comments (0)