§
    æ˜ºh  ã                   ób   — d Z ddlmZmZ ddlZddlmZmZmZm	Z	 ddl
mZ  G d„ de¦  «        ZdS )z³Util that calls Bing Search.

In order to set this up, follow instructions at:
https://levelup.gitconnected.com/api-tutorial-how-to-use-bing-web-search-api-in-python-4165d5592a7e
é    )ÚDictÚListN)Ú	BaseModelÚExtraÚFieldÚroot_validator©Úget_from_dict_or_envc                   óø   — e Zd ZU dZeed<   eed<   dZeed<    ee	¬¦  «        Z
e	ed<   	  G d„ d	¦  «        Zd
ededee	         fd„Z ed¬¦  «        dedefd„¦   «         Zdedefd„Zdededee         fd„ZdS )ÚBingSearchAPIWrapperz¿Wrapper for Bing Search API.

    In order to set this up, follow instructions at:
    https://levelup.gitconnected.com/api-tutorial-how-to-use-bing-web-search-api-in-python-4165d5592a7e
    Úbing_subscription_keyÚbing_search_urlé
   Úk)Údefault_factoryÚsearch_kwargsc                   ó    — e Zd ZdZej        ZdS )úBingSearchAPIWrapper.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextra© ó    úq/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/utilities/bing_search.pyÚConfigr      s   € € € € € Ø5Ð5à”ˆˆˆr   r   Úsearch_termÚcountÚreturnc                 óà   — d| j         i}||dddœ| j        ¥}t          j        | j        ||¬¦  «        }|                     ¦   «          |                     ¦   «         }d|v r|d         d         S g S )NzOcp-Apim-Subscription-KeyTÚHTML)Úqr    ÚtextDecorationsÚ
textFormat)ÚheadersÚparamsÚwebPagesÚvalue)r   r   ÚrequestsÚgetr   Úraise_for_statusÚjson)Úselfr   r    r'   r(   ÚresponseÚsearch_resultss          r   Ú_bing_search_resultsz)BingSearchAPIWrapper._bing_search_results   s™   € Ø.°Ô0JÐKˆàØØ#Ø ð	
ð 
ð
 Ô ð
ˆõ ”<ØÔ ØØð
ñ 
ô 
ˆð
 	×!Ò!Ñ#Ô#Ð#Ø!Ÿš™œˆØ˜Ð'Ð'Ø! *Ô-¨gÔ6Ð6Øˆ	r   T)ÚpreÚvaluesc                 ó^   — t          |dd¦  «        }||d<   t          |dd¦  «        }||d<   |S )z9Validate that api key and endpoint exists in environment.r   ÚBING_SUBSCRIPTION_KEYr   ÚBING_SEARCH_URLr	   )Úclsr4   r   r   s       r   Úvalidate_environmentz)BingSearchAPIWrapper.validate_environment3   sU   € õ !5ØÐ+Ð-Dñ!
ô !
Ðð +@ˆÐ&Ñ'å.ØØØñ
ô 
ˆð %4ˆÐ Ñ!àˆr   Úqueryc                 óÒ   — g }|                       || j        ¬¦  «        }t          |¦  «        dk    rdS |D ]}|                     |d         ¦  «         Œd                     |¦  «        S )z.Run query through BingSearch and parse result.©r    r   ú$No good Bing Search Result was foundÚsnippetú )r2   r   ÚlenÚappendÚjoin)r/   r:   ÚsnippetsÚresultsÚresults        r   ÚrunzBingSearchAPIWrapper.runF   ss   € àˆØ×+Ò+¨E¸¼Ð+Ñ@Ô@ˆÝˆw‰<Œ<˜1ÒÐØ9Ð9Øð 	/ð 	/ˆFØ�OŠO˜F 9Ô-Ñ.Ô.Ð.Ð.à�xŠx˜Ñ!Ô!Ð!r   Únum_resultsc                 óÌ   — g }|                       ||¬¦  «        }t          |¦  «        dk    rddigS |D ]/}|d         |d         |d         dœ}|                     |¦  «         Œ0|S )	a–  Run query through BingSearch and return metadata.

        Args:
            query: The query to search for.
            num_results: The number of results to return.

        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<   r   ÚResultr=   r>   ÚnameÚurl)r>   ÚtitleÚlink)r2   r@   rA   )r/   r:   rG   Úmetadata_resultsrD   rE   Úmetadata_results          r   rD   zBingSearchAPIWrapper.resultsQ   s’   € ð ÐØ×+Ò+¨E¸Ð+ÑEÔEˆÝˆw‰<Œ<˜1ÒÐØÐEÐFÐGÐGØð 	5ð 	5ˆFà! )Ô,Ø œØ˜uœðð ˆOð
 ×#Ò# OÑ4Ô4Ð4Ð4àÐr   N)r   r   r   r   ÚstrÚ__annotations__r   Úintr   Údictr   r   r   r2   r   r   r9   rF   rD   r   r   r   r   r      sG  € € € € € € ðð ð ÐÐÑØÐÐÑØ€A€s€K€K�KØ˜%°Ð5Ñ5Ô5€M�4Ð5Ð5Ñ5ØEðð ð ð ð ñ ô ð ð
°ð ¸Cð ÀDÈÄJð ð ð ð ð( €^˜ÐÑÔð¨$ð °4ð ð ð ñ Ôðð$	"˜ð 	" ð 	"ð 	"ð 	"ð 	"ð ˜Sð  ¨sð  °t¸D´zð  ð  ð  ð  ð  ð  r   r   )r   Útypingr   r   r+   Úlangchain_core.pydantic_v1r   r   r   r   Úlangchain_core.utilsr
   r   r   r   r   ú<module>rW      s¦   ððð ð
 Ð Ð Ð Ð Ð Ð Ð à €€€Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ 5Ð 5Ð 5Ð 5Ð 5Ð 5ð] ð ] ð ] ð ] ð ] ˜9ñ ] ô ] ð ] ð ] ð ] r   