Spaces:
Running
Running
import os | |
import pandas as pd | |
import streamlit as st | |
import pdfplumber | |
from modules.chatbot import Chatbot | |
from modules.embedder import Embedder | |
class Utilities: | |
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 | |
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 | |
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 | |