Skip to main content

🔗 lightrag-memgraph

lightrag-memgraph is an integration that connects lightrag and memgraph. The library began as a small wrapper designed to specifically configure Memgraph within a pipeline that processes unstructured data (various texts) and transforms it into an ontology/entity schema graph. In other words, it enables you to extract and enhance entities from unstructured documents, storing them in a graph for powerful querying and analysis. Ideal for building knowledge graphs, improving data discovery, and leveraging advanced AI techniques on top of your domain data.

General Notes

  • Entity/relationship extraction is high-quality, but also high-cost and relatively slow.
  • The goal over time is to expose time and cost metrics (e.g., $ per your specific document page or chunk).

Quick start

Prerequisites: Memgraph MAGE running (default bolt://localhost:7687; the memgraph-mage image, not plain memgraph, since the default embeddings below need its embeddings module), and an LLM API key (e.g. OPENAI_API_KEY or ANTHROPIC_API_KEY).

Install:

pip install lightrag-memgraph

Minimal example (async): create the wrapper, initialize with a working *directory, insert text, then finalize.

import asyncio
from lightrag_memgraph import MemgraphLightRAGWrapper


async def main():
    wrapper = MemgraphLightRAGWrapper()
    await wrapper.initialize(working_dir="./lightrag_storage")
    await wrapper.ainsert(input="Your document text here.", file_paths=["doc1"])
    # optional: rag = wrapper.get_lightrag(); print(await rag.get_graph_labels())
    await wrapper.afinalize()


asyncio.run(main())

See example.py in this repo for a full run with sample texts and graph output.

Storage / persistence

By default the wrapper persists LightRAG's entire working state into Memgraph, not just the entity/relationship graph:

LightRAG store Backend Memgraph node label
Graph (entities + relations) MemgraphStorage (built into lightrag) <workspace> (default base)
Key/value (full_docs, text_chunks, llm_response_cache, ...) MemgraphKVStorage LightRAGKV_<workspace>_<namespace>
Vector (entities, relationships, chunks) MemgraphVectorStorage LightRAGVector_<workspace>_<namespace>
Document status MemgraphDocStatusStorage LightRAGDocStatus_<workspace>

The KV/vector/doc-status labels are namespaced by workspace + namespace so they never collide with the graph's entity nodes. Vectors always persist to Memgraph's native vector index (CREATE VECTOR INDEX ... {"metric": "cos"} + CALL vector_search.search(...)), so a real embedding_func is required -- see Embeddings below for the default.

Connection settings are read from the same environment variables as lightrag's graph backend: MEMGRAPH_URI (or MEMGRAPH_URL, which the wrapper bridges to MEMGRAPH_URI), MEMGRAPH_USERNAME, MEMGRAPH_PASSWORD, MEMGRAPH_DATABASE and the optional MEMGRAPH_WORKSPACE.

Opting out

  • MemgraphLightRAGWrapper(full_memgraph_persistence=False) keeps only the graph in Memgraph and stores KV/vector/doc-status as local JSON files in working_dir (the previous behaviour).

To register the backends manually (e.g. when calling LightRAG(...) directly rather than through the wrapper):

from lightrag import LightRAG
from lightrag_memgraph import register_memgraph_storage

register_memgraph_storage()  # idempotent; call before constructing LightRAG
rag = LightRAG(
    graph_storage="MemgraphStorage",
    kv_storage="MemgraphKVStorage",
    vector_storage="MemgraphVectorStorage",
    doc_status_storage="MemgraphDocStatusStorage",
    ...,
)

Embeddings

If embedding_func is not passed to initialize(), the wrapper defaults to memgraph_sentence_embed: a local sentence-transformer (all-MiniLM-L6-v2, 384 dims) run by Memgraph itself, via the embeddings MAGE module's embeddings.text() procedure. This requires no API key and makes no external network calls -- unlike LightRAG's own openai_embed, which used to be this wrapper's silent default and would bill your OPENAI_API_KEY for every insert/query even if you only meant to use OpenAI for the LLM, or not at all. Applying this default is logged as a warning so it's never silent.

This default requires the memgraph-mage Docker image (not plain memgraph) so the embeddings module is loaded.

To use a different local model served the same way, build a variant with build_memgraph_sentence_embed:

from lightrag_memgraph import build_memgraph_sentence_embed

# A different local model -- embedding_dim must match what it actually outputs.
embedding_func = build_memgraph_sentence_embed(model_name="all-mpnet-base-v2", embedding_dim=768)

To use OpenAI/Anthropic-compatible/other Python embedding functions instead, pass embedding_func explicitly, as shown in the Anthropic and OpenAI sections below.

Using Anthropic (Claude) as the LLM

LightRAG supports Claude via the lightrag.llm.anthropic module. Set your API key and pass the LLM function and model name when initializing the wrapper. The list of Anthropic models is available under https://platform.claude.com/docs/en/about-claude/models.

  1. Set the API key (required for Claude):

    export ANTHROPIC_API_KEY="your-anthropic-api-key"
    
  2. Use Anthropic in code by passing llm_model_func and llm_model_name to initialize():

    from lightrag.llm.anthropic import anthropic_complete
    from lightrag_memgraph import MemgraphLightRAGWrapper
    
    wrapper = MemgraphLightRAGWrapper()
    await wrapper.initialize(
        working_dir="./lightrag_storage",
        llm_model_func=anthropic_complete,
        llm_model_name="claude-3-5-sonnet-20241022",  # or claude-3-haiku-20240307, etc.
        # embedding_func omitted: defaults to Memgraph's local sentence-transformer,
        # see Embeddings above. Anthropic itself has no embeddings API.
    )
    

    Preset functions are also available: claude_3_opus_complete, claude_3_sonnet_complete, claude_3_haiku_complete (fixed older model IDs). For current models, use anthropic_complete with the desired llm_model_name.

  3. Embeddings: Anthropic does not provide embeddings. Leaving embedding_func unset (as above) uses Memgraph's local sentence-transformer default -- no additional API key needed, no silent no-op option exists (a real embedding_func always runs since vectors persist to Memgraph's native vector index). To use a different provider instead, set embedding_func explicitly, e.g. openai_embed from lightrag.llm.openai with OPENAI_API_KEY, or Voyage AI via lightrag.llm.anthropic.anthropic_embed with VOYAGE_API_KEY.

Using OpenAI as the LLM

Set your API key and optionally choose a model.

  1. Set the API key:

    export OPENAI_API_KEY="your-openai-api-key"
    
  2. Use a specific OpenAI model by passing llm_model_func and optionally llm_model_name:

    from lightrag.llm.openai import gpt_4o_mini_complete, openai_embed
    from lightrag_memgraph import MemgraphLightRAGWrapper
    
    wrapper = MemgraphLightRAGWrapper()
    await wrapper.initialize(
        working_dir="./lightrag_storage",
        llm_model_func=gpt_4o_mini_complete,
        embedding_func=openai_embed,
    )
    

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lightrag_memgraph-0.3.0.tar.gz (30.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lightrag_memgraph-0.3.0-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file lightrag_memgraph-0.3.0.tar.gz.

File metadata

  • Download URL: lightrag_memgraph-0.3.0.tar.gz
  • Upload date:
  • Size: 30.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","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

Hashes for lightrag_memgraph-0.3.0.tar.gz
Algorithm Hash digest
SHA256 de83b12fd9f261d27e308be75645b0c6d8e0f06d303360b93a3fdba53b649af0
MD5 77e094eeecfd059a13acb43e55baae60
BLAKE2b-256 075c106f7c234a4e359492f8575d654ea7c74173c96e0fbc5e18a86407d2eeb1

See more details on using hashes here.

File details

Details for the file lightrag_memgraph-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: lightrag_memgraph-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","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

Hashes for lightrag_memgraph-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8cbae6e0dea54516796efd3730ac0bc3a64aa91eed0929f616220398c245c684
MD5 c9c81064ab7d2f0df8e1b80d5c8b866d
BLAKE2b-256 cf69180b1b9af8fe10b45560b1b6855b23834133076327725814795e61b8b85a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page