
    7|hX
                     R    d dl Z d dlmZ d dlZd dlmZ d dlmZmZ  G d de      Z	y)    N)List)Document)	BaseModelFieldc                       e Zd ZU dZeed<   	  ee      Zeed<   	 dZ	eed<   	 dedefd	Z
dedee   fd
Zdedee   fdZy)BraveSearchWrapperz'Wrapper around the Brave search engine.api_key)default_factorysearch_kwargsz.https://api.search.brave.com/res/v1/web/searchbase_urlqueryreturnc                 2   | j                  |      }|D cg c]a  }|j                  d      |j                  d      dj                  t        d|j                  d      g|j                  dg                   dc }}t	        j
                  |      S c c}w )	zQuery the Brave search engine and return the results as a JSON string.

        Args:
            query: The query to search for.

        Returns: The results as a JSON string.

        )r   titleurl Ndescriptionextra_snippets)r   linksnippet)_search_requestgetjoinfilterjsondumps)selfr   web_search_resultsitemfinal_resultss        i/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/brave_search.pyrunzBraveSearchWrapper.run   s     "111> +
  '*88txx6XBRTV9WX
 
 zz-((
s   A&Bc                    | j                  |      }|D cg c]k  }t        dj                  t        d|j	                  d      g|j	                  dg                   |j	                  d      |j	                  d      d      m c}S c c}w )	zQuery the Brave search engine and return the results as a list of Documents.

        Args:
            query: The query to search for.

        Returns: The results as a list of Documents.

        r   Nr   r   r   r   )r   r   )page_contentmetadata)r   r   r   r   r   )r   r   resultsr   s       r!   download_documentsz%BraveSearchWrapper.download_documents+   s     &&u-  

   XXtxx6XBRTV9WX
 $(88G#4dhhuoN

 
	
 

s   A0B	c                    | j                   dd}t        j                         }i | j                  |dd}|j	                  | j
                  |       |j                  t        d      t        j                  |j                  |      }|j                  st        d|j                         |j                         j                  di       j                  d	g       S )
Nzapplication/json)zX-Subscription-TokenAcceptT)qr   z,prepared url is None, this should not happen)headerszHTTP error webr&   )r	   requestsPreparedRequestr   prepare_urlr   r   
ValueErrorr   ok	Exceptionstatus_coder   )r   r   r+   reqparamsresponses         r!   r   z"BraveSearchWrapper._search_requestA   s    $(LL(
 &&(OD&&O*NOv.77?KLL<<9{{k(*>*>)?@AA}}""5"-11)R@@    N)__name__
__module____qualname____doc__str__annotations__r   dictr   r   r"   r   r   r'   r    r7   r!   r   r   	   sp    1L95M45EDHcD3) ) )0
 
X 
,AS AT$Z Ar7   r   )
r   typingr   r-   langchain_core.documentsr   pydanticr   r   r   r?   r7   r!   <module>rC      s$       - %GA GAr7   