Spaces:
Runtime error
Runtime error
import json | |
from typing import List, Optional | |
from phi.document import Document | |
from phi.knowledge.wikipedia import WikipediaKnowledgeBase | |
from phi.tools import Toolkit | |
from phi.utils.log import logger | |
class WikipediaTools(Toolkit): | |
def __init__(self, knowledge_base: Optional[WikipediaKnowledgeBase] = None): | |
super().__init__(name="wikipedia_tools") | |
self.knowledge_base: Optional[WikipediaKnowledgeBase] = knowledge_base | |
if self.knowledge_base is not None and isinstance(self.knowledge_base, WikipediaKnowledgeBase): | |
self.register(self.search_wikipedia_and_update_knowledge_base) | |
else: | |
self.register(self.search_wikipedia) | |
def search_wikipedia_and_update_knowledge_base(self, topic: str) -> str: | |
"""This function searches wikipedia for a topic, adds the results to the knowledge base and returns them. | |
USE THIS FUNCTION TO GET INFORMATION WHICH DOES NOT EXIST. | |
:param topic: The topic to search Wikipedia and add to knowledge base. | |
:return: Relevant documents from Wikipedia knowledge base. | |
""" | |
if self.knowledge_base is None: | |
return "Knowledge base not provided" | |
logger.debug(f"Adding to knowledge base: {topic}") | |
self.knowledge_base.topics.append(topic) | |
logger.debug("Loading knowledge base.") | |
self.knowledge_base.load(recreate=False) | |
logger.debug(f"Searching knowledge base: {topic}") | |
relevant_docs: List[Document] = self.knowledge_base.search(query=topic) | |
return json.dumps([doc.to_dict() for doc in relevant_docs]) | |
def search_wikipedia(self, query: str) -> str: | |
"""Searches Wikipedia for a query. | |
:param query: The query to search for. | |
:return: Relevant documents from wikipedia. | |
""" | |
try: | |
import wikipedia # noqa: F401 | |
except ImportError: | |
raise ImportError( | |
"The `wikipedia` package is not installed. " "Please install it via `pip install wikipedia`." | |
) | |
logger.info(f"Searching wikipedia for: {query}") | |
return json.dumps(Document(name=query, content=wikipedia.summary(query)).to_dict()) | |