ModelFallbackMiddleware Class — langchain Architecture
Architecture documentation for the ModelFallbackMiddleware class in model_fallback.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD eb36575f_ada3_a10f_f140_390f57f60565["ModelFallbackMiddleware"] 66325212_2762_82c6_b317_a5ec6547806c["model_fallback.py"] eb36575f_ada3_a10f_f140_390f57f60565 -->|defined in| 66325212_2762_82c6_b317_a5ec6547806c 82058868_f4c5_706a_3b45_4fe9fd5ab6cf["__init__()"] eb36575f_ada3_a10f_f140_390f57f60565 -->|method| 82058868_f4c5_706a_3b45_4fe9fd5ab6cf 33aebc2c_08b3_3401_6d19_c055a215c08c["wrap_model_call()"] eb36575f_ada3_a10f_f140_390f57f60565 -->|method| 33aebc2c_08b3_3401_6d19_c055a215c08c 6630279e_384e_3d22_e9c0_6389279280ff["awrap_model_call()"] eb36575f_ada3_a10f_f140_390f57f60565 -->|method| 6630279e_384e_3d22_e9c0_6389279280ff
Relationship Graph
Source Code
libs/langchain_v1/langchain/agents/middleware/model_fallback.py lines 24–138
class ModelFallbackMiddleware(AgentMiddleware[AgentState[ResponseT], ContextT, ResponseT]):
"""Automatic fallback to alternative models on errors.
Retries failed model calls with alternative models in sequence until
success or all models exhausted. Primary model specified in `create_agent`.
Example:
```python
from langchain.agents.middleware.model_fallback import ModelFallbackMiddleware
from langchain.agents import create_agent
fallback = ModelFallbackMiddleware(
"openai:gpt-4o-mini", # Try first on error
"anthropic:claude-sonnet-4-5-20250929", # Then this
)
agent = create_agent(
model="openai:gpt-4o", # Primary model
middleware=[fallback],
)
# If primary fails: tries gpt-4o-mini, then claude-sonnet-4-5-20250929
result = await agent.invoke({"messages": [HumanMessage("Hello")]})
```
"""
def __init__(
self,
first_model: str | BaseChatModel,
*additional_models: str | BaseChatModel,
) -> None:
"""Initialize model fallback middleware.
Args:
first_model: First fallback model (string name or instance).
*additional_models: Additional fallbacks in order.
"""
super().__init__()
# Initialize all fallback models
all_models = (first_model, *additional_models)
self.models: list[BaseChatModel] = []
for model in all_models:
if isinstance(model, str):
self.models.append(init_chat_model(model))
else:
self.models.append(model)
def wrap_model_call(
self,
request: ModelRequest[ContextT],
handler: Callable[[ModelRequest[ContextT]], ModelResponse[ResponseT]],
) -> ModelResponse[ResponseT] | AIMessage:
"""Try fallback models in sequence on errors.
Args:
request: Initial model request.
handler: Callback to execute the model.
Returns:
AIMessage from successful model call.
Raises:
Exception: If all models fail, re-raises last exception.
"""
# Try primary model first
last_exception: Exception
try:
return handler(request)
except Exception as e:
last_exception = e
# Try fallback models
for fallback_model in self.models:
try:
return handler(request.override(model=fallback_model))
except Exception as e:
last_exception = e
continue
raise last_exception
Source
Frequently Asked Questions
What is the ModelFallbackMiddleware class?
ModelFallbackMiddleware is a class in the langchain codebase, defined in libs/langchain_v1/langchain/agents/middleware/model_fallback.py.
Where is ModelFallbackMiddleware defined?
ModelFallbackMiddleware is defined in libs/langchain_v1/langchain/agents/middleware/model_fallback.py at line 24.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free