Cassandra
Apache Cassandra® is a
NoSQL
, row-oriented, highly scalable and highly available database, well suited for storing large amounts of data.
Cassandra
is a good choice for storing chat message history because it is easy to scale and can handle a large number of writes.
This notebook goes over how to use Cassandra to store chat message history.
Setting up
To run this notebook you need either a running Cassandra
cluster or a
DataStax Astra DB
instance running in the cloud (you can get one for
free at datastax.com). Check
cassio.org for more information.
!pip install "cassio>=0.1.0"
Set up the database connection parameters and secrets
import getpass
database_mode = (input("\n(C)assandra or (A)stra DB? ")).upper()
keyspace_name = input("\nKeyspace name? ")
if database_mode == "A":
ASTRA_DB_APPLICATION_TOKEN = getpass.getpass('\nAstra DB Token ("AstraCS:...") ')
#
ASTRA_DB_SECURE_BUNDLE_PATH = input("Full path to your Secure Connect Bundle? ")
elif database_mode == "C":
CASSANDRA_CONTACT_POINTS = input(
"Contact points? (comma-separated, empty for localhost) "
).strip()
Depending on whether local or cloud-based Astra DB, create the corresponding database connection “Session” object.
from cassandra.auth import PlainTextAuthProvider
from cassandra.cluster import Cluster
if database_mode == "C":
if CASSANDRA_CONTACT_POINTS:
cluster = Cluster(
[cp.strip() for cp in CASSANDRA_CONTACT_POINTS.split(",") if cp.strip()]
)
else:
cluster = Cluster()
session = cluster.connect()
elif database_mode == "A":
ASTRA_DB_CLIENT_ID = "token"
cluster = Cluster(
cloud={
"secure_connect_bundle": ASTRA_DB_SECURE_BUNDLE_PATH,
},
auth_provider=PlainTextAuthProvider(
ASTRA_DB_CLIENT_ID,
ASTRA_DB_APPLICATION_TOKEN,
),
)
session = cluster.connect()
else:
raise NotImplementedError
Example
from langchain.memory import CassandraChatMessageHistory
message_history = CassandraChatMessageHistory(
session_id="test-session",
session=session,
keyspace=keyspace_name,
)
message_history.add_user_message("hi!")
message_history.add_ai_message("whats up?")
message_history.messages