From 07fa576de1c4d6485331691d4ac8cabc6d80f960 Mon Sep 17 00:00:00 2001 From: Mason Daugherty Date: Tue, 17 Mar 2026 21:23:29 -0400 Subject: [PATCH] ci: avoid unnecessary dep installs in lint targets (#36046) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI lint jobs use `uv run --all-groups` for all tools, but ruff doesn't need dependency resolution — only mypy does. By splitting into `UV_RUN_LINT` (ruff) and `UV_RUN_TYPE` (mypy), the CI-facing targets run ruff with `--group lint` only, giving fast-fail feedback before mypy triggers the full environment sync. For packages where source code only conditionally imports heavy deps (text-splitters, huggingface), `lint_package` also overrides `UV_RUN_TYPE` to `--group lint --group typing`, skipping the ~3.5GB `test_integration` download entirely. `lint_tests` keeps `--all-groups` since test code legitimately imports those deps. Additionally, `lint_imports.sh` was inconsistently wired — most packages had the script but weren't calling it. ## Changes **Makefile optimization** - Introduce `UV_RUN_LINT` and `UV_RUN_TYPE` Make variables, both defaulting to `uv run --all-groups`. For `lint_package` and `lint_tests`, `UV_RUN_LINT` is overridden to `uv run --group lint` so ruff runs instantly without syncing heavy deps - For `text-splitters` and `huggingface`, override `UV_RUN_TYPE` on `lint_package` to `uv run --group lint --group typing` — mypy runs without downloading torch, CUDA, spacy, etc. **mypy config for lean groups** - Add `transformers` and `transformers.*` to `ignore_missing_imports` in `text-splitters` pyproject.toml (conditional `try/except` import, same treatment as existing `konlpy`/`nltk` entries) - Add `torch`, `torch.*`, `langchain_community`, `langchain_community.*` to `ignore_missing_imports` in `huggingface` pyproject.toml - Add dual `# type: ignore[unreachable, unused-ignore]` in `text-splitters/base.py` to handle the `PreTrainedTokenizerBase` isinstance check that behaves differently depending on whether transformers is installed **lint_imports.sh consistency** - Add `./scripts/lint_imports.sh` to the lint recipe in every package that wasn't calling it (standard-tests, model-profiles, all 15 partners), and create the script for the two packages missing it entirely (`model-profiles`, `openrouter`) - Update all `lint_imports.sh` scripts to allow `from langchain.agents` and `from langchain.tools` imports (legitimate v1 middleware dependencies used by `langchain-anthropic` and `langchain-openai`) --- .github/workflows/pr_labeler.yml | 2 +- .github/workflows/pr_labeler_backfill.yml | 2 +- libs/core/Makefile | 15 +++++++++------ libs/core/scripts/lint_imports.sh | 5 +++-- libs/langchain_v1/Makefile | 15 +++++++++------ libs/model-profiles/Makefile | 18 +++++++++++------- libs/model-profiles/scripts/lint_imports.sh | 18 ++++++++++++++++++ libs/partners/anthropic/Makefile | 18 +++++++++++------- .../anthropic/scripts/lint_imports.sh | 5 +++-- libs/partners/chroma/Makefile | 18 +++++++++++------- libs/partners/chroma/scripts/lint_imports.sh | 5 +++-- libs/partners/deepseek/Makefile | 18 +++++++++++------- .../partners/deepseek/scripts/lint_imports.sh | 8 ++++---- libs/partners/exa/Makefile | 18 +++++++++++------- libs/partners/exa/scripts/lint_imports.sh | 5 +++-- libs/partners/fireworks/Makefile | 18 +++++++++++------- .../fireworks/scripts/lint_imports.sh | 5 +++-- libs/partners/groq/Makefile | 18 +++++++++++------- libs/partners/groq/scripts/lint_imports.sh | 5 +++-- libs/partners/huggingface/Makefile | 19 ++++++++++++------- libs/partners/huggingface/pyproject.toml | 4 ++++ .../huggingface/scripts/lint_imports.sh | 6 +++--- libs/partners/mistralai/Makefile | 18 +++++++++++------- .../mistralai/scripts/lint_imports.sh | 6 +++--- libs/partners/nomic/Makefile | 18 +++++++++++------- libs/partners/nomic/scripts/lint_imports.sh | 5 +++-- libs/partners/ollama/Makefile | 18 +++++++++++------- libs/partners/ollama/scripts/lint_imports.sh | 8 ++++---- libs/partners/openai/Makefile | 18 +++++++++++------- libs/partners/openai/scripts/lint_imports.sh | 5 +++-- libs/partners/openrouter/Makefile | 18 +++++++++++------- .../openrouter/scripts/lint_imports.sh | 18 ++++++++++++++++++ libs/partners/perplexity/Makefile | 18 +++++++++++------- .../perplexity/scripts/lint_imports.sh | 5 +++-- libs/partners/qdrant/Makefile | 18 +++++++++++------- libs/partners/qdrant/scripts/lint_imports.sh | 5 +++-- libs/partners/xai/Makefile | 18 +++++++++++------- libs/partners/xai/scripts/lint_imports.sh | 5 +++-- libs/standard-tests/Makefile | 18 +++++++++++------- libs/standard-tests/scripts/lint_imports.sh | 5 +++-- libs/text-splitters/Makefile | 16 ++++++++++------ .../langchain_text_splitters/base.py | 6 +++++- libs/text-splitters/pyproject.toml | 2 +- libs/text-splitters/scripts/lint_imports.sh | 6 +++--- 44 files changed, 317 insertions(+), 182 deletions(-) create mode 100755 libs/model-profiles/scripts/lint_imports.sh create mode 100755 libs/partners/openrouter/scripts/lint_imports.sh diff --git a/.github/workflows/pr_labeler.yml b/.github/workflows/pr_labeler.yml index 544943da3b2..26127e16271 100644 --- a/.github/workflows/pr_labeler.yml +++ b/.github/workflows/pr_labeler.yml @@ -23,7 +23,7 @@ # The GitHub App token is required to check private organization membership # and to propagate label events to downstream workflows. -name: "PR Labeler" +name: "🏷️ PR Labeler" on: # Safe since we're not checking out or running the PR's code. diff --git a/.github/workflows/pr_labeler_backfill.yml b/.github/workflows/pr_labeler_backfill.yml index fe69500d525..4cebfde8628 100644 --- a/.github/workflows/pr_labeler_backfill.yml +++ b/.github/workflows/pr_labeler_backfill.yml @@ -4,7 +4,7 @@ # (size, file, title, contributor classification) to existing open PRs. # Reuses shared logic from .github/scripts/pr-labeler.js. -name: "PR Labeler Backfill" +name: "🏷️ PR Labeler Backfill" on: workflow_dispatch: diff --git a/libs/core/Makefile b/libs/core/Makefile index f7ca32a850d..ebf42a1c915 100644 --- a/libs/core/Makefile +++ b/libs/core/Makefile @@ -52,19 +52,22 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/core --name lint_package: PYTHON_FILES=langchain_core lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: ./scripts/lint_imports.sh - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) benchmark: uv run pytest tests/benchmarks --codspeed diff --git a/libs/core/scripts/lint_imports.sh b/libs/core/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/core/scripts/lint_imports.sh +++ b/libs/core/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/langchain_v1/Makefile b/libs/langchain_v1/Makefile index e7327247e43..b455a273705 100644 --- a/libs/langchain_v1/Makefile +++ b/libs/langchain_v1/Makefile @@ -84,18 +84,21 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/langchain - lint_package: PYTHON_FILES=langchain lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) ###################### # HELP diff --git a/libs/model-profiles/Makefile b/libs/model-profiles/Makefile index d7212cb0bb3..2acb87b5b7a 100644 --- a/libs/model-profiles/Makefile +++ b/libs/model-profiles/Makefile @@ -68,21 +68,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/model-profi lint_package: PYTHON_FILES=langchain_model_profiles lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_model_profiles -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/model-profiles/scripts/lint_imports.sh b/libs/model-profiles/scripts/lint_imports.sh new file mode 100755 index 00000000000..bab33bce31d --- /dev/null +++ b/libs/model-profiles/scripts/lint_imports.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -eu + +# Initialize a variable to keep track of errors +errors=0 + +# make sure not importing from langchain or langchain_experimental +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) + +# Decide on an exit status based on the errors +if [ "$errors" -gt 0 ]; then + exit 1 +else + exit 0 +fi diff --git a/libs/partners/anthropic/Makefile b/libs/partners/anthropic/Makefile index 146abcaa275..c0d04300061 100644 --- a/libs/partners/anthropic/Makefile +++ b/libs/partners/anthropic/Makefile @@ -35,21 +35,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/an lint_package: PYTHON_FILES=langchain_anthropic lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_anthropic -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ check_version: uv run python ./scripts/check_version.py diff --git a/libs/partners/anthropic/scripts/lint_imports.sh b/libs/partners/anthropic/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/anthropic/scripts/lint_imports.sh +++ b/libs/partners/anthropic/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/chroma/Makefile b/libs/partners/chroma/Makefile index 00b9693161f..2d87461d404 100644 --- a/libs/partners/chroma/Makefile +++ b/libs/partners/chroma/Makefile @@ -33,21 +33,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/ch lint_package: PYTHON_FILES=langchain_chroma lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_chroma -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/chroma/scripts/lint_imports.sh b/libs/partners/chroma/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/chroma/scripts/lint_imports.sh +++ b/libs/partners/chroma/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/deepseek/Makefile b/libs/partners/deepseek/Makefile index caf392bb52a..946a1aa4625 100644 --- a/libs/partners/deepseek/Makefile +++ b/libs/partners/deepseek/Makefile @@ -34,21 +34,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/de lint_package: PYTHON_FILES=langchain_deepseek lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_deepseek -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/deepseek/scripts/lint_imports.sh b/libs/partners/deepseek/scripts/lint_imports.sh index 19ccec1480c..bab33bce31d 100755 --- a/libs/partners/deepseek/scripts/lint_imports.sh +++ b/libs/partners/deepseek/scripts/lint_imports.sh @@ -5,10 +5,10 @@ set -eu # Initialize a variable to keep track of errors errors=0 -# make sure not importing from langchain, langchain_experimental, or langchain_community -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_community\.' . && errors=$((errors+1)) +# make sure not importing from langchain or langchain_experimental +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/exa/Makefile b/libs/partners/exa/Makefile index 23e804ad064..92c3768f994 100644 --- a/libs/partners/exa/Makefile +++ b/libs/partners/exa/Makefile @@ -33,21 +33,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/ex lint_package: PYTHON_FILES=langchain_exa lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_exa -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/exa/scripts/lint_imports.sh b/libs/partners/exa/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/exa/scripts/lint_imports.sh +++ b/libs/partners/exa/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/fireworks/Makefile b/libs/partners/fireworks/Makefile index f71fa1cb802..9138f3db4dc 100644 --- a/libs/partners/fireworks/Makefile +++ b/libs/partners/fireworks/Makefile @@ -32,21 +32,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/fi lint_package: PYTHON_FILES=langchain_fireworks lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_fireworks -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/fireworks/scripts/lint_imports.sh b/libs/partners/fireworks/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/fireworks/scripts/lint_imports.sh +++ b/libs/partners/fireworks/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/groq/Makefile b/libs/partners/groq/Makefile index cd552db75ec..65d122a60bb 100644 --- a/libs/partners/groq/Makefile +++ b/libs/partners/groq/Makefile @@ -33,21 +33,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/gr lint_package: PYTHON_FILES=langchain_groq lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_groq -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/groq/scripts/lint_imports.sh b/libs/partners/groq/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/groq/scripts/lint_imports.sh +++ b/libs/partners/groq/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/huggingface/Makefile b/libs/partners/huggingface/Makefile index 99a7f06c6dc..9942cd49f50 100644 --- a/libs/partners/huggingface/Makefile +++ b/libs/partners/huggingface/Makefile @@ -33,21 +33,26 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/hu lint_package: PYTHON_FILES=langchain_huggingface lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint +lint_package: UV_RUN_TYPE = uv run --group lint --group typing lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_huggingface -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/huggingface/pyproject.toml b/libs/partners/huggingface/pyproject.toml index a1ac7be30ed..0ab4f9ba306 100644 --- a/libs/partners/huggingface/pyproject.toml +++ b/libs/partners/huggingface/pyproject.toml @@ -79,6 +79,10 @@ langchain = { path = "../../langchain_v1", editable = true } [tool.mypy] disallow_untyped_defs = "True" +[[tool.mypy.overrides]] +module = ["torch", "torch.*", "langchain_community", "langchain_community.*",] +ignore_missing_imports = true + [tool.ruff.format] docstring-code-format = true docstring-code-line-length = 100 diff --git a/libs/partners/huggingface/scripts/lint_imports.sh b/libs/partners/huggingface/scripts/lint_imports.sh index 90d21f7295a..bab33bce31d 100755 --- a/libs/partners/huggingface/scripts/lint_imports.sh +++ b/libs/partners/huggingface/scripts/lint_imports.sh @@ -6,9 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_community\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/mistralai/Makefile b/libs/partners/mistralai/Makefile index 13829450571..1d2429b593f 100644 --- a/libs/partners/mistralai/Makefile +++ b/libs/partners/mistralai/Makefile @@ -35,21 +35,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/mi lint_package: PYTHON_FILES=langchain_mistralai lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_mistralai -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/mistralai/scripts/lint_imports.sh b/libs/partners/mistralai/scripts/lint_imports.sh index 90d21f7295a..bab33bce31d 100755 --- a/libs/partners/mistralai/scripts/lint_imports.sh +++ b/libs/partners/mistralai/scripts/lint_imports.sh @@ -6,9 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_community\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/nomic/Makefile b/libs/partners/nomic/Makefile index 3908c83ea9e..933f11a0247 100644 --- a/libs/partners/nomic/Makefile +++ b/libs/partners/nomic/Makefile @@ -33,21 +33,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/no lint_package: PYTHON_FILES=langchain_nomic lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_nomic -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/nomic/scripts/lint_imports.sh b/libs/partners/nomic/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/nomic/scripts/lint_imports.sh +++ b/libs/partners/nomic/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/ollama/Makefile b/libs/partners/ollama/Makefile index 1ed1de0cfcb..6d9e4102db5 100644 --- a/libs/partners/ollama/Makefile +++ b/libs/partners/ollama/Makefile @@ -42,21 +42,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/ol lint_package: PYTHON_FILES=langchain_ollama lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_ollama -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/ollama/scripts/lint_imports.sh b/libs/partners/ollama/scripts/lint_imports.sh index 19ccec1480c..bab33bce31d 100755 --- a/libs/partners/ollama/scripts/lint_imports.sh +++ b/libs/partners/ollama/scripts/lint_imports.sh @@ -5,10 +5,10 @@ set -eu # Initialize a variable to keep track of errors errors=0 -# make sure not importing from langchain, langchain_experimental, or langchain_community -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_community\.' . && errors=$((errors+1)) +# make sure not importing from langchain or langchain_experimental +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/openai/Makefile b/libs/partners/openai/Makefile index 6a82e2e5029..edc47a305ec 100644 --- a/libs/partners/openai/Makefile +++ b/libs/partners/openai/Makefile @@ -46,21 +46,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/op lint_package: PYTHON_FILES=langchain_openai lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_openai -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/openai/scripts/lint_imports.sh b/libs/partners/openai/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/openai/scripts/lint_imports.sh +++ b/libs/partners/openai/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/openrouter/Makefile b/libs/partners/openrouter/Makefile index 5e426ca663a..522f46d17be 100644 --- a/libs/partners/openrouter/Makefile +++ b/libs/partners/openrouter/Makefile @@ -34,21 +34,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/op lint_package: PYTHON_FILES=langchain_openrouter lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_openrouter -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/openrouter/scripts/lint_imports.sh b/libs/partners/openrouter/scripts/lint_imports.sh new file mode 100755 index 00000000000..bab33bce31d --- /dev/null +++ b/libs/partners/openrouter/scripts/lint_imports.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -eu + +# Initialize a variable to keep track of errors +errors=0 + +# make sure not importing from langchain or langchain_experimental +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) + +# Decide on an exit status based on the errors +if [ "$errors" -gt 0 ]; then + exit 1 +else + exit 0 +fi diff --git a/libs/partners/perplexity/Makefile b/libs/partners/perplexity/Makefile index 2d5a2cba711..31548969ba2 100644 --- a/libs/partners/perplexity/Makefile +++ b/libs/partners/perplexity/Makefile @@ -32,21 +32,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/pe lint_package: PYTHON_FILES=langchain_perplexity lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_perplexity -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/perplexity/scripts/lint_imports.sh b/libs/partners/perplexity/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/perplexity/scripts/lint_imports.sh +++ b/libs/partners/perplexity/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/qdrant/Makefile b/libs/partners/qdrant/Makefile index be4b3276d66..a3f876a9957 100644 --- a/libs/partners/qdrant/Makefile +++ b/libs/partners/qdrant/Makefile @@ -34,21 +34,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/qd lint_package: PYTHON_FILES=langchain_qdrant lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_qdrant -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/qdrant/scripts/lint_imports.sh b/libs/partners/qdrant/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/qdrant/scripts/lint_imports.sh +++ b/libs/partners/qdrant/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/partners/xai/Makefile b/libs/partners/xai/Makefile index 8b12f385761..71ed75e352f 100644 --- a/libs/partners/xai/Makefile +++ b/libs/partners/xai/Makefile @@ -32,21 +32,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/partners/xa lint_package: PYTHON_FILES=langchain_xai lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_xai -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/partners/xai/scripts/lint_imports.sh b/libs/partners/xai/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/partners/xai/scripts/lint_imports.sh +++ b/libs/partners/xai/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/standard-tests/Makefile b/libs/standard-tests/Makefile index c937d5436f8..f394ef31705 100644 --- a/libs/standard-tests/Makefile +++ b/libs/standard-tests/Makefile @@ -31,21 +31,25 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/standard-te lint_package: PYTHON_FILES=langchain_tests lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint lint lint_diff lint_package lint_tests: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + ./scripts/lint_imports.sh + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) check_imports: $(shell find langchain_tests -name '*.py') - uv run --all-groups python ./scripts/check_imports.py $^ + $(UV_RUN_LINT) python ./scripts/check_imports.py $^ ###################### # HELP diff --git a/libs/standard-tests/scripts/lint_imports.sh b/libs/standard-tests/scripts/lint_imports.sh index 695613c7ba8..bab33bce31d 100755 --- a/libs/standard-tests/scripts/lint_imports.sh +++ b/libs/standard-tests/scripts/lint_imports.sh @@ -6,8 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then diff --git a/libs/text-splitters/Makefile b/libs/text-splitters/Makefile index 4eec074f89b..1a3dd4b3789 100644 --- a/libs/text-splitters/Makefile +++ b/libs/text-splitters/Makefile @@ -40,19 +40,23 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/core --name lint_package: PYTHON_FILES=langchain_text_splitters lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test +UV_RUN_LINT = uv run --all-groups +UV_RUN_TYPE = uv run --all-groups +lint_package lint_tests: UV_RUN_LINT = uv run --group lint +lint_package: UV_RUN_TYPE = uv run --group lint --group typing lint lint_diff lint_package lint_tests: ./scripts/lint_imports.sh - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) --diff + [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: - mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) + mkdir -p $(MYPY_CACHE) && $(UV_RUN_TYPE) mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff format $(PYTHON_FILES) + [ "$(PYTHON_FILES)" = "" ] || $(UV_RUN_LINT) ruff check --fix $(PYTHON_FILES) ###################### # HELP diff --git a/libs/text-splitters/langchain_text_splitters/base.py b/libs/text-splitters/langchain_text_splitters/base.py index a12564c03b3..68d3a42b767 100644 --- a/libs/text-splitters/langchain_text_splitters/base.py +++ b/libs/text-splitters/langchain_text_splitters/base.py @@ -214,7 +214,11 @@ class TextSplitter(BaseDocumentTransformer, ABC): raise ValueError(msg) if not isinstance(tokenizer, PreTrainedTokenizerBase): - msg = "Tokenizer received was not an instance of PreTrainedTokenizerBase" # type: ignore[unreachable] + # unreachable: transformers absent -> PreTrainedTokenizerBase is Any + # unused-ignore: transformers present -> branch is reachable + msg = ( # type: ignore[unreachable, unused-ignore] + "Tokenizer received was not an instance of PreTrainedTokenizerBase" + ) raise ValueError(msg) # noqa: TRY004 def _huggingface_tokenizer_length(text: str) -> int: diff --git a/libs/text-splitters/pyproject.toml b/libs/text-splitters/pyproject.toml index c1713c560da..d1334d6e6ef 100644 --- a/libs/text-splitters/pyproject.toml +++ b/libs/text-splitters/pyproject.toml @@ -87,7 +87,7 @@ enable_error_code = "deprecated" warn_unreachable = true [[tool.mypy.overrides]] -module = ["konlpy", "nltk",] +module = ["konlpy", "nltk", "transformers", "transformers.*",] ignore_missing_imports = true [tool.ruff.format] diff --git a/libs/text-splitters/scripts/lint_imports.sh b/libs/text-splitters/scripts/lint_imports.sh index 90d21f7295a..bab33bce31d 100755 --- a/libs/text-splitters/scripts/lint_imports.sh +++ b/libs/text-splitters/scripts/lint_imports.sh @@ -6,9 +6,9 @@ set -eu errors=0 # make sure not importing from langchain or langchain_experimental -git --no-pager grep '^from langchain\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_experimental\.' . && errors=$((errors+1)) -git --no-pager grep '^from langchain_community\.' . && errors=$((errors+1)) +# allow langchain.agents and langchain.tools (v1 middleware) +git --no-pager grep "^from langchain\." . | grep -v ":from langchain\.agents" | grep -v ":from langchain\.tools" && errors=$((errors+1)) +git --no-pager grep "^from langchain_experimental\." . && errors=$((errors+1)) # Decide on an exit status based on the errors if [ "$errors" -gt 0 ]; then