from llama_index.core.schema import Document from llama_index.core.tools import FunctionTool from llama_index.retrievers.bm25 import BM25Retriever from llama_index.core.node_parser import SentenceSplitter import datasets # Load the dataset guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train") # Convert dataset entries into Document objects docs = [ Document( text="\n".join([ f"Name: {guest['name']}", f"Relation: {guest['relation']}", f"Description: {guest['description']}", f"Email: {guest['email']}" ]), metadata={"name": guest["name"]} ) for guest in guest_dataset ] # initialize node parser splitter = SentenceSplitter(chunk_size=512) nodes = splitter.get_nodes_from_documents(docs) bm25_retriever = BM25Retriever.from_defaults(nodes=nodes) def get_guest_info_retreiver(query: str) -> str: """Fetches guest information based on the query.""" # Retrieve the most relevant document results = bm25_retriever.retrieve(query) if results: # Return the text of the most relevant document return "\n\n".join([doc.text for doc in results[:3]]) else: return "No relevant guest information found." guest_info_tool = FunctionTool.from_defaults(get_guest_info_retreiver)