aryachakraborty's picture
Upload 4 files
31d6ed6 verified
raw
history blame
6.69 kB
import streamlit as st
from My_SQL_Connection import database_details, tables_in_this_DB, printing_tables, create_table_command
from streamlit_option_menu import option_menu
from model_functions import LOAD_GEMMA
import torch
user_name = 'arya'
if 'localhost' not in st.session_state:
st.session_state.localhost = ''
st.session_state.user = ''
st.session_state.password = ''
st.session_state.table_commands = """ """
with st.sidebar:
selected = option_menu("Querio Lingua", ["Log In", 'main functionalities','Chat with AI'],
icons=['house', 'gear', 'robot'], menu_icon="cast", default_index=1)
if selected == 'Log In':
st.title(f'welcome to our web application :green[{user_name}]')
st.subheader('welcome to our MY SQL Database Explorer ~ ')
st.write('First Check how many databases you have in your server ~')
st.session_state.localhost = st.text_input("what is your host, (localhost if in local) or give the url", 'localhost',help='host')
st.session_state.user = st.text_input("what is your user name (usually root)", 'root')
st.session_state.password = st.text_input('Password', type='password')
elif selected == 'main functionalities':
st.title(f'welcome to our web application :green[{user_name}]')
st.subheader('welcome to our MY SQL Database Explorer ~ ')
if st.button('All your databases ~ '):
db, l = database_details(st.session_state.localhost, st.session_state.user, st.session_state.password)
st.table(db)
st.subheader('Now we will see details of any database~ ')
st.session_state.db_name = st.text_input('Which Database you want')
if st.button('All tables present in that particular database'):
if not st.session_state.db_name:
st.warning('Input database name first')
else:
tables, l = tables_in_this_DB(st.session_state.localhost, st.session_state.user, st.session_state.password, st.session_state.db_name)
st.write(f'There is only {l} tables present in this database')
st.write(tables)
st.subheader('check out tables~ ')
if st.button('Print the tables~'):
tables_data = printing_tables(st.session_state.localhost, st.session_state.user, st.session_state.password, st.session_state.db_name)
for table_name, table_data in tables_data.items():
st.write(f"Table: {table_name}")
st.table(table_data)
st.subheader('Retrieve the CREATE TABLE Statements')
if st.button('Generate statements'):
statements = create_table_command(st.session_state.localhost, st.session_state.user, st.session_state.password, st.session_state.db_name)
for table_name, table_statements in statements.items():
st.write(f'{table_name}')
st.session_state.table_commands = table_statements
st.code(table_statements)
elif selected == 'Chat with AI':
#st.set_page_config(page_title='🧠MemoryBot🤖', layout='wide')
# Initialize session states
if "generated" not in st.session_state:
st.session_state["generated"] = []
if "past" not in st.session_state:
st.session_state["past"] = []
if "input" not in st.session_state:
st.session_state["input"] = ""
if "stored_session" not in st.session_state:
st.session_state["stored_session"] = []
def get_text():
"""
Get the user input text.
Returns:
(str): The text entered by the user
"""
input_text = st.text_input("You: ", st.session_state["input"], key="input",
placeholder="Your AI assistant here! Ask me anything ...",
label_visibility='hidden')
return input_text
def new_chat():
"""
Clears session state and starts a new chat.
"""
save = []
for i in range(len(st.session_state['generated'])-1, -1, -1):
save.append("User:" + st.session_state["past"][i])
save.append("Bot:" + st.session_state["generated"][i])
st.session_state["stored_session"].append(save)
st.session_state["generated"] = []
st.session_state["past"] = []
st.session_state["input"] = ""
with st.sidebar.expander("🛠️ ", expanded=False):
MODEL = st.selectbox(label='Model', options=['GEMMA-2B FINE TUNED'])
st.title("🤖 Chat Bot with 🧠")
st.subheader(" Powered by 🚀 GEMMA")
st.sidebar.button("New Chat", on_click = new_chat, type='primary')
user_input = get_text()
if user_input:
tokenizer,model = LOAD_GEMMA()
device = torch.device("cpu")
alpeca_prompt = f"""Below are sql tables schemas paired with instruction that describes a task. Using valid SQLite, write a response that appropriately completes the request for the provided tables.
### Instruction: {user_input}. ### Input: {st.session_state.table_commands}
### Response:
"""
with st.status('Generating Result',expanded=False) as status:
inputs = tokenizer([alpeca_prompt], return_tensors="pt").to(device)
outputs = model.generate(**inputs, max_new_tokens=30)
output = tokenizer.decode(outputs[0], skip_special_tokens=False)
st.session_state.past.append(user_input)
st.session_state.generated.append(output)
print(output)
status.update(label="Result Generated!", state="complete", expanded=False)
download_str = []
# Display the conversation history using an expander, and allow the user to download it
with st.expander("Conversation", expanded=True):
for i in range(len(st.session_state['generated'])-1, -1, -1):
st.info(st.session_state["past"][i],icon="🧐")
st.success(st.session_state["generated"][i], icon="🤖")
download_str.append(st.session_state["past"][i])
download_str.append(st.session_state["generated"][i])
# Can throw error - requires fix
download_str = '\n'.join(download_str)
if download_str:
st.download_button('Download',download_str)
# Display stored conversation sessions in the sidebar
for i, sublist in enumerate(st.session_state.stored_session):
with st.sidebar.expander(label= f"Conversation-Session:{i}"):
st.write(sublist)
# Allow the user to clear all stored conversation sessions
if st.session_state.stored_session:
if st.sidebar.button("Clear-all"):
del st.session_state.stored_session