Spaces:
Sleeping
Sleeping
File size: 1,624 Bytes
201adcb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
"""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 |