§
    æ˜ºhÖ  ã                   óN   — d Z ddl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/
é    )ÚDictÚListÚOptional)Ú	BaseModelÚExtraÚroot_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<    G d„ d¦  «        Z 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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ÚapiÚbackendÚtextÚsourcec                   ó    — e Zd ZdZej        ZdS )ú!DuckDuckGoSearchAPIWrapper.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextra© ó    úw/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/utilities/duckduckgo_search.pyÚConfigr      s   € € € € € Ø5Ð5à”ˆˆˆr   r!   Ú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   ©ÚDDGSzmCould not import duckduckgo-search python package. Please install it with `pip install -U duckduckgo-search`.)Úduckduckgo_searchr&   ÚImportError)Úclsr"   r&   s      r    Úvalidate_environmentz/DuckDuckGoSearchAPIWrapper.validate_environment   sV   € ð	Ø.Ð.Ð.Ð.Ð.Ð.Ð.øÝð 	ð 	ð 	ÝðMñô ð ð	øøøð
 ˆ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   r   ©Ú.0Úrs     r    ú
<listcomp>z9DuckDuckGoSearchAPIWrapper._ddgs_text.<locals>.<listcomp>9   ó   € Ð,Ð,Ð,˜a˜Ð,Ð,Ð,r   N)r'   r&   r   r   r   r   r   r   ©Úselfr+   r   r&   ÚddgsÚddgs_gens         r    Ú
_ddgs_textz%DuckDuckGoSearchAPIWrapper._ddgs_text)   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    r2   z9DuckDuckGoSearchAPIWrapper._ddgs_news.<locals>.<listcomp>K   r3   r   N)r'   r&   Únewsr   r   r   r   r4   s         r    Ú
_ddgs_newsz%DuckDuckGoSearchAPIWrapper._ddgs_news<   sø   € ð 	+Ð*Ð*Ð*Ð*Ð*àˆT‰VŒVð 		-�tØ—y’yØØ”{Øœ?Øœ)Ø'Ð;¨4Ô+;ð !ñ ô ˆHð ð -Ø,Ð, 8Ð,Ñ,Ô,ð		-ð 		-ð 		-ð 		-ñ 		-ô 		-ð 		-ð 		-ð-ð		-ð 		-ð 		-ñ 		-ô 		-ð 		-ð 		-ð 		-ð 		-ð 		-ð 		-øøøð 		-ð 		-ð 		-ð 		-ð ˆ	s   ‘>A)Á)A-Á0A-c                 óÐ   — | 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   r;   ú*No good DuckDuckGo Search Result was foundú c              3   ó&   K  — | ]}|d          V — ŒdS )ÚbodyNr   r/   s     r    ú	<genexpr>z1DuckDuckGoSearchAPIWrapper.run.<locals>.<genexpr>Y   s&   è è € Ð3Ð3 a˜˜&œ	Ð3Ð3Ð3Ð3Ð3Ð3r   )r   r8   r<   Újoin)r5   r+   Úresultss      r    ÚrunzDuckDuckGoSearchAPIWrapper.runN   sw   € àŒ;˜&Ò Ð Ø—o’o eÑ,Ô,ˆGˆGØŒ[˜FÒ"Ð"Ø—o’o eÑ,Ô,ˆGˆGàˆGàð 	@Ø?Ð?Ø�xŠxÐ3Ð3¨7Ð3Ñ3Ô3Ñ3Ô3Ð3r   c                 óÊ   — |p| j         }|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 )rA   ÚtitleÚhref)ÚsnippetrH   Úlinkr   r/   s     r    r2   z6DuckDuckGoSearchAPIWrapper.results.<locals>.<listcomp>m   s>   € ð ð ð àð ˜fœI°°'´
ÀAÀfÄIÐNÐNðð ð r   )r   r;   c                 óZ   — g | ](}|d          |d         |d         |d         |d         dœ‘Œ)S )rA   rH   ÚurlÚdater   )rJ   rH   rK   rN   r   r   r/   s     r    r2   z6DuckDuckGoSearchAPIWrapper.results.<locals>.<listcomp>r   sT   € ð 	ð 	ð 	ð ð  ! œyØ˜wœZØ˜eœHØ˜fœIØ œkðð ð	ð 	ð 	r   NÚResultr>   )r   r8   r<   )r5   r+   r   r   rD   s        r    rD   z"DuckDuckGoSearchAPIWrapper.results[   s©   € ð  Ð&˜4œ;ˆØ�VÒÐðð àŸš¨¸K˜ÑHÔHðñ ô ˆGˆGð �vÒÐð	ð 	ð Ÿš¨¸K˜ÑHÔHð	ñ 	ô 	ˆGˆGð ˆGàˆ?Ø Ð"NÐOÐPˆGàˆr   )N)r   r   r   r   r   r   ÚstrÚ__annotations__r   r   r   Úintr   r   r!   r   r   r*   r   r8   r<   rE   rD   r   r   r    r
   r
      sê  € € € € € € ðð ð
 $€FˆH�SŒMÐ#Ð#Ñ#Ø €J�Ð Ð Ñ Ø€Dˆ(�3Œ-ÐÐÑØ€K�ÐÐÑØ€GˆSÐÐÑØ€FˆCÐÐÑðð ð ð ð ñ ô ð ð
 €^ÑÔð	¨$ð 	°4ð 	ð 	ð 	ñ Ôð	ð 8<ðð ØðØ'/°¤}ðà	ˆd�3˜�8ŒnÔ	ðð ð ð ð( 8<ðð ØðØ'/°¤}ðà	ˆd�3˜�8ŒnÔ	ðð ð ð ð$4˜ð 4 ð 4ð 4ð 4ð 4ð EIð'ð 'Øð'Ø'*ð'Ø4<¸S´Mð'à	ˆd�3˜�8ŒnÔ	ð'ð 'ð 'ð 'ð 'ð 'r   r
   N)
r   Útypingr   r   r   Úlangchain_core.pydantic_v1r   r   r   r
   r   r   r    ú<module>rU      s‹   ððð ð
 (Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðwð wð wð wð w ñ wô wð wð wð wr   