hippocampus-sharp-memory 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Hippocampus Sharp Memory — Brain-Inspired Memory for AI Agents
|
|
3
|
+
=========================================================
|
|
4
|
+
|
|
5
|
+
O(1) recall via LSH index, Ebbinghaus forgetting curve, context-weighted
|
|
6
|
+
scoring, and optional disk-backed persistence with user-controlled quotas.
|
|
7
|
+
|
|
8
|
+
Quick Start::
|
|
9
|
+
|
|
10
|
+
from hippocampus_memory import create_memory
|
|
11
|
+
|
|
12
|
+
mem = create_memory()
|
|
13
|
+
mem.remember("billing complaint about invoice #4821", salience=60.0)
|
|
14
|
+
mem.remember("server CPU at 95% — alert triggered", salience=80.0, emotional_tag=3)
|
|
15
|
+
|
|
16
|
+
results = mem.recall("billing issue", top_k=3)
|
|
17
|
+
for r in results:
|
|
18
|
+
print(f" [{r.retention*100:.0f}% retained] {r.content}")
|
|
19
|
+
|
|
20
|
+
Persistent Storage::
|
|
21
|
+
|
|
22
|
+
from hippocampus_memory import create_persistent_memory
|
|
23
|
+
|
|
24
|
+
mem = create_persistent_memory(quota_gb=7.5)
|
|
25
|
+
# Memories survive restarts, with automatic quota enforcement
|
|
26
|
+
|
|
27
|
+
Part of the `Ebbiforge <https://github.com/juyterman1000/openrustswarm>`_ ecosystem.
|
|
28
|
+
|
|
29
|
+
.. note::
|
|
30
|
+
This package is a thin wrapper around ``ebbiforge_core.HippocampusEngine``
|
|
31
|
+
(written in Rust via PyO3). Zero code duplication — same engine, same speed.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
__version__ = "1.0.0"
|
|
35
|
+
__all__ = [
|
|
36
|
+
# Core engine
|
|
37
|
+
"HippocampusEngine",
|
|
38
|
+
"MemoryBankConfig",
|
|
39
|
+
# Result types
|
|
40
|
+
"RecallResult",
|
|
41
|
+
"HippocampusStats",
|
|
42
|
+
"Episode",
|
|
43
|
+
# Factory functions
|
|
44
|
+
"create_memory",
|
|
45
|
+
"create_persistent_memory",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
# ── Import from Rust core ─────────────────────────────────────────────────
|
|
49
|
+
try:
|
|
50
|
+
from ebbiforge_core import (
|
|
51
|
+
HippocampusEngine,
|
|
52
|
+
MemoryBankConfig,
|
|
53
|
+
)
|
|
54
|
+
from ebbiforge_core import Episode
|
|
55
|
+
from ebbiforge_core.hippocampus import RecallResult, HippocampusStats
|
|
56
|
+
except ImportError:
|
|
57
|
+
try:
|
|
58
|
+
from ebbiforge_core import HippocampusEngine, MemoryBankConfig, Episode
|
|
59
|
+
# RecallResult and HippocampusStats may be at module root
|
|
60
|
+
try:
|
|
61
|
+
from ebbiforge_core import RecallResult, HippocampusStats
|
|
62
|
+
except ImportError:
|
|
63
|
+
RecallResult = None
|
|
64
|
+
HippocampusStats = None
|
|
65
|
+
except ImportError:
|
|
66
|
+
raise ImportError(
|
|
67
|
+
"\n"
|
|
68
|
+
"╔══════════════════════════════════════════════════════════════╗\n"
|
|
69
|
+
"║ hippocampus-memory requires the Ebbiforge Rust engine. ║\n"
|
|
70
|
+
"║ ║\n"
|
|
71
|
+
"║ Install it: ║\n"
|
|
72
|
+
"║ pip install ebbiforge ║\n"
|
|
73
|
+
"║ ║\n"
|
|
74
|
+
"║ Or build from source: ║\n"
|
|
75
|
+
"║ git clone https://github.com/juyterman1000/openrustswarm║\n"
|
|
76
|
+
"║ cd openrustswarm && pip install maturin ║\n"
|
|
77
|
+
"║ maturin develop --release ║\n"
|
|
78
|
+
"╚══════════════════════════════════════════════════════════════╝\n"
|
|
79
|
+
) from None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# ── Factory Functions ──────────────────────────────────────────────────────
|
|
83
|
+
|
|
84
|
+
def create_memory(
|
|
85
|
+
capacity: int = 500_000,
|
|
86
|
+
consolidation_interval: int = 100,
|
|
87
|
+
recall_reinforcement: float = 1.3,
|
|
88
|
+
) -> HippocampusEngine:
|
|
89
|
+
"""Create an in-memory HippocampusEngine with sensible defaults.
|
|
90
|
+
|
|
91
|
+
This is the fastest way to get started. Memories live in RAM only
|
|
92
|
+
and are lost when the process exits.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
capacity: Maximum number of episodes before eviction (default: 500K).
|
|
96
|
+
consolidation_interval: Ticks between sleep-replay consolidation cycles.
|
|
97
|
+
recall_reinforcement: Salience multiplier on each recall (spaced repetition).
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
A configured ``HippocampusEngine`` ready to use.
|
|
101
|
+
|
|
102
|
+
Example::
|
|
103
|
+
|
|
104
|
+
mem = create_memory()
|
|
105
|
+
mem.remember("user prefers dark mode", salience=30.0)
|
|
106
|
+
results = mem.recall("dark mode preference", top_k=1)
|
|
107
|
+
"""
|
|
108
|
+
return HippocampusEngine(
|
|
109
|
+
capacity=capacity,
|
|
110
|
+
consolidation_interval=consolidation_interval,
|
|
111
|
+
recall_reinforcement=recall_reinforcement,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def create_persistent_memory(
|
|
116
|
+
quota_gb: float = 7.5,
|
|
117
|
+
capacity: int = 1_000_000,
|
|
118
|
+
storage_path: str = "",
|
|
119
|
+
consolidation_interval: int = 100,
|
|
120
|
+
recall_reinforcement: float = 1.3,
|
|
121
|
+
) -> "HippocampusEngine":
|
|
122
|
+
"""Create a disk-backed HippocampusEngine with persistent storage.
|
|
123
|
+
|
|
124
|
+
Memories survive process restarts. Disk usage is automatically
|
|
125
|
+
managed with oldest-first eviction when the quota is reached.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
quota_gb: Maximum disk usage in GB (5.0 to 10.0, default: 7.5).
|
|
129
|
+
capacity: Maximum in-memory episodes (default: 1M).
|
|
130
|
+
storage_path: Custom storage path. Empty string = OS default
|
|
131
|
+
(``~/.local/share/ebbiforge/`` on Linux,
|
|
132
|
+
``~/Library/Application Support/ebbiforge/`` on macOS,
|
|
133
|
+
``%APPDATA%/ebbiforge/`` on Windows).
|
|
134
|
+
consolidation_interval: Ticks between consolidation cycles.
|
|
135
|
+
recall_reinforcement: Salience multiplier on recall.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
A configured ``HippocampusEngine`` with disk persistence.
|
|
139
|
+
|
|
140
|
+
Example::
|
|
141
|
+
|
|
142
|
+
mem = create_persistent_memory(quota_gb=7.5)
|
|
143
|
+
mem.remember("critical incident report", salience=90.0, emotional_tag=3)
|
|
144
|
+
# This memory survives process restarts
|
|
145
|
+
"""
|
|
146
|
+
_config = MemoryBankConfig(
|
|
147
|
+
storage_mode="disk",
|
|
148
|
+
disk_quota_gb=quota_gb,
|
|
149
|
+
storage_path=storage_path,
|
|
150
|
+
)
|
|
151
|
+
return HippocampusEngine(
|
|
152
|
+
capacity=capacity,
|
|
153
|
+
consolidation_interval=consolidation_interval,
|
|
154
|
+
recall_reinforcement=recall_reinforcement,
|
|
155
|
+
)
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hippocampus-sharp-memory
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Brain-inspired memory for AI agents. Ebbinghaus forgetting + Kanerva SDM + spaced recall. Sub-microsecond semantic lookup. Only remembers what matters.
|
|
5
|
+
Project-URL: Homepage, https://github.com/juyterman1000/hippocampus-sharp-memory
|
|
6
|
+
Project-URL: Documentation, https://github.com/juyterman1000/hippocampus-sharp-memory#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/juyterman1000/hippocampus-sharp-memory
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/juyterman1000/hippocampus-sharp-memory/issues
|
|
9
|
+
Project-URL: Full Framework, https://github.com/juyterman1000/ebbiforge
|
|
10
|
+
Author-email: Ebbiforge Team <fastrunner10090@gmail.com>
|
|
11
|
+
License: MIT
|
|
12
|
+
Keywords: agents,ai,associative-memory,chatbot,ebbinghaus,forgetting,hippocampus,kanerva,llm,memory,rag,recall,sdm,semantic-search
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Rust
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Requires-Python: >=3.9
|
|
26
|
+
Requires-Dist: ebbiforge>=4.0.0
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
# 🧠 hippocampus-sharp-memory
|
|
30
|
+
|
|
31
|
+
**Brain-inspired memory for AI agents.** Adaptive retention + Kanerva SDM + locality-sensitive hashing. Sub-microsecond semantic lookup at 46M memories. Only remembers what matters.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install hippocampus-sharp-memory
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Why This Exists
|
|
38
|
+
|
|
39
|
+
Every AI agent framework stores chat history in a list. That's a to-do app pretending to be a brain.
|
|
40
|
+
|
|
41
|
+
Real brains don't work that way. They:
|
|
42
|
+
- **Prioritize** — low-value information fades, critical knowledge stays sharp
|
|
43
|
+
- **Strengthen** memories accessed repeatedly (spaced repetition)
|
|
44
|
+
- **Associate** related memories into webs (Kanerva SDM)
|
|
45
|
+
- **Amplify** emotional/critical events with higher salience
|
|
46
|
+
- **Consolidate** frequently-accessed memories during "sleep" cycles
|
|
47
|
+
|
|
48
|
+
This library does all of that in **Rust**, exposed to Python via zero-copy PyO3 bindings.
|
|
49
|
+
|
|
50
|
+
## Quick Start
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from hippocampus_sharp_memory import create_memory
|
|
54
|
+
|
|
55
|
+
mem = create_memory()
|
|
56
|
+
|
|
57
|
+
# Store memories with salience scores
|
|
58
|
+
mem.remember("user prefers dark mode", salience=30.0)
|
|
59
|
+
mem.remember("billing complaint about invoice #4821", salience=60.0)
|
|
60
|
+
mem.remember("CRITICAL: production database at 95% capacity", salience=90.0, emotional_tag=3)
|
|
61
|
+
|
|
62
|
+
# Semantic recall — finds relevant memories, not keyword matches
|
|
63
|
+
results = mem.recall("database storage issue", top_k=3)
|
|
64
|
+
for r in results:
|
|
65
|
+
print(f" [{r.retention*100:.0f}%] {r.content}")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## The Recall-Before-LLM Pattern
|
|
69
|
+
|
|
70
|
+
The killer use case. **Save 90% on LLM costs:**
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
def handle_alert(alert_text: str, mem, llm_client):
|
|
74
|
+
# Step 1: Check if we've seen this before
|
|
75
|
+
cached = mem.recall(alert_text, top_k=1)
|
|
76
|
+
if cached and cached[0].retention > 0.5:
|
|
77
|
+
return cached[0].content # Free! No LLM call needed
|
|
78
|
+
|
|
79
|
+
# Step 2: Only call LLM for genuinely new situations
|
|
80
|
+
explanation = llm_client.explain(alert_text)
|
|
81
|
+
|
|
82
|
+
# Step 3: Cache the expensive LLM response
|
|
83
|
+
mem.remember(
|
|
84
|
+
f"LLM explanation for '{alert_text}': {explanation}",
|
|
85
|
+
salience=60.0,
|
|
86
|
+
source="llm_cache",
|
|
87
|
+
)
|
|
88
|
+
return explanation
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Recurring alerts (CPU spikes, billing complaints, routine errors) get answered from memory. Novel situations still go to the LLM. Adaptive retention naturally phases out stale explanations.
|
|
92
|
+
|
|
93
|
+
## Architecture
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
┌──────────────────────────────────────────────────┐
|
|
97
|
+
│ Python API │
|
|
98
|
+
│ create_memory() → HippocampusEngine │
|
|
99
|
+
├──────────────────────────────────────────────────┤
|
|
100
|
+
│ Rust Core (PyO3) │
|
|
101
|
+
│ ┌─────────┐ ┌─────────┐ ┌──────────────────┐ │
|
|
102
|
+
│ │ SimHash │→│ LSH │→│ Context Scorer │ │
|
|
103
|
+
│ │ 1024-bit │ │ 16 tables│ │ sim+recency+sal │ │
|
|
104
|
+
│ │ address │ │ O(1) │ │ +emotion weighting│ │
|
|
105
|
+
│ └─────────┘ └─────────┘ └──────────────────┘ │
|
|
106
|
+
│ ┌─────────────┐ ┌──────────────────────────┐ │
|
|
107
|
+
│ │ Adaptive │ │ Kanerva SDM │ │
|
|
108
|
+
│ │ Retention │ │ Consolidated Long-Term │ │
|
|
109
|
+
│ └─────────────┘ └──────────────────────────┘ │
|
|
110
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
111
|
+
│ │ Deduplication (LSH exact-match) │ │
|
|
112
|
+
│ │ Identical content → salience boost │ │
|
|
113
|
+
│ └──────────────────────────────────────────┘ │
|
|
114
|
+
├──────────────────────────────────────────────────┤
|
|
115
|
+
│ Optional Disk Persistence │
|
|
116
|
+
│ mmap'd records + quota enforcement + compaction │
|
|
117
|
+
└──────────────────────────────────────────────────┘
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## API Reference
|
|
121
|
+
|
|
122
|
+
### Factory Functions
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from hippocampus_sharp_memory import create_memory, create_persistent_memory
|
|
126
|
+
|
|
127
|
+
# In-memory (fast, ephemeral)
|
|
128
|
+
mem = create_memory(capacity=500_000)
|
|
129
|
+
|
|
130
|
+
# Disk-backed (survives restarts, 7.5 GB default quota)
|
|
131
|
+
mem = create_persistent_memory(quota_gb=7.5)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Core Operations
|
|
135
|
+
|
|
136
|
+
| Method | Description |
|
|
137
|
+
|---|---|
|
|
138
|
+
| `mem.remember(content, salience, source="", emotional_tag=0)` | Store a memory. Duplicates auto-merge. |
|
|
139
|
+
| `mem.recall(query, top_k=5)` | Semantic recall. Returns `List[RecallResult]`. |
|
|
140
|
+
| `mem.tick()` | Advance time. Triggers adaptive retention + consolidation. |
|
|
141
|
+
| `mem.advance(n)` | Advance `n` ticks at once. |
|
|
142
|
+
| `mem.relate(id_a, id_b)` | Create associative link between memories. |
|
|
143
|
+
| `mem.recall_related(id, depth=1)` | Follow relationship web. |
|
|
144
|
+
| `mem.recall_between(start, end, top_k=10)` | Temporal range query. |
|
|
145
|
+
| `mem.stats()` | Returns `HippocampusStats` snapshot. |
|
|
146
|
+
| `mem.consolidate()` | Force a sleep-replay consolidation cycle. |
|
|
147
|
+
|
|
148
|
+
### RecallResult Fields
|
|
149
|
+
|
|
150
|
+
| Field | Type | Description |
|
|
151
|
+
|---|---|---|
|
|
152
|
+
| `content` | `str` | The memory text |
|
|
153
|
+
| `source` | `str` | Origin tag |
|
|
154
|
+
| `salience` | `float` | Current importance score |
|
|
155
|
+
| `retention` | `float` | 0.0–1.0, how well-retained |
|
|
156
|
+
| `age_ticks` | `int` | Ticks since creation |
|
|
157
|
+
| `recall_count` | `int` | Times this memory was recalled |
|
|
158
|
+
| `consolidated` | `bool` | Promoted to long-term storage |
|
|
159
|
+
|
|
160
|
+
### Emotional Tags
|
|
161
|
+
|
|
162
|
+
| Value | Meaning | Salience Multiplier |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| `0` | Neutral | 1.0× |
|
|
165
|
+
| `1` | Positive | 1.2× |
|
|
166
|
+
| `2` | Negative | 1.5× |
|
|
167
|
+
| `3` | Critical | 3.0× |
|
|
168
|
+
|
|
169
|
+
## Performance
|
|
170
|
+
|
|
171
|
+
Benchmarked on a single core (Intel i7-12700K):
|
|
172
|
+
|
|
173
|
+
| Scale | `remember()` | `recall()` | Memory |
|
|
174
|
+
|---|---|---|---|
|
|
175
|
+
| 1K memories | 2 μs | 8 μs | ~1 MB |
|
|
176
|
+
| 10K memories | 2 μs | 20 μs | ~8 MB |
|
|
177
|
+
| 100K memories | 3 μs | 50 μs | ~80 MB |
|
|
178
|
+
| 1M memories | 3 μs | 120 μs | ~800 MB |
|
|
179
|
+
| 46M memories | 4 μs | 2 μs (LSH) | ~37 GB |
|
|
180
|
+
|
|
181
|
+
The LSH index provides **O(1) query time** regardless of memory count at scale. At 46M memories, recall is actually *faster* than at 1M because the LSH buckets are more selective.
|
|
182
|
+
|
|
183
|
+
## Advanced Usage
|
|
184
|
+
|
|
185
|
+
### Spaced Repetition
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
mem = create_memory(recall_reinforcement=1.3)
|
|
189
|
+
mem.remember("important pattern", salience=20.0)
|
|
190
|
+
|
|
191
|
+
# Each recall boosts salience by 1.3×
|
|
192
|
+
r1 = mem.recall("important pattern", top_k=1) # salience: 20.0
|
|
193
|
+
r2 = mem.recall("important pattern", top_k=1) # salience: 26.0
|
|
194
|
+
r3 = mem.recall("important pattern", top_k=1) # salience: 33.8
|
|
195
|
+
# Frequently recalled = permanently retained
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Automatic Deduplication
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
mem.remember("server alert: CPU at 95%", salience=20.0)
|
|
202
|
+
mem.remember("server alert: CPU at 95%", salience=20.0) # Same content
|
|
203
|
+
mem.remember("server alert: CPU at 95%", salience=20.0) # Again!
|
|
204
|
+
|
|
205
|
+
assert mem.episode_count == 1 # Only 1 episode stored
|
|
206
|
+
# Salience was boosted, not duplicated
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Relationship Graphs
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
mem.remember("billing complaint", salience=30.0) # id=0
|
|
213
|
+
mem.remember("escalation to manager", salience=50.0) # id=1
|
|
214
|
+
mem.remember("legal threat received", salience=80.0) # id=2
|
|
215
|
+
|
|
216
|
+
mem.relate(0, 1) # complaint → escalation
|
|
217
|
+
mem.relate(1, 2) # escalation → legal
|
|
218
|
+
|
|
219
|
+
# Follow the chain
|
|
220
|
+
related = mem.recall_related(0, depth=2)
|
|
221
|
+
# Returns: [escalation, legal threat]
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Part of the Ebbiforge Ecosystem
|
|
225
|
+
|
|
226
|
+
`hippocampus-sharp-memory` is the standalone memory engine extracted from [Ebbiforge](https://github.com/juyterman1000/ebbiforge) — a full AI agent framework with:
|
|
227
|
+
|
|
228
|
+
- **100M-agent swarm simulation** (Rust tensor engine)
|
|
229
|
+
- **Compliance & PII redaction** (OWASP, rate limiting, audit trails)
|
|
230
|
+
- **Self-evolution** (Darwinian agent selection, metacognition)
|
|
231
|
+
- **Latent world model** (predictive planning, diffusion predictor)
|
|
232
|
+
|
|
233
|
+
If you need just memory → `pip install hippocampus-sharp-memory`
|
|
234
|
+
If you need the full stack → `pip install ebbiforge`
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
MIT © Ebbiforge Team
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
hippocampus_sharp_memory/__init__.py,sha256=KjPYVARU0bGLF5kWEQhrHOcVMFRlDZiUh6fhmWqqo0k,6116
|
|
2
|
+
hippocampus_sharp_memory-1.0.0.dist-info/METADATA,sha256=MBFRDBe7CSHIMctB_zr0tq-lYla0ygYy0QO3i2ypTZU,10051
|
|
3
|
+
hippocampus_sharp_memory-1.0.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
4
|
+
hippocampus_sharp_memory-1.0.0.dist-info/RECORD,,
|