ó
    ýÞ j‰$  ã                  óÖ   • S r SSKJr  SSKrSSKJrJrJr  SSK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  SSKJr  \R6                  " \5      r " S S\5      rg)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)Ú__version__)Ú
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\" 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:
    ```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_urlc                ó
   • / SQ$ )z[Get the namespace of the LangChain object.

Returns:
    `["langchain", "llms", "openai"]`
)Ú	langchainÚllmsÚopenai© ©Úclss    ÚU/var/www/html/gaurav/venv/lib/python3.13/site-packages/langchain_openai/llms/azure.pyÚget_lc_namespaceÚAzureOpenAI.get_lc_namespacec   s
   € ò /Ð.ó    c                ó   • SSS.$ )z0Mapping of secret keys to environment variables.r    r#   )r"   r$   r0   ©Úselfs    r3   Ú
lc_secretsÚAzureOpenAI.lc_secretsl   s   € ð 5Ø5ñ
ð 	
r6   c                ó   • g)z9Return whether this model can be serialized by LangChain.Tr0   r1   s    r3   Úis_lc_serializableÚAzureOpenAI.is_lc_serializablet   s   € ð r6   Úafter)Úmodec                ó2   • U R                  S[        5        U $ )z Set package version in metadata.zlangchain-openai)Ú_add_versionr   r8   s    r3   Ú_set_azure_openai_versionÚ%AzureOpenAI._set_azure_openai_versiony   s   € ð 	×ÑÐ,¬kÔ:Øˆr6   c                óÞ  • U R                   S:  a  Sn[        U5      eU R                  (       a  U R                   S:”  a  Sn[        U5      eU R                  (       a  U R                  S:”  a  Sn[        U5      eU R                  nU(       as  U R
                  (       ab  SU;  a>  [        [        U R                  5      R                  S5      S-   U l        Sn[        U5      eU R                  (       a  Sn[        U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$                  S
S0U R&                  =(       d    0 EU R(                  S.nU R                  (       d"  U R                  (       d  U R*                  (       a  S	US'   U R,                  (       dh  U R*                  (       a"  U R                  (       d  U R                  (       a5  SU R.                  0n[0        R2                  " S0 UDUD6R4                  U l        U R6                  (       dU  SU R8                  0nU R*                  (       a  U R*                  US'   [0        R:                  " S0 UDUD6R4                  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Ú/z„As of openai>=1.0.0, Azure endpoints should be specified via the `azure_endpoint` param not `openai_api_base` (or alias `base_url`).zâAs 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_queryr   Úhttp_clientr%   r0   )ÚnÚ
ValueErrorÚ	streamingÚbest_ofÚopenai_api_baser+   r   ÚstrÚrstripr   r   r   r"   Úget_secret_valuer$   r%   Úopenai_organizationÚrequest_timeoutrK   rL   rM   r&   ÚclientrN   r/   r   ÚcompletionsÚasync_clientÚhttp_async_clientÚAsyncAzureOpenAI)r9   ÚmsgrS   Úclient_paramsÚsync_specificÚasync_specifics         r3   Úvalidate_environmentÚ AzureOpenAI.validate_environment   s‰  € ð �6‰6�A‹:Ø)ˆCÜ˜S“/Ð!Ø�>�>˜dŸf™f q›jØ5ˆCÜ˜S“/Ð!Ø�>�>˜dŸl™l¨QÓ.Ø;ˆCÜ˜S“/Ð!ð ×.Ñ.ˆÞ˜t×5×5Ø Ó/äœ˜d×2Ñ2Ó3×:Ñ:¸3Ó?À)ÑKð Ô$ð-ð ô
 ! “oÐ%Ø×#×#ð,ð ô ! “oÐ%ð  ×2Ñ2Ø"×1Ñ1Ø $× 4Ñ 4à×"×"ð ×*Ñ*×;Ñ;Ô=àà×"×"ð #×1Ñ1×BÑBÔDàØ'+×'CÑ'CØ ×4Ñ4Ø×,Ñ,Ø×+Ñ+Ø×+Ñ+àÐEð à×'Ñ'×-¨2ð ð "×/Ñ/ñ'
ˆð, ××Ø×+×+Ø×1×1à'+ˆM˜)Ñ$Ø�{�{Ø×2×2Ø×"×"Ø×+×+à*¨D×,<Ñ,<Ð=ˆMÜ ×,Ò,ñ Øðàñ÷ ‰kð ŒKð × × Ø+¨T×-CÑ-CÐDˆNà×1×1à×6Ñ6ð Ð7Ñ8ô !'× 7Ò 7ñ !Øð!à ñ!÷ ‰kð Ôð
 ˆr6   c                ó4   >• SU R                   0[        TU ]  E$ )Nr   )r   ÚsuperÚ_identifying_params)r9   Ú	__class__s    €r3   rf   ÚAzureOpenAI._identifying_params×   s'   ø€ ð ˜t×3Ñ3ð
ä‰gÑ)ð
ð 	
r6   c                ó<   >• SU R                   0n0 UE[        TU ]  E$ )NÚmodel)r   re   Ú_invocation_params)r9   Úopenai_paramsrg   s     €r3   rk   ÚAzureOpenAI._invocation_paramsÞ   s(   ø€ à  $×"6Ñ"6Ð7ˆØ>�-Ð>¤5¡7Ñ#=Ð>Ð>r6   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_providerrj   Úls_model_namer0   )re   Ú_get_ls_paramsrk   Úget)r9   ro   ÚkwargsÚparamsÚinvocation_paramsÚ
model_namerg   s         €r3   rr   ÚAzureOpenAI._get_ls_paramsã   sU   ø€ ô ‘Ò'Ñ<¨TÐ<°VÑ<ˆØ ×3Ñ3ÐØ 'ˆˆ}ÑØ*×.Ñ.¨wÓ7Ð7ˆ:Õ7Ø&0�?Ñ#Øˆr6   c                ó   • g)zReturn type of llm.r(   r0   r8   s    r3   Ú	_llm_typeÚAzureOpenAI._llm_typeî   s   € ð r6   c                ó4   • U R                   U R                  S.$ )zAttributes relevant to tracing.©r)   r   r}   r8   s    r3   Úlc_attributesÚAzureOpenAI.lc_attributesó   s    € ð  $×3Ñ3Ø"&×"9Ñ"9ñ
ð 	
r6   )r[   rY   r   rS   )Úreturnz	list[str])r€   zdict[str, str])r€   r*   )r€   r   )r€   zMapping[str, Any])r€   zdict[str, Any])N)ro   zlist[str] | Nonert   r   r€   r	   )r€   rT   )!Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r
   r   Ú__annotations__r   r   r   r"   r$   r%   r&   r)   r+   Úclassmethodr4   Úpropertyr:   r=   r   rC   rb   rf   rk   rr   rz   r~   Ú__static_attributes__Ú__classcell__)rg   s   @r3   r   r      sý  ø‡ ññ  "'Ù Ð!8À$ÑGñ"€N�Jó ðñ #(°Ð<NÑ"O€O�ZÓOðñ &+ØÙ Ð!5¸tÑDñ&Ð˜
ó ð Tñ (-ØÙ'Ø#Ð%5Ð6Àñ
ñ(€NÐ$ó ñ (-Ù'Ð(?ÈÑNñ(€NÐ$ó ðð 9=ÐÐ5Ó<ðð
 JNÐ!Ð#FÓMðñ #(Ù Ð!2¸GÑDñ#€O�Zó ð .Ø"Ð�tÓ"ðð ó/ó ð/ð ó
ó ð
ð óó ðñ ˜'Ñ"óó #ðñ
 ˜'Ñ"óUó #ðUðn ö
ó ð
ð ö?ó ð?ð
 (,ð	Ø$ð	Ø7:ð	à	÷	ð 	ð óó ðð ó
ó ö
r6   r   )r…   Ú
__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._versionr   Úlangchain_openai.llms.baser   Ú	getLoggerr�   Úloggerr   r0   r6   r3   Ú<module>r—      sM   ðÙ Nå "ã ß 8Ñ 8ß ã Ý :ß :ß 6Ñ 6Ý "å 1Ý 1à	×	Ò	˜8Ó	$€ôd
�*õ d
r6   