a
    bg                     @   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	 ddl
mZmZmZmZ G dd deZdS )z#Util that calls Google Lens Search.    )AnyDictOptionalcastNconvert_to_secret_strget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validatorc                   @   sf   e Zd ZU dZdZeed< dZee	 ed< e
ddZedde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')
    Nserp_search_engineserp_api_keyZforbid)extrabefore)mode)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   w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/utilities/google_lens.py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|v 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"|v 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(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responseValueZxssubjectimagedocsr   r   r   run/   sD    "


zGoogleLensAPIWrapper.run)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r
   Zmodel_configr   classmethodr   r   strr3   r   r   r   r   r   
   s   
r   )r7   typingr   r   r   r   r&   Zlangchain_core.utilsr   r   Zpydanticr	   r
   r   r   r   r   r   r   r   <module>   s
   