§
    šŠtj�  ã                   ó†   — d Z ddlZddlmZmZmZmZmZ ddlm	Z	 ddl
Z
ddlmZ ddlmZmZmZ dZdZ G d	„ d
e¦  «        ZdS )z Util that calls Merriam-Webster.é    N)ÚAnyÚDictÚIteratorÚListÚOptional)Úquote©Úget_from_dict_or_env)Ú	BaseModelÚ
ConfigDictÚmodel_validatorz?https://www.dictionaryapi.com/api/v3/references/collegiate/jsoniˆ  c                   óô   — e Zd ZU dZdZee         ed<    ed¬¦  «        Z	 e
d¬¦  «        eded	efd
„¦   «         ¦   «         Zded	efd„Zdedej        d	efd„Zdedee         d	efd„Zded	ee         fd„ZdS )ÚMerriamWebsterAPIWrapperaR  Wrapper for Merriam-Webster.

    Docs for using:

    1. Go to https://www.dictionaryapi.com/register/index and register an
       developer account with a key for the Collegiate Dictionary
    2. Get your API Key from https://www.dictionaryapi.com/account/my-keys
    3. Save your API Key into MERRIAM_WEBSTER_API_KEY env variable

    NÚmerriam_webster_api_keyÚforbid)ÚextraÚbefore)ÚmodeÚvaluesÚreturnc                 ó2   — t          |dd¦  «        }||d<   |S )z,Validate that api key exists in environment.r   ÚMERRIAM_WEBSTER_API_KEYr	   )Úclsr   r   s      úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/merriam_webster.pyÚvalidate_environmentz-MerriamWebsterAPIWrapper.validate_environment#   s0   € õ #7ØÐ-Ð/Hñ#
ô #
Ðð -DˆÐ(Ñ)àˆó    Úqueryc                 óÎ   — t          |¦  «        }t          › d|› d| j        › �}t          j        |t
          ¬¦  «        }|j        dk    r|j        S |                      ||¦  «        S )zDRun query through Merriam-Webster API and return a formatted result.ú/z?key=)ÚtimeoutéÈ   )	r   ÚMERRIAM_WEBSTER_API_URLr   ÚrequestsÚgetÚMERRIAM_WEBSTER_TIMEOUTÚstatus_codeÚtextÚ_format_response)Úselfr   Úquoted_queryÚrequest_urlÚresponses        r   ÚrunzMerriamWebsterAPIWrapper.run.   s€   € å˜U‘|”|ˆõ 'ð 3ð 3¨ð 3ð 3ØÔ0ð3ð 3ð 	õ
 ”< Õ5LÐMÑMÔMˆàÔ 3Ò&Ð&Ø”=Ð à×$Ò$ U¨HÑ5Ô5Ð5r   r,   c                 óŠ  ‡— t          j        |j        ¦  «        Š‰sd|› d�S t          ‰d         t          ¦  «        rod|› d�}t          ‰¦  «        dk    rFˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }|dz  }|d                     |¦  «        z  }n&|d	‰d         › d
�z  }n|                      |‰¦  «        }|S )Nz3No Merriam-Webster definition was found for query 'z'.r   z'.
é   c                 ó0   •— g | ]}|d z   › d‰|         › �‘ŒS )r/   ú. © )Ú.0ÚiÚcontents     €r   ú
<listcomp>z=MerriamWebsterAPIWrapper._format_response.<locals>.<listcomp>G   s/   ø€ ÐVÐVÐV¸Q 1 q¡5Ð 8Ð 8¨G°A¬JÐ 8Ð 8ÐVÐVÐVr   z7You can try one of the following alternative queries:

ú
zDid you mean 'z'?)	ÚjsonÚloadsr5   Ú
isinstanceÚstrÚlenÚrangeÚjoinÚ_format_definitions)r)   r   r,   ÚresultÚalternativesr5   s        @r   r(   z)MerriamWebsterAPIWrapper._format_response>   sæ   ø€ Ý”*˜XÔ-Ñ.Ô.ˆàð 	SØRÈÐRÐRÐRÐRå�g˜a”j¥#Ñ&Ô&ð 		>ØVÈ5ÐVÐVÐVˆFÝ�7‰|Œ|˜aÒÐØVÐVÐVÐVÅ%ÍÈGÉÌÑBUÔBUÐVÑVÔV�ØÐUÑU�Ø˜$Ÿ)š) LÑ1Ô1Ñ1��àÐ9¨7°1¬:Ð9Ð9Ð9Ñ9��à×-Ò-¨e°WÑ=Ô=ˆFàˆr   Údefinitionsc                 óô   — g }|D ]*}|                      |                      |¦  «        ¦  «         Œ+t          |¦  «        dk    rd|› d|d         › �S d|› d�}t          |d¦  «        D ]\  }}||› d|› d�z  }Œ|S )	Nr/   zDefinition of 'z':
r   zDefinitions of 'z':

r1   r7   )ÚextendÚ_format_definitionr<   Ú	enumerate)r)   r   rB   Úformatted_definitionsÚ
definitionr@   r4   Úformatted_definitions           r   r?   z,MerriamWebsterAPIWrapper._format_definitionsQ   sÁ   € Ø+-ÐØ%ð 	Nð 	NˆJØ!×(Ò(¨×)@Ò)@ÀÑ)LÔ)LÑMÔMÐMÐMåÐ$Ñ%Ô%¨Ò*Ð*ØJ UÐJÐJÐ0EÀaÔ0HÐJÐJÐJà1 EÐ1Ð1Ð1ˆÝ'0Ð1FÈÑ'JÔ'Jð 	7ð 	7Ñ#ˆAÐ#Ø˜Ð6Ð6Ð2Ð6Ð6Ð6Ñ6ˆFˆFàˆr   rH   c              #   ó
  K  — d|v r#|d         d                               dd¦  «        }n'|d         d                              d¦  «        d         }d	|v r|d	         }d
|v r|d
         D ]}|› d|› d|› �V — Œd S |› d|› �V — d S )NÚhwiÚhwÚ*ú-ÚmetaÚidú:r   ÚflÚshortdefz, z: )ÚreplaceÚsplit)r)   rH   ÚheadwordÚfunctional_labelÚ	short_defs        r   rE   z+MerriamWebsterAPIWrapper._format_definition_   sà   è è € Ø�JÐÐØ! %Ô(¨Ô.×6Ò6°s¸CÑ@Ô@ˆHˆHà! &Ô)¨$Ô/×5Ò5°cÑ:Ô:¸1Ô=ˆHà�:ÐÐØ)¨$Ô/Ðà˜Ð#Ð#Ø'¨
Ô3ð Eð E�	Ø!ÐDÐDÐ%5ÐDÐD¸ÐDÐDÐDÐDÐDÐDðEð Eð Ð3Ð3Ð!1Ð3Ð3Ð3Ð3Ð3Ð3Ð3r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r;   Ú__annotations__r   Úmodel_configr   Úclassmethodr   r   r   r-   r#   ÚResponser(   r   r?   r   rE   r2   r   r   r   r      s7  € € € € € € ð	ð 	ð .2Ð˜X cœ]Ð1Ð1Ñ1à�:Øðñ ô €Lð €_˜(Ð#Ñ#Ô#Øð¨$ð °3ð ð ð ñ „[ñ $Ô#ðð6˜ð 6 ð 6ð 6ð 6ð 6ð  cð °XÔ5Fð È3ð ð ð ð ð&¨ð ¸4À¼:ð È#ð ð ð ð ð4¨Tð 4°h¸s´mð 4ð 4ð 4ð 4ð 4ð 4r   r   )r\   r8   Útypingr   r   r   r   r   Úurllib.parser   r#   Úlangchain_core.utilsr
   Úpydanticr   r   r   r"   r%   r   r2   r   r   ú<module>re      sÚ   ðØ &Ð &à €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø Ð Ð Ð Ð Ð à €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ð Fð ð Ð ð[4ð [4ð [4ð [4ð [4˜yñ [4ô [4ð [4ð [4ð [4r   