|
import pandas as pd |
|
import gradio as gr |
|
from datetime import datetime |
|
from inference import RecommendationEngine |
|
|
|
|
|
class QueryInputForm: |
|
def __init__(self): |
|
|
|
self.channel_options = [ |
|
'Paid Social', 'Paid Search - Brand', 'Organic', 'Email - Transactional', |
|
'Affiliate', 'Paid Search', 'Direct', 'Referral', 'Email - Marketing', |
|
'Paid Search - Brand Reactivation', 'SMS - Marketing', 'Email - Trigger', |
|
'Referral - Whitelabel', 'Referral - Merchant', 'Social', 'SMS - Trigger', |
|
] |
|
|
|
self.device_type_options = [ |
|
'Mobile', 'Desktop', 'Phablet', 'Tablet', 'TV', |
|
'Portable Media Player', 'Wearable', |
|
] |
|
|
|
|
|
self.default_query_text = "pizza" |
|
|
|
|
|
self.recommender_engine = RecommendationEngine() |
|
|
|
def get_recommendations(self, channel, device_type, query_text): |
|
|
|
raw_query = { |
|
'user_id': "new_user", |
|
'channel': channel, |
|
'device_type': device_type, |
|
'query_text': query_text, |
|
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), |
|
} |
|
|
|
|
|
self.recommender_engine.get_recommendations(raw_query) |
|
recommendations_df = pd.DataFrame(self.recommender_engine.recommendations) |
|
recommendations_df = recommendations_df.style.format({'Score': '{:.2f}'}) |
|
|
|
return gr.update(value=recommendations_df) |
|
|
|
|
|
|
|
form = QueryInputForm() |
|
|
|
|
|
def recommendation_interface(channel, device_type, query_text): |
|
return form.get_recommendations(channel, device_type, query_text) |
|
|
|
|
|
with gr.Blocks(theme= gr.themes.Origin(text_size="md", spacing_size="lg"), title="E-Commerce Recommendation Engine Demo") as interface: |
|
gr.Markdown("# E-Commerce Recommendation Engine Demo", elem_id='title') |
|
with gr.Row(): |
|
with gr.Column(): |
|
channel_dropdown = gr.Dropdown(choices=form.channel_options, label="Channel") |
|
device_dropdown = gr.Dropdown(choices=form.device_type_options, label="Device Type") |
|
query_input = gr.Textbox(value=form.default_query_text, label="Query Text") |
|
submit_button = gr.Button("Submit", variant="primary") |
|
|
|
with gr.Column(scale=3): |
|
gr.Markdown("## Top Recommendations:") |
|
recommendation_output = gr.Dataframe( |
|
show_label=False, |
|
headers = [ |
|
'Score', 'Product Name', 'Category', 'Price (in cents)', 'Reviews', |
|
'Merchant', 'City', 'State', 'Region', |
|
'Free Shipping', 'Sold Out', 'Editor\'s Pick', 'On Sale', |
|
], |
|
interactive=False, |
|
elem_id="recommendation-table", |
|
max_height=400, |
|
column_widths=["90px", "350px", "250px", "90px", "90px", "200px", "150px", "150px", "150px", "90px", "90px", "90px", "90px"] |
|
) |
|
|
|
submit_button.click( |
|
recommendation_interface, |
|
inputs=[channel_dropdown, device_dropdown, query_input], |
|
outputs=recommendation_output, |
|
) |
|
|
|
interface.css = """ |
|
#title { |
|
text-align: center; |
|
margin: 20px; |
|
} |
|
""" |
|
|
|
if __name__ == "__main__": |
|
interface.launch() |
|
|