This project replicates the Memolet system introduced by:
Ryan Yen and Jian Zhao. > Memolet: Reifying the Reuse of User-AI Conversational Memories. In Proceedings of the 37th Annual ACM Symposium on User Interface Software and Technology (UIST '24), 2024. doi: 10.1145/3654777.3676388
Memolet transforms user–AI interactions into reusable “memolets” — atomic memory units that can be searched, clustered, and referenced in future prompts. This replication rebuilds the core system — long-term memory repository, semantic clustering, and prompt composition flow — using a React 19 frontend and a FastAPI backend. It serves as a reproducible testbed for conversational memory research and experimentation.
- Memolets: Semantic bundles of related prompt–response pairs.
- Three-Layer Architecture: Long-term repository → curated sandbox → prompt buffer.
- Core Capabilities: Semantic search, clustering (K-Means/DBSCAN/Hierarchical), drag-and-drop organization, and memolet citation during streaming chat.
- User study design and evaluation metrics are excluded.
- UI layout and animations are approximated for reproduction.
- Adds experimental “Memoract” prototype and sandbox DnD tooling.
- Runs locally via OpenRouter API instead of the paper’s internal LLM stack.
Implemented
- Long-term memory repository (UMAP/PCA positioning)
- Semantic search across conversations and memolets
- Configurable clustering (K-Means, DBSCAN, Hierarchical)
- Curated sandbox with drag-and-drop grouping
- Memolet extraction, summarization, and emoji iconography
- Prompt composition with
@memoletmentions and citations - WebSocket streaming for baseline vs memolet chat
Pending
- Reproduction of user study tasks and metrics
- Automated benchmarking of clustering hyperparameters
- Node.js ≥ 18
- Python ≥ 3.9
- uv for Python env management
- OpenRouter API key
npm install
cp apps/server/.env.example apps/server/.env
# add your OpenRouter key to .env
npm run dev- Frontend: http://localhost:5173
- Backend: http://localhost:8000
Frontend: React 19 + TypeScript + Vite + Tailwind
- TipTap editor for
@memoletmentions - DnD Kit sandbox with grid snapping
- TanStack Query for caching
- IndexedDB for local persistence
Backend: FastAPI + SQLAlchemy + SentenceTransformers
- Services for memolet orchestration, clustering, embeddings
- SQLite vector store with UMAP/PCA fallbacks
- Structured logging and WebSocket streaming
System Flow
- Conversations are stored and transformed into memolets.
- Memolets are clustered and positioned in 2D space.
- The frontend renders and manages sandbox layouts.
- Prompts referencing memolets are enriched and sent to OpenRouter.
- Chat responses stream back with inline memory citations.
- Start chatting in baseline mode to generate conversation logs.
- Generate memolets via
POST /api/v1/memolets. - Curate and organize in the sandbox.
- Use
@memoletmentions in prompts to reference prior memory. - Compare baseline vs memolet-augmented responses in the chat interface.
Replication Study
@misc{memolet-replication,
author = {Tosin Amuda},
title = {Memolet: A Replication Study},
year = {2025},
howpublished = {https://github.com/tosinamuda/memolet},
note = {Replication of Yen and Zhao, UIST 2024}
}Original Paper
@inproceedings{yen2024memolet,
author = {Ryan Yen and Jian Zhao},
title = {Memolet: Reifying the Reuse of User-AI Conversational Memories},
booktitle = {Proceedings of the 37th Annual ACM Symposium on User Interface Software and Technology (UIST '24)},
year = {2024},
doi = {10.1145/3654777.3676388}
}- Credit to Ryan Yen and Jian Zhao for the original Memolet design.
- Built with React, FastAPI, SentenceTransformers, scikit-learn, and DnD Kit.