o
    ȳg                     @   s\   d Z ddlmZmZmZ ddlZddlmZ ddlm	Z	m
Z
mZmZ dZG dd de	ZdS )	zUtil that calls Bing Search.    )AnyDictListN)get_from_dict_or_env)	BaseModel
ConfigDictFieldmodel_validatorz*https://api.bing.microsoft.com/v7.0/searchc                   @   s   e Zd ZU dZeed< eed< dZeed< ee	dZ
e	ed< 	 edd	Zd
ededee	 fddZeddededefddZdedefddZdededee fddZdS )BingSearchAPIWrapperz Wrapper for Bing Web Search API.bing_subscription_keybing_search_url
   k)default_factorysearch_kwargsforbid)extrasearch_termcountreturnc                 C   sX   d| j i}||ddd| j}tj| j||d}|  | }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_results r%   e/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/bing_search.py_bing_search_results)   s$   
z)BingSearchAPIWrapper._bing_search_resultsbefore)modevaluesc                 C   s0   t |dd}||d< t |ddtd}||d< |S )z9Validate that api key and endpoint exists in environment.r   BING_SUBSCRIPTION_KEYr   BING_SEARCH_URL)default)r   DEFAULT_BING_SEARCH_ENDPOINT)clsr*   r   r   r%   r%   r&   validate_environment=   s   z)BingSearchAPIWrapper.validate_environmentqueryc                 C   sF   g }| j || jd}t|dkrdS |D ]	}||d  qd|S )z.Run query through BingSearch and parse result.r   r   $No good Bing Search Result was foundsnippet )r'   r   lenappendjoin)r"   r1   snippetsresultsresultr%   r%   r&   runQ   s   
zBingSearchAPIWrapper.runnum_resultsc                 C   sX   g }| j ||d}t|dkrddigS |D ]}|d |d |d d}|| q|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.
        r2   r   Resultr3   r4   nameurl)r4   titlelink)r'   r6   r7   )r"   r1   r=   metadata_resultsr:   r;   metadata_resultr%   r%   r&   r:   \   s   
zBingSearchAPIWrapper.resultsN)__name__
__module____qualname____doc__str__annotations__r   intr   dictr   r   model_configr   r'   r	   classmethodr   r   r0   r<   r:   r%   r%   r%   r&   r
      s    
 r
   )rH   typingr   r   r   r   langchain_core.utilsr   pydanticr   r   r   r	   r.   r
   r%   r%   r%   r&   <module>   s    