diff --git a/libs/core/langchain_core/tools/base.py b/libs/core/langchain_core/tools/base.py index 34bf4c4582b..4df4a98b203 100644 --- a/libs/core/langchain_core/tools/base.py +++ b/libs/core/langchain_core/tools/base.py @@ -689,9 +689,7 @@ class ChildTool(BaseTool): f"args_schema must be a Pydantic BaseModel, got {self.args_schema}" ) raise NotImplementedError(msg) - return { - k: getattr(result, k) for k, v in result_dict.items() - } + return {k: getattr(result, k) for k, v in result_dict.items()} return tool_input @model_validator(mode="before") diff --git a/libs/core/tests/unit_tests/test_tools.py b/libs/core/tests/unit_tests/test_tools.py index 3e0ac61cbcd..934cf5c6364 100644 --- a/libs/core/tests/unit_tests/test_tools.py +++ b/libs/core/tests/unit_tests/test_tools.py @@ -634,7 +634,7 @@ def test_named_tool_decorator_return_direct() -> None: """Test functionality when arguments and return direct are provided as input.""" @tool("search", return_direct=True) - def search_api(query: str, *args: Any) -> str: + def search_api(query: str) -> str: """Search the API for the query.""" return "API result" @@ -2549,24 +2549,28 @@ def test_tool_args_schema_with_pydantic_validator() -> None: x: NestedArgsSchema @model_validator(mode="before") - def wrap_in_x(cls, data: dict) -> dict: + def wrap_in_x(cls, data: Any) -> Any: # noqa: N805 + if not isinstance(data, dict): + return {"x": data} + if "x" not in data: return {"x": data} return data @tool(args_schema=ArgsSchema) - def foo(**args) -> ArgsSchema: + def foo(**args: Any) -> ArgsSchema: """Bar.""" return ArgsSchema.model_validate(args) - # Test case where validator is identity function valid_inputs = {"x": {"y": 5}} assert foo.invoke(valid_inputs) == ArgsSchema.model_validate(valid_inputs) # Test case where validator wraps input in "x" invalid_inputs = {"y": 5} - assert foo.invoke(invalid_inputs) == ArgsSchema.model_validate({"x": invalid_inputs}) + assert foo.invoke(invalid_inputs) == ArgsSchema.model_validate( + {"x": invalid_inputs} + ) def test_title_property_preserved() -> None: