Skip to main content

Domain-agnostic Graph RAG framework for building governed, auditable Knowledge Graphs

Project description

graphrag-core

A domain-agnostic framework for building governed, auditable Knowledge Graphs from documents using LLM-powered extraction, provenance-native storage, and multi-agent orchestration.

Architecture

YOUR DOMAIN LAYER (Layer 2)
  Ontology, domain tools, domain agents, templates
                    |
                    | imports
                    v
graphrag-core (Layer 1)

  Ingestion   Extraction   Graph Store   Search
  Curation    Registry     Tool Library  Orchestration

Install

pip install graphrag-core                    # core (in-memory backends)
pip install graphrag-core[neo4j]             # + Neo4j graph store and search
pip install graphrag-core[anthropic]         # + Claude LLM client
pip install graphrag-core[all]               # everything

Quick Start

import asyncio
from graphrag_core import (
    TextParser, TokenChunker, IngestionPipeline,
    InMemoryGraphStore, InMemorySearchEngine,
    LLMExtractionEngine, OntologySchema, NodeTypeDefinition,
    PropertyDefinition, RelationshipTypeDefinition,
    ToolLibrary, register_core_tools,
)
from graphrag_core.models import ChunkConfig, DocumentChunk, GraphNode, ImportRun
from datetime import datetime

async def main():
    # 1. Ingest a document
    pipeline = IngestionPipeline(parser=TextParser(), chunker=TokenChunker())
    chunks = await pipeline.ingest(b"Alice works at Acme Corp.", "text/plain")

    # 2. Define your domain schema
    schema = OntologySchema(
        node_types=[
            NodeTypeDefinition(
                label="Person",
                properties=[PropertyDefinition(name="name", type="string", required=True)],
                required_properties=["name"],
            ),
            NodeTypeDefinition(
                label="Company",
                properties=[PropertyDefinition(name="name", type="string", required=True)],
                required_properties=["name"],
            ),
        ],
        relationship_types=[
            RelationshipTypeDefinition(type="WORKS_AT", source_types=["Person"], target_types=["Company"]),
        ],
    )

    # 3. Extract entities (requires an LLMClient implementation)
    # engine = LLMExtractionEngine(llm_client=your_client)
    # result = await engine.extract(chunks, schema, import_run)

    # 4. Store in graph
    store = InMemoryGraphStore()
    await store.merge_node(GraphNode(id="p1", label="Person", properties={"name": "Alice"}), "run-1")
    await store.merge_node(GraphNode(id="c1", label="Company", properties={"name": "Acme Corp"}), "run-1")

    # 5. Search
    search = InMemorySearchEngine(
        nodes=[await store.get_node("p1"), await store.get_node("c1")],
    )
    results = await search.fulltext_search("Acme", top_k=5)
    print(results)

    # 6. Wire up tools for agents
    library = ToolLibrary()
    register_core_tools(library, store, search)
    result = await library.execute("get_entity", entity_id="p1")
    print(result)

asyncio.run(main())

Building Blocks

# Block Interface Implementation Status
1 Document Ingestion DocumentParser, Chunker PDF, DOCX, Text, Markdown parsers; TokenChunker Done
2 Entity Extraction ExtractionEngine, LLMClient LLMExtractionEngine, AnthropicLLMClient Done
3 Knowledge Graph GraphStore InMemoryGraphStore, Neo4jGraphStore Done
4 Hybrid Search SearchEngine InMemorySearchEngine, Neo4jHybridSearch (RRF) Done
5 Governed Curation DetectionLayer DeterministicDetectionLayer, CurationPipeline Done (detection layer)
6 Entity Registry EntityRegistry InMemoryEntityRegistry (fuzzy matching) Done
7 Tool Library ToolLibrary 4 core tools (get_entity, search, audit_trail, related) Done
8 Orchestration Agent, Orchestrator SequentialOrchestrator, AgentContext Done

Protocols marked with (Protocol only) have no default implementation yet:

  • LLMCurationLayer, ApprovalGateway (BB5 layers 2-3)
  • ReportRenderer (BB8)
  • EmbeddingModel (cross-cutting)

Extension Pattern

from graphrag_core import OntologySchema, ToolLibrary, Tool

# 1. Define your domain ontology
schema = OntologySchema(node_types=[...], relationship_types=[...])

# 2. Register domain-specific tools
library = ToolLibrary()
library.register(Tool(name="my_tool", description="...", parameters={}, handler=my_handler))

# 3. Implement domain agents
class MyAgent:
    name = "analyst"
    async def execute(self, context):
        result = await context.tool_library.execute("my_tool")
        context.workflow_state["analysis"] = result.data
        return AgentResult(agent_name=self.name, success=True)

Development

# Clone and install
git clone https://github.com/cdel1/graphrag-core.git
cd graphrag-core
uv sync --all-extras

# Run unit tests
uv run pytest tests/ -x -q

# Run integration tests (requires Neo4j)
docker run -d --name neo4j-test -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/development neo4j:5-community
uv run pytest tests/ -x --run-integration

# Build
uv build

License

The code in this repository is MIT-licensed — see LICENSE.

Data fixtures bundled under eval/fixtures/ retain their own licenses (DocRED is MIT; FEVEROUS is CC-BY-SA 3.0). See NOTICES.md for attribution and redistribution terms for each fixture.

Project details


Download files

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

Source Distribution

graphrag_core-0.12.0.tar.gz (265.2 kB view details)

Uploaded Source

Built Distribution

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

graphrag_core-0.12.0-py3-none-any.whl (87.5 kB view details)

Uploaded Python 3

File details

Details for the file graphrag_core-0.12.0.tar.gz.

File metadata

  • Download URL: graphrag_core-0.12.0.tar.gz
  • Upload date:
  • Size: 265.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for graphrag_core-0.12.0.tar.gz
Algorithm Hash digest
SHA256 a54be2cf39da4be01dcd7434a62497ad857985f2ddba8288c06f14586b49ebca
MD5 c26d984c7c16c85a4b71de94ada8f75b
BLAKE2b-256 55ceb5147f3085d2391851c864199e7bd11bf7c19b16b106b9c3e9227db046af

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphrag_core-0.12.0.tar.gz:

Publisher: release.yml on cdel1/graphrag-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file graphrag_core-0.12.0-py3-none-any.whl.

File metadata

  • Download URL: graphrag_core-0.12.0-py3-none-any.whl
  • Upload date:
  • Size: 87.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for graphrag_core-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 59abc247a043b4b98f48d2843643aed22f8ed475ff178706b53f5d3b8af1b9a5
MD5 2c7dd285ea068300cceb741e2c8f5867
BLAKE2b-256 3e522d88d95eea5ff6f93447e5563b888536629bca5b5f915247c2711fc99e16

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphrag_core-0.12.0-py3-none-any.whl:

Publisher: release.yml on cdel1/graphrag-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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