
    h
                     b    d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZ  G d de	      Zy)    N)List)Document)secret_from_env)	BaseModelField	SecretStrc                       e Zd ZU dZ e edg            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.BRAVE_SEARCH_API_KEY)default_factoryapi_key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        h/var/www/html/eduruby.in/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                   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   get_secret_valuerequestsPreparedRequestr   prepare_urlr   r   
ValueErrorr   ok	Exceptionstatus_coder   )r    r   r.   reqparamsresponses         r$   r   z"BraveSearchWrapper._search_requestD   s    $(LL$A$A$C(
 &&(OD&&O*NOv.77?KLL<<9{{k(*>*>)?@AA}}""5"-11)R@@    N)__name__
__module____qualname____doc__r   r   r   r   __annotations__dictr   r   strr%   r   r   r*   r    r;   r$   r
   r
   
   s    1')?(@AGY  :5M45EDHcD3) ) )0
 
X 
,AS AT$Z Ar;   r
   )r   typingr   r1   langchain_core.documentsr   langchain_core.utilsr   pydanticr   r   r   r
   rC   r;   r$   <module>rH      s*       - 0 0 0IA IAr;   