Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import os | |
| import pandas as pd | |
| import networkx as nx | |
| import matplotlib.pyplot as plt | |
| from groq import Groq | |
| from io import BytesIO | |
| GROQ_API_KEY = "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" # Replace with your Groq API key | |
| client = Groq(api_key=GROQ_API_KEY) | |
| # Function to upload the dataset | |
| def upload_file(): | |
| uploaded_file = st.file_uploader("Upload your Excel dataset", type=["xlsx"]) | |
| if uploaded_file is not None: | |
| return pd.read_excel(uploaded_file) | |
| return None | |
| # Function to construct the graph and visualize | |
| def construct_graph(dataset): | |
| G = nx.DiGraph() | |
| # Add nodes and edges based on the dataset | |
| for _, row in dataset.iterrows(): | |
| # Replace with your column names if necessary | |
| G.add_edge(row['Vendor Name'], row['Meter Number'], weight=row['Consumption (HCF)']) | |
| # Visualize the graph (water distribution network) | |
| plt.figure(figsize=(12, 8)) | |
| pos = nx.spring_layout(G) # Layout for visualization | |
| nx.draw(G, pos, with_labels=True, node_color='skyblue', node_size=1500, edge_color='gray') | |
| # Render the graph as an image and return it | |
| buf = BytesIO() | |
| plt.savefig(buf, format="png") | |
| buf.seek(0) | |
| return buf | |
| # Function to query Groq for optimization suggestions based on serial number | |
| def query_groq(serial_number): | |
| chat_completion = client.chat.completions.create( | |
| messages=[ | |
| { | |
| "role": "user", | |
| "content": f"Optimize water distribution network for Serial Number {serial_number} to minimize consumption fluctuations." | |
| } | |
| ], | |
| model="llama3-8b-8192", | |
| ) | |
| return chat_completion.choices[0].message.content | |
| # Streamlit UI | |
| st.set_page_config(page_title="Water Distribution Network Optimization", page_icon="💧") | |
| # Title and description | |
| st.title("💧 Intelligent Water Distribution Network Optimization") | |
| st.write("Upload your water distribution dataset and optimize the network based on specific serial numbers.") | |
| # Step 1: Upload file | |
| dataset = upload_file() | |
| if dataset is not None: | |
| # Show uploaded dataset details | |
| st.subheader("Dataset Preview:") | |
| st.write(dataset.head()) | |
| # Check if there's a serial number column, add if missing | |
| if 'Serial Number' not in dataset.columns: | |
| dataset['Serial Number'] = range(1, len(dataset) + 1) # Adding Serial Number column | |
| # Step 2: Select Serial Number for analysis | |
| serial_number = st.number_input("Enter Serial Number for analysis", min_value=1, max_value=int(dataset['Serial Number'].max()), step=1) | |
| if serial_number in dataset['Serial Number'].values: | |
| # Filter the dataset for the selected serial number | |
| filtered_data = dataset[dataset['Serial Number'] == serial_number] | |
| st.write(f"Filtered data for Serial Number {serial_number}:", filtered_data) | |
| # Step 3: Display the graph | |
| st.subheader(f"Graph for Serial Number {serial_number}") | |
| graph_image = construct_graph(filtered_data) | |
| st.image(graph_image, caption=f"Water Distribution Network for Serial Number {serial_number}", use_column_width=True) | |
| # Step 4: Query Groq for optimization | |
| if st.button(f"Optimize for Serial Number {serial_number}"): | |
| optimization_response = query_groq(serial_number) | |
| st.subheader("Optimization Suggestions:") | |
| st.write(optimization_response) | |
| else: | |
| st.info("Please upload a dataset to get started.") | |
| # Footer | |
| st.markdown(""" | |
| --- | |
| Developed by [Your Name]. | |
| For more information, visit our [website](https://example.com). | |
| """) | |