import streamlit as st import pickle from PyPDF2 import PdfReader from streamlit_extras.add_vertical_space import add_vertical_space from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import FAISS from langchain.llms import OpenAI from langchain.chains.question_answering import load_qa_chain from langchain.callbacks import get_openai_callback import os # Sidebar contents with st.sidebar: # API key input (this will not display the entered text) api_key = st.text_input('Enter your OpenAI API Key:', type='password') if api_key: os.environ['OPENAI_API_KEY'] = api_key else: st.warning('API key is required to proceed.') st.title(':orange_book: BinDoc GmbH') st.markdown( "Experience the future of document interaction with the revolutionary" ) st.markdown("**BinDocs Chat App**.") st.markdown("Harnessing the power of a Large Language Model and AI technology,") st.markdown("this innovative platform redefines PDF engagement,") st.markdown("enabling dynamic conversations that bridge the gap between") st.markdown("human and machine intelligence.") add_vertical_space(3) # Add more vertical space between text blocks st.write('Made with ❤️ by Anne') def load_pdf(file_path): pdf_reader = PdfReader(file_path) text = "" for page in pdf_reader.pages: text += page.extract_text() text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, length_function=len ) chunks = text_splitter.split_text(text=text) store_name = file_path.name[:-4] if os.path.exists(f"{store_name}.pkl"): with open(f"{store_name}.pkl", "rb") as f: VectorStore = pickle.load(f) else: embeddings = OpenAIEmbeddings() # No api_key parameter here VectorStore = FAISS.from_texts(chunks, embedding=embeddings) with open(f"{store_name}.pkl", "wb") as f: pickle.dump(VectorStore, f) return VectorStore def load_chatbot(): return load_qa_chain(llm=OpenAI(), chain_type="stuff") def display_chat_history(chat_history): for chat in chat_history: background_color = "#FFA07A" if chat[2] == "new" else "#acf" if chat[0] == "User" else "#caf" st.markdown(f"