
    7|h                     r    d Z ddlZddlmZmZmZmZ ddlmZm	Z	  ej                  e      Z G d de      Zy)z4Utils for interacting with the Semantic Scholar API.    N)AnyDictListOptional)	BaseModelmodel_validatorc                       e Zd ZU dZeed<   dZeed<   dZeed<   dZ	eed<   d	Z
ee   ed
<   g dZee   ed<    ed      ededefd              ZdedefdZy)SemanticScholarAPIWrappera  Wrapper around semanticscholar.org API.
    https://github.com/danielnsilva/semanticscholar

    You should have this library installed.

    `pip install semanticscholar`

    Semantic Scholar API can conduct searches and fetch document metadata
    like title, abstract, authors, etc.

    Attributes:
    top_k_results: number of the top-scored document used for the Semantic Scholar tool
    load_max_docs: a limit to the number of loaded documents

    Example:
    .. code-block:: python

    from langchain_community.utilities.semanticscholar import SemanticScholarAPIWrapper
    ss = SemanticScholarAPIWrapper(
        top_k_results = 3,
        load_max_docs = 3
    )
    ss.run("biases in large language models")
    semanticscholar_search   top_k_resultsi,  S2_MAX_QUERY_LENGTHd   load_max_docsi  doc_content_chars_max)	titleabstractvenueyearpaperIdcitationCountopenAccessPdfauthorsexternalIdsreturned_fieldsbefore)modevaluesreturnc                 p    	 ddl m}  |       }|j                  |d<   |S # t        $ r t        d      w xY w)z7Validate that the python package exists in environment.r   )SemanticScholarr   zfCould not import Semanticscholar python package. Please install it with `pip install semanticscholar`.)semanticscholarr!   search_paperImportError)clsr   r!   schs       l/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/semanticscholar.pyvalidate_environmentz.SemanticScholarAPIWrapper.validate_environment6   sN    		7!#C/2/?/?F+,   	H 	s     5queryc                    | j                  || j                  | j                        }g }|d| j                   D ]d  }dj	                  d t        |dg       D              }|j                  dt        |dd       dt        |d	d       d
| dt        |dd       d	       f |rdj	                  |      d| j                   S y)zRun the Semantic Scholar API.)limitfieldsNz, c              3   &   K   | ]	  }|d      yw)nameN ).0authors     r'   	<genexpr>z0SemanticScholarAPIWrapper.run.<locals>.<genexpr>M   s       #)v s   r   zPublished year: r   z
Title: r   z

Authors: z
Abstract: r   
z

zNo results found.)r   r   r   r   joingetattrappendr   )selfr)   results	documentsitemr   s         r'   runzSemanticScholarAPIWrapper.runF   s    --++D4H4H . 
 	0d001 		Dii  -4T9b-I  G "74#>"? @!$67 8#9 %$T:t<=RA			 ;;y)*FD,F,FGG&    N)__name__
__module____qualname____doc__r   __annotations__r   intr   r   r   r   r   r   strr   classmethodr   r(   r;   r/   r<   r'   r
   r
      s    2  M3""M3+/8C=/
"OT#Y 
 (#$ 3   $' ' 'r<   r
   )r@   loggingtypingr   r   r   r   pydanticr   r   	getLoggerr=   loggerr
   r/   r<   r'   <module>rJ      s4    :  , , /			8	$O'	 O'r<   