UNPKG

@langchain/community

Version:
1 lines 3.9 kB
{"version":3,"file":"upstash_redis.cjs","names":["BaseListChatMessageHistory","Redis"],"sources":["../../../src/stores/message/upstash_redis.ts"],"sourcesContent":["import { Redis, type RedisConfigNodejs } from \"@upstash/redis\";\nimport { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n StoredMessage,\n mapChatMessagesToStoredMessages,\n mapStoredMessagesToChatMessages,\n} from \"@langchain/core/messages\";\n\n/**\n * Type definition for the input parameters required to initialize an\n * instance of the UpstashRedisChatMessageHistory class.\n */\nexport type UpstashRedisChatMessageHistoryInput = {\n sessionId: string;\n sessionTTL?: number;\n config?: RedisConfigNodejs;\n client?: Redis;\n};\n\n/**\n * Class used to store chat message history in Redis. It provides methods\n * to add, get, and clear messages.\n */\nexport class UpstashRedisChatMessageHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"upstash_redis\"];\n\n get lc_secrets() {\n return {\n \"config.url\": \"UPSTASH_REDIS_REST_URL\",\n \"config.token\": \"UPSTASH_REDIS_REST_TOKEN\",\n };\n }\n\n public client: Redis;\n\n private sessionId: string;\n\n private sessionTTL?: number;\n\n constructor(fields: UpstashRedisChatMessageHistoryInput) {\n super(fields);\n const { sessionId, sessionTTL, config, client } = fields;\n if (client) {\n this.client = client;\n } else if (config) {\n this.client = new Redis(config);\n } else {\n throw new Error(\n `Upstash Redis message stores require either a config object or a pre-configured client.`\n );\n }\n this.sessionId = sessionId;\n this.sessionTTL = sessionTTL;\n }\n\n /**\n * Retrieves the chat messages from the Redis database.\n * @returns An array of BaseMessage instances representing the chat history.\n */\n async getMessages(): Promise<BaseMessage[]> {\n const rawStoredMessages: StoredMessage[] =\n await this.client.lrange<StoredMessage>(this.sessionId, 0, -1);\n\n const orderedMessages = rawStoredMessages.reverse();\n const previousMessages = orderedMessages.filter(\n (x): x is StoredMessage =>\n x.type !== undefined && x.data.content !== undefined\n );\n return mapStoredMessagesToChatMessages(previousMessages);\n }\n\n /**\n * Adds a new message to the chat history in the Redis database.\n * @param message The message to be added to the chat history.\n * @returns Promise resolving to void.\n */\n async addMessage(message: BaseMessage): Promise<void> {\n const messageToAdd = mapChatMessagesToStoredMessages([message]);\n await this.client.lpush(this.sessionId, JSON.stringify(messageToAdd[0]));\n if (this.sessionTTL) {\n await this.client.expire(this.sessionId, this.sessionTTL);\n }\n }\n\n /**\n * Deletes all messages from the chat history in the Redis database.\n * @returns Promise resolving to void.\n */\n async clear(): Promise<void> {\n await this.client.del(this.sessionId);\n }\n}\n"],"mappings":";;;;;;;;;;;AAwBA,IAAa,iCAAb,cAAoDA,6BAAAA,2BAA2B;CAC7E,eAAe;EAAC;EAAa;EAAU;EAAW;EAAgB;CAElE,IAAI,aAAa;AACf,SAAO;GACL,cAAc;GACd,gBAAgB;GACjB;;CAGH;CAEA;CAEA;CAEA,YAAY,QAA6C;AACvD,QAAM,OAAO;EACb,MAAM,EAAE,WAAW,YAAY,QAAQ,WAAW;AAClD,MAAI,OACF,MAAK,SAAS;WACL,OACT,MAAK,SAAS,IAAIC,eAAAA,MAAM,OAAO;MAE/B,OAAM,IAAI,MACR,0FACD;AAEH,OAAK,YAAY;AACjB,OAAK,aAAa;;;;;;CAOpB,MAAM,cAAsC;AAS1C,UAAA,GAAA,yBAAA,kCAPE,MAAM,KAAK,OAAO,OAAsB,KAAK,WAAW,GAAG,GAAG,EAEtB,SAAS,CACV,QACtC,MACC,EAAE,SAAS,KAAA,KAAa,EAAE,KAAK,YAAY,KAAA,EAC9C,CACuD;;;;;;;CAQ1D,MAAM,WAAW,SAAqC;EACpD,MAAM,gBAAA,GAAA,yBAAA,iCAA+C,CAAC,QAAQ,CAAC;AAC/D,QAAM,KAAK,OAAO,MAAM,KAAK,WAAW,KAAK,UAAU,aAAa,GAAG,CAAC;AACxE,MAAI,KAAK,WACP,OAAM,KAAK,OAAO,OAAO,KAAK,WAAW,KAAK,WAAW;;;;;;CAQ7D,MAAM,QAAuB;AAC3B,QAAM,KAAK,OAAO,IAAI,KAAK,UAAU"}