Ë
    µŒj´.  ã                  óò   — d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	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mZ dd	lmZ dd
lmZ  ej6                  e«      Z eddd¬«       G d„ de«      «       Zy)zAzure OpenAI chat wrapper.é    )ÚannotationsN)ÚAnyÚ	AwaitableÚCallableÚDictÚListÚUnion)Ú
deprecated)Ú
ChatResult)Úget_from_dict_or_envÚpre_init)Ú	BaseModelÚField)Ú
ChatOpenAI)Úis_openai_v1z0.0.10z1.0z langchain_openai.AzureChatOpenAI)ÚsinceÚremovalÚalternative_importc                  ó|  ‡ — e Zd ZU dZdZded<   	  edd¬«      Zded<   	  edd	¬«      Zd
ed<   	  edd¬«      Z	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dZd
ed<   	 dZd
ed<   	 dZded<   	 ed d„«       Zed!d„«       Zed"ˆ fd„«       Zed"d„«       Zed"ˆ fd„«       Zed#d„«       Zed"d„«       Zd$ˆ fd„Zˆ xZS )%ÚAzureChatOpenAIa¨  `Azure OpenAI` Chat Completion API.

    To use this class you
    must have a deployed model on Azure OpenAI. Use `deployment_name` in the
    constructor to refer to the "Model deployment name" in the Azure portal.

    In addition, you should have the ``openai`` python package installed, and the
    following environment variables set or passed in constructor in lower case:
    - ``AZURE_OPENAI_API_KEY``
    - ``AZURE_OPENAI_ENDPOINT``
    - ``AZURE_OPENAI_AD_TOKEN``
    - ``OPENAI_API_VERSION``
    - ``OPENAI_PROXY``

    For example, if you have `gpt-35-turbo` deployed, with the deployment name
    `35-turbo-dev`, the constructor should look like:

    .. code-block:: python

        AzureChatOpenAI(
            azure_deployment="35-turbo-dev",
            openai_api_version="2023-05-15",
        )

    Be aware the API version may change.

    You can also specify the version of the model using ``model_version`` constructor
    parameter, as Azure OpenAI doesn't return model version with the response.

    Default is empty. When you specify the version, it will be appended to the
    model name in the response. Setting correct version will help you to calculate the
    cost properly. Model version is not validated, so make sure you set it correctly
    to get the correct cost.

    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.
    NzUnion[str, None]Úazure_endpointÚazure_deployment)ÚdefaultÚaliasÚdeployment_nameÚ Úapi_versionÚstrÚopenai_api_versionÚapi_keyÚopenai_api_keyÚazure_ad_tokenzUnion[Callable[[], str], None]Úazure_ad_token_providerz)Union[Callable[[], Awaitable[str]], None]Úazure_ad_async_token_providerÚmodel_versionÚopenai_api_typeTÚboolÚvalidate_base_urlc                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚchat_modelsÚazure_openai© )Úclss    úv/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/azure_openai.pyÚget_lc_namespacez AzureChatOpenAI.get_lc_namespacen   s
   € ò <Ð;ó    c                ól  — |d   dk  rt        d«      ‚|d   dkD  r|d   rt        d«      ‚|d   xs, t        j                  d«      xs t        j                  d«      |d<   |d	   xs t        j                  d
«      |d	<   |d   xs t        j                  d«      |d<   |d   xs, t        j                  d«      xs t        j                  d«      |d<   |d   xs t        j                  d«      |d<   |d   xs t        j                  d«      |d<   t        |ddd¬«      |d<   t        |ddd¬«      |d<   	 ddl}t        «       �rE|d	   }|r�|d   r˜d|vr9|d	   j                  d «      dz   |d	<   t        j                  d!|› d"|d	   › d#�«       |d$   rVt        j                  d%«       |d$   |d	   vr2t        j                  d&|› d"|d	   › d#�«       |d	xx   d'|d$   z   z  cc<   d|d$<   |d   |d   |d$   |d   |d   |d(   |d   |d	   |d)   |d*   i |d+   xs i ¥d,d-i¥|d.   |d/   d0œ} |j                  d4i |¤Žj                  j                  |d1<   |d2   }|r||d(<    |j                  d4i |¤Žj                  j                  |d3<   |S |j                  |d1<   |S # t
        $ r t        d«      ‚w xY w)5z?Validate that api key and python package exists in environment.Úné   zn must be at least 1.Ú	streamingzn must be 1 when streaming.r!   ÚAZURE_OPENAI_API_KEYÚOPENAI_API_KEYÚopenai_api_baseÚOPENAI_API_BASEr   ÚOPENAI_API_VERSIONÚopenai_organizationÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONr   ÚAZURE_OPENAI_ENDPOINTr"   ÚAZURE_OPENAI_AD_TOKENr&   ÚOPENAI_API_TYPEÚazure)r   Úopenai_proxyÚOPENAI_PROXYr   r   NzTCould not import openai python package. Please install it with `pip install openai`.r(   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`). Updating `openai_api_base` from z to Ú.r   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`.zÈAs of openai>=1.0.0, if `openai_api_base` (or alias `base_url`) is specified it is expected to be of the form https://example-resource.azure.openai.com/openai/deployments/example-deployment. Updating z/deployments/r#   Úrequest_timeoutÚmax_retriesÚdefault_headersz
User-Agentz"langchain-comm-python-azure-openaiÚdefault_queryÚhttp_client)r   r   r   r    r"   r#   ÚorganizationÚbase_urlÚtimeoutrG   rH   rI   rJ   Úclientr$   Úasync_clientr-   )Ú
ValueErrorÚosÚgetenvr   ÚopenaiÚImportErrorr   ÚrstripÚwarningsÚwarnÚAzureOpenAIÚchatÚcompletionsÚAsyncAzureOpenAIÚChatCompletion)r.   ÚvaluesrS   r8   Úclient_paramsr$   s         r/   Úvalidate_environmentz$AzureChatOpenAI.validate_environments   sÕ  € ð �#‰;˜Š?ÜÐ4Ó5Ð5Ø�#‰;˜Š?˜v kÒ2ÜÐ:Ó;Ð;ð Ð#Ñ$ò +Ü�y‰yÐ/Ó0ò+ä�y‰yÐ)Ó*ð 	ÐÑ ð
 %+Ð+<Ñ$=ò %
ÄÇÁØóB
ˆÐ Ñ!ð (.Ð.BÑ'Cò (
ÄrÇyÁyØ óH
ˆÐ#Ñ$ð
 Ð(Ñ)ò 0Ü�y‰y˜Ó)ò0ä�y‰yÐ.Ó/ð 	Ð$Ñ%ð
 $*Ð*:Ñ#;ò $
¼r¿y¹yØ#ó@
ˆÐÑ ð $*Ð*:Ñ#;ò $
¼r¿y¹yØ#ó@
ˆÐÑ ô %9ØÐ%Ð'8À'ô%
ˆÐ Ñ!ô "6Ø�N N¸Bô"
ˆˆ~Ñð	Ûô �>ð %Ð%6Ñ7ˆOÙ 6Ð*=Ò#>Ø OÑ3àÐ0Ñ1×8Ñ8¸Ó=À	ÑIð Ð,Ñ-ô —M‘MðRð +Ð+¨4°Ð7HÑ0IÐ/JÈ!ðMôð Ð+Ò,Ü—M‘Mð0ôð Ð/Ñ0¸Ð?PÑ8QÑQÜ Ÿ™ð(ð )8Ð'8¸Ø%Ð&7Ñ8Ð9¸ð<ôð Ð0Ó1Ø+¨fÐ5FÑ.GÑGñÓ1ð 15�FÐ,Ñ-à%Ð&:Ñ;Ø"(Ð)9Ñ":Ø$*Ð+<Ñ$=Ø!Ð"2Ñ3Ø"(Ð)9Ñ":Ø+1Ð2KÑ+LØ &Ð'<Ñ =Ø"Ð#4Ñ5Ø!Ð"3Ñ4Ø% mÑ4ð$ØÐ/Ñ0Ò6°Bð$à Ð"Fñ$ð "(¨Ñ!8Ø% mÑ4ñ!ˆMð$  2˜v×1Ñ1ÑB°MÑB×GÑG×SÑSˆF�8Ñà,2Ð3RÑ,SÐ)á,Ø;X�Ð7Ñ8à%< V×%<Ñ%<ñ &Øñ&ç‰d—;‘;ð �>Ñ"ð
 ˆð  &×4Ñ4ˆF�8ÑØˆøôO ò 	Üð?óð ð	ús   Ä9J ÊJ3c                ó`   •— t        «       r
t        ‰| �  S i t        ‰| �  ¥d| j                  i¥S )z2Get the default parameters for calling OpenAI API.Úengine)r   ÚsuperÚ_default_paramsr   ©ÚselfÚ	__class__s    €r/   rc   zAzureChatOpenAI._default_paramsé   s<   ø€ ô Œ>Ü‘7Ñ*Ð*ðÜ‘'Ñ)ðà˜$×.Ñ.ñð r1   c                ó   — i | j                   ¥S )zGet the identifying parameters.)rc   ©re   s    r/   Ú_identifying_paramsz#AzureChatOpenAI._identifying_paramsô   s   € ð (�$×&Ñ&Ð'Ð'r1   c                óv   •— t        «       r
t        ‰| �  S i t        ‰| �  ¥| j                  | j                  dœ¥S )z1Get the config params used for the openai client.)Úapi_typer   )r   rb   Ú_client_paramsr&   r   rd   s    €r/   rl   zAzureChatOpenAI._client_paramsù   sC   ø€ ô Œ>Ü‘7Ñ)Ð)ðÜ‘'Ñ(ðà ×0Ñ0Ø#×6Ñ6òð r1   c                 ó   — y)Nzazure-openai-chatr-   rh   s    r/   Ú	_llm_typezAzureChatOpenAI._llm_type  s   € à"r1   c                ó4   — | j                   | j                  dœS )N©r&   r   rp   rh   s    r/   Úlc_attributeszAzureChatOpenAI.lc_attributes	  s    € ð  $×3Ñ3Ø"&×"9Ñ"9ñ
ð 	
r1   c                óp  •— t        |t        «      s|j                  «       }|d   D ]"  }|j                  dd «      dk(  sŒt        d«      ‚ t        ‰| �  |«      }d|v rW|d   }| j                  r|› d| j                  › �}|j                  �)t        |j                  t        «      r||j                  d<   |S )NÚchoicesÚfinish_reasonÚcontent_filterzKAzure has not provided the response due to a content filter being triggeredÚmodelÚ-Ú
model_name)Ú
isinstanceÚdictÚgetrP   rb   Ú_create_chat_resultr%   Ú
llm_output)re   ÚresponseÚresÚchat_resultrv   rf   s        €r/   r|   z#AzureChatOpenAI._create_chat_result  sÆ   ø€ Ü˜(¤DÔ)Ø—}‘}“ˆHØ˜IÔ&ˆCØ�w‰w�¨Ó-Ð1AÓAÜ ð&óð ð 'ô ‘gÑ1°(Ó;ˆà�hÑØ˜WÑ%ˆEØ×!Ò!Ø ˜'  4×#5Ñ#5Ð"6Ð7�à×%Ñ%Ð1´jØ×&Ñ&¬ô7ð 8=�×&Ñ& |Ñ4àÐr1   )Úreturnz	List[str])r]   r   r�   r   )r�   zDict[str, Any])r�   r   )r~   zUnion[dict, BaseModel]r�   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r!   r"   r#   r$   r%   r&   r(   Úclassmethodr0   r   r_   Úpropertyrc   ri   rl   rn   rq   r|   Ú__classcell__)rf   s   @r/   r   r      s_  ø… ñ$ðL (,€NÐ$Ó+ðñ ).°dÐBTÔ(U€OÐ%ÓUðñ
 $¨B°mÔDÐ˜ÓDØSÙ',°TÀÔ'K€NÐ$ÓKØUØ'+€NÐ$Ó+ðð ?CÐÐ;ÓBðð
 PTÐ!Ð#LÓSðð €M�3ÓØ+Ø€O�SÓØ+Ø"Ð�tÓ"ðð ò<ó ð<ð òsó ðsðj ôó ðð ò(ó ð(ð ô	ó ð	ð ò#ó ð#ð ò
ó ð
÷ñ r1   r   )r…   Ú
__future__r   ÚloggingrQ   rV   Útypingr   r   r   r   r   r	   Úlangchain_core._api.deprecationr
   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   Úpydanticr   r   Ú&langchain_community.chat_models.openair   Ú langchain_community.utils.openair   Ú	getLoggerr‚   Úloggerr   r-   r1   r/   Ú<module>r•      sj   ðÙ  å "ã Û 	Û ß >× >å 6Ý -ß ?ß %å =Ý 9à	ˆ×	Ñ	˜8Ó	$€ñ Ø
ØØ9ôô
K�jó Kóñ
Kr1   