
    $h!                        S SK Jr  S SKrS SKJrJr  S SKJrJrJ	r	J
r
Jr  S SKrS SKJr  S SKJrJr  S SKJrJrJr  S SKJr  S S	KJr  \R4                  " \5      r " S
 S\5      rg)    )annotationsN)	AwaitableMapping)AnyCallableOptionalUnioncast)LangSmithParams)from_envsecret_from_env)Field	SecretStrmodel_validator)Self)
BaseOpenAIc                    ^  \ rS rSr% Sr\" \" SSS9S9rS\S'    \" SS	S
9r	S\S'    \" S\" SSS9S9r
S\S'    \" S\" SS/SS9S9rS\S'   \" \" SSS9S9rS\S'    SrS\S'    SrS\S'    \" \" SSS9S9rS\S'    SrS \S!'    \S.S" j5       r\S/S# j5       r\S0S$ j5       r\" S%S&9S1S' j5       r\S2U 4S( jj5       r\S3U 4S) jj5       r S4     S5U 4S* jjjr\S6S+ j5       r\S3S, j5       rS-rU =r$ )7AzureOpenAI   a  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:
    .. code-block:: python

        from langchain_openai import AzureOpenAI

        openai = AzureOpenAI(model_name="gpt-3.5-turbo-instruct")

AZURE_OPENAI_ENDPOINTN)default)default_factoryzOptional[str]azure_endpointazure_deployment)r   aliaszUnion[str, None]deployment_nameapi_versionOPENAI_API_VERSION)r   r   openai_api_versionapi_keyAZURE_OPENAI_API_KEYOPENAI_API_KEYzOptional[SecretStr]openai_api_keyAZURE_OPENAI_AD_TOKENazure_ad_tokenzUnion[Callable[[], str], None]azure_ad_token_providerz)Union[Callable[[], Awaitable[str]], None]azure_ad_async_token_providerOPENAI_API_TYPEazureopenai_api_typeTboolvalidate_base_urlc                
    / SQ$ )z*Get the namespace of the langchain object.)	langchainllmsopenai clss    S/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_openai/llms/azure.pyget_lc_namespaceAzureOpenAI.get_lc_namespacea   s
     /.    c                    SSS.$ )Nr!   r$   )r#   r%   r1   selfs    r4   
lc_secretsAzureOpenAI.lc_secretsf   s     55
 	
r7   c                    g)z9Return whether this model can be serialized by LangChain.Tr1   r2   s    r4   is_lc_serializableAzureOpenAI.is_lc_serializablem   s     r7   after)modec                   U R                   S:  a  [        S5      eU R                  (       a  U R                   S:  a  [        S5      eU R                  (       a  U R                  S:  a  [        S5      eU R                  nU(       ao  U R
                  (       a^  SU;  a<  [        [        U R                  5      R                  S5      S-   U l        [        S5      eU R                  (       a  [        S5      eU R                  U R                  U R                  U R                  (       a  U R                  R                  5       OS	U R                  (       a  U R                  R                  5       OS	U R                  U R                   U R                  U R"                  U R$                  0 U R&                  =(       d    0 ES
S0EU R(                  S.nU R*                  (       d5  SU R,                  0n[.        R0                  " S0 UDUD6R2                  U l        U R4                  (       dU  SU R6                  0nU R8                  (       a  U R8                  US'   [.        R:                  " S0 UDUD6R2                  U l        U $ )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&   r1   )n
ValueError	streamingbest_ofopenai_api_baser,   r
   strrstripr   r   r   r#   get_secret_valuer%   r&   openai_organizationrequest_timeoutrH   rI   rJ   clientrK   r0   r   completionsasync_clienthttp_async_clientr'   AsyncAzureOpenAI)r:   rP   client_paramssync_specificasync_specifics        r4   validate_environment AzureOpenAI.validate_environmentr   sA    66A:455>>dffqj@AA>>dllQ.FGG ..t55/d223::3?)K $ !- 
 ## ,   22"11 $ 4 4"" **;;="" #11BBD'+'C'C 44,,++++ ''-2 E  "//'
* {{*D,<,<=M ,,  k K   +T-C-CDN1166 78 !' 7 7 !! ! k 
 r7   c                8   > 0 SU R                   0E[        TU ]  E$ )Nr   )r   super_identifying_params)r:   	__class__s    r4   rb   AzureOpenAI._identifying_params   s-    
 $"6"67
g)
 	
r7   c                <   > SU R                   0n0 UE[        TU ]  E$ )Nmodel)r   ra   _invocation_params)r:   openai_paramsrc   s     r4   rg   AzureOpenAI._invocation_params   s(     $"6"67>->57#=>>r7   c                   > [         TU ]  " SSU0UD6nU R                  nSUS'   UR                  S5      =n(       a  XSS'   U$ )z Get standard params for tracing.stopr)   ls_providerrf   ls_model_namer1   )ra   _get_ls_paramsrg   get)r:   rk   kwargsparamsinvocation_params
model_namerc   s         r4   rn   AzureOpenAI._get_ls_params   sU     '<T<V< 33 '}*..w77:7&0?#r7   c                    g)zReturn type of llm.r)   r1   r9   s    r4   	_llm_typeAzureOpenAI._llm_type   s     r7   c                4    U R                   U R                  S.$ )Nr*   r   ry   r9   s    r4   lc_attributesAzureOpenAI.lc_attributes   s       $33"&"9"9
 	
r7   )rX   rV   r   rP   )returnz	list[str])r|   zdict[str, str])r|   r+   )r|   r   )r|   zMapping[str, Any])r|   zdict[str, Any])N)rk   zOptional[list[str]]rp   r   r|   r   )r|   rQ   ) __name__
__module____qualname____firstlineno____doc__r   r   r   __annotations__r   r   r   r#   r%   r&   r'   r*   r,   classmethodr5   propertyr;   r>   r   r^   rb   rg   rn   rv   rz   __static_attributes____classcell__)rc   s   @r4   r   r      s   " %* !8$G%NM  ).dBT(UO%U ). !5tD)  V +0'#%56
+N'  +0'(?N+N'  ?C;B
 PT!#LS &+ !2GD&O]  0"t" / / 
 
   '"F #FP 
 
 ? ?
 +/	'	:=			 	   
 
r7   r   )
__future__r   loggingcollections.abcr   r   typingr   r   r   r	   r
   r0   langchain_core.language_modelsr   langchain_core.utilsr   r   pydanticr   r   r   typing_extensionsr   langchain_openai.llms.baser   	getLoggerr}   loggerr   r1   r7   r4   <module>r      sG    "  . 7 7  : : 6 6 " 1			8	$J
* J
r7   