File size: 4,070 Bytes
b555fe1 a851214 372b3f3 a851214 27cc353 a851214 372b3f3 a851214 b555fe1 a851214 27cc353 a851214 b0848d8 b555fe1 b0848d8 b555fe1 b0848d8 a851214 b0848d8 372b3f3 5aee751 b555fe1 5aee751 b555fe1 a851214 372b3f3 a851214 27cc353 a851214 b555fe1 a851214 |
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 |
import streamlit as st
import pandas as pd
import google.generativeai as genai
import os
from io import StringIO
# Initialize Gemini
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
model = genai.GenerativeModel("gemini-1.5-flash")
# Load solar data
@st.cache_data
def load_data():
df = pd.read_csv('https://huggingface.co/spaces/MLDeveloper/AI_based_Solar_Project_Estimation_Tool/resolve/main/solar_data_india_2024.csv')
return df
df = load_data()
# UI - Form for user input
st.set_page_config(page_title="AI-based Solar Project Estimation Tool", layout="centered")
st.title("AI-based Solar Project Estimation Tool")
st.write("### Enter Your Details Below:")
with st.form("solar_form"):
state_options = df['State'].dropna().unique()
location = st.selectbox("Select your State", options=sorted(state_options))
roof_size = st.number_input("Enter your roof size (in sq meters)", min_value=1)
electricity_bill = st.number_input("Enter your monthly electricity bill (₹)", min_value=0)
submitted = st.form_submit_button("Get Estimate")
# Build the prompt for Gemini
def build_prompt(location, roof_size, electricity_bill, ghi, solar_cost_per_kw):
prompt = f"""
Estimate the solar system for the location '{location}' based on the following details:
- Roof size: {roof_size} sq meters
- Monthly electricity bill: ₹{electricity_bill}
- Average GHI (solar radiation) for {location}: {ghi} kWh/m²/day
- Solar system cost per kW in {location}: ₹{solar_cost_per_kw}
Provide:
1. Estimated solar system size in kW
2. Estimated daily solar output in kWh
3. Total system cost in ₹
4. Monthly savings in ₹
5. Payback period in years
"""
return prompt
# Generate the solar project estimate via Gemini
if submitted and location and roof_size > 0 and electricity_bill >= 0:
state_data = df[df['State'].str.contains(location, case=False)].iloc[0]
if state_data is not None:
ghi = state_data['Avg_GHI (kWh/m²/day)']
solar_cost_per_kw = state_data['Solar_Cost_per_kW (₹)']
prompt_text = build_prompt(location, roof_size, electricity_bill, ghi, solar_cost_per_kw)
if prompt_text:
with st.spinner("Generating solar estimate with Gemini..."):
response = model.generate_content(prompt_text)
st.subheader("Solar Project Estimate")
st.text_area("Generated Estimate", response.text, height=200)
else:
st.warning("Please check the inputs again.")
else:
st.error("Sorry, the location entered does not match any available data.")
else:
st.warning("Please fill out all fields to see your solar project estimate.")
# Batch CSV Export
st.markdown("### Export Solar Estimates")
batch = st.number_input("How many estimates to generate?", min_value=1, max_value=100, value=5)
if st.button("Generate Batch & Download CSV"):
if location and roof_size > 0 and electricity_bill >= 0:
csv_buffer = StringIO()
writer = csv.writer(csv_buffer)
writer.writerow(["Sequence_no", "Solar Estimate"])
with st.spinner("Generating estimates..."):
for i in range(1, batch + 1):
state_data = df[df['State'].str.contains(location, case=False)].iloc[0]
ghi = state_data['Avg_GHI (kWh/m²/day)']
solar_cost_per_kw = state_data['Solar_Cost_per_kW (₹)']
prompt_text = build_prompt(location, roof_size, electricity_bill, ghi, solar_cost_per_kw)
# Generate the estimate using Gemini
response = model.generate_content(prompt_text)
writer.writerow([i, response.text.strip()])
st.download_button(
label="Download Solar Estimates CSV",
data=csv_buffer.getvalue(),
file_name="solar_estimates.csv",
mime="text/csv"
)
else:
st.warning("Please fill out all fields to generate batch estimates.")
|