
    Ng                         d Z ddlZddlmZmZmZmZmZ ddlm	Z	 ddl
mZmZ  ej        e          ZdZ G d de          ZdS )	zUtil that calls Wikipedia.    N)AnyDictIteratorListOptional)Document)	BaseModelmodel_validatori,  c                   B   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d
<    ed          ededefd                        Zde	de	fdZede	dedee	         fd            Zde	dedefdZde	dee	         fdZde	dee         fdZde	dee         fdZdS )WikipediaAPIWrapperaM  Wrapper around WikipediaAPI.

    To use, you should have the ``wikipedia`` python package installed.
    This wrapper will use the Wikipedia API to conduct searches and
    fetch page summaries. By default, it will return the page summaries
    of the top-k results.
    It limits the Document content by doc_content_chars_max.
    wiki_client   top_k_resultsenlangFload_all_available_metai  doc_content_chars_maxbefore)modevaluesreturnc                     	 ddl }|                    dd          }|                    |           ||d<   n# t          $ r t          d          w xY w|S )z7Validate that the python package exists in environment.r   Nr   r   r   zZCould not import wikipedia python package. Please install it with `pip install wikipedia`.)	wikipediagetset_langImportError)clsr   r   r   s       c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/utilities/wikipedia.pyvalidate_environmentz(WikipediaAPIWrapper.validate_environment   s    
	::fd++Dt$$$$-F=!! 	 	 	B  	
 s	   47 Aqueryc                 Z   | j                             |dt                   | j                  }g }|d| j                 D ]F}|                     |          x}r-|                     ||          x}r|                    |           G|sdS d                    |          d| j                 S )z,Run Wikipedia search and get page summaries.Nresultsz)No good Wikipedia Search Result was foundz

)	r   searchWIKIPEDIA_MAX_QUERY_LENGTHr   _fetch_page_formatted_page_summaryappendjoinr   )selfr    page_titles	summaries
page_title	wiki_pagesummarys          r   runzWikipediaAPIWrapper.run/   s    &-----.8J . 
 
 	%&:(:&:; 	. 	.J ,,Z888y .":::yQQQ7 .$$W--- 	?>>{{9%%&B(B&BCC    r-   r.   c                     d|  d|j          S )NzPage: z

Summary: )r/   )r-   r.   s     r   r'   z+WikipediaAPIWrapper._formatted_page_summary=   s    B
BBy/@BBBr1   c           	          ||j         |j        d}| j        r3|j        |j        |j        |j        |j        |j        |j        |j	        dni }t          |j        d | j                 i ||          }|S )N)titler/   source)
categoriespage_url
image_urlsrelated_titles	parent_id
referencesrevision_idsections)page_contentmetadata)r/   urlr   r6   imageslinksr:   r;   r<   r=   r   contentr   )r*   r-   r.   	main_metaadd_metadocs         r   _page_to_documentz%WikipediaAPIWrapper._page_to_documentA   s     (m
 
	  +'2%M'."+/&0'2(4%.	 	 	  	 "*+GT-G+GH
 
 
 
r1   pagec                     	 | j                             |d          S # | j         j        j        | j         j        j        f$ r Y d S w xY w)NF)r4   auto_suggest)r   rH   
exceptions	PageErrorDisambiguationError)r*   rH   s     r   r&   zWikipediaAPIWrapper._fetch_page^   sa    	#((t%(HHH'1';
 	 	 	 44		s    %AAc                 F    t          |                     |                    S )
        Run Wikipedia search and get the article text plus the meta information.
        See

        Returns: a list of documents.

        )list	lazy_load)r*   r    s     r   loadzWikipediaAPIWrapper.loadg   s     DNN5))***r1   c              #      K   | j                             |dt                   | j                  }|d| j                 D ]5}|                     |          x}r|                     ||          x}r|V  6dS )rO   Nr"   )r   r$   r%   r   r&   rG   )r*   r    r+   r-   r.   rF   s         r   rQ   zWikipediaAPIWrapper.lazy_loadq   s       &-----.8J . 
 
 &&:(:&:; 	 	J ,,Z888y 00YGGG3 III	 	r1   N)__name__
__module____qualname____doc__r   __annotations__r   intr   strr   boolr   r
   classmethodr   r   r0   staticmethodr   r'   r   rG   r&   r   rR   r   rQ    r1   r   r   r      s          M3D#$)T)))!%3%%%_(###$ 3    [ $#D D D D D D CC CC CHSM C C C \CC C H    :     +# +$x. + + + +s x'9      r1   r   )rW   loggingtypingr   r   r   r   r   langchain_core.documentsr   pydanticr	   r
   	getLoggerrT   loggerr%   r   r^   r1   r   <module>re      s         6 6 6 6 6 6 6 6 6 6 6 6 6 6 - - - - - - / / / / / / / /		8	$	$  q q q q q) q q q q qr1   