§
    šŠtjm  ã                   óR   — 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
dS )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dS )Ú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                 óP   — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY w|S )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      úm/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/duckduckgo_search.pyÚvalidate_environmentz/DuckDuckGoSearchAPIWrapper.validate_environment,   sV   € ð	Ø!Ð!Ð!Ð!Ð!Ð!Ð!øÝð 	ð 	ð 	Ýð@ñô ð ð	øøøð
 ˆs   ‚	 ‰#NÚqueryc           	      óø   — ddl m}  |¦   «         5 }|                     || j        | j        | j        |p| j        | j        ¬¦  «        }|rd„ |D ¦   «         cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   g S )z<Run query through DuckDuckGo text search and return results.r   r   )r   r   Ú	timelimitr   r   c                 ó   — g | ]}|‘ŒS © r)   ©Ú.0Úrs     r#   ú
<listcomp>z9DuckDuckGoSearchAPIWrapper._ddgs_text.<locals>.<listcomp>I   ó   € Ð,Ð,Ð,˜a˜Ð,Ð,Ð,ó    N)r    r   r   r   r   r   r   r   ©Úselfr%   r   r   r    Úddgs_gens         r#   Ú
_ddgs_textz%DuckDuckGoSearchAPIWrapper._ddgs_text9   sý   € ð 	ÐÐÐÐÐàˆT‰VŒVð 
	-�tØ—y’yØØ”{Øœ?Øœ)Ø'Ð;¨4Ô+;Øœð !ñ ô ˆHð ð -Ø,Ð, 8Ð,Ñ,Ô,ð
	-ð 
	-ð 
	-ð 
	-ñ 
	-ô 
	-ð 
	-ð 
	-ð-ð
	-ð 
	-ð 
	-ñ 
	-ô 
	-ð 
	-ð 
	-ð 
	-ð 
	-ð 
	-ð 
	-øøøð 
	-ð 
	-ð 
	-ð 
	-ð ˆ	s   ‘AA/Á/A3Á6A3c                 óì   — ddl m}  |¦   «         5 }|                     || j        | j        | j        |p| j        ¬¦  «        }|rd„ |D ¦   «         cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   g S )z<Run query through DuckDuckGo news search and return results.r   r   )r   r   r'   r   c                 ó   — g | ]}|‘ŒS r)   r)   r*   s     r#   r-   z9DuckDuckGoSearchAPIWrapper._ddgs_news.<locals>.<listcomp>[   r.   r/   N)r    r   Únewsr   r   r   r   r0   s         r#   Ú
_ddgs_newsz%DuckDuckGoSearchAPIWrapper._ddgs_newsL   sø   € ð 	ÐÐÐÐÐàˆT‰VŒVð 		-�tØ—y’yØØ”{Øœ?Øœ)Ø'Ð;¨4Ô+;ð !ñ ô ˆHð ð -Ø,Ð, 8Ð,Ñ,Ô,ð		-ð 		-ð 		-ð 		-ñ 		-ô 		-ð 		-ð 		-ð-ð		-ð 		-ð 		-ñ 		-ô 		-ð 		-ð 		-ð 		-ð 		-ð 		-ð 		-øøøð 		-ð 		-ð 		-ð 		-ð ˆ	s   ‘>A)Á)A-Á0A-c                 óà   — ddl m}  |¦   «         5 }|                     || j        | j        |p| j        ¬¦  «        }|rd„ |D ¦   «         cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   g S )z=Run query through DuckDuckGo image search and return results.r   r   )r   r   r   c                 ó   — g | ]}|‘ŒS r)   r)   r*   s     r#   r-   z;DuckDuckGoSearchAPIWrapper._ddgs_images.<locals>.<listcomp>l   r.   r/   N)r    r   Úimagesr   r   r   r0   s         r#   Ú_ddgs_imagesz'DuckDuckGoSearchAPIWrapper._ddgs_images^   só   € ð 	ÐÐÐÐÐàˆT‰VŒVð 	-�tØ—{’{ØØ”{Øœ?Ø'Ð;¨4Ô+;ð	 #ñ ô ˆHð ð -Ø,Ð, 8Ð,Ñ,Ô,ð	-ð 	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð-ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð ˆ	s   ‘8A#Á#A'Á*A'c                 ó  — | j         dk    r|                      |¦  «        }nD| j         dk    r|                      |¦  «        }n#| j         dk    r|                      |¦  «        }ng }|sdS d                     d„ |D ¦   «         ¦  «        S )z=Run query through DuckDuckGo and return concatenated results.r   r6   r:   ú*No good DuckDuckGo Search Result was foundú c              3   ó&   K  — | ]}|d          V — ŒdS )ÚbodyNr)   r*   s     r#   ú	<genexpr>z1DuckDuckGoSearchAPIWrapper.run.<locals>.<genexpr>|   s&   è è € Ð3Ð3 a˜˜&œ	Ð3Ð3Ð3Ð3Ð3Ð3r/   )r   r3   r7   r;   Újoin)r1   r%   Úresultss      r#   ÚrunzDuckDuckGoSearchAPIWrapper.runo   s™   € àŒ;˜&Ò Ð Ø—o’o eÑ,Ô,ˆGˆGØŒ[˜FÒ"Ð"Ø—o’o eÑ,Ô,ˆGˆGØŒ[˜HÒ$Ð$Ø×'Ò'¨Ñ.Ô.ˆGˆGàˆGàð 	@Ø?Ð?Ø�xŠxÐ3Ð3¨7Ð3Ñ3Ô3Ñ3Ô3Ð3r/   c                 ó  — |p| j         }|dk    r"d„ |                      ||¬¦  «        D ¦   «         }nR|dk    r"d„ |                      ||¬¦  «        D ¦   «         }n*|dk    r"d„ |                      ||¬¦  «        D ¦   «         }ng }|€d	d
ig}|S )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   c                 ó>   — g | ]}|d          |d         |d         dœ‘ŒS )r@   ÚtitleÚhref)ÚsnippetrG   Úlinkr)   r*   s     r#   r-   z6DuckDuckGoSearchAPIWrapper.results.<locals>.<listcomp>�   s>   € ð ð ð àð ˜fœI°°'´
ÀAÀfÄIÐNÐNðð ð r/   )r   r6   c                 óZ   — g | ](}|d          |d         |d         |d         |d         dœ‘Œ)S )r@   rG   ÚurlÚdater   )rI   rG   rJ   rM   r   r)   r*   s     r#   r-   z6DuckDuckGoSearchAPIWrapper.results.<locals>.<listcomp>•   sT   € ð 	ð 	ð 	ð ð  ! œyØ˜wœZØ˜eœHØ˜fœIØ œkðð ð	ð 	ð 	r/   r:   c           
      óv   — g | ]6}|d          |d         |d         |d         |d         |d         |d         dœ‘Œ7S )rG   Ú	thumbnailÚimagerL   ÚheightÚwidthr   )rG   rO   rP   rL   rQ   rR   r   r)   r*   s     r#   r-   z6DuckDuckGoSearchAPIWrapper.results.<locals>.<listcomp>    sb   € ð ð ð ð ð ˜wœZØ!" ;¤Ø˜wœZØ˜Uœ8Ø œkØ˜wœZØ œkðð ðð ð r/   NÚResultr=   )r   r3   r7   r;   )r1   r%   r   r   rC   s        r#   rC   z"DuckDuckGoSearchAPIWrapper.results~   së   € ð  Ð&˜4œ;ˆØ�VÒÐðð àŸš¨¸K˜ÑHÔHðñ ô ˆGˆGð �vÒÐð	ð 	ð Ÿš¨¸K˜ÑHÔHð	ñ 	ô 	ˆGˆGð �xÒÐðð ð ×*Ò*¨5¸kÐ*ÑJÔJðñ ô ˆGˆGð ˆGàˆ?Ø Ð"NÐOÐPˆGàˆr/   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   r   r   Úintr   r   r   Úmodel_configr	   Úclassmethodr   r   r$   r   r3   r7   r;   rD   rC   r)   r/   r#   r   r      sT  € € € € € € ðð ð
 $€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ð 4ð 4ð 4ð  EIð4ð 4Øð4Ø'*ð4Ø4<¸S´Mð4à	ˆd�3˜�8ŒnÔ	ð4ð 4ð 4ð 4ð 4ð 4r/   r   N)rW   Útypingr   r   r   r   Úpydanticr   r   r	   r   r)   r/   r#   ú<module>r_      s‘   ððð ð -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðfð fð fð fð f ñ fô fð fð fð fr/   