Spaces:
Sleeping
Sleeping
| 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) | |