SurrealDB

Code

1from kern.agent import Agent
2from kern.knowledge.embedder.openai import OpenAIEmbedder
3from kern.knowledge.knowledge import Knowledge
4from kern.vectordb.surrealdb import SurrealDb
5from surrealdb import Surreal
6
7# SurrealDB connection parameters
8SURREALDB_URL = "ws://localhost:8000"
9SURREALDB_USER = "root"
10SURREALDB_PASSWORD = "root"
11SURREALDB_NAMESPACE = "test"
12SURREALDB_DATABASE = "test"
13
14# Create a client
15client = Surreal(url=SURREALDB_URL)
16client.signin({"username": SURREALDB_USER, "password": SURREALDB_PASSWORD})
17client.use(namespace=SURREALDB_NAMESPACE, database=SURREALDB_DATABASE)
18
19surrealdb = SurrealDb(
20 client=client,
21 collection="recipes", # Collection name for storing documents
22 efc=150, # HNSW construction time/accuracy trade-off
23 m=12, # HNSW max number of connections per element
24 search_ef=40, # HNSW search time/accuracy trade-off
25 embedder=OpenAIEmbedder(),
26)
27
28def sync_demo():
29 """Demonstrate synchronous usage of SurrealDb"""
30 knowledge = Knowledge(
31 vector_db=surrealdb,
32 )
33
34 # Load data synchronously
35 knowledge.insert(
36 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",
37 )
38
39 agent = Agent(knowledge=knowledge)
40 agent.print_response(
41 "What are the 3 categories of Thai SELECT is given to restaurants overseas?",
42 markdown=True,
43 )
44
45if __name__ == "__main__":
46 print("Running synchronous demo...")
47 sync_demo()

Usage

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Install dependencies

1uv pip install -U surrealdb pypdf openai kern-ai

Run SurrealDB

1docker run --rm --pull always -p 8000:8000 surrealdb/surrealdb:latest start --user root --pass root

Run Agent

1python cookbook/08_knowledge/vector_db/surrealdb/surreal_db.py