o
    ȳgX
                     @   sL   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 deZ	dS )    N)List)Document)	BaseModelFieldc                   @   s|   e Zd ZU 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.api_key)default_factory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   linksnippet)getjoinfilter.0item r   f/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/brave_search.py
<listcomp>   s    
z*BraveSearchWrapper.run.<locals>.<listcomp>)_search_requestjsondumps)selfr   web_search_results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   )page_contentmetadata)r   r   r   r   r   r   r   r   r   5   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	s7t
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 webr&   )r   requestsPreparedRequestr	   prepare_urlr
   r   
ValueErrorr   ok	Exceptionstatus_coder   )r    r   r*   reqparamsresponser   r   r   r   A   s   
z"BraveSearchWrapper._search_requestN)__name__
__module____qualname____doc__str__annotations__r   dictr	   r
   r#   r   r   r'   r   r   r   r   r   r   	   s   
 r   )
r   typingr   r,   langchain_core.documentsr   pydanticr   r   r   r   r   r   r   <module>   s    