UNPKG

@langchain/community

Version:
1 lines • 4.08 kB
{"version":3,"file":"upstash_redis.cjs","names":["BaseListChatMessageHistory","fields: UpstashRedisChatMessageHistoryInput","Redis","rawStoredMessages: StoredMessage[]","message: BaseMessage"],"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,yDAA2B;CAC7E,eAAe;EAAC;EAAa;EAAU;EAAW;CAAgB;CAElE,IAAI,aAAa;AACf,SAAO;GACL,cAAc;GACd,gBAAgB;EACjB;CACF;CAED,AAAO;CAEP,AAAQ;CAER,AAAQ;CAER,YAAYC,QAA6C;EACvD,MAAM,OAAO;EACb,MAAM,EAAE,WAAW,YAAY,QAAQ,QAAQ,GAAG;AAClD,MAAI,QACF,KAAK,SAAS;WACL,QACT,KAAK,SAAS,IAAIC,sBAAM;MAExB,OAAM,IAAI,MACR,CAAC,uFAAuF,CAAC;EAG7F,KAAK,YAAY;EACjB,KAAK,aAAa;CACnB;;;;;CAMD,MAAM,cAAsC;EAC1C,MAAMC,oBACJ,MAAM,KAAK,OAAO,OAAsB,KAAK,WAAW,GAAG,GAAG;EAEhE,MAAM,kBAAkB,kBAAkB,SAAS;EACnD,MAAM,mBAAmB,gBAAgB,OACvC,CAAC,MACC,EAAE,SAAS,UAAa,EAAE,KAAK,YAAY,OAC9C;AACD,wEAAuC,iBAAiB;CACzD;;;;;;CAOD,MAAM,WAAWC,SAAqC;EACpD,MAAM,8EAA+C,CAAC,OAAQ,EAAC;EAC/D,MAAM,KAAK,OAAO,MAAM,KAAK,WAAW,KAAK,UAAU,aAAa,GAAG,CAAC;AACxE,MAAI,KAAK,YACP,MAAM,KAAK,OAAO,OAAO,KAAK,WAAW,KAAK,WAAW;CAE5D;;;;;CAMD,MAAM,QAAuB;EAC3B,MAAM,KAAK,OAAO,IAAI,KAAK,UAAU;CACtC;AACF"}