SingleStore Vector Database

Use SingleStore as a vector database for your Knowledge Base.

Setup

1docker run -d --name singlestoredb \
2 -p 3306:3306 \
3 -p 8080:8080 \
4 -e ROOT_PASSWORD=admin \
5 -e SINGLESTORE_DB=AGNO \
6 -e SINGLESTORE_USER=root \
7 -e SINGLESTORE_PASSWORD=password \
8 singlestore/cluster-in-a-box
9
10docker start singlestoredb

After running the container, set the environment variables:

1export SINGLESTORE_HOST="localhost"
2export SINGLESTORE_PORT="3306"
3export SINGLESTORE_USERNAME="root"
4export SINGLESTORE_PASSWORD="admin"
5export SINGLESTORE_DATABASE="AGNO"

SingleStore supports both cloud-based and local deployments. For step-by-step guidance on setting up your cloud deployment, please refer to the SingleStore Setup Guide.

Example

1import typer
2from typing import Optional
3from os import getenv
4
5from sqlalchemy.engine import create_engine
6
7from kern.agent import Agent
8from kern.knowledge.knowledge import Knowledge
9from kern.vectordb.singlestore import SingleStore
10
11USERNAME = getenv("SINGLESTORE_USERNAME")
12PASSWORD = getenv("SINGLESTORE_PASSWORD")
13HOST = getenv("SINGLESTORE_HOST")
14PORT = getenv("SINGLESTORE_PORT")
15DATABASE = getenv("SINGLESTORE_DATABASE")
16SSL_CERT = getenv("SINGLESTORE_SSL_CERT", None)
17
18db_url = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?charset=utf8mb4"
19if SSL_CERT:
20 db_url += f"&ssl_ca={SSL_CERT}&ssl_verify_cert=true"
21
22db_engine = create_engine(db_url)
23
24knowledge_base = Knowledge(
25 vector_db=SingleStore(
26 collection="recipes",
27 db_engine=db_engine,
28 schema=DATABASE,
29 ),
30)
31
32def pdf_assistant(user: str = "user"):
33 run_id: Optional[str] = None
34
35 agent = Agent(
36 user_id=user,
37 knowledge=knowledge_base,
38 # Uncomment the following line to use traditional RAG
39 # add_knowledge_to_context=True,
40 )
41 if run_id is None:
42 run_id = agent.run_id
43 print(f"Started Run: {run_id}\n")
44 else:
45 print(f"Continuing Run: {run_id}\n")
46
47 while True:
48 agent.cli_app(markdown=True)
49
50if __name__ == "__main__":
51 # Comment out after first run
52 knowledge_base.insert(
53 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
54 )
55
56 typer.run(pdf_assistant)

SingleStore Params

ParameterTypeDefaultDescription
collectionstr-The name of the collection to use.
schemaOptional[str]"ai"The database schema to use.
db_urlOptional[str]NoneThe database connection URL.
db_engineOptional[Engine]NoneSQLAlchemy engine instance.
embedderEmbedderOpenAIEmbedder()The embedder to use for creating vector embeddings.
distanceDistanceDistance.cosineThe distance metric to use for similarity search.