
    j
i0"                        d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	m
Z
 ddlZddl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  ej        e          Z G d de          ZdS )zHAzure OpenAI large language models. Not to be confused with chat models.    )annotationsN)	AwaitableCallableMapping)Anycast)LangSmithParams)from_envsecret_from_env)Field	SecretStrmodel_validator)Self)
BaseOpenAIc                      e Zd ZU dZ e edd                    Zded<   	  edd	          Zded
<   	  ed edd                    Z	ded<   	  ed e
ddgd                    Zded<    e e
dd                    Zded<   	 dZded<   	 dZded<   	  e edd                    Zded<   	 dZded<   	 ed7d"            Zed8d$            Zed9d%            Z ed&'          d:d)            Zed; fd+            Zed< fd-            Z	 d=d> fd3Zed?d5            Zed<d6            Z xZS )@AzureOpenAIa  Azure-specific OpenAI large language models.

    To use, you should have the `openai` python package installed, and the
    environment variable `OPENAI_API_KEY` set with your API key.

    Any parameters that are valid to be passed to the openai.create call can be passed
    in, even if not explicitly saved on this class.

    Example:
        ```python
        from langchain_openai import AzureOpenAI

        openai = AzureOpenAI(model_name="gpt-3.5-turbo-instruct")
        ```
    AZURE_OPENAI_ENDPOINTN)default)default_factoryz
str | Noneazure_endpointazure_deployment)r   aliasdeployment_nameapi_versionOPENAI_API_VERSION)r   r   openai_api_versionapi_keyAZURE_OPENAI_API_KEYOPENAI_API_KEYzSecretStr | Noneopenai_api_keyAZURE_OPENAI_AD_TOKENazure_ad_tokenzCallable[[], str] | Noneazure_ad_token_providerz#Callable[[], Awaitable[str]] | Noneazure_ad_async_token_providerOPENAI_API_TYPEazureopenai_api_typeTboolvalidate_base_urlreturn	list[str]c                
    g dS )zsGet the namespace of the LangChain object.

        Returns:
            `["langchain", "llms", "openai"]`
        )	langchainllmsopenai clss    C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_openai/llms/azure.pyget_lc_namespacezAzureOpenAI.get_lc_namespaceb   s     /...    dict[str, str]c                    dddS )z0Mapping of secret keys to environment variables.r   r!   )r    r"   r0   selfs    r3   
lc_secretszAzureOpenAI.lc_secretsk   s     55
 
 	
r5   c                    dS )z9Return whether this model can be serialized by LangChain.Tr0   r1   s    r3   is_lc_serializablezAzureOpenAI.is_lc_serializables   s	     tr5   after)moder   c                   | j         dk     rd}t          |          | j        r| j         dk    rd}t          |          | j        r| j        dk    rd}t          |          | j        }|ri| j        rbd|vrFt          t          | j                                      d          dz   | _        d}t          |          | j	        rd}t          |          | j
        | j        | j	        | j        r| j                                        nd	| j        r| j                                        nd	| j        | j        | j        | j        | j        i | j        pi d
di| j        d}| j        s&d| j        i}t/          j        di ||j        | _        | j        s7d| j        i}| j        r
| j        |d<   t/          j        di ||j        | _        | S )z?Validate that api key and python package exists in environment.   zn must be at least 1.z!Cannot stream results when n > 1.z'Cannot stream results when best_of > 1.z/openai/zAs of openai>=1.0.0, Azure endpoints should be specified via the `azure_endpoint` param not `openai_api_base` (or alias `base_url`).zAs of openai>=1.0.0, if `deployment_name` (or alias `azure_deployment`) is specified then `openai_api_base` (or alias `base_url`) should not be. Instead use `deployment_name` (or alias `azure_deployment`) and `azure_endpoint`.Nz
User-Agentz%langchain-partner-python-azure-openai)r   r   r   r   r"   r#   organizationbase_urltimeoutmax_retriesdefault_headersdefault_queryhttp_clientr#   r0   )n
ValueError	streamingbest_ofopenai_api_baser)   r   strrstripr   r   r   r    get_secret_valuer"   r#   openai_organizationrequest_timeoutrE   rF   rG   clientrH   r/   r   completionsasync_clienthttp_async_clientr$   AsyncAzureOpenAI)r9   msgrM   client_paramssync_specificasync_specifics         r3   validate_environmentz AzureOpenAI.validate_environmentx   sc    6A::)CS//!> 	"dfqjj5CS//!> 	"dlQ..;CS//! . 	,t5 	,//d233::3??)K $- 
 !oo%# 	,,  !oo%  2"1 $ 4"t*;;==="d1BBDDD'+'C 4,++ '-2 E    "/'
 
* { 	*D,<=M ,     K   	+T-CDN1 6 78 !' 7 ! !! ! !  
 r5   Mapping[str, Any]c                <    d| j         it                      j        S )Nr   )r   super_identifying_params)r9   	__class__s    r3   r`   zAzureOpenAI._identifying_params   s&     t3
gg)
 	
r5   dict[str, Any]c                D    d| j         i}i |t                      j        S )Nmodel)r   r_   _invocation_params)r9   openai_paramsra   s     r3   re   zAzureOpenAI._invocation_params   s'     $"67>->577#=>>r5   stoplist[str] | Nonekwargsr   r	   c                     t                      j        dd|i|}| j        }d|d<   |                    d          x}r||d<   |S )z Get standard params for tracing.rg   r&   ls_providerrd   ls_model_namer0   )r_   _get_ls_paramsre   get)r9   rg   ri   paramsinvocation_params
model_namera   s         r3   rm   zAzureOpenAI._get_ls_params   sc     ('<<T<V<< 3 '}*..w777: 	1&0F?#r5   rN   c                    dS )zReturn type of llm.r&   r0   r8   s    r3   	_llm_typezAzureOpenAI._llm_type   s	     wr5   c                     | j         | j        dS )zAttributes relevant to tracing.r'   r   ru   r8   s    r3   lc_attributeszAzureOpenAI.lc_attributes   s      $3"&"9
 
 	
r5   )r*   r+   )r*   r6   )r*   r(   )r*   r   )r*   r]   )r*   rb   )N)rg   rh   ri   r   r*   r	   )r*   rN   )__name__
__module____qualname____doc__r   r
   r   __annotations__r   r   r   r    r"   r#   r$   r'   r)   classmethodr4   propertyr:   r<   r   r\   r`   re   rm   rs   rv   __classcell__)ra   s   @r3   r   r      sP           "' !8$GGG" " "N     #(%<N"O"O"OOOOOO &+U !5tDDD& & &     T (-u'#%56
 
 
( ( (N     (-u'(?NNN( ( (N     9=<<<<
 JN!MMMM #(% !2GDDD# # #O     .""""" / / / [/ 
 
 
 X
    [ _'"""K K K #"KZ 
 
 
 
 
 X
 ? ? ? ? ? X?
 (,	 	 	 	 	 	 	    X 
 
 
 X
 
 
 
 
r5   r   )rz   
__future__r   loggingcollections.abcr   r   r   typingr   r   r/   langchain_core.language_modelsr	   langchain_core.utilsr
   r   pydanticr   r   r   typing_extensionsr   langchain_openai.llms.baser   	getLoggerrw   loggerr   r0   r5   r3   <module>r      s!   N N " " " " " "  8 8 8 8 8 8 8 8 8 8          : : : : : : : : : : : : : : 6 6 6 6 6 6 6 6 6 6 " " " " " " 1 1 1 1 1 1		8	$	$T
 T
 T
 T
 T
* T
 T
 T
 T
 T
r5   