What I Built
In Panama, the Day of the Dead on November 2 can mean visiting a grave, cleaning it, and remembering someone through ordinary details: a Sunday meal, a phrase they repeated, the sound of a familiar place. I wanted a tool for collecting those details while the people who know them can still tell the story.
Cuéntame is a small command-line interview. Gemma runs locally through Ollama and asks one question at a time about a person you want to remember. The program saves the answers as a Markdown page. The model is allowed to ask; it is not allowed to write the person's life story. The saved page is assembled by Python from the exact answers entered by the storyteller.
My interpretation of Ghost in the Machine is a question that helps a living person remember, without pretending to be the person who is gone.
Demo
The repository has a clearly fictional formatting example:
python3 cuentame.py --ejemplo
That command does not call a model. For the actual interview, run Ollama with gemma4:e2b, then:
python3 cuentame.py --nombre "Elena" --modelo gemma4:e2b
Gemma proposes each next question using the earlier questions and answers. A fictional answer such as “Hacía arroz con coco los domingos” goes into the file verbatim. If you never answer who taught Elena to cook, the file does not claim to know.
I ran this short end-to-end check with the locally installed gemma4:e2b model and a fictional answer:
$ python3 cuentame.py --nombre 'Elena (ficticia)' --preguntas 1
¿Cuál es un recuerdo de comida que te gustaría compartir sobre Elena?
> Hacía arroz con coco los domingos.
Guardado en recuerdos/recuerdo-elena-ficticia.md
The resulting page contains the prompt and the original answer:
## 1. ¿Cuál es un recuerdo de comida que te gustaría compartir sobre Elena?
> Hacía arroz con coco los domingos.
The output lives under recuerdos/, which is excluded from Git. The CLI refuses to overwrite an existing memory. The public examples contain fictional answers only.
Code
Cuéntame
Una pequeña entrevistadora local para conservar recuerdos familiares sin pedirle a la IA que invente una biografía. Gemma, mediante Ollama en 127.0.0.1, propone una pregunta a la vez. El archivo final copia literalmente las respuestas de la persona entrevistada. Los vacíos quedan abiertos.
Proyecto creado para Hacktoberfest Open-Source AI Challenge: Week 4, tema Ghost in the Machine. La demo ficticia y las pruebas de código no equivalen a una ejecución real del modelo.
Uso
Requiere Python 3.10+ y Ollama. Descarga un modelo Gemma compatible con tu equipo y usa su nombre exacto con --modelo. El valor predeterminado es gemma4:e2b.
ollama pull gemma4:e2b
python3 cuentame.py --nombre "Elena" --modelo gemma4:e2b
Para ver solo el formato de salida, sin modelo:
python3 cuentame.py --ejemplo
Los resultados van a recuerdos/, excluido de Git. El programa no sobrescribe archivos existentes. El ejemplo usa una persona y…
The project uses Python's standard library, the local Ollama /api/generate endpoint, and an open-weight Gemma model. It is MIT licensed. The README explains installation and testing; no cloud account or API key is needed.
How I Built It
The boundary is intentionally narrow:
Storyteller's answers
| previous Q&A
| |
| v
| local Gemma -> next question
v
Python copies exact answers -> private Markdown file
ask_question() sends the interview history only to 127.0.0.1:11434. The prompt asks for one short, open question and forbids fabricated facts or impersonation. The program rejects empty, multiline, overlong, or non-question replies. The model response is displayed as a question; it is never used as a memory answer.
render_memory() writes the storyteller's responses as block quotes. It does not ask Gemma for a summary. That is a deliberate technical choice: a fluent summary can introduce a detail nobody said. A source-grounded keepsake is more useful than a beautiful invented biography.
The first live run revealed a practical Gemma 4 issue: with a short output limit, the model spent its tokens in its internal thinking field and returned no visible question. Setting think: false in the Ollama request produced a short question. There are three focused tests for the local request, history passed to the model, invalid model output, and literal preservation of an answer. I also completed the one-question live check above. A full family interview remains untested and should be reviewed by the storyteller.
Why Open Innovation Matters
Family recollections are private. An open-weight model running on the same laptop lets the interview continue without sending those answers to a hosted model. Markdown is a portable output: a family can read it years later without the original app or a subscription. Python and Ollama are replaceable pieces rather than a service that must remain online.
This does not prove a memory is historically accurate. The storyteller may misremember, and Gemma may ask a poor or leading question. The person using the tool should skip a question that feels wrong and review the file before sharing it. What the program can guarantee is narrower and testable: it does not turn generated prose into an attributed family fact.
Prize Category
I used Gemma as the local question generator, so this project also fits Best Use of Gemma. The same core is needed for the general Week 4 theme; no other partner service is claimed.
Prepared with AI assistance. The author approved publication.
Top comments (0)