o
    |qi
                     @   s\   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 de	ZdS )    N)List)Document)secret_from_env)	BaseModelField	SecretStrc                   @   s   e Zd ZU dZeedgdZeed< 	 ee	dZ
e	ed< 	 dZeed< 	 ded	efd
dZded	ee fddZded	ee	 fddZdS )BraveSearchWrapperz'Wrapper around the Brave search engine.ZBRAVE_SEARCH_API_KEY)default_factoryapi_keysearch_kwargsz.https://api.search.brave.com/res/v1/web/searchbase_urlqueryreturnc                 C   s$   | j |d}dd |D }t|S )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   c                 S   sD   g | ]}| d | ddtd| dg| dg dqS )titleurl Ndescriptionextra_snippets)r   linkZsnippet)getjoinfilter.0item r   q/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/langchain_community/utilities/brave_search.py
<listcomp>    s    
z*BraveSearchWrapper.run.<locals>.<listcomp>)_search_requestjsondumps)selfr   Zweb_search_resultsZfinal_resultsr   r   r   run   s
   	

zBraveSearchWrapper.runc                 C   s   |  |}dd |D S )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.

        c                 S   sJ   g | ]!}t d td|dg|dg |d|dddqS )r   Nr   r   r   r   )r   r   )Zpage_contentmetadata)r   r   r   r   r   r   r   r   r   8   s    	z9BraveSearchWrapper.download_documents.<locals>.<listcomp>)r   )r!   r   resultsr   r   r   download_documents.   s   
		z%BraveSearchWrapper.download_documentsc                 C   s   | j  dd}t }i | j|dd}|| j| |jd u r&tdtj	|j|d}|j
s9td|j | 	di 	d	g S )
Nzapplication/json)zX-Subscription-TokenAcceptT)qr   z,prepared url is None, this should not happen)headerszHTTP error Zwebr$   )r
   Zget_secret_valuerequestsPreparedRequestr   prepare_urlr   r   
ValueErrorr   ok	Exceptionstatus_coder   )r!   r   r(   reqparamsresponser   r   r   r   D   s   
z"BraveSearchWrapper._search_requestN)__name__
__module____qualname____doc__r   r   r
   r   __annotations__dictr   r   strr"   r   r   r%   r   r   r   r   r   r   
   s   
 r   )r   typingr   r)   Zlangchain_core.documentsr   Zlangchain_core.utilsr   Zpydanticr   r   r   r   r   r   r   r   <module>   s    