From 70240f908528a44aff8575ec74be04d10b3a117b Mon Sep 17 00:00:00 2001 From: Itamar Haber Date: Wed, 3 Jul 2024 02:07:30 +0300 Subject: [PATCH] Adds a connection pool to RedisChatHistory (#5963) --- libs/langchain-redis/src/chat_histories.ts | 4 ++-- libs/langchain-redis/src/connections.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 libs/langchain-redis/src/connections.ts diff --git a/libs/langchain-redis/src/chat_histories.ts b/libs/langchain-redis/src/chat_histories.ts index fc0903a2ee7b..cfde50359eeb 100644 --- a/libs/langchain-redis/src/chat_histories.ts +++ b/libs/langchain-redis/src/chat_histories.ts @@ -1,5 +1,4 @@ import { - createClient, RedisClientOptions, RedisClientType, RedisModules, @@ -12,6 +11,7 @@ import { mapChatMessagesToStoredMessages, mapStoredMessagesToChatMessages, } from "@langchain/core/messages"; +import { pool } from "./connections.js"; /** * Type for the input to the `RedisChatMessageHistory` constructor. @@ -68,7 +68,7 @@ export class RedisChatMessageHistory extends BaseListChatMessageHistory { super(fields); const { sessionId, sessionTTL, config, client } = fields; - this.client = (client ?? createClient(config ?? {})) as RedisClientType< + this.client = (client ?? pool.getClient(config)) as RedisClientType< RedisModules, RedisFunctions, RedisScripts diff --git a/libs/langchain-redis/src/connections.ts b/libs/langchain-redis/src/connections.ts new file mode 100644 index 000000000000..5cbeb030c473 --- /dev/null +++ b/libs/langchain-redis/src/connections.ts @@ -0,0 +1,14 @@ +import { createClient, RedisClientOptions } from "redis"; + +// A minimalistic connection pool to avoid creating multiple connections +class RedisConnectionPool { + clients = new Map(); + + getClient(config: RedisClientOptions = {}) { + if (!this.clients.has(config)) + this.clients.set(config, createClient(config)); + return this.clients.get(config); + } +} + +export const pool = new RedisConnectionPool();