Home / File/ test_model_fallback.py — langchain Source File

test_model_fallback.py — langchain Source File

Architecture documentation for test_model_fallback.py, a python file in the langchain codebase. 14 imports, 0 dependents.

File python CoreAbstractions RunnableInterface 14 imports 15 functions 7 classes

Entity Profile

Dependency Diagram

graph LR
  54d3e80d_3a3d_b641_2ca1_68c1901ff893["test_model_fallback.py"]
  0c635125_6987_b8b3_7ff7_d60249aecde7["warnings"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 0c635125_6987_b8b3_7ff7_d60249aecde7
  8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3
  120e2591_3e15_b895_72b6_cb26195e40a6["pytest"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 120e2591_3e15_b895_72b6_cb26195e40a6
  2312f229_c199_ac88_c29f_62e2a2958404["langchain_core.language_models.chat_models"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 2312f229_c199_ac88_c29f_62e2a2958404
  833aeadc_c3e9_bfcf_db07_ecb37ad3ba24["langchain_core.language_models.fake_chat_models"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 833aeadc_c3e9_bfcf_db07_ecb37ad3ba24
  d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> d758344f_537f_649e_f467_b9d7442e86df
  ac2a9b92_4484_491e_1b48_ec85e71e1d58["langchain_core.outputs"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> ac2a9b92_4484_491e_1b48_ec85e71e1d58
  91721f45_4909_e489_8c1f_084f8bd87145["typing_extensions"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 91721f45_4909_e489_8c1f_084f8bd87145
  6f5e6c4b_1a3f_fd09_4697_631c27ef1033["langchain.agents.factory"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 6f5e6c4b_1a3f_fd09_4697_631c27ef1033
  5b95b7f6_0c1e_38fa_c3ec_39187b7b580e["langchain.agents.middleware.model_fallback"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 5b95b7f6_0c1e_38fa_c3ec_39187b7b580e
  50acc543_e5f0_2162_cf07_c2bf50723e0c["langchain.agents.middleware.types"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 50acc543_e5f0_2162_cf07_c2bf50723e0c
  d135b586_15fc_7b4a_47fb_a8b2bcda78a5["tests.unit_tests.agents.model"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> d135b586_15fc_7b4a_47fb_a8b2bcda78a5
  f3bc7443_c889_119d_0744_aacc3620d8d2["langchain_core.callbacks"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> f3bc7443_c889_119d_0744_aacc3620d8d2
  5dbfd558_f2f2_9663_3a3f_c317926ac1c1["langgraph.runtime"]
  54d3e80d_3a3d_b641_2ca1_68c1901ff893 --> 5dbfd558_f2f2_9663_3a3f_c317926ac1c1
  style 54d3e80d_3a3d_b641_2ca1_68c1901ff893 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Unit tests for ModelFallbackMiddleware."""

from __future__ import annotations

import warnings
from typing import TYPE_CHECKING, Any, cast

import pytest
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.language_models.fake_chat_models import GenericFakeChatModel
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage
from langchain_core.outputs import ChatGeneration, ChatResult
from typing_extensions import override

from langchain.agents.factory import create_agent
from langchain.agents.middleware.model_fallback import ModelFallbackMiddleware
from langchain.agents.middleware.types import AgentState, ModelRequest, ModelResponse
from tests.unit_tests.agents.model import FakeToolCallingModel

if TYPE_CHECKING:
    from langchain_core.callbacks import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
    from langgraph.runtime import Runtime


def _fake_runtime() -> Runtime:
    return cast("Runtime", object())


def _make_request() -> ModelRequest:
    """Create a minimal ModelRequest for testing."""
    model = GenericFakeChatModel(messages=iter([AIMessage(content="primary")]))
    return ModelRequest(
        model=model,
        system_prompt=None,
        messages=[],
        tool_choice=None,
        tools=[],
        response_format=None,
        state=AgentState(messages=[]),
        runtime=_fake_runtime(),
        model_settings={},
    )


def test_primary_model_succeeds() -> None:
    """Test that primary model is used when it succeeds."""
    primary_model = GenericFakeChatModel(messages=iter([AIMessage(content="primary response")]))
    fallback_model = GenericFakeChatModel(messages=iter([AIMessage(content="fallback response")]))

    middleware = ModelFallbackMiddleware(fallback_model)
    request = _make_request()
    request = request.override(model=primary_model)

    def mock_handler(req: ModelRequest) -> ModelResponse:
        # Simulate successful model call
        result = req.model.invoke([])
        return ModelResponse(result=[result])

    response = middleware.wrap_model_call(request, mock_handler)

// ... (367 more lines)

Subdomains

Dependencies

  • langchain.agents.factory
  • langchain.agents.middleware.model_fallback
  • langchain.agents.middleware.types
  • langchain_core.callbacks
  • langchain_core.language_models.chat_models
  • langchain_core.language_models.fake_chat_models
  • langchain_core.messages
  • langchain_core.outputs
  • langgraph.runtime
  • pytest
  • tests.unit_tests.agents.model
  • typing
  • typing_extensions
  • warnings

Frequently Asked Questions

What does test_model_fallback.py do?
test_model_fallback.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, RunnableInterface subdomain.
What functions are defined in test_model_fallback.py?
test_model_fallback.py defines 15 function(s): _fake_runtime, _make_request, langchain_core, test_all_models_fail, test_all_models_fail_async, test_fallback_on_primary_failure, test_fallback_on_primary_failure_async, test_model_fallback_middleware_exhausted_with_agent, test_model_fallback_middleware_initialization, test_model_fallback_middleware_with_agent, and 5 more.
What does test_model_fallback.py depend on?
test_model_fallback.py imports 14 module(s): langchain.agents.factory, langchain.agents.middleware.model_fallback, langchain.agents.middleware.types, langchain_core.callbacks, langchain_core.language_models.chat_models, langchain_core.language_models.fake_chat_models, langchain_core.messages, langchain_core.outputs, and 6 more.
Where is test_model_fallback.py in the architecture?
test_model_fallback.py is located at libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_model_fallback.py (domain: CoreAbstractions, subdomain: RunnableInterface, directory: libs/langchain_v1/tests/unit_tests/agents/middleware/implementations).

Analyze Your Own Codebase

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

Try Supermodel Free