Embedded knowledge graph database for AI and RAG applications
Project description
LatticeDB Python Bindings
Python bindings for LatticeDB, an embedded knowledge graph database for AI/RAG applications.
Installation
pip install latticedb
The native shared library (liblattice.dylib / liblattice.so) must be available on the system. Install it via the install script or build from source with zig build shared.
Quick Start
import numpy as np
from latticedb import Database
with Database("knowledge.db", create=True, enable_vector=True, vector_dimensions=4) as db:
# Create nodes, edges, and index content
with db.write() as txn:
alice = txn.create_node(
labels=["Person"],
properties={"name": "Alice", "age": 30},
)
bob = txn.create_node(
labels=["Person"],
properties={"name": "Bob", "age": 25},
)
txn.create_edge(alice.id, bob.id, "KNOWS")
# Index text for full-text search
txn.fts_index(alice.id, "Alice works on machine learning research")
txn.fts_index(bob.id, "Bob studies deep learning and neural networks")
# Store vector embeddings
txn.set_vector(alice.id, "embedding", np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32))
txn.set_vector(bob.id, "embedding", np.array([0.0, 1.0, 0.0, 0.0], dtype=np.float32))
txn.commit()
# Query with Cypher
result = db.query("MATCH (n:Person) WHERE n.age > 20 RETURN n.name, n.age")
for row in result:
print(row)
# Vector similarity search
query_vec = np.array([0.9, 0.1, 0.0, 0.0], dtype=np.float32)
for r in db.vector_search(query_vec, k=2):
print(f"Node {r.node_id}: distance={r.distance:.4f}")
# Full-text search
for r in db.fts_search("machine learning"):
print(f"Node {r.node_id}: score={r.score:.4f}")
# Fuzzy search (typo-tolerant)
for r in db.fts_search_fuzzy("machin lerning"):
print(f"Node {r.node_id}: score={r.score:.4f}")
API Reference
Database
Database(
path: str | Path,
*,
create: bool = False, # Create if doesn't exist
read_only: bool = False, # Open in read-only mode
cache_size_mb: int = 100, # Page cache size
enable_vector: bool = False, # Enable vector storage
vector_dimensions: int = 128 # Vector dimensions
)
Methods
open()/close()- Open/close the database (also works as context manager)read()- Start a read-only transaction (context manager)write()- Start a read-write transaction (context manager)query(cypher, parameters=None)- Execute a Cypher queryvector_search(vector, k=10, ef_search=64)- k-NN vector searchfts_search(query, limit=10)- Full-text searchfts_search_fuzzy(query, limit=10, max_distance=0, min_term_length=0)- Fuzzy full-text searchcache_clear()- Clear the query cachecache_stats()- Get cache hit/miss statistics
Transaction
Read Operations
get_node(node_id)- Get a node by ID, returnsNodeorNonenode_exists(node_id)- Check if a node existsget_property(node_id, key)- Get a property valueget_outgoing_edges(node_id)- Get outgoing edges from a nodeget_incoming_edges(node_id)- Get incoming edges to a nodeis_read_only/is_active- Transaction state
Write Operations
create_node(labels=[], properties=None)- Create a nodedelete_node(node_id)- Delete a nodeset_property(node_id, key, value)- Set a property on a nodeset_vector(node_id, key, vector)- Set a vector embeddingbatch_insert(label, vectors)- Batch insert nodes with vectors (see below)fts_index(node_id, text)- Index text for full-text searchcreate_edge(source_id, target_id, edge_type)- Create an edgedelete_edge(source_id, target_id, edge_type)- Delete an edgecommit()/rollback()- Commit or rollback the transaction
Batch Insert
Insert many nodes with vectors in a single efficient call:
import numpy as np
with Database("vectors.db", create=True, enable_vector=True, vector_dimensions=128) as db:
with db.write() as txn:
vectors = np.random.rand(1000, 128).astype(np.float32)
node_ids = txn.batch_insert("Document", vectors)
print(f"Created {len(node_ids)} nodes")
txn.commit()
Full-Text Search
Exact Search
results = db.fts_search("machine learning", limit=10)
for r in results:
print(f"Node {r.node_id}: score={r.score:.4f}")
Fuzzy Search (Typo-Tolerant)
# Finds "machine learning" even with typos
results = db.fts_search_fuzzy("machne lerning", limit=10)
# Control fuzzy matching sensitivity
results = db.fts_search_fuzzy(
"machne",
limit=10,
max_distance=2, # Max edit distance (default: 2)
min_term_length=4, # Min term length for fuzzy matching (default: 4)
)
Embeddings
LatticeDB includes a built-in hash embedding function and an HTTP client for external embedding services.
Hash Embeddings (Built-in)
Deterministic, no external service needed. Useful for testing or simple keyword-based similarity:
from latticedb import hash_embed
vec = hash_embed("hello world", dimensions=128)
print(vec.shape) # (128,)
HTTP Embedding Client
Connect to Ollama, OpenAI, or compatible APIs:
from latticedb import EmbeddingClient, EmbeddingApiFormat
# Ollama (default)
with EmbeddingClient("http://localhost:11434") as client:
vec = client.embed("hello world")
# OpenAI-compatible API
with EmbeddingClient(
"https://api.openai.com/v1",
model="text-embedding-3-small",
api_format=EmbeddingApiFormat.OPENAI,
api_key="sk-...",
) as client:
vec = client.embed("hello world")
Edge Traversal
with db.read() as txn:
outgoing = txn.get_outgoing_edges(node_id)
for edge in outgoing:
print(f"{edge.source_id} --[{edge.edge_type}]--> {edge.target_id}")
incoming = txn.get_incoming_edges(node_id)
for edge in incoming:
print(f"{edge.source_id} --[{edge.edge_type}]--> {edge.target_id}")
Cypher Queries
# Pattern matching
result = db.query("MATCH (n:Person) RETURN n.name")
# With parameters
result = db.query(
"MATCH (n:Person) WHERE n.name = $name RETURN n",
parameters={"name": "Alice"},
)
# Vector similarity in Cypher
result = db.query(
"MATCH (n:Document) WHERE n.embedding <=> $vec < 0.5 RETURN n.title",
parameters={"vec": query_vector},
)
# Full-text search in Cypher
result = db.query(
'MATCH (n:Document) WHERE n.content @@ "machine learning" RETURN n.title'
)
# Data mutation
db.query("CREATE (n:Person {name: 'Charlie', age: 35})")
db.query("MATCH (n:Person {name: 'Charlie'}) SET n.age = 36")
db.query("MATCH (n:Person {name: 'Charlie'}) DETACH DELETE n")
Query Cache
# Get cache statistics
stats = db.cache_stats()
print(f"Entries: {stats['entries']}, Hits: {stats['hits']}, Misses: {stats['misses']}")
# Clear the cache
db.cache_clear()
Supported Property Types
None- Null valuebool- Booleanint- 64-bit integerfloat- 64-bit floatstr- UTF-8 stringbytes- Binary data
Error Handling
from latticedb import LatticeError, LatticeNotFoundError, LatticeIOError
try:
with Database("nonexistent.db") as db:
pass
except LatticeNotFoundError:
print("Database not found")
except LatticeIOError:
print("I/O error")
except LatticeError as e:
print(f"Error: {e}")
Requirements
- Python 3.9+
- NumPy (for vector operations)
- The native LatticeDB library (
liblattice.dylib/liblattice.so)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file latticedb-0.3.0.tar.gz.
File metadata
- Download URL: latticedb-0.3.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
357ba5ae0c5e2c982189acc06eb7f73408c907840a5f2bbab4bb0960a3448b32
|
|
| MD5 |
527276cac10170ebd195a69a573a966a
|
|
| BLAKE2b-256 |
5995acfac7c1dcd53b0cffbbf73563b845e1ede533935d5f9545784b3ade6416
|
Provenance
The following attestation bundles were made for latticedb-0.3.0.tar.gz:
Publisher:
release.yml on jeffhajewski/latticedb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
latticedb-0.3.0.tar.gz -
Subject digest:
357ba5ae0c5e2c982189acc06eb7f73408c907840a5f2bbab4bb0960a3448b32 - Sigstore transparency entry: 1066037386
- Sigstore integration time:
-
Permalink:
jeffhajewski/latticedb@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/jeffhajewski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file latticedb-0.3.0-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: latticedb-0.3.0-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aef32de91a0f3819e02af7bdf913c3fe9dd8c25839da6ee724825031d2fd1e7d
|
|
| MD5 |
fd7a101bdb6a31c13340d3fd66fa2cb4
|
|
| BLAKE2b-256 |
cf6f6a7d48d107a5fb1409cc4afae1d8d8cc2e5cdae9a2458e44bfda559ff268
|
Provenance
The following attestation bundles were made for latticedb-0.3.0-py3-none-manylinux_2_17_x86_64.whl:
Publisher:
release.yml on jeffhajewski/latticedb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
latticedb-0.3.0-py3-none-manylinux_2_17_x86_64.whl -
Subject digest:
aef32de91a0f3819e02af7bdf913c3fe9dd8c25839da6ee724825031d2fd1e7d - Sigstore transparency entry: 1066037408
- Sigstore integration time:
-
Permalink:
jeffhajewski/latticedb@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/jeffhajewski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file latticedb-0.3.0-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: latticedb-0.3.0-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18a7543c9d2ec27984e0b62b936fd3328c873a91c58d22e41c04eff11785793c
|
|
| MD5 |
dce807cb004ba424c4517ccc8dc77807
|
|
| BLAKE2b-256 |
4ec8e9a1eeac57d0be01ebadf4baf6cf55b66005e940f11f9b0dca2e41b801dd
|
Provenance
The following attestation bundles were made for latticedb-0.3.0-py3-none-manylinux_2_17_aarch64.whl:
Publisher:
release.yml on jeffhajewski/latticedb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
latticedb-0.3.0-py3-none-manylinux_2_17_aarch64.whl -
Subject digest:
18a7543c9d2ec27984e0b62b936fd3328c873a91c58d22e41c04eff11785793c - Sigstore transparency entry: 1066037395
- Sigstore integration time:
-
Permalink:
jeffhajewski/latticedb@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/jeffhajewski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file latticedb-0.3.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: latticedb-0.3.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 699.0 kB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7caa5d90f677c4702ebb986e23ad0e200d99acbe6f6c7ae9e9cffa6a7c2e088
|
|
| MD5 |
0a883557e225731de4713bb2ac0c6395
|
|
| BLAKE2b-256 |
c5ed2dbda4f73f99df933572eb6db548e85c3b37834c5815b3cc4d923715ce7f
|
Provenance
The following attestation bundles were made for latticedb-0.3.0-py3-none-macosx_11_0_arm64.whl:
Publisher:
release.yml on jeffhajewski/latticedb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
latticedb-0.3.0-py3-none-macosx_11_0_arm64.whl -
Subject digest:
e7caa5d90f677c4702ebb986e23ad0e200d99acbe6f6c7ae9e9cffa6a7c2e088 - Sigstore transparency entry: 1066037399
- Sigstore integration time:
-
Permalink:
jeffhajewski/latticedb@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/jeffhajewski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file latticedb-0.3.0-py3-none-macosx_10_9_x86_64.whl.
File metadata
- Download URL: latticedb-0.3.0-py3-none-macosx_10_9_x86_64.whl
- Upload date:
- Size: 748.8 kB
- Tags: Python 3, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcea56b9106a2b3dd930f65f4388c6ca5e558d4b8b5a93ec821eef0dd18bea2e
|
|
| MD5 |
a12eb786b0b716858c7044d415620d10
|
|
| BLAKE2b-256 |
45050d615a4769032658c5e5c9cc0e5fd98d70fe89b3297dcf9cd6eaf1cf46b4
|
Provenance
The following attestation bundles were made for latticedb-0.3.0-py3-none-macosx_10_9_x86_64.whl:
Publisher:
release.yml on jeffhajewski/latticedb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
latticedb-0.3.0-py3-none-macosx_10_9_x86_64.whl -
Subject digest:
fcea56b9106a2b3dd930f65f4388c6ca5e558d4b8b5a93ec821eef0dd18bea2e - Sigstore transparency entry: 1066037403
- Sigstore integration time:
-
Permalink:
jeffhajewski/latticedb@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/jeffhajewski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ef24eb17bc05a4efecb920942ba0714ded9430c4 -
Trigger Event:
push
-
Statement type: