Python bindings for the lance-graph Cypher engine
Project description
Lance Graph
A high-performance Cypher-capable graph query engine with Python bindings for building scalable, serverless knowledge graphs.
Lance Graph combines a Rust-powered Cypher query engine with Python APIs for:
- Fast graph queries using Cypher query language
- AI-powered knowledge extraction from text (via LLM)
- Lance-backed storage for efficient graph data management
- Natural language Q&A over your knowledge graphs
- FastAPI web service for graph queries
Installation
pip install lance-graph
Quick Start
1. Simple Cypher Query
import pyarrow as pa
from lance_graph import CypherQuery, GraphConfig
# Create sample data
people = pa.table({
"person_id": [1, 2, 3, 4],
"name": ["Alice", "Bob", "Carol", "David"],
"age": [28, 34, 29, 42],
})
# Configure graph schema
config = (
GraphConfig.builder()
.with_node_label("Person", "person_id")
.build()
)
# Execute Cypher query
query = CypherQuery("MATCH (p:Person) WHERE p.age > 30 RETURN p.name, p.age")
result = query.with_config(config).execute({"Person": people})
print(result.to_pydict())
# Output: {'name': ['Bob', 'David'], 'age': [34, 42]}
2. Build a Knowledge Graph from Text
from pathlib import Path
from knowledge_graph import (
KnowledgeGraphConfig,
LanceKnowledgeGraph,
LanceGraphStore,
get_extractor,
)
from knowledge_graph.cli.ingest import extract_and_add
# Initialize knowledge graph
config = KnowledgeGraphConfig.from_root(Path("./my_graph"))
config.ensure_directories()
# Create schema
schema_path = config.resolved_schema_path()
if not schema_path.exists():
schema_content = """
nodes:
Entity:
id_field: entity_id
relationships:
RELATIONSHIP:
source: source_entity_id
target: target_entity_id
"""
schema_path.write_text(schema_content, encoding="utf-8")
store = LanceGraphStore(config)
store.ensure_layout()
graph_config = config.load_graph_config()
kg = LanceKnowledgeGraph(graph_config, storage=store)
kg.ensure_initialized()
# Extract and add entities/relationships from text
# Using heuristic extractor for testing without API key
extractor = get_extractor("heuristic")
# or using LLM extractor (requires API key)
# extractor = get_extractor("llm", llm_model="gpt-4o-mini")
text = """
Albert Einstein developed the theory of relativity at Princeton.
Marie Curie discovered radioactivity in Paris.
"""
extract_and_add(text, kg, extractor, embedding_generator=None)
# Query the graph
result = kg.query("""
MATCH (e:Entity)
RETURN e.name, e.entity_type
LIMIT 10
""")
print(result.to_pylist())
3. Natural Language Q&A
from knowledge_graph.llm.qa import ask_question
# Ask questions in natural language
answer = ask_question(
"Who discovered radioactivity?",
kg,
llm_model="gpt-4o-mini"
)
print(answer)
# Output: Marie Curie discovered radioactivity.
Command-Line Interface
Lance Graph includes a CLI for building and querying knowledge graphs:
# Initialize and extract
knowledge_graph --root ./my_graph --init
knowledge_graph --root ./my_graph --extract-and-add notes.txt
# Query with Cypher
knowledge_graph --root ./my_graph "MATCH (e:Entity) RETURN e.name LIMIT 10"
# Natural language Q&A
knowledge_graph --root ./my_graph --ask "Who discovered DNA?"
For complete CLI documentation and examples, see the main README.
Requirements
- Python 3.11+
- Optional: OpenAI API key for LLM extraction
Contributing
Lance Graph is open source! Contributions are welcome.
Quick start
cd python
uv venv --python 3.11 .venv
source .venv/bin/activate
uv pip install maturin[patchelf]
uv pip install -e '.[tests]'
maturin develop
pytest python/tests/ -v
Development workflow
For linting and type checks:
# Install dev dependencies
uv pip install -e '.[dev]'
# Run linters and type checker
ruff format python/ # format code
ruff check python/ # lint code
pyright # type check
# Run specific tests
pytest python/tests/test_graph.py::test_basic_node_selection -v
# Rebuild extension after Rust changes
maturin develop
If another virtual environment is already active, run
deactivate(orunset VIRTUAL_ENV) before invokinguv runso uv binds to.venv.
Repository layout
python/src/– PyO3 bridge that exposes graph APIs to Pythonpython/python/lance_graph/– pure-Python wrapper and__init__python/python/knowledge_graph/– CLI, FastAPI, and extractor utilities built on Lancepython/python/tests/– graph-centric functional tests
For more information on development setup, building from source, running tests, and code quality guidelines, see DEVELOPMENT.md.
License
Apache 2.0
Links
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 Distribution
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 lance_graph-0.4.0.tar.gz.
File metadata
- Download URL: lance_graph-0.4.0.tar.gz
- Upload date:
- Size: 442.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8eaa23bbd8eeb7db930e30fc5d673239c1ecdfaf68786fe682361b1d5d9eaf17
|
|
| MD5 |
efa9aea51686853765710208eee8d627
|
|
| BLAKE2b-256 |
0d571064e99465e085c25c19fc1bfc57dbc0307335295d5f71015efbdbb61d88
|
File details
Details for the file lance_graph-0.4.0-cp39-abi3-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: lance_graph-0.4.0-cp39-abi3-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 25.3 MB
- Tags: CPython 3.9+, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93e0b3799da94f4135dc4edba5d9fd1c8fa49cf2ee8c0882f8b901335f81983a
|
|
| MD5 |
51e551d6b8ef1aeabb8cbc308234fdf4
|
|
| BLAKE2b-256 |
16bc186c259c3dbb96c093b6dc41b1134936bdf168661a6dfab98a09d5e4417b
|