[tool.poetry] name = "graphrag" # Maintainers: do not change the version here manually, use ./scripts/release.sh version = "0.1.1" description = "" authors = [ "Alonso Guevara Fernández ", "Andrés Morales Esquivel ", "Chris Trevino ", "David Tittsworth ", "Dayenne de Souza ", "Gaudy Blanco Meneses ", "Ha Trinh ", "Jonathan Larson ", "Kate Lytvynets ", "Mónica Carvajal", "Nathan Evans ", "Rodrigo Racanicci ", "Sarah Smith ", ] license = "MIT" readme = "README.md" packages = [{ include = "graphrag" }] [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.10.0" # Event Loops uvloop = { version = "^0.19.0", markers = "platform_system != 'Windows'" } nest-asyncio = { version = "^1.6.0", markers = "platform_system == 'Windows'" } # Async IO aiolimiter = "^1.1.0" aiofiles = "^24.1.0" # LLM openai = "^1.35.7" nltk = "3.8.1" tiktoken = "^0.7.0" # Data-Sci numba = "0.60.0" numpy = "^1.25.2" graspologic = "^3.4.1" networkx = "^3" fastparquet = "^2024.2.0" # 1.13.0 was a footgun scipy = "1.12.0" # Configuration pyyaml = "^6.0.1" pyaml-env = "^1.2.1" python-dotenv = "^1.0.0" # Network tenacity = "^8.5.0" swifter = "^1.4.0" pydantic = "^2" rich = "^13.6.0" textual = "^0.72.0" devtools = "^0.12.2" typing-extensions = "^4.12.2" #Azure azure-storage-blob = "^12.19.0" azure-identity = "^1.17.1" [tool.poetry.group.dev.dependencies] coverage = "^7.6.0" ipykernel = "^6.29.4" jupyter = "^1.0.0" nbconvert = "^7.16.3" poethepoet = "^0.26.0" pyright = "^1.1.371" pytest = "^8.2.0" pytest-asyncio = "^0.23.4" pytest-timeout = "^2.3.1" ruff = "^0.5.2" semversioner = "^2.0.3" update-toml = "^0.2.1" [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 . --preview" _format_code = "ruff format . --preview" _ruff_check = 'ruff check . --preview' _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 --path tool.poetry.version --value \"$(semversioner current-version)\" pyproject.toml" coverage_report = 'coverage report --omit "**/tests/**" --show-missing' check_format = 'ruff format . --check --preview' fix = "ruff --preview check --fix ." fix_unsafe = "ruff check --preview --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" index = "python -m graphrag.index" query = "python -m graphrag.query" prompt_tune = "python -m graphrag.prompt_tune" # Pass in a test pattern test_only = "pytest -s -k" [[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] docstring-code-format = true docstring-code-line-length = 20 [tool.ruff.lint] 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 = [ # 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 = 600 # log_cli = true # log_cli_level = "INFO"