Home / Function/ test_max_attempts_limit() — langchain Function Reference

test_max_attempts_limit() — langchain Function Reference

Architecture documentation for the test_max_attempts_limit() function in test_wrap_model_call.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  52bf1393_d286_3c4e_02bb_ad254af71470["test_max_attempts_limit()"]
  1c3bae87_d793_bb0b_1a39_594b67feb9d4["TestRetryLogic"]
  52bf1393_d286_3c4e_02bb_ad254af71470 -->|defined in| 1c3bae87_d793_bb0b_1a39_594b67feb9d4
  0c6a77a0_b896_2b90_e50b_5498727d67ab["_llm_type()"]
  52bf1393_d286_3c4e_02bb_ad254af71470 -->|calls| 0c6a77a0_b896_2b90_e50b_5498727d67ab
  style 52bf1393_d286_3c4e_02bb_ad254af71470 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py lines 235–293

    def test_max_attempts_limit(self) -> None:
        """Test that middleware controls termination via retry limits."""

        class AlwaysFailingModel(BaseChatModel):
            """Model that always fails."""

            @override
            def _generate(
                self,
                messages: list[BaseMessage],
                stop: list[str] | None = None,
                run_manager: CallbackManagerForLLMRun | None = None,
                **kwargs: Any,
            ) -> ChatResult:
                msg = "Always fails"
                raise ValueError(msg)

            @property
            def _llm_type(self) -> str:
                return "always_failing"

        class LimitedRetryMiddleware(AgentMiddleware):
            """Middleware that limits its own retries."""

            def __init__(self, max_retries: int = 10):
                super().__init__()
                self.max_retries = max_retries
                self.attempt_count = 0

            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                last_exception = None
                for _attempt in range(self.max_retries):
                    self.attempt_count += 1
                    try:
                        return handler(request)
                    except Exception as e:
                        last_exception = e
                        # Continue to retry

                # All retries exhausted, re-raise the last error
                if last_exception:
                    raise last_exception
                pytest.fail("Should have raised an exception")

        model = AlwaysFailingModel()
        middleware = LimitedRetryMiddleware(max_retries=10)

        agent = create_agent(model=model, middleware=[middleware])

        # Should fail with the model's error after middleware stops retrying
        with pytest.raises(ValueError, match="Always fails"):
            agent.invoke({"messages": [HumanMessage("Test")]})

        # Should have attempted exactly 10 times as configured
        assert middleware.attempt_count == 10

Domain

Subdomains

Calls

Frequently Asked Questions

What does test_max_attempts_limit() do?
test_max_attempts_limit() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py.
Where is test_max_attempts_limit() defined?
test_max_attempts_limit() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py at line 235.
What does test_max_attempts_limit() call?
test_max_attempts_limit() calls 1 function(s): _llm_type.

Analyze Your Own Codebase

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

Try Supermodel Free