In case you missed the announcement, I released an open-source Discord bot written in Rust called Buzzkeeper (a play on Buzzkiller).
Buzzkeeper started with a very simple form of memory: persist a list of notes, then shove the latest few into the prompt.
That worked for early testing, but it breaks down fast in practice:
So the memory system was upgraded to use a hybrid SQLite-backed RAG layer.
Buzzkeeper now keeps two durable stores:
That SQLite memory index uses:
FTS5 for lexical recallsqlite-vec for embedded vector searchThe goal was better retrieval, not more infrastructure.
SQLite gives us:
For this project, that tradeoff is much better than introducing a remote vector store.
When a user adds memory with /remember, or when the bot stores its own state-linked memories, the memory is enriched at write time.
If model-assisted memory analysis is enabled, the bot asks the model for:
If the model is unavailable, Buzzkeeper falls back to heuristics. But the idea is the bot classifies its own memories into specific sinks (categories).
The canonical guild state still lives in JSON, but every guild's memory set is mirrored into SQLite.
That mirror stores:
sqlite-vecThe embedding path is now configurable:
MEMORY_EMBEDDING_MODEL is configured, Buzzkeeper will try provider-backed embeddings and fit them to the SQLite index dimensionsBefore recall, the incoming message is analysed into:
Recall then combines:
FTS5sqlite-vecThat means the final prompt gets a smaller, more relevant recalled memory slice instead of just "the latest notes."
This upgrade also improves self-memory.
Buzzkeeper can now store and recall things like:
That makes questions like "what did you say when you were super drunk?" much more realistic.
There are now two persistence paths to keep mounted:
STORAGE_PATH=/data/tavern-state.json
MEMORY_DB_PATH=/data/tavern-state.memories.sqlite3
Optional controls:
MEMORY_MODEL_ASSISTED=true
MEMORY_ANALYSIS_MAX_TOKENS=220
MEMORY_EMBEDDING_MODEL=nomic-embed-text
MEMORY_EMBEDDING_DIMENSIONS=128
This architecture leaves room for future improvements without changing the deployment model:
The main point is that Buzzkeeper now has a memory system that is still easy to deploy (no additional infra needed), but much more capable than naive prompt stuffing.
I also shipped a heap of performance improvements, bug fixes and other things that make it better too, all up on GitHub.
Source code is here: https://github.com/Vheissu/buzzkeeper — all contributions from everyone from all levels of development skill are welcome (including AI assisted/generated contributions).