
    Ng"                     Z    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e          ZdS )z&Util that calls Google Scholar Search.    )AnyDictOptional)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc                       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	<    ed
          Z ed          ededefd                        Zdedef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forbid)extrabefore)modevaluesreturnc                     t          |dd          }||d<   	 ddlm} n# t          $ r t          d          w xY 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`google_scholar_engine)r   serpapir   ImportErrorr   )clsr   r   r   s       h/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/utilities/google_scholar.pyvalidate_environmentz,GoogleScholarAPIWrapper.validate_environment5   s     ,FNNSS!-~	3333333 	 	 	  	 ,8(*=&'s    9queryc           	         g }d}|t          | j        dz
  d          k     r|                     ||| j        t	          | j        d          | j        d                                                              dg           }|                    |           |sn!|dz  }|t          | j        dz
  d          k     | j        dz  dk    rp|dk    rj|rh|                     ||| j        dz  | j        | j        d                                                              dg           }|                    |           |sdS 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                    g | ]}d |                     dd           dd                    d |                     di                                dg           D                        d|                     di                                d	d           d
|                     di                                di                                dd           S )zTitle: title z

Authors: ,c                 8    g | ]}|                     d           S )name)get).0authors     r    
<listcomp>z:GoogleScholarAPIWrapper.run.<locals>.<listcomp>.<listcomp>}   s$    !w!w!w&**V"4"4!w!w!w    publication_infoauthorsz

Summary: summaryz
Total-Citations: inline_linkscited_bytotal)r0   join)r1   results     r    r3   z/GoogleScholarAPIWrapper.run.<locals>.<listcomp>{   s    
 
 

 	cfjj,, c c!w!w6::N`acCdCdChChirsuCvCv!w!w!wxxc c

#5b99==iKKc c !'

>" = = A A*R P P T TU\]_ ` `c c
 
 
r4   z

)
maxr   r   r   minr   get_dictr0   extendr;   )selfr"   total_resultspageresultsdocss         r    runzGoogleScholarAPIWrapper.runJ   s   S$,r1A6666 **"!%"g" .    #g 
 
 &++    ))) BJD1 S$,r1A66664 #q((TBYY=Y **"!%#1B6"g"g   &++    ))) 	=<<
 

 (
 
 
 {{4   r4   )__name__
__module____qualname____doc__r   int__annotations__r   strr   r   r   r   model_configr	   classmethodr   r   r!   rF    r4   r    r   r   	   s            D M3BNNNB"&L(3-&&&:  L _(###$ 3    [ $#&8! 8! 8! 8! 8! 8! 8! 8!r4   r   N)rJ   typingr   r   r   langchain_core.utilsr   pydanticr   r   r	   r   rP   r4   r    <module>rT      s    , , & & & & & & & & & & 5 5 5 5 5 5 ; ; ; ; ; ; ; ; ; ;y! y! y! y! y!i y! y! y! y! y!r4   