CindyDelage commited on
Commit
beee8e9
·
verified ·
1 Parent(s): 393795a

Create retriever.py

Browse files
Files changed (1) hide show
  1. retriever.py +87 -0
retriever.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from smolagents import Tool
2
+ from langchain_community.retrievers import BM25Retriever
3
+ from langchain.docstore.document import Document
4
+
5
+ class VegetableInfoRetrieverTool(Tool):
6
+ name = "vegetable_info_retriever"
7
+ description = "Retrieve information about vegetables based on their name or characteristics."
8
+ inputs = {
9
+ "query": {
10
+ "type": "string",
11
+ "description": "The name or description of the vegetable you want information about."
12
+ }
13
+ }
14
+ output_type = "string"
15
+
16
+ def __init__(self, docs):
17
+ self.is_initialized = False
18
+ self.retriever = BM25Retriever.from_documents(docs)
19
+
20
+ def forward(self, query: str):
21
+ results = self.retriever.get_relevant_documents(query)
22
+ if results:
23
+ return "\n\n".join([doc.page_content for doc in results[:3]])
24
+ else:
25
+ return "No matching vegetable information found."
26
+
27
+
28
+ def load_vegetable_dataset():
29
+ # Manually define the vegetable data
30
+ vegetable_data = [
31
+ {
32
+ "name": "Sweet Potato",
33
+ "type": "root",
34
+ "description": "A starchy root vegetable with sweet flavor, rich in fiber and beta-carotene."
35
+ },
36
+ {
37
+ "name": "Fresh Basil",
38
+ "type": "herb",
39
+ "description": "An aromatic green herb often used fresh in Mediterranean cuisine."
40
+ },
41
+ {
42
+ "name": "Green Beans",
43
+ "type": "legume",
44
+ "description": "Long green pods with small seeds inside, eaten whole and rich in vitamins."
45
+ },
46
+ {
47
+ "name": "Bell Pepper",
48
+ "type": "fruit vegetable",
49
+ "description": "Crunchy and colorful, bell peppers are technically fruits, but used as vegetables in cooking."
50
+ },
51
+ {
52
+ "name": "Broccoli",
53
+ "type": "cruciferous",
54
+ "description": "Green vegetable with edible flowering heads and stalks, high in fiber and vitamin C."
55
+ },
56
+ {
57
+ "name": "Celery",
58
+ "type": "stem",
59
+ "description": "Crisp green stalks often eaten raw or cooked, known for high water content and fiber."
60
+ },
61
+ {
62
+ "name": "Zucchini",
63
+ "type": "squash",
64
+ "description": "Soft-skinned green vegetable, technically a fruit, often grilled or sautéed."
65
+ },
66
+ {
67
+ "name": "Lettuce",
68
+ "type": "leaf",
69
+ "description": "Leafy green used in salads, comes in various varieties like romaine or butterhead."
70
+ },
71
+ ]
72
+
73
+ # Convert each entry to a Document
74
+ docs = [
75
+ Document(
76
+ page_content="\n".join([
77
+ f"Name: {veg['name']}",
78
+ f"Type: {veg['type']}",
79
+ f"Description: {veg['description']}"
80
+ ]),
81
+ metadata={"name": veg["name"]}
82
+ )
83
+ for veg in vegetable_data
84
+ ]
85
+
86
+ # Return the tool
87
+ return VegetableInfoRetrieverTool(docs)