n8n-nodes-mem0-self 0.2.2 → 0.2.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mem0Memory.node.d.ts","sourceRoot":"","sources":["../../../nodes/Mem0/Mem0Memory.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Mem0Memory.node.d.ts","sourceRoot":"","sources":["../../../nodes/Mem0/Mem0Memory.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,MAAM,cAAc,CAAC;AAoLtB,qBAAa,UAAW,YAAW,SAAS;IAC3C,WAAW,EAAE,oBAAoB,CAyE/B;IAEI,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiH9E,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAUvE"}
|
|
@@ -6,45 +6,75 @@ const GenericFunctions_1 = require("./GenericFunctions");
|
|
|
6
6
|
let HumanMessage;
|
|
7
7
|
let AIMessage;
|
|
8
8
|
let SystemMessage;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
let BufferWindowMemory;
|
|
10
|
+
let logWrapper;
|
|
11
|
+
(function loadDeps() {
|
|
12
|
+
const messageCandidates = ['@langchain/core/messages', 'langchain/messages'];
|
|
13
|
+
for (const moduleName of messageCandidates) {
|
|
12
14
|
try {
|
|
13
15
|
const loaded = require(moduleName);
|
|
14
16
|
if (loaded?.HumanMessage && loaded?.AIMessage) {
|
|
15
17
|
HumanMessage = loaded.HumanMessage;
|
|
16
18
|
AIMessage = loaded.AIMessage;
|
|
17
19
|
SystemMessage = loaded.SystemMessage || loaded.HumanMessage;
|
|
18
|
-
|
|
20
|
+
break;
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
catch {
|
|
22
|
-
//
|
|
24
|
+
// continue
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
if (!HumanMessage || !AIMessage) {
|
|
28
|
+
class BaseMessage {
|
|
29
|
+
constructor(content) {
|
|
30
|
+
this.lc_namespace = ['langchain_core', 'messages'];
|
|
31
|
+
this.lc_serializable = true;
|
|
32
|
+
this.additional_kwargs = {};
|
|
33
|
+
this.content = content;
|
|
34
|
+
}
|
|
31
35
|
}
|
|
36
|
+
HumanMessage = class extends BaseMessage {
|
|
37
|
+
_getType() {
|
|
38
|
+
return 'human';
|
|
39
|
+
}
|
|
40
|
+
get type() {
|
|
41
|
+
return 'human';
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
AIMessage = class extends BaseMessage {
|
|
45
|
+
_getType() {
|
|
46
|
+
return 'ai';
|
|
47
|
+
}
|
|
48
|
+
get type() {
|
|
49
|
+
return 'ai';
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
SystemMessage = class extends BaseMessage {
|
|
53
|
+
_getType() {
|
|
54
|
+
return 'system';
|
|
55
|
+
}
|
|
56
|
+
get type() {
|
|
57
|
+
return 'system';
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const memory = require('@langchain/classic/memory');
|
|
63
|
+
BufferWindowMemory = memory.BufferWindowMemory || memory.BufferMemory;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
BufferWindowMemory = null;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const aiUtils = require('@n8n/ai-utilities');
|
|
70
|
+
logWrapper = aiUtils.logWrapper;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
logWrapper = null;
|
|
32
74
|
}
|
|
33
|
-
HumanMessage = class extends BaseMessage {
|
|
34
|
-
_getType() { return 'human'; }
|
|
35
|
-
get type() { return 'human'; }
|
|
36
|
-
};
|
|
37
|
-
AIMessage = class extends BaseMessage {
|
|
38
|
-
_getType() { return 'ai'; }
|
|
39
|
-
get type() { return 'ai'; }
|
|
40
|
-
};
|
|
41
|
-
SystemMessage = class extends BaseMessage {
|
|
42
|
-
_getType() { return 'system'; }
|
|
43
|
-
get type() { return 'system'; }
|
|
44
|
-
};
|
|
45
75
|
})();
|
|
46
76
|
function toMessageContent(memory) {
|
|
47
|
-
return memory?.memory ?? memory?.text ?? memory?.content ??
|
|
77
|
+
return memory?.memory ?? memory?.text ?? memory?.content ?? '';
|
|
48
78
|
}
|
|
49
79
|
function toLangchainMessage(memory) {
|
|
50
80
|
const content = toMessageContent(memory);
|
|
@@ -55,6 +85,71 @@ function toLangchainMessage(memory) {
|
|
|
55
85
|
return new AIMessage(content);
|
|
56
86
|
return new SystemMessage(content);
|
|
57
87
|
}
|
|
88
|
+
function wrapMemoryResponse(memory, ctx) {
|
|
89
|
+
if (typeof logWrapper === 'function') {
|
|
90
|
+
return logWrapper(memory, ctx);
|
|
91
|
+
}
|
|
92
|
+
return memory;
|
|
93
|
+
}
|
|
94
|
+
class Mem0ChatHistory {
|
|
95
|
+
constructor(ctx, scope, options) {
|
|
96
|
+
this.ctx = ctx;
|
|
97
|
+
this.scope = scope;
|
|
98
|
+
this.maxMessageLength = options.maxMessageLength;
|
|
99
|
+
}
|
|
100
|
+
normalizeRole(message) {
|
|
101
|
+
const role = String(message?.role || message?.type || message?._getType?.() || '').toLowerCase();
|
|
102
|
+
if (role === 'assistant' || role === 'ai')
|
|
103
|
+
return 'assistant';
|
|
104
|
+
return 'user';
|
|
105
|
+
}
|
|
106
|
+
normalizeContent(message) {
|
|
107
|
+
if (typeof message === 'string')
|
|
108
|
+
return message;
|
|
109
|
+
return String(message?.content ?? '');
|
|
110
|
+
}
|
|
111
|
+
async append(role, content) {
|
|
112
|
+
const normalized = String(content || '').trim();
|
|
113
|
+
if (!normalized)
|
|
114
|
+
return;
|
|
115
|
+
if (normalized.length > this.maxMessageLength) {
|
|
116
|
+
throw new n8n_workflow_1.NodeOperationError(this.ctx.getNode(), `${role === 'user' ? 'User' : 'Assistant'} message is too long. Maximum supported length is ${this.maxMessageLength} characters.`);
|
|
117
|
+
}
|
|
118
|
+
await GenericFunctions_1.mem0ApiRequest.call(this.ctx, 'POST', '/memories', {
|
|
119
|
+
messages: [{ role, content: normalized }],
|
|
120
|
+
infer: false,
|
|
121
|
+
metadata: { source: 'n8n_mem0_memory_safe', role },
|
|
122
|
+
...this.scope,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async getMessages() {
|
|
126
|
+
// Search-first mode: history retrieval is handled by loadMemoryVariables/query.
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
async addMessage(message) {
|
|
130
|
+
const role = this.normalizeRole(message);
|
|
131
|
+
const content = this.normalizeContent(message);
|
|
132
|
+
await this.append(role, content);
|
|
133
|
+
}
|
|
134
|
+
async addMessages(messages) {
|
|
135
|
+
for (const message of messages || []) {
|
|
136
|
+
await this.addMessage(message);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async addUserMessage(message) {
|
|
140
|
+
await this.append('user', message);
|
|
141
|
+
}
|
|
142
|
+
async addAIMessage(message) {
|
|
143
|
+
await this.append('assistant', message);
|
|
144
|
+
}
|
|
145
|
+
async addAIChatMessage(message) {
|
|
146
|
+
await this.append('assistant', message);
|
|
147
|
+
}
|
|
148
|
+
// Safe profile: intentionally non-destructive.
|
|
149
|
+
async clear() {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
58
153
|
class Mem0Memory {
|
|
59
154
|
constructor() {
|
|
60
155
|
this.description = {
|
|
@@ -63,7 +158,7 @@ class Mem0Memory {
|
|
|
63
158
|
icon: 'file:mem0.svg',
|
|
64
159
|
group: ['transform'],
|
|
65
160
|
version: 1,
|
|
66
|
-
description: '
|
|
161
|
+
description: 'Persistent chat memory for AI Agent using Mem0 Self-Hosted OSS REST API',
|
|
67
162
|
defaults: { name: 'Mem0 Chat Memory' },
|
|
68
163
|
inputs: [],
|
|
69
164
|
outputs: [n8n_workflow_1.NodeConnectionTypes.AiMemory],
|
|
@@ -94,26 +189,26 @@ class Mem0Memory {
|
|
|
94
189
|
description: 'Optional conversation/session identifier',
|
|
95
190
|
},
|
|
96
191
|
{
|
|
97
|
-
displayName: '
|
|
98
|
-
name: 'defaultQuery',
|
|
99
|
-
type: 'string',
|
|
100
|
-
default: '',
|
|
101
|
-
description: 'Optional semantic fallback query used only when no history is found',
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
displayName: 'History Window Size',
|
|
192
|
+
displayName: 'Top K',
|
|
105
193
|
name: 'topK',
|
|
106
194
|
type: 'number',
|
|
107
195
|
default: 10,
|
|
108
196
|
typeOptions: { minValue: 1, maxValue: 50 },
|
|
109
|
-
description: 'Maximum number of
|
|
197
|
+
description: 'Maximum number of relevant memories to retrieve per query',
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
displayName: 'Default Query',
|
|
201
|
+
name: 'defaultQuery',
|
|
202
|
+
type: 'string',
|
|
203
|
+
default: '',
|
|
204
|
+
description: 'Fallback search query when no user input is available',
|
|
110
205
|
},
|
|
111
206
|
{
|
|
112
207
|
displayName: 'Rerank',
|
|
113
208
|
name: 'rerank',
|
|
114
209
|
type: 'boolean',
|
|
115
210
|
default: false,
|
|
116
|
-
description: 'Enable reranking
|
|
211
|
+
description: 'Enable reranking in Mem0 search',
|
|
117
212
|
},
|
|
118
213
|
{
|
|
119
214
|
displayName: 'Fields (Comma Separated)',
|
|
@@ -127,7 +222,7 @@ class Mem0Memory {
|
|
|
127
222
|
name: 'infer',
|
|
128
223
|
type: 'boolean',
|
|
129
224
|
default: false,
|
|
130
|
-
description: '
|
|
225
|
+
description: 'Legacy toggle kept for compatibility. Safe profile stores raw chat turns.',
|
|
131
226
|
},
|
|
132
227
|
],
|
|
133
228
|
};
|
|
@@ -135,53 +230,37 @@ class Mem0Memory {
|
|
|
135
230
|
async supplyData(itemIndex) {
|
|
136
231
|
const MAX_MESSAGE_LENGTH = 10000;
|
|
137
232
|
const MAX_QUERY_LENGTH = 2000;
|
|
138
|
-
const FALLBACK_QUERY = 'recent conversation context for this user and agent';
|
|
139
|
-
const self = this;
|
|
140
233
|
const userId = String(this.getNodeParameter('userId', itemIndex, '') || '').trim();
|
|
141
234
|
const agentId = String(this.getNodeParameter('agentId', itemIndex, '') || '').trim();
|
|
142
235
|
const runId = String(this.getNodeParameter('runId', itemIndex, '') || '').trim();
|
|
236
|
+
const topK = Math.min(50, Math.max(1, Math.floor(Number(this.getNodeParameter('topK', itemIndex, 10) || 10))));
|
|
143
237
|
const defaultQuery = String(this.getNodeParameter('defaultQuery', itemIndex, '') || '').trim();
|
|
144
|
-
const topK = Math.min(Math.max(1, Math.floor(Number(this.getNodeParameter('topK', itemIndex, 10) || 10))), 50);
|
|
145
238
|
const rerank = Boolean(this.getNodeParameter('rerank', itemIndex, false));
|
|
146
239
|
const fieldsInput = String(this.getNodeParameter('fields', itemIndex, '') || '').trim();
|
|
147
|
-
const infer = Boolean(this.getNodeParameter('infer', itemIndex, false));
|
|
148
240
|
if (!userId || !agentId) {
|
|
149
241
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'User ID and Agent ID are required.');
|
|
150
242
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
async function getRecentMessages() {
|
|
168
|
-
const response = await GenericFunctions_1.mem0ApiRequest.call(self, 'GET', '/memories', {}, buildScope());
|
|
169
|
-
const all = (0, GenericFunctions_1.extractResults)(response);
|
|
170
|
-
const ordered = normalizeMessageOrder(all);
|
|
171
|
-
const windowed = ordered.slice(-topK);
|
|
172
|
-
return windowed.map((entry) => toLangchainMessage(entry));
|
|
173
|
-
}
|
|
174
|
-
async function semanticFallbackMessages(query) {
|
|
175
|
-
const normalizedQuery = String(query || '').trim();
|
|
176
|
-
const effectiveQuery = normalizedQuery || FALLBACK_QUERY;
|
|
177
|
-
if (effectiveQuery.length > MAX_QUERY_LENGTH) {
|
|
178
|
-
throw new n8n_workflow_1.NodeOperationError(self.getNode(), `Search query is too long. Maximum supported length is ${MAX_QUERY_LENGTH} characters.`);
|
|
243
|
+
const scope = {
|
|
244
|
+
user_id: userId,
|
|
245
|
+
agent_id: agentId,
|
|
246
|
+
};
|
|
247
|
+
if (runId)
|
|
248
|
+
scope.run_id = runId;
|
|
249
|
+
const chatHistory = new Mem0ChatHistory(this, scope, {
|
|
250
|
+
maxMessageLength: MAX_MESSAGE_LENGTH,
|
|
251
|
+
});
|
|
252
|
+
const searchMessages = async (values) => {
|
|
253
|
+
const rawQuery = String(values?.input || values?.query || values?.human_input || values?.chatInput || defaultQuery || '').trim();
|
|
254
|
+
if (!rawQuery)
|
|
255
|
+
return [];
|
|
256
|
+
if (rawQuery.length > MAX_QUERY_LENGTH) {
|
|
257
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Search query is too long. Maximum supported length is ${MAX_QUERY_LENGTH} characters.`);
|
|
179
258
|
}
|
|
180
259
|
const body = {
|
|
181
|
-
query:
|
|
260
|
+
query: rawQuery,
|
|
182
261
|
top_k: topK,
|
|
183
262
|
rerank,
|
|
184
|
-
...
|
|
263
|
+
...scope,
|
|
185
264
|
};
|
|
186
265
|
if (fieldsInput) {
|
|
187
266
|
body.fields = fieldsInput
|
|
@@ -189,84 +268,53 @@ class Mem0Memory {
|
|
|
189
268
|
.map((field) => field.trim())
|
|
190
269
|
.filter((field) => field.length > 0);
|
|
191
270
|
}
|
|
192
|
-
const response = await GenericFunctions_1.mem0ApiRequest.call(
|
|
271
|
+
const response = await GenericFunctions_1.mem0ApiRequest.call(this, 'POST', '/search', body);
|
|
193
272
|
const results = (0, GenericFunctions_1.extractResults)(response);
|
|
194
273
|
return results.map((entry) => toLangchainMessage(entry));
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
const body = {
|
|
204
|
-
messages: [{ role, content: normalized }],
|
|
205
|
-
infer,
|
|
206
|
-
metadata: { source: 'n8n_mem0_memory_safe', role },
|
|
207
|
-
...buildScope(),
|
|
208
|
-
};
|
|
209
|
-
await GenericFunctions_1.mem0ApiRequest.call(self, 'POST', '/memories', body);
|
|
210
|
-
}
|
|
211
|
-
const memoryObject = {
|
|
212
|
-
memoryKeys: ['chat_history'],
|
|
213
|
-
chatHistory: {
|
|
214
|
-
async getMessages() {
|
|
215
|
-
const recent = await getRecentMessages();
|
|
216
|
-
if (recent.length > 0)
|
|
217
|
-
return recent;
|
|
218
|
-
if (!defaultQuery.trim())
|
|
219
|
-
return [];
|
|
220
|
-
return semanticFallbackMessages(defaultQuery);
|
|
221
|
-
},
|
|
222
|
-
async addMessage(message) {
|
|
223
|
-
const role = String(message?.role || message?.type || '').toLowerCase();
|
|
224
|
-
const content = String(message?.content ?? '');
|
|
225
|
-
if (role === 'assistant' || role === 'ai') {
|
|
226
|
-
await storeMessage('assistant', content);
|
|
227
|
-
return;
|
|
274
|
+
};
|
|
275
|
+
const memory = BufferWindowMemory
|
|
276
|
+
? (() => {
|
|
277
|
+
class SearchFirstBufferMemory extends BufferWindowMemory {
|
|
278
|
+
constructor(fields, retrieveFn) {
|
|
279
|
+
super(fields);
|
|
280
|
+
this.retrieveFn = retrieveFn;
|
|
228
281
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
for (const message of messages || []) {
|
|
233
|
-
await this.addMessage(message);
|
|
282
|
+
async loadMemoryVariables(values) {
|
|
283
|
+
const messages = await this.retrieveFn(values);
|
|
284
|
+
return { [this.memoryKey]: messages };
|
|
234
285
|
}
|
|
286
|
+
}
|
|
287
|
+
return new SearchFirstBufferMemory({
|
|
288
|
+
memoryKey: 'chat_history',
|
|
289
|
+
chatHistory,
|
|
290
|
+
returnMessages: true,
|
|
291
|
+
inputKey: 'input',
|
|
292
|
+
outputKey: 'output',
|
|
293
|
+
k: topK,
|
|
294
|
+
}, searchMessages);
|
|
295
|
+
})()
|
|
296
|
+
: {
|
|
297
|
+
memoryKey: 'chat_history',
|
|
298
|
+
chatHistory,
|
|
299
|
+
returnMessages: true,
|
|
300
|
+
inputKey: 'input',
|
|
301
|
+
outputKey: 'output',
|
|
302
|
+
async loadMemoryVariables(values) {
|
|
303
|
+
return { chat_history: await searchMessages(values) };
|
|
235
304
|
},
|
|
236
|
-
async
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
await storeMessage('assistant', message);
|
|
305
|
+
async saveContext(inputValues, outputValues) {
|
|
306
|
+
const userInput = String(inputValues?.input || inputValues?.query || inputValues?.human_input || inputValues?.chatInput || '').trim();
|
|
307
|
+
const assistantOutput = String(outputValues?.output || outputValues?.response || outputValues?.text || '').trim();
|
|
308
|
+
if (userInput)
|
|
309
|
+
await chatHistory.addUserMessage(userInput);
|
|
310
|
+
if (assistantOutput)
|
|
311
|
+
await chatHistory.addAIMessage(assistantOutput);
|
|
244
312
|
},
|
|
245
|
-
// Intentionally non-destructive in safe profile.
|
|
246
313
|
async clear() {
|
|
247
314
|
return;
|
|
248
315
|
},
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const query = String(values?.input || values?.query || values?.human_input || values?.chatInput || defaultQuery || '').trim();
|
|
252
|
-
let messages = await getRecentMessages();
|
|
253
|
-
if (messages.length === 0 && query) {
|
|
254
|
-
messages = await semanticFallbackMessages(query);
|
|
255
|
-
}
|
|
256
|
-
return { chat_history: messages };
|
|
257
|
-
},
|
|
258
|
-
async saveContext(inputValues, outputValues) {
|
|
259
|
-
const userInput = String(inputValues?.input || inputValues?.query || inputValues?.human_input || inputValues?.chatInput || '').trim();
|
|
260
|
-
const assistantOutput = String(outputValues?.output || outputValues?.response || outputValues?.text || '').trim();
|
|
261
|
-
await storeMessage('user', userInput);
|
|
262
|
-
await storeMessage('assistant', assistantOutput);
|
|
263
|
-
},
|
|
264
|
-
// Intentionally non-destructive in safe profile.
|
|
265
|
-
async clear() {
|
|
266
|
-
return;
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
return { response: memoryObject };
|
|
316
|
+
};
|
|
317
|
+
return { response: wrapMemoryResponse(memory, this) };
|
|
270
318
|
}
|
|
271
319
|
async execute() {
|
|
272
320
|
const items = this.getInputData();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mem0Memory.node.js","sourceRoot":"","sources":["../../../nodes/Mem0/Mem0Memory.node.ts"],"names":[],"mappings":";;;AAQA,+CAAuE;AACvE,yDAAoE;AAIpE,IAAI,YAAiB,CAAC;AACtB,IAAI,SAAc,CAAC;AACnB,IAAI,aAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Mem0Memory.node.js","sourceRoot":"","sources":["../../../nodes/Mem0/Mem0Memory.node.ts"],"names":[],"mappings":"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"}
|