[build-system] requires = ["pdm-backend"] build-backend = "pdm.backend" [project] authors = [] license = { text = "MIT" } requires-python = ">=3.9, <4.0" dependencies = [ "langchain-core<1.0.0,>=0.3.66", "langchain-text-splitters<1.0.0,>=0.3.8", "langgraph>=0.5.4", "pydantic>=2.7.4", ] name = "langchain" version = "1.0.0dev1" description = "Building applications with LLMs through composability" readme = "README.md" [project.optional-dependencies] # community = ["langchain-community"] anthropic = ["langchain-anthropic"] openai = ["langchain-openai"] azure-ai = ["langchain-azure-ai"] # cohere = ["langchain-cohere"] google-vertexai = ["langchain-google-vertexai"] google-genai = ["langchain-google-genai"] fireworks = ["langchain-fireworks"] ollama = ["langchain-ollama"] together = ["langchain-together"] mistralai = ["langchain-mistralai"] huggingface = ["langchain-huggingface"] groq = ["langchain-groq"] aws = ["langchain-aws"] deepseek = ["langchain-deepseek"] xai = ["langchain-xai"] perplexity = ["langchain-perplexity"] [project.urls] "Source Code" = "https://github.com/langchain-ai/langchain/tree/master/libs/langchain" "Release Notes" = "https://github.com/langchain-ai/langchain/releases?q=tag%3A%22langchain%3D%3D0%22&expanded=true" repository = "https://github.com/langchain-ai/langchain" [dependency-groups] test = [ "pytest<9,>=8", "pytest-cov<5.0.0,>=4.0.0", "pytest-watcher<1.0.0,>=0.2.6", "pytest-asyncio<1.0.0,>=0.23.2", "pytest-socket<1.0.0,>=0.6.0", "syrupy<5.0.0,>=4.0.2", "pytest-xdist<4.0.0,>=3.6.1", "blockbuster<1.6,>=1.5.18", "langchain-tests", "langchain-core", "langchain-text-splitters", "langchain-openai", "toml>=0.10.2", ] codespell = ["codespell<3.0.0,>=2.2.0"] lint = [ "ruff<0.13,>=0.12.2", "mypy<1.16,>=1.15", ] typing = [ "types-toml>=0.10.8.20240310", ] test_integration = [ "vcrpy>=7.0", "urllib3<2; python_version < \"3.10\"", "wrapt<2.0.0,>=1.15.0", "python-dotenv<2.0.0,>=1.0.0", "cassio<1.0.0,>=0.1.0", "langchainhub<1.0.0,>=0.1.16", "langchain-core", "langchain-text-splitters", ] [tool.uv.sources] langchain-core = { path = "../core", editable = true } langchain-tests = { path = "../standard-tests", editable = true } langchain-text-splitters = { path = "../text-splitters", editable = true } langchain-openai = { path = "../partners/openai", editable = true } [tool.ruff] target-version = "py39" exclude = ["tests/integration_tests/examples/non-utf8-encoding.py"] [tool.mypy] strict = "True" strict_bytes = "True" ignore_missing_imports = "True" enable_error_code = "deprecated" report_deprecated_as_note = "True" # TODO: activate for 'strict' checking disallow_untyped_calls = "False" disallow_any_generics = "False" disallow_untyped_decorators = "False" warn_return_any = "False" strict_equality = "False" [tool.codespell] skip = ".git,*.pdf,*.svg,*.pdf,*.yaml,*.ipynb,poetry.lock,*.min.js,*.css,package-lock.json,example_data,_dist,examples,*.trig" ignore-regex = ".*(Stati Uniti|Tense=Pres).*" ignore-words-list = "momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate,aadd,symbl,precesses,accademia,nin" [tool.ruff.lint] select = [ "ALL" ] ignore = [ "D100", # pydocstyle: Missing docstring in public module "D104", # pydocstyle: Missing docstring in public package "D105", # pydocstyle: Missing docstring in magic method "COM812", # Messes with the formatter "ISC001", # Messes with the formatter "PERF203", # Rarely useful "SLF001", # Private member access "UP007", # pyupgrade: non-pep604-annotation-union "PLC0415", # Imports should be at the top. Not always desirable "PLR0913", # Too many arguments in function definition ] unfixable = ["B028"] # People should intentionally tune the stacklevel pydocstyle.convention = "google" pyupgrade.keep-runtime-typing = true flake8-annotations.allow-star-arg-any = true [tool.ruff.lint.per-file-ignores] "tests/*" = [ "D", # Documentation rules "PLC0415", # Imports should be at the top. Not always desirable for tests ] [tool.ruff.lint.extend-per-file-ignores] "scripts/check_imports.py" = ["ALL"] "langchain/globals.py" = [ "PLW" ] "langchain/chat_models/base.py" = [ "ANN", "C901", "FIX002", "N802", "PLR0911", "PLR0912", "PLR0915", ] "langchain/embeddings/base.py" = [ "PLR0911", "PLR0913", ] "tests/**/*.py" = [ "S101", # Tests need assertions "S311", # Standard pseudo-random generators are not suitable for cryptographic purposes "SLF001", # Private member access in tests "PLR2004", # Magic values are perfectly fine in unit tests (e.g. 0, 1, 2, etc.) "C901", # Too complex "ANN401", # Annotated type is not necessary "N802", # Function name should be lowercase "PLW1641", # Object does not implement __hash__ method "ARG002", # Unused argument "BLE001", # Do not catch blind exception "N801", # class name should use CapWords convention ] [tool.coverage.run] omit = ["tests/*"] [tool.pytest.ini_options] addopts = "--strict-markers --strict-config --durations=5 --snapshot-warn-unused -vv" markers = [ "requires: mark tests as requiring a specific library", "scheduled: mark tests to run in scheduled testing", "compile: mark placeholder test used to compile integration tests without running them", ] asyncio_mode = "auto" filterwarnings = [ "ignore::langchain_core._api.beta_decorator.LangChainBetaWarning", "ignore::langchain_core._api.deprecation.LangChainDeprecationWarning:tests", "ignore::langchain_core._api.deprecation.LangChainPendingDeprecationWarning:tests", ]