Un Layer di Memoria Local-First per LLM
mnemo è un layer di memoria local-first che fornisce alle applicazioni LLM un contesto persistente senza alcuna dipendenza dal cloud.
Funziona come servizio sidecar, acquisisce testo grezzo, estrae entità e relazioni con un LLM configurabile e costruisce un grafo di conoscenza in SQLite.
Il grafo è l'elemento distintivo: le entità vengono deduplicate tra sessioni diverse, le relazioni sono pesate e il recupero utilizza una pipeline a 6 fasi: ricerca full‑text, ricerca per nome entità, espansione del grafo tramite BFS, filtraggio delle relazioni, scoring e assemblaggio di una stringa di contesto per il prompt.
I risultati espansi dal grafo ricevono un punteggio a 0,5×, in modo che le corrispondenze dirette abbiano sempre una priorità più alta.
Ne deriva una memoria strutturata e autocontenuta che controlli completamente, ideale quando devi iniettare contesto passato rilevante nel prompt di sistema di un modello all'interno di pipeline personalizzate.
git clone https://github.com/zaydmulani09/mnemo cd mnemo docker compose up -d # Pull the llama3 model the first time (~4 GB) docker exec mnemo-ollama ollama pull llama3 # Verify everything is healthy curl http://localhost:8080/health
Altri Percorsi di Installazione
Puoi anche installare mnemo come binario autonomo tramite Cargo.
Imposta le variabili d'ambiente per puntare a un'istanza Ollama locale o a qualsiasi API compatibile con OpenAI, quindi esegui mnemo-api.
Per i progetti Python, il pacchetto mnemo-sdk wrappa l'API:
from mnemo import MnemoClient client = MnemoClient() # server at http://localhost:8080 # Store a memory client.ingest("I'm building a Rust vector database called vecdb") # Get context for injection into your next LLM prompt print(client.get_context("what am I working on?"))
# Store a memory mnemo ingest "I use Neovim and prefer dark mode" # Retrieve relevant context mnemo search "what editor do I use?" # List all extracted entities mnemo entities # Show entity detail + graph neighbors mnemo entity <uuid> --neighbors # List memory chunks mnemo chunks # Server health mnemo health # Memory statistics mnemo stats # Delete everything (prompts for confirmation) mnemo wipe # Skip confirmation prompt mnemo wipe --yes # Point at a non-default server mnemo --server http://192.168.1.10:8080 stats
API HTTP Principali
Tutti gli endpoint accettano e restituiscono JSON su http://localhost:8080.
Endpoint principali:
- GET /health – stato del server, del database e del LLM.
- POST /ingest – memorizza testo; includi un
session_idper raggruppare turni correlati. - POST /retrieve – esegue l'intera pipeline di memoria e restituisce una stringa
context_promptche fornisce contesto persistente per la tua prossima chiamata LLM. Puoi controllaremax_chunks,max_entities,min_confidence(default 0.5),include_graph(default true) egraph_depth(default 2). - GET /entities, GET /chunks – elenchi paginati, più un POST /search per ricerche full‑text.
- DELETE /wipe – cancellazione totale irreversibile; richiede l'header di conferma
X-Confirm-Wipe: true. - GET /stats – conteggi e uptime.
Un riferimento completo è disponibile in docs/api.md.
Configurazione
Le impostazioni vengono lette da variabili d'ambiente e da un file TOML opzionale (passato con --config).
Variabili principali:
MNEMO_DB_PATH (file sqlite), MNEMO_PORT (8080), MNEMO_LLM_BASE_URL, MNEMO_LLM_MODEL (llama3), MNEMO_LLM_API_KEY e MNEMO_LLM_PROVIDER (ollama, openai, anthropic o custom).
Le variabili d'ambiente prevalgono sempre sui valori del file TOML.
La fonte di configurazione attiva viene riportata in GET /health → config_source.
Un file di esempio è fornito in mnemo.example.toml.
Vincoli e Best Practices
Limitazioni:
- Non sostituisce i framework agentici gestiti che già si occupano della memoria.
- I risultati espansi dal grafo ricevono un punteggio a 0,5×, quindi le corrispondenze dirette superano sempre le connessioni inferite.
- La profondità dei vicini è limitata a 5. L'eliminazione di un'entità si propaga a cascata (le relazioni vengono rimosse). La cancellazione totale è irreversibile.
Best practices:
- Usa
session_idper delimitare il recupero. - Imposta
min_confidence(≥ 0,5) per filtrare estrazioni di bassa qualità. - Disabilita l'espansione del grafo (
include_graph: false) quando hai bisogno solo di corrispondenze dirette. - Esegui in modalità
--releaseper guadagni di velocità da 3 a 5 volte. - Preferisci le variabili d'ambiente nei deployment containerizzati.
- Inizia con il percorso Docker + Ollama per una configurazione completamente locale e a costo zero.





