§
    æ˜ºh¤  ã                   ó‚   — d Z ddlZddlmZmZmZmZ ddlmZ ddl	Z	ddl
mZmZmZ ddlmZ dZdZ G d	„ d
e¦  «        ZdS )z Util that calls Merriam-Webster.é    N)ÚDictÚIteratorÚListÚOptional)Úquote)Ú	BaseModelÚExtraÚroot_validator©Úget_from_dict_or_envz?https://www.dictionaryapi.com/api/v3/references/collegiate/jsoniˆ  c                   óâ   — e Zd ZU dZdZee         ed<    G d„ d¦  «        Z 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_keyc                   ó    — e Zd ZdZej        ZdS )úMerriamWebsterAPIWrapper.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   ÚforbidÚextra© ó    úu/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/utilities/merriam_webster.pyÚConfigr      s   € € € € € Ø5Ð5à”ˆˆˆr   r   ÚvaluesÚreturnc                 ó2   — t          |dd¦  «        }||d<   |S )z,Validate that api key exists in environment.r   ÚMERRIAM_WEBSTER_API_KEYr   )Úclsr   r   s      r   Úvalidate_environmentz-MerriamWebsterAPIWrapper.validate_environment#   s0   € õ #7ØÐ-Ð/Hñ#
ô #
Ðð -DˆÐ(Ñ)àˆr   Ú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   r1   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 )r4   ú. r   )Ú.0ÚiÚcontents     €r   ú
<listcomp>z=MerriamWebsterAPIWrapper._format_response.<locals>.<listcomp>F   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Úloadsr9   Ú
isinstanceÚstrÚlenÚrangeÚjoinÚ_format_definitions)r.   r"   r1   ÚresultÚalternativesr9   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 )	Nr4   zDefinition of 'z':
r   zDefinitions of 'z':

r6   r;   )ÚextendÚ_format_definitionr@   Ú	enumerate)r.   r"   rF   Úformatted_definitionsÚ
definitionrD   r8   Úformatted_definitions           r   rC   z,MerriamWebsterAPIWrapper._format_definitionsP   sÁ   € Ø+-ÐØ%ð 	Nð 	NˆJØ!×(Ò(¨×)@Ò)@ÀÑ)LÔ)LÑMÔMÐMÐMåÐ$Ñ%Ô%¨Ò*Ð*ØN UÐNÐNÐ4IÈ!Ô4LÐNÐNÐNà1 EÐ1Ð1Ð1ˆÝ'0Ð1FÈÑ'JÔ'Jð 	7ð 	7Ñ#ˆAÐ#Ø˜Ð6Ð6Ð2Ð6Ð6Ð6Ñ6ˆFˆFàˆr   rL   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.   rL   ÚheadwordÚfunctional_labelÚ	short_defs        r   rI   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   )r   r   r   r   r   r   r?   Ú__annotations__r   r
   r   r!   r2   r(   ÚResponser-   r   rC   r   rI   r   r   r   r   r      s7  € € € € € € ð	ð 	ð .2Ð˜X cœ]Ð1Ð1Ñ1ðð ð ð ð ñ ô ð ð
 €^ÑÔð¨$ð °4ð ð ð ñ Ôðð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   r<   Útypingr   r   r   r   Úurllib.parser   r(   Úlangchain_core.pydantic_v1r   r	   r
   Úlangchain_core.utilsr   r'   r*   r   r   r   r   ú<module>rc      sÔ   ðØ &Ð &Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð à €€€Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5ð Fð ð Ð ð[4ð [4ð [4ð [4ð [4˜yñ [4ô [4ð [4ð [4ð [4r   