import gradio as gr # Simple simulation model for EV trip energy use def estimate_energy(distance_km, elevation_m, avg_speed, temp_c): base_kwh_per_km = 0.18 # typical EV consumption speed_penalty = 0.001 * (avg_speed - 70) # penalty per km/h above 70 temp_penalty = 0.002 * abs(temp_c - 20) # penalty per °C deviation elevation_penalty = elevation_m * 0.00002 # kWh per meter of climb kwh = distance_km * (base_kwh_per_km + speed_penalty + temp_penalty) kwh += elevation_penalty return round(max(kwh, 0.1), 2) def range_safe(available_kWh, reserve_kWh, distance_km, elevation_m, avg_speed, temp_c): needed_kWh = estimate_energy(distance_km, elevation_m, avg_speed, temp_c) # safety check margin = available_kWh - reserve_kWh - needed_kWh if margin >= 5: status = "SAFE TO PROCEED" confidence = "High confidence" bar = "🟩🟩🟩" elif margin >= 0: status = "MARGINALLY SAFE" confidence = "Medium confidence" bar = "🟨🟨⬜" else: status = "CHARGING REQUIRED" confidence = "Low confidence" bar = "🟥⬜⬜" explanation = ( f"Trip requires {needed_kWh} kWh. " f"You have {available_kWh} kWh available with {reserve_kWh} kWh reserved.\n" f"Energy margin: {round(margin,2)} kWh.\n" f"Confidence level: {confidence} {bar}" ) return f"{status}\n\n{explanation}" demo = gr.Interface( fn=range_safe, inputs=[ gr.Number(label="Available Battery (kWh)", value=50), gr.Number(label="Reserve to Keep (kWh)", value=10), gr.Number(label="Distance (km)", value=120), gr.Number(label="Elevation Gain (m)", value=300), gr.Number(label="Average Speed (km/h)", value=80), gr.Number(label="Temperature (°C)", value=15), ], outputs=gr.Textbox(lines=8, label="Result", interactive=False), title="Enhanced Range Safe Mode Prototype", description="Multi-factor range safety calculator simulating realistic EV behavior.", ) demo.launch()