diff --git a/libs/standard-tests/langchain_tests/__init__.py b/libs/standard-tests/langchain_tests/__init__.py
index e69de29bb2d..1ebd42cf789 100644
--- a/libs/standard-tests/langchain_tests/__init__.py
+++ b/libs/standard-tests/langchain_tests/__init__.py
@@ -0,0 +1,7 @@
+"""
+Base Test classes for standard testing.
+
+To learn how to use these classes, see the
+`Integration standard testing `_
+guide
+"""
diff --git a/libs/standard-tests/langchain_tests/base.py b/libs/standard-tests/langchain_tests/base.py
index f2b7ca1f7e9..7c01639db51 100644
--- a/libs/standard-tests/langchain_tests/base.py
+++ b/libs/standard-tests/langchain_tests/base.py
@@ -3,6 +3,10 @@ from typing import Type
class BaseStandardTests(ABC):
+ """
+ :private:
+ """
+
def test_no_overrides_DO_NOT_OVERRIDE(self) -> None:
"""
Test that no standard tests are overridden.
diff --git a/libs/standard-tests/langchain_tests/unit_tests/tools.py b/libs/standard-tests/langchain_tests/unit_tests/tools.py
index 93701437da3..d674dfe4f48 100644
--- a/libs/standard-tests/langchain_tests/unit_tests/tools.py
+++ b/libs/standard-tests/langchain_tests/unit_tests/tools.py
@@ -1,3 +1,8 @@
+"""
+.. autosummary::
+ :exclude-members: ToolsTests
+"""
+
import os
from abc import abstractmethod
from typing import Tuple, Type, Union
@@ -11,12 +16,25 @@ from langchain_tests.base import BaseStandardTests
class ToolsTests(BaseStandardTests):
+ """
+ :private:
+ Base class for testing tools. This won't show in the documentation, but
+ the docstrings will be inherited by subclasses.
+ """
+
@property
@abstractmethod
- def tool_constructor(self) -> Union[Type[BaseTool], BaseTool]: ...
+ def tool_constructor(self) -> Union[Type[BaseTool], BaseTool]:
+ """
+ Returns a class or instance of a tool to be tested.
+ """
+ ...
@property
def tool_constructor_params(self) -> dict:
+ """
+ Returns a dictionary of parameters to pass to the tool constructor.
+ """
return {}
@property
@@ -24,13 +42,16 @@ class ToolsTests(BaseStandardTests):
"""
Returns a dictionary representing the "args" of an example tool call.
- This should NOT be a ToolCall dict - i.e. it should not
+ This should NOT be a ToolCall dict - it should not
have {"name", "id", "args"} keys.
"""
return {}
@pytest.fixture
def tool(self) -> BaseTool:
+ """
+ :private:
+ """
if isinstance(self.tool_constructor, BaseTool):
if self.tool_constructor_params != {}:
msg = (
@@ -43,19 +64,24 @@ class ToolsTests(BaseStandardTests):
class ToolsUnitTests(ToolsTests):
- def test_init(self) -> None:
- if isinstance(self.tool_constructor, BaseTool):
- tool = self.tool_constructor
- else:
- tool = self.tool_constructor(**self.tool_constructor_params)
- assert tool is not None
-
@property
def init_from_env_params(self) -> Tuple[dict, dict, dict]:
"""Return env vars, init args, and expected instance attrs for initializing
from env vars."""
return {}, {}, {}
+ def test_init(self) -> None:
+ """
+ Test that the tool can be initialized with :attr:`tool_constructor` and
+ :attr:`tool_constructor_params`. If this fails, check that the
+ keyword args defined in :attr:`tool_constructor_params` are valid.
+ """
+ if isinstance(self.tool_constructor, BaseTool):
+ tool = self.tool_constructor
+ else:
+ tool = self.tool_constructor(**self.tool_constructor_params)
+ assert tool is not None
+
def test_init_from_env(self) -> None:
env_params, tools_params, expected_attrs = self.init_from_env_params
if env_params:
@@ -69,14 +95,32 @@ class ToolsUnitTests(ToolsTests):
assert actual == expected
def test_has_name(self, tool: BaseTool) -> None:
+ """
+ Tests that the tool has a name attribute to pass to chat models.
+
+ If this fails, add a `name` parameter to your tool.
+ """
assert tool.name
def test_has_input_schema(self, tool: BaseTool) -> None:
+ """
+ Tests that the tool has an input schema.
+
+ If this fails, add an `args_schema` to your tool.
+
+ See
+ `this guide `_
+ and see how `CalculatorInput` is configured in the
+ `CustomCalculatorTool.args_schema` attribute
+ """
assert tool.get_input_schema()
def test_input_schema_matches_invoke_params(self, tool: BaseTool) -> None:
"""
- Tests that the provided example params match the declared input schema
+ Tests that the provided example params match the declared input schema.
+
+ If this fails, update the `tool_invoke_params_example` attribute to match
+ the input schema (`args_schema`) of the tool.
"""
# this will be a pydantic object
input_schema = tool.get_input_schema()
diff --git a/libs/standard-tests/langchain_tests/utils/pydantic.py b/libs/standard-tests/langchain_tests/utils/pydantic.py
index 6aa0408a092..52720bbd081 100644
--- a/libs/standard-tests/langchain_tests/utils/pydantic.py
+++ b/libs/standard-tests/langchain_tests/utils/pydantic.py
@@ -1,4 +1,8 @@
-"""Utilities for working with pydantic models."""
+"""
+Utilities for working with pydantic models.
+
+:private:
+"""
def get_pydantic_major_version() -> int: