Spaces:
Sleeping
Sleeping
File size: 6,235 Bytes
ec9e166 621c159 ec9e166 5838c96 ec9e166 3e1c3a5 8e8ccf4 9c39b4d 8c29218 ec9e166 3e466e9 8c29218 ec9e166 7e893e3 ec9e166 8c29218 c24dee1 ec9e166 8c29218 ec9e166 d815c47 75201e2 6b53f9c 8190967 ec9e166 8c29218 ec9e166 7e3de88 ec9e166 d8dabbe 5838c96 7e3de88 9c39b4d e5c0906 b0dd4a4 8f8e7b3 b0dd4a4 8f8e7b3 f0cd778 b0dd4a4 5b48ab1 2d3a987 989668b 2b48b3a 2d3a987 989668b 2d3a987 8f8e7b3 ec9e166 33ac479 ec9e166 9ff8dae ec9e166 8c29218 ec9e166 8c29218 33ac479 7e3de88 a392478 7e3de88 446feac 03d0aa3 ec9e166 8c29218 ec9e166 70dfddf ec9e166 c0361e2 ec9e166 bc361ee ec9e166 1d9366f 9f78fda |
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
import os
import streamlit as st
from dotenv import load_dotenv
from PyPDF2 import PdfReader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.vectorstores import FAISS
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
from htmlTemplates import css, bot_template, user_template
from langchain.llms import HuggingFaceHub
from deep_translator import GoogleTranslator
# set this key as an environment variable
os.environ["HUGGINGFACEHUB_API_TOKEN"] = st.secrets['huggingface_token']
###########################################################################################
def get_pdf_text(pdf_docs : list) -> str:
text = ""
for pdf in pdf_docs:
pdf_reader = PdfReader(pdf)
for page in pdf_reader.pages:
text += page.extract_text()
return text
###########################################
def load_file():
loader = TextLoader('d2.txt')
documents = loader.load()
return documents
######################################
def get_text_chunks(text:str) ->list:
text_splitter = CharacterTextSplitter(
separator="\n", chunk_size=400, chunk_overlap=40, length_function=len
)
chunks = text_splitter.split_text(text)
return chunks
def get_vectorstore(text_chunks : list) -> FAISS:
model = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
encode_kwargs = {
"normalize_embeddings": True
} # set True to compute cosine similarity
embeddings = HuggingFaceBgeEmbeddings(
model_name=model, encode_kwargs=encode_kwargs, model_kwargs={"device": "cpu"}
)
vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
return vectorstore
def get_conversation_chain(vectorstore:FAISS) -> ConversationalRetrievalChain:
# llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
llm = HuggingFaceHub(
repo_id="mistralai/Mistral-7B-Instruct-v0.2",
#repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1"
#repo_id="TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF"
model_kwargs={"temperature": 0.1, "max_length": 2048},
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation_chain = ConversationalRetrievalChain.from_llm(
llm=llm, retriever=vectorstore.as_retriever(), memory=memory
)
return conversation_chain
def handle_userinput(user_question:str):
response = st.session_state.conversation({"question": user_question})
st.session_state.chat_history = response["chat_history"]
for i, message in enumerate(st.session_state.chat_history):
if i % 2 == 0:
text2=message.content
translator = GoogleTranslator(source='english', target='persian')
result = translator.translate(text2)
st.write("سوال کاربر: "+result)
else:
text1=message.content
translator = GoogleTranslator(source='english', target='persian')
result = translator.translate(text1)
st.write("پاسخ ربات: "+result)
#############################################################################################################
def read_pdf_pr_en(pdf_file_path):
from deep_translator import GoogleTranslator
import PyPDF2
# مسیر فایل PDF را تعیین کنید
#pdf_file_path = '/content/d2en.pdf'
# باز کردن فایل PDF
with open(pdf_file_path, 'rb') as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# خواندن محتوای صفحهها
full_text = ''
for page in pdf_reader.pages:
page_pdf=page.extract_text()
translator = GoogleTranslator(source='persian', target='english')
result = translator.translate(page_pdf)
full_text +=result
st.write(full_text)
return(full_text)
#################################################################################################################
def get_pdf_text(pdf_docs):
text = ""
for pdf in pdf_docs:
pdf_reader = PdfReader(pdf)
for page in pdf_reader.pages:
txt_page=page.extract_text()
text += txt_page
return text
################################33333333333333333333333333333333333333333333333333333333
def main():
st.set_page_config(
page_title="Chat Bot PDFs",
page_icon=":books:",
)
#st.markdown("# Chat with a Bot")
#st.markdown("This bot tries to answer questions about multiple PDFs. Let the processing of the PDF finish before adding your question. 🙏🏾")
st.write(css, unsafe_allow_html=True)
if "conversation" not in st.session_state:
st.session_state.conversation = None
if "chat_history" not in st.session_state:
st.session_state.chat_history = None
st.header("Chat Bot PDFs :books:")
user_question1 = st.text_input("Ask a question about your documents:")
translator = GoogleTranslator(source='persian', target='english')
user_question = translator.translate(user_question1)
if st.button("Answer"):
with st.spinner("Answering"):
handle_userinput(user_question)
if st.button("CLEAR"):
with st.spinner("CLEARING"):
st.cache_data.clear()
with st.sidebar:
st.subheader("Your documents")
pdf_docs = st.file_uploader(
"Upload your PDFs here and click on 'Process'", accept_multiple_files=True)
if st.button("Process"):
with st.spinner("Processing"):
# get pdf text
raw_text = get_pdf_text(pdf_docs)
# get the text chunks
text_chunks = get_text_chunks(raw_text)
# create vector store
vectorstore = get_vectorstore(text_chunks)
# create conversation chain
st.session_state.conversation = get_conversation_chain(vectorstore)
#compelete build model
st.write("compelete build model")
if __name__ == "__main__":
main()
|