U
    h                     @   s\   d Z ddlmZmZmZmZ ddlZddlmZm	Z	m
Z
 ddlmZmZ G dd deZdS )z#Util that calls Google Lens Search.    )AnyDictOptionalcastN)	BaseModel	SecretStrroot_validatorconvert_to_secret_strget_from_dict_or_envc                   @   sb   e Zd ZU dZeed< dZee ed< G dd dZ	e
ddeed	d
dZeedddZdS )GoogleLensAPIWrapperaV  Wrapper for SerpApi's Google Lens API

    You can create SerpApi.com key by signing up at: https://serpapi.com/users/sign_up.

    The wrapper uses the SerpApi.com python package:
    https://serpapi.com/integrations/python

    To use, you should have the environment variable ``SERPAPI_API_KEY``
    set with your API key, or pass `serp_api_key` as a named parameter
    to the constructor.

     Example:
        .. code-block:: python

        from langchain_community.utilities import GoogleLensAPIWrapper
        google_lens = GoogleLensAPIWrapper()
        google_lens.run('langchain')
    Zserp_search_engineNserp_api_keyc                   @   s   e Zd ZdZdS )zGoogleLensAPIWrapper.ConfigZforbidN)__name__
__module____qualname__extra r   r   M/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/google_lens.pyConfig!   s   r   T)pre)valuesreturnc                 C   s   t t|dd|d< |S )z?Validate that api key and python package exists in environment.r   ZSERPAPI_API_KEYr	   )clsr   r   r   r   validate_environment$   s    
z)GoogleLensAPIWrapper.validate_environment)queryr   c                 C   sf  t t| j}d| |d}d|d  d|d  d|d  }t|}|jd	krVd
S | }|d d dkrrd
S d}d|krt|d dkr|d d }|d|d  d|d  d7 }|d|d  d7 }|d7 }|d D ]J}	|d|	d  d7 }|d|	d  d|	d  d7 }|d |	d!  d7 }qd"|krN|d#d$|d" d  d 7 }t	| |g}
d
|
S )%z,Run query through Google Trends with SerpapiZgoogle_lens)engineapi_keyurlz"https://serpapi.com/search?engine=r   z	&api_key=r   z&url=r      zGoogle Lens search failedZsearch_metadatastatusZSuccess Zknowledge_graphr   zSubject:title(Zsubtitlez)
zLink to subject:linkz

zRelated Images:

Zvisual_matcheszTitle: 
zSource(sourcez): zImage: Z	thumbnailZreverse_image_searchzReverse Image SearchzLink: )r   r   r   Zget_secret_valuerequestsgetstatus_codejsonlenprintjoin)selfr   Zserpapi_api_keyparamsZqueryURLresponseZresponseValuexssubjectimageZdocsr   r   r   run-   sD    "


zGoogleLensAPIWrapper.run)r   r   r   __doc__r   __annotations__r   r   r   r   r   r   r   strr3   r   r   r   r   r   
   s   
r   )r4   typingr   r   r   r   r&   Zlangchain_core.pydantic_v1r   r   r   Zlangchain_core.utilsr
   r   r   r   r   r   r   <module>   s
   