01 — Filosofia
I ricordi non si aggiornano. Non si cancellano. Si accumulano nel tempo, ognuno legato a un sentimento, a un momento preciso, irripetibile. MNHEME traduce questo principio in un sistema di storage.
I
Nessun metodo update(), nessun delete().
Il dataclass Memory è frozen=True:
fisicamente immutabile dopo la creazione.
Come i ricordi veri.
II
Ogni ricordo ha una chiave concettuale (Debito, Famiglia) e un sentimento preciso tra 15 valori. Lo stesso concetto può portare emozioni diverse nel tempo — quella storia si chiama timeline.
III
Nessun SQLite. Nessun ORM. Il file .mnheme è un log
binario append-only con magic bytes, frame SIZE+PAYLOAD,
e fsync atomico su ogni scrittura. Crash-safe by design.
IV
Solo Python stdlib: json, struct,
hashlib, uuid, urllib.
Nessun pip install obbligatorio.
Il provider LLM comunica via HTTP puro.
"Non puoi sovrascrivere ciò che hai vissuto. Puoi solo ricordarlo diversamente."
— MNHEME Design Principles
02 — Architettura
Ogni livello fa una cosa sola. MemoryDB non sa nulla dell'LLM.
Il Brain non sa nulla del filesystem.
La separazione non è convenzione — è architettura cognitiva.
Ogni record: [MAGIC 4B][SIZE 4B][JSON UTF-8]. Append-only. Atomico. Record troncati saltati silenziosamente al riavvio.
Indici in RAM: concept → offsets, feeling → offsets, tag → offsets. Ricostruiti da zero al boot. Lookup O(1) via read_at(offset).
Hard link → Reflink → Symlink → Copy atomica. Deduplicazione SHA-256. Pool con sharding per hash. Un inode per ogni contenuto unico.
filestore.pyRileva il filesystem via /proc/mounts, magic number statfs(2), e probe live di hardlink/reflink/symlink nella directory target.
FastAPI opzionale. Endpoints per tutti i metodi: /memories, /concepts, /feelings, /search, /export.
7 sezioni: scrittura con/senza fsync, lettura via indici, full-text search, cold start, scalabilità, dimensioni file. Output JSON esportabile.
mnheme_benchmark.py03 — Sentimenti
04 — Brain
Il database è la memoria a lungo termine. L'LLM è il cervello che percepisce, associa, ragiona, riflette. Sei operazioni cognitive. Zero lock-in.
05 — Provider
Un solo file .env. La convenzione NOME_URL + NOME_MODEL
attiva qualsiasi provider. Anthropic viene rilevato automaticamente dall'URL.
Tutti gli altri usano il formato OpenAI-compatibile.
LM STUDIO
local-model
60 RPM · no key
OLLAMA
llama3 / mistral
60 RPM · no key
ANTHROPIC
claude-opus-4-5
5 RPM · native API
GROQ
llama-3.3-70b
30 RPM
MISTRAL
mistral-large
5 RPM
SAMBANOVA
Llama-3.3-70B
12 RPM
OPENROUTER
llama-3.1-405b
10 RPM
GOOGLE AI
gemini-1.5-pro
15 RPM
CEREBRAS
llama3.1-70b
30 RPM
TOGETHER
Llama-3.1-70B
10 RPM
FIREWORKS
llama-v3p1-70b
10 RPM
+ 20 ALTRI
qualsiasi _URL + _MODEL
auto-discovery
Se l'URL contiene anthropic.com
usa il formato nativo Anthropic.
Qualsiasi altro endpoint usa OpenAI-compat.
LM Studio, Ollama, qualsiasi server locale — senza chiave API.
06 — Benchmark
Misurati su filesystem 9p (virtuale). Tutte le operazioni di lettura usano gli indici RAM — solo i byte necessari vengono letti dal file fisico.
| Operazione | media/op | throughput | note |
|---|---|---|---|
| remember() con fsync | 1.8 ms | 552 ops/s | durabilità garantita |
| remember() senza fsync | 0.2 ms | 4.632 ops/s | 8.4× più veloce |
| count() — pura RAM | ~0 ms | 2.774.322 ops/s | O(1) da indice |
| feeling_distribution() | 0.003 ms | 277.865 ops/s | O(1) da indice |
| recall(concept, limit=10) | 1.5 ms | 636 ops/s | 10 read_at dal file |
| recall_by_feeling(limit=20) | 3.0 ms | 332 ops/s | 20 read_at dal file |
| recall_all() — 2.000 rec | 300 ms | 3 ops/s | carica tutto in RAM |
| search(full-text) | 40 ms | 24 ops/s | ~49k record/sec scansionati |
| search(limit=5) | 0.1 ms | 8.348 ops/s | si ferma al 5° match |
| MemoryDB() cold start | 40 ms | — | 49k record indicizzati/sec |
DIMENSIONE FILE
374 B / record in media
~36 MB per 100k record
~357 MB per 1M record
COLD START STIMATO
10k record → ~200 ms
100k record → ~2 s
1M record → ~20 s
FILESYSTEM SUPPORT
HARDLINK: ext4, NTFS, ZFS, NFS
REFLINK: btrfs, xfs, APFS
COPY: FAT32, exFAT, HDFS
07 — Struttura
mnheme.py
Core pubblico — MemoryDB, Feeling, MediaType, Memory. L'unica API che devi conoscere.
storage.py
Engine binario append-only. Frame MAGIC+SIZE+PAYLOAD. fsync atomico. Crash-resilient.
index.py
Indici in RAM: concept, feeling, tag, timeline. Ricostruiti dal log al boot.
fsprobe.py
Rilevamento filesystem. Probe live di hardlink/reflink/symlink nella directory target.
filestore.py
Storage file fisici. Pool SHA-256 deduplicata. Strategia adattiva per filesystem.
llm_provider.py
Provider agnostico da .env. Rate limiting, retry, fallback multi-provider. Zero SDK.
brain.py
Strato cognitivo LLM: perceive, ask (RAG), reflect, dream, introspect, summarize.
mnheme_api.py
REST API FastAPI opzionale. Swagger auto-generato. CORS configurato.
mnheme_benchmark.py
Suite completa: write/read/search/coldstart/scalabilità/file. Output JSON.
.env.example
Template configurazione con tutti i 30+ provider pre-configurati.