File size: 4,262 Bytes
ab0879d
 
46529d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ab0879d
46529d5
 
 
 
 
 
ab0879d
46529d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ab0879d
46529d5
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
import gradio as gr

def disaster_warning(wind_speed, rain_level, temperature, water_speed, air_pressure):
    alerts = []
    color = "green"
    
    # Umuyaga
    if wind_speed > 80:
        alerts.append("⚠️ Umuyaga ukabije! Ishyirwa mu bikorwa rya evacuation rirakenewe.")
        color = "red"
    elif wind_speed > 50:
        alerts.append("⚠️ Umuyaga urimo gukaza, jya witegura.")
        if color != "red":
            color = "orange"
    else:
        alerts.append("✅ Umuyaga uri ku rugero rwiza.")
        
    # Imvura
    if rain_level > 100:
        alerts.append("⚠️ Imvura nyinshi cyane! Hari ibyago byo kunyura mu mazi (Flood).")
        color = "red"
    elif rain_level > 50:
        alerts.append("⚠️ Imvura iragwa, jya witegura gucunga neza umutekano.")
        if color != "red":
            color = "orange"
    else:
        alerts.append("✅ Imvura iri ku rugero rusanzwe.")
    
    # Ubushyuhe
    if temperature > 35:
        alerts.append("⚠️ Ubushyuhe burenze! Hari ibyago byo gufatwa na heat stroke.")
        color = "red"
    elif temperature < 0:
        alerts.append("⚠️ Ubushyuhe buke cyane! Hari ibyago byo gufatwa na hypothermia.")
        if color != "red":
            color = "orange"
    else:
        alerts.append("✅ Ubushyuhe buri ku rugero rwiza.")
        
    # Umuvuduko w’amazi
    if water_speed > 10:
        alerts.append("⚠️ Umuvuduko w’amazi uri hejuru cyane, hari ibyago by’imyuzure.")
        color = "red"
    elif water_speed > 5:
        alerts.append("⚠️ Umuvuduko w’amazi uri hejuru, witegure.")
        if color != "red":
            color = "orange"
    else:
        alerts.append("✅ Umuvuduko w’amazi uri ku rugero rwiza.")
        
    # Uburemere bw’umwuka
    if air_pressure < 980:
        alerts.append("⚠️ Uburemere bw’umwuka buri hasi cyane, bishobora gutera ibiza.")
        color = "red"
    elif air_pressure < 1000:
        alerts.append("⚠️ Uburemere bw’umwuka buri hasi, jya witegura.")
        if color != "red":
            color = "orange"
    else:
        alerts.append("✅ Uburemere bw’umwuka buri ku rugero rwiza.")
    
    return "\n".join(alerts), color

def send_alert(email, message):
    # Simulation yo kohereza email
    if email and "@" in email:
        return f"✅ Alert yoherejwe kuri {email}"
    else:
        return "❌ Email yinjijwe si nziza."

with gr.Blocks() as demo:
    gr.Markdown("## Disaster Warning System (Version ifite Ibipimo byinshi, Alerts, na Colors)")
    
    wind = gr.Slider(0, 150, step=1, label="Umuyaga (km/h)", value=20)
    rain = gr.Slider(0, 200, step=1, label="Imvura (mm)", value=10)
    temp = gr.Slider(-20, 50, step=1, label="Ubushyuhe (°C)", value=25)
    water = gr.Slider(0, 20, step=0.1, label="Umuvuduko w’amazi (m/s)", value=2)
    pressure = gr.Slider(950, 1050, step=1, label="Uburemere bw’umwuka (hPa)", value=1013)
    
    output = gr.Textbox(label="Amakuru y'Ikibazo", lines=12)
    
    email = gr.Textbox(label="Andika Email woherezaho Alert")
    send_btn = gr.Button("📧 Ohereza Alert")
    alert_status = gr.Textbox(label="Status yo kohereza Alert")
    
    def update_output(*args):
        alerts, color = disaster_warning(*args)
        return alerts, f"background-color:{color}; padding:10px; border-radius:5px; color: white;"
    
    wind.change(fn=update_output, inputs=[wind, rain, temp, water, pressure], outputs=[output, output])
    rain.change(fn=update_output, inputs=[wind, rain, temp, water, pressure], outputs=[output, output])
    temp.change(fn=update_output, inputs=[wind, rain, temp, water, pressure], outputs=[output, output])
    water.change(fn=update_output, inputs=[wind, rain, temp, water, pressure], outputs=[output, output])
    pressure.change(fn=update_output, inputs=[wind, rain, temp, water, pressure], outputs=[output, output])
    
    send_btn.click(fn=send_alert, inputs=[email, output], outputs=alert_status)
    
    # Kubanza kwerekana amakuru ya default
    alerts, color = disaster_warning(20, 10, 25, 2, 1013)
    output.value = alerts
    
    # Styling ya default
    output.style = {"background-color": color, "padding": "10px", "border-radius": "5px", "color": "white"}

demo.launch()