Home / Class/ TestShortCircuit Class — langchain Architecture

TestShortCircuit Class — langchain Architecture

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

Entity Profile

Dependency Diagram

graph TD
  e65ae53d_1f12_d0c5_97fd_2d688ea38311["TestShortCircuit"]
  949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e["AgentMiddleware"]
  e65ae53d_1f12_d0c5_97fd_2d688ea38311 -->|extends| 949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e
  0f829642_e361_67a1_cbca_f82839bbbd31["GenericFakeChatModel"]
  e65ae53d_1f12_d0c5_97fd_2d688ea38311 -->|extends| 0f829642_e361_67a1_cbca_f82839bbbd31
  573473e5_eb93_a7d7_84ba_c975071c09af["test_wrap_model_call.py"]
  e65ae53d_1f12_d0c5_97fd_2d688ea38311 -->|defined in| 573473e5_eb93_a7d7_84ba_c975071c09af
  7844b1b1_45ba_f97d_a3c3_a65b2fc62b6d["test_cache_short_circuit()"]
  e65ae53d_1f12_d0c5_97fd_2d688ea38311 -->|method| 7844b1b1_45ba_f97d_a3c3_a65b2fc62b6d

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py lines 496–556

class TestShortCircuit:
    """Test short-circuit patterns with wrap_model_call."""

    def test_cache_short_circuit(self) -> None:
        """Test middleware that short-circuits with cached response."""
        cache: dict[str, ModelResponse] = {}
        model_calls = []

        class CachingMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                # Simple cache key based on last message
                cache_key = str(request.messages[-1].content) if request.messages else ""

                if cache_key in cache:
                    # Short-circuit with cached result
                    return cache[cache_key]
                # Execute and cache
                result = handler(request)
                cache[cache_key] = result
                return result

        class TrackingModel(GenericFakeChatModel):
            @override
            def _generate(
                self,
                messages: list[BaseMessage],
                stop: list[str] | None = None,
                run_manager: CallbackManagerForLLMRun | None = None,
                **kwargs: Any,
            ) -> ChatResult:
                model_calls.append(len(messages))
                return super()._generate(messages, **kwargs)

        model = TrackingModel(
            messages=iter(
                [
                    AIMessage(content="Response 1"),
                    AIMessage(content="Response 2"),
                ]
            )
        )
        agent = create_agent(model=model, middleware=[CachingMiddleware()])

        # First call - cache miss, calls model
        result1 = agent.invoke({"messages": [HumanMessage("Hello")]})
        assert result1["messages"][1].content == "Response 1"
        assert len(model_calls) == 1

        # Second call with same message - cache hit, doesn't call model
        result2 = agent.invoke({"messages": [HumanMessage("Hello")]})
        assert result2["messages"][1].content == "Response 1"
        assert len(model_calls) == 1  # Still 1, no new call

        # Third call with different message - cache miss, calls model
        result3 = agent.invoke({"messages": [HumanMessage("Goodbye")]})
        assert result3["messages"][1].content == "Response 2"
        assert len(model_calls) == 2  # New call

Frequently Asked Questions

What is the TestShortCircuit class?
TestShortCircuit 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 TestShortCircuit defined?
TestShortCircuit is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py at line 496.
What does TestShortCircuit extend?
TestShortCircuit extends AgentMiddleware, GenericFakeChatModel.

Analyze Your Own Codebase

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

Try Supermodel Free