|
import gradio as gr |
|
import pandas as pd |
|
import random |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
import plotly.graph_objects as go |
|
|
|
|
|
try: |
|
import torch |
|
except ImportError: |
|
torch = None |
|
|
|
|
|
if torch: |
|
tokenizer = AutoTokenizer.from_pretrained("gpt2") |
|
model = AutoModelForCausalLM.from_pretrained("gpt2") |
|
else: |
|
tokenizer, model = None, None |
|
print("PyTorch not available. GPT-2 model will not be loaded.") |
|
|
|
|
|
def analyze_energy_data(energy_data, location, language): |
|
appliances = {} |
|
total_kwh = 0 |
|
peak_hours_rate = 20 |
|
off_peak_hours_rate = 12 |
|
benchmarks = {"AC": 400, "Refrigerator": 200, "Lighting": 150, "Fan": 100} |
|
alerts = [] |
|
|
|
try: |
|
for line in energy_data.strip().split("\n"): |
|
appliance, kwh = line.split(":") |
|
kwh_value = float(kwh.strip().split(" ")[0]) |
|
appliances[appliance.strip()] = kwh_value |
|
total_kwh += kwh_value |
|
|
|
if appliance.strip() in benchmarks and kwh_value > benchmarks[appliance.strip()]: |
|
alert_message = ( |
|
f"Your {appliance.strip()} usage exceeds the limit by " |
|
f"{kwh_value - benchmarks[appliance.strip()]:.2f} kWh." |
|
) |
|
alerts.append(alert_message) |
|
|
|
except Exception: |
|
return ( |
|
"Error: Enter data in the correct format (e.g., AC: 500 kWh).", |
|
"", |
|
"", |
|
"", |
|
"", |
|
"", |
|
0.0 |
|
) |
|
|
|
total_bill = total_kwh * peak_hours_rate |
|
optimized_bill = sum( |
|
appliances[app] * (off_peak_hours_rate if app in ["AC", "Refrigerator"] else peak_hours_rate) |
|
for app in appliances |
|
) |
|
savings = total_bill - optimized_bill |
|
carbon_emissions = total_kwh * 0.707 |
|
weather_tips = ( |
|
f"Considering high temperatures in {location}, keep windows closed during peak heat hours to optimize cooling." |
|
if "Lahore" in location |
|
else "Check local weather to optimize energy usage." |
|
) |
|
|
|
return ( |
|
f"Your current bill is PKR {total_bill:.2f}, potentially saving PKR {savings:.2f}.", |
|
"\n".join([f"{appliance}: {random.choice(['Use during off-peak hours.', 'Turn off when not in use.'])}" for appliance in appliances]), |
|
weather_tips, |
|
"\n".join(alerts), |
|
f"Your carbon footprint: {carbon_emissions:.2f} kg of CO2. Consider using renewable energy.", |
|
f"AI Recommendation: Optimize usage of AC and lighting based on peak hours to reduce costs and emissions.", |
|
savings |
|
) |
|
|
|
|
|
def build_ui(): |
|
with gr.Blocks() as demo: |
|
gr.Markdown("## Energy Consumption Analyzer") |
|
|
|
with gr.Row(): |
|
energy_data = gr.Textbox( |
|
label="Enter Energy Data", |
|
placeholder="e.g., AC: 500 kWh\nRefrigerator: 300 kWh", |
|
lines=5 |
|
) |
|
location = gr.Textbox(label="Enter Location", placeholder="e.g., Lahore") |
|
language = gr.Dropdown( |
|
label="Select Language", |
|
choices=["English", "Urdu"], |
|
value="English" |
|
) |
|
|
|
with gr.Row(): |
|
analyze_button = gr.Button("Analyze") |
|
|
|
with gr.Row(): |
|
output_bill = gr.Text(label="Estimated Bill") |
|
output_recommendations = gr.Text(label="Recommendations") |
|
|
|
with gr.Row(): |
|
output_weather_tips = gr.Text(label="Weather Tips") |
|
output_alerts = gr.Text(label="Alerts") |
|
output_carbon_footprint = gr.Text(label="Carbon Footprint") |
|
output_ai_recommendation = gr.Text(label="AI Recommendations") |
|
|
|
analyze_button.click( |
|
analyze_energy_data, |
|
inputs=[energy_data, location, language], |
|
outputs=[ |
|
output_bill, |
|
output_recommendations, |
|
output_weather_tips, |
|
output_alerts, |
|
output_carbon_footprint, |
|
output_ai_recommendation |
|
] |
|
) |
|
|
|
return demo |
|
|
|
|
|
demo = build_ui() |
|
demo.launch() |
|
|