§
    šŠtjÖ'  ã                   ó  — 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dS )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
<   dS )Ú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   © ó    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/you.pyr   r      s�   € € € € € € Ø/Ð/à�Ð#<Ð=Ñ=Ô=€Eˆ3Ð=Ð=Ñ=ØˆuÐ!8Ð9Ñ9Ô9€CˆÐ9Ð9Ñ9Ø˜Ð+QÐRÑRÔR€M�3ÐRÐRÑRØ�uÐ)CÐDÑDÔD€K�ÐDÐDÑDÐDÐDr   r   c                   óB   — e Zd ZU dZ ed¬¦  «        Zee         ed<   dS )Ú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ÐHà˜%Ð,EÐFÑFÔF€Hˆd�3ŒiÐFÐFÑFÐFÐFr   r!   c                   óB   — e Zd ZU dZ ed¬¦  «        Zee         ed<   dS )Ú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$   #   sJ   € € € € € € Ø"Ð"à˜ØCðñ ô €Dˆ$ˆvŒ,ð ð ñ ð ð r   r$   c                   ó@   — e Zd ZU dZ ed¬¦  «        Zeed<   eed<   dS )Ú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'   +   sB   € € € € € € Ø(Ð(à˜Ð*?Ð@Ñ@Ô@€L�#Ð@Ð@Ñ@ØÐÐÑÐÐr   r'   c                   óz  — 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$dS )"Ú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                 ó2   — 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ÔPˆØ +ˆˆ}Ñàˆr   Úafterc                 óê   — | j         dk    r=d}|D ]8}t          | |¦  «        r&t          j        d|› d| j         › d�t          ¦  «         Œ9| j         dvr!| j        rt          j        dt          ¦  «         | S )Nr.   )r8   r9   r:   zNews API-specific field 'z' is set but `endpoint_type="z"`. This will have no effect.©r-   r0   zGField 'n_snippets_per_hit' only has effect on `endpoint_type="search"`.)r1   Ú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ð8¸ð 8ð 8Ø/3Ô/Að8ð 8ð 8õ $ñô ð øð ÔÐ%:Ð:Ð:ØÔ&ð Ý”ð4õ  ñô ð ð ˆr   c                 ób   — | j         dk    r#t          j        d| j         › d�t          ¦  «         | S )Nr"   z`endpoint_type="z7"` is deprecated. Use `endpoint_type="search"` instead.)r1   rJ   rK   ÚDeprecationWarning)rM   s    r   Ú%warn_if_deprecated_endpoints_are_usedz9YouSearchAPIWrapper.warn_if_deprecated_endpoints_are_used�   sI   € àÔ Ò+Ð+ÝŒMð< tÔ'9ð <ð <ð <õ #ñô ð ð ˆr   ÚqueryÚkwargsc                 ó"  — | j         | j        dœ|¥}| j        dv r|                     || j        ¬¦  «         n9| j        dk    r.|                     || j        | j        | j        | j        ¬¦  «         d„ |                     ¦   «         D ¦   «         }|S )z‚
        Parse parameters required for different You.com APIs.

        Args:
            query: The query to search for.
        )r6   r7   rH   )rT   r2   r.   )ÚqÚcountr8   r9   r:   c                 ó   — i | ]
\  }}|®||“ŒS ©Nr   )Ú.0r;   Úvs      r   ú
<dictcomp>z8YouSearchAPIWrapper._generate_params.<locals>.<dictcomp>¸   s   € ÐCÐCÐC™4˜1˜a°Q°]�!�Q°]°]°]r   )	r6   r7   r1   Úupdater2   r8   r9   r:   Úitems)rM   rT   rU   Úparamss       r   Ú_generate_paramsz$YouSearchAPIWrapper._generate_paramsœ   sÅ   € ð œ/Ø”|ð
ð 
ð ð
ˆð ÔÐ!6Ð6Ð6Ø�MŠMØØ $Ô 4ð ñ ô ð ð ð Ô 6Ò)Ð)Ø�MŠMØØÔ*Ø Ô,ØœØœ?ð ñ ô ð ð DÐC 6§<¢<¡>¤>ÐCÑCÔCˆØˆr   Úraw_search_resultsc                 ó\  — | j         dk    r0|d         d         }| j        �|d| j        …         }d„ |D ¦   «         S g }|d         D ]å}| j        p!t          |                     d¦  «        ¦  «        }|                     d¦  «        d|…         D ]œ}|                     t          ||                     d¦  «        |                     d¦  «        |                     d	¦  «        |                     d
¦  «        dœ¬¦  «        ¦  «         | j        �t          |¦  «        | j        k    r|c c S Œ�Œæ|S )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.   ÚresultsNc                 ó<   — g | ]}t          |d          |¬¦  «        ‘ŒS )r   ©r(   r)   r   )r[   Úresults     r   ú
<listcomp>z6YouSearchAPIWrapper._parse_results.<locals>.<listcomp>É   s:   € ð ð ð àõ  f¨]Ô&;ÀfÐMÑMÔMðð ð r   r%   r"   r   r   r   r   )r   r   r   r   rf   )r1   r;   r<   ÚlenÚgetÚappendr	   )rM   rb   Únews_resultsÚdocsÚhitr<   r0   s          r   Ú_parse_resultsz"YouSearchAPIWrapper._parse_results»   sc  € ð Ô Ò'Ð'Ø-¨fÔ5°iÔ@ˆLØŒvÐ!Ø+¨H¨d¬f¨HÔ5�ðð à*ðñ ô ð ð
 ˆØ% fÔ-ð 	 ð 	 ˆCØ!%Ô!8Ð!T½CÀÇÂÈ
Ñ@SÔ@SÑ<TÔ<TÐØŸ7š7 :Ñ.Ô.Ð/BÐ0BÐ/BÔCð  ð  �Ø—’ÝØ%,à#&§7¢7¨5¡>¤>Ø-0¯WªW°_Ñ-EÔ-EØ%(§W¢W¨WÑ%5Ô%5Ø+.¯7ª7°=Ñ+AÔ+Að	"ð "ðñ ô ñ
ô 
ð 
ð ”6Ð%­#¨d©)¬)°t´vÒ*=Ð*=Ø�K�K�K�K�Køð ð ˆr   c                 óô   — d| j         pdi} | j        |fi |¤Ž}| j        dk    rd| _        t          j        t
          › d| j        › �||¬¦  «        }|                     ¦   «          |                     ¦   «         S )z“Run query through you.com Search and return hits.

        Args:
            query: The query to search for.
        Returns: YouAPIOutput
        ú	X-API-KeyÚ r0   r-   ú/)r`   Úheaders)r,   ra   r1   Úrequestsrj   ÚYOU_API_URLÚraise_for_statusÚjson)rM   rT   rU   rt   r`   Úresponses         r   Úraw_resultszYouSearchAPIWrapper.raw_resultsá   sš   € ð  Ô 0Ð 6°BÐ7ˆØ&�Ô& uÐ7Ð7°Ð7Ð7ˆð Ô Ò*Ð*Ø!)ˆDÔÝ”<ÝÐ1Ð1˜TÔ/Ð1Ð1ØØð
ñ 
ô 
ˆð
 	×!Ò!Ñ#Ô#Ð#Ø�}Š}‰ŒÐr   c                 ó€   —  | j         |fi d„ |                     ¦   «         D ¦   «         ¤Ž}|                      |¦  «        S )zCRun query through you.com Search and parses results into Documents.c                 ó   — i | ]
\  }}|®||“ŒS rZ   r   ©r[   ÚkeyÚvalues      r   r]   z/YouSearchAPIWrapper.results.<locals>.<dictcomp>  ó#   € ÐPÐPÐP™j˜c 5¸eÐ>Oˆs�EÐ>OÐ>OÐ>Or   )rz   r_   ro   )rM   rT   rU   rb   s       r   rd   zYouSearchAPIWrapper.resultsú   sV   € ð .˜TÔ-Øð
ð 
àPÐP¨F¯LªL©N¬NÐPÑPÔPð
ð 
Ðð ×"Ò"Ð#5Ñ6Ô6Ð6r   c              ‹   ó2  K  — d| j         pdi} | j        |fi |¤Ž}| j        dk    rd| _        t          j        ¦   «         4 ƒd{V —†}|                     t          › d| j        › �||¬¦  «        4 ƒd{V —†	 }|j        dk    r@|                     ¦   «         ƒ d{V —†}|cddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† S t          d	|j        › d
|j
        › �¦  «        ‚# 1 ƒd{V —†swxY w Y   	 ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z7Get results from the you.com Search API asynchronously.rq   rr   r0   r-   Nrs   )r   r`   rt   éÈ   zError z: )r,   ra   r1   ÚaiohttpÚClientSessionrj   rv   Ústatusrx   Ú	ExceptionÚreason)rM   rT   rU   rt   r`   ÚsessionÚresrd   s           r   Úraw_results_asyncz%YouSearchAPIWrapper.raw_results_async  só  è è € ð  Ô 0Ð 6°BÐ7ˆØ&�Ô& uÐ7Ð7°Ð7Ð7ˆð Ô Ò*Ð*Ø!)ˆDÔåÔ(Ñ*Ô*ð 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	I¨gØ—{’{Ý"Ð9Ð9 TÔ%7Ð9Ð9ØØð #ñ ô ð 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið Ø”: Ò$Ð$Ø$'§H¢H¡J¤JÐ.Ð.Ð.Ð.Ð.Ð.�GØ"ð	Ið 	Ið 	Ið 	Iñ 	Iô 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið
	Ið 
	Ið 
	Ið 
	Iñ 
	Iô 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Iõ $Ð$G¨S¬ZÐ$GÐ$G¸3¼:Ð$GÐ$GÑHÔHÐHð	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Iøøøð 	Ið 	Ið 	Ið 	Ið 	Ið
	Ið 
	Ið 
	Iñ 
	Iô 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Iøøøð 
	Ið 
	Ið 
	Ið 
	Ið 
	Ið 
	Is<   Á.DÁ6'C!ÂDÃC!Ã!
C+	Ã+DÃ.C+	Ã/DÄ
DÄDc              ‹   ó�   K  —  | j         |fi d„ |                     ¦   «         D ¦   «         ¤Žƒ d {V —†}|                      |¦  «        S )Nc                 ó   — i | ]
\  }}|®||“ŒS rZ   r   r}   s      r   r]   z5YouSearchAPIWrapper.results_async.<locals>.<dictcomp>(  r€   r   )rŠ   r_   ro   )rM   rT   rU   Úraw_search_results_asyncs       r   Úresults_asyncz!YouSearchAPIWrapper.results_async!  sy   è è € ð
 *@¨Ô)?Øð*
ð *
àPÐP¨F¯LªL©N¬NÐPÑPÔPð*
ð *
ð $
ð $
ð $
ð $
ð $
ð $
Ð ð ×"Ò"Ð#;Ñ<Ô<Ð<r   )%r   r   r   r   r,   r   r   r   r1   r   r2   Úintr6   r7   r8   r9   r:   Úboolr;   r<   r=   r   Úclassmethodr   r   rE   r   rP   rS   ra   r   r	   ro   rz   rd   rŠ   rŽ   r   r   r   r+   r+   2   sÞ  € € € € € € ð%ð %ðN "&€K�˜#”Ð%Ð%Ñ%ð BJ€M�7Ð=Ô>ÐIÐIÑIð &*€O�X˜c”]Ð)Ð)Ñ)ØAE€J�˜Ð!<Ô=Ô>ÐEÐEÑ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ð 7ð 7ð 7ðIàðIð ðIð 
ð	Ið Ið Ið Ið4	=àð	=ð ð	=ð 
ˆhŒð		=ð 	=ð 	=ð 	=ð 	=ð 	=r   r+   )r   rJ   Útypingr   r   r   r   r   rƒ   ru   Úlangchain_core.documentsr	   Úlangchain_core.utilsr   Úpydanticr   r   r   Útyping_extensionsr   rv   r   r!   r$   r'   r+   r   r   r   ú<module>r—      s¥  ððð ð €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€Ø €€€Ø -Ð -Ð -Ð -Ð -Ð -Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø "Ð "Ð "Ð "Ð "Ð "à(€ðEð Eð Eð Eð E�Yñ Eô Eð EðGð Gð Gð Gð Gˆ^ñ Gô Gð Gðð ð ð ð �9ñ ô ð ðð ð ð ð �)ñ ô ð ðx=ð x=ð x=ð x=ð x=˜)ñ x=ô x=ð x=ð x=ð x=r   