
    7|h8
                     z    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e      Zy)	    N)AnyDictList)Documentget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validator)URLc                       e Zd ZU dZeed<   dZeed<   	  ed      Z	 e
d      ed	ed
efd              Zded
efdZded
ee   fdZded
ee   fdZy)JinaSearchAPIWrapperz&Wrapper around the Jina search engine.api_keyzhttps://s.jina.ai/base_urlforbid)extrabefore)modevaluesreturnc                 *    t        |dd      }||d<   |S )z9Validate that api key and endpoint exists in environment.r   JINA_API_KEYr   )clsr   r   s      h/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/jina_search.pyvalidate_environmentz)JinaSearchAPIWrapper.validate_environment   s!     'vy.I#y    queryc           	          | j                  |      }|D cg c]E  }|j                  d      |j                  d      |j                  d      |j                  d      dG }}t        j                  |      S c c}w )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   titleurldescriptioncontent)r    linksnippetr#   )_search_requestgetjsondumps)selfr   web_search_resultsitemfinal_resultss        r   runzJinaSearchAPIWrapper.run    s     "111> +
  '*88M288I.	
 
 zz-((
s   A
A8c                     | j                  |      }|D cg c]O  }t        |j                  d      |j                  d      |j                  d      |j                  d      d      Q c}S c c}w )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.

        r#   r    r!   r"   )r    r$   r"   )page_contentmetadata)r&   r   r'   )r*   r   resultsr,   s       r   download_documentsz'JinaSearchAPIWrapper.download_documents5   sq     &&u-  

  !XXi0!XXg. HHUO#'88M#:

 
	
 

s   AA-c                 :   dd| j                   j                          d}t        t        | j                  |z               }t        j                  ||      }|j                  st        d|j                         |j                         j                  dg       S )Nzapplication/jsonzBearer )AcceptAuthorization)headerszHTTP error data)r   get_secret_valuestrr   r   requestsr'   ok	Exceptionstatus_coder(   )r*   r   r7   r!   responses        r   r&   z$JinaSearchAPIWrapper._search_requestK   s    (&t||'D'D'F&GH
 #dmme+,-<<W5{{k(*>*>)?@AA}}""62..r   N)__name__
__module____qualname____doc__r   __annotations__r   r:   r
   model_configr   classmethodr   r   r   r.   r   r   r3   dictr&    r   r   r   r      s    0(Hc(2L (#$ 3   $) ) )*
 
X 
,
/S 
/T$Z 
/r   r   )r(   typingr   r   r   r;   langchain_core.documentsr   langchain_core.utilsr   pydanticr	   r
   r   r   yarlr   r   rH   r   r   <module>rN      s.     " "  - 5 F F J/9 J/r   