@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 4.11 kB
Source Map (JSON)
{"version":3,"file":"ioredis.cjs","names":["BaseListChatMessageHistory","Redis"],"sources":["../../../src/stores/message/ioredis.ts"],"sourcesContent":["import { Redis, RedisOptions } from \"ioredis\";\nimport { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n mapChatMessagesToStoredMessages,\n mapStoredMessagesToChatMessages,\n} from \"@langchain/core/messages\";\n\n/**\n * Type for the input parameter of the RedisChatMessageHistory\n * constructor. It includes fields for the session ID, session TTL, Redis\n * URL, Redis configuration, and Redis client.\n */\nexport type RedisChatMessageHistoryInput = {\n sessionId: string;\n sessionTTL?: number;\n url?: string;\n config?: RedisOptions;\n client?: Redis;\n};\n\n/**\n * Class used to store chat message history in Redis. It provides methods\n * to add, retrieve, and clear messages from the chat history.\n * @example\n * ```typescript\n * const chatHistory = new RedisChatMessageHistory({\n * sessionId: new Date().toISOString(),\n * sessionTTL: 300,\n * url: \"redis:\n * });\n *\n * const chain = new ConversationChain({\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * memory: { chatHistory },\n * });\n *\n * const response = await chain.invoke({\n * input: \"What did I just say my name was?\",\n * });\n * console.log({ response });\n * ```\n */\nexport class RedisChatMessageHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"ioredis\"];\n\n get lc_secrets() {\n return {\n url: \"REDIS_URL\",\n \"config.username\": \"REDIS_USERNAME\",\n \"config.password\": \"REDIS_PASSWORD\",\n };\n }\n\n public client: Redis;\n\n private sessionId: string;\n\n private sessionTTL?: number;\n\n constructor(fields: RedisChatMessageHistoryInput) {\n super(fields);\n\n const { sessionId, sessionTTL, url, config, client } = fields;\n this.client = (client ??\n (url ? new Redis(url) : new Redis(config ?? {}))) as Redis;\n this.sessionId = sessionId;\n this.sessionTTL = sessionTTL;\n }\n\n /**\n * Retrieves all messages from the chat history.\n * @returns Promise that resolves with an array of BaseMessage instances.\n */\n async getMessages(): Promise<BaseMessage[]> {\n const rawStoredMessages = await this.client.lrange(this.sessionId, 0, -1);\n const orderedMessages = rawStoredMessages\n .reverse()\n .map((message) => JSON.parse(message));\n return mapStoredMessagesToChatMessages(orderedMessages);\n }\n\n /**\n * Adds a message to the chat history.\n * @param message The message to add to the chat history.\n * @returns Promise that resolves when the message has been added.\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 * Clears all messages from the chat history.\n * @returns Promise that resolves when the chat history has been cleared.\n */\n async clear(): Promise<void> {\n await this.client.del(this.sessionId);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,IAAa,0BAAb,cAA6CA,6BAAAA,2BAA2B;CACtE,eAAe;EAAC;EAAa;EAAU;EAAW;EAAU;CAE5D,IAAI,aAAa;AACf,SAAO;GACL,KAAK;GACL,mBAAmB;GACnB,mBAAmB;GACpB;;CAGH;CAEA;CAEA;CAEA,YAAY,QAAsC;AAChD,QAAM,OAAO;EAEb,MAAM,EAAE,WAAW,YAAY,KAAK,QAAQ,WAAW;AACvD,OAAK,SAAU,WACZ,MAAM,IAAIC,QAAAA,MAAM,IAAI,GAAG,IAAIA,QAAAA,MAAM,UAAU,EAAE,CAAC;AACjD,OAAK,YAAY;AACjB,OAAK,aAAa;;;;;;CAOpB,MAAM,cAAsC;AAK1C,UAAA,GAAA,yBAAA,kCAJ0B,MAAM,KAAK,OAAO,OAAO,KAAK,WAAW,GAAG,GAAG,EAEtE,SAAS,CACT,KAAK,YAAY,KAAK,MAAM,QAAQ,CAAC,CACe;;;;;;;CAQzD,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"}