diff --git a/libs/core/langchain_core/callbacks/manager.py b/libs/core/langchain_core/callbacks/manager.py index 5e5620ba3b3..cb8fb9970d1 100644 --- a/libs/core/langchain_core/callbacks/manager.py +++ b/libs/core/langchain_core/callbacks/manager.py @@ -12,7 +12,6 @@ from concurrent.futures import ThreadPoolExecutor from contextlib import asynccontextmanager, contextmanager from contextvars import copy_context from typing import TYPE_CHECKING, Any, TypeVar, cast -from uuid import UUID from langsmith.run_helpers import get_tracing_context from typing_extensions import Self, override @@ -44,6 +43,7 @@ from langchain_core.utils.uuid import uuid7 if TYPE_CHECKING: from collections.abc import AsyncGenerator, Coroutine, Generator, Sequence + from uuid import UUID from tenacity import RetryCallState diff --git a/libs/core/langchain_core/language_models/base.py b/libs/core/langchain_core/language_models/base.py index ff1daed4b35..67c23fee529 100644 --- a/libs/core/langchain_core/language_models/base.py +++ b/libs/core/langchain_core/language_models/base.py @@ -17,8 +17,8 @@ from typing import ( from pydantic import BaseModel, ConfigDict, Field, field_validator from typing_extensions import TypedDict, override -from langchain_core.caches import BaseCache -from langchain_core.callbacks import Callbacks +from langchain_core.caches import BaseCache # noqa: TC001 +from langchain_core.callbacks import Callbacks # noqa: TC001 from langchain_core.globals import get_verbose from langchain_core.messages import ( AIMessage, diff --git a/libs/core/langchain_core/prompts/base.py b/libs/core/langchain_core/prompts/base.py index 947550f587e..d6dc5c56d61 100644 --- a/libs/core/langchain_core/prompts/base.py +++ b/libs/core/langchain_core/prompts/base.py @@ -6,7 +6,7 @@ import contextlib import json import typing from abc import ABC, abstractmethod -from collections.abc import Mapping +from collections.abc import Mapping # noqa: TC003 from functools import cached_property from pathlib import Path from typing import ( @@ -22,7 +22,7 @@ from typing_extensions import Self, override from langchain_core.exceptions import ErrorCode, create_message from langchain_core.load import dumpd -from langchain_core.output_parsers.base import BaseOutputParser +from langchain_core.output_parsers.base import BaseOutputParser # noqa: TC001 from langchain_core.prompt_values import ( ChatPromptValueConcrete, PromptValue, diff --git a/libs/core/langchain_core/runnables/config.py b/libs/core/langchain_core/runnables/config.py index 3f165d71d42..13c7aba87c1 100644 --- a/libs/core/langchain_core/runnables/config.py +++ b/libs/core/langchain_core/runnables/config.py @@ -3,7 +3,9 @@ from __future__ import annotations import asyncio -import uuid + +# Cannot move uuid to TYPE_CHECKING as RunnableConfig is used in Pydantic models +import uuid # noqa: TC003 import warnings from collections.abc import Awaitable, Callable, Generator, Iterable, Iterator, Sequence from concurrent.futures import Executor, Future, ThreadPoolExecutor diff --git a/libs/core/langchain_core/runnables/router.py b/libs/core/langchain_core/runnables/router.py index d9b4d44b8c3..e993f233320 100644 --- a/libs/core/langchain_core/runnables/router.py +++ b/libs/core/langchain_core/runnables/router.py @@ -2,7 +2,7 @@ from __future__ import annotations -from collections.abc import Callable, Mapping +from collections.abc import Mapping from typing import ( TYPE_CHECKING, Any, @@ -31,7 +31,7 @@ from langchain_core.runnables.utils import ( ) if TYPE_CHECKING: - from collections.abc import AsyncIterator, Iterator + from collections.abc import AsyncIterator, Callable, Iterator class RouterInput(TypedDict): diff --git a/libs/core/langchain_core/runnables/utils.py b/libs/core/langchain_core/runnables/utils.py index 2c013f61239..05c42229782 100644 --- a/libs/core/langchain_core/runnables/utils.py +++ b/libs/core/langchain_core/runnables/utils.py @@ -7,7 +7,10 @@ import asyncio import inspect import sys import textwrap -from collections.abc import Mapping, Sequence + +# Cannot move to TYPE_CHECKING as Mapping and Sequence are needed at runtime by +# RunnableConfigurableFields. +from collections.abc import Mapping, Sequence # noqa: TC003 from functools import lru_cache from inspect import signature from itertools import groupby diff --git a/libs/core/langchain_core/tools/base.py b/libs/core/langchain_core/tools/base.py index fc7cc012fdd..e5ad58b8862 100644 --- a/libs/core/langchain_core/tools/base.py +++ b/libs/core/langchain_core/tools/base.py @@ -8,7 +8,7 @@ import json import typing import warnings from abc import ABC, abstractmethod -from collections.abc import Callable +from collections.abc import Callable # noqa: TC003 from inspect import signature from typing import ( TYPE_CHECKING, diff --git a/libs/core/langchain_core/tools/retriever.py b/libs/core/langchain_core/tools/retriever.py index a830c964f84..52db07fcaeb 100644 --- a/libs/core/langchain_core/tools/retriever.py +++ b/libs/core/langchain_core/tools/retriever.py @@ -6,8 +6,10 @@ from typing import TYPE_CHECKING, Literal from pydantic import BaseModel, Field -from langchain_core.callbacks import Callbacks -from langchain_core.documents import Document +# Cannot move Callbacks and Document to TYPE_CHECKING as StructuredTool's +# func/coroutine parameter annotations are evaluated at runtime. +from langchain_core.callbacks import Callbacks # noqa: TC001 +from langchain_core.documents import Document # noqa: TC001 from langchain_core.prompts import ( BasePromptTemplate, PromptTemplate, diff --git a/libs/core/langchain_core/tools/simple.py b/libs/core/langchain_core/tools/simple.py index 68c70e61258..88af06e598c 100644 --- a/libs/core/langchain_core/tools/simple.py +++ b/libs/core/langchain_core/tools/simple.py @@ -11,9 +11,10 @@ from typing import ( from typing_extensions import override +# Cannot move to TYPE_CHECKING as _run/_arun parameter annotations are needed at runtime from langchain_core.callbacks import ( - AsyncCallbackManagerForToolRun, - CallbackManagerForToolRun, + AsyncCallbackManagerForToolRun, # noqa: TC001 + CallbackManagerForToolRun, # noqa: TC001 ) from langchain_core.runnables import RunnableConfig, run_in_executor from langchain_core.tools.base import ( diff --git a/libs/core/langchain_core/tools/structured.py b/libs/core/langchain_core/tools/structured.py index 2b613f59461..01070f78f5f 100644 --- a/libs/core/langchain_core/tools/structured.py +++ b/libs/core/langchain_core/tools/structured.py @@ -16,9 +16,10 @@ from typing import ( from pydantic import Field, SkipValidation from typing_extensions import override +# Cannot move to TYPE_CHECKING as _run/_arun parameter annotations are needed at runtime from langchain_core.callbacks import ( - AsyncCallbackManagerForToolRun, - CallbackManagerForToolRun, + AsyncCallbackManagerForToolRun, # noqa: TC001 + CallbackManagerForToolRun, # noqa: TC001 ) from langchain_core.runnables import RunnableConfig, run_in_executor from langchain_core.tools.base import ( diff --git a/libs/core/langchain_core/tracers/event_stream.py b/libs/core/langchain_core/tracers/event_stream.py index 57bed0be538..0aa98b373f6 100644 --- a/libs/core/langchain_core/tracers/event_stream.py +++ b/libs/core/langchain_core/tracers/event_stream.py @@ -12,7 +12,6 @@ from typing import ( TypeVar, cast, ) -from uuid import UUID from typing_extensions import NotRequired, override @@ -47,6 +46,7 @@ from langchain_core.utils.uuid import uuid7 if TYPE_CHECKING: from collections.abc import AsyncIterator, Iterator, Sequence + from uuid import UUID from langchain_core.documents import Document from langchain_core.runnables import Runnable, RunnableConfig diff --git a/libs/core/langchain_core/utils/function_calling.py b/libs/core/langchain_core/utils/function_calling.py index 6f8e46a23ff..76aa8441726 100644 --- a/libs/core/langchain_core/utils/function_calling.py +++ b/libs/core/langchain_core/utils/function_calling.py @@ -8,7 +8,6 @@ import logging import types import typing import uuid -from collections.abc import Mapping from typing import ( TYPE_CHECKING, Annotated, @@ -35,7 +34,7 @@ from langchain_core.utils.json_schema import dereference_refs from langchain_core.utils.pydantic import is_basemodel_subclass if TYPE_CHECKING: - from collections.abc import Callable + from collections.abc import Callable, Mapping from langchain_core.tools import BaseTool diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index 3db713b9d02..dc06b95019e 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -93,9 +93,6 @@ ignore = [ "PERF203", # Rarely useful "PLR09", # Too many something (arg, statements, etc) "RUF012", # Doesn't play well with Pydantic - "TC001", # Doesn't play well with Pydantic - "TC002", # Doesn't play well with Pydantic - "TC003", # Doesn't play well with Pydantic "TD002", # Missing author in TODO "TD003", # Missing issue link in TODO @@ -112,7 +109,7 @@ unfixable = [ flake8-annotations.allow-star-arg-any = true flake8-annotations.mypy-init-return = true flake8-builtins.ignorelist = ["id", "input", "type"] -flake8-type-checking.runtime-evaluated-base-classes = ["pydantic.BaseModel","langchain_core.load.serializable.Serializable","langchain_core.runnables.base.RunnableSerializable"] +flake8-type-checking.runtime-evaluated-base-classes = [ "pydantic.BaseModel", "langchain_core.load.serializable.Serializable", "langchain_core.runnables.base.RunnableSerializable", "langchain_core.language_models.base.BaseLanguageModel", "langchain_core.outputs.generation.Generation", "langchain_core.tools.base.BaseTool",] pep8-naming.classmethod-decorators = [ "classmethod", "langchain_core.utils.pydantic.pre_init", "pydantic.field_validator", "pydantic.v1.root_validator",] [tool.ruff.lint.pydocstyle]