
    dh
                     b    S SK r S SKJr  S SKrS SKJr  S SKJr  S SKJ	r	J
r
Jr   " S S\	5      rg)    N)List)Document)secret_from_env)	BaseModelField	SecretStrc                       \ rS rSr% Sr\" \" S/5      S9r\\	S'    \" \
S9r\
\	S'    Sr\\	S'    S	\S
\4S jrS	\S
\\   4S jrS	\S
\\
   4S jrSrg)BraveSearchWrapper
   z'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   U R                  US9nU Vs/ sHb  nUR                  S5      UR                  S5      SR                  [        SUR                  S5      /UR                  S/ 5      Q5      5      S.PMd     nn[        R
                  " U5      $ s  snf )	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        b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/brave_search.pyrunBraveSearchWrapper.run   s     "111> +
 + '*88txx6XBRTV9WX + 	 
 zz-((
s   A(Bc                    U R                  U5      nU Vs/ sHi  n[        SR                  [        SUR	                  S5      /UR	                  S/ 5      Q5      5      UR	                  S5      UR	                  S5      S.S9PMk     sn$ s  snf )	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_documents%BraveSearchWrapper.download_documents.   s     &&u-  

    XXtxx6XBRTV9WX
 $(88G#4dhhuoN  

 
	
 

s   A/Bc                    U R                   R                  5       SS.n[        R                  " 5       n0 U R                  EUSS.EnUR                  U R                  U5        UR                  c  [        S5      e[        R                  " UR                  US9nUR                  (       d  [        SUR                   35      eUR                  5       R                  S0 5      R                  S	/ 5      $ )
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   r1   reqparamsresponses         r%   r   "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____firstlineno____doc__r   r   r   r   __annotations__dictr   r   strr&   r   r   r,   r   __static_attributes__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   r4   langchain_core.documentsr   langchain_core.utilsr   pydanticr   r   r   r
   r@   r?   r%   <module>rN      s*       - 0 0 0IA IAr?   