import gradio as gr import pandas as pd import pickle from sentence_transformers import SentenceTransformer, util import re mdl_name = 'sentence-transformers/all-distilroberta-v1' model = SentenceTransformer(mdl_name) embedding_cache_path = "scotch_embd_distilroberta.pkl" with open(embedding_cache_path, "rb") as fIn: cache_data = pickle.load(fIn) embedding_table = cache_data["embeddings"] reviews = cache_data["data"] reviews['price'] = reviews.price.apply(lambda x: re.findall("\d+", x.replace(",","").replace(".00","").replace("$",""))[0]).astype('int') def user_query_recommend(query, min_p, max_p): # Embed user query embedding = model.encode(query) # Calculate similarity with all reviews sim_scores = util.cos_sim(embedding, embedding_table) #print(sim_scores.shape) # Recommend recommendations = reviews.copy() recommendations['sim'] = sim_scores.T recommendations = recommendations.sort_values('sim', ascending=False) recommendations = recommendations.loc[(recommendations.price >= min_p) & (recommendations.price <= max_p), ['name', 'category', 'price', 'description', 'sim']] return recommendations interface = gr.Interface( user_query_recommend, inputs=[gr.inputs.Textbox(), gr.inputs.Slider(minimum=1, maximum=100, default=30, label='Min Price'), gr.inputs.Slider(minimum=1, maximum=1000, default=70, label='Max Price')], outputs=[ gr.outputs.Textbox(label="Recommendations"), ], title = "Scotch Recommendation", examples=[["very sweet with lemons and oranges and marmalades", 20,50], ["smoky peaty earthy and spicy",50,100]], theme="huggingface", ) interface.launch( enable_queue=True, #cache_examples=True, )