DEV Community

Cover image for Lumbre: a Día de los Muertos altar that only remembers what you tell it
Ashraf Ahmed
Ashraf Ahmed

Posted on

Lumbre: a Día de los Muertos altar that only remembers what you tell it

Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine

What I Built

Lumbre is a small altar for Día de los Muertos. You write the name of someone you want to remember, how you knew them, the years if you know them, one memory, and any food, song, or object that belongs with them.

An open-weight model writes the line that sits on the altar and a short remembrance. The memory you typed is kept word for word, under "As told." The food, the song, and the object come from the form. A field you leave blank stays blank. The model is told not to invent a date, a relative, or a favorite thing you did not give it.

I read the week as remembrance rather than a jump scare. Día de los Muertos is the thin place between someone who is gone and the people who still set a place for them. The altar is that place: paper, a candle, marigolds, and only the facts you actually brought.

You can save the card as a JSON file.

Demo

https://ashraf01k-lumbre.static.hf.space

A card comes back in a few seconds. Use "Try a fictional altar" if you want to see the page before you write a real name. The host allows about two cards a minute.

Code

https://github.com/AshrafGalaxy/lumbre

Lumbre

Lumbre letters a Día de los Muertos altar card. You write a name, a memory, and only the foods, songs, and objects you actually know. Llama 3.3 70B, an open-weight model, writes the lines on the card. Anything you leave blank stays blank.

The memory you typed is kept word for word. The offering list is built in code from those fields, so the model cannot add a favorite food you never named.

Why open weights

Llama 3.3's weights are public. The altar calls that model on a host, so a card comes back in a few seconds and the page does not download hundreds of megabytes. The model id is one constant, so it can be swapped for another open instruct model. A closed API would lock the wording to one vendor.

Architecture

flowchart TD
    visitor[Visitor] --> page[Altar page]
    page --> facts[Altar facts]
    facts --> scribe[Scribe]
    scribe -->
…

How I Built It

The public page is static HTML. Pressing "Light the altar" sends the note once to Llama 3.3 70B Instruct, an open-weight model from Meta, through OVHcloud's OpenAI-compatible endpoint. The browser does not download the weights, and the page does not contain an API key.

The scribe is small on purpose. lumbre/prompts.py asks for two labeled parts, an inscription and a remembrance. lumbre/altar.py builds the offering list and the list of gaps from the fields you filled in. The model is not trusted to decide what was brought to the altar.

Gemma is open-weight too, and the weights are on Hugging Face. I did not use it for the live card. The Hugging Face router can serve Gemma, but this account has no Inference Providers credits, and a free account cannot run a Docker Space to load the weights. The host that answers with no key does not offer a Gemma chat model. Llama 3.3 70B is the open chat model that host does serve, so that is what letters the card. The model id is one constant.

Why Does Open Innovation Matter?

A remembrance should not depend on a closed chat product that can change its model or shut the endpoint down. Llama's weights are public. Lumbre calls that model by name, and the same scribe can point at another open instruct model. The offering list is ordinary code, so a model update cannot quietly add a favorite food. The note is sent for one reply. Lumbre does not keep a database of it.

The Spirit of It

The part that matters is the empty space. A remembrance gets worse if the model invents a song, a Sunday, or a cause of death. Lumbre writes down what you actually said, and leaves the rest quiet.

Top comments (0)