a
    bgH                     @   sL   d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
 G dd deZdS )z&Util that calls Google Scholar Search.    )AnyDictOptional)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc                   @   s   e Zd ZU dZdZeed< dZeed< dZ	eed< dZ
ee ed	< dZ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 )GoogleScholarAPIWrappera  Wrapper for Google Scholar API

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

    The wrapper uses the serpapi python package:
    https://serpapi.com/integrations/python#search-google-scholar

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

    Attributes:
        top_k_results: number of results to return from google-scholar query search.
            By default it returns top 10 results.
        hl: attribute defines the language to use for the Google Scholar search.
            It's a two-letter language code.
            (e.g., en for English, es for Spanish, or fr for French). Head to the
            Google languages page for a full list of supported Google languages:
            https://serpapi.com/google-languages

        lr: attribute defines one or multiple languages to limit the search to.
            It uses lang_{two-letter language code} to specify languages
            and | as a delimiter. (e.g., lang_fr|lang_de will only search French
            and German pages). Head to the Google lr languages for a full
            list of supported languages: https://serpapi.com/google-lr-languages

     Example:
        .. code-block:: python

        from langchain_community.utilities import GoogleScholarAPIWrapper
        google_scholar = GoogleScholarAPIWrapper()
        google_scholar.run('langchain')
    
   top_k_resultsenhlZlang_enlrNserp_api_keygoogle_scholar_engineZforbid)extrabefore)mode)valuesreturnc                 C   sR   t |dd}||d< zddlm} W n ty>   tdY n0 ||_||d< |S )z?Validate that api key and python package exists in environment.r   SERP_API_KEYr   )GoogleScholarSearchzigoogle-search-results is not installed. Please install it with `pip install google-search-results>=2.4.2`r   )r   Zserpapir   ImportErrorr   )clsr   r   r    r   z/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/utilities/google_scholar.pyvalidate_environment6   s    
z,GoogleScholarAPIWrapper.validate_environment)queryr   c                 C   s   g }d}|t | jd dk rd| ||| jt| jd| jd dg }|| |sZqd|d7 }q| jd dkr|dkr|r| ||| jd | j| jd dg }|| |sdS dd	 |D }d
	|S )z6Run query through GoogleSearchScholar and parse resultr         )qstartr   numr   Zorganic_results)r    r!   r"   r   r   z'No good Google Scholar Result was foundc                 S   sx   g | ]p}d | dd dddd | di  dg D  d	| di  d
d d| di  di  dd qS )zTitle: title z

Authors: ,c                 S   s   g | ]}| d qS )name)get).0authorr   r   r   
<listcomp>~       z:GoogleScholarAPIWrapper.run.<locals>.<listcomp>.<listcomp>Zpublication_infoZauthorsz

Summary: summaryz
Total-Citations: Zinline_linksZcited_bytotal)r'   join)r(   resultr   r   r   r*   |   s   "z/GoogleScholarAPIWrapper.run.<locals>.<listcomp>z

)
maxr   r   r   minr   get_dictr'   extendr.   )selfr   total_resultspageresultsdocsr   r   r   runK   sX    



zGoogleScholarAPIWrapper.run)__name__
__module____qualname____doc__r   int__annotations__r   strr   r   r   r   r   r   Zmodel_configr   classmethodr   r   r9   r   r   r   r   r	   	   s   
"r	   N)r=   typingr   r   r   Zlangchain_core.utilsr   Zpydanticr   r   r   r	   r   r   r   r   <module>   s   