Update app.py
Browse files
app.py
CHANGED
|
@@ -6,14 +6,15 @@ from scraper import scrape_tariffs
|
|
| 6 |
from transformers import AutoTokenizer, AutoModel
|
| 7 |
import torch
|
| 8 |
|
| 9 |
-
# Load pre-trained transformer model for embeddings
|
| 10 |
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
|
| 11 |
model = AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
|
| 12 |
|
| 13 |
-
#
|
| 14 |
-
st.title("Electricity Bill Estimator")
|
| 15 |
-
st.sidebar.header("User Input")
|
| 16 |
|
|
|
|
| 17 |
tariff_urls = {
|
| 18 |
"IESCO": "https://iesco.com.pk/index.php/customer-services/tariff-guide",
|
| 19 |
"FESCO": "https://fesco.com.pk/tariff",
|
|
@@ -22,40 +23,58 @@ tariff_urls = {
|
|
| 22 |
"LESCO": "https://www.lesco.gov.pk/ElectricityTariffs",
|
| 23 |
"PESCO": "https://pesconlinebill.pk/pesco-tariff/",
|
| 24 |
"QESCO": "http://qesco.com.pk/Tariffs.aspx",
|
| 25 |
-
"TESCO": "https://tesco.gov.pk/index.php/electricity-traiff"
|
| 26 |
}
|
| 27 |
|
| 28 |
def show_tariff_input():
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
def scrape_data():
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
| 37 |
scrape_tariffs(list(tariff_urls.values()))
|
|
|
|
| 38 |
|
| 39 |
-
#
|
| 40 |
-
if st.sidebar.button("Scrape Data"):
|
| 41 |
scrape_data()
|
| 42 |
|
| 43 |
-
# User
|
| 44 |
-
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
-
#
|
| 48 |
if appliance_load and usage_time:
|
| 49 |
-
bill_amount = appliance_load * usage_time * 0.25 #
|
| 50 |
-
st.write(f"
|
| 51 |
|
| 52 |
-
#
|
| 53 |
-
|
|
|
|
| 54 |
if user_query:
|
| 55 |
-
#
|
| 56 |
inputs = tokenizer(user_query, return_tensors="pt", padding=True, truncation=True)
|
| 57 |
with torch.no_grad():
|
| 58 |
outputs = model(**inputs)
|
| 59 |
embeddings = outputs.last_hidden_state.mean(dim=1).squeeze().numpy()
|
| 60 |
-
|
| 61 |
-
st.write(f"Query
|
|
|
|
|
|
| 6 |
from transformers import AutoTokenizer, AutoModel
|
| 7 |
import torch
|
| 8 |
|
| 9 |
+
# Load pre-trained transformer model for query embeddings
|
| 10 |
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
|
| 11 |
model = AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
|
| 12 |
|
| 13 |
+
# Streamlit App: Electricity Bill Estimator
|
| 14 |
+
st.title("π Electricity Bill Estimator")
|
| 15 |
+
st.sidebar.header("βοΈ User Input")
|
| 16 |
|
| 17 |
+
# Tariff URLs for scraping
|
| 18 |
tariff_urls = {
|
| 19 |
"IESCO": "https://iesco.com.pk/index.php/customer-services/tariff-guide",
|
| 20 |
"FESCO": "https://fesco.com.pk/tariff",
|
|
|
|
| 23 |
"LESCO": "https://www.lesco.gov.pk/ElectricityTariffs",
|
| 24 |
"PESCO": "https://pesconlinebill.pk/pesco-tariff/",
|
| 25 |
"QESCO": "http://qesco.com.pk/Tariffs.aspx",
|
| 26 |
+
"TESCO": "https://tesco.gov.pk/index.php/electricity-traiff",
|
| 27 |
}
|
| 28 |
|
| 29 |
def show_tariff_input():
|
| 30 |
+
"""
|
| 31 |
+
Displays a dropdown menu for tariff categories loaded from a CSV file.
|
| 32 |
+
"""
|
| 33 |
+
try:
|
| 34 |
+
tariff_data = pd.read_csv("data/tariffs.csv")
|
| 35 |
+
tariff_types = tariff_data["category"].unique()
|
| 36 |
+
tariff_choice = st.selectbox("Select your tariff category:", tariff_types)
|
| 37 |
+
st.write(f"β
Selected Tariff: **{tariff_choice}**")
|
| 38 |
+
except FileNotFoundError:
|
| 39 |
+
st.error("β οΈ Tariff data not found. Please ensure 'data/tariffs.csv' exists.")
|
| 40 |
|
| 41 |
def scrape_data():
|
| 42 |
+
"""
|
| 43 |
+
Scrapes tariff data from the provided URLs.
|
| 44 |
+
"""
|
| 45 |
+
st.info("π Scraping tariff data... Please wait.")
|
| 46 |
scrape_tariffs(list(tariff_urls.values()))
|
| 47 |
+
st.success("β
Tariff data scraping complete.")
|
| 48 |
|
| 49 |
+
# Sidebar: Scrape Tariff Data
|
| 50 |
+
if st.sidebar.button("Scrape Tariff Data"):
|
| 51 |
scrape_data()
|
| 52 |
|
| 53 |
+
# User Inputs for Electricity Usage
|
| 54 |
+
st.subheader("π‘ Electricity Usage Input")
|
| 55 |
+
appliance_load = st.number_input(
|
| 56 |
+
"Enter appliance load in watts:",
|
| 57 |
+
min_value=10, max_value=5000, value=1000
|
| 58 |
+
)
|
| 59 |
+
usage_time = st.number_input(
|
| 60 |
+
"Enter daily usage time (in hours):",
|
| 61 |
+
min_value=1, max_value=24, value=5
|
| 62 |
+
)
|
| 63 |
|
| 64 |
+
# Electricity Bill Calculation
|
| 65 |
if appliance_load and usage_time:
|
| 66 |
+
bill_amount = appliance_load * usage_time * 0.25 # Simplified calculation
|
| 67 |
+
st.write(f"π΅ Estimated Electricity Bill: **{bill_amount:.2f} PKR**")
|
| 68 |
|
| 69 |
+
# Query Input for Tariff Details
|
| 70 |
+
st.subheader("π§ Query About Tariff or Appliance")
|
| 71 |
+
user_query = st.text_input("Enter your query:")
|
| 72 |
if user_query:
|
| 73 |
+
# Generate embeddings for the user query
|
| 74 |
inputs = tokenizer(user_query, return_tensors="pt", padding=True, truncation=True)
|
| 75 |
with torch.no_grad():
|
| 76 |
outputs = model(**inputs)
|
| 77 |
embeddings = outputs.last_hidden_state.mean(dim=1).squeeze().numpy()
|
| 78 |
+
|
| 79 |
+
st.write(f"π Query Embedding (for further processing):")
|
| 80 |
+
st.code(embeddings)
|