Final_Assignment_Agent / wiki_tool.py
Martin Bär
Update Wikipedia search tool
24062eb
raw
history blame
1.9 kB
"""
Wikipedia tool based on LlamaIndex's WikipediaToolSpec
https://docs.llamaindex.ai/en/stable/api_reference/tools/wikipedia/
"""
from typing import Dict, Any
import requests
from llama_index.core.tools import FunctionTool
from llama_index.core.tools.tool_spec.base import BaseToolSpec
class CustomWikipediaToolSpec(BaseToolSpec):
"""
Specifies two tools for querying information from Wikipedia.
"""
# Define the functions that we export to the LLM
spec_functions = ["search_data"]
def load_data(
self, page: str, lang: str = "en", **load_kwargs: Dict[str, Any]
) -> str:
"""
Retrieve a Wikipedia page. Useful for learning about a particular concept that isn't private information.
Args:
page (str): Title of the page to read.
lang (str): Language of Wikipedia to read. (default: English)
"""
import wikipedia
wikipedia.set_lang(lang)
try:
wikipedia_page = wikipedia.page(page, **load_kwargs, auto_suggest=False)
except wikipedia.PageError:
return "Unable to load page. Try searching instead."
# Return wikitext because the result does not contain tables
raw_url = wikipedia_page.url + "?action=raw"
try:
raw_content = requests.get(raw_url).content
except:
return "Unable to load page."
return raw_content
def search_data(self, query: str, lang: str = "en") -> str:
"""
Search Wikipedia for a page related to the given query.
Args:
query (str): the string to search for
"""
import wikipedia
pages = wikipedia.search(query)
if len(pages) == 0:
return "No search results. Try changing your query and use keywords instead of full sentences."
return self.load_data(pages[0], lang)