Cassandra: support for non-AstraDB databases (#2380)
* Added support for Contact points * Reworded some parameters depending on astra / local cassandra usage * Added username Successor of https://github.com/langflow-ai/langflow/pull/2206 but with the new framework
This commit is contained in:
commit
070df4d302
1 changed files with 55 additions and 16 deletions
|
|
@ -4,6 +4,7 @@ from langchain_community.vectorstores import Cassandra
|
||||||
|
|
||||||
from langflow.base.vectorstores.model import LCVectorStoreComponent
|
from langflow.base.vectorstores.model import LCVectorStoreComponent
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
|
from langflow.inputs import DictInput
|
||||||
from langflow.io import (
|
from langflow.io import (
|
||||||
DataInput,
|
DataInput,
|
||||||
DropdownInput,
|
DropdownInput,
|
||||||
|
|
@ -23,24 +24,30 @@ class CassandraVectorStoreComponent(LCVectorStoreComponent):
|
||||||
icon = "Cassandra"
|
icon = "Cassandra"
|
||||||
|
|
||||||
inputs = [
|
inputs = [
|
||||||
|
MessageTextInput(name="database_ref",
|
||||||
|
display_name="Contact Points / Astra Database ID",
|
||||||
|
info="Contact points for the database (or AstraDB database ID)",
|
||||||
|
required=True),
|
||||||
|
MessageTextInput(name="username",
|
||||||
|
display_name="Username",
|
||||||
|
info="Username for the database (leave empty for AstraDB)."),
|
||||||
SecretStrInput(
|
SecretStrInput(
|
||||||
name="token",
|
name="token",
|
||||||
display_name="Token",
|
display_name="Password / AstraDB Token",
|
||||||
info="Authentication token for accessing Cassandra on Astra DB.",
|
info="User password for the database (or AstraDB token).",
|
||||||
required=True,
|
required=True
|
||||||
),
|
|
||||||
MessageTextInput(name="database_id", display_name="Database ID", info="The Astra database ID.", required=True),
|
|
||||||
MessageTextInput(
|
|
||||||
name="table_name",
|
|
||||||
display_name="Table Name",
|
|
||||||
info="The name of the table where vectors will be stored.",
|
|
||||||
required=True,
|
|
||||||
),
|
),
|
||||||
MessageTextInput(
|
MessageTextInput(
|
||||||
name="keyspace",
|
name="keyspace",
|
||||||
display_name="Keyspace",
|
display_name="Keyspace",
|
||||||
info="Optional key space within Astra DB. The keyspace should already be created.",
|
info="Table Keyspace (or AstraDB namespace).",
|
||||||
advanced=False,
|
required=True,
|
||||||
|
),
|
||||||
|
MessageTextInput(
|
||||||
|
name="table_name",
|
||||||
|
display_name="Table Name",
|
||||||
|
info="The name of the table (or AstraDB collection) where vectors will be stored.",
|
||||||
|
required=True,
|
||||||
),
|
),
|
||||||
IntInput(
|
IntInput(
|
||||||
name="ttl_seconds",
|
name="ttl_seconds",
|
||||||
|
|
@ -69,6 +76,13 @@ class CassandraVectorStoreComponent(LCVectorStoreComponent):
|
||||||
value="Sync",
|
value="Sync",
|
||||||
advanced=True,
|
advanced=True,
|
||||||
),
|
),
|
||||||
|
DictInput(
|
||||||
|
name="cluster_kwargs",
|
||||||
|
display_name="Cluster arguments",
|
||||||
|
info="Optional dictionary of additional keyword arguments for the Cassandra cluster.",
|
||||||
|
advanced=True,
|
||||||
|
is_list=True
|
||||||
|
),
|
||||||
MultilineInput(name="search_query", display_name="Search Query"),
|
MultilineInput(name="search_query", display_name="Search Query"),
|
||||||
DataInput(
|
DataInput(
|
||||||
name="ingest_data",
|
name="ingest_data",
|
||||||
|
|
@ -96,10 +110,35 @@ class CassandraVectorStoreComponent(LCVectorStoreComponent):
|
||||||
"Could not import cassio integration package. " "Please install it with `pip install cassio`."
|
"Could not import cassio integration package. " "Please install it with `pip install cassio`."
|
||||||
)
|
)
|
||||||
|
|
||||||
cassio.init(
|
from uuid import UUID
|
||||||
database_id=self.database_id,
|
|
||||||
token=self.token,
|
database_ref = self.database_ref
|
||||||
)
|
|
||||||
|
try:
|
||||||
|
UUID(self.database_ref)
|
||||||
|
is_astra = True
|
||||||
|
except ValueError:
|
||||||
|
is_astra = False
|
||||||
|
if "," in self.database_ref:
|
||||||
|
# use a copy because we can't change the type of the parameter
|
||||||
|
database_ref = self.database_ref.split(",")
|
||||||
|
|
||||||
|
if is_astra:
|
||||||
|
cassio.init(
|
||||||
|
database_id=database_ref,
|
||||||
|
token=self.token,
|
||||||
|
cluster_kwargs=self.cluster_kwargs,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
cassio.init(
|
||||||
|
contact_points=database_ref,
|
||||||
|
username=self.username,
|
||||||
|
password=self.token,
|
||||||
|
cluster_kwargs=self.cluster_kwargs,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not self.ttl_seconds:
|
||||||
|
self.ttl_seconds = None
|
||||||
|
|
||||||
documents = []
|
documents = []
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue