From 0bd862b814ae6e89117422202e60fb429e511ca6 Mon Sep 17 00:00:00 2001 From: Christophe Bornet Date: Sat, 27 Dec 2025 08:36:47 +0100 Subject: [PATCH] style(langchain): add ruff rule RUF012 (#34497) Co-authored-by: Mason Daugherty Co-authored-by: Mason Daugherty --- libs/langchain_v1/langchain/agents/middleware/types.py | 4 ++-- libs/langchain_v1/pyproject.toml | 1 - .../tests/unit_tests/agents/middleware/core/test_tools.py | 2 +- .../agents/middleware/implementations/test_summarization.py | 2 +- .../agents/middleware/implementations/test_tool_emulator.py | 4 ++-- .../tests/unit_tests/agents/test_response_format.py | 2 +- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libs/langchain_v1/langchain/agents/middleware/types.py b/libs/langchain_v1/langchain/agents/middleware/types.py index ae2565f0eaa..0a953ad2767 100644 --- a/libs/langchain_v1/langchain/agents/middleware/types.py +++ b/libs/langchain_v1/langchain/agents/middleware/types.py @@ -2,7 +2,7 @@ from __future__ import annotations -from collections.abc import Awaitable, Callable +from collections.abc import Awaitable, Callable, Sequence from dataclasses import dataclass, field, replace from inspect import iscoroutinefunction from typing import ( @@ -338,7 +338,7 @@ class AgentMiddleware(Generic[StateT, ContextT]): state_schema: type[StateT] = cast("type[StateT]", AgentState) """The schema for state passed to the middleware nodes.""" - tools: list[BaseTool] + tools: Sequence[BaseTool] """Additional tools registered by the middleware.""" @property diff --git a/libs/langchain_v1/pyproject.toml b/libs/langchain_v1/pyproject.toml index afe23b2c464..b143e7762e7 100644 --- a/libs/langchain_v1/pyproject.toml +++ b/libs/langchain_v1/pyproject.toml @@ -112,7 +112,6 @@ ignore = [ "FIX002", # Line contains TODO "PERF203", # Rarely useful "PLR09", # Too many something (arg, statements, etc) - "RUF012", # Doesn't play well with Pydantic "TD002", # Missing author in TODO "TD003", # Missing issue link in TODO diff --git a/libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_tools.py b/libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_tools.py index 4a22a34ae18..12274cd3b63 100644 --- a/libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_tools.py +++ b/libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_tools.py @@ -293,7 +293,7 @@ def test_middleware_with_additional_tools() -> None: return "middleware" class ToolProvidingMiddleware(AgentMiddleware): - tools = [middleware_tool] + tools = (middleware_tool,) # Model calls the middleware-provided tool model = FakeToolCallingModel( diff --git a/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py b/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py index ce5ff5c1ee2..2507f6f3e5d 100644 --- a/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py +++ b/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py @@ -31,7 +31,7 @@ class ProfileChatModel(BaseChatModel): def _generate(self, messages, **kwargs): # type: ignore[no-untyped-def] return ChatResult(generations=[ChatGeneration(message=AIMessage(content="Summary"))]) - profile: ModelProfile | None = {"max_input_tokens": 1000} + profile: ModelProfile | None = ModelProfile(max_input_tokens=1000) @property def _llm_type(self) -> str: diff --git a/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py b/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py index 3b656ba61e7..e6bd57e6377 100644 --- a/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py +++ b/libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py @@ -1,7 +1,7 @@ """Unit tests for tool emulator middleware.""" import typing -from collections.abc import Callable +from collections.abc import Callable, Sequence from itertools import cycle from typing import Any, Literal @@ -86,7 +86,7 @@ class FakeModel(GenericFakeChatModel): class FakeEmulatorModel(BaseChatModel): """Fake model for emulating tool responses.""" - responses: list[str] = ["Emulated response"] + responses: Sequence[str] = ("Emulated response",) response_index: int = 0 def _generate( diff --git a/libs/langchain_v1/tests/unit_tests/agents/test_response_format.py b/libs/langchain_v1/tests/unit_tests/agents/test_response_format.py index e0bae8332d7..44573309069 100644 --- a/libs/langchain_v1/tests/unit_tests/agents/test_response_format.py +++ b/libs/langchain_v1/tests/unit_tests/agents/test_response_format.py @@ -776,7 +776,7 @@ class TestDynamicModelWithResponseFormat: # Custom model that we'll use to test whether the tool strategy is applied # correctly at runtime. class CustomModel(GenericFakeChatModel): - tool_bindings: list[Any] = [] + tool_bindings: list[Any] = Field(default_factory=list) def bind_tools( self,