Metadata-Version: 2.5
Name: flexible-graphrag
Version: 0.9.0
Summary: Open source AI context platform: document processing, knowledge graph auto-building, ontologies, GraphRAG/RAG, hybrid search (vector, property graph, RDF/SPARQL, fulltext), 13 LLM providers, 15 property graph DBs, 4 RDF triple stores, 10 vector DBs, LlamaIndex + LangChain, FastAPI, MCP server
Project-URL: Homepage, https://github.com/stevereiner/flexible-graphrag
Project-URL: Documentation, https://stevereiner.github.io/flexible-graphrag/
Project-URL: Repository, https://github.com/stevereiner/flexible-graphrag
Project-URL: Changelog, https://github.com/stevereiner/flexible-graphrag/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/stevereiner/flexible-graphrag/issues
Author: Steve Reiner
License-Expression: Apache-2.0
Keywords: ai-agents,ai-context-platform,alfresco,arcadedb,docling,document-processing,elasticsearch,falkordb,fastapi,fuseki,graphdb,graphrag,hybrid-search,incremental-sync,knowledge-graph,ladybugdb,langchain,liteparse,llamaindex,llamaparse,llm,mcp,mcp-server,neo4j,neptune,ontology,opensearch,owl,oxigraph,property-graph,qdrant,rag,rdf,search-database,semantic-search,sparql,vector-database
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: <3.15,>=3.12
Requires-Dist: arcadedb-python>=0.4.0
Requires-Dist: asyncpg>=0.29.0
Requires-Dist: authlib>=1.6.7
Requires-Dist: azure-identity>=1.14.0
Requires-Dist: azure-storage-blob
Requires-Dist: azure-storage-blob-changefeed>=12.0.0b5
Requires-Dist: boto3
Requires-Dist: box-sdk-gen>=1.17.0
Requires-Dist: chromadb
Requires-Dist: cmislib
Requires-Dist: docling-slim[standard]
Requires-Dist: elasticsearch
Requires-Dist: fastapi
Requires-Dist: fastmcp
Requires-Dist: google-api-python-client
Requires-Dist: google-auth-httplib2
Requires-Dist: google-auth-oauthlib
Requires-Dist: google-cloud-pubsub>=2.18.0
Requires-Dist: google-cloud-storage
Requires-Dist: kafka-python-ng
Requires-Dist: ladybug>=0.18.2
Requires-Dist: lancedb
Requires-Dist: litellm>=1.81
Requires-Dist: liteparse
Requires-Dist: llama-cloud>=2.1
Requires-Dist: llama-index-core
Requires-Dist: llama-index-embeddings-azure-openai
Requires-Dist: llama-index-embeddings-bedrock
Requires-Dist: llama-index-embeddings-fireworks
Requires-Dist: llama-index-embeddings-google-genai
Requires-Dist: llama-index-embeddings-litellm
Requires-Dist: llama-index-embeddings-ollama
Requires-Dist: llama-index-embeddings-openai
Requires-Dist: llama-index-embeddings-openai-like
Requires-Dist: llama-index-graph-stores-arcadedb>=0.4.4
Requires-Dist: llama-index-graph-stores-falkordb
Requires-Dist: llama-index-graph-stores-ladybug>=0.3.4
Requires-Dist: llama-index-graph-stores-memgraph
Requires-Dist: llama-index-graph-stores-nebula
Requires-Dist: llama-index-graph-stores-neo4j
Requires-Dist: llama-index-graph-stores-neptune
Requires-Dist: llama-index-llms-anthropic
Requires-Dist: llama-index-llms-azure-openai
Requires-Dist: llama-index-llms-bedrock-converse
Requires-Dist: llama-index-llms-fireworks
Requires-Dist: llama-index-llms-google-genai
Requires-Dist: llama-index-llms-groq
Requires-Dist: llama-index-llms-litellm
Requires-Dist: llama-index-llms-ollama
Requires-Dist: llama-index-llms-openai
Requires-Dist: llama-index-llms-openai-like
Requires-Dist: llama-index-llms-openrouter
Requires-Dist: llama-index-llms-vllm
Requires-Dist: llama-index-readers-azstorage-blob
Requires-Dist: llama-index-readers-box
Requires-Dist: llama-index-readers-file
Requires-Dist: llama-index-readers-gcs
Requires-Dist: llama-index-readers-google
Requires-Dist: llama-index-readers-microsoft-onedrive
Requires-Dist: llama-index-readers-microsoft-sharepoint
Requires-Dist: llama-index-readers-s3
Requires-Dist: llama-index-readers-web
Requires-Dist: llama-index-readers-wikipedia
Requires-Dist: llama-index-readers-youtube-transcript
Requires-Dist: llama-index-retrievers-bm25
Requires-Dist: llama-index-vector-stores-chroma
Requires-Dist: llama-index-vector-stores-elasticsearch
Requires-Dist: llama-index-vector-stores-lancedb
Requires-Dist: llama-index-vector-stores-milvus
Requires-Dist: llama-index-vector-stores-neo4jvector
Requires-Dist: llama-index-vector-stores-opensearch
Requires-Dist: llama-index-vector-stores-pinecone
Requires-Dist: llama-index-vector-stores-postgres
Requires-Dist: llama-index-vector-stores-qdrant>=0.10.3
Requires-Dist: llama-index-vector-stores-weaviate
Requires-Dist: msgraph-sdk>=1.0.0
Requires-Dist: nebula3-python>=3.8.3
Requires-Dist: neo4j
Requires-Dist: nest-asyncio
Requires-Dist: numpy
Requires-Dist: nuxeo
Requires-Dist: ollama
Requires-Dist: openai
Requires-Dist: opensearch-py
Requires-Dist: passlib[bcrypt]
Requires-Dist: pinecone
Requires-Dist: psycopg2-binary
Requires-Dist: pydantic
Requires-Dist: pydantic-settings
Requires-Dist: pyjwt[crypto]>=2.10
Requires-Dist: pymilvus
Requires-Dist: pyoxigraph>=0.3.20
Requires-Dist: python-alfresco-api>=1.2.2
Requires-Dist: python-dotenv
Requires-Dist: python-jose[cryptography]
Requires-Dist: python-multipart
Requires-Dist: python-openarch-api>=0.1.0
Requires-Dist: qdrant-client>=1.16
Requires-Dist: rapidfuzz
Requires-Dist: rdflib>=7.0.0
Requires-Dist: requests>=2.31.0
Requires-Dist: s3fs
Requires-Dist: spacy
Requires-Dist: truststore
Requires-Dist: uvicorn
Requires-Dist: watchdog>=4.0.0
Requires-Dist: weaviate-client
Requires-Dist: wikipedia
Requires-Dist: youtube-transcript-api
Provides-Extra: age-extras
Requires-Dist: langchain-age==0.1.2; extra == 'age-extras'
Provides-Extra: cocoindex
Requires-Dist: cocoindex>=1.0.20; extra == 'cocoindex'
Provides-Extra: dev
Requires-Dist: black; extra == 'dev'
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-asyncio; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: docling-ocr-easyocr
Requires-Dist: docling-slim[feat-ocr-easyocr]; extra == 'docling-ocr-easyocr'
Provides-Extra: docling-ocr-ocrmac
Requires-Dist: docling-slim[feat-ocr-mac]; extra == 'docling-ocr-ocrmac'
Provides-Extra: docling-ocr-tesserocr
Requires-Dist: docling-slim[feat-ocr-tesserocr]; extra == 'docling-ocr-tesserocr'
Provides-Extra: huggingface
Requires-Dist: langchain-huggingface>=0.1.0; extra == 'huggingface'
Requires-Dist: llama-index-embeddings-huggingface>=0.3.0; extra == 'huggingface'
Requires-Dist: sentence-transformers>=3.0.0; extra == 'huggingface'
Provides-Extra: langchain
Requires-Dist: langchain-anthropic>=1.7; extra == 'langchain'
Requires-Dist: langchain-aws; extra == 'langchain'
Requires-Dist: langchain-chroma; extra == 'langchain'
Requires-Dist: langchain-community>=0.4; extra == 'langchain'
Requires-Dist: langchain-elasticsearch; extra == 'langchain'
Requires-Dist: langchain-experimental; extra == 'langchain'
Requires-Dist: langchain-fireworks>=1.0; extra == 'langchain'
Requires-Dist: langchain-google-genai>=4.0; extra == 'langchain'
Requires-Dist: langchain-groq>=1.1; extra == 'langchain'
Requires-Dist: langchain-ladybug>=0.3.1; extra == 'langchain'
Requires-Dist: langchain-milvus; extra == 'langchain'
Requires-Dist: langchain-ollama>=1.0; extra == 'langchain'
Requires-Dist: langchain-openai; extra == 'langchain'
Requires-Dist: langchain-pinecone; extra == 'langchain'
Requires-Dist: langchain-qdrant; extra == 'langchain'
Requires-Dist: langchain-weaviate; extra == 'langchain'
Requires-Dist: langchain>=1.0; extra == 'langchain'
Requires-Dist: rank-bm25; extra == 'langchain'
Provides-Extra: langchain-extras
Requires-Dist: azure-mgmt-cosmosdb>=9.5.0; extra == 'langchain-extras'
Requires-Dist: gremlinpython>=3.7.0; extra == 'langchain-extras'
Requires-Dist: hugegraph-python>=1.5.0; extra == 'langchain-extras'
Requires-Dist: langchain-arangodb; extra == 'langchain-extras'
Requires-Dist: langchain-arcadedb; extra == 'langchain-extras'
Requires-Dist: langchain-neo4j; extra == 'langchain-extras'
Requires-Dist: langchain-postgres; extra == 'langchain-extras'
Requires-Dist: pytigergraph>=1.0.0; extra == 'langchain-extras'
Requires-Dist: requests-aws4auth>=1.2.0; extra == 'langchain-extras'
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'langchain-extras'
Provides-Extra: langflow
Requires-Dist: langflow>=1.0.0; extra == 'langflow'
Provides-Extra: observability
Requires-Dist: openinference-instrumentation-langchain; extra == 'observability'
Requires-Dist: openinference-instrumentation-llama-index; extra == 'observability'
Requires-Dist: opentelemetry-api; extra == 'observability'
Requires-Dist: opentelemetry-exporter-otlp; extra == 'observability'
Requires-Dist: opentelemetry-sdk; extra == 'observability'
Provides-Extra: observability-dual
Requires-Dist: openinference-instrumentation-langchain; extra == 'observability-dual'
Requires-Dist: openinference-instrumentation-llama-index; extra == 'observability-dual'
Requires-Dist: openlit>=1.41.2; extra == 'observability-dual'
Requires-Dist: opentelemetry-api; extra == 'observability-dual'
Requires-Dist: opentelemetry-exporter-otlp; extra == 'observability-dual'
Requires-Dist: opentelemetry-sdk; extra == 'observability-dual'
Provides-Extra: observability-openlit
Requires-Dist: openlit>=1.41.2; extra == 'observability-openlit'
Requires-Dist: opentelemetry-api; extra == 'observability-openlit'
Requires-Dist: opentelemetry-exporter-otlp; extra == 'observability-openlit'
Requires-Dist: opentelemetry-sdk; extra == 'observability-openlit'
Provides-Extra: rdf
Requires-Dist: pyoxigraph>=0.3.20; extra == 'rdf'
Requires-Dist: rdflib>=7.0.0; extra == 'rdf'
Requires-Dist: requests>=2.31.0; extra == 'rdf'
Provides-Extra: rdf-full
Requires-Dist: pyoxigraph>=0.3.20; extra == 'rdf-full'
Requires-Dist: rdflib>=7.0.0; extra == 'rdf-full'
Requires-Dist: requests>=2.31.0; extra == 'rdf-full'
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'rdf-full'
Provides-Extra: spanner-extras
Requires-Dist: google-cloud-spanner; extra == 'spanner-extras'
Requires-Dist: llama-index-spanner>=0.1.5; extra == 'spanner-extras'
Provides-Extra: surrealdb-extras
Requires-Dist: langchain-surrealdb>=0.2.0; extra == 'surrealdb-extras'
Description-Content-Type: text/markdown

# Flexible GraphRAG

Flexible GraphRAG is an open source AI context platform supporting a document processing pipeline (Docling, LlamaParse, or LiteParse), knowledge graph auto-building, ontologies, schemas, many LLM providers, GraphRAG and RAG, hybrid semantic search (fulltext, vector, property graph, RDF/SPARQL), AI query, and AI chat. The backend is Python with LlamaIndex and LangChain as peer frameworks. LlamaIndex is the default for each pipeline stage; LangChain can be selected per stage in environment configuration. The API is a REST FastAPI service. Angular, React, and Vue TypeScript frontends and an MCP server are included. The stack supports 14 data sources: 10 with incremental auto-sync (Alfresco, Nuxeo, SharePoint, OneDrive, Box, Google Drive, Amazon S3, Google Cloud Storage, Azure Blob Storage, Filesystem) and 4 without (CMIS, Web Pages, Wikipedia, YouTube); 15 property graph databases, 4 RDF triple stores (Apache Jena Fuseki, Ontotext GraphDB, Oxigraph, Amazon Neptune RDF), 10 vector databases, OpenSearch / Elasticsearch / BM25 search, Alfresco, and Nuxeo. With per-user sign-in, search and AI answers use only the documents each user may read. Databases and dashboards can be enabled with the provided Docker Compose layout. Optionally, the ingest pipeline, hybrid search, and AI query can run through customizable **Langflow** visual flows (12 custom Langflow components). As a further option, ingest can run on a **CocoIndex** (Rust engine) pipeline (`PIPELINE_BACKEND=cocoindex`) that reuses the same sources, targets, parsers and KG extractors, adding step-level memoization, automatic delete reconciliation, custom KG extractors, and entity resolution. A meeting-notes example is included. And optionally, **[Hyland OpenArch](https://github.com/Hyland/OpenArch)**, an AI-ready content repository for documents with their extracted text and vector embeddings, can be the search + vector store and the store for data sources and document state.

**New in 0.9.0:** optional [Hyland OpenArch](https://github.com/Hyland/OpenArch) as the search + vector store (`ENABLE_OPENARCH`) and as the store for data sources and document state, with no PostgreSQL (`INCREMENTAL_STATE_STORE=openarch`) (see [usage](https://stevereiner.github.io/flexible-graphrag/DATABASES/OPENARCH/OPENARCH/)); separate Graph and RDF choices per ingest (`DEFAULT_ENABLED_GRAPH` / `DEFAULT_ENABLED_RDF`).

**Quick install (PyPI):**

```bash
uv pip install flexible-graphrag
```

Then copy `env-sample.txt` to `.env`, set your LLM API key (e.g. `OPENAI_API_KEY=...`) and any other provider config, and run `flexible-graphrag` to start the API server. If you use ontology schemas, the `schemas/` directory lives at the repository root (one level above `flexible-graphrag/`), so `.env` paths use `../schemas/...` — matching `env-sample.txt`. For a PyPI install, copy `schemas/` to the parent of your working directory so the same paths apply. See the [RDF Ontology Examples and Configuration](https://stevereiner.github.io/flexible-graphrag/DATABASES/RDF/ontology_examples_and_config/) docs page for path options and examples. This gives you a LlamaIndex-only setup; for LangChain or mixed LlamaIndex/LangChain per-stage configuration see the **Prerequisites**, **Setup**, and **Framework Config** sections of the full README, or the [Framework Configuration](https://stevereiner.github.io/flexible-graphrag/CONFIGURATION/LANGCHAIN-CONFIGURATION/) docs page.

Optional dependency groups (`langchain`, RDF extras, observability, and more) are available. For Docker services, frontend installs, source checkout setup, and optional extras (which involve `extras-overrides.txt`), refer to the **Prerequisites** and **Setup** sections of the full README and documentation linked below.

- **Repository**: [github.com/stevereiner/flexible-graphrag](https://github.com/stevereiner/flexible-graphrag)
- **Full README**: [README.md on GitHub](https://github.com/stevereiner/flexible-graphrag/blob/main/README.md)
- **Documentation**: [stevereiner.github.io/flexible-graphrag](https://stevereiner.github.io/flexible-graphrag/)
