o
    ȳg                     @   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                   @   sj   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d	ed
efddZded
ef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_key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   SERPAPI_API_KEYr   )clsr    r   e/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/google_lens.pyvalidate_environment%   s   
z)GoogleLensAPIWrapper.validate_environmentqueryc                 C   sd  t t| j}d| |d}d|d  d|d  d|d  }t|}|jd	kr+d
S | }|d d dkr9d
S d}d|v rft|d dkrf|d d }|d|d  d|d  d7 }|d|d  d7 }|d7 }|d D ]%}	|d|	d  d7 }|d|	d  d|	d  d7 }|d |	d!  d7 }qnd"|v r|d#d$|d" d  d 7 }t	| |g}
d
|
S )%z,Run query through Google Trends with Serpapigoogle_lens)engineapi_keyurlz"https://serpapi.com/search?engine=r   z	&api_key=r   z&url=r      zGoogle Lens search failedsearch_metadatastatusSuccess knowledge_graphr   zSubject:title(subtitlez)
zLink to subject:linkz

zRelated Images:

visual_matcheszTitle: 
zSource(sourcez): zImage: 	thumbnailreverse_image_searchzReverse Image SearchzLink: )r   r   r   get_secret_valuerequestsgetstatus_codejsonlenprintjoin)selfr   serpapi_api_keyparamsqueryURLresponseresponseValuexssubjectimagedocsr   r   r   run/   s@   "


zGoogleLensAPIWrapper.run)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r
   model_configr   classmethodr   r   strrA   r   r   r   r   r   
   s   
 r   )rE   typingr   r   r   r   r0   langchain_core.utilsr   r   pydanticr	   r
   r   r   r   r   r   r   r   <module>   s    