# from smolagents import Tool # from langchain_community.retrievers import BM25Retriever # from langchain.docstore.document import Document # import datasets # class GuestInfoRetrieverTool(Tool): # name = "guest_info_retriever" # description = "Retrieves detailed information about gala guests based on their name or relation." # inputs = { # "query": { # "type": "string", # "description": "The name or relation of the guest you want information about." # } # } # output_type = "string" # def __init__(self, docs): # self.is_initialized = False # self.retriever = BM25Retriever.from_documents(docs) # def forward(self, query: str): # results = self.retriever.get_relevant_documents(query) # if results: # return "\n\n".join([doc.page_content for doc in results[:3]]) # else: # return "No matching guest information found." # def load_guest_dataset(): # # Load the dataset # guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train") # # Convert dataset entries into Document objects # docs = [ # Document( # page_content="\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 # ] # # Return the tool # return GuestInfoRetrieverTool(docs) import datasets from langchain.docstore.document import Document from langchain_community.retrievers import BM25Retriever from langchain.tools import Tool # Load the dataset guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train") # Convert dataset entries into Document objects docs = [ Document( page_content="\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 ] bm25_retriever = BM25Retriever.from_documents(docs) def extract_text(query: str) -> str: """Retrieves detailed information about gala guests based on their name or relation.""" results = bm25_retriever.invoke(query) if results: return "\n\n".join([doc.page_content for doc in results[:3]]) else: return "No matching guest information found." guest_info_tool = Tool( name="guest_info_retriever", func=extract_text, description="Retrieves detailed information about gala guests based on their name or relation." )