
    7|h                     b    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e	      Zy)	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                       e Zd ZU dZeed<   eed<   dZeed<    ee	      Z
e	ed<   	  ed	      Zd
ededee	   fdZ ed      ededefd              ZdedefdZdededee   fdZy)BingSearchAPIWrapperz Wrapper for Bing Web Search API.bing_subscription_keybing_search_url
   k)default_factorysearch_kwargsforbid)extrasearch_termcountreturnc                     d| j                   i}||ddd| j                  }t        j                  | j                  ||      }|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          h/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/bing_search.py_bing_search_resultsz)BingSearchAPIWrapper._bing_search_results)   s    .0J0JK# 	

   
 <<  

 	!!#!'!*-g66	    before)modevaluesc                 Z    t        |dd      }||d<   t        |ddt              }||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   s       r(   validate_environmentz)BingSearchAPIWrapper.validate_environment=   sN     !5+-D!
 +@&'.0	
 %4 !r*   queryc                     g }| j                  || j                        }t        |      dk(  ry|D ]  }|j                  |d           dj	                  |      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%   r5   snippetsresultsresults        r(   runzBingSearchAPIWrapper.runQ   s`    ++E+@w<19 	/FOOF9-.	/ xx!!r*   num_resultsc                     g }| j                  ||      }t        |      dk(  rddigS |D ]"  }|d   |d   |d   d}|j                  |       $ |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.
        r7   r   Resultr8   r9   nameurl)r9   titlelink)r)   r;   r<   )r%   r5   rB   metadata_resultsr?   r@   metadata_results          r(   r?   zBingSearchAPIWrapper.results\   s~     ++E+Ew<1EFGG 	5F!),uO
 ##O4	5  r*   N)__name__
__module____qualname____doc__str__annotations__r   intr	   dictr   r   model_configr   r)   r
   classmethodr   r   r4   rA   r?    r*   r(   r   r      s    *AsK5M45EL C DJ ( (#$ 3   $$	" 	" 	" S  s  tDz  r*   r   )rN   typingr   r   r   r!   langchain_core.utilsr   pydanticr   r   r	   r
   r2   r   rU   r*   r(   <module>rY      s1    " " "  5 B B$  L Y 9 Y r*   