-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemory.js
More file actions
38 lines (31 loc) · 1.26 KB
/
memory.js
File metadata and controls
38 lines (31 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const fs = require("fs");
const path = "./users.json";
// Load or initialize persistent user memory
let userMemory = {};
if (fs.existsSync(path)) {
userMemory = JSON.parse(fs.readFileSync(path, "utf8"));
}
// In-memory short-term session memory
const sessionMemory = {};
// Function to add messages to memory
function addMessage(userId, role, content) {
// ----- Short-term memory -----
if (!sessionMemory[userId]) sessionMemory[userId] = [];
sessionMemory[userId].push({ role, content });
if (sessionMemory[userId].length > 10) sessionMemory[userId].shift(); // keep last 10 messages
// ----- Long-term memory -----
if (!userMemory[userId]) userMemory[userId] = { facts: [] };
// Example: store specific facts mentioned by the user
if (role === "user" && content.toLowerCase().includes("store closes at")) {
userMemory[userId].facts.push(content);
}
// Save persistent memory to file
fs.writeFileSync(path, JSON.stringify(userMemory, null, 2));
}
// Function to retrieve memory for Gemini
function getMemory(userId) {
const shortTerm = sessionMemory[userId] || [];
const longTermFacts = (userMemory[userId]?.facts || []).join("\n");
return { shortTerm, longTermFacts };
}
module.exports = { addMessage, getMemory };