Spaces:
Running
Running
File size: 3,773 Bytes
bf12aca |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
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
|