Risk1 / app.py
Sanjayraju30's picture
Update app.py
70d0717 verified
import gradio as gr
from risk_model import predict_risk, get_history_df
import pandas as pd
import matplotlib.pyplot as plt
with gr.Blocks() as demo:
gr.Markdown("## 🔥 Heating Mantle Safety Risk Predictor")
# 🔄 Reset button at the top
with gr.Row():
reset_btn = gr.Button("🔄 Reset")
# Input fields
with gr.Row():
temp = gr.Number(label="Max Temperature (°C)", value=100)
duration = gr.Number(label="Duration (min)", value=30)
# Predict button
with gr.Row():
predict_btn = gr.Button("🔍 Predict")
# Output fields
result = gr.Textbox(label="Risk Prediction")
alert = gr.Textbox(label="🚨 Alert Message")
ist_time = gr.Textbox(label="Timestamp (IST)")
risk_score = gr.Textbox(label="📊 Risk Score") # NEW FIELD
summary = gr.Markdown()
history_table = gr.Dataframe(headers=["Temperature", "Duration", "Risk", "Timestamp"], label="📈 Prediction History")
plot = gr.Plot(label="📊 Risk Trend Chart")
def classify(temp, duration):
if temp <= 0 or duration <= 0:
return "❌ Invalid", "Invalid", "Invalid", "", "", pd.DataFrame(), plt.figure()
risk, timestamp = predict_risk(temp, duration)
score = round((temp + duration) / 2, 2)
alert_msg = {
"Low": "✅ SAFE - No action needed",
"Moderate": "⚠️ SAFE - Monitor closely",
"High": "🔥 SHUTDOWN - Immediate attention needed"
}.get(risk, "Unknown")
summary_md = f"""
### 🔎 Summary
- **Max Temp**: {temp} °C
- **Duration**: {duration} min
- **Risk Score**: {score}
- **Risk**: {risk}
- **Timestamp**: {timestamp}
- **Alert**: {alert_msg}
"""
df = get_history_df()
risk_map = {'Low': 1, 'Moderate': 2, 'High': 3}
df["Risk_Num"] = df["Risk"].map(risk_map)
fig, ax = plt.subplots(figsize=(6, 3))
ax.plot(df["Timestamp"], df["Risk_Num"], marker="o", linestyle="-", color="red")
ax.set_ylim(0.5, 3.5)
ax.set_yticks([1, 2, 3])
ax.set_yticklabels(['Low', 'Moderate', 'High'])
ax.set_title("Risk Level Over Time")
ax.set_xlabel("Timestamp")
ax.set_ylabel("Risk Level")
ax.tick_params(axis='x', rotation=45)
plt.tight_layout()
df_display = df[["Temperature", "Duration", "Risk", "Timestamp"]]
return risk, alert_msg, timestamp, score, summary_md, df_display, fig
# Function to reset all fields
def reset_all():
return (
100, 30, "", "", "", "", "", pd.DataFrame(columns=["Temperature", "Duration", "Risk", "Timestamp"]), plt.figure()
)
predict_btn.click(
classify,
inputs=[temp, duration],
outputs=[result, alert, ist_time, risk_score, summary, history_table, plot]
)
reset_btn.click(
reset_all,
inputs=[],
outputs=[temp, duration, result, alert, ist_time, risk_score, summary, history_table, plot]
)
demo.launch()