
    OKi                        S r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
Jr  SSKJr  \(       a  SSKJrJr  SSKJr  SSKJr   " S	 S
\\\   \\4   5      rg)z%Model fallback middleware for agents.    )annotations)TYPE_CHECKING)AgentMiddleware
AgentStateContextTModelRequestModelResponse	ResponseT)init_chat_model)	AwaitableCallable)BaseChatModel)	AIMessagec                  h   ^  \ rS rSrSr      SU 4S jjr      SS jr      S	S jrSrU =r	$ )
ModelFallbackMiddleware   a
  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")]})
    ```
c                   > [         TU ]  5         U/UQ7n/ U l        U HY  n[        U[        5      (       a&  U R                  R                  [        U5      5        M>  U R                  R                  U5        M[     g)zInitialize model fallback middleware.

Args:
    first_model: First fallback model (string name or instance).
    *additional_models: Additional fallbacks in order.
N)super__init__models
isinstancestrappendr   )selffirst_modeladditional_models
all_modelsmodel	__class__s        l/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langchain/agents/middleware/model_fallback.pyr    ModelFallbackMiddleware.__init__2   sg     	 "6$56
+-E%%%""?5#9:""5)	      c                     U" U5      $ ! [          a  nUn SnAOSnAff = fU R                   H3  n U" UR                  US95      s  $ ! [          a  nUn SnAM-  SnAff = f   Ue)zTry 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.
Nr   	Exceptionr   overrider   requesthandlerelast_exceptionfallback_models         r    wrap_model_call'ModelFallbackMiddleware.wrap_model_callH   su    &	7## 	N	 #kkNw//n/EFF !" * s'   
 
  A


A!AA!c                   #     U" U5      I Sh  vN $  N! [          a  nUn SnAOSnAff = fU R                   H<  n U" UR                  US95      I Sh  vN  s  $ ! [          a  nUn SnAM6  SnAff = f   Ue7f)a  Try fallback models in sequence on errors (async version).

Args:
    request: Initial model request.
    handler: Async callback to execute the model.

Returns:
    AIMessage from successful model call.

Raises:
    Exception: If all models fail, re-raises last exception.
Nr$   r%   r(   s         r    awrap_model_call(ModelFallbackMiddleware.awrap_model_callj   s     &	 )))) 	N	 #kkN$W%5%5N%5%KLLLL !" * se   A=  A= 
,'A=,A=AAAA=
A6)A1+A=1A66A=)r   )r   str | BaseChatModelr   r3   returnNone)r)   ModelRequest[ContextT]r*   z<Callable[[ModelRequest[ContextT]], ModelResponse[ResponseT]]r4   $ModelResponse[ResponseT] | AIMessage)r)   r6   r*   zGCallable[[ModelRequest[ContextT]], Awaitable[ModelResponse[ResponseT]]]r4   r7   )
__name__
__module____qualname____firstlineno____doc__r   r.   r1   __static_attributes____classcell__)r   s   @r    r   r      ss    2*(* 0* 
	*, '  N  
.	 D '  Y  
.	   r"   r   N)r<   
__future__r   typingr   !langchain.agents.middleware.typesr   r   r   r   r	   r
   langchain.chat_modelsr   collections.abcr   r   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r    r"   r    <module>rG      sH    + "    23H1roj.CXy.XY rr"   