[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "langgraph-sdk" dynamic = ["version"] description = "SDK for interacting with LangGraph API" authors = [] requires-python = ">=3.10" readme = "README.md" license = "MIT" license-files = ['LICENSE'] dependencies = ["httpx>=0.25.2", "orjson>=3.11.5"] [tool.hatch.version] path = "langgraph_sdk/__init__.py" [project.urls] Source = "https://github.com/langchain-ai/langgraph/tree/main/libs/sdk-py" Twitter = "https://x.com/LangChain" Slack = "https://www.langchain.com/join-community" Reddit = "https://www.reddit.com/r/LangChain/" [dependency-groups] test = [ "pytest", "pytest-asyncio", "pytest-mock", "pytest-watch", ] lint = [ "ruff==0.15.6", "codespell", "mypy==1.19.1", "ty==0.0.23", "starlette", ] dev = [ { include-group = "test" }, { include-group = "lint" }, "langgraph", "pydantic>=2.12.4", ] [tool.hatch.build.targets.wheel] include = ["langgraph_sdk"] [tool.pytest.ini_options] addopts = "--strict-markers --strict-config --durations=5 -vv" asyncio_mode = "auto" [tool.uv] default-groups = ['dev'] [tool.uv.sources] langgraph = { path = "../langgraph", editable = true } [tool.ruff] exclude = ["venv", ".venv", "build", "dist"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # pyflakes "I", # isort (import sorting) "ARG", # unused arguments "TID251", # banned imports "TID252", # banned relative imports "T20", # print statements "UP", # pyupgrade (Python version-specific fixes) "B", # flake8-bugbear (common bugs) "SIM", # flake8-simplify (code simplification) "RUF", # ruff-specific rules "S101", # flake8-bandit: use of assert ] ignore = [ "E501", # line too long (handled by formatter) "B006", # mutable default arguments (sometimes intentional) "B904", # raise without from inside except (sometimes intentional) "SIM102", # nested if statements (sometimes clearer) ] per-file-ignores = { "tests/**" = ["S101", "B017"] } [tool.ty.rules] no-matching-overload = "ignore"