Home / Class/ ToolRetryMiddleware Class — langchain Architecture

ToolRetryMiddleware Class — langchain Architecture

Architecture documentation for the ToolRetryMiddleware class in tool_retry.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  33f83a05_ad1b_0c1c_e484_ac91455db157["ToolRetryMiddleware"]
  d1a1c88e_8e50_9b1e_f783_6ddf1220b647["tool_retry.py"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|defined in| d1a1c88e_8e50_9b1e_f783_6ddf1220b647
  eca8764c_16d4_7994_0b57_199409e3f389["__init__()"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|method| eca8764c_16d4_7994_0b57_199409e3f389
  5665de07_b809_7bb1_4e7f_e0409866de63["_should_retry_tool()"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|method| 5665de07_b809_7bb1_4e7f_e0409866de63
  a235f099_6804_8d79_50f5_13bbaa648627["_format_failure_message()"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|method| a235f099_6804_8d79_50f5_13bbaa648627
  7a031c34_097e_d25a_0210_cf5d0d368b98["_handle_failure()"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|method| 7a031c34_097e_d25a_0210_cf5d0d368b98
  731777b2_3052_874d_7b48_c5d58d2e0a8c["wrap_tool_call()"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|method| 731777b2_3052_874d_7b48_c5d58d2e0a8c
  e9a8e4d0_4a9e_0f20_9c10_65fc4f8ed225["awrap_tool_call()"]
  33f83a05_ad1b_0c1c_e484_ac91455db157 -->|method| e9a8e4d0_4a9e_0f20_9c10_65fc4f8ed225

Relationship Graph

Source Code

libs/langchain_v1/langchain/agents/middleware/tool_retry.py lines 30–403

class ToolRetryMiddleware(AgentMiddleware[AgentState[ResponseT], ContextT, ResponseT]):
    """Middleware that automatically retries failed tool calls with configurable backoff.

    Supports retrying on specific exceptions and exponential backoff.

    Examples:
        !!! example "Basic usage with default settings (2 retries, exponential backoff)"

            ```python
            from langchain.agents import create_agent
            from langchain.agents.middleware import ToolRetryMiddleware

            agent = create_agent(model, tools=[search_tool], middleware=[ToolRetryMiddleware()])
            ```

        !!! example "Retry specific exceptions only"

            ```python
            from requests.exceptions import RequestException, Timeout

            retry = ToolRetryMiddleware(
                max_retries=4,
                retry_on=(RequestException, Timeout),
                backoff_factor=1.5,
            )
            ```

        !!! example "Custom exception filtering"

            ```python
            from requests.exceptions import HTTPError


            def should_retry(exc: Exception) -> bool:
                # Only retry on 5xx errors
                if isinstance(exc, HTTPError):
                    return 500 <= exc.status_code < 600
                return False


            retry = ToolRetryMiddleware(
                max_retries=3,
                retry_on=should_retry,
            )
            ```

        !!! example "Apply to specific tools with custom error handling"

            ```python
            def format_error(exc: Exception) -> str:
                return "Database temporarily unavailable. Please try again later."


            retry = ToolRetryMiddleware(
                max_retries=4,
                tools=["search_database"],
                on_failure=format_error,
            )
            ```

        !!! example "Apply to specific tools using `BaseTool` instances"

            ```python
            from langchain_core.tools import tool


            @tool
            def search_database(query: str) -> str:
                '''Search the database.'''
                return results


            retry = ToolRetryMiddleware(
                max_retries=4,
                tools=[search_database],  # Pass BaseTool instance
            )
            ```

        !!! example "Constant backoff (no exponential growth)"

            ```python

Frequently Asked Questions

What is the ToolRetryMiddleware class?
ToolRetryMiddleware is a class in the langchain codebase, defined in libs/langchain_v1/langchain/agents/middleware/tool_retry.py.
Where is ToolRetryMiddleware defined?
ToolRetryMiddleware is defined in libs/langchain_v1/langchain/agents/middleware/tool_retry.py at line 30.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free