File size: 3,341 Bytes
b555fe1
 
 
b0848d8
372b3f3
27cc353
372b3f3
27cc353
372b3f3
 
 
 
 
b555fe1
372b3f3
 
27cc353
372b3f3
 
b555fe1
 
b0848d8
b555fe1
 
b0848d8
b555fe1
b0848d8
 
 
 
 
 
 
 
 
 
372b3f3
5aee751
b555fe1
 
5aee751
b555fe1
372b3f3
5aee751
372b3f3
 
 
 
 
5aee751
 
 
 
 
 
 
 
372b3f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27cc353
372b3f3
 
 
 
 
 
27cc353
372b3f3
b555fe1
 
 
 
 
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
import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import requests
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Get the Gemini API key from the environment
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")

# Gemini API URL
GEMINI_API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent"

# Load the solar data CSV file
df = pd.read_csv('https://huggingface.co/spaces/MLDeveloper/AI_based_Solar_Project_Estimation_Tool/resolve/main/solar_data_india_2024.csv')

# Streamlit UI
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")

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 = 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
        """

        # Define the headers for the API request
        headers = {
            "Authorization": f"Bearer {GEMINI_API_KEY}",
            "Content-Type": "application/json"
        }

        # Define the request payload
        payload = {
            "model": "gemini-1.5-flash",
            "messages": [{"role": "system", "content": "You are a helpful assistant."},
                         {"role": "user", "content": prompt_text}],
            "temperature": 0.7
        }

        # Make the API request
        response = requests.post(GEMINI_API_URL, json=payload, headers=headers)

        # Check the response from the API
        if response.status_code == 200:
            result = response.json()
            generated_content = result['choices'][0]['message']['content']
            
            # Display the generated content (solar estimates)
            st.subheader("Solar Project Estimate")
            st.write(generated_content)
        else:
            st.error(f"Error: {response.status_code} - {response.text}")
        
    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.")