Ë
    µŒjb  ã                   ór   — 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y)	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#y)*Ú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                 ó*   — t        |dd«      }||d<   |S )z,Validate that api key exists in environment.r   ÚSERPER_API_KEYr   )Úclsr"   r   s      úu/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/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<   sL   € à.ˆt×.Ñ.Øð
à�w‰wØ�w‰wØ—‘Ø—‘ØŸ	™	ñ
ð ñ
ð 	
r)   c           	      óº   —  | j                   |f| j                  | j                  | j                  | j                  | j
                  dœ|¤Ž}| j                  |«      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Ñ1Øð
à�w‰wØ�w‰wØ—‘Ø—‘ØŸ	™	ñ
ð ñ
ˆð ×"Ñ" 7Ó+Ð+r)   c           	   ‹   ó¸   K  —  | j                   |f| j                  | j                  | j                  | j                  | j
                  dœ|¤Žƒ d{  –—† }|S 7 Œ­w)r-   ©r   r   r/   r0   r   N)Ú#_async_google_serper_search_resultsr   r   r   r   r   r6   s       r'   ÚaresultszGoogleSerperAPIWrapper.aresultsV   s^   è ø€ à@˜×@Ñ@Øð
à�w‰wØ�w‰wØ—‘ØŸ	™	Ø—‘ñ
ð ñ
÷ 
ˆð ˆð
ús   ‚AAÁAÁAc           	   ‹   óÖ   K  —  | j                   |f| j                  | j                  | j                  | j                  | j
                  dœ|¤Žƒ d{  –—† }| j                  |«      S 7 Œ­w)z6Run query through GoogleSearch and parse result async.r9   N)r:   r   r   r   r   r   r5   r6   s       r'   ÚarunzGoogleSerperAPIWrapper.arunc   sj   è ø€ à@˜×@Ñ@Øð
à�w‰wØ�w‰wØ—‘ØŸ	™	Ø—‘ñ
ð ñ
÷ 
ˆð ×"Ñ" 7Ó+Ð+ð
ús   ‚AA)ÁA'ÁA)r3   c           	      óô  — g }|j                  d«      rŠ|j                  di «      }|j                  d«      r|j                  d«      gS |j                  d«      r"|j                  d«      j                  dd«      gS |j                  d«      r|j                  d«      S |j                  d«      r³|j                  di «      }|j                  d«      }|j                  d	«      }|r|j                  |› d
|› d�«       |j                  d«      }|r|j                  |«       |j                  di «      j                  «       D ]  \  }}	|j                  |› d|› d
|	› d�«       Œ! || j                  | j
                        d | j                   D ]Y  }
d|
v r|j                  |
d   «       |
j                  di «      j                  «       D ]  \  }}	|j                  |› d
|	› d�«       Œ Œ[ t        |«      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   sÛ  € Øˆà�;‰;�{Ô#Ø Ÿ™ [°"Ó5ˆJØ�~‰~˜hÔ'Ø"Ÿ™ xÓ0Ð1Ð1Ø—‘ 	Ô*Ø"Ÿ™ yÓ1×9Ñ9¸$ÀÓDÐEÐEØ—‘Ð 4Ô5Ø!—~‘~Ð&:Ó;Ð;à�;‰;Ð'Ô(Ø—‘Ð-¨rÓ2ˆBØ—F‘F˜7“OˆEØŸ&™& ›.ˆKÙØ—‘ 5 '¨¨K¨=¸Ð :Ô;ØŸ&™& Ó/ˆKÙØ—‘ Ô,Ø$&§F¡F¨<¸Ó$<×$BÑ$BÖ$DÑ �	˜5Ø—‘ 5 '¨¨9¨+°R¸°w¸aÐ @ÕAð %Eð ˜d×6Ñ6°t·y±yÑAÑBÀ8ÀTÇVÁVÓLˆFØ˜FÑ"Ø—‘  yÑ 1Ô2Ø$*§J¡J¨|¸RÓ$@×$FÑ$FÖ$HÑ �	˜5Ø—‘ 9 +¨R°¨w°aÐ 8Õ9ñ %Ið Mô ˆx‹=˜AÒØ<Ð=Ð=Øˆr)   c                 óB   — dj                  | j                  |«      «      S )NrC   )ÚjoinrV   )r2   r3   s     r'   r5   z%GoogleSerperAPIWrapper._parse_results“   s   € Ø�x‰x˜×,Ñ,¨WÓ5Ó6Ð6r)   Úsearch_termr0   c                 ó  — | j                   xs dddœ}d|i|j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}¥}t        j                  d|› �||¬«      }|j	                  «        |j                  «       }	|	S c c}}w )NÚ úapplication/json©z	X-API-KEYzContent-TypeÚqúhttps://google.serper.dev/)ÚheadersÚparams)r   rM   ÚrequestsÚpostÚraise_for_statusÚjson)
r2   rY   r0   r+   r`   ÚkeyrT   ra   ÚresponseÚsearch_resultss
             r'   r1   z1GoogleSerperAPIWrapper._google_serper_api_results–   s˜   € ð ×,Ñ,Ò2°Ø.ñ
ˆð
 �ð
à,2¯L©L¬NÔP©N™j˜c 5¸eÑ>Oˆs�E‰z¨NÒPð
ˆô —=‘=Ø(¨¨Ð6ÀÐPVô
ˆð 	×!Ñ!Ô#Ø!Ÿ™›ˆØÐùó Qs
   ª
A<µA<c              ‹   óä  K  — | j                   xs dddœ}d|› �}d|i|j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}¥}| j                  sut        j                  «       4 ƒd {  –—† }	|	j                  |||d¬«      4 ƒd {  –—† }
|
j                  «       ƒ d {  –—† }d d d «      ƒd {  –—†  d d d «      ƒd {  –—†  S | j                  j                  |||d¬«      4 ƒd {  –—† }
|
j                  «       ƒ d {  –—† }d d d «      ƒd {  –—†  |S c c}}w 7 Œ´7 Œ˜7 Œ‚7 Œt# 1 ƒd {  –—†7  sw Y   Œ„xY w7 Œ{# 1 ƒd {  –—†7  sw Y   S xY w7 Œi7 ŒS7 ŒE# 1 ƒd {  –—†7  sw Y   S xY w­w)	Nr[   r\   r]   r_   r^   F)ra   r`   rd   T)r   rM   r   ÚaiohttpÚClientSessionrc   re   )r2   rY   r0   r+   r`   Úurlrf   rT   ra   Úsessionrg   rh   s               r'   r:   z:GoogleSerperAPIWrapper._async_google_serper_search_results¨   s�  è ø€ ð ×,Ñ,Ò2°Ø.ñ
ˆð +¨;¨-Ð8ˆà�ð
à,2¯L©L¬NÔP©N™j˜c 5¸eÑ>Oˆs�E‰z¨NÒPð
ˆð
 �ŠÜ×,Ñ,×.Ô.°'Ø"Ÿ<™<Ø °È%ð (÷ ô àØ+3¯=©=«?×%:�N÷÷ ÷ /×.ð Ðð —‘×+Ñ+Ø˜F¨GÀdð ,÷ ô àØ'/§}¡}£×!6�÷÷ ð
 Ðùó Qð /øðøð &;øðø÷ ÷ ñ úð /ø×.×.Ð.ð Ðúðøð "7øðø÷ ÷ ð ð
 Ðüs  ‚/E0±
D¼DÁ)E0Á*DÁ+E0Á.D>ÂD!Â	D>ÂD'Â D#Â!D'Â%D>Â0D%Â1D>Â5E0Ã D<Ã)E0Ã*EÃ+E0Ã.EÄEÄEÄE0ÄEÄE0Ä!D>Ä#D'Ä%D>Ä'D9	Ä-D0Ä.D9	Ä5D>Ä<E0Ä>EÅEÅEÅ	E0ÅEÅE0ÅE-Å E#Å!E-Å(E0)r   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚ__annotations__r   Ústrr   r   r   r   Údictr   r   r   r   rj   rk   r
   Úmodel_configr   Úclassmethodr   r   r(   r3   r7   r;   r=   r   rV   r5   r1   r:   © r)   r'   r   r      s¨  … ñð €A€sƒKØ€BˆƒNØ€BˆƒNð ;C€Dˆ'Ð6Ñ
7ÓBàØØØñ	!Ð˜ó ð €Cˆ�#‰ÓØ$(€N�H˜S‘MÓ(Ø26€J�˜×.Ñ.Ñ/Ó6áØ $ô€Lñ ˜(Ô#Øð¨$ð °3ò ó ó $ðð

˜Sð 

¨Cð 

°Dó 

ð,˜ð ,¨ð ,°ó ,ð Cð °3ð ¸4ó ð, ð ,¨sð ,°só ,ð  tð  °°S±	ó  ðD7 dð 7¨só 7ð 4<ñØðØ-0ðØGJðà	óð& 4<ñØðØ-0ðØGJðà	ôr)   r   )rq   Útypingr   r   r   r   rj   rb   Úlangchain_core.utilsr   Úpydanticr	   r
   r   Útyping_extensionsr   r   rx   r)   r'   Ú<module>r}      s.   ðÙ =ç ,Ó ,ã Û Ý 5ß ;Ñ ;Ý %ôu˜Yõ ur)   