o
    ȳgH                     @   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dedefddZdedef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hllang_enlrNserp_api_keygoogle_scholar_engineforbid)extrabefore)modevaluesreturnc                 C   sN   t |dd}||d< zddlm} W n ty   tdw ||_||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   serpapir   ImportErrorr   )clsr   r   r    r   h/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/google_scholar.pyvalidate_environment6   s   z,GoogleScholarAPIWrapper.validate_environmentqueryc                 C   s   g }d}|t | jd dk r;| ||| jt| jd| jd dg }|| |s-n|d7 }|t | jd dk s| jd dkrc|dkrc|rc| ||| jd | j| jd dg }|| |sgdS dd	 |D }d
	|S )z6Run query through GoogleSearchScholar and parse resultr         )qstartr   numr   organic_results)r#   r$   r%   r   r   z'No good Google Scholar Result was foundc                 S   sx   g | ]8}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>~   s    z:GoogleScholarAPIWrapper.run.<locals>.<listcomp>.<listcomp>publication_infoauthorsz

Summary: summaryz
Total-Citations: inline_linkscited_bytotal)r+   join)r,   resultr   r   r   r.   |   s    "z/GoogleScholarAPIWrapper.run.<locals>.<listcomp>z

)
maxr   r   r   minr   get_dictr+   extendr5   )selfr    total_resultspageresultsdocsr   r   r   runK   sP   
	

zGoogleScholarAPIWrapper.run)__name__
__module____qualname____doc__r   int__annotations__r   strr   r   r   r   r   r   model_configr   classmethodr   r   r@   r   r   r   r   r	   	   s   
 "r	   N)rD   typingr   r   r   langchain_core.utilsr   pydanticr   r   r   r	   r   r   r   r   <module>   s
    