import streamlit as st import plotly.express as px import pandas as pd import streamlit_authenticator as stauth import yaml from yaml.loader import SafeLoader import datetime # from langchain.chat_models import ChatAnthropic # from langchain.callbacks.base import BaseCallbackHandler # from langchain.prompts import PromptTemplate # from langchain.chains import LLMChain # Function to fetch simulated fly situation data def get_fly_situation(canteen): if canteen == "Deck": # Sample fly situation data fly_situation = { "temperature": 28, "humidity": 60, "fly_count": 9, "last_updated": "2023-11-10 12:00:00" } delta1 = '0.2' delta2 = '2' delta3 = '1' elif canteen == "Frontier": # Sample fly situation data fly_situation = { "temperature": 28.1, "humidity": 62, "fly_count": 21, "last_updated": "2023-11-10 12:00:00" } delta1 = '0.1' delta2 = '1' delta3 = '3' return fly_situation, delta1, delta2, delta3 # Function to generate a sample fly situation dataset with time series def get_fly_situation_history(canteen): if canteen == "Deck": # Sample fly situation time series data fly_situation_history = [ {"timestamp": "2023-11-10 11:00:00", "fly_count": 2, "sensor":1}, {"timestamp": "2023-11-10 11:05:00", "fly_count": 1, "sensor": 1}, {"timestamp": "2023-11-10 11:10:00", "fly_count": 2, "sensor": 1}, {"timestamp": "2023-11-10 11:15:00", "fly_count": 2, "sensor": 1}, {"timestamp": "2023-11-10 11:20:00", "fly_count": 3, "sensor": 1}, {"timestamp": "2023-11-10 11:25:00", "fly_count": 1, "sensor": 1}, {"timestamp": "2023-11-10 11:30:00", "fly_count": 2, "sensor": 1}, {"timestamp": "2023-11-10 11:35:00", "fly_count": 1, "sensor": 1}, {"timestamp": "2023-11-10 11:40:00", "fly_count": 3, "sensor": 1}, {"timestamp": "2023-11-10 11:45:00", "fly_count": 1, "sensor": 1}, {"timestamp": "2023-11-10 11:50:00", "fly_count": 2, "sensor": 1}, {"timestamp": "2023-11-10 11:55:00", "fly_count": 3, "sensor": 1}, {"timestamp": "2023-11-10 12:00:00", "fly_count": 1, "sensor": 1}, {"timestamp": "2023-11-10 11:00:00", "fly_count": 1, "sensor": 2}, {"timestamp": "2023-11-10 11:05:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:10:00", "fly_count": 3, "sensor": 2}, {"timestamp": "2023-11-10 11:15:00", "fly_count": 1, "sensor": 2}, {"timestamp": "2023-11-10 11:20:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:25:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:30:00", "fly_count": 1, "sensor": 2}, {"timestamp": "2023-11-10 11:35:00", "fly_count": 3, "sensor": 2}, {"timestamp": "2023-11-10 11:40:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:45:00", "fly_count": 1, "sensor": 2}, {"timestamp": "2023-11-10 11:50:00", "fly_count": 3, "sensor": 2}, {"timestamp": "2023-11-10 11:55:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 12:00:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:00:00", "fly_count": 3, "sensor": 3}, {"timestamp": "2023-11-10 11:05:00", "fly_count": 1, "sensor": 3}, {"timestamp": "2023-11-10 11:10:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:15:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:20:00", "fly_count": 1, "sensor": 3}, {"timestamp": "2023-11-10 11:25:00", "fly_count": 3, "sensor": 3}, {"timestamp": "2023-11-10 11:30:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:35:00", "fly_count": 1, "sensor": 3}, {"timestamp": "2023-11-10 11:40:00", "fly_count": 1, "sensor": 3}, {"timestamp": "2023-11-10 11:45:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:50:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:55:00", "fly_count": 3, "sensor": 3}, {"timestamp": "2023-11-10 12:00:00", "fly_count": 6, "sensor": 3}, ] elif canteen == "Frontier": # Sample fly situation time series data fly_situation_history = [ {"timestamp": "2023-11-10 11:00:00", "fly_count": 2, "sensor":1}, {"timestamp": "2023-11-10 11:05:00", "fly_count": 5, "sensor": 1}, {"timestamp": "2023-11-10 11:10:00", "fly_count": 6, "sensor": 1}, {"timestamp": "2023-11-10 11:15:00", "fly_count": 4, "sensor": 1}, {"timestamp": "2023-11-10 11:20:00", "fly_count": 5, "sensor": 1}, {"timestamp": "2023-11-10 11:25:00", "fly_count": 2, "sensor": 1}, {"timestamp": "2023-11-10 11:30:00", "fly_count": 5, "sensor": 1}, {"timestamp": "2023-11-10 11:35:00", "fly_count": 6, "sensor": 1}, {"timestamp": "2023-11-10 11:40:00", "fly_count": 7, "sensor": 1}, {"timestamp": "2023-11-10 11:45:00", "fly_count": 8, "sensor": 1}, {"timestamp": "2023-11-10 11:50:00", "fly_count": 10, "sensor": 1}, {"timestamp": "2023-11-10 11:55:00", "fly_count": 9, "sensor": 1}, {"timestamp": "2023-11-10 12:00:00", "fly_count": 8, "sensor": 1}, {"timestamp": "2023-11-10 11:00:00", "fly_count": 1, "sensor": 2}, {"timestamp": "2023-11-10 11:05:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:10:00", "fly_count": 3, "sensor": 2}, {"timestamp": "2023-11-10 11:15:00", "fly_count": 2, "sensor": 2}, {"timestamp": "2023-11-10 11:20:00", "fly_count": 3, "sensor": 2}, {"timestamp": "2023-11-10 11:25:00", "fly_count": 4, "sensor": 2}, {"timestamp": "2023-11-10 11:30:00", "fly_count": 6, "sensor": 2}, {"timestamp": "2023-11-10 11:35:00", "fly_count": 7, "sensor": 2}, {"timestamp": "2023-11-10 11:40:00", "fly_count": 8, "sensor": 2}, {"timestamp": "2023-11-10 11:45:00", "fly_count": 10, "sensor": 2}, {"timestamp": "2023-11-10 11:50:00", "fly_count": 9, "sensor": 2}, {"timestamp": "2023-11-10 11:55:00", "fly_count": 8, "sensor": 2}, {"timestamp": "2023-11-10 12:00:00", "fly_count": 6, "sensor": 2}, {"timestamp": "2023-11-10 11:00:00", "fly_count": 3, "sensor": 3}, {"timestamp": "2023-11-10 11:05:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:10:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:15:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:20:00", "fly_count": 1, "sensor": 3}, {"timestamp": "2023-11-10 11:25:00", "fly_count": 3, "sensor": 3}, {"timestamp": "2023-11-10 11:30:00", "fly_count": 5, "sensor": 3}, {"timestamp": "2023-11-10 11:35:00", "fly_count": 7, "sensor": 3}, {"timestamp": "2023-11-10 11:40:00", "fly_count": 6, "sensor": 3}, {"timestamp": "2023-11-10 11:45:00", "fly_count": 3, "sensor": 3}, {"timestamp": "2023-11-10 11:50:00", "fly_count": 2, "sensor": 3}, {"timestamp": "2023-11-10 11:55:00", "fly_count": 1, "sensor": 3}, {"timestamp": "2023-11-10 12:00:00", "fly_count": 7, "sensor": 3}, ] return fly_situation_history # Function to get dataframe of camera locations def get_camera_locations(canteen): if canteen == 'Frontier': camera_locations = pd.DataFrame({ "latitude": [1.2963134225592299, 1.2965099487866827, 1.296561127489237], "longitude": [103.78033553238319, 103.78067954132742, 103.7807614482189], "size": [1 for i in range(3)] }) elif canteen == 'Deck': camera_locations = pd.DataFrame({ "latitude": [1.2948580016451805, 1.2947091254796532, 1.2944617283028779], "longitude": [103.77238596429575, 103.77266955821814, 103.77246151634456], "size": [1 for i in range(3)] }) return camera_locations def get_pheremone_levels(sensor): pheremone_levels_history = [ {"timestamp": "2023-11-10 11:00:00", "pheremone_level": 75, "sensor":1}, {"timestamp": "2023-11-10 11:05:00", "pheremone_level": 75, "sensor": 1}, {"timestamp": "2023-11-10 11:10:00", "pheremone_level": 74, "sensor": 1}, {"timestamp": "2023-11-10 11:15:00", "pheremone_level": 74, "sensor": 1}, {"timestamp": "2023-11-10 11:20:00", "pheremone_level": 74, "sensor": 1}, {"timestamp": "2023-11-10 11:25:00", "pheremone_level": 74, "sensor": 1}, {"timestamp": "2023-11-10 11:30:00", "pheremone_level": 73, "sensor": 1}, {"timestamp": "2023-11-10 11:35:00", "pheremone_level": 72, "sensor": 1}, {"timestamp": "2023-11-10 11:40:00", "pheremone_level": 71, "sensor": 1}, {"timestamp": "2023-11-10 11:45:00", "pheremone_level": 65, "sensor": 1}, {"timestamp": "2023-11-10 11:50:00", "pheremone_level": 63, "sensor": 1}, {"timestamp": "2023-11-10 11:55:00", "pheremone_level": 62, "sensor": 1}, {"timestamp": "2023-11-10 12:00:00", "pheremone_level": 58, "sensor": 1}, {"timestamp": "2023-11-10 11:00:00", "pheremone_level": 95, "sensor": 2}, {"timestamp": "2023-11-10 11:05:00", "pheremone_level": 91, "sensor": 2}, {"timestamp": "2023-11-10 11:10:00", "pheremone_level": 91, "sensor": 2}, {"timestamp": "2023-11-10 11:15:00", "pheremone_level": 90, "sensor": 2}, {"timestamp": "2023-11-10 11:20:00", "pheremone_level": 90, "sensor": 2}, {"timestamp": "2023-11-10 11:25:00", "pheremone_level": 90, "sensor": 2}, {"timestamp": "2023-11-10 11:30:00", "pheremone_level": 90, "sensor": 2}, {"timestamp": "2023-11-10 11:35:00", "pheremone_level": 90, "sensor": 2}, {"timestamp": "2023-11-10 11:40:00", "pheremone_level": 87, "sensor": 2}, {"timestamp": "2023-11-10 11:45:00", "pheremone_level": 84, "sensor": 2}, {"timestamp": "2023-11-10 11:50:00", "pheremone_level": 80, "sensor": 2}, {"timestamp": "2023-11-10 11:55:00", "pheremone_level": 73, "sensor": 2}, {"timestamp": "2023-11-10 12:00:00", "pheremone_level": 72, "sensor": 2}, {"timestamp": "2023-11-10 11:00:00", "pheremone_level": 41, "sensor": 3}, {"timestamp": "2023-11-10 11:05:00", "pheremone_level": 41, "sensor": 3}, {"timestamp": "2023-11-10 11:10:00", "pheremone_level": 40, "sensor": 3}, {"timestamp": "2023-11-10 11:15:00", "pheremone_level": 40, "sensor": 3}, {"timestamp": "2023-11-10 11:20:00", "pheremone_level": 39, "sensor": 3}, {"timestamp": "2023-11-10 11:25:00", "pheremone_level": 38, "sensor": 3}, {"timestamp": "2023-11-10 11:30:00", "pheremone_level": 38, "sensor": 3}, {"timestamp": "2023-11-10 11:35:00", "pheremone_level": 35, "sensor": 3}, {"timestamp": "2023-11-10 11:40:00", "pheremone_level": 34, "sensor": 3}, {"timestamp": "2023-11-10 11:45:00", "pheremone_level": 33, "sensor": 3}, {"timestamp": "2023-11-10 11:50:00", "pheremone_level": 33, "sensor": 3}, {"timestamp": "2023-11-10 11:55:00", "pheremone_level": 30, "sensor": 3}, {"timestamp": "2023-11-10 12:00:00", "pheremone_level": 26, "sensor": 3}, ] return pheremone_levels_history # # Streaming LLM output class # class StreamHandler(BaseCallbackHandler): # # Referenced from: https://discuss.streamlit.io/t/langchain-stream/43782 # def __init__(self, container, initial_text='', display_method='markdown'): # self.container = container # self.text = initial_text # self.display_method = display_method # def on_llm_new_token(self, token: str, **kwargs) -> None: # self.text += token # display_function = getattr(self.container, self.display_method, None) # if display_function is not None: # display_function(self.text) # else: # raise ValueError(f'Invalid display_method: {self.display_method}') # Start of Streamlit Apps st.set_page_config(layout="centered") hide_streamlit_style = ''' ''' st.markdown(hide_streamlit_style, unsafe_allow_html=True) # Import configuration file for user authentication with open('credentials.yaml') as file: config = yaml.load(file, Loader=SafeLoader) # Create an authentication object. authenticator = stauth.Authenticate( config['credentials'], config['cookie']['name'], config['cookie']['key'], config['cookie']['expiry_days'] ) # List of advanced users advanced_users = ['advanced'] # Landing page if user not logged in if st.session_state['authentication_status'] is None: # Landing page copy and banner st.markdown('