a
    bgX
                     @   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                   @   sp   e Zd ZU dZeed< eedZeed< dZ	eed< eeddd	Z
eee dd
dZeee d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   linkZsnippet)getjoinfilter.0item r   x/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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 | ]B}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   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 rHtdtj|j|d}|j	snt
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   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'   Zlangchain_core.documentsr   Zpydanticr   r   r   r   r   r   r   <module>   s
   