Spaces:
Sleeping
Sleeping
File size: 4,105 Bytes
41b94ac a885eb3 41b94ac ce1a48d 62ec108 f6533e1 63d35e5 f6533e1 ce1a48d f6533e1 63d35e5 f6533e1 63d35e5 90f1636 63d35e5 f6533e1 63d35e5 f6533e1 8e46f79 e8e3406 63d35e5 8e46f79 ce1a48d 63d35e5 8e46f79 63d35e5 a885eb3 63d35e5 a885eb3 63d35e5 a885eb3 63d35e5 ce1a48d a885eb3 63d35e5 ce1a48d 63d35e5 a885eb3 41b94ac 63d35e5 ce1a48d 63d35e5 41b94ac 63d35e5 41b94ac 63d35e5 a885eb3 63d35e5 a885eb3 ce1a48d 63d35e5 ce1a48d 63d35e5 f6533e1 63d35e5 40b013d 63d35e5 90f1636 63d35e5 90f1636 e8e3406 ce1a48d 63d35e5 90f1636 ce1a48d 41b94ac 63d35e5 41b94ac a885eb3 41b94ac 63d35e5 e8e3406 63d35e5 e8e3406 63d35e5 41b94ac 63d35e5 41b94ac 63d35e5 41b94ac 63d35e5 41b94ac | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
from google import genai
# π ADD YOUR GEMINI API KEY
client = genai.Client(api_key="AIzaSyCvvewIh6BVyULlEmw1QE75vWsEmu8QNH0")
# ---------- READ FILE ----------
def read_file(file):
try:
if file is None:
return pd.DataFrame()
if file.name.endswith(".xlsx"):
return pd.read_excel(file.name)
else:
return pd.read_csv(file.name, engine="python")
except:
return pd.DataFrame()
# ---------- PREVIEW ----------
def preview(file):
df = read_file(file)
if df.empty:
return pd.DataFrame({"Message": ["Could not read file"]})
return df.head(20)
# ---------- CONVERSION ----------
def convert(file):
df = read_file(file)
if df.empty:
return pd.DataFrame({"Message": ["No data"]})
if "Time in Session (minutes)" not in df.columns:
return pd.DataFrame({"Message": ["No recognizable webinar structure"]})
df["Time in Session (minutes)"] = pd.to_numeric(
df["Time in Session (minutes)"], errors="coerce"
)
df = df.dropna()
if df.empty:
return pd.DataFrame({"Message": ["No usable data"]})
total = len(df)
completed = df[df["Time in Session (minutes)"] > 60]
completion = (len(completed) / total) * 100
avg_time = df["Time in Session (minutes)"].mean()
if avg_time > 150:
satisfaction, nps = 4.6, 75
elif avg_time > 100:
satisfaction, nps = 4.2, 65
elif avg_time > 60:
satisfaction, nps = 3.9, 55
else:
satisfaction, nps = 3.5, 40
result = pd.DataFrame({
"Course Name": ["Webinar Course"],
"NPS Score": [nps],
"Completion Rate (%)": [round(completion, 2)],
"Satisfaction (1-5)": [satisfaction]
})
result["Health Score"] = (
(result["NPS Score"] * 0.4) +
(result["Completion Rate (%)"] * 0.3) +
(result["Satisfaction (1-5)"] * 20 * 0.3)
)
return result
# ---------- CHART ----------
def make_chart(df):
if df is None or df.empty or "Course Name" not in df.columns:
return None
fig, ax = plt.subplots()
ax.bar(df["Course Name"], df["Health Score"])
plt.xticks(rotation=45)
plt.title("Course Health Score")
return fig
# ---------- AI CHAT ----------
def chat_with_data(file, message, history):
if history is None:
history = []
try:
df = read_file(file)
preview_text = df.head(20).to_string()
prompt = f"""
You are a data assistant.
Dataset preview:
{preview_text}
User question:
{message}
Explain:
- what this dataset is
- what issues exist
- how to structure it into course metrics
"""
response = client.models.generate_content(
model="gemini-1.5-flash",
contents=prompt
)
reply = response.text
except Exception as e:
reply = str(e)
# β
OLD FORMAT (COMPATIBLE)
history.append((message, reply))
return history, history
# ---------- UI ----------
with gr.Blocks() as app:
gr.Markdown("# π Course Quality Tracker + AI Assistant")
file_input = gr.File(label="Upload CSV / Excel")
gr.Markdown("## π Data Preview")
preview_table = gr.Dataframe()
gr.Markdown("## βοΈ Auto Conversion")
result_table = gr.Dataframe()
chart = gr.Plot()
gr.Markdown("## π€ Ask AI about your data")
chatbot = gr.Chatbot() # β
FIXED (no type)
msg = gr.Textbox(label="Ask anything about your dataset")
file_input.change(
fn=preview,
inputs=file_input,
outputs=preview_table
)
file_input.change(
fn=convert,
inputs=file_input,
outputs=result_table
)
result_table.change(
fn=make_chart,
inputs=result_table,
outputs=chart
)
msg.submit(
fn=chat_with_data,
inputs=[file_input, msg, chatbot],
outputs=[chatbot, chatbot]
)
app.launch() |