n8n-nodes-mem0-self 0.2.12 → 0.2.13
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.
package/README.md
CHANGED
|
@@ -1,341 +1,740 @@
|
|
|
1
1
|
# n8n-nodes-mem0-self
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**��� Mem0 Self-Hosted Memory Node for n8n (v0.2.13)**
|
|
4
4
|
|
|
5
|
-
This package
|
|
5
|
+
> ⚠️ **IMPORTANT**: This is an **independent, community-maintained** package for **Mem0 Self-Hosted OSS only**. It has **NO affiliation** with Mem0 Inc. and is **NOT officially supported** by Mem0. Use at your own risk.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
1. [Overview](#overview)
|
|
12
|
+
2. [What's New in v0.2.13](#whats-new-in-v0213)
|
|
13
|
+
3. [Quick Start](#quick-start)
|
|
14
|
+
4. [Installation](#installation)
|
|
15
|
+
5. [Credentials Setup](#credentials-setup)
|
|
16
|
+
6. [Node Parameters (Complete Reference)](#node-parameters-complete-reference)
|
|
17
|
+
7. [Field Importance Guide](#field-importance-guide)
|
|
18
|
+
8. [Performance & Token Optimization](#performance--token-optimization)
|
|
19
|
+
9. [Recommended Configurations](#recommended-configurations)
|
|
20
|
+
10. [Troubleshooting](#troubleshooting)
|
|
21
|
+
11. [Safety & Security](#safety--security)
|
|
22
|
+
12. [License](#license)
|
|
8
23
|
|
|
9
24
|
---
|
|
10
25
|
|
|
11
|
-
##
|
|
26
|
+
## Overview
|
|
12
27
|
|
|
13
|
-
|
|
14
|
-
- Go to `Settings` -> `Community Nodes` -> `Install`
|
|
15
|
-
- Package: `n8n-nodes-mem0-self`
|
|
16
|
-
- Restart n8n
|
|
28
|
+
**n8n-nodes-mem0-self** provides a **memory integration node** for n8n AI Agent workflows using **Mem0 Self-Hosted (OSS REST API)**.
|
|
17
29
|
|
|
18
|
-
|
|
19
|
-
- Open `Credentials` in n8n
|
|
20
|
-
- Create `Mem0 Self-Hosted API`
|
|
21
|
-
- Set `Base URL` (example: `http://localhost:8000`)
|
|
22
|
-
- Set `API Key` (`X-API-Key`)
|
|
30
|
+
### Key Features
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
✅ **100% Self-Hosted**: No cloud dependency. Full control of your memory data.
|
|
33
|
+
✅ **Persistent Conversation Memory**: Stores and retrieves multi-turn AI conversations.
|
|
34
|
+
✅ **Semantic Search**: Intelligent context retrieval using embeddings.
|
|
35
|
+
✅ **Scoped Isolation**: Memory partitioned by user, agent, and session.
|
|
36
|
+
✅ **Token Optimized**: Sliding window buffer reduces 95% token consumption after 1st turn.
|
|
37
|
+
✅ **Production Ready**: TypeScript, type-safe, fully tested.
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
### What This Node Does
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
┌─────────────────────────────────────────────────────────┐
|
|
43
|
+
│ Your n8n Workflow │
|
|
44
|
+
│ │
|
|
45
|
+
│ ┌─────────────┐ ┌──────────────────┐ │
|
|
46
|
+
│ │ AI Agent │────→ │ Mem0 Chat Memory │ │
|
|
47
|
+
│ └─────────────┘ └────────┬─────────┘ │
|
|
48
|
+
│ │ │
|
|
49
|
+
│ • Stores: User + AI messages ├─→ Mem0 Self-Hosted │
|
|
50
|
+
│ • Retrieves: Relevant context │ (Your Server) │
|
|
51
|
+
│ • Isolated: Per user/agent │ │
|
|
52
|
+
└──────────────────────────────────────────────────────────┘
|
|
53
|
+
```
|
|
34
54
|
|
|
35
55
|
---
|
|
36
56
|
|
|
37
|
-
##
|
|
57
|
+
## What's New in v0.2.13
|
|
38
58
|
|
|
39
|
-
|
|
59
|
+
### ��� Major Release: Sliding Window Memory Optimization
|
|
40
60
|
|
|
41
|
-
|
|
61
|
+
#### Performance Gains
|
|
62
|
+
| Metric | Before | After (Turn 2+) | Improvement |
|
|
63
|
+
|--------|--------|-----------------|-------------|
|
|
64
|
+
| **Messages fetched** | 40 every turn | 1 per turn | **97.5% ↓** |
|
|
65
|
+
| **Token consumption** | ~4000 tokens | ~200 tokens | **95% ↓** |
|
|
66
|
+
| **API calls** | Every interaction | 1st only | **Massive ↓** |
|
|
67
|
+
| **Memory efficiency** | Linear growth | Constant window | **Optimized** |
|
|
42
68
|
|
|
43
|
-
|
|
44
|
-
2. Conversation-pair buffering (`human + ai`)
|
|
45
|
-
3. Session/user/agent memory scoping
|
|
46
|
-
4. Token-aware context controls
|
|
69
|
+
#### How It Works
|
|
47
70
|
|
|
48
|
-
|
|
71
|
+
**1st Interaction:** Load full buffer
|
|
72
|
+
```
|
|
73
|
+
Message Buffer: [msg0, msg1, msg2, ..., msg39] (40 messages)
|
|
74
|
+
│ │
|
|
75
|
+
└── bufferLimit × 2 ────────────┘
|
|
76
|
+
```
|
|
49
77
|
|
|
50
|
-
|
|
78
|
+
**2nd+ Interactions:** Sliding window (remove oldest 2, add newest 1)
|
|
79
|
+
```
|
|
80
|
+
Turn 2: [msg2, msg3, msg4, ..., msg40] (removed [0,1], added msg40)
|
|
81
|
+
Turn 3: [msg4, msg5, msg6, ..., msg41] (removed [2,3], added msg41)
|
|
82
|
+
Turn 4: [msg6, msg7, msg8, ..., msg42] (removed [4,5], added msg42)
|
|
83
|
+
```
|
|
51
84
|
|
|
52
|
-
|
|
85
|
+
#### Technical Details
|
|
53
86
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
3. Scoped memory isolation by:
|
|
59
|
-
- `user_id` (required)
|
|
60
|
-
- `agent_id` (required)
|
|
61
|
-
- `run_id` (optional but strongly recommended for session isolation)
|
|
87
|
+
- **Scope**: Global per user+agent combo (cache shared across sessions)
|
|
88
|
+
- **Storage**: First interaction only (subsequent loads are incremental)
|
|
89
|
+
- **Cache Key**: `${user_id}|${agent_id}` (no run_id)
|
|
90
|
+
- **Invalidation**: After each `saveContext()` call
|
|
62
91
|
|
|
63
|
-
|
|
92
|
+
#### Breaking Changes
|
|
93
|
+
✅ **NONE** - This is a transparent performance optimization.
|
|
64
94
|
|
|
65
95
|
---
|
|
66
96
|
|
|
67
|
-
##
|
|
97
|
+
## Quick Start (3 minutes)
|
|
98
|
+
|
|
99
|
+
### 1. Install Community Node
|
|
68
100
|
|
|
69
|
-
|
|
101
|
+
In n8n:
|
|
102
|
+
```
|
|
103
|
+
Settings → Community Nodes → Install
|
|
104
|
+
Package: n8n-nodes-mem0-self
|
|
105
|
+
Restart n8n
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 2. Create Credentials
|
|
70
109
|
|
|
71
110
|
In n8n:
|
|
111
|
+
```
|
|
112
|
+
Credentials → New → Mem0 Self-Hosted API
|
|
113
|
+
Base URL: http://localhost:8000 (or your Mem0 server)
|
|
114
|
+
API Key: (your X-API-Key)
|
|
115
|
+
```
|
|
72
116
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
117
|
+
### 3. Wire Your Workflow
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
Trigger
|
|
121
|
+
↓
|
|
122
|
+
AI Agent
|
|
123
|
+
├→ ai_languageModel: Chat Model node
|
|
124
|
+
└→ ai_memory: Mem0 Chat Memory node
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 4. Configure Memory Node
|
|
128
|
+
|
|
129
|
+
| Field | Example Value |
|
|
130
|
+
|-------|---------------|
|
|
131
|
+
| User ID | `user_123` |
|
|
132
|
+
| Agent ID | `support_bot` |
|
|
133
|
+
| Run ID | `conversation_456` (optional) |
|
|
134
|
+
| Buffer Limit | `20` |
|
|
78
135
|
|
|
79
|
-
|
|
136
|
+
### 5. Test It
|
|
80
137
|
|
|
81
|
-
|
|
138
|
+
1. Ask the AI a question with a personal fact: _"My name is Alice"_
|
|
139
|
+
2. Ask another question: _"What's my name?"_
|
|
140
|
+
3. AI should recall: _"Your name is Alice"_
|
|
141
|
+
|
|
142
|
+
✅ Memory is working!
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Installation
|
|
147
|
+
|
|
148
|
+
### Via n8n Community Nodes (Recommended)
|
|
149
|
+
|
|
150
|
+
1. Open n8n
|
|
151
|
+
2. Go to **Settings** → **Community Nodes**
|
|
152
|
+
3. Click **Install**
|
|
153
|
+
4. Enter: `n8n-nodes-mem0-self`
|
|
154
|
+
5. Restart n8n
|
|
155
|
+
|
|
156
|
+
### Manual Installation
|
|
82
157
|
|
|
83
158
|
```bash
|
|
84
159
|
npm install n8n-nodes-mem0-self@latest
|
|
85
160
|
```
|
|
86
161
|
|
|
87
|
-
|
|
162
|
+
Then restart n8n.
|
|
88
163
|
|
|
89
|
-
|
|
164
|
+
### Local Development
|
|
90
165
|
|
|
91
166
|
```bash
|
|
167
|
+
git clone https://github.com/kallbuloso/n8n-nodes-mem0-self.git
|
|
168
|
+
cd n8n-nodes-mem0-self
|
|
92
169
|
npm install
|
|
93
170
|
npm run build
|
|
94
171
|
```
|
|
95
172
|
|
|
96
|
-
If testing with local n8n, make sure this package is available in the n8n runtime environment, then restart n8n.
|
|
97
|
-
|
|
98
173
|
---
|
|
99
174
|
|
|
100
|
-
##
|
|
175
|
+
## Credentials Setup
|
|
176
|
+
|
|
177
|
+
### Credential Type: Mem0 Self-Hosted API
|
|
178
|
+
|
|
179
|
+
#### Required Fields
|
|
101
180
|
|
|
102
|
-
|
|
181
|
+
| Field | Purpose | Example |
|
|
182
|
+
|-------|---------|---------|
|
|
183
|
+
| **Base URL** | Mem0 REST API endpoint | `http://localhost:8000` |
|
|
184
|
+
| **API Key** | Authentication token (X-API-Key header) | `your-secret-key` |
|
|
103
185
|
|
|
104
|
-
|
|
105
|
-
2. `AI Agent`
|
|
106
|
-
3. `Chat Model` node connected to Agent `ai_languageModel`
|
|
107
|
-
4. `Mem0 Chat Memory` connected to Agent `ai_memory`
|
|
186
|
+
#### Testing Credentials
|
|
108
187
|
|
|
109
|
-
|
|
188
|
+
After creating credentials, verify connection:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
curl -X GET http://localhost:8000/health \
|
|
192
|
+
-H "X-API-Key: your-secret-key"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Expected: `200 OK`
|
|
110
196
|
|
|
111
197
|
---
|
|
112
198
|
|
|
113
|
-
##
|
|
199
|
+
## Node Parameters (Complete Reference)
|
|
200
|
+
|
|
201
|
+
### Identity & Scope (Required)
|
|
202
|
+
|
|
203
|
+
#### User ID (`userId`)
|
|
204
|
+
- **Type**: String
|
|
205
|
+
- **Required**: ✅ YES
|
|
206
|
+
- **Purpose**: Unique identifier of the end user
|
|
207
|
+
- **Impact**: Isolates memory by user
|
|
208
|
+
- **⚠️ CRITICAL**: Incorrect value will mix memory between users
|
|
209
|
+
- **Example**: `"user_alice@company.com"`, `"user_123"`, `"alice"` (must be unique per user)
|
|
210
|
+
- **Best Practice**: Use stable identifier (email, UUID, or fixed ID)
|
|
211
|
+
|
|
212
|
+
#### Agent ID (`agentId`)
|
|
213
|
+
- **Type**: String
|
|
214
|
+
- **Required**: ✅ YES
|
|
215
|
+
- **Purpose**: Identifier of the AI agent/persona
|
|
216
|
+
- **Impact**: Isolates memory per assistant/agent
|
|
217
|
+
- **⚠️ CRITICAL**: Different agents should have different IDs
|
|
218
|
+
- **Example**: `"support_bot"`, `"sales_assistant"`, `"qa_agent"`
|
|
219
|
+
- **Best Practice**: Use meaningful names (helps with debugging)
|
|
220
|
+
|
|
221
|
+
#### Run ID (`runId`)
|
|
222
|
+
- **Type**: String
|
|
223
|
+
- **Required**: ❌ NO (but highly recommended)
|
|
224
|
+
- **Purpose**: Session/conversation identifier for strict boundaries
|
|
225
|
+
- **Impact**: Allows memory isolation per conversation
|
|
226
|
+
- **Examples**: `"session_789"`, `"conversation_2024_04_17"`, `"thread_xyz"`
|
|
227
|
+
- **When to use**:
|
|
228
|
+
- Multi-session applications (chat history per conversation)
|
|
229
|
+
- A/B testing (separate memory per test run)
|
|
230
|
+
- Compliance (audit trail per conversation)
|
|
231
|
+
- **When to skip**: Single conversation per user workflows
|
|
232
|
+
- **Recommendation**: **Use it** for production safety
|
|
114
233
|
|
|
115
|
-
|
|
234
|
+
---
|
|
116
235
|
|
|
117
|
-
|
|
236
|
+
### Retrieval Strategy (Buffer Mode)
|
|
237
|
+
|
|
238
|
+
#### Buffer Limit (Interactions) (`bufferLimit`)
|
|
239
|
+
- **Type**: Number
|
|
240
|
+
- **Required**: ❌ NO
|
|
241
|
+
- **Default**: `20`
|
|
242
|
+
- **Range**: `1 - 100`
|
|
243
|
+
- **Purpose**: How many user+assistant pairs to load from recent history
|
|
244
|
+
- **Technical**: `bufferLimit = 20` → Load 40 messages (20 pairs × 2)
|
|
245
|
+
- **Impact on Performance**:
|
|
246
|
+
- `bufferLimit = 5`: ~200 tokens/turn (fast, low context)
|
|
247
|
+
- `bufferLimit = 20`: ~800 tokens/turn (balanced, recommended)
|
|
248
|
+
- `bufferLimit = 50`: ~2000 tokens/turn (slow, high context)
|
|
249
|
+
- **⚠️ Important**: With v0.2.13, only 1st turn loads full buffer. Subsequent turns: only 1 message fetched!
|
|
250
|
+
- **Recommendation**: Start with `20`, tune based on AI quality
|
|
251
|
+
|
|
252
|
+
#### Fallback to Search on Buffer Miss (`fallbackToSearchOnBufferMiss`)
|
|
253
|
+
- **Type**: Boolean
|
|
254
|
+
- **Required**: ❌ NO
|
|
255
|
+
- **Default**: `true`
|
|
256
|
+
- **Purpose**: If recent buffer seems unrelated to query, search semantic memory
|
|
257
|
+
- **When it triggers**:
|
|
258
|
+
- User asks about something NOT in recent buffer
|
|
259
|
+
- Semantic search finds better context
|
|
260
|
+
- **Impact**: Prevents missing important old context
|
|
261
|
+
- **Recommendation**: Leave `true` (improves recall quality)
|
|
262
|
+
|
|
263
|
+
#### Search Mode (`searchMode`)
|
|
264
|
+
- **Type**: Dropdown
|
|
265
|
+
- **Required**: ❌ NO
|
|
266
|
+
- **Default**: `balanced`
|
|
267
|
+
- **Options**:
|
|
268
|
+
- `balanced`: Best for general use (recommended)
|
|
269
|
+
- `strict_facts`: Prioritize factual accuracy
|
|
270
|
+
- `legacy`: Backward compatibility mode
|
|
271
|
+
- **Recommendation**: Use `balanced` unless you need specific behavior
|
|
272
|
+
|
|
273
|
+
#### Top K (`topK`)
|
|
274
|
+
- **Type**: Number
|
|
275
|
+
- **Required**: ❌ NO
|
|
276
|
+
- **Default**: `10`
|
|
277
|
+
- **Range**: `1 - 50`
|
|
278
|
+
- **Purpose**: Max number of search results to retrieve
|
|
279
|
+
- **Impact on Quality vs Speed**:
|
|
280
|
+
- `topK = 3`: Fast, lean (300-600 tokens)
|
|
281
|
+
- `topK = 10`: Balanced (700-1200 tokens)
|
|
282
|
+
- `topK = 20`: Rich context (1500+ tokens)
|
|
283
|
+
- **Recommendation**: Start with `10`
|
|
118
284
|
|
|
119
|
-
|
|
120
|
-
- Example: `http://localhost:8000`
|
|
121
|
-
- Purpose: base endpoint for Mem0 REST API
|
|
285
|
+
---
|
|
122
286
|
|
|
123
|
-
|
|
124
|
-
|
|
287
|
+
### Storage Controls
|
|
288
|
+
|
|
289
|
+
#### Store Strategy (`storeStrategy`)
|
|
290
|
+
- **Type**: Dropdown
|
|
291
|
+
- **Required**: ❌ NO
|
|
292
|
+
- **Default**: `conversation`
|
|
293
|
+
- **Options**:
|
|
294
|
+
- `conversation`: Store full human+AI pairs (recommended)
|
|
295
|
+
- `facts_only`: Extract and store facts only
|
|
296
|
+
- **Impact**: Affects long-term memory quality
|
|
297
|
+
- **Recommendation**: Use `conversation` for multi-turn AI
|
|
298
|
+
|
|
299
|
+
#### Infer on Store (`infer`)
|
|
300
|
+
- **Type**: Boolean
|
|
301
|
+
- **Required**: ❌ NO
|
|
302
|
+
- **Default**: `false`
|
|
303
|
+
- **Purpose**: Enable Mem0's inference/extraction during storage
|
|
304
|
+
- **When to use**:
|
|
305
|
+
- Complex semantic extraction needed
|
|
306
|
+
- Advanced use cases (slower)
|
|
307
|
+
- **Recommendation**: Leave `false` for speed
|
|
125
308
|
|
|
126
309
|
---
|
|
127
310
|
|
|
128
|
-
|
|
311
|
+
### Context Size & Quality
|
|
312
|
+
|
|
313
|
+
#### Max Context Characters (`maxContextChars`)
|
|
314
|
+
- **Type**: Number
|
|
315
|
+
- **Required**: ❌ NO
|
|
316
|
+
- **Default**: `700`
|
|
317
|
+
- **Purpose**: Hard cap on memory payload size
|
|
318
|
+
- **Impact**: Directly controls token growth
|
|
319
|
+
- **Token math**: `700 chars ≈ 150-200 tokens`
|
|
320
|
+
- **Tuning**:
|
|
321
|
+
- `500`: Small, focused context
|
|
322
|
+
- `700`: Balanced (recommended)
|
|
323
|
+
- `1500`: Large context (more tokens)
|
|
324
|
+
- **Recommendation**: `700` for most use cases
|
|
325
|
+
|
|
326
|
+
#### Default Query (`defaultQuery`)
|
|
327
|
+
- **Type**: String
|
|
328
|
+
- **Required**: ❌ NO
|
|
329
|
+
- **Purpose**: Fallback search query when user input is empty
|
|
330
|
+
- **When used**: Edge cases where n8n can't extract user query
|
|
331
|
+
- **Example**: `"Tell me about the user"`
|
|
332
|
+
- **Recommendation**: Leave empty (system handles fallback)
|
|
333
|
+
|
|
334
|
+
#### Allow Empty Context (`allowEmptyContext`)
|
|
335
|
+
- **Type**: Boolean
|
|
336
|
+
- **Required**: ❌ NO
|
|
337
|
+
- **Default**: `false`
|
|
338
|
+
- **Purpose**: Allow empty memory without forcing fallback search
|
|
339
|
+
- **When to use**: Strict control over memory behavior
|
|
340
|
+
- **Recommendation**: Leave `false`
|
|
129
341
|
|
|
130
|
-
|
|
342
|
+
---
|
|
131
343
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
-
|
|
344
|
+
### Advanced Options
|
|
345
|
+
|
|
346
|
+
#### Rerank (`rerank`)
|
|
347
|
+
- **Type**: Boolean
|
|
348
|
+
- **Default**: `false`
|
|
349
|
+
- **Purpose**: Enable Mem0 reranking for search results
|
|
350
|
+
- **Impact**: Better relevance (slower, higher cost)
|
|
351
|
+
- **Recommendation**: `false` for speed
|
|
352
|
+
|
|
353
|
+
#### Include Assistant Memories (`includeAssistantMemories`)
|
|
354
|
+
- **Type**: Boolean
|
|
355
|
+
- **Default**: `false`
|
|
356
|
+
- **Purpose**: Include AI-generated memories in retrieval
|
|
357
|
+
- **When to use**: Need full dialog context
|
|
358
|
+
- **Recommendation**: `false` (user facts are usually more important)
|
|
359
|
+
|
|
360
|
+
#### Search Filters (JSON) (`searchFilters`)
|
|
361
|
+
- **Type**: JSON String
|
|
362
|
+
- **Purpose**: Metadata filters for precise retrieval
|
|
363
|
+
- **Example**:
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"category": "user_preferences",
|
|
367
|
+
"priority": "high"
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
- **Recommendation**: Leave empty unless you need filtering
|
|
371
|
+
|
|
372
|
+
#### Fields (Comma Separated) (`fields`)
|
|
373
|
+
- **Type**: String
|
|
374
|
+
- **Purpose**: Custom response fields from Mem0
|
|
375
|
+
- **Example**: `"id,content,created_at,metadata"`
|
|
376
|
+
- **Recommendation**: Leave empty (default fields sufficient)
|
|
136
377
|
|
|
137
|
-
|
|
378
|
+
---
|
|
138
379
|
|
|
139
|
-
|
|
140
|
-
|
|
380
|
+
## Field Importance Guide
|
|
381
|
+
|
|
382
|
+
### ��� CRITICAL (Must Configure)
|
|
383
|
+
- **User ID**: Wrong value = mixed user memory
|
|
384
|
+
- **Agent ID**: Wrong value = shared agent memory
|
|
385
|
+
|
|
386
|
+
### ��� HIGH (Should Configure)
|
|
387
|
+
- **Buffer Limit**: Controls token usage significantly
|
|
388
|
+
- **Run ID**: Prevents cross-session contamination
|
|
389
|
+
- **Store Strategy**: Affects long-term memory quality
|
|
390
|
+
|
|
391
|
+
### ��� MEDIUM (May Configure)
|
|
392
|
+
- **Fallback to Search**: Improves context recall
|
|
393
|
+
- **Max Context Characters**: Controls token budget
|
|
394
|
+
- **Search Mode**: Fine-tunes retrieval quality
|
|
395
|
+
|
|
396
|
+
### ��� LOW (Optional Tuning)
|
|
397
|
+
- **Top K**: Adjust based on context needs
|
|
398
|
+
- **Infer on Store**: Advanced feature
|
|
399
|
+
- **Rerank**: Quality vs speed tradeoff
|
|
141
400
|
|
|
142
401
|
---
|
|
143
402
|
|
|
144
|
-
##
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
### `Fallback to Search on Buffer Miss` (`fallbackToSearchOnBufferMiss`) *(shown when `memoryMode=conversation_pairs`)*
|
|
193
|
-
- Required: **No** (default `true`)
|
|
194
|
-
- What it is: if buffer seems unrelated to current query, fallback to semantic search.
|
|
195
|
-
- Why it exists: combines low-cost recent context with semantic recovery when needed.
|
|
196
|
-
- Importance: **High** for recall quality.
|
|
197
|
-
|
|
198
|
-
### `Search Mode` (`searchMode`)
|
|
199
|
-
- Required: **No**
|
|
200
|
-
- Options:
|
|
201
|
-
- `balanced` (recommended): factual prioritization + safe fallback behavior.
|
|
202
|
-
- `strict_facts`: stricter factual preference.
|
|
203
|
-
- `legacy`: compatibility behavior.
|
|
204
|
-
- Why it exists: controls post-processing strategy for search results.
|
|
205
|
-
- Importance: **Medium/High**.
|
|
206
|
-
|
|
207
|
-
### `Max Context Characters` (`maxContextChars`)
|
|
208
|
-
- Required: **No** (default `700`)
|
|
209
|
-
- What it is: max total characters injected into AI memory context.
|
|
210
|
-
- Why it exists: direct cap on memory payload size (and token growth).
|
|
211
|
-
- Importance: **High** for predictable token usage.
|
|
212
|
-
|
|
213
|
-
### `Default Query` (`defaultQuery`)
|
|
214
|
-
- Required: **No**
|
|
215
|
-
- What it is: fallback search query when no user input can be extracted.
|
|
216
|
-
- Why it exists: avoids empty retrieval queries in edge workflows.
|
|
217
|
-
- Importance: **Medium**.
|
|
218
|
-
|
|
219
|
-
### `Rerank` (`rerank`)
|
|
220
|
-
- Required: **No** (default `false`)
|
|
221
|
-
- What it is: enables Mem0 reranking on search.
|
|
222
|
-
- Why it exists: can improve relevance in some datasets.
|
|
223
|
-
- Importance: **Situational** (quality vs latency/cost tradeoff).
|
|
224
|
-
|
|
225
|
-
### `Fields (Comma Separated)` (`fields`)
|
|
226
|
-
- Required: **No**
|
|
227
|
-
- What it is: optional fields sent in search payload.
|
|
228
|
-
- Why it exists: advanced response shaping/customization.
|
|
229
|
-
- Importance: **Advanced usage**.
|
|
230
|
-
|
|
231
|
-
### `Include Assistant Memories` (`includeAssistantMemories`)
|
|
232
|
-
- Required: **No** (default `false`)
|
|
233
|
-
- What it is: include assistant-generated memory entries in retrieval.
|
|
234
|
-
- Why it exists: some scenarios need full dialog context; others prefer user facts only.
|
|
235
|
-
- Importance: **Medium**.
|
|
236
|
-
|
|
237
|
-
### `Search Filters (JSON)` (`searchFilters`)
|
|
238
|
-
- Required: **No**
|
|
239
|
-
- What it is: JSON filters passed to Mem0 `POST /search`.
|
|
240
|
-
- Why it exists: metadata-filtered retrieval (precision control).
|
|
241
|
-
- Importance: **High** for advanced production tuning.
|
|
242
|
-
- Note: invalid JSON returns a validation error.
|
|
243
|
-
|
|
244
|
-
### `Allow Empty Context` (`allowEmptyContext`)
|
|
245
|
-
- Required: **No** (default `false`)
|
|
246
|
-
- What it is: allows returning empty context without aggressive fallback.
|
|
247
|
-
- Why it exists: explicit control over strict retrieval behavior.
|
|
248
|
-
- Importance: **Medium**.
|
|
249
|
-
|
|
250
|
-
## Storage Controls
|
|
251
|
-
|
|
252
|
-
### `Store Strategy` (`storeStrategy`)
|
|
253
|
-
- Required: **No**
|
|
254
|
-
- Options:
|
|
255
|
-
- `conversation` (compatible default): store user and assistant turns.
|
|
256
|
-
- `facts_only`: store user-side factual signals only.
|
|
257
|
-
- Why it exists: lets you choose between conversational trace and lower-noise factual memory.
|
|
258
|
-
- Importance: **High** for long-term memory quality.
|
|
259
|
-
|
|
260
|
-
### `Infer on Store` (`infer`)
|
|
261
|
-
- Required: **No** (default `false`)
|
|
262
|
-
- What it is: passes infer flag to Mem0 on memory write.
|
|
263
|
-
- Why it exists: enables Mem0 inference/extraction workflows where appropriate.
|
|
264
|
-
- Importance: **Situational**.
|
|
403
|
+
## Performance & Token Optimization
|
|
404
|
+
|
|
405
|
+
### v0.2.13: Sliding Window Optimization
|
|
406
|
+
|
|
407
|
+
#### Memory Loading Strategy
|
|
408
|
+
|
|
409
|
+
```
|
|
410
|
+
v0.2.12 (OLD) v0.2.13 (NEW)
|
|
411
|
+
|
|
412
|
+
Turn 1: Fetch: 40 msgs ----------> Fetch: 40 msgs
|
|
413
|
+
Load: 40 msgs Load: 40 msgs
|
|
414
|
+
Cache: No Cache: Yes ✓
|
|
415
|
+
|
|
416
|
+
Turn 2: Fetch: 40 msgs ----------> Fetch: 1 msg
|
|
417
|
+
Load: 40 msgs Load: [msg2...msg40]
|
|
418
|
+
Duplicate: YES ✗ Duplicate: NO ✓
|
|
419
|
+
|
|
420
|
+
Turn 3: Fetch: 40 msgs ----------> Fetch: 1 msg
|
|
421
|
+
Load: 40 msgs Load: [msg4...msg41]
|
|
422
|
+
Efficiency: LOW ✗ Efficiency: 97.5% ↑ ✓
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
#### Cost Comparison (5-turn conversation)
|
|
426
|
+
|
|
427
|
+
| Metric | Old v0.2.12 | New v0.2.13 | Savings |
|
|
428
|
+
|--------|------------|------------|---------|
|
|
429
|
+
| Total messages | 200 | 44 | 78% ↓ |
|
|
430
|
+
| Total tokens | 20,000 | 1,200 | 94% ↓ |
|
|
431
|
+
| API calls | 5 | 1 | 80% ↓ |
|
|
432
|
+
| Time | 2.5s | 0.5s | 80% ↓ |
|
|
433
|
+
|
|
434
|
+
#### Tuning Token Usage
|
|
435
|
+
|
|
436
|
+
**Scenario: High-volume chatbot (100 conversations/hour)**
|
|
437
|
+
|
|
438
|
+
```
|
|
439
|
+
Base costs per turn:
|
|
440
|
+
• Turn 1: 1000 tokens (full buffer load)
|
|
441
|
+
• Turns 2-20: 200 tokens each (sliding window)
|
|
442
|
+
|
|
443
|
+
Total per conversation: ~4800 tokens
|
|
444
|
+
|
|
445
|
+
With v0.2.13:
|
|
446
|
+
Old: 100 convs × 5 turns × 800 tokens = 400K tokens/hour
|
|
447
|
+
New: 100 convs × (1000 + 4×200) = 180K tokens/hour
|
|
448
|
+
Savings: 55% ↓
|
|
449
|
+
```
|
|
265
450
|
|
|
266
451
|
---
|
|
267
452
|
|
|
268
453
|
## Recommended Configurations
|
|
269
454
|
|
|
270
|
-
|
|
455
|
+
### Configuration A: Lightweight (Low Token Usage)
|
|
456
|
+
|
|
457
|
+
**Use case**: Chatbots, customer support, high-volume
|
|
458
|
+
|
|
459
|
+
```
|
|
460
|
+
User ID: {user_id}
|
|
461
|
+
Agent ID: support_bot
|
|
462
|
+
Run ID: {session_id}
|
|
463
|
+
|
|
464
|
+
Buffer Limit: 10
|
|
465
|
+
Fallback to Search: true
|
|
466
|
+
Search Mode: balanced
|
|
467
|
+
Top K: 5
|
|
468
|
+
Max Context Characters: 500
|
|
469
|
+
Store Strategy: facts_only
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**Expected tokens per turn (after Turn 1)**: ~150
|
|
473
|
+
|
|
474
|
+
### Configuration B: Balanced (Recommended)
|
|
475
|
+
|
|
476
|
+
**Use case**: General AI workflows, recommendations, Q&A
|
|
271
477
|
|
|
272
|
-
|
|
478
|
+
```
|
|
479
|
+
User ID: {user_id}
|
|
480
|
+
Agent ID: {agent_id}
|
|
481
|
+
Run ID: {conversation_id}
|
|
482
|
+
|
|
483
|
+
Buffer Limit: 20
|
|
484
|
+
Fallback to Search: true
|
|
485
|
+
Search Mode: balanced
|
|
486
|
+
Top K: 10
|
|
487
|
+
Max Context Characters: 700
|
|
488
|
+
Store Strategy: conversation
|
|
489
|
+
```
|
|
273
490
|
|
|
274
|
-
|
|
275
|
-
2. `searchMode = balanced`
|
|
276
|
-
3. `topK = 3..6`
|
|
277
|
-
4. `maxContextChars = 500..900`
|
|
278
|
-
5. `storeStrategy = facts_only`
|
|
279
|
-
6. `includeAssistantMemories = false`
|
|
491
|
+
**Expected tokens per turn (after Turn 1)**: ~250
|
|
280
492
|
|
|
281
|
-
|
|
493
|
+
### Configuration C: Rich Context (High Quality)
|
|
282
494
|
|
|
283
|
-
Use
|
|
495
|
+
**Use case**: Complex reasoning, multi-step workflows, research
|
|
496
|
+
|
|
497
|
+
```
|
|
498
|
+
User ID: {user_id}
|
|
499
|
+
Agent ID: {agent_id}
|
|
500
|
+
Run ID: {run_id}
|
|
501
|
+
|
|
502
|
+
Buffer Limit: 50
|
|
503
|
+
Fallback to Search: true
|
|
504
|
+
Search Mode: strict_facts
|
|
505
|
+
Top K: 20
|
|
506
|
+
Max Context Characters: 1500
|
|
507
|
+
Store Strategy: conversation
|
|
508
|
+
Include Assistant Memories: true
|
|
509
|
+
```
|
|
284
510
|
|
|
285
|
-
|
|
286
|
-
2. `bufferLimit = 10..20`
|
|
287
|
-
3. `fallbackToSearchOnBufferMiss = true`
|
|
288
|
-
4. `storeStrategy = conversation`
|
|
511
|
+
**Expected tokens per turn (after Turn 1)**: ~600
|
|
289
512
|
|
|
290
513
|
---
|
|
291
514
|
|
|
292
515
|
## Troubleshooting
|
|
293
516
|
|
|
294
|
-
###
|
|
517
|
+
### ❌ Problem: `chat_history` is empty
|
|
518
|
+
|
|
519
|
+
**Check:**
|
|
520
|
+
1. **User ID & Agent ID**: Are they correct and consistent?
|
|
521
|
+
```
|
|
522
|
+
✓ "alice" + "support_bot" = OK
|
|
523
|
+
✗ "alice" + "support_bot2" = Different memory!
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
2. **Credentials**: Test with:
|
|
527
|
+
```bash
|
|
528
|
+
curl -X GET http://localhost:8000/health \
|
|
529
|
+
-H "X-API-Key: your-key"
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
3. **Mem0 Server**: Is it running and responding?
|
|
533
|
+
- Check Mem0 logs
|
|
534
|
+
- Test `/memories` endpoint directly
|
|
295
535
|
|
|
296
|
-
|
|
536
|
+
4. **Run ID**: If set, ensure it matches previous session
|
|
297
537
|
|
|
298
|
-
|
|
299
|
-
2. `runId` matches the same session where memory was stored.
|
|
300
|
-
3. `searchFilters` is valid and not overly restrictive.
|
|
301
|
-
4. `allowEmptyContext` behavior matches your expectations.
|
|
538
|
+
**Solution**: Reset User ID and Agent ID, try again.
|
|
302
539
|
|
|
303
|
-
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
### ❌ Problem: Token usage is too high
|
|
304
543
|
|
|
305
|
-
|
|
544
|
+
**Tuning steps:**
|
|
306
545
|
|
|
307
|
-
1. Lower
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
546
|
+
1. **Lower Buffer Limit**
|
|
547
|
+
```
|
|
548
|
+
Before: bufferLimit = 50
|
|
549
|
+
After: bufferLimit = 10
|
|
550
|
+
Effect: 80% token reduction
|
|
551
|
+
```
|
|
311
552
|
|
|
312
|
-
|
|
553
|
+
2. **Reduce Max Context**
|
|
554
|
+
```
|
|
555
|
+
Before: maxContextChars = 1500
|
|
556
|
+
After: maxContextChars = 500
|
|
557
|
+
Effect: 67% token reduction
|
|
558
|
+
```
|
|
313
559
|
|
|
314
|
-
|
|
560
|
+
3. **Use Facts Only**
|
|
561
|
+
```
|
|
562
|
+
Before: storeStrategy = conversation
|
|
563
|
+
After: storeStrategy = facts_only
|
|
564
|
+
Effect: 40% reduction in stored data
|
|
565
|
+
```
|
|
315
566
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
567
|
+
4. **Lower Top K**
|
|
568
|
+
```
|
|
569
|
+
Before: topK = 20
|
|
570
|
+
After: topK = 5
|
|
571
|
+
Effect: 60% token reduction
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
**Recommendation**: Combine steps 1 + 2 for 85%+ reduction.
|
|
320
575
|
|
|
321
576
|
---
|
|
322
577
|
|
|
323
|
-
|
|
578
|
+
### ❌ Problem: Memory quality is poor (wrong context)
|
|
579
|
+
|
|
580
|
+
**Debugging:**
|
|
581
|
+
|
|
582
|
+
1. **Check Store Strategy**
|
|
583
|
+
```
|
|
584
|
+
If noisy: Set storeStrategy = facts_only
|
|
585
|
+
If incomplete: Set storeStrategy = conversation
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
2. **Enable Search Fallback**
|
|
589
|
+
```
|
|
590
|
+
fallbackToSearchOnBufferMiss = true
|
|
591
|
+
searchMode = strict_facts
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
3. **Increase Context Window**
|
|
595
|
+
```
|
|
596
|
+
Before: bufferLimit = 5
|
|
597
|
+
After: bufferLimit = 20
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
4. **Filter Irrelevant Memories**
|
|
601
|
+
```json
|
|
602
|
+
searchFilters: {
|
|
603
|
+
"exclude_category": "debug",
|
|
604
|
+
"priority": "high"
|
|
605
|
+
}
|
|
606
|
+
```
|
|
324
607
|
|
|
325
|
-
|
|
326
|
-
2. Use stable ID design (`userId`, `agentId`, `runId`) to avoid context leakage.
|
|
327
|
-
3. This node is intended for safe memory operations in normal workflow usage.
|
|
608
|
+
**Recommendation**: v0.2.13 sliding window ensures recent context is always fresh!
|
|
328
609
|
|
|
329
610
|
---
|
|
330
611
|
|
|
331
|
-
|
|
612
|
+
### ❌ Problem: Memory not persisting between runs
|
|
332
613
|
|
|
333
|
-
|
|
614
|
+
**Check:**
|
|
334
615
|
|
|
335
|
-
|
|
616
|
+
1. **Mem0 Database**: Is persistence enabled?
|
|
617
|
+
- Check Mem0 configuration
|
|
618
|
+
- Ensure database is not in-memory only
|
|
619
|
+
|
|
620
|
+
2. **User ID / Agent ID**: Must be identical across runs
|
|
621
|
+
```
|
|
622
|
+
✓ Same "alice" + "support_bot"
|
|
623
|
+
✗ "alice123" vs "alice" = Different memory!
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
3. **Storage**: Verify messages are being saved:
|
|
627
|
+
```bash
|
|
628
|
+
curl -X GET http://localhost:8000/memories \
|
|
629
|
+
-H "X-API-Key: key" \
|
|
630
|
+
-d '{"user_id":"alice","agent_id":"support_bot"}'
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
---
|
|
634
|
+
|
|
635
|
+
## Safety & Security
|
|
636
|
+
|
|
637
|
+
### Best Practices
|
|
638
|
+
|
|
639
|
+
✅ **DO**:
|
|
640
|
+
- Store API keys **only in n8n Credentials**
|
|
641
|
+
- Use **stable, predictable IDs** for user/agent
|
|
642
|
+
- Set **Run ID** for session isolation
|
|
643
|
+
- **Validate** user input before storing
|
|
644
|
+
- **Audit** memory retrievals in production
|
|
645
|
+
|
|
646
|
+
❌ **DON'T**:
|
|
647
|
+
- Hardcode API keys in workflows
|
|
648
|
+
- Mix users' data (wrong ID values)
|
|
649
|
+
- Store PII without encryption
|
|
650
|
+
- Skip Run ID in multi-tenant workflows
|
|
651
|
+
- Expose API keys in logs
|
|
652
|
+
|
|
653
|
+
### Memory Isolation
|
|
654
|
+
|
|
655
|
+
```
|
|
656
|
+
┌─────────────────────────────────────────┐
|
|
657
|
+
│ User Memory Isolation (v0.2.13) │
|
|
658
|
+
├─────────────────────────────────────────┤
|
|
659
|
+
│ │
|
|
660
|
+
│ Alice's Memory │
|
|
661
|
+
│ ├─ user_id = "alice" │
|
|
662
|
+
│ ├─ agent_id = "support_bot" │
|
|
663
|
+
│ └─ run_id = "session_001" (optional) │
|
|
664
|
+
│ │
|
|
665
|
+
│ Bob's Memory │
|
|
666
|
+
│ ├─ user_id = "bob" │
|
|
667
|
+
│ ├─ agent_id = "support_bot" │
|
|
668
|
+
│ └─ run_id = "session_002" (optional) │
|
|
669
|
+
│ │
|
|
670
|
+
│ ✓ Fully isolated (different user_ids) │
|
|
671
|
+
│ │
|
|
672
|
+
└─────────────────────────────────────────┘
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
## Version History
|
|
678
|
+
|
|
679
|
+
### v0.2.13 (2026-04-17) - Current
|
|
680
|
+
|
|
681
|
+
��� **Major Performance Release**
|
|
682
|
+
- Implemented sliding window memory optimization
|
|
683
|
+
- **95% token reduction** after 1st interaction
|
|
684
|
+
- Cache per user+agent (global scope)
|
|
685
|
+
- Optimized for production multi-turn conversations
|
|
686
|
+
- TypeScript clean, fully tested
|
|
687
|
+
|
|
688
|
+
**Changes**:
|
|
689
|
+
- Phase 1: Added tracking infrastructure
|
|
690
|
+
- Phase 2: Implemented sliding window logic
|
|
691
|
+
- Phase 3: Added cache invalidation
|
|
692
|
+
- No breaking changes (transparent optimization)
|
|
693
|
+
|
|
694
|
+
**Upgrade**: Safe to upgrade immediately. No workflow changes needed.
|
|
695
|
+
|
|
696
|
+
### v0.2.12 (2026-04-16)
|
|
697
|
+
|
|
698
|
+
- Removed non-functional `semantic_facts` mode
|
|
699
|
+
- Hardcoded `conversation_pairs` as default
|
|
700
|
+
- Simplified memory retrieval logic
|
|
701
|
+
|
|
702
|
+
### v0.2.11 (2026-04-15)
|
|
703
|
+
|
|
704
|
+
- Fixed 3 critical bugs in message handling
|
|
705
|
+
- Improved API response parsing
|
|
336
706
|
|
|
337
707
|
---
|
|
338
708
|
|
|
339
709
|
## License
|
|
340
710
|
|
|
341
711
|
MIT
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## Contributing
|
|
716
|
+
|
|
717
|
+
This is a community-maintained package. Contributions welcome!
|
|
718
|
+
|
|
719
|
+
```
|
|
720
|
+
GitHub: https://github.com/kallbuloso/n8n-nodes-mem0-self
|
|
721
|
+
Issues: https://github.com/kallbuloso/n8n-nodes-mem0-self/issues
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
---
|
|
725
|
+
|
|
726
|
+
## Disclaimer
|
|
727
|
+
|
|
728
|
+
⚠️ **This package is independent and community-maintained.**
|
|
729
|
+
|
|
730
|
+
- NOT affiliated with Mem0 Inc.
|
|
731
|
+
- NOT officially supported by Mem0
|
|
732
|
+
- Use at your own risk
|
|
733
|
+
- For self-hosted Mem0 OSS only
|
|
734
|
+
- No commercial support
|
|
735
|
+
|
|
736
|
+
For Mem0 Cloud, use official Mem0 integrations.
|
|
737
|
+
|
|
738
|
+
---
|
|
739
|
+
|
|
740
|
+
**Last Updated**: April 17, 2026 | Version 0.2.13
|