Skip to content

Commit

Permalink
Adds a connection pool to RedisChatHistory (#5963)
Browse files Browse the repository at this point in the history
  • Loading branch information
itamarhaber committed Jul 2, 2024
1 parent f482048 commit 70240f9
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
4 changes: 2 additions & 2 deletions libs/langchain-redis/src/chat_histories.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {
createClient,
RedisClientOptions,
RedisClientType,
RedisModules,
Expand All @@ -12,6 +11,7 @@ import {
mapChatMessagesToStoredMessages,
mapStoredMessagesToChatMessages,
} from "@langchain/core/messages";
import { pool } from "./connections.js";

/**
* Type for the input to the `RedisChatMessageHistory` constructor.
Expand Down Expand Up @@ -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
Expand Down
14 changes: 14 additions & 0 deletions libs/langchain-redis/src/connections.ts
Original file line number Diff line number Diff line change
@@ -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();

0 comments on commit 70240f9

Please sign in to comment.