Risk1 / app.py
Sanjayraju30's picture
Update app.py
baacba5 verified
raw
history blame
2.33 kB
import gradio as gr
from risk_model import predict_risk, retrain_model, get_history_df, get_ist_time
import pandas as pd
import matplotlib.pyplot as plt
with gr.Blocks() as demo:
gr.Markdown("## 🔥 Heating Mantle Safety Risk Predictor")
with gr.Row():
temp = gr.Number(label="Max Temperature (°C)", value=100)
duration = gr.Number(label="Duration (min)", value=30)
with gr.Row():
predict_btn = gr.Button("🔍 Predict")
retrain_btn = gr.Button("🔁 Retrain Model")
result = gr.Textbox(label="Risk Prediction")
score = gr.Textbox(label="Confidence (%)")
alert = gr.Textbox(label="🚨 Alert Message")
ist_time = gr.Textbox(label="Timestamp (IST)")
retrain_output = gr.Textbox(label="Retrain Status")
summary = gr.Markdown()
history_table = gr.Dataframe(headers=["Temperature", "Duration", "Risk", "Confidence", "Timestamp"], label="📈 Prediction History")
plot = gr.Plot(label="📊 Risk Distribution Chart")
def classify(temp, duration):
if temp <= 0 or duration <= 0:
return "❌ Invalid Input", "Use values > 0", "N/A", "N/A", "", pd.DataFrame(), plt.figure()
risk, confidence, timestamp = predict_risk(temp, duration)
if risk == "Low":
alert_msg = "✅ SAFE - No action needed"
elif risk == "Moderate":
alert_msg = "⚠️ SAFE - Monitor closely"
else:
alert_msg = "🔥 SHUTDOWN - Immediate attention needed"
summary_md = f"""
### 🔎 Summary
- **Max Temp**: {temp} °C
- **Duration**: {duration} min
- **Risk**: {risk}
- **Confidence**: {confidence:.2f}%
- **Timestamp**: {timestamp}
- **Alert**: {alert_msg}
"""
df = get_history_df()
# Plot chart
fig, ax = plt.subplots()
risk_counts = df["Risk"].value_counts()
risk_counts.plot(kind="bar", ax=ax, color=["green", "orange", "red"])
ax.set_title("Risk Level Distribution")
ax.set_ylabel("Count")
return f"{risk}", f"{confidence:.2f}", alert_msg, timestamp, summary_md, df, fig
predict_btn.click(classify, inputs=[temp, duration],
outputs=[result, score, alert, ist_time, summary, history_table, plot])
retrain_btn.click(retrain_model, outputs=[retrain_output])
demo.launch()