
    7|h                         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y)	zUtil that calls Wikipedia.    N)AnyDictIteratorListOptional)Document)	BaseModelmodel_validatori,  c                      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y)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 }|j                  dd      }|j                  |       ||d<   |S # t        $ r t        d      w xY w)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       f/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/wikipedia.pyvalidate_environmentz(WikipediaAPIWrapper.validate_environment   s]    
	::fd+Dt$$-F=!   	B 	s	   ,0 Aqueryc                 @   | j                   j                  |dt         | j                        }g }|d| j                   D ]<  }| j	                  |      x}s| j                  ||      x}s,|j                  |       > |sydj                  |      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    &&----.8J8J . 
 	%&:(:(:; 	.J ,,Z88y8":::yQQ7Q$$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    
|;y/@/@.ABBr1   c           	      \   ||j                   |j                  d}| j                  r[|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     ((mm
	  ++ (22%MM'.."+//&00'22(44%..	  	 "**+GT-G-GH
 
r1   pagec                     	 | j                   j                  |d      S # | j                   j                  j                  | j                   j                  j                  f$ r Y y w xY w)NF)r4   auto_suggest)r   rH   
exceptions	PageErrorDisambiguationError)r*   rH   s     r   r&   zWikipediaAPIWrapper._fetch_page^   sc    	##((t%(HH''11'';;
 	 		s    AA%$A%c                 6    t        | j                  |            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                   j                  |dt         | j                        }|d| j                   D ]/  }| j	                  |      x}s| j                  ||      x}s,| 1 yw)rO   Nr"   )r   r$   r%   r   r&   rG   )r*   r    r+   r-   r.   rF   s         r   rQ   zWikipediaAPIWrapper.lazy_loadq   s      &&----.8J8J . 
 &&:(:(:; 	J ,,Z88y800YGG3GI	s   AA3A3,A3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 CC CC CHSM 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 - /			8	$  q) qr1   