
    3fi                       d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZmZ d dl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 d dl m!Z! d dl"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( g d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Z0 G d deeef         Z1y))    )annotationsN)AsyncIteratorCallableIteratorSequence)util)AnyLiteral	TypeAliascastoverload)BaseChatModelLanguageModelInputSimpleChatModel)agenerate_from_streamgenerate_from_stream)	AIMessage
AnyMessage)RunnableRunnableConfigensure_config)StreamEvent)BaseTool)RunLogRunLogPatch)	BaseModel)override)r   r   r   r   init_chat_model)model_providerconfigurable_fieldsconfig_prefixc                    y N modelr   r    r!   kwargss        `/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/chat_models/base.pyr   r   #   s         _ConfigurableModelc                    y r#   r$   r%   s        r(   r   r   .        r)   .c                    y r#   r$   r%   s        r(   r   r   9   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1  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 back 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`
        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)
        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`][langchain_core.language_models.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_classic.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_classic.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_classic.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_classic.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
        ```

    !!! warning "Behavior changed in `langchain` 0.2.8"

        Support for `configurable_fields` and `config_prefix` added.

    !!! warning "Behavior changed in `langchain` 0.2.12"

        Support for Ollama via langchain-ollama package added
        (`langchain_ollama.ChatOllama`). Previously,
        the now-deprecated langchain-community version of Ollama was imported
        (`langchain_community.chat_models.ChatOllama`).

        Support for AWS Bedrock models via the Converse API added
        (`model_provider="bedrock_converse"`).

    !!! warning "Behavior changed in `langchain` 0.3.5"

        Out of beta.

    !!! warning "Behavior changed in `langchain` 0.3.19"

        Support for Deepseek, IBM, Nvidia, and xAI models added.

    )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   G   s    b ,9!'RM0}   		
 &
)
 
 	

 w#1 #/ r)   )r   c                  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}  |j6                  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| }tc        |      # 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)ChatUpstage, zUnsupported model_provider=z".

Supported model providers are: r$   )2_parse_model
_check_pkgr9   r:   r<   r=   r?   langchain_azure_ai.chat_modelsrB   rD   rE   rG   rH   rJ   rK   rM   rN   rP   rQ   ImportErrorlangchain_community.chat_modelsrT   rU   rW   rX   rZ   r[   from_model_idr^   r_   ra   rb   rd   &langchain_google_vertexai.model_gardenrf   rh   rk   rm   rn   rp   rq   rs   rt   rv   rw   ry   rz   join_SUPPORTED_PROVIDERS
ValueError)r&   r   r'   r:   r=   r?   rB   rE   rH   rK   rN   rQ   rU   rX   r[   r_   rb   rd   rf   rk   rn   rq   rt   rw   rz   	supportedmsgs                              r(   r6   r6   t  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,,,FeFvFF#$+.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
&~''KI;W  S/g  	//01F / -./	/s6   L 	L?L! L?!L85L?7L88L?>L?>   ro   rr   r]   rC   rO   r8   r`   rx   r@   rg   rS   r;   rL   rV   ru   rY   r>   rI   rF   rc   re   c                   | j                         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      s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)zAttempt to infer model provider from model name.

    Args:
        model_name: The name of the model to infer provider for.

    Returns:
        The inferred provider name, or `None` if no provider could be inferred.
    c              3  @   K   | ]  }j                  |        y wr#   )
startswith).0premodel_lowers     r(   	<genexpr>z0_attempt_infer_model_provider.<locals>.<genexpr>"  s$      	 	s#	s   )zgpt-o1o3chatgptztext-davincir8   clauder;   commandrC   zaccounts/fireworksrL   geminirF   zamazon.)z
anthropic.zmeta.r`   )mistralmixtralrV   rg   grokrr   sonarru   solarrx   N)loweranyr   )
model_namer   s    @r(   _attempt_infer_model_providerr     s    ""$K  	
	 	  h' i( 12 h'  Y';+A+A,  45 j) f% g& g&r)   c                B   |s7d| v r3| j                  dd      \  }}|t        v r|}|} nt        |      }|r|}|} |xs t        |       }|s2dj                  t	        t                    }d| d| d}t        |      |j                  dd      j                         }| |fS )	z?Parse model name and provider, inferring provider if necessary.:   r{   z)Unable to infer model provider for model=zB. Please specify 'model_provider' directly.

Supported providers: ze

For help with specific providers, see: https://docs.langchain.com/oss/python/integrations/providers-_)splitr   r   r   sortedr   replacer   )r&   r   prefixsuffixinferredsupported_listr   s          r(   r|   r|   [  s    cUlS!,))#NE4V<H!)#K'DU'KN6*>#?@8% :$$2#3 4KL 	 o $++C5;;=N.  r)   ri   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   )pkgrj   r   s      r(   r}   r}   y  sP    >>#!*!6ICKKS<Q	u$J9+UVW 	 # r)   )
bind_toolswith_structured_outputc                  ~    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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$   r3   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)selfr3   r    r!   r   s        r(   __init__z_ConfigurableModel.__init__  sm     &4%9r #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__  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_paramsr6   r   r   )r   configparamsr&   r   r   r'   s          r(   r   z_ConfigurableModel._model  sh    GD((GD,>,>v,FG'1&1"&"E"E 	:D$(GE4($9&9E	:r)   c                   t        |      }|j                  di       j                         D ci c]<  \  }}|j                  | j                        r|j                  | j                        |> }}}| 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   removeprefixr   )r   r   kvmodel_paramss        r(   r   z _ConfigurableModel._model_params  s    v& 

>26<<>
1||D//0 NN4../2
 

 $$-!-!3!3!5Ad>W>W9W1L  
s   AB6B<,B<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]%  \  }}|j                  | 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_config  sH     S6<RSD9I64RS))&1-3\\^STQqN?RAqDSS 

>26<<>,
1~~d112,F qD,
(
 )-T-P-P(Q%)00!/0 "Cd22ClC$33T: !%T%>%> ?**--*G
 	
 T,
s    D7D79*D=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   r2   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_completedZ  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_completedw  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.atransform  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_log  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)   )
r3   zdict | Noner    ,Literal['any'] | list[str] | tuple[str, ...]r!   r2   r   z!Sequence[tuple[str, tuple, dict]]r   None)r   r2   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*     s:    '+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&   r2   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&   r2   r   r)  r'   r	   r   r   )r   r2   r   r)  )r&   r2   r   r)  r   ztuple[str, str])r   r2   rj   r)  r   r  )2
__future__r   r4   collections.abcr   r   r   r   	importlibr   typingr	   r
   r   r   r   langchain_core.language_modelsr   r   r   *langchain_core.language_models.chat_modelsr   r   langchain_core.messagesr   r   langchain_core.runnablesr   r   r   langchain_core.runnables.schemar   langchain_core.toolsr   langchain_core.tracersr   r   pydanticr   typing_extensionsr   __all__r   r6   r   r   r|   r}   r   r*   r$   r)   r(   <module>r8     s<   "  G G  : : 
 : L L 7 ) 6  & 
 "& $ $  	
    
 
 "& $ $  	
    
 
 "&HK $  F	
    
 j "&OS $jj j M	j
 j j (j`	 "&FF F 	F
 FR 2BJ!< 59  @ RL"4c"9: RLr)   