Jan90's picture
Rename app.py to app_JanikaPiitu.py
d837fec verified
import gradio as gr
import pandas as pd
import numpy as np
import random
def show_stars():
""" Function that shows the HTML script for stars -Janika"""
stars_html = """
<style>
/* Title */
.title-text {
color: white;
font-family: sans-serif;
font-size: 14px;
font-weight: bold;
}
/* Empty stars */
.star-rating {
display: inline-block;
font-size: 1.5em;
color: lightgray;
}
/* Filled stars */
.star-rating .star.filled {
color: gold;
}
/* Box for the whole star rating component */
.rating-box {
border: 1px transparent;
background-color: #1f2937;
padding: 10px;
border-radius: 5px;
width: 100%;
margin-left: 0;
}
/* Box for the title */
.title-box {
border: 1px transparent;
background-color: #ca8a04;
padding: 3px;
border-radius: 8px;
display: inline-block;
margin-bottom: 6px;
}
/* Box for stars */
.star-box {
border: 1px transparent;
background-color: #374151;
padding: 10px;
border-radius: 5px;
width: fit-content;
margin: 0;
}
</style>
<div class="rating-box">
<div class="title-box">
<p class="title-text">Star rating</p>
</div>
<div class="star-box">
<div class="star-rating" data-rating="4">
<span class="star">β˜…</span>
<span class="star">β˜…</span>
<span class="star">β˜…</span>
<span class="star">β˜…</span>
<span class="star">β˜…</span>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const ratingElement = document.querySelector('.star-rating');
const rating = parseInt(ratingElement.getAttribute('data-rating'));
const stars = ratingElement.querySelectorAll('.star');
for (let i = 0; i < rating; i++) {
stars[i].classList.add('filled');
}
});
</script>
"""
return stars_html
# Function to handle feedback submission -Piitu
def handle_feedback(feedback, name):
return f"Thank you for your feedback, {name}!"
# Function to update placeholder text -Piitu
def update_placeholder(name):
if name:
return f"Enter your feedback here, {name}..."
else:
return "Enter your feedback here..."
# Random data for testing, actual data added later
df = pd.DataFrame({
'Year': np.random.randint(2000, 2024, 25),
'Reviews': np.random.randint(120, 320, 25),
})
# Theme
theme = gr.themes.Soft(
primary_hue="yellow",
secondary_hue="amber",
spacing_size="sm",
radius_size="lg",
)
with gr.Blocks(theme=theme) as demo:
# Basic user interface for company's view -Janika
with gr.Tab("User Interface"):
with gr.Row():
with gr.Column(scale=2, min_width=300):
# Overall summary from all feedback
com_summary_output = gr.Textbox(label="Summary")
with gr.Column(scale=1, min_width=300):
# Average star rating across all feedback
com_star_rating = gr.HTML(value=show_stars())
# The most common keywords across all feedback
com_keywords_output = gr.Textbox(label="Keywords")
# Testing Area -Piitu
with gr.Tab("Testing Area"):
with gr.Row():
with gr.Column(scale=1, min_width=300):
name_input = gr.Textbox(label="Enter your name", placeholder="Enter your name here...")
text_input = gr.Textbox(label="Please give us feedback!",
placeholder="Enter your feedback here...",
max_length=5000)
# Update placeholder based on name input -Piitu
name_input.change(fn=update_placeholder, inputs=name_input, outputs=text_input)
# Send button -Piitu
send_button = gr.Button("Send")
# Output for feedback submission confirmation -Piitu
feedback_output = gr.Textbox(label="Submission Result", interactive=False)
# Link button to function that handles feedback submission -Piitu
send_button.click(handle_feedback, inputs=[text_input, name_input], outputs=feedback_output)
with gr.Column(scale=2, min_width=300):
# Estimated star rating from customer's feedback -Janika
cus_star_rating = gr.HTML(value=show_stars())
# Estimated sentiment from customer's feedback -Janika
cus_sentiment = gr.Textbox(label="Sentiment")
# Summary from customer's feedback -Janika
cus_summary_output = gr.Textbox(label="Summary")
# The most common keywords from customer's feedback -Janika
cus_keywords_output = gr.Textbox(label="Keywords")
demo.launch()