Ë
    µŒjÖ'  ã                   óæ   — d Z ddlZddlmZ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 ddlmZmZmZ ddlmZ dZ G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)zUtil that calls you.com Search API.

In order to set this up, follow instructions at:
https://documentation.you.com/quickstart
é    N)ÚAnyÚDictÚListÚLiteralÚOptional)ÚDocument©Úget_from_dict_or_env)Ú	BaseModelÚFieldÚmodel_validator)ÚSelfzhttps://api.ydc-index.ioc                   ó‚   — e Zd ZU dZ ed¬«      Zeed<    ed¬«      Zeed<    ed¬«      Z	eed<    ed	¬«      Z
eed
<   y)ÚYouHitMetadataz%Metadata on a single hit from you.comzThe title of the result©ÚdescriptionÚtitlezThe url of the resultÚurlz$Thumbnail associated with the resultÚthumbnail_urlzDetails about the resultr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   r   r   © ó    úk/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/utilities/you.pyr   r      sE   … Ù/áÐ#<Ô=€Eˆ3Ó=ÙÐ!8Ô9€CˆÓ9ÙÐ+QÔR€M�3ÓRÙÐ)CÔD€K�ÔDr   r   c                   ó4   — e Zd ZU dZ ed¬«      Zee   ed<   y)ÚYouHitz>A single hit from you.com, which may contain multiple snippetszOne or snippets of textr   ÚsnippetsN)	r   r   r   r   r   r!   r   r   r   r   r   r   r    r       s   … ÙHáÐ,EÔF€Hˆd�3‰iÔFr   r    c                   ó4   — e Zd ZU dZ ed¬«      Zee   ed<   y)ÚYouAPIOutputzOutput from you.com API.z-A list of dictionaries containing the resultsr   ÚhitsN)	r   r   r   r   r   r$   r   r    r   r   r   r   r#   r#   #   s   … Ù"áØCô€Dˆ$ˆv‰,ô r   r#   c                   ó8   — e Zd ZU dZ ed¬«      Zeed<   eed<   y)ÚYouDocumentzOutput of parsing one snippet.zOne snippet of textr   Úpage_contentÚmetadataN)	r   r   r   r   r   r'   r   r   r   r   r   r   r&   r&   +   s   … Ù(áÐ*?Ô@€L�#Ó@ØÔr   r&   c                   óô  — e Zd ZU dZdZee   ed<   dZe	d   ed<   dZ
ee   ed<   dZee	d      ed	<   dZee   ed
<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<    ed¬«      ededefd„«       «       Z ed¬«      defd„«       Z ed¬«      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defd„Z!dededee   fd„Z"dededefd „Z#dededee   fd!„Z$y)"ÚYouSearchAPIWrapperaf  Wrapper for you.com Search and News API.

    To connect to the You.com api requires an API key which
    you can get at https://api.you.com.
    You can check out the docs at https://documentation.you.com/api-reference/.

    You need to set the environment variable `YDC_API_KEY` for retriever to operate.

    Attributes
    ----------
    ydc_api_key: str, optional
        you.com api key, if YDC_API_KEY is not set in the environment
    endpoint_type: str, optional
        you.com endpoints: search, news, rag;
        `web` and `snippet` alias `search`
        `rag` returns `{'message': 'Forbidden'}`
        @todo `news` endpoint
    num_web_results: int, optional
        The max number of web results to return, must be under 20.
        This is mapped to the `count` query parameter for the News API.
    safesearch: str, optional
        Safesearch settings, one of off, moderate, strict, defaults to moderate
    country: str, optional
        Country code, ex: 'US' for United States, see api docs for list
    search_lang: str, optional
        (News API) Language codes, ex: 'en' for English, see api docs for list
    ui_lang: str, optional
        (News API) User interface language for the response, ex: 'en' for English,
                   see api docs for list
    spellcheck: bool, optional
        (News API) Whether to spell check query or not, defaults to True
    k: int, optional
        max number of Documents to return using `results()`
    n_hits: int, optional, deprecated
        Alias for num_web_results
    n_snippets_per_hit: int, optional
        limit the number of snippets returned per hit
    NÚydc_api_keyÚsearch)r,   ÚnewsÚragÚsnippetÚendpoint_typeÚnum_web_results)ÚoffÚmoderateÚstrictÚ
safesearchÚcountryÚsearch_langÚui_langÚ
spellcheckÚkÚn_snippets_per_hitÚn_hitsÚbefore)ÚmodeÚvaluesÚreturnc                 ó*   — t        |dd«      }||d<   |S )z,Validate that api key exists in environment.r+   ÚYDC_API_KEYr	   )Úclsr?   r+   s      r   Úvalidate_environmentz(YouSearchAPIWrapper.validate_environmentn   s!   € ô +¨6°=À-ÓPˆØ +ˆˆ}Ñàˆr   Úafterc                 ó  — | j                   dk7  rAd}|D ]:  }t        | |«      sŒt        j                  d|› d| j                   › d�t        «       Œ< | j                   dvr&| j
                  rt        j                  dt        «       | S )Nr-   )r7   r8   r9   zNews API-specific field 'z' is set but `endpoint_type="z"`. This will have no effect.©r,   r/   zGField 'n_snippets_per_hit' only has effect on `endpoint_type="search"`.)r0   ÚgetattrÚwarningsÚwarnÚUserWarningr;   )ÚselfÚnews_api_fieldsÚfields      r   Ú!warn_if_set_fields_have_no_effectz5YouSearchAPIWrapper.warn_if_set_fields_have_no_effectw   s”   € à×Ñ Ò'ØFˆOÛ(�Ü˜4 Õ'Ü—M‘Mà7¸°wð ?/Ø/3×/AÑ/AÐ.Bð C8ð8ô $õð )ð ×ÑÐ%:Ñ:Ø×&Ò&Ü—‘ð4ô  ôð ˆr   c                 ót   — | j                   dk(  r(t        j                  d| j                   › d�t        «       | S )Nr!   z`endpoint_type="z7"` is deprecated. Use `endpoint_type="search"` instead.)r0   rI   rJ   ÚDeprecationWarning)rL   s    r   Ú%warn_if_deprecated_endpoints_are_usedz9YouSearchAPIWrapper.warn_if_deprecated_endpoints_are_used�   s@   € à×Ñ Ò+Ü�M‰Mà& t×'9Ñ'9Ð&:ð ;<ð <ô #ôð ˆr   ÚqueryÚkwargsc                 ó†  — | j                   | j                  dœ|¥}| j                  dv r|j                  || j                  ¬«       nM| j                  dk(  r>|j                  || j                  | j
                  | j                  | j                  ¬«       |j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}|S c c}}w )z‚
        Parse parameters required for different You.com APIs.

        Args:
            query: The query to search for.
        )r5   r6   rG   )rS   r1   r-   )ÚqÚcountr7   r8   r9   )	r5   r6   r0   Úupdater1   r7   r8   r9   Úitems)rL   rS   rT   Úparamsr:   Úvs         r   Ú_generate_paramsz$YouSearchAPIWrapper._generate_paramsœ   sÈ   € ð Ÿ/™/Ø—|‘|ñ
ð ð
ˆð ×ÑÐ!6Ñ6Ø�M‰MØØ $× 4Ñ 4ð õ ð ×Ñ 6Ò)Ø�M‰MØØ×*Ñ*Ø ×,Ñ,ØŸ™ØŸ?™?ð ô ð $*§<¡<¤>ÔC¡>™4˜1˜a°Q±]�!�Q‘$ >ˆÑCØˆùó Ds   Â(
B=Â3B=Úraw_search_resultsc                 óZ  — | j                   dk(  rA|d   d   }| j                  �|d| j                   }|D �cg c]  }t        |d   |¬«      ‘Œ c}S g }|d   D ]Ë  }| j                  xs t	        |j                  d«      «      }|j                  d«      d| D ]Š  }|j                  t        ||j                  d«      |j                  d	«      |j                  d
«      |j                  d«      dœ¬«      «       | j                  €Œmt	        |«      | j                  k\  sŒ†|c c S  ŒÍ |S c c}w )zï
        Extracts snippets from each hit and puts them in a Document
        Parameters:
            raw_search_results: A dict containing list of hits
        Returns:
            List[YouDocument]: A dictionary of parsed results
        r-   ÚresultsNr   )r'   r(   r$   r!   r   r   r   )r   r   r   r   )r0   r:   r   r;   ÚlenÚgetÚappend)rL   r]   Únews_resultsÚresultÚdocsÚhitr;   r/   s           r   Ú_parse_resultsz"YouSearchAPIWrapper._parse_results»   s2  € ð ×Ñ Ò'Ø-¨fÑ5°iÑ@ˆLØ�v‰vÐ!Ø+¨H¨d¯f©fÐ5�ñ +óá*�Fô  f¨]Ñ&;ÀfÖMØ*ñð ð
 ˆØ% fÔ-ˆCØ!%×!8Ñ!8Ò!T¼CÀÇÁÈ
Ó@SÓ<TÐØŸ7™7 :Ó.Ð/BÐ0BÓC�Ø—‘ÜØ%,à#&§7¡7¨5£>Ø-0¯W©W°_Ó-EØ%(§W¡W¨WÓ%5Ø+.¯7©7°=Ó+Añ	"ôô
ð —6‘6Ñ%¬#¨d«)°t·v±vÓ*=Ø”Kñ Dð .ð  ˆùò-s   ·D(c                 ó  — d| j                   xs di} | j                  |fi |¤Ž}| j                  dk(  rd| _        t        j                  t
        › d| j                  › �||¬«      }|j                  «        |j                  «       S )z“Run query through you.com Search and return hits.

        Args:
            query: The query to search for.
        Returns: YouAPIOutput
        ú	X-API-KeyÚ r/   r,   Ú/)rZ   Úheaders)r+   r\   r0   Úrequestsra   ÚYOU_API_URLÚraise_for_statusÚjson)rL   rS   rT   rl   rZ   Úresponses         r   Úraw_resultszYouSearchAPIWrapper.raw_resultsá   s‹   € ð  × 0Ñ 0Ò 6°BÐ7ˆØ&�×&Ñ& uÑ7°Ñ7ˆð ×Ñ Ò*Ø!)ˆDÔÜ—<‘<Üˆm˜1˜T×/Ñ/Ð0Ð1ØØô
ˆð
 	×!Ñ!Ô#Ø�}‰}‹Ðr   c           
      ó    —  | j                   |fi |j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}¤Ž}| j                  |«      S c c}}w )zCRun query through you.com Search and parses results into Documents.)rr   rY   rg   )rL   rS   rT   ÚkeyÚvaluer]   s         r   r_   zYouSearchAPIWrapper.resultsú   s^   € ð .˜T×-Ñ-Øñ
à,2¯L©L¬NÔP©N™j˜c 5¸eÑ>Oˆs�E‰z¨NÒPñ
Ðð ×"Ñ"Ð#5Ó6Ð6ùó Qs
   £
A
®A
c              ‹   ó†  K  — d| j                   xs di} | j                  |fi |¤Ž}| j                  dk(  rd| _        t        j                  «       4 ƒd{  –—† }|j                  t        › d| j                  › �||¬«      4 ƒd{  –—† }|j                  dk(  r<|j                  «       ƒ d{  –—† }|cddd«      ƒd{  –—†  cddd«      ƒd{  –—†  S t        d	|j                  › d
|j                  › �«      ‚7 Œ¤7 Œv7 ŒQ7 ŒA7 Œ2# 1 ƒd{  –—†7  sw Y   nxY wddd«      ƒd{  –—†7   y# 1 ƒd{  –—†7  sw Y   yxY w­w)z7Get results from the you.com Search API asynchronously.ri   rj   r/   r,   Nrk   )r   rZ   rl   éÈ   zError z: )r+   r\   r0   ÚaiohttpÚClientSessionra   rn   Ústatusrp   Ú	ExceptionÚreason)rL   rS   rT   rl   rZ   ÚsessionÚresr_   s           r   Úraw_results_asyncz%YouSearchAPIWrapper.raw_results_async  s+  è ø€ ð  × 0Ñ 0Ò 6°BÐ7ˆØ&�×&Ñ& uÑ7°Ñ7ˆð ×Ñ Ò*Ø!)ˆDÔä×(Ñ(×*Ô*¨gØ—{‘{Ü"�m 1 T×%7Ñ%7Ð$8Ð9ØØð #÷ ô ð Ø—:‘: Ò$Ø$'§H¡H£J×.�GØ"÷÷ ð ÷ +×*Ñ*ô $ f¨S¯Z©Z¨L¸¸3¿:¹:¸,Ð$GÓHÐHð +øðøð /øðøð +ø÷÷ ñ ú÷ +×*×*×*Ó*üsÀ   ‚AEÁC;ÁEÁ,D,ÂC=ÂD,Â
#DÂ-C?Â.DÂ3D,Â?DÃ D,ÃEÃDÃEÃ%DÃ;EÃ=D,Ã?DÄD,ÄEÄD	ÄDÄD	ÄD,ÄEÄ%D(Ä&EÄ,D>Ä2D5Ä3D>Ä:Ec           
   ‹   ó¼   K  —  | j                   |fi |j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}¤Žƒ d {  –—† }| j                  |«      S c c}}w 7 Œ­w)N)r   rY   rg   )rL   rS   rT   rt   ru   Úraw_search_results_asyncs         r   Úresults_asyncz!YouSearchAPIWrapper.results_async!  sm   è ø€ ð
 *@¨×)?Ñ)?Øñ*
à,2¯L©L¬NÔP©N™j˜c 5¸eÑ>Oˆs�E‰z¨NÒPñ*
÷ $
Ð ð ×"Ñ"Ð#;Ó<Ð<ùó Qð$
ús   ‚#A¥
A°Aµ	A¾A¿A)%r   r   r   r   r+   r   r   r   r0   r   r1   Úintr5   r6   r7   r8   r9   Úboolr:   r;   r<   r   Úclassmethodr   r   rD   r   rO   rR   r\   r   r   rg   rr   r_   r   r‚   r   r   r   r*   r*   2   så  … ñ%ðN "&€K�˜#‘Ó%ð BJ€M�7Ð=Ñ>ÓIð &*€O�X˜c‘]Ó)ØAE€J�˜Ð!<Ñ=Ñ>ÓEØ!€GˆX�c‰]Ó!ð "&€K�˜#‘Ó%Ø!€GˆX�c‰]Ó!Ø!%€J�˜‘Ó%à€A€x��}ÓØ(,Ð˜ ™Ó,à €FˆH�S‰MÓ á˜(Ô#Øð¨$ð °3ò ó ó $ðñ ˜'Ô"ð°4ò ó #ðñ0 ˜'Ô"ð	°tò 	ó #ð	ð cð °Sð ¸Tó ð>$°ð $¸$¸x¹.ó $ðLàðð ðð 
ó	ð27àð7ð ð7ð 
ˆh‰ó	7ðIàðIð ðIð 
ó	Ið4	=àð	=ð ð	=ð 
ˆh‰ô		=r   r*   )r   rI   Útypingr   r   r   r   r   rx   rm   Úlangchain_core.documentsr   Úlangchain_core.utilsr
   Úpydanticr   r   r   Útyping_extensionsr   rn   r   r    r#   r&   r*   r   r   r   Ú<module>r‹      sq   ðñó ß 5Õ 5ã Û Ý -Ý 5ß 6Ñ 6Ý "à(€ôE�Yô EôGˆ^ô Gô�9ô ô�)ô ôx=˜)õ x=r   