Inspiration
I wanted to build a personal AI assistant that could retain useful context across sessions instead of treating every conversation as a fresh start. Research often involves returning to earlier questions, remembering conclusions, and connecting information gathered at different times. Most chat interfaces make that continuity difficult.
I built Mnemos to address this problem: a research assistant with persistent memory, live web research, and reusable workflows, while keeping the memory store under my control.
What it does
Mnemos has three main capabilities:
- Persistent memory: Stores stable preferences, research summaries, and user-approved information in PostgreSQL. It retrieves relevant memories to provide context in later conversations.
- Live web research: Uses Tavily Search to find current information, then Tavily Extract to retrieve page content from selected results. NVIDIA Nemotron synthesizes the evidence into answers with source citations.
- Reusable skills: Workflows such as Research Brief, Continue My Work, and Decision Memo combine memory retrieval, web research, and model reasoning into repeatable tasks.
Mnemos also includes PII redaction before information is persisted to memory.
How we built it
- Backend: FastAPI and Python, with SQLAlchemy for database access.
- Frontend: Streamlit, with streaming responses, conversation history, and a visible Memory Bank.
- Reasoning model: NVIDIA Nemotron 3 Super (120B-A12B), for research synthesis and more complex reasoning.
- Fast model: NVIDIA Nemotron 3 Nano (30B-A3B), for intent classification and memory extraction.
- Inference: Nebius Token Factory through its OpenAI-compatible API and the official Python SDK.
- Research: Tavily Search and Tavily Extract.
- Database: Supabase PostgreSQL.
- Hosting: Streamlit Community Cloud for the frontend and FastAPI hosting for the backend.
I used Tavily Search to identify relevant sources, selected a bounded set of result URLs, and passed those URLs to Tavily Extract. Extracted page content is used when available; search snippets remain a fallback if extraction fails. This gives the model more substantive evidence without attempting to extract every search result.
Challenges we ran into
- Model verbosity: Nemotron Super and Nano sometimes produced longer responses than the application needed. I addressed this with explicit concision instructions and output-token limits.
- Structured output: Nemotron Super occasionally returned JSON wrapped in Markdown fences or accompanied by explanatory text. I implemented a stricter-prompt retry fallback.
- Hosting cold starts: Free-tier hosting introduced delays when services had been idle. I used UptimeRobot to keep the backend warm during judging.
- Balancing research depth and cost: Extracting every search result would increase latency and context usage. I limited extraction to selected URLs and retained search snippets as a fallback.
Accomplishments that we're proud of
- Built a working personal research assistant combining persistent memory, live web research, and reusable skills.
- Implemented memory persistence using PostgreSQL, so information can survive backend restarts.
- Separated the memory service, research service, and agent orchestration logic.
- Integrated two Nemotron models for different workloads rather than using the more expensive reasoning model for every task.
- Added Tavily Extract to complement search snippets with page-level content.
- Developed detailed feedback based on actual measurements and observations from building the application.
What we learned
I learned how to design a persistent-memory agentic application, route tasks between fast and reasoning models, and combine web search and page extraction with model-based synthesis. I also learned how much application quality depends on details such as structured-output handling, PII redaction, bounded context, fallback behavior, and deployment reliability.
What's next for Mnemos
- Integrate NemoClaw for additional security and memory protection.
- Explore Nebius Serverless Jobs for asynchronous deep-research workflows.
- Develop a way to share reusable skills between users.
Built With
- docker
- fastapi
- nebius-token-factory
- nvidia-nemotron
- openai-python-sdk
- postgresql
- pydantic
- python
- sqlalchemy
- streamlit
- supabase
- tavily-extract
- tavily-search