SurrealDB Async

Code

1import asyncio
2
3from kern.agent import Agent
4from kern.knowledge.embedder.openai import OpenAIEmbedder
5from kern.knowledge.knowledge import Knowledge
6from kern.vectordb.surrealdb import SurrealDb
7from surrealdb import AsyncSurreal
8
9SURREALDB_URL = "ws://localhost:8000"
10SURREALDB_USER = "root"
11SURREALDB_PASSWORD = "root"
12SURREALDB_NAMESPACE = "test"
13SURREALDB_DATABASE = "test"
14
15# Create a client
16client = AsyncSurreal(url=SURREALDB_URL)
17
18surrealdb = SurrealDb(
19 async_client=client,
20 collection="recipes", # Collection name for storing documents
21 efc=150, # HNSW construction time/accuracy trade-off
22 m=12, # HNSW max number of connections per element
23 search_ef=40, # HNSW search time/accuracy trade-off
24 embedder=OpenAIEmbedder(),
25)
26
27async def async_demo():
28 """Demonstrate asynchronous usage of SurrealDb"""
29
30 await client.signin({"username": SURREALDB_USER, "password": SURREALDB_PASSWORD})
31 await client.use(namespace=SURREALDB_NAMESPACE, database=SURREALDB_DATABASE)
32
33 knowledge = Knowledge(
34 vector_db=surrealdb,
35 )
36
37 await knowledge.ainsert(
38 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",
39 )
40
41 agent = Agent(knowledge=knowledge)
42 await agent.aprint_response(
43 "What are the 3 categories of Thai SELECT is given to restaurants overseas?",
44 markdown=True,
45 )
46
47if __name__ == "__main__":
48 # Run asynchronous demo
49 print("\nRunning asynchronous demo...")
50 asyncio.run(async_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/async_surreal_db.py