ClearLove443
update
3cc0f37
raw
history blame
No virus
3.77 kB
import os
import pandas as pd
import streamlit as st
import pdfplumber
from modules.chatbot import Chatbot
from modules.embedder import Embedder
class Utilities:
@staticmethod
def load_api_key():
"""
Loads the OpenAI API key from the .env file or
from the user's input and returns it
"""
if not hasattr(st.session_state, "api_key"):
st.session_state.api_key = None
#you can define your API key in .env directly
if os.path.exists(".env") and os.environ.get("OPENAI_API_KEY") is not None:
user_api_key = os.environ["OPENAI_API_KEY"]
st.sidebar.success("API key loaded from .env", icon="πŸš€")
else:
if st.session_state.api_key is not None:
user_api_key = st.session_state.api_key
st.sidebar.success("API key loaded from previous input", icon="πŸš€")
else:
user_api_key = st.sidebar.text_input(
label="#### Your OpenAI API key πŸ‘‡", placeholder="sk-...", type="password"
)
if user_api_key:
st.session_state.api_key = user_api_key
return user_api_key
@staticmethod
def handle_upload(file_types):
"""
Handles and display uploaded_file
:param file_types: List of accepted file types, e.g., ["csv", "pdf", "txt"]
"""
uploaded_file = st.sidebar.file_uploader("upload", type=file_types, label_visibility="collapsed")
if uploaded_file is not None:
def show_csv_file(uploaded_file):
file_container = st.expander("Your CSV file :")
uploaded_file.seek(0)
shows = pd.read_csv(uploaded_file)
file_container.write(shows)
def show_pdf_file(uploaded_file):
file_container = st.expander("Your PDF file :")
with pdfplumber.open(uploaded_file) as pdf:
pdf_text = ""
for page in pdf.pages:
pdf_text += page.extract_text() + "\n\n"
file_container.write(pdf_text)
def show_txt_file(uploaded_file):
file_container = st.expander("Your TXT file:")
uploaded_file.seek(0)
content = uploaded_file.read().decode("utf-8")
file_container.write(content)
def get_file_extension(uploaded_file):
return os.path.splitext(uploaded_file)[1].lower()
file_extension = get_file_extension(uploaded_file.name)
# Show the contents of the file based on its extension
#if file_extension == ".csv" :
# show_csv_file(uploaded_file)
if file_extension== ".pdf" :
show_pdf_file(uploaded_file)
elif file_extension== ".txt" :
show_txt_file(uploaded_file)
else:
st.session_state["reset_chat"] = True
#print(uploaded_file)
return uploaded_file
@staticmethod
def setup_chatbot(uploaded_file, model, temperature):
"""
Sets up the chatbot with the uploaded file, model, and temperature
"""
embeds = Embedder()
with st.spinner("Processing..."):
uploaded_file.seek(0)
file = uploaded_file.read()
# Get the document embeddings for the uploaded file
vectors = embeds.getDocEmbeds(file, uploaded_file.name)
# Create a Chatbot instance with the specified model and temperature
chatbot = Chatbot(model, temperature,vectors)
st.session_state["ready"] = True
return chatbot