feat: add cassandra components (#2056)

* Add cassandra store component

* Add cassandra search component

* revert poetry changes

* fix type

* Add cassandra icon

* Add Cassandra Message Writer

* Add cassandra message reader

* poetry

* Fix init of cass reader

* move cassio import to base project and inline imports in backend

* running make format

* remove file

* remove cassio import

* update lockfile

* Actually update lockfile:

* merge fixes
This commit is contained in:
Jordan Frazier 2024-06-10 15:04:24 -07:00 committed by GitHub
commit 11ef216c0a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 620 additions and 63 deletions

97
poetry.lock generated
View file

@ -471,17 +471,17 @@ files = [
[[package]]
name = "boto3"
version = "1.34.121"
version = "1.34.122"
description = "The AWS SDK for Python"
optional = false
python-versions = ">=3.8"
files = [
{file = "boto3-1.34.121-py3-none-any.whl", hash = "sha256:4e79e400d6d44b4eee5deda6ac0ecd08a3f5a30c45a0d30712795cdc4459fd79"},
{file = "boto3-1.34.121.tar.gz", hash = "sha256:ec89f3e0b0dc959c418df29e14d3748c0b05ab7acf7c0b90c839e9f340a659fa"},
{file = "boto3-1.34.122-py3-none-any.whl", hash = "sha256:b2d7400ff84fa547e53b3d9acfa3c95d65d45b5886ba1ede1f7df4768d1cc0b1"},
{file = "boto3-1.34.122.tar.gz", hash = "sha256:56840d8ce91654d182f1c113f0791fa2113c3aa43230c50b4481f235348a6037"},
]
[package.dependencies]
botocore = ">=1.34.121,<1.35.0"
botocore = ">=1.34.122,<1.35.0"
jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.10.0,<0.11.0"
@ -490,13 +490,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
version = "1.34.121"
version = "1.34.122"
description = "Low-level, data-driven core of boto 3."
optional = false
python-versions = ">=3.8"
files = [
{file = "botocore-1.34.121-py3-none-any.whl", hash = "sha256:25b05c7646a9f240cde1c8f839552a43f27e71e15c42600275dea93e219f7dd9"},
{file = "botocore-1.34.121.tar.gz", hash = "sha256:1a8f94b917c47dfd84a0b531ab607dc53570efb0d073d8686600f2d2be985323"},
{file = "botocore-1.34.122-py3-none-any.whl", hash = "sha256:6d75df3af831b62f0c7baa109728d987e0a8d34bfadf0476eb32e2f29a079a36"},
{file = "botocore-1.34.122.tar.gz", hash = "sha256:9374e16a36f1062c3e27816e8599b53eba99315dfac71cc84fc3aee3f5d3cbe3"},
]
[package.dependencies]
@ -1450,13 +1450,13 @@ tests = ["pytest"]
[[package]]
name = "dataclasses-json"
version = "0.6.6"
version = "0.6.7"
description = "Easily serialize dataclasses to and from JSON."
optional = false
python-versions = "<4.0,>=3.7"
files = [
{file = "dataclasses_json-0.6.6-py3-none-any.whl", hash = "sha256:e54c5c87497741ad454070ba0ed411523d46beb5da102e221efb873801b0ba85"},
{file = "dataclasses_json-0.6.6.tar.gz", hash = "sha256:0c09827d26fffda27f1be2fed7a7a01a29c5ddcd2eb6393ad5ebf9d77e9deae8"},
{file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"},
{file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"},
]
[package.dependencies]
@ -2623,13 +2623,13 @@ httplib2 = ">=0.19.0"
[[package]]
name = "google-cloud-aiplatform"
version = "1.54.0"
version = "1.54.1"
description = "Vertex AI API client library"
optional = false
python-versions = ">=3.8"
files = [
{file = "google-cloud-aiplatform-1.54.0.tar.gz", hash = "sha256:6f5187d35a32951028465804fbb42b478362bf41e2b634ddd22b150299f6e1d8"},
{file = "google_cloud_aiplatform-1.54.0-py2.py3-none-any.whl", hash = "sha256:7b3ed849b9fb59a01bd6f44444ccbb7d18495b867a26f913542f6b2d4c3de252"},
{file = "google-cloud-aiplatform-1.54.1.tar.gz", hash = "sha256:01c231961cc1a1a3b049ea3ef71fb11e77b2d56d632d020ce09e419b27ff77f2"},
{file = "google_cloud_aiplatform-1.54.1-py2.py3-none-any.whl", hash = "sha256:43f70fcd572f15317d769e5a0e04cfb7c0e259ead3fe581d2fba4f203ace5617"},
]
[package.dependencies]
@ -4331,13 +4331,13 @@ extended-testing = ["beautifulsoup4 (>=4.12.3,<5.0.0)", "lxml (>=4.9.3,<6.0)"]
[[package]]
name = "langchainhub"
version = "0.1.17"
version = "0.1.18"
description = "The LangChain Hub API client"
optional = false
python-versions = "<4.0,>=3.8.1"
files = [
{file = "langchainhub-0.1.17-py3-none-any.whl", hash = "sha256:4c609b3948252c71670f0d98f73413b515cfd2f6701a7b40ce959203e6133e04"},
{file = "langchainhub-0.1.17.tar.gz", hash = "sha256:af7df0cb1cebc7a6e0864e8632ae48ecad39ed96568f699c78657b9d04e50b46"},
{file = "langchainhub-0.1.18-py3-none-any.whl", hash = "sha256:11501f15e7f34715ecc8892587daa35c6f2a3005e1f2926c9bcabd31fc2c100c"},
{file = "langchainhub-0.1.18.tar.gz", hash = "sha256:f2d0d8bf3abe4ca5e70511d8220bdc9ccea28d5267bcfd0e5ef9c53bd5bd3bad"},
]
[package.dependencies]
@ -4417,13 +4417,13 @@ url = "src/backend/base"
[[package]]
name = "langfuse"
version = "2.35.0"
version = "2.35.2"
description = "A client library for accessing langfuse"
optional = false
python-versions = "<4.0,>=3.8.1"
files = [
{file = "langfuse-2.35.0-py3-none-any.whl", hash = "sha256:e9df2474a01f8e167b7b13674c554915415b27064e48ad207054475f7fa8f82d"},
{file = "langfuse-2.35.0.tar.gz", hash = "sha256:b1d4b478233eefbc8a6fc63ca00ca82f6afecf2b0fdc1835ca65e751cf901577"},
{file = "langfuse-2.35.2-py3-none-any.whl", hash = "sha256:d01a23842cab484594f03878aacb9732ef8fd361158eb819c7bf43f758a0954b"},
{file = "langfuse-2.35.2.tar.gz", hash = "sha256:32b2e6c5bc71b4efdc430c6b964ab1c1e1ba1e105a4a73912c38b3959dc4502d"},
]
[package.dependencies]
@ -4457,13 +4457,13 @@ requests = ">=2,<3"
[[package]]
name = "litellm"
version = "1.40.4"
version = "1.40.7"
description = "Library to easily interface with LLM API providers"
optional = false
python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8"
files = [
{file = "litellm-1.40.4-py3-none-any.whl", hash = "sha256:b3b8e4401f717c3a18595446bfdb80fc6bb74974aac4eae537fb7b3be37fbf9e"},
{file = "litellm-1.40.4.tar.gz", hash = "sha256:3edaa1189742afd7c7df2b122f77373d47154a8fb6df6187ff5875e188baa3e1"},
{file = "litellm-1.40.7-py3-none-any.whl", hash = "sha256:c98dd8733e632aba16f14bf82e56f7159222097a6d085b242a3140b5d3e7baa4"},
{file = "litellm-1.40.7.tar.gz", hash = "sha256:557bb19e8e484d0dfe8e4eaa9ccefc888617852988a46d6e7adc41585a2c0600"},
]
[package.dependencies]
@ -4483,12 +4483,12 @@ proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "
[[package]]
name = "llama-cpp-python"
version = "0.2.77"
version = "0.2.78"
description = "Python bindings for the llama.cpp library"
optional = true
python-versions = ">=3.8"
files = [
{file = "llama_cpp_python-0.2.77.tar.gz", hash = "sha256:5d2f87df941a72ad6d122c3ffd91d8fe58542db350bd169c07b025d625a26803"},
{file = "llama_cpp_python-0.2.78.tar.gz", hash = "sha256:3df7cfde84287faaf29675fba8939060c3ab3f0ce8db875dabf7df5d83bd8751"},
]
[package.dependencies]
@ -4505,13 +4505,13 @@ test = ["httpx (>=0.24.1)", "pytest (>=7.4.0)", "scipy (>=1.10)"]
[[package]]
name = "locust"
version = "2.28.0"
version = "2.29.0"
description = "Developer-friendly load testing framework"
optional = false
python-versions = ">=3.9"
files = [
{file = "locust-2.28.0-py3-none-any.whl", hash = "sha256:766be879db030c0118e7d9fca712f3538c4e628bdebf59468fa1c6c2fab217d3"},
{file = "locust-2.28.0.tar.gz", hash = "sha256:260557eec866f7e34a767b6c916b5b278167562a280480aadb88f43d962fbdeb"},
{file = "locust-2.29.0-py3-none-any.whl", hash = "sha256:aa9d94d3604ed9f2aab3248460d91e55d3de980a821dffdf8658b439b049d03f"},
{file = "locust-2.29.0.tar.gz", hash = "sha256:649c99ce49d00720a3084c0109547035ad9021222835386599a8b545d31ebe51"},
]
[package.dependencies]
@ -4525,7 +4525,10 @@ msgpack = ">=1.0.0"
psutil = ">=5.9.1"
pywin32 = {version = "*", markers = "platform_system == \"Windows\""}
pyzmq = ">=25.0.0"
requests = ">=2.26.0"
requests = [
{version = ">=2.26.0", markers = "python_version <= \"3.11\""},
{version = ">=2.32.2", markers = "python_version > \"3.11\""},
]
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
Werkzeug = ">=2.0.0"
@ -5646,13 +5649,13 @@ sympy = "*"
[[package]]
name = "openai"
version = "1.32.0"
version = "1.33.0"
description = "The official Python library for the openai API"
optional = false
python-versions = ">=3.7.1"
files = [
{file = "openai-1.32.0-py3-none-any.whl", hash = "sha256:953d57669f309002044fd2f678aba9f07a43256d74b3b00cd04afb5b185568ea"},
{file = "openai-1.32.0.tar.gz", hash = "sha256:a6df15a7ab9344b1bc2bc8d83639f68b7a7e2453c0f5e50c1666547eee86f0bd"},
{file = "openai-1.33.0-py3-none-any.whl", hash = "sha256:621163b56570897ab8389d187f686a53d4771fd6ce95d481c0a9611fe8bc4229"},
{file = "openai-1.33.0.tar.gz", hash = "sha256:1169211a7b326ecbc821cafb427c29bfd0871f9a3e0947dd9e51acb3b0f1df78"},
]
[package.dependencies]
@ -6334,13 +6337,13 @@ twisted = ["twisted"]
[[package]]
name = "prompt-toolkit"
version = "3.0.46"
version = "3.0.47"
description = "Library for building powerful interactive command lines in Python"
optional = false
python-versions = ">=3.7.0"
files = [
{file = "prompt_toolkit-3.0.46-py3-none-any.whl", hash = "sha256:45abe60a8300f3c618b23c16c4bb98c6fc80af8ce8b17c7ae92db48db3ee63c1"},
{file = "prompt_toolkit-3.0.46.tar.gz", hash = "sha256:869c50d682152336e23c4db7f74667639b5047494202ffe7670817053fd57795"},
{file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"},
{file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"},
]
[package.dependencies]
@ -9292,13 +9295,13 @@ files = [
[[package]]
name = "typing-extensions"
version = "4.12.1"
version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
files = [
{file = "typing_extensions-4.12.1-py3-none-any.whl", hash = "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a"},
{file = "typing_extensions-4.12.1.tar.gz", hash = "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1"},
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
]
[[package]]
@ -9431,13 +9434,13 @@ six = "*"
[[package]]
name = "unstructured"
version = "0.14.4"
version = "0.14.5"
description = "A library that prepares raw documents for downstream ML tasks."
optional = false
python-versions = "<3.13,>=3.9.0"
files = [
{file = "unstructured-0.14.4-py3-none-any.whl", hash = "sha256:d79104a574fd4de07548ee12ef63c34fab0a454a514d6252a261c7e8f15b9b1f"},
{file = "unstructured-0.14.4.tar.gz", hash = "sha256:f4f3b5f18fcc174d3d606cbc3a9affa418494a8ea96424a112d0080fc9e93560"},
{file = "unstructured-0.14.5-py3-none-any.whl", hash = "sha256:2286180ac089b691e1effb73c2ab17b7809011fbf7f751439301b12a4c984131"},
{file = "unstructured-0.14.5.tar.gz", hash = "sha256:f37975273cdcf8f05768ef2f86abaf3d8f805992f6acb0441c2be00fa4ef6588"},
]
[package.dependencies]
@ -9465,7 +9468,7 @@ wrapt = "*"
[package.extras]
airtable = ["pyairtable"]
all-docs = ["effdet", "google-cloud-vision", "markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "pytesseract", "python-docx (>=1.1.2)", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.33)", "unstructured.pytesseract (>=0.3.12)", "xlrd"]
all-docs = ["effdet", "google-cloud-vision", "markdown", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "pytesseract", "python-docx (>=1.1.2)", "python-oxmsg", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.33)", "unstructured.pytesseract (>=0.3.12)", "xlrd"]
astra = ["astrapy"]
azure = ["adlfs", "fsspec"]
azure-cognitive-search = ["azure-search-documents"]
@ -9496,10 +9499,10 @@ hubspot = ["hubspot-api-client", "urllib3"]
huggingface = ["langdetect", "sacremoses", "sentencepiece", "torch", "transformers"]
image = ["effdet", "google-cloud-vision", "onnx", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypdf", "pytesseract", "unstructured-inference (==0.7.33)", "unstructured.pytesseract (>=0.3.12)"]
jira = ["atlassian-python-api"]
local-inference = ["effdet", "google-cloud-vision", "markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "pytesseract", "python-docx (>=1.1.2)", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.33)", "unstructured.pytesseract (>=0.3.12)", "xlrd"]
local-inference = ["effdet", "google-cloud-vision", "markdown", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "pytesseract", "python-docx (>=1.1.2)", "python-oxmsg", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.33)", "unstructured.pytesseract (>=0.3.12)", "xlrd"]
md = ["markdown"]
mongodb = ["pymongo"]
msg = ["msg-parser"]
msg = ["python-oxmsg"]
notion = ["htmlBuilder", "notion-client"]
odt = ["pypandoc", "python-docx (>=1.1.2)"]
onedrive = ["Office365-REST-Python-Client", "bs4", "msal"]
@ -9529,13 +9532,13 @@ xlsx = ["networkx", "openpyxl", "pandas", "xlrd"]
[[package]]
name = "unstructured-client"
version = "0.23.1"
version = "0.23.2"
description = "Python Client SDK for Unstructured API"
optional = false
python-versions = ">=3.8"
files = [
{file = "unstructured-client-0.23.1.tar.gz", hash = "sha256:844c0355e27d97ed87fa489fcf24e38f3c4d42fb8245645aa58629cbf5b8c08e"},
{file = "unstructured_client-0.23.1-py3-none-any.whl", hash = "sha256:93a8729d9dfbe9fe18560288fcd69043946f85b4333ea1af189d5309a671008a"},
{file = "unstructured-client-0.23.2.tar.gz", hash = "sha256:26864737a6c27471cba8bcb714e4e31038f62f84552b3ead5f241bc56fa42288"},
{file = "unstructured_client-0.23.2-py3-none-any.whl", hash = "sha256:b3be91e7c2498aa9108a43dde4cbb75e450a87fabb450f0687c1900da7da73f6"},
]
[package.dependencies]
@ -10449,4 +10452,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.10,<3.13"
content-hash = "2a5cccb4fcd7feab46c9560d3add946ee2134ff225b8d393561ff2e874d2571a"
content-hash = "4e16ddf83311fa2c894623b76832a9dda98eec2b88975c087297364954dbdac6"

View file

@ -86,6 +86,7 @@ youtube-transcript-api = "^0.6.2"
markdown = "^3.6"
langchain-chroma = "^0.1.1"
upstash-vector = "^0.4.0"
cassio = "^0.1.7"
unstructured = {extras = ["docx", "md", "pptx"], version = "^0.14.4"}

View file

@ -1,9 +1,7 @@
from typing import Optional, cast
from langchain_astradb.chat_message_histories import AstraDBChatMessageHistory
from langflow.base.memory.memory import BaseMemoryComponent
from langflow.field_typing import Text
from langflow.schema.schema import Record
@ -51,6 +49,14 @@ class AstraDBMessageReaderComponent(BaseMemoryComponent):
Returns:
list[Record]: A list of Record objects representing the search results.
"""
try:
from langchain_astradb.chat_message_histories import AstraDBChatMessageHistory
except ImportError:
raise ImportError(
"Could not import langchain Astra DB integration package. "
"Please install it with `pip install langchain-astradb`."
)
memory: AstraDBChatMessageHistory = cast(AstraDBChatMessageHistory, kwargs.get("memory"))
if not memory:
raise ValueError("AstraDBChatMessageHistory instance is required.")
@ -63,14 +69,14 @@ class AstraDBMessageReaderComponent(BaseMemoryComponent):
def build(
self,
session_id: Text,
session_id: str,
collection_name: str,
token: str,
api_endpoint: str,
namespace: Optional[str] = None,
) -> list[Record]:
try:
pass
from langchain_astradb.chat_message_histories import AstraDBChatMessageHistory
except ImportError:
raise ImportError(
"Could not import langchain Astra DB integration package. "

View file

@ -1,11 +1,9 @@
from typing import Optional
from langflow.base.memory.memory import BaseMemoryComponent
from langflow.field_typing import Text
from langflow.schema.schema import Record
from langchain_core.messages import BaseMessage
from langchain_astradb import AstraDBChatMessageHistory
class AstraDBMessageWriterComponent(BaseMemoryComponent):
@ -50,7 +48,7 @@ class AstraDBMessageWriterComponent(BaseMemoryComponent):
self,
sender: str,
sender_name: str,
text: Text,
text: str,
session_id: str,
metadata: Optional[dict] = None,
**kwargs,
@ -59,17 +57,27 @@ class AstraDBMessageWriterComponent(BaseMemoryComponent):
Adds a message to the AstraDBChatMessageHistory memory.
Args:
sender (Text): The type of the message sender. Valid values are "Machine" or "User".
sender_name (Text): The name of the message sender.
text (Text): The content of the message.
session_id (Text): The session ID associated with the message.
sender (str): The type of the message sender. Typically "ai" or "human".
sender_name (str): The name of the message sender.
text (str): The content of the message.
session_id (str): The session ID associated with the message.
metadata (dict | None, optional): Additional metadata for the message. Defaults to None.
**kwargs: Additional keyword arguments.
**kwargs: Additional keyword arguments, including:
memory (AstraDBChatMessageHistory | None): The memory instance to add the message to.
Raises:
ValueError: If the AstraDBChatMessageHistory instance is not provided.
"""
try:
from langchain_astradb.chat_message_histories import AstraDBChatMessageHistory
except ImportError:
raise ImportError(
"Could not import langchain Astra DB integration package. "
"Please install it with `pip install langchain-astradb`."
)
memory: AstraDBChatMessageHistory | None = kwargs.pop("memory", None)
if memory is None:
raise ValueError("AstraDBChatMessageHistory instance is required.")
@ -89,14 +97,14 @@ class AstraDBMessageWriterComponent(BaseMemoryComponent):
def build(
self,
input_value: Record,
session_id: Text,
session_id: str,
collection_name: str,
token: str,
api_endpoint: str,
namespace: Optional[str] = None,
) -> Record:
try:
pass
from langchain_astradb.chat_message_histories import AstraDBChatMessageHistory
except ImportError:
raise ImportError(
"Could not import langchain Astra DB integration package. "

View file

@ -0,0 +1,86 @@
from typing import Optional, cast
from langchain_community.chat_message_histories import CassandraChatMessageHistory
from langflow.base.memory.memory import BaseMemoryComponent
from langflow.schema.schema import Record
class CassandraMessageReaderComponent(BaseMemoryComponent):
display_name = "Cassandra Message Reader"
description = "Retrieves stored chat messages from a Cassandra table on Astra DB."
def build_config(self):
return {
"session_id": {
"display_name": "Session ID",
"info": "Session ID of the chat history.",
"input_types": ["Text"],
},
"database_id": {
"display_name": "Database ID",
"info": "The Astra database ID.",
},
"table_name": {
"display_name": "Table Name",
"info": "The name of the table where messages are stored.",
},
"token": {
"display_name": "Token",
"info": "Authentication token for accessing Cassandra on Astra DB.",
"password": True,
},
"keyspace": {
"display_name": "Keyspace",
"info": "Optional key space within Astra DB. The keyspace should already be created.",
"input_types": ["Text"],
"advanced": True,
},
}
def get_messages(self, **kwargs) -> list[Record]:
"""
Retrieves messages from the CassandraChatMessageHistory memory.
Args:
memory (CassandraChatMessageHistory): The CassandraChatMessageHistory instance to retrieve messages from.
Returns:
list[Record]: A list of Record objects representing the search results.
"""
memory: CassandraChatMessageHistory = cast(CassandraChatMessageHistory, kwargs.get("memory"))
if not memory:
raise ValueError("CassandraChatMessageHistory instance is required.")
# Get messages from the memory
messages = memory.messages
results = [Record.from_lc_message(message) for message in messages]
return list(results)
def build(
self,
session_id: str,
table_name: str,
token: str,
database_id: str,
keyspace: Optional[str] = None,
) -> list[Record]:
try:
import cassio
except ImportError:
raise ImportError(
"Could not import cassio integration package. " "Please install it with `pip install cassio`."
)
cassio.init(token=token, database_id=database_id)
memory = CassandraChatMessageHistory(
session_id=session_id,
table_name=table_name,
keyspace=keyspace,
)
records = self.get_messages(memory=memory)
self.status = records
return records

View file

@ -0,0 +1,122 @@
from typing import Optional
from langflow.base.memory.memory import BaseMemoryComponent
from langflow.schema.schema import Record
from langchain_core.messages import BaseMessage
from langchain_community.chat_message_histories import CassandraChatMessageHistory
class CassandraMessageWriterComponent(BaseMemoryComponent):
display_name = "Cassandra Message Writer"
description = "Writes a message to a Cassandra table on Astra DB."
def build_config(self):
return {
"input_value": {
"display_name": "Input Record",
"info": "Record to write to Cassandra.",
},
"session_id": {
"display_name": "Session ID",
"info": "Session ID of the chat history.",
"input_types": ["Text"],
},
"database_id": {
"display_name": "Database ID",
"info": "The Astra database ID.",
},
"table_name": {
"display_name": "Table Name",
"info": "The name of the table where messages will be stored.",
},
"token": {
"display_name": "Token",
"info": "Authentication token for accessing Cassandra on Astra DB.",
"password": True,
},
"keyspace": {
"display_name": "Keyspace",
"info": "Optional key space within Astra DB. The keyspace should already be created.",
"input_types": ["Text"],
"advanced": True,
},
"ttl_seconds": {
"display_name": "TTL Seconds",
"info": "Optional time-to-live for the messages.",
"input_types": ["Number"],
"advanced": True,
},
}
def add_message(
self,
sender: str,
sender_name: str,
text: str,
session_id: str,
metadata: Optional[dict] = None,
**kwargs,
):
"""
Adds a message to the CassandraChatMessageHistory memory.
Args:
sender (str): The type of the message sender. Typically "ai" or "human".
sender_name (str): The name of the message sender.
text (str): The content of the message.
session_id (str): The session ID associated with the message.
metadata (dict | None, optional): Additional metadata for the message. Defaults to None.
**kwargs: Additional keyword arguments, including:
memory (CassandraChatMessageHistory | None): The memory instance to add the message to.
Raises:
ValueError: If the CassandraChatMessageHistory instance is not provided.
"""
memory: CassandraChatMessageHistory | None = kwargs.pop("memory", None)
if memory is None:
raise ValueError("CassandraChatMessageHistory instance is required.")
text_list = [
BaseMessage(
content=text,
sender=sender,
sender_name=sender_name,
metadata=metadata,
session_id=session_id,
)
]
memory.add_messages(text_list)
def build(
self,
input_value: Record,
session_id: str,
table_name: str,
token: str,
database_id: str,
keyspace: Optional[str] = None,
ttl_seconds: Optional[int] = None,
) -> Record:
try:
import cassio
except ImportError:
raise ImportError(
"Could not import cassio integration package. " "Please install it with `pip install cassio`."
)
cassio.init(token=token, database_id=database_id)
memory = CassandraChatMessageHistory(
session_id=session_id,
table_name=table_name,
keyspace=keyspace,
ttl_seconds=ttl_seconds,
)
self.add_message(**input_value.data, memory=memory)
self.status = f"Added message to Cassandra memory for session {session_id}"
return input_value

View file

@ -0,0 +1,94 @@
from typing import Any, List, Optional, Tuple
from langflow.components.vectorstores.Cassandra import CassandraVectorStoreComponent
from langflow.components.vectorstores.base.model import LCVectorStoreComponent
from langflow.field_typing import Embeddings, Text
from langflow.schema import Record
from langchain_community.utilities.cassandra import SetupMode
class CassandraSearchComponent(LCVectorStoreComponent):
display_name = "Cassandra Search"
description = "Searches an existing Cassandra Vector Store."
icon = "Cassandra"
field_order = ["token", "database_id", "table_name", "input_value", "embedding"]
def build_config(self):
return {
"search_type": {
"display_name": "Search Type",
"options": ["Similarity", "MMR"],
},
"input_value": {
"display_name": "Input Value",
"info": "Input value to search",
},
"embedding": {"display_name": "Embedding", "info": "Embedding to use"},
"token": {
"display_name": "Token",
"info": "Authentication token for accessing Cassandra on Astra DB.",
"password": True,
},
"database_id": {
"display_name": "Database ID",
"info": "The Astra database ID.",
},
"table_name": {
"display_name": "Table Name",
"info": "The name of the table where vectors will be stored.",
},
"keyspace": {
"display_name": "Keyspace",
"info": "Optional key space within Astra DB. The keyspace should already be created.",
"advanced": True,
},
"body_index_options": {
"display_name": "Body Index Options",
"info": "Optional options used to create the body index.",
"advanced": True,
},
"setup_mode": {
"display_name": "Setup Mode",
"info": "Configuration mode for setting up the Cassandra table, with options like 'Sync', 'Async', or 'Off'.",
"options": ["Sync", "Async", "Off"],
"advanced": True,
},
"number_of_results": {
"display_name": "Number of Results",
"info": "Number of results to return.",
"advanced": True,
},
}
def build(
self,
embedding: Embeddings,
table_name: str,
input_value: Text,
token: str,
database_id: str,
search_type: str = "similarity",
number_of_results: int = 4,
keyspace: Optional[str] = None,
body_index_options: Optional[List[Tuple[str, Any]]] = None,
setup_mode: SetupMode = SetupMode.SYNC,
) -> List[Record]:
vector_store = CassandraVectorStoreComponent().build(
embedding=embedding,
table_name=table_name,
token=token,
database_id=database_id,
keyspace=keyspace,
body_index_options=body_index_options,
setup_mode=setup_mode,
)
try:
return self.search_with_vector_store(input_value, search_type, vector_store, k=number_of_results)
except KeyError as e:
if "content" in str(e):
raise ValueError(
"You should ingest data through Langflow (or LangChain) to query it in Langflow. Your collection does not contain a field name 'content'."
)
else:
raise e

View file

@ -1,6 +1,4 @@
from typing import List, Optional, Union
from langchain_astradb import AstraDBVectorStore
from langchain_astradb.utils.astradb import SetupMode
from langflow.custom import CustomComponent
from langflow.field_typing import Embeddings, VectorStore
@ -111,6 +109,15 @@ class AstraDBVectorStoreComponent(CustomComponent):
metadata_indexing_exclude: Optional[List[str]] = None,
collection_indexing_policy: Optional[dict] = None,
) -> Union[VectorStore, BaseRetriever]:
try:
from langchain_astradb import AstraDBVectorStore
from langchain_astradb.utils.astradb import SetupMode
except ImportError:
raise ImportError(
"Could not import langchain Astra DB integration package. "
"Please install it with `pip install langchain-astradb`."
)
try:
setup_mode_value = SetupMode[setup_mode.upper()]
except KeyError:

View file

@ -0,0 +1,110 @@
from typing import Any, List, Optional, Tuple
from langchain_community.vectorstores import Cassandra
from langchain_community.utilities.cassandra import SetupMode
from langflow.custom import CustomComponent
from langflow.field_typing import Embeddings, VectorStore
from langflow.schema import Record
class CassandraVectorStoreComponent(CustomComponent):
display_name = "Cassandra"
description = "Builds or loads a Cassandra Vector Store."
icon = "Cassandra"
field_order = ["token", "database_id", "table_name", "inputs", "embedding"]
def build_config(self):
return {
"inputs": {
"display_name": "Inputs",
"info": "Optional list of records to be processed and stored in the vector store.",
},
"embedding": {"display_name": "Embedding", "info": "Embedding to use"},
"token": {
"display_name": "Token",
"info": "Authentication token for accessing Cassandra on Astra DB.",
"password": True,
},
"database_id": {
"display_name": "Database ID",
"info": "The Astra database ID.",
},
"table_name": {
"display_name": "Table Name",
"info": "The name of the table where vectors will be stored.",
},
"keyspace": {
"display_name": "Keyspace",
"info": "Optional key space within Astra DB. The keyspace should already be created.",
"advanced": True,
},
"ttl_seconds": {
"display_name": "TTL Seconds",
"info": "Optional time-to-live for the added texts.",
"advanced": True,
},
"batch_size": {
"display_name": "Batch Size",
"info": "Optional number of records to process in a single batch.",
"advanced": True,
},
"body_index_options": {
"display_name": "Body Index Options",
"info": "Optional options used to create the body index.",
"advanced": True,
},
"setup_mode": {
"display_name": "Setup Mode",
"info": "Configuration mode for setting up the Cassandra table, with options like 'Sync', 'Async', or 'Off'.",
"options": ["Sync", "Async", "Off"],
"advanced": True,
},
}
def build(
self,
embedding: Embeddings,
token: str,
database_id: str,
inputs: Optional[List[Record]] = None,
keyspace: Optional[str] = None,
table_name: str = "",
ttl_seconds: Optional[int] = None,
batch_size: int = 16,
body_index_options: Optional[List[Tuple[str, Any]]] = None,
setup_mode: SetupMode = SetupMode.SYNC,
) -> VectorStore:
try:
import cassio
except ImportError:
raise ImportError(
"Could not import cassio integration package. " "Please install it with `pip install cassio`."
)
cassio.init(
database_id=database_id,
token=token,
)
if inputs:
documents = [_input.to_lc_document() for _input in inputs]
table = Cassandra.from_documents(
documents=documents,
embedding=embedding,
table_name=table_name,
keyspace=keyspace,
ttl_seconds=ttl_seconds,
batch_size=batch_size,
body_index_options=body_index_options,
)
else:
table = Cassandra(
embedding=embedding,
table_name=table_name,
keyspace=keyspace,
ttl_seconds=ttl_seconds,
body_index_options=body_index_options,
setup_mode=setup_mode,
)
return table

View file

@ -480,6 +480,7 @@
},
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
"version": "1.3.0",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {

View file

@ -0,0 +1,73 @@
const CassandraSVG = (props) => (
<svg
width="24"
height="24"
viewBox="0 -43.5 256 256"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g fill="#373535">
<path d="M30.9 142.2c2.2 0 4.2.5 5.3 1.5.2 1.6-1.3 4.2-2.2 4.2-1.1-.4-2.1-.6-3.4-.6-5.2 0-7.8 5.4-7.8 10.7 0 3.3 1.1 5.3 3.8 5.3 2.8 0 5.6-1.9 7.2-3.3.4.3.9 1.2.9 2.2 0 1.1-.3 2.2-1.4 3.3-1.8 1.8-4.9 3.4-9.4 3.4-5.1 0-8.7-2.9-8.7-9.7.2-9 6-17 15.7-17ZM47.7 163c2.8 0 7.9-4.9 9.3-14.3.1-.6.1-.7.2-1.3-.6-.2-1.5-.4-2.3-.4-2.1 0-4.3.6-6.2 3.3-2 2.8-2.9 6.3-2.9 9.1 0 2.3.7 3.6 1.9 3.6Zm-9.2-2.6c0-3.4 1.1-9.2 5.4-13.5 3.7-3.8 8.1-4.7 12.2-4.7 2.7 0 6.3.9 8.6 1.3-.6 2.5-1.9 12-2.6 17.5-.3 2.3-.4 5.6-.3 6.8-1.9.8-5.4 1-6.4 1-.5 0-.6-2.3-.5-4.6.1-.7.2-1.8.2-2.3-2.2 3.7-6.6 6.8-11.2 6.8-3.3.1-5.4-2.7-5.4-8.3ZM78.9 142.2c2.3 0 4.6.9 5.6 1.9-.1 1.6-1.3 4.3-3.3 3.5-.9-.3-1.7-.5-2.9-.5-1.5 0-2.9.7-2.9 2.1 0 1.1.8 1.9 4.6 4.6 2.7 2 3.8 3.8 3.8 6.3 0 4.2-3.9 8.7-10.8 8.7-2.8 0-5.3-1.1-6-2.2-1-1.7-.2-5.1.9-4.5 1.5.7 3.9 1.5 5.9 1.5 1.9 0 3.1-.9 3.1-2 0-1-.9-1.8-4.3-4.3-2.9-2.2-3.8-4.2-3.8-6.4 0-4.8 4.1-8.7 10.1-8.7ZM98.6 142.2c2.3 0 4.6.9 5.6 1.9-.1 1.6-1.3 4.3-3.3 3.5-.9-.3-1.7-.5-2.9-.5-1.5 0-2.9.7-2.9 2.1 0 1.1.8 1.9 4.6 4.6 2.7 2 3.8 3.8 3.8 6.3 0 4.2-3.9 8.7-10.8 8.7-2.8 0-5.2-1.1-6-2.2-1-1.7-.2-5.1.9-4.5 1.5.7 3.9 1.5 5.9 1.5 1.9 0 3.1-.9 3.1-2 0-1-.9-1.8-4.3-4.3-2.9-2.2-3.8-4.2-3.8-6.4 0-4.8 4.1-8.7 10.1-8.7ZM116.5 163c2.8 0 7.9-4.9 9.3-14.3.1-.6.1-.7.2-1.3-.6-.2-1.5-.4-2.3-.4-2.1 0-4.3.6-6.2 3.3-2 2.8-2.9 6.3-2.9 9.1.1 2.3.7 3.6 1.9 3.6Zm-9.2-2.6c0-3.4 1.1-9.2 5.4-13.5 3.7-3.8 8.1-4.7 12.2-4.7 2.7 0 6.3.9 8.6 1.3-.6 2.5-1.9 12-2.6 17.5-.3 2.3-.4 5.6-.3 6.8-1.9.8-5.4 1-6.4 1-.5 0-.6-2.3-.5-4.6.1-.7.2-1.8.2-2.3-2.2 3.7-6.6 6.8-11.2 6.8-3.2.1-5.4-2.7-5.4-8.3ZM146.4 149.6c2.6-4.2 6-7.4 10.8-7.4 4.1 0 5.4 3.8 4.6 9.1-.4 2.5-1.1 6.1-1.5 9.4-.4 2.8-.7 5.3-.6 7-1.5.7-5.8 1-6.8 1-.4 0-.5-3.1.1-6.4.5-2.7 1.4-7.7 1.9-10.6.3-1.7.2-3.7-1.4-3.7-2.1 0-7.1 3.4-9.6 17.2-.2 1.1-.6 1.8-1.3 2.2-.9.5-2.7 1-6.4 1 .7-3.5 1.8-10.6 2.6-15.9.7-4.8 1-7.9.9-9.1 1-.3 6.1-1.4 6.6-1.4.6 0 .7 1.8.2 6-.1.4-.1 1-.2 1.4h.1v.2ZM175.4 162.9c2.5 0 7.6-4.7 9-13 .1-.5.2-1.3.3-1.8-.7-.7-1.7-1.1-3.3-1.1-5.8 0-8.3 6.9-8.3 11.9.1 2.6 1 4 2.3 4Zm-3.7 5.9c-3.7 0-5.9-3.3-5.9-8.8 0-9.2 5.8-17.7 15.5-17.7 1.7 0 3.3.5 4.2 1 .5-2.6 1.7-10.7 1.8-13.1 1.6-.3 5-.8 6.6-.8.6 0 .8.6.6 2.1-1.4 8.6-3.8 25-4.3 28.6-.3 3.1-.4 6.1-.3 7.8-1.8.8-5.5 1-6.5 1-.4 0-.6-2.6-.5-5 .1-.7.2-1.8.2-2-3.1 4.6-7 6.9-11.4 6.9ZM205.1 150.4c3-6.7 6.6-8.2 9-8.2.7 0 1.9.5 2.4 1 .2 1.9-1.3 5.6-2.6 7.1-.7-.3-1.5-.7-2.5-.7-1.9 0-5.8 3-8.2 16-.2 1.1-.5 1.5-1.1 1.8-1 .6-4.8 1-6.6 1.1.9-4.7 2.3-14.2 2.9-19.8.2-1.4.2-4.1.1-5.1 1.1-.5 5.4-1.5 6.3-1.5.5 0 .9 3.1.1 8.2h.2v.1ZM225.2 163c2.8 0 7.9-4.9 9.3-14.3.1-.6.1-.7.2-1.3-.6-.2-1.5-.4-2.3-.4-2.1 0-4.3.6-6.2 3.3-2 2.8-2.9 6.3-2.9 9.1.1 2.3.7 3.6 1.9 3.6Zm-9.2-2.6c0-3.4 1.1-9.2 5.4-13.5 3.7-3.8 8.1-4.7 12.2-4.7 2.7 0 6.3.9 8.6 1.3-.6 2.5-1.9 12-2.6 17.5-.3 2.3-.4 5.6-.3 6.8-1.9.8-5.4 1-6.4 1-.5 0-.6-2.3-.5-4.6.1-.7.2-1.8.2-2.3-2.2 3.7-6.6 6.8-11.2 6.8-3.2.1-5.4-2.7-5.4-8.3Z" />
</g>
<path
fill="#BBE6FB"
d="M205.5 45.5c1.9 21.9-32.6 42.8-77.1 46.6-44.5 3.8-82-10.9-83.9-32.8-1.9-21.9 32.6-42.8 77.1-46.6 44.4-3.8 82 10.8 83.9 32.8"
/>
<path
fill="#FFF"
d="M122.8 15.2c-17-.3-36.8 6.5-51.6 12.8-1.5 4.4-2.4 9.1-2.4 14 0 26 23.5 47.1 52.5 47.1s52.6-21 52.6-47.1c0-8.2-2.4-16-6.5-22.7-11.8-1.8-28.1-3.8-44.6-4.1"
/>
<path
fill="#FFF"
d="M121.4 15.2c-9.4-.6-25.6 4.3-39.1 9.2-2.1 4.8-3.2 10.1-3.2 15.7 0 22.8 20.7 41.3 42.5 41.3 21.7 0 40.9-18.5 42.5-41.3.5-7.4-2-14.4-5.6-20.4-13.9-2.4-28.7-3.9-37.1-4.5"
/>
<path
fill="#373535"
d="M97.3 37.2c1.2-2.6 2.9-3.8 4.6-5.9-.2-.5-.6-2.2-.6-2.7 0-2.6 2.1-4.6 4.6-4.6.6 0 1.2.1 1.7.3 7.7-5.9 17.8-8.4 28-6.1.9.2 1.8.5 2.7.7-10-1.4-21.4 2.2-29.1 8.4.2.6.9 2.1.9 2.8 0 2.6-1.7 3.2-4.2 3.2-.6 0-1.1-.1-1.7-.3-1.7 2.3-3.9 6.8-4.9 9.6 4.3 3.8 8.1 5.2 13.1 7.1 0-.2.2-.5.2-.7 0-7.7 6.8-14 14.5-14 6.9 0 12.7 5 13.8 11.6 3.5-2.2 6.8-3.9 9.3-7.1-.6-.7-1.2-2.8-1.2-3.8 0-2.3 1.9-4.2 4.2-4.2.3 0 .6 0 1 .1 1.3-2.7 2.3-5.5 2.9-8.4-12.1-9-35.5-7.7-35.5-7.7s-18.6-1-31.2 5.2c.9 5.8 3.3 11.6 6.9 16.5"
/>
<path
fill="#373535"
d="M155.1 33.7c.9.8 1.3 1.4 1.7 2.1 1.1 2-1.1 3.9-3.5 3.9-.2 0-.5 0-.7-.1-2.6 4.1-7.2 9.3-11.3 12 6.3 1 12.2 3.5 16.8 7.4 3.4-6.1 6-15 6-22.5 0-5.7-2.5-9.9-6.3-13-.1 3.1-1.8 7.4-2.7 10.2M104.3 72.5c2.1-5.8 7.2-10.2 12.1-14.1-.7-1-1.8-3.4-2.2-4.5-5.9-1.8-11.1-5.2-15.2-9.6 0 .1-.1.3-.1.4-.8 3.4-.9 6.9-.5 10.2 2.8.5 5 3 5 6 0 1.8-1.6 4.3-2.8 5.5 1.2 2.6 2.1 4 3.7 6.1"
/>
<path
fill="#373535"
d="M103.9 77.3c-2.5-2.5-4.2-7.4-5.8-10.5-.3 0-.6.1-.9.1-3.4 0-6.9-2.8-6.1-6.1.4-1.8 1.7-3 3.7-4-.5-3.8-.6-9.1.3-13 .2-1.1.8-1.6 1.1-2.7-3.7-5.4-6.1-12.6-6.1-19.7v-.8c-6.3 3.2-11 8.1-11 15.9 0 17.3 10 34.3 24.8 40.9v-.1M140.4 53.4c-1.9 5.4-7.1 9.4-13.2 9.4-3.3 0-6.3-1.1-8.6-3-4.9 3.8-9.4 10.5-11.6 16.4 1 1.1 1.7 2 2.9 3 3.4.9 8.2 0 11.9 0 14.9 0 28.2-6.6 35.8-18.3-5.2-3.6-11.2-7-17.2-7.5"
/>
<path
fill="#1287B1"
d="M96.9 39.2c1.2-2.6 2.6-4.9 4.3-7.1-.2-.5-.3-1.1-.3-1.6 0-2.6 2.1-4.6 4.6-4.6.6 0 1.2.1 1.7.3 7.7-5.9 17.8-8.4 28-6.1.9.2 1.8.5 2.7.7-10-1.4-20.4 1.7-28.1 7.9.2.6.4 1.2.4 1.8 0 2.6-2.1 4.6-4.6 4.6-.6 0-1.1-.1-1.7-.3-1.7 2.3-3.2 4.9-4.2 7.7 3.7 3.9 8.2 7.1 13.2 8.9v-.7c0-7.7 6.3-14 14-14 6.9 0 12.7 5 13.8 11.6 3.5-2.2 6.5-5 9.1-8.3-.6-.7-1-1.6-1-2.6 0-2.3 1.9-4.2 4.2-4.2.3 0 .6 0 1 .1 1.3-2.7 2.3-5.5 2.9-8.4-12.1-9-35.5-7.7-35.5-7.7s-18.6-1-31.2 5.2c.7 6.1 3.1 11.9 6.7 16.8"
/>
<path
fill="#1287B1"
d="M155.7 34.4c.9.8 1.4 1.9 1.4 3.1 0 2.3-1.9 4.2-4.2 4.2-.2 0-.5 0-.7-.1-2.6 4.1-6.1 7.6-10.2 10.2 6 .9 11.7 3.5 16.4 7.4 3.4-6.1 5.4-13.2 5.4-20.7 0-5.7-2.5-9.9-6.3-13-.2 3.1-.8 6.1-1.8 8.9M104.9 73.8c2.1-5.8 5.7-10.9 10.6-14.8-.7-1-1.3-2-1.7-3.2-5.9-1.8-11.1-5.2-15.2-9.6 0 .1-.1.3-.1.4-.8 3.4-.9 6.9-.5 10.2 2.8.5 5 3 5 6 0 1.8-.8 3.4-2 4.5 1 2.3 2.4 4.5 3.9 6.5"
/>
<path
fill="#1287B1"
d="M103.9 77.2c-2.5-2.5-4.6-5.3-6.2-8.4-.3 0-.6.1-.9.1-3.4 0-6.1-2.7-6.1-6.1 0-2.4 1.4-4.5 3.4-5.5-.5-3.8-.3-7.6.6-11.5.2-1.1.6-2.2.9-3.3-3.7-5.4-5.9-12-5.9-19.1v-.8c-6.3 3.2-11 8.1-11 15.9 0 17.3 10.3 32.2 25.1 38.8.1 0 .1 0 .1-.1M140 55.4c-1.9 5.4-7.1 9.4-13.2 9.4-3.3 0-6.3-1.1-8.6-3-4.9 3.8-8.6 9-10.9 14.9 1 1.1 2.1 2.1 3.2 3.1 3.4.9 7 1.4 10.7 1.4 14.9 0 28.1-7.7 35.7-19.4-5-3.6-10.9-5.9-16.9-6.4"
/>
<path
fill="#FFF"
d="m140.5 51.8 12.9-3.1-13-.7 10.6-8-12 4.3 8.1-11.3-11.3 7.5 3.9-13.2-7.7 10.9-.2-13.8-5.1 12.3-4.2-12.4.2 14.6-7.3-13.1 4 13.9-11.9-8.6 9.3 11.7-14.8-5.4 11.6 8.6-14.9.5 15.3 3.9-15.3 3.3 15.1 1.1-12.7 8.1 13.1-4.7-9.1 11.5 11.5-9.3-4.1 15.4 8.9-12.6-1.2 14.8 5-13.5 4.3 14.1 1-14.2 6.4 12.1-3.8-13.8 11.6 9-7.5-11.5 12.8 5-9.8-9.6 13.1 1-12.8-4.8Z"
/>
<path
fill="#373535"
fill-opacity=".35"
d="M2.8 76.5C42.9 36.4 74.9 24 104 18.4c3.8-.7 4.6-9.2 4.6-9.2s.5 6.2 3.2 7c2.7.8 6.2-9.7 6.2-9.7s-3.2 9.4 0 10c3.2.5 9.2-9.2 9.2-9.2s-2.4 8.3-.8 8.9c1.6.5 9.7-12.1 9.7-12.1s-4.8 8.3-.3 9.2c4.6.8 11.3-5.7 11.3-5.7s-5.2 5.9-2.9 6.8c10 3.5 18-9.4 18-9.4s-1.9 5.7-6.7 11.9c10.5 2.7 18.3-13.1 18.3-13.1L166 19.6c4 2 20.1-16.6 20.1-16.6s-8.3 14.5-13.2 17.5c2.7 2.2 12.4-6.5 12.4-6.5s-7.8 9.7-4.8 10.2c4.3 3.5 20.2-18 20.2-18s-6.2 12.7-15.3 22.6C193 32.7 212 8.2 212 8.2s-.5 7.8-14.3 20.2c10.2-1.3 23.4-20.7 23.4-20.7s-4.8 14.5-16.4 24.8c10-1 26.1-25.8 26.1-25.8s-6.2 17.2-18.8 27.2c14 3.1 34.2-17.8 34.2-17.8s-7.9 14.8-18.3 20.9c11.6 4.4 27.5-13.9 27.5-13.9s-15.9 24.5-41.2 23.4c-8.3-.4-33.4-25.2-87.2-23.2C55.8 25.9 40.8 56.1 2.8 76.5"
/>
<path
fill="#373535"
d="M4.4 73.5C44.5 33.4 76.5 21 105.6 15.4c3.8-.7 4.6-9.2 4.6-9.2s.5 6.2 3.2 7c2.7.8 6.2-9.7 6.2-9.7s-3.2 9.4 0 10c3.2.5 9.2-9.2 9.2-9.2s-2.4 8.3-.8 8.9c1.6.5 9.7-12.1 9.7-12.1s-4.8 8.3-.3 9.2c4.6.8 11.3-5.7 11.3-5.7s-5.2 5.9-2.9 6.8c10 3.5 18-9.4 18-9.4s-1.9 5.7-6.7 11.9C167.6 16.6 175.4.8 175.4.8l-7.8 15.8c4 2.2 20.2-16.4 20.2-16.4s-8.3 14.5-13.2 17.5C177.3 19.6 187 11 187 11s-7.8 9.7-4.8 10.2c4.3 3.5 20.2-18 20.2-18s-6.3 12.7-15.4 22.6c7.6 3.8 26.7-20.7 26.7-20.7s-.5 7.8-14.3 20.2c10.2-1.3 23.4-20.7 23.4-20.7s-4.8 14.5-16.4 24.8c10-1 26.1-25.8 26.1-25.8s-6.2 17.2-18.8 27.2c14 3.1 34.2-17.8 34.2-17.8s-7.9 14.8-18.3 20.9c11.6 4.4 27.5-13.9 27.5-13.9s-15.9 24.5-41.2 23.4c-8.3-.4-33.4-25.2-87.2-23.2C57.5 22.9 42.4 53 4.4 73.5"
/>
<path
fill="#373535"
fill-opacity=".35"
d="M1.8 80.9c21.2 10.6 40.6-1.6 65 5.3 18.6 5.2 41.2 11.7 71.9 7.2 30.7-4.4 56.9-17.8 69.5-41.6 3.9-10.6 19.8 2.4 19.8 2.4s-11.6-4.8-11.3-2.6c.3 2.3 17.4 10.2 17.4 10.2s-15.5-4.8-14.5-1.2c.9 3.6 19.4 18.2 19.4 18.2S217.9 63 216.2 65.2c-1.8 2.2 8.9 10.9 8.9 10.9s-17.6-10.9-23.8-7.7c-4.5 2.3 18.3 17.2 18.3 17.2s-14.8-11.3-18.3-8.3 16.7 27.2 16.7 27.2-23-24.8-25.3-23.6C190.4 82.1 199 94 199 94s-11.2-12.4-14.3-10.3c-3.1 2.2 16.2 34.3 16.2 34.3S180 85.1 171.3 90.6c13.5 29.7 8.5 33.9 8.5 33.9s-1.7-30.3-18.6-29.5c-8.5.4 4 22.6 4 22.6S153.7 97.3 146 97.7c14.1 26.8 9.1 37.6 9.1 37.6s2.3-22.9-16.8-35.6c7.3 6.5-4.6 35.6-4.6 35.6s10.4-42.9-7.7-34.7c-2.9 1.3-.2 21.4-.2 21.4s-3.6-23-9.1-21.8c-3.2.7-20.2 31.9-20.2 31.9s13.9-33.7 9.7-32.3c-3.1 1-8.9 14.9-8.9 14.9s2.8-13.7 0-14.5c-2.8-.8-18.6 14.5-18.6 14.5s11.7-13.7 9.7-16.6c-3.1-4.3-6.6-4.5-10.9-2.8C71.3 97.7 63 109 63 109s8.3-11.5 6.9-15.7c-2.3-6.9-26.2 13.3-26.2 13.3s14.1-13.3 10.9-16.2c-3.2-2.8-20.8-2-26.2-2-16.1.2-21.7-3.6-26.6-7.5"
/>
<path
fill="#373535"
d="M.9 78.5c21.2 10.6 40.6-1.6 65 5.3 18.6 5.2 41.2 11.7 71.9 7.2 30.7-4.4 56.9-17.8 69.5-41.6 3.9-10.6 19.8 2.4 19.8 2.4s-11.6-4.8-11.3-2.6c.3 2.3 17.4 10.2 17.4 10.2s-15.5-4.8-14.5-1.2c.9 3.6 19.4 18.2 19.4 18.2s-20.9-15.9-22.6-13.7c-1.7 2.2 8.9 10.9 8.9 10.9s-17.6-10.9-23.8-7.7c-4.5 2.3 18.3 17.2 18.3 17.2s-14.8-11.3-18.3-8.3 16.7 27.2 16.7 27.2-22.9-24.8-25.2-23.6c-2.3 1.2 6.3 13.1 6.3 13.1S187 79.2 183.9 81.3c-3.1 2.2 16.1 34.3 16.1 34.3s-20.9-33-29.5-27.5c13.6 29.8 8.5 34 8.5 34s-1.7-30.3-18.6-29.5c-8.5.4 4 22.6 4 22.6S153 95 145.3 95.4c14.1 26.8 9.1 37.6 9.1 37.6s2.3-22.9-16.8-35.6c7.3 6.5-4.6 35.6-4.6 35.6s10.4-42.9-7.7-34.7c-2.9 1.3-.2 21.4-.2 21.4s-3.6-23-9.1-21.8c-3.2.7-20.2 31.9-20.2 31.9s13.9-33.7 9.7-32.3c-3.1 1-8.9 14.9-8.9 14.9s2.8-13.7 0-14.5c-2.8-.8-18.6 14.5-18.6 14.5s11.7-13.7 9.7-16.6c-3.1-4.3-6.6-4.5-10.9-2.8-6.2 2.4-14.5 13.7-14.5 13.7s8.3-11.5 6.9-15.7C66.9 84.1 43 104.3 43 104.3S57.1 91 53.9 88.1c-3.2-2.8-20.8-2-26.2-2-16.3.1-21.9-3.7-26.8-7.6"
/>
</svg>
);
export default CassandraSVG;

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" preserveAspectRatio="xMidYMid" viewBox="0 -43.5 256 256">
<g fill="#373535">
<path
d="M30.9 142.2c2.2 0 4.2.5 5.3 1.5.2 1.6-1.3 4.2-2.2 4.2-1.1-.4-2.1-.6-3.4-.6-5.2 0-7.8 5.4-7.8 10.7 0 3.3 1.1 5.3 3.8 5.3 2.8 0 5.6-1.9 7.2-3.3.4.3.9 1.2.9 2.2 0 1.1-.3 2.2-1.4 3.3-1.8 1.8-4.9 3.4-9.4 3.4-5.1 0-8.7-2.9-8.7-9.7.2-9 6-17 15.7-17ZM47.7 163c2.8 0 7.9-4.9 9.3-14.3.1-.6.1-.7.2-1.3-.6-.2-1.5-.4-2.3-.4-2.1 0-4.3.6-6.2 3.3-2 2.8-2.9 6.3-2.9 9.1 0 2.3.7 3.6 1.9 3.6Zm-9.2-2.6c0-3.4 1.1-9.2 5.4-13.5 3.7-3.8 8.1-4.7 12.2-4.7 2.7 0 6.3.9 8.6 1.3-.6 2.5-1.9 12-2.6 17.5-.3 2.3-.4 5.6-.3 6.8-1.9.8-5.4 1-6.4 1-.5 0-.6-2.3-.5-4.6.1-.7.2-1.8.2-2.3-2.2 3.7-6.6 6.8-11.2 6.8-3.3.1-5.4-2.7-5.4-8.3ZM78.9 142.2c2.3 0 4.6.9 5.6 1.9-.1 1.6-1.3 4.3-3.3 3.5-.9-.3-1.7-.5-2.9-.5-1.5 0-2.9.7-2.9 2.1 0 1.1.8 1.9 4.6 4.6 2.7 2 3.8 3.8 3.8 6.3 0 4.2-3.9 8.7-10.8 8.7-2.8 0-5.3-1.1-6-2.2-1-1.7-.2-5.1.9-4.5 1.5.7 3.9 1.5 5.9 1.5 1.9 0 3.1-.9 3.1-2 0-1-.9-1.8-4.3-4.3-2.9-2.2-3.8-4.2-3.8-6.4 0-4.8 4.1-8.7 10.1-8.7ZM98.6 142.2c2.3 0 4.6.9 5.6 1.9-.1 1.6-1.3 4.3-3.3 3.5-.9-.3-1.7-.5-2.9-.5-1.5 0-2.9.7-2.9 2.1 0 1.1.8 1.9 4.6 4.6 2.7 2 3.8 3.8 3.8 6.3 0 4.2-3.9 8.7-10.8 8.7-2.8 0-5.2-1.1-6-2.2-1-1.7-.2-5.1.9-4.5 1.5.7 3.9 1.5 5.9 1.5 1.9 0 3.1-.9 3.1-2 0-1-.9-1.8-4.3-4.3-2.9-2.2-3.8-4.2-3.8-6.4 0-4.8 4.1-8.7 10.1-8.7ZM116.5 163c2.8 0 7.9-4.9 9.3-14.3.1-.6.1-.7.2-1.3-.6-.2-1.5-.4-2.3-.4-2.1 0-4.3.6-6.2 3.3-2 2.8-2.9 6.3-2.9 9.1.1 2.3.7 3.6 1.9 3.6Zm-9.2-2.6c0-3.4 1.1-9.2 5.4-13.5 3.7-3.8 8.1-4.7 12.2-4.7 2.7 0 6.3.9 8.6 1.3-.6 2.5-1.9 12-2.6 17.5-.3 2.3-.4 5.6-.3 6.8-1.9.8-5.4 1-6.4 1-.5 0-.6-2.3-.5-4.6.1-.7.2-1.8.2-2.3-2.2 3.7-6.6 6.8-11.2 6.8-3.2.1-5.4-2.7-5.4-8.3ZM146.4 149.6c2.6-4.2 6-7.4 10.8-7.4 4.1 0 5.4 3.8 4.6 9.1-.4 2.5-1.1 6.1-1.5 9.4-.4 2.8-.7 5.3-.6 7-1.5.7-5.8 1-6.8 1-.4 0-.5-3.1.1-6.4.5-2.7 1.4-7.7 1.9-10.6.3-1.7.2-3.7-1.4-3.7-2.1 0-7.1 3.4-9.6 17.2-.2 1.1-.6 1.8-1.3 2.2-.9.5-2.7 1-6.4 1 .7-3.5 1.8-10.6 2.6-15.9.7-4.8 1-7.9.9-9.1 1-.3 6.1-1.4 6.6-1.4.6 0 .7 1.8.2 6-.1.4-.1 1-.2 1.4h.1v.2ZM175.4 162.9c2.5 0 7.6-4.7 9-13 .1-.5.2-1.3.3-1.8-.7-.7-1.7-1.1-3.3-1.1-5.8 0-8.3 6.9-8.3 11.9.1 2.6 1 4 2.3 4Zm-3.7 5.9c-3.7 0-5.9-3.3-5.9-8.8 0-9.2 5.8-17.7 15.5-17.7 1.7 0 3.3.5 4.2 1 .5-2.6 1.7-10.7 1.8-13.1 1.6-.3 5-.8 6.6-.8.6 0 .8.6.6 2.1-1.4 8.6-3.8 25-4.3 28.6-.3 3.1-.4 6.1-.3 7.8-1.8.8-5.5 1-6.5 1-.4 0-.6-2.6-.5-5 .1-.7.2-1.8.2-2-3.1 4.6-7 6.9-11.4 6.9ZM205.1 150.4c3-6.7 6.6-8.2 9-8.2.7 0 1.9.5 2.4 1 .2 1.9-1.3 5.6-2.6 7.1-.7-.3-1.5-.7-2.5-.7-1.9 0-5.8 3-8.2 16-.2 1.1-.5 1.5-1.1 1.8-1 .6-4.8 1-6.6 1.1.9-4.7 2.3-14.2 2.9-19.8.2-1.4.2-4.1.1-5.1 1.1-.5 5.4-1.5 6.3-1.5.5 0 .9 3.1.1 8.2h.2v.1ZM225.2 163c2.8 0 7.9-4.9 9.3-14.3.1-.6.1-.7.2-1.3-.6-.2-1.5-.4-2.3-.4-2.1 0-4.3.6-6.2 3.3-2 2.8-2.9 6.3-2.9 9.1.1 2.3.7 3.6 1.9 3.6Zm-9.2-2.6c0-3.4 1.1-9.2 5.4-13.5 3.7-3.8 8.1-4.7 12.2-4.7 2.7 0 6.3.9 8.6 1.3-.6 2.5-1.9 12-2.6 17.5-.3 2.3-.4 5.6-.3 6.8-1.9.8-5.4 1-6.4 1-.5 0-.6-2.3-.5-4.6.1-.7.2-1.8.2-2.3-2.2 3.7-6.6 6.8-11.2 6.8-3.2.1-5.4-2.7-5.4-8.3Z" />
</g>
<path fill="#BBE6FB"
d="M205.5 45.5c1.9 21.9-32.6 42.8-77.1 46.6-44.5 3.8-82-10.9-83.9-32.8-1.9-21.9 32.6-42.8 77.1-46.6 44.4-3.8 82 10.8 83.9 32.8" />
<path fill="#FFF"
d="M122.8 15.2c-17-.3-36.8 6.5-51.6 12.8-1.5 4.4-2.4 9.1-2.4 14 0 26 23.5 47.1 52.5 47.1s52.6-21 52.6-47.1c0-8.2-2.4-16-6.5-22.7-11.8-1.8-28.1-3.8-44.6-4.1" />
<path fill="#FFF"
d="M121.4 15.2c-9.4-.6-25.6 4.3-39.1 9.2-2.1 4.8-3.2 10.1-3.2 15.7 0 22.8 20.7 41.3 42.5 41.3 21.7 0 40.9-18.5 42.5-41.3.5-7.4-2-14.4-5.6-20.4-13.9-2.4-28.7-3.9-37.1-4.5" />
<path fill="#373535"
d="M97.3 37.2c1.2-2.6 2.9-3.8 4.6-5.9-.2-.5-.6-2.2-.6-2.7 0-2.6 2.1-4.6 4.6-4.6.6 0 1.2.1 1.7.3 7.7-5.9 17.8-8.4 28-6.1.9.2 1.8.5 2.7.7-10-1.4-21.4 2.2-29.1 8.4.2.6.9 2.1.9 2.8 0 2.6-1.7 3.2-4.2 3.2-.6 0-1.1-.1-1.7-.3-1.7 2.3-3.9 6.8-4.9 9.6 4.3 3.8 8.1 5.2 13.1 7.1 0-.2.2-.5.2-.7 0-7.7 6.8-14 14.5-14 6.9 0 12.7 5 13.8 11.6 3.5-2.2 6.8-3.9 9.3-7.1-.6-.7-1.2-2.8-1.2-3.8 0-2.3 1.9-4.2 4.2-4.2.3 0 .6 0 1 .1 1.3-2.7 2.3-5.5 2.9-8.4-12.1-9-35.5-7.7-35.5-7.7s-18.6-1-31.2 5.2c.9 5.8 3.3 11.6 6.9 16.5" />
<path fill="#373535"
d="M155.1 33.7c.9.8 1.3 1.4 1.7 2.1 1.1 2-1.1 3.9-3.5 3.9-.2 0-.5 0-.7-.1-2.6 4.1-7.2 9.3-11.3 12 6.3 1 12.2 3.5 16.8 7.4 3.4-6.1 6-15 6-22.5 0-5.7-2.5-9.9-6.3-13-.1 3.1-1.8 7.4-2.7 10.2M104.3 72.5c2.1-5.8 7.2-10.2 12.1-14.1-.7-1-1.8-3.4-2.2-4.5-5.9-1.8-11.1-5.2-15.2-9.6 0 .1-.1.3-.1.4-.8 3.4-.9 6.9-.5 10.2 2.8.5 5 3 5 6 0 1.8-1.6 4.3-2.8 5.5 1.2 2.6 2.1 4 3.7 6.1" />
<path fill="#373535"
d="M103.9 77.3c-2.5-2.5-4.2-7.4-5.8-10.5-.3 0-.6.1-.9.1-3.4 0-6.9-2.8-6.1-6.1.4-1.8 1.7-3 3.7-4-.5-3.8-.6-9.1.3-13 .2-1.1.8-1.6 1.1-2.7-3.7-5.4-6.1-12.6-6.1-19.7v-.8c-6.3 3.2-11 8.1-11 15.9 0 17.3 10 34.3 24.8 40.9v-.1M140.4 53.4c-1.9 5.4-7.1 9.4-13.2 9.4-3.3 0-6.3-1.1-8.6-3-4.9 3.8-9.4 10.5-11.6 16.4 1 1.1 1.7 2 2.9 3 3.4.9 8.2 0 11.9 0 14.9 0 28.2-6.6 35.8-18.3-5.2-3.6-11.2-7-17.2-7.5" />
<path fill="#1287B1"
d="M96.9 39.2c1.2-2.6 2.6-4.9 4.3-7.1-.2-.5-.3-1.1-.3-1.6 0-2.6 2.1-4.6 4.6-4.6.6 0 1.2.1 1.7.3 7.7-5.9 17.8-8.4 28-6.1.9.2 1.8.5 2.7.7-10-1.4-20.4 1.7-28.1 7.9.2.6.4 1.2.4 1.8 0 2.6-2.1 4.6-4.6 4.6-.6 0-1.1-.1-1.7-.3-1.7 2.3-3.2 4.9-4.2 7.7 3.7 3.9 8.2 7.1 13.2 8.9v-.7c0-7.7 6.3-14 14-14 6.9 0 12.7 5 13.8 11.6 3.5-2.2 6.5-5 9.1-8.3-.6-.7-1-1.6-1-2.6 0-2.3 1.9-4.2 4.2-4.2.3 0 .6 0 1 .1 1.3-2.7 2.3-5.5 2.9-8.4-12.1-9-35.5-7.7-35.5-7.7s-18.6-1-31.2 5.2c.7 6.1 3.1 11.9 6.7 16.8" />
<path fill="#1287B1"
d="M155.7 34.4c.9.8 1.4 1.9 1.4 3.1 0 2.3-1.9 4.2-4.2 4.2-.2 0-.5 0-.7-.1-2.6 4.1-6.1 7.6-10.2 10.2 6 .9 11.7 3.5 16.4 7.4 3.4-6.1 5.4-13.2 5.4-20.7 0-5.7-2.5-9.9-6.3-13-.2 3.1-.8 6.1-1.8 8.9M104.9 73.8c2.1-5.8 5.7-10.9 10.6-14.8-.7-1-1.3-2-1.7-3.2-5.9-1.8-11.1-5.2-15.2-9.6 0 .1-.1.3-.1.4-.8 3.4-.9 6.9-.5 10.2 2.8.5 5 3 5 6 0 1.8-.8 3.4-2 4.5 1 2.3 2.4 4.5 3.9 6.5" />
<path fill="#1287B1"
d="M103.9 77.2c-2.5-2.5-4.6-5.3-6.2-8.4-.3 0-.6.1-.9.1-3.4 0-6.1-2.7-6.1-6.1 0-2.4 1.4-4.5 3.4-5.5-.5-3.8-.3-7.6.6-11.5.2-1.1.6-2.2.9-3.3-3.7-5.4-5.9-12-5.9-19.1v-.8c-6.3 3.2-11 8.1-11 15.9 0 17.3 10.3 32.2 25.1 38.8.1 0 .1 0 .1-.1M140 55.4c-1.9 5.4-7.1 9.4-13.2 9.4-3.3 0-6.3-1.1-8.6-3-4.9 3.8-8.6 9-10.9 14.9 1 1.1 2.1 2.1 3.2 3.1 3.4.9 7 1.4 10.7 1.4 14.9 0 28.1-7.7 35.7-19.4-5-3.6-10.9-5.9-16.9-6.4" />
<path fill="#FFF"
d="m140.5 51.8 12.9-3.1-13-.7 10.6-8-12 4.3 8.1-11.3-11.3 7.5 3.9-13.2-7.7 10.9-.2-13.8-5.1 12.3-4.2-12.4.2 14.6-7.3-13.1 4 13.9-11.9-8.6 9.3 11.7-14.8-5.4 11.6 8.6-14.9.5 15.3 3.9-15.3 3.3 15.1 1.1-12.7 8.1 13.1-4.7-9.1 11.5 11.5-9.3-4.1 15.4 8.9-12.6-1.2 14.8 5-13.5 4.3 14.1 1-14.2 6.4 12.1-3.8-13.8 11.6 9-7.5-11.5 12.8 5-9.8-9.6 13.1 1-12.8-4.8Z" />
<path fill="#373535" fill-opacity=".35"
d="M2.8 76.5C42.9 36.4 74.9 24 104 18.4c3.8-.7 4.6-9.2 4.6-9.2s.5 6.2 3.2 7c2.7.8 6.2-9.7 6.2-9.7s-3.2 9.4 0 10c3.2.5 9.2-9.2 9.2-9.2s-2.4 8.3-.8 8.9c1.6.5 9.7-12.1 9.7-12.1s-4.8 8.3-.3 9.2c4.6.8 11.3-5.7 11.3-5.7s-5.2 5.9-2.9 6.8c10 3.5 18-9.4 18-9.4s-1.9 5.7-6.7 11.9c10.5 2.7 18.3-13.1 18.3-13.1L166 19.6c4 2 20.1-16.6 20.1-16.6s-8.3 14.5-13.2 17.5c2.7 2.2 12.4-6.5 12.4-6.5s-7.8 9.7-4.8 10.2c4.3 3.5 20.2-18 20.2-18s-6.2 12.7-15.3 22.6C193 32.7 212 8.2 212 8.2s-.5 7.8-14.3 20.2c10.2-1.3 23.4-20.7 23.4-20.7s-4.8 14.5-16.4 24.8c10-1 26.1-25.8 26.1-25.8s-6.2 17.2-18.8 27.2c14 3.1 34.2-17.8 34.2-17.8s-7.9 14.8-18.3 20.9c11.6 4.4 27.5-13.9 27.5-13.9s-15.9 24.5-41.2 23.4c-8.3-.4-33.4-25.2-87.2-23.2C55.8 25.9 40.8 56.1 2.8 76.5" />
<path fill="#373535"
d="M4.4 73.5C44.5 33.4 76.5 21 105.6 15.4c3.8-.7 4.6-9.2 4.6-9.2s.5 6.2 3.2 7c2.7.8 6.2-9.7 6.2-9.7s-3.2 9.4 0 10c3.2.5 9.2-9.2 9.2-9.2s-2.4 8.3-.8 8.9c1.6.5 9.7-12.1 9.7-12.1s-4.8 8.3-.3 9.2c4.6.8 11.3-5.7 11.3-5.7s-5.2 5.9-2.9 6.8c10 3.5 18-9.4 18-9.4s-1.9 5.7-6.7 11.9C167.6 16.6 175.4.8 175.4.8l-7.8 15.8c4 2.2 20.2-16.4 20.2-16.4s-8.3 14.5-13.2 17.5C177.3 19.6 187 11 187 11s-7.8 9.7-4.8 10.2c4.3 3.5 20.2-18 20.2-18s-6.3 12.7-15.4 22.6c7.6 3.8 26.7-20.7 26.7-20.7s-.5 7.8-14.3 20.2c10.2-1.3 23.4-20.7 23.4-20.7s-4.8 14.5-16.4 24.8c10-1 26.1-25.8 26.1-25.8s-6.2 17.2-18.8 27.2c14 3.1 34.2-17.8 34.2-17.8s-7.9 14.8-18.3 20.9c11.6 4.4 27.5-13.9 27.5-13.9s-15.9 24.5-41.2 23.4c-8.3-.4-33.4-25.2-87.2-23.2C57.5 22.9 42.4 53 4.4 73.5" />
<path fill="#373535" fill-opacity=".35"
d="M1.8 80.9c21.2 10.6 40.6-1.6 65 5.3 18.6 5.2 41.2 11.7 71.9 7.2 30.7-4.4 56.9-17.8 69.5-41.6 3.9-10.6 19.8 2.4 19.8 2.4s-11.6-4.8-11.3-2.6c.3 2.3 17.4 10.2 17.4 10.2s-15.5-4.8-14.5-1.2c.9 3.6 19.4 18.2 19.4 18.2S217.9 63 216.2 65.2c-1.8 2.2 8.9 10.9 8.9 10.9s-17.6-10.9-23.8-7.7c-4.5 2.3 18.3 17.2 18.3 17.2s-14.8-11.3-18.3-8.3 16.7 27.2 16.7 27.2-23-24.8-25.3-23.6C190.4 82.1 199 94 199 94s-11.2-12.4-14.3-10.3c-3.1 2.2 16.2 34.3 16.2 34.3S180 85.1 171.3 90.6c13.5 29.7 8.5 33.9 8.5 33.9s-1.7-30.3-18.6-29.5c-8.5.4 4 22.6 4 22.6S153.7 97.3 146 97.7c14.1 26.8 9.1 37.6 9.1 37.6s2.3-22.9-16.8-35.6c7.3 6.5-4.6 35.6-4.6 35.6s10.4-42.9-7.7-34.7c-2.9 1.3-.2 21.4-.2 21.4s-3.6-23-9.1-21.8c-3.2.7-20.2 31.9-20.2 31.9s13.9-33.7 9.7-32.3c-3.1 1-8.9 14.9-8.9 14.9s2.8-13.7 0-14.5c-2.8-.8-18.6 14.5-18.6 14.5s11.7-13.7 9.7-16.6c-3.1-4.3-6.6-4.5-10.9-2.8C71.3 97.7 63 109 63 109s8.3-11.5 6.9-15.7c-2.3-6.9-26.2 13.3-26.2 13.3s14.1-13.3 10.9-16.2c-3.2-2.8-20.8-2-26.2-2-16.1.2-21.7-3.6-26.6-7.5" />
<path fill="#373535"
d="M.9 78.5c21.2 10.6 40.6-1.6 65 5.3 18.6 5.2 41.2 11.7 71.9 7.2 30.7-4.4 56.9-17.8 69.5-41.6 3.9-10.6 19.8 2.4 19.8 2.4s-11.6-4.8-11.3-2.6c.3 2.3 17.4 10.2 17.4 10.2s-15.5-4.8-14.5-1.2c.9 3.6 19.4 18.2 19.4 18.2s-20.9-15.9-22.6-13.7c-1.7 2.2 8.9 10.9 8.9 10.9s-17.6-10.9-23.8-7.7c-4.5 2.3 18.3 17.2 18.3 17.2s-14.8-11.3-18.3-8.3 16.7 27.2 16.7 27.2-22.9-24.8-25.2-23.6c-2.3 1.2 6.3 13.1 6.3 13.1S187 79.2 183.9 81.3c-3.1 2.2 16.1 34.3 16.1 34.3s-20.9-33-29.5-27.5c13.6 29.8 8.5 34 8.5 34s-1.7-30.3-18.6-29.5c-8.5.4 4 22.6 4 22.6S153 95 145.3 95.4c14.1 26.8 9.1 37.6 9.1 37.6s2.3-22.9-16.8-35.6c7.3 6.5-4.6 35.6-4.6 35.6s10.4-42.9-7.7-34.7c-2.9 1.3-.2 21.4-.2 21.4s-3.6-23-9.1-21.8c-3.2.7-20.2 31.9-20.2 31.9s13.9-33.7 9.7-32.3c-3.1 1-8.9 14.9-8.9 14.9s2.8-13.7 0-14.5c-2.8-.8-18.6 14.5-18.6 14.5s11.7-13.7 9.7-16.6c-3.1-4.3-6.6-4.5-10.9-2.8-6.2 2.4-14.5 13.7-14.5 13.7s8.3-11.5 6.9-15.7C66.9 84.1 43 104.3 43 104.3S57.1 91 53.9 88.1c-3.2-2.8-20.8-2-26.2-2-16.3.1-21.9-3.7-26.8-7.6" />
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,9 @@
import React, { forwardRef } from "react";
import CassandraSVG from "./Cassandra";
export const CassandraIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <CassandraSVG ref={ref} {...props} />;
});

View file

@ -155,6 +155,7 @@ import { AstraDBIcon } from "../icons/AstraDB";
import { AzureIcon } from "../icons/Azure";
import { BingIcon } from "../icons/Bing";
import { BotMessageSquareIcon } from "../icons/BotMessageSquare";
import { CassandraIcon } from "../icons/Cassandra";
import { ChromaIcon } from "../icons/ChromaIcon";
import { CohereIcon } from "../icons/Cohere";
import { CouchbaseIcon } from "../icons/Couchbase";
@ -328,6 +329,7 @@ export const nodeIconsLucide: iconsType = {
Play,
Vectara: VectaraIcon,
ArrowUpToLine: ArrowUpToLine,
Cassandra: CassandraIcon,
Chroma: ChromaIcon,
Couchbase: CouchbaseIcon,
AirbyteJSONLoader: AirbyteIcon,