-
Notifications
You must be signed in to change notification settings - Fork 0
/
valkey_chat_history.js
72 lines (70 loc) · 2.43 KB
/
valkey_chat_history.js
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { Redis } from "iovalkey";
import { BaseListChatMessageHistory } from "@langchain/core/chat_history";
import { mapChatMessagesToStoredMessages, mapStoredMessagesToChatMessages, } from "@langchain/core/messages";
export class ValkeyChatMessageHistory extends BaseListChatMessageHistory {
get lc_secrets() {
return {
"config.host": "VALKEY_HOST",
"config.port": "VALKEY_PORT",
"config.username": "VALKEY_USERNAME",
"config.password": "VALKEY_PASSWORD",
};
}
constructor(fields) {
super(fields);
Object.defineProperty(this, "lc_namespace", {
enumerable: true,
configurable: true,
writable: true,
value: ["langchain", "stores", "message", "redis"]
});
Object.defineProperty(this, "client", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "sessionId", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "sessionTTL", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
const { sessionId, sessionTTL, config, client } = fields;
this.client = (client ?? new Redis(config ?? {}));
this.sessionId = sessionId;
this.sessionTTL = sessionTTL;
}
/**
* Retrieves all chat messages from the Valkey for the current session.
*/
async getMessages() {
const rawStoredMessages = await this.client.lrange(this.sessionId, 0, -1);
const orderedMessages = rawStoredMessages
.reverse()
.map((message) => JSON.parse(message));
return mapStoredMessagesToChatMessages(orderedMessages);
}
/**
* Adds a new chat message to Valkey for the current session
*/
async addMessage(message) {
const messageToAdd = mapChatMessagesToStoredMessages([message]);
await this.client.lpush(this.sessionId, JSON.stringify(messageToAdd[0]));
if (this.sessionTTL) {
await this.client.expire(this.sessionId, this.sessionTTL);
}
}
/**
* Deletes all chat messages from Valkey for the current session.
*/
async clear() {
await this.client.del(this.sessionId);
}
}