
    9iw                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZmZ ddlmZmZ ddlmZmZmZ dd	lmZ er&dd
lmZmZmZmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z& edddd	 	 	 	 	 	 	 	 	 	 	 d d       Z'e	 d!dddd	 	 	 	 	 	 	 	 	 	 	 d"d       Z'e	 d!dddd	 	 	 	 	 	 	 	 	 	 	 d#d       Z'	 d!dddd	 	 	 	 	 	 	 	 	 	 	 d$dZ'dd	 	 	 	 	 	 	 d%dZ(h dZ)d&dZ*d'dZ+ddd(dZ,d)dZ-dZ. G d deeef         Z/y)*z"Factory functions for chat models.    )annotationsN)util)TYPE_CHECKINGAnyLiteral	TypeAliascastoverload)BaseChatModelLanguageModelInput)	AIMessage
AnyMessage)RunnableRunnableConfigensure_config)override)AsyncIteratorCallableIteratorSequence)StreamEvent)BaseTool)RunLogRunLogPatch)	BaseModel)model_providerconfigurable_fieldsconfig_prefixc                    y N modelr   r   r   kwargss        d/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/langchain/chat_models/base.pyinit_chat_modelr&      s         _ConfigurableModelc                    y r    r!   r"   s        r%   r&   r&   "        r'   .c                    y r    r!   r"   s        r%   r&   r&   -   r*   r'   c                   | s|sd}|xs d}|r|st        j                  d|dd       |st        t        d|       fd|i|S | r| |d	<   |r||d<   t	        |||
      S )u".  Initialize a chat model from any supported provider using a unified interface.

    **Two main use cases:**

    1. **Fixed model** – specify the model upfront and get a ready-to-use chat model.
    2. **Configurable model** – choose to specify parameters (including model name) at
        runtime via `config`. Makes it easy to switch between models/providers without
        changing your code

    !!! note
        Requires the integration package for the chosen model provider to be installed.

        See the `model_provider` parameter below for specific package names
        (e.g., `pip install langchain-openai`).

        Refer to the [provider integration's API reference](https://docs.langchain.com/oss/python/integrations/providers)
        for supported model parameters to use as `**kwargs`.

    Args:
        model: The name or ID of the model, e.g. `'o3-mini'`, `'claude-sonnet-4-5-20250929'`.

            You can also specify model and model provider in a single argument using
            `'{model_provider}:{model}'` format, e.g. `'openai:o1'`.

            Will attempt to infer `model_provider` from model if not specified.

            The following providers will be inferred based on these model prefixes:

            - `gpt-...` | `o1...` | `o3...`       -> `openai`
            - `claude...`                         -> `anthropic`
            - `amazon...`                         -> `bedrock`
            - `gemini...`                         -> `google_vertexai`
            - `command...`                        -> `cohere`
            - `accounts/fireworks...`             -> `fireworks`
            - `mistral...`                        -> `mistralai`
            - `deepseek...`                       -> `deepseek`
            - `grok...`                           -> `xai`
            - `sonar...`                          -> `perplexity`
            - `solar...`                          -> `upstage`
        model_provider: The model provider if not specified as part of the model arg
            (see above).

            Supported `model_provider` values and the corresponding integration package
            are:

            - `openai`                  -> [`langchain-openai`](https://docs.langchain.com/oss/python/integrations/providers/openai)
            - `anthropic`               -> [`langchain-anthropic`](https://docs.langchain.com/oss/python/integrations/providers/anthropic)
            - `azure_openai`            -> [`langchain-openai`](https://docs.langchain.com/oss/python/integrations/providers/openai)
            - `azure_ai`                -> [`langchain-azure-ai`](https://docs.langchain.com/oss/python/integrations/providers/microsoft)
            - `google_vertexai`         -> [`langchain-google-vertexai`](https://docs.langchain.com/oss/python/integrations/providers/google)
            - `google_genai`            -> [`langchain-google-genai`](https://docs.langchain.com/oss/python/integrations/providers/google)
            - `bedrock`                 -> [`langchain-aws`](https://docs.langchain.com/oss/python/integrations/providers/aws)
            - `bedrock_converse`        -> [`langchain-aws`](https://docs.langchain.com/oss/python/integrations/providers/aws)
            - `cohere`                  -> [`langchain-cohere`](https://docs.langchain.com/oss/python/integrations/providers/cohere)
            - `fireworks`               -> [`langchain-fireworks`](https://docs.langchain.com/oss/python/integrations/providers/fireworks)
            - `together`                -> [`langchain-together`](https://docs.langchain.com/oss/python/integrations/providers/together)
            - `mistralai`               -> [`langchain-mistralai`](https://docs.langchain.com/oss/python/integrations/providers/mistralai)
            - `huggingface`             -> [`langchain-huggingface`](https://docs.langchain.com/oss/python/integrations/providers/huggingface)
            - `groq`                    -> [`langchain-groq`](https://docs.langchain.com/oss/python/integrations/providers/groq)
            - `ollama`                  -> [`langchain-ollama`](https://docs.langchain.com/oss/python/integrations/providers/ollama)
            - `google_anthropic_vertex` -> [`langchain-google-vertexai`](https://docs.langchain.com/oss/python/integrations/providers/google)
            - `deepseek`                -> [`langchain-deepseek`](https://docs.langchain.com/oss/python/integrations/providers/deepseek)
            - `ibm`                     -> [`langchain-ibm`](https://docs.langchain.com/oss/python/integrations/providers/ibm)
            - `nvidia`                  -> [`langchain-nvidia-ai-endpoints`](https://docs.langchain.com/oss/python/integrations/providers/nvidia)
            - `xai`                     -> [`langchain-xai`](https://docs.langchain.com/oss/python/integrations/providers/xai)
            - `perplexity`              -> [`langchain-perplexity`](https://docs.langchain.com/oss/python/integrations/providers/perplexity)
            - `upstage`                 -> [`langchain-upstage`](https://docs.langchain.com/oss/python/integrations/providers/upstage)

        configurable_fields: Which model parameters are configurable at runtime:

            - `None`: No configurable fields (i.e., a fixed model).
            - `'any'`: All fields are configurable. **See security note below.**
            - `list[str] | Tuple[str, ...]`: Specified fields are configurable.

            Fields are assumed to have `config_prefix` stripped if a `config_prefix` is
            specified.

            If `model` is specified, then defaults to `None`.

            If `model` is not specified, then defaults to `("model", "model_provider")`.

            !!! warning "Security note"

                Setting `configurable_fields="any"` means fields like `api_key`,
                `base_url`, etc., can be altered at runtime, potentially redirecting
                model requests to a different service/user.

                Make sure that if you're accepting untrusted configurations that you
                enumerate the `configurable_fields=(...)` explicitly.

        config_prefix: Optional prefix for configuration keys.

            Useful when you have multiple configurable models in the same application.

            If `'config_prefix'` is a non-empty string then `model` will be configurable
            at runtime via the `config["configurable"]["{config_prefix}_{param}"]` keys.
            See examples below.

            If `'config_prefix'` is an empty string then model will be configurable via
            `config["configurable"]["{param}"]`.
        **kwargs: Additional model-specific keyword args to pass to the underlying
            chat model's `__init__` method. Common parameters include:

            - `temperature`: Model temperature for controlling randomness.
            - `max_tokens`: Maximum number of output tokens.
            - `timeout`: Maximum time (in seconds) to wait for a response.
            - `max_retries`: Maximum number of retry attempts for failed requests.
            - `base_url`: Custom API endpoint URL.
            - `rate_limiter`: A
                [`BaseRateLimiter`][langchain_core.rate_limiters.BaseRateLimiter]
                instance to control request rate.

            Refer to the specific model provider's
            [integration reference](https://reference.langchain.com/python/integrations/)
            for all available parameters.

    Returns:
        A `BaseChatModel` corresponding to the `model_name` and `model_provider`
            specified if configurability is inferred to be `False`. If configurable, a
            chat model emulator that initializes the underlying model at runtime once a
            config is passed in.

    Raises:
        ValueError: If `model_provider` cannot be inferred or isn't supported.
        ImportError: If the model provider integration package is not installed.

    ???+ example "Initialize a non-configurable model"

        ```python
        # pip install langchain langchain-openai langchain-anthropic langchain-google-vertexai

        from langchain.chat_models import init_chat_model

        o3_mini = init_chat_model("openai:o3-mini", temperature=0)
        claude_sonnet = init_chat_model("anthropic:claude-sonnet-4-5-20250929", temperature=0)
        gemini_2-5_flash = init_chat_model("google_vertexai:gemini-2.5-flash", temperature=0)

        o3_mini.invoke("what's your name")
        claude_sonnet.invoke("what's your name")
        gemini_2-5_flash.invoke("what's your name")
        ```

    ??? example "Partially configurable model with no default"

        ```python
        # pip install langchain langchain-openai langchain-anthropic

        from langchain.chat_models import init_chat_model

        # (We don't need to specify configurable=True if a model isn't specified.)
        configurable_model = init_chat_model(temperature=0)

        configurable_model.invoke("what's your name", config={"configurable": {"model": "gpt-4o"}})
        # Use GPT-4o to generate the response

        configurable_model.invoke(
            "what's your name",
            config={"configurable": {"model": "claude-sonnet-4-5-20250929"}},
        )
        ```

    ??? example "Fully configurable model with a default"

        ```python
        # pip install langchain langchain-openai langchain-anthropic

        from langchain.chat_models import init_chat_model

        configurable_model_with_default = init_chat_model(
            "openai:gpt-4o",
            configurable_fields="any",  # This allows us to configure other params like temperature, max_tokens, etc at runtime.
            config_prefix="foo",
            temperature=0,
        )

        configurable_model_with_default.invoke("what's your name")
        # GPT-4o response with temperature 0 (as set in default)

        configurable_model_with_default.invoke(
            "what's your name",
            config={
                "configurable": {
                    "foo_model": "anthropic:claude-sonnet-4-5-20250929",
                    "foo_temperature": 0.6,
                }
            },
        )
        # Override default to use Sonnet 4.5 with temperature 0.6 to generate response
        ```

    ??? example "Bind tools to a configurable model"

        You can call any chat model declarative methods on a configurable model in the
        same way that you would with a normal model:

        ```python
        # pip install langchain langchain-openai langchain-anthropic

        from langchain.chat_models import init_chat_model
        from pydantic import BaseModel, Field


        class GetWeather(BaseModel):
            '''Get the current weather in a given location'''

            location: str = Field(..., description="The city and state, e.g. San Francisco, CA")


        class GetPopulation(BaseModel):
            '''Get the current population in a given location'''

            location: str = Field(..., description="The city and state, e.g. San Francisco, CA")


        configurable_model = init_chat_model(
            "gpt-4o", configurable_fields=("model", "model_provider"), temperature=0
        )

        configurable_model_with_tools = configurable_model.bind_tools(
            [
                GetWeather,
                GetPopulation,
            ]
        )
        configurable_model_with_tools.invoke(
            "Which city is hotter today and which is bigger: LA or NY?"
        )
        # Use GPT-4o

        configurable_model_with_tools.invoke(
            "Which city is hotter today and which is bigger: LA or NY?",
            config={"configurable": {"model": "claude-sonnet-4-5-20250929"}},
        )
        # Use Sonnet 4.5
        ```

    )r#   r    zconfig_prefix=z has been set but no fields are configurable. Set `configurable_fields=(...)` to specify the model params that are configurable.   )
stacklevelstrr   r#   )default_configr   r   )warningswarn_init_chat_model_helperr	   r(   r"   s        r%   r&   r&   ;   s    j ,9!'RM0}   		
 &
)
 
 	

 w#1 #/ r'   )r   c               p   t        | |      \  } }|dk(  rt        d       ddlm}  |dId| i|S |dk(  rt        d       ddlm}  |dId| i|S |d	k(  rt        d       dd
lm}  |dId| i|S |dk(  rt        d       ddlm}  |dId| i|S |dk(  rt        d       ddl	m
}  |dId| i|S |dk(  rt        d       ddlm}  |dId| i|S |dk(  rt        d       ddlm}	  |	dId| i|S |dk(  rt        d       ddlm}
  |
dId| i|S |dk(  r	 t        d       ddlm}  dId| i|S |dk(  rt        d       dd lm}  |dId| i|S |d!k(  rt        d"       dd#lm}  |dId| i|S |d$k(  rt        d%       dd&lm}  |dId'| i|S |d(k(  rt        d)       dd*lm}  |dId| i|S |d+k(  rt        d,       dd-lm}  |dId'| i|S |d.k(  rt        d,       dd/lm}  |dId| i|S |d0k(  rt        d       dd1l m!}  |dId| i|S |d2k(  rt        d3d45       dd6l"m#}  |dId| i|S |d7k(  rt        d8       dd9l$m%}  |dId| i|S |d:k(  rt        d;       dd<l&m'}  |dId'| i|S |d=k(  rt        d>       dd?l(m)}  |dId| i|S |d@k(  rt        dA       ddBl*m+}  |dId| i|S |dCk(  rt        dD       ddEl,m-}  |dId| i|S dFj]                  t^              }dG|dH| }ta        |      # t&        $ r1 	 t        d       ddlm} n# t&        $ r t        d       Y nw xY wY w xY w)JNopenailangchain_openair   )
ChatOpenAIr#   	anthropiclangchain_anthropic)ChatAnthropicazure_openai)AzureChatOpenAIazure_ailangchain_azure_ai)AzureAIChatCompletionsModelcoherelangchain_cohere)
ChatCoheregoogle_vertexailangchain_google_vertexai)ChatVertexAIgoogle_genailangchain_google_genai)ChatGoogleGenerativeAI	fireworkslangchain_fireworks)ChatFireworksollamalangchain_ollama)
ChatOllamalangchain_communitytogetherlangchain_together)ChatTogether	mistralailangchain_mistralai)ChatMistralAIhuggingfacelangchain_huggingface)ChatHuggingFacemodel_idgroqlangchain_groq)ChatGroqbedrocklangchain_aws)ChatBedrockbedrock_converse)ChatBedrockConversegoogle_anthropic_vertex)ChatAnthropicVertexdeepseeklangchain_deepseekzlangchain-deepseek	pkg_kebab)ChatDeepSeeknvidialangchain_nvidia_ai_endpoints)
ChatNVIDIAibmlangchain_ibm)ChatWatsonxxailangchain_xai)ChatXAI
perplexitylangchain_perplexity)ChatPerplexityupstagelangchain_upstage)ChatUpstagez, zUnsupported model_provider=z".

Supported model providers are: r!   )1_parse_model
_check_pkgr7   r8   r:   r;   r=   langchain_azure_ai.chat_modelsr@   rB   rC   rE   rF   rH   rI   rK   rL   rN   rO   ImportErrorlangchain_community.chat_modelsrR   rS   rU   rV   rX   rY   r\   r]   r_   r`   rb   &langchain_google_vertexai.model_gardenrd   rf   ri   rk   rl   rn   ro   rq   rr   rt   ru   rw   rx   join_SUPPORTED_PROVIDERS
ValueError)r#   r   r$   r8   r;   r=   r@   rC   rF   rI   rL   rO   rS   rV   rY   r]   r`   rb   rd   ri   rl   ro   rr   ru   rx   	supportedmsgs                              r%   r4   r4   L  s    )?E>!%&/0000$()5353F33'%&45U5f55#'(N*AA&AA!%&/0000**./:2%2622'+,A%<E<V<<$()5353F33!	/)*3 0000#'(32%2622$()5353F33&*+98888#$+.e.v.."?#-4E4V44++?#5"99&9922./N"99&99#'3GH32%2622!23<0000?#-4E4V44?#)-U-f--%)*74E4V44"&'111&11		./I())Mi[
YC
S/]  	//01F / -./	/s6   K; ;	L5LL5L.+L5-L..L54L5>   rm   rp   r[   rA   rM   r6   r^   rv   r>   re   rQ   r9   rJ   rT   rs   rW   r<   rG   rD   ra   rc   c                    t         fddD              ry j                  d      ry j                  d      ry j                  d      ry	 j                  d
      ry j                  d      ry j                  d      ry j                  d      ry j                  d      ry j                  d      ry j                  d      ryy )Nc              3  @   K   | ]  }j                  |        y wr    )
startswith).0pre
model_names     r%   	<genexpr>z0_attempt_infer_model_provider.<locals>.<genexpr>  s     
F#:  %
Fs   )zgpt-o1o3r6   clauder9   commandrA   zaccounts/fireworksrJ   geminirD   zamazon.r^   mistralrT   re   grokrp   sonarrs   solarrv   )anyr   )r   s   `r%   _attempt_infer_model_providerr     s    

F1E
FFX&Y'12X& Y'Y'Z(V$W%W%r'   c                <   |sUd| v rQ| j                  d      d   t        v r7| j                  d      d   }dj                  | j                  d      dd        } |xs t        |       }|sd| d}t	        |      |j                  dd      j                         }| |fS )N:r      z)Unable to infer model provider for model=z), please specify model_provider directly.-_)splitr   r   r   r   replacelower)r#   r   r   s      r%   ry   ry     s    cUlu{{3/?/BFZ/ZS)!,S)!"-.#K'DU'KN8%9bc 	 o#++C5;;=N.  r'   rg   c                   t        j                  |       s*||n| j                  dd      }d|  d| d}t        |      y )Nr   r   zUnable to import z&. Please install with `pip install -U `)r   	find_specr   r|   )pkgrh   r   s      r%   rz   rz     sK    >>#!*!6ICKKS<Q	!#&LYKWXY# r'   c                $    | j                  |      S r    )removeprefix)sprefixs     r%   _remove_prefixr     s    >>&!!r'   )
bind_toolswith_structured_outputc                  t    e Zd Zddddd	 	 	 	 	 	 	 	 	 d#dZd$dZd%d&dZd'd	Z	 d%	 	 	 	 	 d(d
Zed)d       Z	e
	 d%	 	 	 	 	 	 	 d*d       Ze
	 d%	 	 	 	 	 	 	 d*d       Ze
	 d%	 	 	 	 	 	 	 d+d       Ze
	 d%	 	 	 	 	 	 	 d,d       Z	 d%dd	 	 	 	 	 	 	 	 	 d- fdZ	 d%dd	 	 	 	 	 	 	 	 	 d- fdZ	 d%dd	 	 	 	 	 	 	 	 	 d. fdZ	 d%dd	 	 	 	 	 	 	 	 	 d/ fdZe
	 d%	 	 	 	 	 	 	 d0d       Ze
	 d%	 	 	 	 	 	 	 d1d       Ze	 d%ddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2d       Ze	 d%dddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d       Ze
	 d%ddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4d       Ze
	 d%dddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d        Z	 	 	 	 	 	 d6d!Z	 	 	 	 	 	 d7d"Z xZS )8r(   Nr   r-   r!   r1   r   r   queued_declarative_operationsc                   |xs i | _         |dk(  r|n
t        |      | _        |r|j                  d      s|dz   n|| _        t        |      | _        y )Nr   r   )_default_configlist_configurable_fieldsendswith_config_prefix_queued_declarative_operations)selfr1   r   r   r   s        r%   __init__z_ConfigurableModel.__init__   sh     &4%9r#6%#?TJ]E^ 	!
 ]%;%;C%@ C 	
 NR)N
+r'   c                     t         v r	d fd}|S  j                  r* j                         x}rt        |      rt	        |      S  d} j                  r|dz  }|dz  }t        |      )Nc                     t        j                        }|j                  | |f       t        t	        j
                        t        j                  t               rt        j                        nj                  j                  |      S )Nr   )	r   r   appendr(   dictr   
isinstancer   r   )argsr$   r   namer   s      r%   queuez-_ConfigurableModel.__getattr__.<locals>.queue<  s~    04771- .44dD&5IJ)#'(<(<#=!$";";TB )-T-F-F(G22"&"5"52O r'   z! is not a BaseChatModel attributez, and is not implemented on the default model.)r   r   r$   r   returnr(   )_DECLARATIVE_METHODSr   _modelhasattrgetattrAttributeError)r   r   r   r#   r   s   ``   r%   __getattr__z_ConfigurableModel.__getattr__5  s}    '' Ldkkm%;U%;PTAU5$''78AACs
S!!r'   c                    i | j                   | j                  |      }t        di |}| j                  D ]  \  }}} t	        ||      |i |} |S )Nr!   )r   _model_paramsr4   r   r   )r   configparamsr#   r   r   r$   s          r%   r   z_ConfigurableModel._modelS  sh    GD((GD,>,>v,FG'1&1"&"E"E 	:D$(GE4($9&9E	:r'   c                z   t        |      }|j                  di       j                         D ci c]7  \  }}|j                  | j                        rt        || j                        |9 }}}| j                  dk7  r2|j                         D ci c]  \  }}|| j                  v s|| }}}|S c c}}w c c}}w )Nconfigurabler   )r   getitemsr   r   r   r   )r   r   kvmodel_paramss        r%   r   z _ConfigurableModel._model_paramsZ  s    v& 

>26<<>
1||D//0 1d112A5
 

 $$--9-?-?-AdTQQ$JcJcEcAqDdLd
 es   <B1B7'B7c                |   t        di |xs i t        d|      }| j                  |      }|j                         D ci c]  \  }}|dk7  s|| }}}|j	                  di       j                         D ci c]   \  }}t        || j                        |vr||" c}}|d<   t        | j                        }|r|j                  ddd|if       t        i | j                  |t        | j                  t              rt        | j                        n| j                  | j                  |      S c c}}w c c}}w )z8Bind config to a `Runnable`, returning a new `Runnable`.r   r   with_configr!   r   r   )r   r	   r   r   r   r   r   r   r   r   r(   r   r   r   )r   r   r$   r   r   r   remaining_configr   s           r%   r   z_ConfigurableModel.with_confige  sF     S6<RSD9I64RS))&1-3\\^STQqN?RAqDSS 

>26<<>,
1a!4!45\I qD,
(
 )-T-P-P(Q%)00!/0 "Cd22ClC$33T: !%T%>%> ?**--*G
 	
 T,
s    D2D29%D8c                F    ddl m}m} t        |z  |z  t        t
           z  S )z'Get the input type for this `Runnable`.r   )ChatPromptValueConcreteStringPromptValue)langchain_core.prompt_valuesr   r   r0   r   r   )r   r   r   s      r%   	InputTypez_ConfigurableModel.InputType  s&     	\
 &&)@@4
CSSSr'   c                J     | j                  |      j                  |fd|i|S Nr   )r   invoker   inputr   r$   s       r%   r   z_ConfigurableModel.invoke  s*     *t{{6"))%II&IIr'   c                f   K    | j                  |      j                  |fd|i| d {   S 7 wr   )r   ainvoker   s       r%   r   z_ConfigurableModel.ainvoke  s4      1T[[(00PvPPPPPs   (1/1c              +  h   K    | j                  |      j                  |fd|i|E d {    y 7 wr   )r   streamr   s       r%   r   z_ConfigurableModel.stream  s1      .4;;v&--eMFMfMMM   (202c               x   K    | j                  |      j                  |fd|i|2 3 d {   }| 7 
6 y wr   )r   astreamr   r   r   r$   xs        r%   r   z_ConfigurableModel.astream  sE      3t{{6*225RR6R 	 	!G	R   %:868:8:F)return_exceptionsc                   |xs d }|t        |t              st        |      dk  r:t        |t              r|d   } | j	                  |      j
                  |f||d|S t        |   |f||d|S Nr   r   r   r   )r   r   lenr   r   batchsuperr   inputsr   r   r$   	__class__s        r%   r   z_ConfigurableModel.batch  s     4>Z5V9I&$',4;;v&,,"3 	  w}
/
 	
 	
r'   c                 K   |xs d }|t        |t              st        |      dk  rBt        |t              r|d   } | j	                  |      j
                  |f||d| d {   S t        |   |f||d| d {   S 7 7 wr   )r   r   r   r   r   abatchr   r   s        r%   r   z_ConfigurableModel.abatch  s      4>Z5V9I&$'3V,33"3 	   W^
/
 	
 
 	

s$   A$B'B(BB	B	Bc             +  2  K   |xs d }|t        |t              st        |      dk  rMt        |t              r|d   } | j	                  t        d|            j                  |f||d|E d {    y t        |   |f||d|E d {    y 7 !7 wNr   r   r   r   )r   r   r   r   r   r	   batch_as_completedr   r   s        r%   r   z%_ConfigurableModel.batch_as_completed  s      4>Z5V9I&$'Ut{{4(8&#ABUU"3 	   w1"3 	  s$   A.B1B2BBBBc              R  K   |xs d }|t        |t              st        |      dk  rSt        |t              r|d   } | j	                  t        d|            j                  |f||d|2 3 d {   }| t        |   |f||d|2 3 d {   }| 7 ,6 y 7 6 y wr   )r   r   r   r   r   r	   abatch_as_completedr   )r   r   r   r   r$   r   r   s         r%   r   z&_ConfigurableModel.abatch_as_completed	  s      4>Z5V9I&$'"4;;%v.!! "3   a  !76"3 	  a %  sN   A+B'.B!2B3B!6B'B%B#B%B'B!!B'#B%%B'c              +  h   K    | j                  |      j                  |fd|i|E d {    y 7 wr   )r   	transformr   s       r%   r   z_ConfigurableModel.transform*  s1      14;;v&00PvPPPPr   c               x   K    | j                  |      j                  |fd|i|2 3 d {   }| 7 
6 y wr   )r   
atransformr   s        r%   r   z_ConfigurableModel.atransform3  sE      6t{{6*55eUFUfU 	 	!G	Ur   T)diffwith_streamed_output_listinclude_namesinclude_typesinclude_tagsexclude_namesexclude_typesexclude_tagsc                    y r    r!   r   r   r   r   r   r   r   r   r  r  r  r$   s               r%   astream_logz_ConfigurableModel.astream_log=  s     &)r'   )r   r   r   r   r  r  r  c                    y r    r!   r  s               r%   r  z_ConfigurableModel.astream_logN  s     !$r'   c                 K    | j                  |      j                  |f|||||||
|	|d	|2 3 d {   }| 7 
6 y w)N)	r   r   r   r   r   r   r  r  r  )r   r  )r   r   r   r   r   r   r   r   r  r  r  r$   r   s                r%   r  z_ConfigurableModel.astream_log_  sl       7t{{6*66
&?''%%''
 
 	 	! G	 
s#   -AA >A AA  Av2)versionr   r   r   r  r  r  c                 K    | j                  |      j                  |f||||||	||d|
2 3 d {   }| 7 
6 y w)N)r   r
  r   r   r   r  r  r  )r   astream_events)r   r   r   r
  r   r   r   r  r  r  r$   r   s               r%   r  z!_ConfigurableModel.astream_events~  si      :t{{6*99
''%%''
 
 	 	! G	 
s   ,A?=?A?Ac                2     | j                  d      |fi |S )Nr   r   )r   toolsr$   s      r%   r   z_ConfigurableModel.bind_tools  s!    
 .t-e>v>>r'   c                2     | j                  d      |fi |S )Nr   r  )r   schemar$   s      r%   r   z)_ConfigurableModel.with_structured_output  s"    
 :t 89&KFKKr'   )
r1   zdict | Noner   ,Literal['any'] | list[str] | tuple[str, ...]r   r0   r   z!Sequence[tuple[str, tuple, dict]]r   None)r   r0   r   r   r    )r   RunnableConfig | Noner   r   )r   r  r   r   )r   r  r$   r   r   r(   )r   r   )r   r   r   r  r$   r   r   r   )r   r   r   r  r$   
Any | Noner   Iterator[Any])r   r   r   r  r$   r  r   AsyncIterator[Any])
r   zlist[LanguageModelInput]r   z,RunnableConfig | list[RunnableConfig] | Noner   boolr$   r  r   z	list[Any])
r   Sequence[LanguageModelInput]r   0RunnableConfig | Sequence[RunnableConfig] | Noner   r  r$   r   r   z%Iterator[tuple[int, Any | Exception]])
r   r  r   r  r   r  r$   r   r   zAsyncIterator[tuple[int, Any]])r   zIterator[LanguageModelInput]r   r  r$   r  r   r  )r   z!AsyncIterator[LanguageModelInput]r   r  r$   r  r   r  )r   r   r   r  r   zLiteral[True]r   r  r   Sequence[str] | Noner   r  r   r  r  r  r  r  r  r  r$   r   r   zAsyncIterator[RunLogPatch])r   r   r   r  r   zLiteral[False]r   r  r   r  r   r  r   r  r  r  r  r  r  r  r$   r   r   zAsyncIterator[RunLog])r   r   r   r  r   r  r   r  r   r  r   r  r   r  r  r  r  r  r  r  r$   r   r   z2AsyncIterator[RunLogPatch] | AsyncIterator[RunLog])r   r   r   r  r
  zLiteral['v1', 'v2']r   r  r   r  r   r  r  r  r  r  r  r  r$   r   r   zAsyncIterator[StreamEvent])r  z@Sequence[dict[str, Any] | type[BaseModel] | Callable | BaseTool]r$   r   r   z'Runnable[LanguageModelInput, AIMessage])r  zdict | type[BaseModel]r$   r   r   z.Runnable[LanguageModelInput, dict | BaseModel])__name__
__module____qualname__r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r
   r  r  r   r   __classcell__)r   s   @r%   r(   r(     s2    '+LQKM
 $
 J	

 
 (I
 

*"<	 )-
%
 
 
	
@ T T  )-J!J &J 	J
 
J J  )-Q!Q &Q 	Q
 
Q Q  )-N!N &N 	N
 
N N  )-! & 	
 
  @D

 #(
(
 =

  
 
 

> @D

 #(
(
 =

  
 
 

> DH
 #(, A
    
/@ DH
 #(, A
    
(B  )-Q+Q &Q 	Q
 
Q Q  )-0 & 	
 
   )-)
 #*..2.2-1.2.2-1)) &)
 ) $() ,) ,) +) ,) ,) +) ) 
$) )   )-$ +/.2.2-1.2.2-1$$ &$
 $ $($ ,$ ,$ +$ ,$ ,$ +$ $ 
$ $   )-
 *..2.2-1.2.2-1 &
  $( , , + , , +  
< <  )-
 (,.2.2-1.2.2-1 &
 % , , + , , +  
$ :?O? ? 
1	?L&L L 
8	Lr'   )r#   r0   r   
str | Noner   r  r   r!  r$   r   r   r   r    )r#   r  r   r!  r   r  r   r!  r$   r   r   r(   )r#   r!  r   r!  r   r  r   r!  r$   r   r   r(   )r#   r!  r   r!  r   z3Literal['any'] | list[str] | tuple[str, ...] | Noner   r!  r$   r   r   z"BaseChatModel | _ConfigurableModel)r#   r0   r   r!  r$   r   r   r   )r   r0   r   r!  )r#   r0   r   r!  r   ztuple[str, str])r   r0   rh   r!  r   r  )r   r0   r   r0   r   r0   )0__doc__
__future__r   r2   	importlibr   typingr   r   r   r   r	   r
   langchain_core.language_modelsr   r   langchain_core.messagesr   r   langchain_core.runnablesr   r   r   typing_extensionsr   collections.abcr   r   r   r   langchain_core.runnables.schemar   langchain_core.toolsr   langchain_core.tracersr   r   pydanticr   r&   r4   r   r   ry   rz   r   r   r(   r!   r'   r%   <module>r/     s0   ( "   I I L 9 L L &KK;-:" 
 "& $ $  	
    
 
 "& $ $  	
    
 
 "&HK $  F	
    
 N "&OS $NN N M	N
 N N (Nh "&AA A 	A
 AH 24! 59 " @ JL"4c"9: JLr'   