Cassandra Chat Memory
For longer-term persistence across chat sessions, you can swap out the default in-memory chatHistory that backs chat memory classes like BufferMemory for a Cassandra cluster.
Setup
First, install the Cassandra Node.js driver:
- npm
- Yarn
- pnpm
npm install cassandra-driver @langchain/openai @langchain/community
yarn add cassandra-driver @langchain/openai @langchain/community
pnpm add cassandra-driver @langchain/openai @langchain/community
Depending on your database providers, the specifics of how to connect to the database will vary. We will create a document configConnection which will be used as part of the vector store configuration.
Apache Cassandra®
const configConnection = {
  contactPoints: ['h1', 'h2'],
  localDataCenter: 'datacenter1',
  credentials: {
    username: <...> as string,
    password: <...> as string,
  },
};
Astra DB
Astra DB is a cloud-native Cassandra-as-a-Service platform.
- Create an Astra DB account.
- Create a vector enabled database.
- Create a token for your database.
const configConnection = {
  serviceProviderArgs: {
    astra: {
      token: <...> as string,
      endpoint: <...> as string,
    },
  },
};
Instead of endpoint:, you many provide property datacenterID: and optionally regionName:.
Usage
import { BufferMemory } from "langchain/memory";
import { CassandraChatMessageHistory } from "@langchain/community/stores/message/cassandra";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
// The example below uses Astra DB, but you can use any Cassandra connection
const configConnection = {
  serviceProviderArgs: {
    astra: {
      token: "<your Astra Token>" as string,
      endpoint: "<your Astra Endpoint>" as string,
    },
  },
};
const memory = new BufferMemory({
  chatHistory: new CassandraChatMessageHistory({
    ...configConnection,
    keyspace: "langchain",
    table: "message_history",
    sessionId: "<some unique session identifier>",
  }),
});
const model = new ChatOpenAI();
const chain = new ConversationChain({ llm: model, memory });
const res1 = await chain.invoke({ input: "Hi! I'm Jonathan." });
console.log({ res1 });
/*
{
  res1: {
    text: "Hello Jonathan! How can I assist you today?"
  }
}
*/
const res2 = await chain.invoke({ input: "What did I just say my name was?" });
console.log({ res2 });
/*
{
  res1: {
    text: "You said your name was Jonathan."
  }
}
*/
API Reference:
- BufferMemory from langchain/memory
- CassandraChatMessageHistory from @langchain/community/stores/message/cassandra
- ChatOpenAI from @langchain/openai
- ConversationChain from langchain/chains