
    dh                     ~    S r SSKrSSKJrJrJrJrJr  SSKJ	r	  SSK
r
SSKJr  SSKJrJrJr  SrSr " S	 S
\5      rg)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                       \ rS rSr% SrSr\\   \S'   \	" SS9r
\" SS9\S	\S
\4S j5       5       rS\S
\4S jrS\S\R$                  S
\4S jrS\S\\   S
\4S jrS\S
\\   4S jrSrg)MerriamWebsterAPIWrapper   a:  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                 (    [        USS5      nX!S'   U$ )z,Validate that api key exists in environment.r   MERRIAM_WEBSTER_API_KEYr	   )clsr   r   s      e/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/merriam_webster.pyvalidate_environment-MerriamWebsterAPIWrapper.validate_environment#   s)     #7-/H#
 -D()    queryc                     [        U5      n[         SU SU R                   3n[        R                  " U[
        S9nUR                  S:w  a  UR                  $ U R                  X5      $ )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   runMerriamWebsterAPIWrapper.run.   sm    U| ''qD0013 	
 <<5LM3&== $$U55r   r.   c                    [         R                  " UR                  5      nU(       d  SU S3$ [        US   [        5      (       ak  SU S3n[        U5      S:  aG  [        [        U5      5       Vs/ sH  oUS-    SX5    3PM     nnUS-  nUSR                  U5      -  nU$ US	US    S
3-  n U$ U R                  X5      nU$ s  snf )Nz3No Merriam-Webster definition was found for query 'z'.r   z'.
   . z7You can try one of the following alternative queries:


zDid you mean 'z'?)	jsonloadscontent
isinstancestrlenrangejoin_format_definitions)r+   r   r.   r7   resultialternativess          r   r*   )MerriamWebsterAPIWrapper._format_response>   s    **X--.HrRRgaj#&&J5'QUVF7|aBGGBUVBUQq5'GJ< 8BUVUU$))L11 	 N71:,b99  --e=F  Ws   1Cdefinitionsc                     / nU H#  nUR                  U R                  U5      5        M%     [        U5      S:X  a  SU SUS    3$ SU S3n[        US5       H  u  pgXV SU S3-  nM     U$ )	Nr2   zDefinition of 'z':
r   zDefinitions of 'z':

r3   r4   )extend_format_definitionr:   	enumerate)r+   r   rB   formatted_definitions
definitionr>   r?   formatted_definitions           r   r=   ,MerriamWebsterAPIWrapper._format_definitionsQ   s    +-%J!(()@)@)LM & $%*$UG40Ea0H/IJJ#E7&1'01F'J#A223266F (K r   rH   c              #      #    SU;   a  US   S   R                  SS5      nOUS   S   R                  S5      S   nS	U;   a  US	   nS
U;   a  US
    H  nU SW SU 3v   M     g U SW 3v   g 7f)Nhwihw*-metaid:r   flshortdefz, z: )replacesplit)r+   rH   headwordfunctional_label	short_defs        r   rE   +MerriamWebsterAPIWrapper._format_definition_   s     J!%(.66sC@H!&)$/55c:1=H:)$/#'
3	!
"%5$6bDD 4 Jb!1 233s   A.A0 )__name__
__module____qualname____firstlineno____doc__r   r   r9   __annotations__r   model_configr   classmethodr   r   r   r/   r%   Responser*   r   r=   r   rE   __static_attributes__r[   r   r   r   r      s    	 .2Xc]1L (#$ 3   $6 6 6 c X5F5F 3 & 4: # 4T 4hsm 4r   r   )r`   r5   typingr   r   r   r   r   urllib.parser   r%   langchain_core.utilsr
   pydanticr   r   r   r$   r'   r   r[   r   r   <module>rj      sA    &  6 6   5 ; ; F   [4y [4r   