Home / Class/ TestErrorHandling Class — langchain Architecture

TestErrorHandling Class — langchain Architecture

Architecture documentation for the TestErrorHandling class in test_wrap_model_call.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c["TestErrorHandling"]
  0f829642_e361_67a1_cbca_f82839bbbd31["GenericFakeChatModel"]
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c -->|extends| 0f829642_e361_67a1_cbca_f82839bbbd31
  949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e["AgentMiddleware"]
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c -->|extends| 949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e
  573473e5_eb93_a7d7_84ba_c975071c09af["test_wrap_model_call.py"]
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c -->|defined in| 573473e5_eb93_a7d7_84ba_c975071c09af
  1ddb5742_9c97_c187_6417_15b8741aa77f["test_convert_error_to_response()"]
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c -->|method| 1ddb5742_9c97_c187_6417_15b8741aa77f
  0cd07b8b_eafe_5ebf_f9e4_b52d74309f5f["test_selective_error_handling()"]
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c -->|method| 0cd07b8b_eafe_5ebf_f9e4_b52d74309f5f
  512d51dd_0a96_1808_db39_6bbbb81c54a5["test_error_handling_with_success_path()"]
  af226bc7_9003_a498_4aba_5a5b0a9f8c0c -->|method| 512d51dd_0a96_1808_db39_6bbbb81c54a5

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py lines 374–493

class TestErrorHandling:
    """Test error handling with wrap_model_call."""

    def test_convert_error_to_response(self) -> None:
        """Test middleware that converts errors to successful responses."""

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

        class ErrorToSuccessMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                try:
                    return handler(request)
                except Exception as e:
                    return AIMessage(content=f"Error occurred: {e}. Using fallback response.")

        model = AlwaysFailModel(messages=iter([]))
        agent = create_agent(model=model, middleware=[ErrorToSuccessMiddleware()])

        # Should not raise, middleware converts error to response
        result = agent.invoke({"messages": [HumanMessage("Test")]})

        assert "Error occurred" in result["messages"][1].content
        assert "fallback response" in result["messages"][1].content

    def test_selective_error_handling(self) -> None:
        """Test middleware that only handles specific errors."""

        class SpecificErrorModel(GenericFakeChatModel):
            @override
            def _generate(
                self,
                messages: list[BaseMessage],
                stop: list[str] | None = None,
                run_manager: CallbackManagerForLLMRun | None = None,
                **kwargs: Any,
            ) -> ChatResult:
                msg = "Network error"
                raise ConnectionError(msg)

        class SelectiveErrorMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                try:
                    return handler(request)
                except ConnectionError:
                    return AIMessage(content="Network issue, try again later")

        model = SpecificErrorModel(messages=iter([]))
        agent = create_agent(model=model, middleware=[SelectiveErrorMiddleware()])

        result = agent.invoke({"messages": [HumanMessage("Test")]})

        assert result["messages"][1].content == "Network issue, try again later"

    def test_error_handling_with_success_path(self) -> None:
        """Test that error handling middleware works correctly on both success and error paths."""
        call_log = []

        class ErrorRecoveryMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:

Frequently Asked Questions

What is the TestErrorHandling class?
TestErrorHandling is a class in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py.
Where is TestErrorHandling defined?
TestErrorHandling is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py at line 374.
What does TestErrorHandling extend?
TestErrorHandling extends GenericFakeChatModel, AgentMiddleware.

Analyze Your Own Codebase

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

Try Supermodel Free