[tool.poetry] name = "graphrag" # Maintainers: do not change the version here manually, use ./scripts/release.sh version = "0.4.0" description = "GraphRAG: A graph-based retrieval-augmented generation (RAG) system." authors = [ "Alonso Guevara Fernández ", "Andrés Morales Esquivel ", "Chris Trevino ", "David Tittsworth ", "Dayenne de Souza ", "Derek Worthen ", "Gaudy Blanco Meneses ", "Ha Trinh ", "Jonathan Larson ", "Josh Bradley ", "Kate Lytvynets ", "Kenny Zhang ", "Mónica Carvajal", "Nathan Evans ", "Rodrigo Racanicci ", "Sarah Smith ", ] license = "MIT" readme = "README.md" packages = [{ include = "graphrag" }] [tool.poetry.urls] "Source" = "https://github.com/microsoft/graphrag" [tool.poetry.scripts] graphrag = "graphrag.cli.main:app" [tool.poetry-dynamic-versioning] enable = true style = "pep440" vcs = "git" bump = true format-jinja = """ {%- if distance == 0 -%} {{ serialize_pep440(base, stage, revision) }} {%- else -%} {{ serialize_pep440(base, stage, revision, dev=distance) }} {%- endif -%} """ [tool.poetry.dependencies] python = ">=3.10,<3.13" environs = "^11.0.0" datashaper = "^0.0.49" # Vector Stores azure-search-documents = "^11.4.0" lancedb = "^0.13.0" # Async IO aiolimiter = "^1.1.0" aiofiles = "^24.1.0" # LLM openai = "^1.51.2" nltk = "3.9.1" tiktoken = "^0.7.0" # Data-Sci numpy = "^1.25.2" graspologic = "^3.4.1" networkx = "^3" pandas = "^2.2.3" matplotlib = "^3.9.0" pyarrow = "^15.0.0" umap-learn = "^0.5.6" # Configuration pyyaml = "^6.0.2" pyaml-env = "^1.2.1" python-dotenv = "^1.0.0" # Network tenacity = "^9.0.0" pydantic = "^2.9.2" rich = "^13.6.0" devtools = "^0.12.2" typing-extensions = "^4.12.2" #Azure azure-storage-blob = "^12.22.0" azure-identity = "^1.17.1" json-repair = "^0.30.0" future = "^1.0.0" # Needed until graspologic fixes their dependency typer = "^0.12.5" [tool.poetry.group.dev.dependencies] coverage = "^7.6.0" ipykernel = "^6.29.4" jupyter = "^1.1.1" nbconvert = "^7.16.3" poethepoet = "^0.28.0" pyright = "^1.1.384" pytest = "^8.3.2" pytest-asyncio = "^0.24.0" pytest-timeout = "^2.3.1" ruff = "^0.6.9" semversioner = "^2.0.3" update-toml = "^0.2.1" deptry = "^0.20.0" mkdocs-material = "^9.5.39" mkdocs-jupyter = "^0.25.0" mkdocs-exclude-search = "^0.6.6" mkdocs-typer = "^0.0.3" [build-system] requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] build-backend = "poetry_dynamic_versioning.backend" [tool.poe.tasks] _sort_imports = "ruff check --select I --fix ." _format_code = "ruff format ." _ruff_check = 'ruff check .' _pyright = "pyright" _convert_local_search_nb = 'jupyter nbconvert --output-dir=docsite/posts/query/notebooks/ --output="{notebook_name}_nb" --template=docsite/nbdocsite_template --to markdown examples_notebooks/local_search.ipynb' _convert_global_search_nb = 'jupyter nbconvert --output-dir=docsite/posts/query/notebooks/ --output="{notebook_name}_nb" --template=docsite/nbdocsite_template --to markdown examples_notebooks/global_search.ipynb' _semversioner_release = "semversioner release" _semversioner_changelog = "semversioner changelog > CHANGELOG.md" _semversioner_update_toml_version = "update-toml update --path tool.poetry.version --value $(poetry run semversioner current-version)" semversioner_add = "semversioner add-change" coverage_report = 'coverage report --omit "**/tests/**" --show-missing' check_format = 'ruff format . --check' fix = "ruff check --fix ." fix_unsafe = "ruff check --fix --unsafe-fixes ." _test_all = "coverage run -m pytest ./tests" test_unit = "pytest ./tests/unit" test_integration = "pytest ./tests/integration" test_smoke = "pytest ./tests/smoke" test_notebook = "pytest ./tests/notebook" test_verbs = "pytest ./tests/verbs" index = "python -m graphrag index" update = "python -m graphrag update" init = "python -m graphrag init" query = "python -m graphrag query" prompt_tune = "python -m graphrag prompt-tune" # Pass in a test pattern test_only = "pytest -s -k" serve_docs = "mkdocs serve" build_docs = "mkdocs build" [[tool.poe.tasks.release]] sequence = [ '_semversioner_release', '_semversioner_changelog', '_semversioner_update_toml_version', ] ignore_fail = 'return_non_zero' [[tool.poe.tasks.convert_docsite_notebooks]] sequence = ['_convert_local_search_nb', '_convert_global_search_nb'] ignore_fail = 'return_non_zero' [[tool.poe.tasks.format]] sequence = ['_sort_imports', '_format_code'] ignore_fail = 'return_non_zero' [[tool.poe.tasks.check]] sequence = ['check_format', '_ruff_check', '_pyright'] ignore_fail = 'return_non_zero' [[tool.poe.tasks.test]] sequence = ['_test_all', 'coverage_report'] ignore_fail = 'return_non_zero' [tool.ruff] target-version = "py310" extend-include = ["*.ipynb"] [tool.ruff.format] preview = true docstring-code-format = true docstring-code-line-length = 20 [tool.ruff.lint] preview = true select = [ "E4", "E7", "E9", "W291", "YTT", "T10", "ICN", "INP", "Q", "RSE", "SLOT", "INT", "FLY", "LOG", "C90", "T20", "D", "RET", "PD", "N", "PIE", "SIM", "S", "G", "ERA", "ASYNC", "TID", "UP", "SLF", "BLE", "C4", "I", "F", "A", "ARG", "PTH", "RUF", "B", "TCH", "DTZ", "PYI", "PT", "EM", "TRY", "PERF", "CPY", # "FBT", # use named arguments for boolean flags # "TD", # todos # "FIX", # fixme # "FURB" # preview rules # ANN # Type annotations, re-enable when we get bandwidth ] ignore = [ # Ignore module names shadowing Python builtins "A005", # Deprecated Rules "ANN101", "ANN102", # Conflicts with interface argument checking "ARG002", "ANN204", # TODO: Inspect these pandas rules for validity "PD002", # prevents inplace=True # TODO RE-Enable when we get bandwidth "PERF203", # Needs restructuring of errors, we should bail-out on first error "C901", # needs refactoring to remove cyclomatic complexity ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["S", "D", "ANN", "T201", "ASYNC", "ARG", "PTH", "TRY"] "examples/*" = ["S", "D", "ANN", "T201", "PTH", "TRY", "PERF"] "graphrag/index/config/*" = ["TCH"] "*.ipynb" = ["T201"] [tool.ruff.lint.flake8-builtins] builtins-ignorelist = ["input", "id", "bytes"] [tool.ruff.lint.pydocstyle] convention = "numpy" # https://github.com/microsoft/pyright/blob/9f81564a4685ff5c55edd3959f9b39030f590b2f/docs/configuration.md#sample-pyprojecttoml-file [tool.pyright] include = ["graphrag", "tests", "examples", "examples_notebooks"] exclude = ["**/node_modules", "**/__pycache__"] [tool.pytest.ini_options] asyncio_mode = "auto" timeout = 1000 # log_cli = true # log_cli_level = "INFO"