@langchain/community
Version:
Third-party integrations for LangChain.js
66 lines (65 loc) • 2.23 kB
JavaScript
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
import { mapChatMessagesToStoredMessages, mapStoredMessagesToChatMessages } from "@langchain/core/messages";
import { makeFunctionReference } from "convex/server";
import { BaseListChatMessageHistory } from "@langchain/core/chat_history";
//#region src/stores/message/convex.ts
var convex_exports = /* @__PURE__ */ __exportAll({ ConvexChatMessageHistory: () => ConvexChatMessageHistory });
var ConvexChatMessageHistory = class extends BaseListChatMessageHistory {
lc_namespace = [
"langchain",
"stores",
"message",
"convex"
];
ctx;
sessionId;
table;
index;
sessionIdField;
messageTextFieldName;
insert;
lookup;
deleteMany;
constructor(config) {
super();
this.ctx = config.ctx;
this.sessionId = config.sessionId;
this.table = config.table ?? "messages";
this.index = config.index ?? "bySessionId";
this.sessionIdField = config.sessionIdField ?? "sessionId";
this.messageTextFieldName = config.messageTextFieldName ?? "message";
this.insert = config.insert ?? makeFunctionReference("langchain/db:insert");
this.lookup = config.lookup ?? makeFunctionReference("langchain/db:lookup");
this.deleteMany = config.deleteMany ?? makeFunctionReference("langchain/db:deleteMany");
}
async getMessages() {
return mapStoredMessagesToChatMessages((await this.ctx.runQuery(this.lookup, {
table: this.table,
index: this.index,
keyField: this.sessionIdField,
key: this.sessionId
})).map((doc) => doc[this.messageTextFieldName]));
}
async addMessage(message) {
const messages = mapChatMessagesToStoredMessages([message]);
const PAGE_SIZE = 16;
for (let i = 0; i < messages.length; i += PAGE_SIZE) await Promise.all(messages.slice(i, i + PAGE_SIZE).map((message) => this.ctx.runMutation(this.insert, {
table: this.table,
document: {
[this.sessionIdField]: this.sessionId,
[this.messageTextFieldName]: message
}
})));
}
async clear() {
await this.ctx.runMutation(this.deleteMany, {
table: this.table,
index: this.index,
keyField: this.sessionIdField,
key: this.sessionId
});
}
};
//#endregion
export { ConvexChatMessageHistory, convex_exports };
//# sourceMappingURL=convex.js.map