rahgadda's picture
Initial Draft
e001c27 verified
raw
history blame
6.63 kB
import subprocess
import streamlit as st
import os
import pandas as pd
import lib.ui.apiClient.APIClient as APIClient
# Function to process the training Excel file
def fn_process_training_excel(lv_file_name, ui_domain_name, ui_status_message, sm):
"""
Process the training Excel file and display status messages based on the response.
Parameters:
- lv_file_name (str): The name of the training Excel file.
- ui_domain_name (str): The domain name for the vector store.
- ui_status_message (str): The UI element to display the status message.
- sm (object): An instance of the StatusMessage class.
Returns:
None
"""
try:
lv_response = APIClient.fn_create_vector_store(lv_file_name, ui_domain_name)
if lv_response.status_code == 200:
# Display a success message
sm.fn_display_status_messages(lv_response.json()['status'], "Success", ui_status_message)
else:
raise Exception(f"Error: {lv_response.json()['error_message']}")
except Exception as e:
# Display an error message if there is an exception
sm.fn_display_status_messages(f"Error: {e}", "Error", ui_status_message)
# Function to process the mapping Excel file
def fn_process_mapping_excel(lv_file_name, ui_source_domain_name, ui_status_message, sm):
"""
Process the mapping Excel file and display status messages based on the response.
Parameters:
- lv_file_name (str): The name of the mapping Excel file.
- ui_source_domain_name (str): The source vector store domain name.
- ui_status_message (str): The UI element to display the status message.
- sm (object): An instance of the StatusMessage class.
Returns:
None
"""
try:
lv_response = APIClient.fn_create_data_mapping(lv_file_name, ui_source_domain_name)
if lv_response.status_code == 200:
lv_response_json = lv_response.json()
lv_response_pd = pd.DataFrame(lv_response_json)
lv_mapping_file_name = 'db/'+ui_source_domain_name+"_"+lv_file_name.split('/')[-1]
lv_response_pd.to_excel(lv_mapping_file_name, index=False)
st.session_state.sv_mapping_file_name = lv_mapping_file_name
else:
raise Exception(f"Error: {lv_response.json()['error_message']}")
except Exception as e:
# Display an error message if there is an exception
sm.fn_display_status_messages(f"Error: {e}", "Error", ui_status_message)
# Function to start the Flask server
@st.cache_resource
def start_flask_server():
"""
Function to start the Flask server.
Returns:
None
"""
lv_proc = subprocess.Popen(["python", "flask_app.py"])
st.session_state.sv_flask_server_proc = lv_proc
# Function to stop the Flask server
def stop_flask_server():
"""
Function to stop the Flask server.
Returns:
None
"""
lv_proc = st.session_state.sv_flask_server_proc
if lv_proc is not None:
lv_proc.terminate()
lv_proc.wait(timeout=5)
if lv_proc.poll() is None:
lv_proc.kill()
st.session_state.sv_flask_server_proc = None
# Function to configure the sidebar UI elements.
def fn_sidebar_configuration(ui_status_message,sm):
"""
Function to configure the sidebar UI elements.
Parameters:
- ui_status_message (str): The status message to be display in UI.
Returns:
None
"""
try:
if not(st.session_state.sv_flask_server_proc):
# Start Flask Server
start_flask_server()
# Toggle button to enable/disable training mode
ui_training_indicator = st.toggle("Train Domain Data", value=False)
# Container to hold the UI elements
ui_container = st.container(border=True)
with ui_container:
# Training new domain
if ui_training_indicator:
# File uploader for training file
ui_training_file = st.file_uploader("Training File", type=["xlsx"], accept_multiple_files=False, key="training_file")
# Text input for domain name
ui_domain_name = st.text_input("Domain Name")
# Button to submit the form
if st.button("Submit"):
# Check if the training file is uploaded
if ui_training_file is not None and ui_domain_name != "":
lv_file_name = "storage/"+ui_domain_name+".xlsx"
# Saving File
with open(lv_file_name, "wb") as f:
f.write(ui_training_file.getvalue())
# Process the Excel file
fn_process_training_excel(lv_file_name,ui_domain_name,ui_status_message,sm)
else:
# Display an error message if the training file is not uploaded
sm.fn_display_status_messages("Please upload the training file.", "Error", ui_status_message)
# Mapping data to trained domain
else:
# Get all file names that end with ".pak" from the "db" folder
lv_trained_domain_name = [filename[:-len('_index.faiss')] for filename in os.listdir('db') if filename.endswith('_index.faiss')]
# Selectbox for domain selection
ui_training_vector_db = st.selectbox("Domain", lv_trained_domain_name)
# Destination Mapping File
ui_destination_file = st.file_uploader("Destination File", type=["xlsx"], accept_multiple_files=False, key="training_file")
# Button to submit the form
if st.button("Submit"):
if ui_destination_file is not None:
lv_file_name = "storage/"+ui_destination_file.name
# Saving File
with open(lv_file_name, "wb") as f:
f.write(ui_destination_file.getvalue())
# Process the Excel file
fn_process_mapping_excel(lv_file_name,ui_training_vector_db,ui_status_message,sm)
except Exception as e:
# Display an error message if there is an exception
sm.fn_display_status_messages(f"Error: {e}", "Error", ui_status_message)