Spaces:
Runtime error
Runtime error
| import os #line:1 | |
| import streamlit as st #line:2 | |
| from dotenv import load_dotenv #line:3 | |
| from PyPDF2 import PdfReader #line:4 | |
| from langchain .text_splitter import RecursiveCharacterTextSplitter #line:5 | |
| from langchain .document_loaders import UnstructuredPDFLoader #line:6 | |
| from langchain .text_splitter import CharacterTextSplitter #line:7 | |
| from langchain .embeddings import HuggingFaceEmbeddings #line:8 | |
| from langchain .vectorstores import FAISS #line:9 | |
| from langchain .chat_models import ChatOpenAI #line:10 | |
| from langchain .memory import ConversationBufferMemory #line:11 | |
| from langchain .chains import ConversationalRetrievalChain #line:12 | |
| from htmlTemplates import css ,bot_template ,user_template #line:13 | |
| from langchain .llms import HuggingFaceHub #line:14 | |
| from langchain .vectorstores import Chroma #line:15 | |
| from gpt4all import GPT4All #line:16 | |
| os .environ ["HUGGINGFACEHUB_API_TOKEN"]=st .secrets ['huggingface_token']#line:20 | |
| def add_logo ():#line:23 | |
| st .markdown (f""" | |
| <style> | |
| [data-testid="stSidebar"] {{ | |
| background-image: url(https://smbk.s3.amazonaws.com/media/organization_logos/111579646d1241f4be17bd7394dcb238.jpg); | |
| background-repeat: no-repeat; | |
| padding-top: 80px; | |
| background-position: 20px 20px; | |
| }} | |
| </style> | |
| """,unsafe_allow_html =True ,)#line:37 | |
| def get_pdf_text (OOO0OO00OO0OOO0OO :list )->str :#line:43 | |
| OO0OOO000000O0OOO =""#line:44 | |
| for O0OO000O0OOO00O0O in OOO0OO00OO0OOO0OO :#line:45 | |
| O0O00OO0O00O0OOOO =PdfReader (O0OO000O0OOO00O0O )#line:46 | |
| for OO0OOO000O0000O00 in O0O00OO0O00O0OOOO .pages :#line:47 | |
| OO0OOO000000O0OOO +=OO0OOO000O0000O00 .extract_text ()#line:48 | |
| return OO0OOO000000O0OOO #line:49 | |
| def get_pdf_pages (OOOO000000OOOO0O0 ):#line:51 | |
| ""#line:62 | |
| OO0OO0O0OO0OO000O =[]#line:63 | |
| import tempfile #line:64 | |
| with tempfile .TemporaryDirectory ()as OOO0000O000O00OOO :#line:66 | |
| for OO0OOO0O000OO0OO0 in OOOO000000OOOO0O0 :#line:67 | |
| OO0OOO00OOOOOOO0O =os .path .join (OOO0000O000O00OOO ,OO0OOO0O000OO0OO0 .name )#line:68 | |
| with open (OO0OOO00OOOOOOO0O ,"wb")as O0OOOOO0O0O0OO00O :#line:69 | |
| O0OOOOO0O0O0OO00O .write (OO0OOO0O000OO0OO0 .getbuffer ())#line:70 | |
| OOO000OO0OO00OOO0 =UnstructuredPDFLoader (OO0OOO00OOOOOOO0O )#line:72 | |
| OOOO0OOOOO000OOO0 =OOO000OO0OO00OOO0 .load_and_split ()#line:73 | |
| OO0OO0O0OO0OO000O =OO0OO0O0OO0OO000O +OOOO0OOOOO000OOO0 #line:74 | |
| return OO0OO0O0OO0OO000O #line:75 | |
| def get_text_chunks (OOOO00OOOOO0O00OO ):#line:85 | |
| ""#line:96 | |
| OO0OOO00O000OO0OO =RecursiveCharacterTextSplitter (chunk_size =1024 ,chunk_overlap =64 )#line:99 | |
| O00O0OOOOOOOOO00O =OO0OOO00O000OO0OO .split_documents (OOOO00OOOOO0O00OO )#line:100 | |
| print (str (len (O00O0OOOOOOOOO00O )))#line:101 | |
| return O00O0OOOOOOOOO00O #line:102 | |
| def get_vectorstore (O00000O0O0OOOO0OO ):#line:119 | |
| ""#line:130 | |
| O000O00OO00O00OO0 ="WhereIsAI/UAE-Large-V1"#line:131 | |
| O000O00OO00O00OO0 ="sentence-transformers/all-MiniLM-L6-v2"#line:132 | |
| O000O00OO00O00OO0 ="intfloat/e5-mistral-7b-instruct"#line:134 | |
| O000O00OO00O00OO0 ="avsolatorio/GIST-Embedding-v0"#line:135 | |
| O000O00OO00O00OO0 ="BAAI/bge-large-en-v1.5"#line:138 | |
| O0O0OO0O0O00O0O00 =HuggingFaceEmbeddings (model_name =O000O00OO00O00OO0 )#line:139 | |
| O00O0OOOO0O0000OO =Chroma .from_documents (O00000O0O0OOOO0OO ,O0O0OO0O0O00O0O00 ,persist_directory ="db")#line:140 | |
| return O00O0OOOO0O0000OO #line:141 | |
| def get_conversation_chain (OOOOOOO0OOOO0000O :FAISS )->ConversationalRetrievalChain :#line:146 | |
| O000OO0O00000O0O0 =HuggingFaceHub (repo_id ="mistralai/Mixtral-8x7B-Instruct-v0.1",model_kwargs ={"temperature":0.5 ,"max_new_tokens":1024 ,"max_length":1048 ,"top_k":3 ,"trust_remote_code":True ,"torch_dtype":"auto"},)#line:157 | |
| OO0000OOO00000000 =ConversationBufferMemory (memory_key ="chat_history",return_messages =True )#line:162 | |
| OOO0OO0O00OO0O0O0 =ConversationalRetrievalChain .from_llm (llm =O000OO0O00000O0O0 ,retriever =OOOOOOO0OOOO0000O .as_retriever (),memory =OO0000OOO00000000 )#line:165 | |
| return OOO0OO0O00OO0O0O0 #line:166 | |
| def handle_userinput (OO000OO000O0O0000 ):#line:180 | |
| ""#line:187 | |
| O0OOO0O0OOO0OO00O =st .session_state .conversation ({"question":OO000OO000O0O0000 })#line:188 | |
| st .session_state .chat_history =O0OOO0O0OOO0OO00O ["chat_history"]#line:189 | |
| for O0OOOOOOOO0OOOOOO ,O0O00OOOOOOOO0O00 in enumerate (st .session_state .chat_history ):#line:191 | |
| if O0OOOOOOOO0OOOOOO %2 ==0 :#line:192 | |
| st .write ("//_^ User: "+O0O00OOOOOOOO0O00 .content )#line:193 | |
| else :#line:194 | |
| st .write ("🤖 ChatBot: "+O0O00OOOOOOOO0O00 .content )#line:195 | |
| def main ():#line:200 | |
| st .set_page_config (page_title ="Chat with a Bot that tries to answer questions about multiple PDFs",page_icon =":books:",)#line:204 | |
| st .markdown ("# Chat with TedCasBot")#line:208 | |
| st .markdown ("This Bot is a powerful AI tool designed to simplify the process of extracting information from PDF documents")#line:209 | |
| st .write (css ,unsafe_allow_html =True )#line:211 | |
| if "conversation"not in st .session_state :#line:214 | |
| st .session_state .conversation =None #line:215 | |
| if "chat_history"not in st .session_state :#line:216 | |
| st .session_state .chat_history =None #line:217 | |
| st .header ("Chat with the TedCasBot. He will help you with any doubt you may have with your documents:")#line:221 | |
| O00O00O00OO0000OO =st .text_input ("Ask what you need!:")#line:223 | |
| if O00O00O00OO0000OO :#line:224 | |
| handle_userinput (O00O00O00OO0000OO )#line:225 | |
| with st .sidebar :#line:228 | |
| add_logo ()#line:229 | |
| st .subheader ("Your documents")#line:230 | |
| O00O0O0O0O000000O =st .file_uploader ("Upload your documents and ress 'Process'",accept_multiple_files =True )#line:233 | |
| if st .button ("Process"):#line:234 | |
| with st .spinner ("Processing"):#line:235 | |
| O000000OOO00OO0O0 =get_pdf_text (O00O0O0O0O000000O )#line:237 | |
| OOOOOO000O000O00O =get_pdf_pages (O00O0O0O0O000000O )#line:238 | |
| O0000O00O0OOO0O00 =get_text_chunks (OOOOOO000O000O00O )#line:242 | |
| OO0O0OOO0O0000O0O =get_vectorstore (O0000O00O0OOO0O00 )#line:244 | |
| st .session_state .conversation =get_conversation_chain (OO0O0OOO0O0000O0O )#line:247 | |
| if __name__ =="__main__":#line:250 | |
| main () |