Spaces:
Sleeping
Sleeping
| """Tool for the Wikipedia API.""" | |
| from typing import Optional, Type | |
| from langchain_core.callbacks import CallbackManagerForToolRun | |
| from langchain_core.tools import BaseTool | |
| from pydantic import BaseModel, Field | |
| import pandas as pd | |
| from langchain_community.utilities.wikipedia import WikipediaAPIWrapper | |
| class WikipediaQueryInput(BaseModel): | |
| """Input for the WikipediaQuery tool.""" | |
| query: str = Field(description="query to look up on wikipedia") | |
| class WikipediaTool(BaseTool): # type: ignore[override, override] | |
| """Tool that searches the Wikipedia API.""" | |
| name: str = "wikipedia" | |
| description: str = ( | |
| "A wrapper around Wikipedia. " | |
| "Useful for when you need to answer general questions about " | |
| "people, places, companies, facts, historical events, or other subjects. " | |
| "Input should be a search query." | |
| ) | |
| api_wrapper: WikipediaAPIWrapper | |
| args_schema: Type[BaseModel] = WikipediaQueryInput | |
| def _run( | |
| self, | |
| query: str, | |
| run_manager: Optional[CallbackManagerForToolRun] = None, | |
| ) -> str: | |
| """Use the Wikipedia tool.""" | |
| pages = self.api_wrapper.load(query) | |
| for page in pages: | |
| try: | |
| wikitables = pd.read_html(page.metadata["source"], attrs={"class": "wikitable"}) | |
| page.metadata["wikitable"] = "\n---\n".join( | |
| f'{table}' | |
| for table in wikitables | |
| ) | |
| except: | |
| continue | |
| res = "\n---\n".join( | |
| f'{page}' | |
| for page in pages | |
| ) | |
| return res |