rbbist commited on
Commit
2da1974
·
verified ·
1 Parent(s): 91cce58

Initial files commit

Browse files
Files changed (3) hide show
  1. app.py +12 -0
  2. menu_chromadb_semantic_search.py +50 -0
  3. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from menu_chromadb_semantic_search import search_dishes
3
+
4
+ iface = gr.Interface(
5
+ fn=search_dishes,
6
+ inputs=gr.Textbox(label="Search for a dish"),
7
+ outputs=gr.Textbox(label="Top 5 Similar Dishes"),
8
+ title="Menu Item Semantic Search",
9
+ description="Type a dish name to find the top 5 similar menu items."
10
+ )
11
+
12
+ iface.launch()
menu_chromadb_semantic_search.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import chromadb
2
+ from chromadb.utils import embedding_functions
3
+ import csv
4
+
5
+ # --- Setup ChromaDB (in-memory for Hugging Face Spaces free tier) ---
6
+ chroma_client = chromadb.Client()
7
+
8
+ # SentenceTransformer embedding function
9
+ sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
10
+ model_name="all-MiniLM-L6-v2"
11
+ )
12
+
13
+ # Create collection
14
+ collection = chroma_client.create_collection(
15
+ name="my_collection",
16
+ embedding_function=sentence_transformer_ef
17
+ )
18
+
19
+ # --- Load CSV data ---
20
+ with open("menu_items.csv") as file:
21
+ lines = csv.reader(file)
22
+ documents = []
23
+ metadatas = []
24
+ ids = []
25
+
26
+ for i, line in enumerate(lines):
27
+ if i == 0:
28
+ continue # skip header
29
+ documents.append(line[1])
30
+ metadatas.append({"item_id": line[0]})
31
+ ids.append(str(i))
32
+
33
+ # Add to ChromaDB
34
+ collection.add(
35
+ documents=documents,
36
+ metadatas=metadatas,
37
+ ids=ids
38
+ )
39
+
40
+ def search_dishes(query: str) -> str:
41
+ """Search for top 5 similar dishes."""
42
+ results = collection.query(
43
+ query_texts=[query],
44
+ n_results=5,
45
+ include=["documents", "metadatas"]
46
+ )
47
+ hits = results["documents"][0]
48
+ ids_meta = results["metadatas"][0]
49
+ output = [f"{ids_meta[i]['item_id']}: {hits[i]}" for i in range(len(hits))]
50
+ return "\n".join(output)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ chromadb
3
+ sentence-transformers