
    dh                         S r SSKrSSKJrJrJrJrJr  SSKJ	r	  SSK
JrJr  \R                  " \5      rSr " S S\5      rg)	zUtil that calls Wikipedia.    N)AnyDictIteratorListOptional)Document)	BaseModelmodel_validatori,  c                       \ rS rSr% Sr\\S'   Sr\\S'   Sr	\
\S'   Sr\\S	'   S
r\\S'   \" SS9\S\S\4S j5       5       rS\
S\
4S jr\S\
S\S\\
   4S j5       rS\
S\S\4S jrS\
S\\
   4S jrS\
S\\   4S jrS\
S\\   4S jrSrg)WikipediaAPIWrapper   a5  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                      SSK nUR                  SS5      nUR                  U5        X!S'   U$ ! [         a    [        S5      ef = f)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       _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/wikipedia.pyvalidate_environment(WikipediaAPIWrapper.validate_environment   s[    
	::fd+Dt$$-=!   	B 	s	   +/ Aqueryc                 ^   U R                   R                  US[         U R                  S9n/ nUSU R                    HH  nU R	                  U5      =n(       d  M  U R                  XE5      =n(       d  M7  UR                  U5        MJ     U(       d  gSR                  U5      SU R                   $ )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   runWikipediaAPIWrapper.run/   s    &&----.8J8J . 
 	%&:(:(:;J ,,Z88y8":::QQ7Q$$W- < >{{9%&B(B(BCC    r/   r0   c                 &    SU  SUR                    3$ )NzPage: z

Summary: )r1   )r/   r0   s     r   r)   +WikipediaAPIWrapper._formatted_page_summary=   s    
|;y/@/@.ABBr4   c           	      `   UUR                   UR                  S.nU R                  (       a[  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  UR                  S.O0 n[        UR                  S U R                   0 UEUES9nU$ )N)titler1   source)
categoriespage_url
image_urlsrelated_titles	parent_id
referencesrevision_idsections)page_contentmetadata)r1   urlr   r:   imageslinksr>   r?   r@   rA   r   contentr   )r,   r/   r0   	main_metaadd_metadocs         r   _page_to_document%WikipediaAPIWrapper._page_to_documentA   s     ((mm
	  ++ (22%MM'.."+//&00'22(44%..	  	 "**+GT-G-GH
 
r4   pagec                      U R                   R                  USS9$ ! U R                   R                  R                  U R                   R                  R                  4 a     g f = f)NF)r8   auto_suggest)r   rM   
exceptions	PageErrorDisambiguationError)r,   rM   s     r   r(   WikipediaAPIWrapper._fetch_page^   sc    	##((t%(HH''11'';;
 	 		s    AA#"A#c                 6    [        U R                  U5      5      $ )n
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   loadWikipediaAPIWrapper.loadg   s     DNN5)**r4   c              #      #    U R                   R                  US[         U R                  S9nUSU R                    H;  nU R	                  U5      =n(       d  M  U R                  X45      =n(       d  M7  Uv   M=     g7f)rU   Nr$   )r   r&   r'   r   r(   rK   )r,   r"   r-   r/   r0   rJ   s         r   rW   WikipediaAPIWrapper.lazy_loadq   s      &&----.8J8J . 
 &&:(:(:;J ,,Z88y800GG3GI <s   AA=A=4	A= N)__name__
__module____qualname____firstlineno____doc__r   __annotations__r   intr   strr   boolr   r
   classmethodr   r    r2   staticmethodr   r)   r   rK   r(   r   rX   r   rW   __static_attributes__r\   r4   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 r4   r   )ra   loggingtypingr   r   r   r   r   langchain_core.documentsr   pydanticr	   r
   	getLoggerr]   loggerr'   r   r\   r4   r   <module>ro      s;       6 6 - /			8	$  q) qr4   