
    dh5                         S r SSKrSSK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QrSrS	rS
rSr " S S\
5      rg)zUtil that calls Wikidata.    N)AnyDictListOptional)Document)	BaseModelmodel_validatori,  )7P31P279P27P361P527P495P17P585P131P106P21P569P570P577P50P571P641P625P19P69P108P136P39P161P20P101P179P175P7937P57P607P509P800P449P580P582P276r   P112P740P159P452P102P1142P1387P1576P140P178P287P25P22P40P185P802P1416enzlangchain-wikidataz"https://www.wikidata.org/w/api.phpz0https://www.wikidata.org/w/rest.php/wikibase/v1/c                       \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr	\
\S'   S	r\\S
'   \r\\   \S'   \r\\S'   \" SS9\S\S\4S j5       5       rS\S\\   4S jrS\S\\   4S jrS\S\4S jrSrg)WikidataAPIWrapperL   a[  Wrapper around the Wikidata API.

To use, you should have the ``wikibase-rest-api-client`` and
``mediawikiapi `` python packages installed.
This wrapper will use the Wikibase APIs to conduct searches and
fetch item content. By default, it will return the item content
of the top-k results.
It limits the Document content by doc_content_chars_max.
wikidata_mwwikidata_rest   top_k_resultsFload_all_available_metai  doc_content_chars_maxwikidata_propslangbefore)modevaluesreturnc                      SSK Jn  SSKJn  U" U" [        [
        S95      US'    SSKJn  U" S[        S	[        0S
S9nXQS'   U$ ! [         a    [        S5      ef = f! [         a    [        S5      ef = f)z7Validate that the python package exists in environment.r   )MediaWikiAPI)Config)
user_agentmediawiki_urlrD   z`Could not import mediawikiapi python package. Please install it with `pip install mediawikiapi`.)Client<   z
User-AgentT)timeoutbase_urlheadersfollow_redirectsrE   zxCould not import wikibase_rest_api_client python package. Please install it with `pip install wikibase-rest-api-client`.)
mediawikiapirQ   mediawikiapi.configrR   WIKIDATA_USER_AGENTWIKIDATA_API_URLImportErrorwikibase_rest_api_clientrU   WIKIDATA_REST_API_URL)clsrN   rQ   rR   rU   clients         ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/wikidata.pyvalidate_environment'WikidataAPIWrapper.validate_environment_   s    	12$0"5EUV%F=!	7.%':;!%	F '-?# +  	E 	   	Q 	s   $A A AA5qidc                 V   SSK Jn  U" U R                  U R                  U R                  S9nUR                  U5      nU(       d  [        R                  SU S35        g / nUR                  (       a  UR                  SUR                   35        UR                  (       a  UR                  SUR                   35        UR                  (       a-  UR                  SS	R                  UR                  5       35        UR                  R                  5        H_  u  pgU(       d  M  UR                  UR                   S
S	R                  U Vs/ sH  oR                  =(       d    SPM     sn5       35        Ma     [!        SR                  U5      S U R"                   USU 3S.S9$ s  snf )Nr   )FluentWikibaseClient)supported_propsrK   zCould not find item z in WikidatazLabel: zDescription: z	Aliases: z, z: unknown
zhttps://www.wikidata.org/wiki/)titlesource)page_contentmeta))wikibase_rest_api_client.utilities.fluentri   rE   rJ   rK   get_itemloggerwarninglabelappenddescriptionaliasesjoin
statementsitemsvaluer   rI   )	selfrg   ri   fluent_clientresp	doc_linesproprN   vs	            rd   _item_to_document$WikidataAPIWrapper._item_to_document   sh   R.B0C0C$))/
 %%c*NN1#lCD	::wtzzl34}T-=-=,>?@<<y4<<)@(ABC OO113LDv  zzl"TYYf/Uf0D90Df/U%V$WX 4 ))I.0L$2L2LM,J3%*PQ
 	
 0Vs   F&queryc                     US[          nU R                  R                  X R                  S9n/ nUSU R                    H.  nU R	                  U5      =n(       d  M  UR                  U5        M0     U$ )zK
Run Wikidata search and get the item documents plus the meta information.
Nresults)WIKIDATA_MAX_QUERY_LENGTHrD   searchrG   r   rv   r}   r   clipped_queryr{   docsitemdocs          rd   loadWikidataAPIWrapper.load   sw    
 889  ''?Q?Q'R.D../D,,T22s2C  0     c                 L   US[          nU R                  R                  X R                  S9n/ nUSU R                    H>  nU R	                  U5      =n(       d  M  UR                  SU SUR                   35        M@     U(       d  gSR                  U5      SU R                   $ )z+Run Wikidata search and get item summaries.Nr   zResult z:
z(No good Wikidata Search Result was foundz

)	r   rD   r   rG   r   rv   ro   ry   rI   r   s          rd   runWikidataAPIWrapper.run   s     889  ''?Q?Q'R.D../D,,T22s2gdV3s/?/?.@AB 0 ={{4 !=4#=#=>>r    N)__name__
__module____qualname____firstlineno____doc__r   __annotations__rG   intrH   boolrI   DEFAULT_PROPERTIESrJ   r   strDEFAULT_LANG_CODErK   r	   classmethodr   re   r   r   r   r   r   __static_attributes__r   r   rd   rB   rB   L   s     M3$)T)!%3% 2NDI2!D#!(#$ 3   $@
S 
Xh-? 
<# $x. ? ? ?r   rB   )r   loggingtypingr   r   r   r   langchain_core.documentsr   pydanticr   r	   	getLoggerr   rs   r   r   r   r]   r^   ra   rB   r   r   rd   <module>r      s^      , , - /			8	$ 8 r  * 7 J l? l?r   