Ë
    ´Œj!  ã                  óÎ   — d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	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j4                  e«      Z G d
„ de«      Zy)é    )ÚannotationsN)Ú	AwaitableÚMapping)ÚAnyÚCallableÚOptionalÚUnionÚ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d,d!„«       Zed-d"„«       Zed.d#„«       Z ed$¬%«      d/d&„«       Zed0ˆ fd'„«       Zed1ˆ fd(„«       Z	 d2	 	 	 	 	 d3ˆ fd)„Zed4d*„«       Zed1d+„«       Zˆ xZS )5Ú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:
        .. 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                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚllmsÚopenai© ©Úclss    úe/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_openai/llms/azure.pyÚget_lc_namespacezAzureOpenAI.get_lc_namespacea   s
   € ò /Ð.ó    c                ó   — dddœS )Nr    r#   )r"   r$   r0   ©Úselfs    r3   Ú
lc_secretszAzureOpenAI.lc_secretsf   s   € ð 5Ø5ñ
ð 	
r5   c                 ó   — y)z9Return whether this model can be serialized by LangChain.Tr0   r1   s    r3   Úis_lc_serializablezAzureOpenAI.is_lc_serializablem   s   € ð r5   Úafter)Úmodec                ó|  — | j                   dk  rt        d«      ‚| j                  r| j                   dkD  rt        d«      ‚| j                  r| j                  dkD  rt        d«      ‚| j                  }|rc| j
                  rWd|vr<t        t        | j                  «      j                  d«      dz   | _        t        d«      ‚| j                  rt        d«      ‚| j                  | j                  | j                  | j                  r| j                  j                  «       nd	| j                  r| j                  j                  «       nd	| j                  | j                   | j                  | j"                  | j$                  i | j&                  xs i ¥d
di¥| j(                  dœ}| j*                  s4d| j,                  i}t/        j0                  di |¤|¤Žj2                  | _        | j4                  sOd| j6                  i}| j8                  r| j8                  |d<   t/        j:                  di |¤|¤Žj2                  | _        | 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Ú/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_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_timeoutrD   rE   rF   ÚclientrG   r/   r   ÚcompletionsÚasync_clientÚhttp_async_clientr&   ÚAsyncAzureOpenAI)r8   rL   Úclient_paramsÚsync_specificÚasync_specifics        r3   Úvalidate_environmentz AzureOpenAI.validate_environmentr   sA  € ð �6‰6�AŠ:ÜÐ4Ó5Ð5Ø�>Š>˜dŸf™f qšjÜÐ@ÓAÐAØ�>Š>˜dŸl™l¨QÒ.ÜÐ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ÐDˆNà×1Ò1à×6Ñ6ð Ð7Ñ8ô !'× 7Ñ 7ñ !Øð!à ñ!÷ ‰kð Ôð
 ˆr5   c                ó8   •— i d| j                   i¥t        ‰| �  ¥S )Nr   )r   ÚsuperÚ_identifying_params)r8   Ú	__class__s    €r3   r]   zAzureOpenAI._identifying_params»   s-   ø€ ð
Ø  $×"6Ñ"6Ð7ð
ä‰gÑ)ð
ð 	
r5   c                ó<   •— d| j                   i}i |¥t        ‰| �  ¥S )NÚmodel)r   r\   Ú_invocation_params)r8   Úopenai_paramsr^   s     €r3   ra   zAzureOpenAI._invocation_paramsÂ   s(   ø€ à  $×"6Ñ"6Ð7ˆØ>�-Ð>¤5¡7Ñ#=Ð>Ð>r5   c                ó|   •— t        ‰| �  dd|i|¤Ž}| j                  }d|d<   |j                  d«      x}r||d<   |S )z Get standard params for tracing.Ústopr(   Úls_providerr`   Úls_model_namer0   )r\   Ú_get_ls_paramsra   Úget)r8   rd   ÚkwargsÚparamsÚinvocation_paramsÚ
model_namer^   s         €r3   rg   zAzureOpenAI._get_ls_paramsÇ   sW   ø€ ô ‘Ñ'Ñ<¨TÐ<°VÑ<ˆØ ×3Ñ3ÐØ 'ˆˆ}ÑØ*×.Ñ.¨wÓ7Ð7ˆ:Ð7Ø&0ˆF�?Ñ#Øˆr5   c                 ó   — y)zReturn type of llm.r(   r0   r7   s    r3   Ú	_llm_typezAzureOpenAI._llm_typeÒ   s   € ð r5   c                ó4   — | j                   | j                  dœS )N©r)   r   rp   r7   s    r3   Úlc_attributeszAzureOpenAI.lc_attributes×   s    € ð  $×3Ñ3Ø"&×"9Ñ"9ñ
ð 	
r5   )Úreturnz	list[str])rr   zdict[str, str])rr   r*   )rr   r   )rr   zMapping[str, Any])rr   zdict[str, Any])N)rd   zOptional[list[str]]ri   r   rr   r   )rr   rM   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__annotations__r   r   r   r"   r$   r%   r&   r)   r+   Úclassmethodr4   Úpropertyr9   r;   r   rZ   r]   ra   rg   rn   rq   Ú__classcell__)r^   s   @r3   r   r      sá  ø… ññ" %*Ù Ð!8À$ÔGô%€N�Mó ðñ ).°dÐBTÔ(U€OÐ%ÓUðñ ).ØÙ Ð!5¸tÔDô)Ð˜ó ð Vñ +0ØÙ'Ø#Ð%5Ð6Àô
ô+€NÐ'ó ñ +0Ù'Ð(?ÈÔNô+€NÐ'ó ðð ?CÐÐ;ÓBðð
 PTÐ!Ð#LÓSðñ &+Ù Ð!2¸GÔDô&€O�]ó ð 0Ø"Ð�tÓ"ðð ò/ó ð/ð ò
ó ð
ð òó ðñ ˜'Ô"òFó #ðFðP ô
ó ð
ð ô?ó ð?ð
 +/ð	Ø'ð	Ø:=ð	à	õ	ð òó ðð ò
ó ô
r5   r   )Ú
__future__r   ÚloggingÚcollections.abcr   r   Útypingr   r   r   r	   r
   r/   Úlangchain_core.language_modelsr   Úlangchain_core.utilsr   r   Úpydanticr   r   r   Útyping_extensionsr   Úlangchain_openai.llms.baser   Ú	getLoggerrs   Úloggerr   r0   r5   r3   Ú<module>r†      sI   ðÝ "ã ß .ß 7Õ 7ã Ý :ß :ß 6Ñ 6Ý "å 1à	ˆ×	Ñ	˜8Ó	$€ôJ
�*õ J
r5   