o
    Zh8
                     @   st   d dl Z d dlmZmZ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mZ d dlmZ G dd deZdS )	    N)AnyDictList)Documentget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validator)URLc                   @   s   e Zd ZU dZeed< dZeed< 	 eddZ	e
dded	ed
efddZ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 )JinaSearchAPIWrapperz&Wrapper around the Jina search engine.api_keyzhttps://s.jina.ai/base_urlZforbid)extrabefore)modevaluesreturnc                 C   s   t |dd}||d< |S )z9Validate that api key and endpoint exists in environment.r   ZJINA_API_KEYr   )clsr   r    r   `/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/utilities/jina_search.pyvalidate_environment   s   z)JinaSearchAPIWrapper.validate_environmentqueryc                 C   s$   | j |d}dd |D }t|S )zQuery the Jina 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   s2   g | ]}| d | d| d| ddqS )titleurldescriptioncontent)r   linkZsnippetr   )get.0itemr   r   r   
<listcomp>*   s    z,JinaSearchAPIWrapper.run.<locals>.<listcomp>)_search_requestjsondumps)selfr   Zweb_search_resultsZfinal_resultsr   r   r   run    s
   	
	zJinaSearchAPIWrapper.runc                 C   s   |  |}dd |D S )zQuery the Jina 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   s8   g | ]}t |d |d|d|dddqS )r   r   r   r   )r   r   r   )Zpage_contentmetadata)r   r   r    r   r   r   r#   ?   s    	z;JinaSearchAPIWrapper.download_documents.<locals>.<listcomp>)r$   )r'   r   resultsr   r   r   download_documents5   s   
		z'JinaSearchAPIWrapper.download_documentsc                 C   s\   dd| j   d}tt| j| }tj||d}|js&td|j	 |
 dg S )Nzapplication/jsonzBearer )AcceptAuthorization)headerszHTTP error data)r   Zget_secret_valuestrr   r   requestsr   ok	Exceptionstatus_coder%   )r'   r   r.   r   responser   r   r   r$   K   s   z$JinaSearchAPIWrapper._search_requestN)__name__
__module____qualname____doc__r
   __annotations__r   r0   r	   Zmodel_configr   classmethodr   r   r   r(   r   r   r+   dictr$   r   r   r   r   r      s   
 r   )r%   typingr   r   r   r1   Zlangchain_core.documentsr   Zlangchain_core.utilsr   Zpydanticr   r	   r
   r   Zyarlr   r   r   r   r   r   <module>   s    