Ë
    µŒjm  ã                   óJ   — d Z ddlmZmZmZmZ ddlmZmZm	Z	  G d„ de«      Z
y)ziUtil that calls DuckDuckGo Search.

No setup required. Free.
https://pypi.org/project/duckduckgo-search/
é    )ÚAnyÚDictÚListÚOptional)Ú	BaseModelÚ
ConfigDictÚmodel_validatorc                   óŒ  — e Zd ZU dZdZee   ed<   	 dZeed<   	 dZ	ee   ed<   	 dZ
eed	<   d
Zeed<   	 dZeed<   	  ed¬«      Z ed¬«      ededefd„«       «       Z	 dded	ee   deeeef      fd„Z	 dded	ee   deeeef      fd„Z	 dded	ee   deeeef      fd„Zdedefd„Z	 dded	edee   deeeef      fd„Zy)ÚDuckDuckGoSearchAPIWrapperzQWrapper for DuckDuckGo Search API.

    Free and does not require any setup.
    zwt-wtÚregionÚmoderateÚ
safesearchÚyÚtimeé   Úmax_resultsÚautoÚbackendÚtextÚsourceÚforbid)ÚextraÚbefore)ÚmodeÚvaluesÚreturnc                 óD   — 	 ddl m} |S # t        $ r t        d«      ‚w xY w)z3Validate that python package exists in environment.r   ©ÚDDGSzSCould not import ddgs python package. Please install it with `pip install -U ddgs`.)Úddgsr   ÚImportError)Úclsr   r   s      úy/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/utilities/duckduckgo_search.pyÚvalidate_environmentz/DuckDuckGoSearchAPIWrapper.validate_environment,   s5   € ð	Ý!ð ˆøô ò 	Üð@óð ð	ús   ‚
 ŠNÚqueryc           	      ó(  — ddl m}  |«       5 }|j                  || j                  | j                  | j
                  |xs | j                  | j                  ¬«      }|r|D �cg c]  }|‘Œ c}cddd«       S 	 ddd«       g S c c}w # 1 sw Y   g S xY w)z<Run query through DuckDuckGo text search and return results.r   r   )r   r   Ú	timelimitr   r   N)r    r   r   r   r   r   r   r   ©Úselfr%   r   r   r    Úddgs_genÚrs          r#   Ú
_ddgs_textz%DuckDuckGoSearchAPIWrapper._ddgs_text9   s�   € õ 	áŒV�tØ—y‘yØØ—{‘{ØŸ?™?ØŸ)™)Ø'Ò;¨4×+;Ñ+;ØŸ™ð !ó ˆHñ Ù#+Ó,¡8˜aš 8Ñ,÷ ‰Vð ÷ ð ˆ	ùò -÷ ð ˆ	ús   ŽABÁ"	BÁ+BÂBÂBc           	      ó  — ddl m}  |«       5 }|j                  || j                  | j                  | j
                  |xs | j                  ¬«      }|r|D �cg c]  }|‘Œ c}cddd«       S 	 ddd«       g S c c}w # 1 sw Y   g S xY w)z<Run query through DuckDuckGo news search and return results.r   r   )r   r   r'   r   N)r    r   Únewsr   r   r   r   r(   s          r#   Ú
_ddgs_newsz%DuckDuckGoSearchAPIWrapper._ddgs_newsL   sˆ   € õ 	áŒV�tØ—y‘yØØ—{‘{ØŸ?™?ØŸ)™)Ø'Ò;¨4×+;Ñ+;ð !ó ˆHñ Ù#+Ó,¡8˜aš 8Ñ,÷ ‰Vð ÷ ð ˆ	ùò -÷ ð ˆ	ús   ŽA	A<Á	A7Á A<Á7A<Á<Bc                 óü   — ddl m}  |«       5 }|j                  || j                  | j                  |xs | j
                  ¬«      }|r|D �cg c]  }|‘Œ c}cddd«       S 	 ddd«       g S c c}w # 1 sw Y   g S xY w)z=Run query through DuckDuckGo image search and return results.r   r   )r   r   r   N)r    r   Úimagesr   r   r   r(   s          r#   Ú_ddgs_imagesz'DuckDuckGoSearchAPIWrapper._ddgs_images^   s�   € õ 	áŒV�tØ—{‘{ØØ—{‘{ØŸ?™?Ø'Ò;¨4×+;Ñ+;ð	 #ó ˆHñ Ù#+Ó,¡8˜aš 8Ñ,÷ ‰Vð ÷ ð ˆ	ùò -÷ ð ˆ	ús   Ž>A1Á	A,ÁA1Á,A1Á1A;c                 ó  — | j                   dk(  r| j                  |«      }nD| j                   dk(  r| j                  |«      }n#| j                   dk(  r| j                  |«      }ng }|sydj	                  d„ |D «       «      S )z=Run query through DuckDuckGo and return concatenated results.r   r.   r1   ú*No good DuckDuckGo Search Result was foundÚ c              3   ó&   K  — | ]	  }|d    –— Œ y­w)ÚbodyN© )Ú.0r+   s     r#   Ú	<genexpr>z1DuckDuckGoSearchAPIWrapper.run.<locals>.<genexpr>|   s   è ø€ Ð3©7 a˜˜&�	©7ùs   ‚)r   r,   r/   r2   Újoin)r)   r%   Úresultss      r#   ÚrunzDuckDuckGoSearchAPIWrapper.runo   sr   € à�;‰;˜&Ò Ø—o‘o eÓ,‰GØ�[‰[˜FÒ"Ø—o‘o eÓ,‰GØ�[‰[˜HÒ$Ø×'Ñ'¨Ó.‰GàˆGáØ?Ø�x‰xÑ3©7Ó3Ó3Ð3ó    c                 ó¸  — |xs | j                   }|dk(  r.| j                  ||¬«      D �cg c]  }|d   |d   |d   dœ‘Œ }}n€|dk(  r6| j                  ||¬«      D �cg c]  }|d   |d   |d   |d	   |d
   dœ‘Œ }}nE|dk(  r>| j                  ||¬«      D �cg c]!  }|d   |d   |d   |d   |d   |d   |d
   dœ‘Œ# }}ng }|€ddig}|S c c}w c c}w c c}w )aÃ  Run query through DuckDuckGo and return metadata.

        Args:
            query: The query to search for.
            max_results: The number of results to return.
            source: The source to look from.

        Returns:
            A list of dictionaries with the following keys:
                snippet - The description of the result.
                title - The title of the result.
                link - The link to the result.
        r   )r   r7   ÚtitleÚhref)Úsnippetr@   Úlinkr.   ÚurlÚdater   )rB   r@   rC   rE   r   r1   Ú	thumbnailÚimageÚheightÚwidth)r@   rF   rG   rD   rH   rI   r   ÚResultr4   )r   r,   r/   r2   )r)   r%   r   r   r+   r<   s         r#   r<   z"DuckDuckGoSearchAPIWrapper.results~   sd  € ð  Ò&˜4Ÿ;™;ˆØ�VÒð Ÿ™¨¸K˜ÔHóáH�Að ˜f™I°°'±
ÀAÀfÁIÓNØHð ñ ð �vÒð Ÿ™¨¸K˜ÔHó	ñ I�Að  ! ™yØ˜w™ZØ˜e™HØ˜f™IØ ™kóð Ið ñ 	ð �xÒð ×*Ñ*¨5¸kÐ*ÔJóñ K�Að ˜w™ZØ!" ;¡Ø˜w™ZØ˜U™8Ø ™kØ˜w™ZØ ™kóð Kð ñ ð ˆGàˆ?Ø Ð"NÐOÐPˆGàˆùòEùò
	ùòs   «CÁCÂ&C)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   r   r   Úintr   r   r   Úmodel_configr	   Úclassmethodr   r   r$   r   r,   r/   r2   r=   r<   r8   r>   r#   r   r      s•  … ñð
 $€FˆH�S‰MÓ#ðð !€J�Ó ðð €Dˆ(�3‰-Óðð €K�ÓØ€GˆSÓðð €FˆCÓðñ Øô€Lñ ˜(Ô#Øð	¨$ð 	°3ò 	ó ó $ð	ð 8<ñØðØ'/°¡}ðà	ˆd�3˜�8‰nÑ	óð( 8<ñØðØ'/°¡}ðà	ˆd�3˜�8‰nÑ	óð& 8<ñØðØ'/°¡}ðà	ˆd�3˜�8‰nÑ	óð"4˜ð 4 ó 4ð  EIñ4Øð4Ø'*ð4Ø4<¸S±Mð4à	ˆd�3˜�8‰nÑ	ô4r>   r   N)rN   Útypingr   r   r   r   Úpydanticr   r   r	   r   r8   r>   r#   Ú<module>rV      s&   ðñ÷ -Ó ,ç ;Ñ ;ôf õ fr>   