§
    šŠtjb  ã                   óz   — d Z ddlmZmZmZmZ ddlZddlZddlm	Z	 ddl
mZmZmZ ddlmZ  G d„ de¦  «        ZdS )	z7Util that calls Google Search using the Serper.dev API.é    )ÚAnyÚDictÚListÚOptionalN©Úget_from_dict_or_env)Ú	BaseModelÚ
ConfigDictÚmodel_validator)ÚLiteralc            	       óØ  — e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
ed	         ed
<   dddddœZeed<   dZee         ed<   dZee         ed<   dZeej                 ed<    ed¬¦  «        Z ed¬¦  «        ededefd„¦   «         ¦   «         Zdededefd„Zdededefd„Zdededefd „Zdededefd!„Zd"edee         fd#„Z d"edefd$„Z!	 d)d%ed&ededefd'„Z"	 d)d%ed&ededefd(„Z#dS )*ÚGoogleSerperAPIWrapperaÉ  Wrapper around the Serper.dev Google Search API.

    You can create a free API key at https://serper.dev.

    To use, you should have the environment variable ``SERPER_API_KEY``
    set with your API key, or pass `serper_api_key` as a named parameter
    to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.utilities import GoogleSerperAPIWrapper
            google_serper = GoogleSerperAPIWrapper()
    é
   ÚkÚusÚglÚenÚhlÚsearch)Únewsr   ÚplacesÚimagesÚtyper   r   r   Úorganic)r   r   r   r   Úresult_key_for_typeNÚtbsÚserper_api_keyÚ
aiosessionT)Úarbitrary_types_allowedÚbefore)ÚmodeÚvaluesÚreturnc                 ó2   — t          |dd¦  «        }||d<   |S )z,Validate that api key exists in environment.r   ÚSERPER_API_KEYr   )Úclsr"   r   s      úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/google_serper.pyÚvalidate_environmentz+GoogleSerperAPIWrapper.validate_environment1   s.   € õ .ØÐ$Ð&6ñ
ô 
ˆð $2ˆÐÑ àˆó    ÚqueryÚkwargsc           	      ó\   —  | j         |f| j        | j        | j        | j        | j        dœ|¤ŽS )úRun query through GoogleSearch.©r   r   Únumr   Úsearch_type)Ú_google_serper_api_resultsr   r   r   r   r   )Úselfr*   r+   s      r'   ÚresultszGoogleSerperAPIWrapper.results<   sI   € à.ˆtÔ.Øð
àŒwØŒwØ”Ø”Øœ	ð
ð 
ð ð
ð 
ð 	
r)   c           	      ó†   —  | j         |f| j        | j        | j        | j        | j        dœ|¤Ž}|                      |¦  «        S )z0Run query through GoogleSearch and parse result.r.   )r1   r   r   r   r   r   Ú_parse_results©r2   r*   r+   r3   s       r'   ÚrunzGoogleSerperAPIWrapper.runH   s\   € à1�$Ô1Øð
àŒwØŒwØ”Ø”Øœ	ð
ð 
ð ð
ð 
ˆð ×"Ò" 7Ñ+Ô+Ð+r)   c           	   ‹   óp   K  —  | j         |f| j        | j        | j        | j        | j        dœ|¤Žƒ d{V —†}|S )r-   ©r   r   r/   r0   r   N)Ú#_async_google_serper_search_resultsr   r   r   r   r   r6   s       r'   ÚaresultszGoogleSerperAPIWrapper.aresultsV   so   è è € à@˜Ô@Øð
àŒwØŒwØ”Øœ	Ø”ð
ð 
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˆr)   c           	   ‹   ó–   K  —  | j         |f| j        | j        | j        | j        | j        dœ|¤Žƒ d{V —†}|                      |¦  «        S )z6Run query through GoogleSearch and parse result async.r9   N)r:   r   r   r   r   r   r5   r6   s       r'   ÚarunzGoogleSerperAPIWrapper.arunc   s~   è è € à@˜Ô@Øð
àŒwØŒwØ”Øœ	Ø”ð
ð 
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ×"Ò" 7Ñ+Ô+Ð+r)   r3   c           	      ó¨  — g }|                      d¦  «        rª|                      di ¦  «        }|                      d¦  «        r|                      d¦  «        gS |                      d¦  «        r*|                      d¦  «                             dd¦  «        gS |                      d¦  «        r|                      d¦  «        S |                      d¦  «        rÕ|                      di ¦  «        }|                      d¦  «        }|                      d	¦  «        }|r|                     |› d
|› d�¦  «         |                      d¦  «        }|r|                     |¦  «         |                      di ¦  «                             ¦   «         D ]#\  }}	|                     |› d|› d
|	› d�¦  «         Œ$|| j        | j                          d | j        …         D ]j}
d|
v r|                     |
d         ¦  «         |
                      di ¦  «                             ¦   «         D ] \  }}	|                     |› d
|	› d�¦  «         Œ!Œkt          |¦  «        dk    rdgS |S )NÚ	answerBoxÚanswerÚsnippetú
ú ÚsnippetHighlightedÚknowledgeGraphÚtitler   z: ú.ÚdescriptionÚ
attributesr   z&No good Google Search Result was found)ÚgetÚreplaceÚappendÚitemsr   r   r   Úlen)r2   r3   ÚsnippetsÚ
answer_boxÚkgrF   Úentity_typerH   Ú	attributeÚvalueÚresults              r'   Ú_parse_snippetsz&GoogleSerperAPIWrapper._parse_snippetsq   sy  € Øˆà�;Š;�{Ñ#Ô#ð 	<Ø Ÿš [°"Ñ5Ô5ˆJØ�~Š~˜hÑ'Ô'ð <Ø"Ÿš xÑ0Ô0Ð1Ð1Ø—’ 	Ñ*Ô*ð <Ø"Ÿš yÑ1Ô1×9Ò9¸$ÀÑDÔDÐEÐEØ—’Ð 4Ñ5Ô5ð <Ø!—~’~Ð&:Ñ;Ô;Ð;à�;Š;Ð'Ñ(Ô(ð 
	BØ—’Ð-¨rÑ2Ô2ˆBØ—F’F˜7‘O”OˆEØŸ&š& ™.œ.ˆKØð <Ø—’ 5Ð :Ð :¨KÐ :Ð :Ð :Ñ;Ô;Ð;ØŸ&š& Ñ/Ô/ˆKØð -Ø—’ Ñ,Ô,Ð,Ø$&§F¢F¨<¸Ñ$<Ô$<×$BÒ$BÑ$DÔ$Dð Bð BÑ �	˜5Ø—’ 5Ð @Ð @¨9Ð @Ð @¸Ð @Ð @Ð @ÑAÔAÐAÐAà˜dÔ6°t´yÔAÔBÀ8ÀTÄVÀ8ÔLð 	:ð 	:ˆFØ˜FÐ"Ð"Ø—’  yÔ 1Ñ2Ô2Ð2Ø$*§J¢J¨|¸RÑ$@Ô$@×$FÒ$FÑ$HÔ$Hð :ð :Ñ �	˜5Ø—’ 9Ð 8Ð 8°Ð 8Ð 8Ð 8Ñ9Ô9Ð9Ð9ð:õ ˆx‰=Œ=˜AÒÐØ<Ð=Ð=Øˆr)   c                 óR   — d                      |                      |¦  «        ¦  «        S )NrC   )ÚjoinrV   )r2   r3   s     r'   r5   z%GoogleSerperAPIWrapper._parse_results“   s"   € Ø�xŠx˜×,Ò,¨WÑ5Ô5Ñ6Ô6Ð6r)   Úsearch_termr0   c                 óæ   — | j         pdddœ}d|id„ |                     ¦   «         D ¦   «         ¥}t          j        d|› �||¬¦  «        }|                     ¦   «          |                     ¦   «         }|S )NÚ úapplication/json©z	X-API-KEYzContent-TypeÚqc                 ó   — i | ]
\  }}|®||“ŒS ©N© ©Ú.0ÚkeyrT   s      r'   ú
<dictcomp>zEGoogleSerperAPIWrapper._google_serper_api_results.<locals>.<dictcomp>Ÿ   ó#   € ÐPÐPÐP™j˜c 5¸eÐ>Oˆs�EÐ>OÐ>OÐ>Or)   úhttps://google.serper.dev/)ÚheadersÚparams)r   rM   ÚrequestsÚpostÚraise_for_statusÚjson)r2   rY   r0   r+   rh   ri   ÚresponseÚsearch_resultss           r'   r1   z1GoogleSerperAPIWrapper._google_serper_api_results–   s™   € ð Ô,Ð2°Ø.ð
ð 
ˆð
 �ð
àPÐP¨F¯LªL©N¬NÐPÑPÔPð
ˆõ ”=Ø6¨Ð6Ð6ÀÐPVð
ñ 
ô 
ˆð 	×!Ò!Ñ#Ô#Ð#Ø!Ÿš™œˆØÐr)   c              ‹   ó|  K  — | j         pdddœ}d|› �}d|id„ |                     ¦   «         D ¦   «         ¥}| j        sœt          j        ¦   «         4 ƒd {V —†}|                     |||d¬¦  «        4 ƒd {V —†	 }|                     ¦   «         ƒ d {V —†}	d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   nc| j                             |||d	¬¦  «        4 ƒd {V —†	 }|                     ¦   «         ƒ d {V —†}	d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |	S )
Nr[   r\   r]   rg   r^   c                 ó   — i | ]
\  }}|®||“ŒS r`   ra   rb   s      r'   re   zNGoogleSerperAPIWrapper._async_google_serper_search_results.<locals>.<dictcomp>²   rf   r)   F)ri   rh   rl   T)r   rM   r   ÚaiohttpÚClientSessionrk   rm   )
r2   rY   r0   r+   rh   Úurlri   Úsessionrn   ro   s
             r'   r:   z:GoogleSerperAPIWrapper._async_google_serper_search_results¨   s  è è € ð Ô,Ð2°Ø.ð
ð 
ˆð 9¨;Ð8Ð8ˆà�ð
àPÐP¨F¯LªL©N¬NÐPÑPÔPð
ˆð
 Œð 
	7ÝÔ,Ñ.Ô.ð ;ð ;ð ;ð ;ð ;ð ;ð ;°'Ø"Ÿ<š<Ø °È%ð (ñ ô ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;àØ+3¯=ª=©?¬?Ð%:Ð%:Ð%:Ð%:Ð%:Ð%:�Nð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;øð ”×+Ò+Ø˜F¨GÀdð ,ñ ô ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7àØ'/§}¢}¡¤Ð!6Ð!6Ð!6Ð!6Ð!6Ð!6�ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð
 ÐsH   Á CÁ7B$ÂCÂ$
B.	Â.CÂ1B.	Â2CÃ
CÃCÃ>D+Ä+
D5Ä8D5)r   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚ__annotations__r   Ústrr   r   r   r   Údictr   r   r   r   rr   rs   r
   Úmodel_configr   Úclassmethodr   r   r(   r3   r7   r;   r=   r   rV   r5   r1   r:   ra   r)   r'   r   r      s–  € € € € € € ðð ð €A€s€K€K�KØ€Bˆ€N€N�NØ€Bˆ€N€N�Nð ;C€Dˆ'Ð6Ô
7ÐBÐBÑBàØØØð	!ð !Ð˜ð ð ñ ð €Cˆ�#ŒÐÐÑØ$(€N�H˜S”MÐ(Ð(Ñ(Ø26€J�˜Ô.Ô/Ð6Ð6Ñ6à�:Ø $ðñ ô €Lð €_˜(Ð#Ñ#Ô#Øð¨$ð °3ð ð ð ñ „[ñ $Ô#ðð

˜Sð 

¨Cð 

°Dð 

ð 

ð 

ð 

ð,˜ð ,¨ð ,°ð ,ð ,ð ,ð ,ð Cð °3ð ¸4ð ð ð ð ð, ð ,¨sð ,°sð ,ð ,ð ,ð ,ð  tð  °°S´	ð  ð  ð  ð  ðD7 dð 7¨sð 7ð 7ð 7ð 7ð 4<ðð ØðØ-0ðØGJðà	ðð ð ð ð& 4<ðð ØðØ-0ðØGJðà	ðð ð ð ð ð r)   r   )ry   Útypingr   r   r   r   rr   rj   Úlangchain_core.utilsr   Úpydanticr	   r
   r   Útyping_extensionsr   r   ra   r)   r'   ú<module>r„      sÁ   ðØ =Ð =à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø %Ð %Ð %Ð %Ð %Ð %ðuð uð uð uð u˜Yñ uô uð uð uð ur)   