Spaces:
Sleeping
Sleeping
File size: 17,846 Bytes
17973dc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
import datasets
from langchain.docstore.document import Document
#-------------------------------------#
# Step 1: Load and Prepare the Dataset
#--------------------------------------#
# Load the dataset
guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train")
# Convert dataset entries into documents 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['email']}}
)
for guest in guest_dataset
]
#In the code above, we:
# β Load the dataset
# β Convert each guest entry into a Document object with formatted content
# β Store the Document objects in a list
#-------------------------------------#
# Step 2: Create the Retriever Tool
#--------------------------------------#
#We will use the BM25Retriever from the langchain_community.retrievers module to create a retriever tool.
from smolagents import Tool
from langchain_community.retrievers import BM25Retriever
class GuestInfoRetriever(Tool):
name = "Guest_Info_Retreiver"
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:
response_text = []
for doc in results[:3]: #Henter 3 fΓΈrste tabellene/dokumentene i datasettet
lines = doc.page_content.split("\n")
name = ""
description = ""
for line in lines:
if line.startswith("Name"):
name = line.split("Name: ")[1].strip()
if line.startswith("Description"):
description = line.split("Description: ")[1].strip()
conversation_starter = f"Conversation starter: you could ask {name} about {description.lower()}"
response = doc.page_content + "\n" + conversation_starter
response_text.append(response)
if results:
return "\n\n".join(response_text)
else:
return "No mathing guest information found"
guest_info_tool = GuestInfoRetriever(docs)
#Letβs understand this tool step-by-step:
#The (name) and (description) help the agent understand when and how to use this tool
#The (inputs) define what parameters the tool expects (in this case, a search query)
#Weβre using a (BM25Retriever), which is a powerful text retrieval algorithm that doesnβt require (embeddings)
#The (forward) method processes the query and returns the most relevant guest information
#---------------------------------------#
# Step 3: Integrate the Tool with Alfred
#---------------------------------------#
#Finally, letβs bring everything together by creating our agent and equipping it with our custom tool:
from smolagents import CodeAgent, InferenceClientModel
#Initalize the hugging face model
model = InferenceClientModel()
#Create Alfred, our gala agent, with the guest info tool
alfred = CodeAgent(tools=[guest_info_tool], model=model)
#Exsample query Alfred might receive during the gala
response = alfred.run("Tell me about our guest named 'Lady Ada Lovelace")
print("π© Alfred's Response:")
print(response)
####OUTPUT#######
#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------# ββ Tell me about our guest named 'Lady Ada Lovelace ββ ββ°β InferenceClientModel - Qwen/Qwen2.5-Coder-32B-Instruct βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ―ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Step 1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# β Executing parsed code: ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# lady_ada_info = Guest_Info_Retreiver(query="Lady Ada Lovelace")
# print(lady_ada_info)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# c:\Users\didri\Desktop\AI-Agents\AI-Agent\Huggingface Agent Course\unit-3 Use Case for Agentic RAG\Text files\Building Agent (RAG) Project\Smolagents\retriever.py:58: LangChainDeprecationWarning: The method `BaseRetriever.get_relevant_documents` was deprecated in langchain-core 0.1.46 and will be removed in 1.0. Use :meth:`~invoke` instead.
# results = self.retriever.get_relevant_documents(query)
# Execution logs:
# Name: Ada Lovelace
# Relation: best friend
# Description: Lady Ada Lovelace is my best friend. She is an esteemed mathematician and friend. She is renowned for her pioneering work in mathematics and computing, often celebrated as the first computer programmer due to her work on Charles Babbage's Analytical Engine.
# Email: [email protected]
# Name: Marie Curie
# Relation: no relation
# Description: Marie Curie was a groundbreaking physicist and chemist, famous for her research on radioactivity.
# Email: [email protected]
# Name: Dr. Nikola Tesla
# Relation: old friend from university days
# Description: Dr. Nikola Tesla is an old friend from your university days. He's recently patented a new wireless energy transmission system and would be delighted to discuss it with you. Just remember he's passionate about pigeons, so that might make for good small talk.
# Email: [email protected]
# Out: None
# [Step 1: Duration 3.59 seconds| Input tokens: 2,058 | Output tokens: 68]
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Step 2 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Executing parsed code: ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# # Splitting the observation into lines
# lines = lady_ada_info.split('\n')
# # Extracting the relevant information
# name = lines[0].split(': ')[1]
# relation = lines[1].split(': ')[1]
# description = lines[2].split(': ')[1]
# # Formatting the final answer
# final_answer_string = f"Name: {name}\nRelation: {relation}\nDescription: {description}"
# final_answer(final_answer_string)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Out - Final answer: Name: Ada Lovelace
# Relation: best friend
# Description: Lady Ada Lovelace is my best friend. She is an esteemed mathematician and friend. She is renowned for her pioneering work in mathematics and computing, often celebrated as the first computer programmer due to her work on Charles Babbage's Analytical Engine.
# [Step 2: Duration 4.17 seconds| Input tokens: 4,463 | Output tokens: 198]
# π© Alfred's Response:
# Name: Ada Lovelace
# Relation: best friend
# Description: Lady Ada Lovelace is my best friend. She is an esteemed mathematician and friend. She is renowned for her pioneering work in mathematics and computing, often celebrated as the first computer programmer due to her work on Charles Babbage's Analytical Engine.
# PS C:\Users\didri\Desktop\AI-Agents\AI-Agent\Huggingface Agent Course>
#---------------------------------------#
# Example Interaction
#---------------------------------------#
# During the gala, a conversation might flow like this:
# You: βAlfred, who is that gentleman talking to the ambassador?β
# Alfred: quickly searches the guest database βThatβs Dr. Nikola Tesla, sir. Heβs an old friend from your university days.
# Heβs recently patented a new wireless energy transmission system and would be delighted to discuss it with you. Just remember heβs passionate about pigeons, so that might make for good small talk.β
#---------------------------------------#
# Taking It Further
#---------------------------------------#
# Now that Alfred can retrieve guest information, consider how you might enhance this system:
# 1. Improve the retriever to use a more sophisticated algorithm like sentence-transformers
# 2. Implement a conversation memory so Alfred remembers previous interactions
# 3. Combine with web search to get the latest information on unfamiliar guests
# 4. Integrate multiple indexes to get more complete information from verified sources
#Now Alfred is fully equipped to handle guest inquiries effortlessly, ensuring your gala is remembered as the most sophisticated and delightful event of the century! |