Home / Function/ test_model_retry_custom_exception_filter() — langchain Function Reference

test_model_retry_custom_exception_filter() — langchain Function Reference

Architecture documentation for the test_model_retry_custom_exception_filter() function in test_model_retry.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  9c46179f_0bc2_7bd8_d868_7af81269be9a["test_model_retry_custom_exception_filter()"]
  6a114635_155a_5b86_2f48_fb8ca99f7545["test_model_retry.py"]
  9c46179f_0bc2_7bd8_d868_7af81269be9a -->|defined in| 6a114635_155a_5b86_2f48_fb8ca99f7545
  93e48461_3897_ea11_773a_8838a5a28da2["_generate()"]
  9c46179f_0bc2_7bd8_d868_7af81269be9a -->|calls| 93e48461_3897_ea11_773a_8838a5a28da2
  style 9c46179f_0bc2_7bd8_d868_7af81269be9a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_model_retry.py lines 322–398

def test_model_retry_custom_exception_filter() -> None:
    """Test ModelRetryMiddleware with custom exception filter function."""

    class CustomError(Exception):
        """Custom exception with retry_me attribute."""

        def __init__(self, message: str, *, retry_me: bool):
            """Initialize custom error.

            Args:
                message: Error message.
                retry_me: Whether this error should be retried.
            """
            super().__init__(message)
            self.retry_me = retry_me

    attempt_count = {"value": 0}

    class CustomErrorModel(FakeToolCallingModel):
        """Model that raises CustomError."""

        def _generate(
            self,
            messages: list[BaseMessage],
            stop: list[str] | None = None,
            run_manager: CallbackManagerForLLMRun | None = None,
            **kwargs: Any,
        ) -> ChatResult:
            """Execute the model and raise CustomError.

            Args:
                messages: Input messages.
                stop: Optional stop sequences.
                run_manager: Optional callback manager.
                **kwargs: Additional keyword arguments.

            Raises:
                CustomError: Always raises CustomError.
            """
            attempt_count["value"] += 1
            if attempt_count["value"] == 1:
                msg = "Retryable error"
                raise CustomError(msg, retry_me=True)
            msg = "Non-retryable error"
            raise CustomError(msg, retry_me=False)

    def should_retry(exc: Exception) -> bool:
        return isinstance(exc, CustomError) and exc.retry_me

    model = CustomErrorModel()

    retry = ModelRetryMiddleware(
        max_retries=3,
        retry_on=should_retry,
        initial_delay=0.01,
        jitter=False,
        on_failure="continue",
    )

    agent = create_agent(
        model=model,
        tools=[],
        middleware=[retry],
        checkpointer=InMemorySaver(),
    )

    result = agent.invoke(
        {"messages": [HumanMessage("Hello")]},
        {"configurable": {"thread_id": "test"}},
    )

    ai_messages = [m for m in result["messages"] if isinstance(m, AIMessage)]
    assert len(ai_messages) >= 1

    # Should retry once (attempt 1 with retry_me=True), then fail on attempt 2 (retry_me=False)
    assert attempt_count["value"] == 2
    assert "2 attempts" in ai_messages[-1].content

Domain

Subdomains

Calls

Frequently Asked Questions

What does test_model_retry_custom_exception_filter() do?
test_model_retry_custom_exception_filter() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_model_retry.py.
Where is test_model_retry_custom_exception_filter() defined?
test_model_retry_custom_exception_filter() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_model_retry.py at line 322.
What does test_model_retry_custom_exception_filter() call?
test_model_retry_custom_exception_filter() calls 1 function(s): _generate.

Analyze Your Own Codebase

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

Try Supermodel Free