Spaces:
Sleeping
Sleeping
File size: 8,345 Bytes
ec9e166 621c159 ec9e166 5838c96 907eaa3 26a5f45 33ace18 cbf031d 3e1c3a5 b4c87ee 22d45be 2f4d027 8e8ccf4 9c39b4d 8c29218 ec9e166 4ac050d 3e466e9 4ac050d 8c29218 ec9e166 52933e7 ec9e166 8c29218 0fc5b49 ec9e166 cbf031d 9b9d29d 4ac050d ec9e166 cbf031d ec9e166 cbf031d 8c29218 ec9e166 17a9626 ec9e166 7e3de88 ec9e166 d8dabbe 5838c96 7e3de88 9c39b4d e5c0906 b0dd4a4 8f8e7b3 b0dd4a4 8f8e7b3 f0cd778 b0dd4a4 5b48ab1 2d3a987 989668b 2b48b3a 2d3a987 77d8622 eabd144 77d8622 eabd144 2d3a987 96cad08 0c95774 96cad08 ec9e166 33ac479 ec9e166 9ff8dae ec9e166 7e93132 ec9e166 8c29218 ec9e166 8c29218 33ac479 7e93132 446feac 0c95774 03d0aa3 0c95774 8c29218 ec9e166 be124ff 70dfddf ec9e166 c0361e2 ec9e166 bc361ee ec9e166 907eaa3 ec9e166 1d9366f a7dd90a 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 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
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
import pandas as pd
from langchain_groq import ChatGroq
from openai import OpenAI
from langchain.chat_models import ChatOpenAI
# set this key as an environment variable
os.environ["HUGGINGFACEHUB_API_TOKEN"] = st.secrets['Key2']
os.environ["OPENAI_API_KEY"] =st.secrets['Key3']
from langchain.llms import LlamaCpp
from langchain import PromptTemplate, LLMChain
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
###########################################################################################
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=1000, chunk_overlap=100, 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"
model="paraphrase-distilroberta-base-v1"
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):
n_gpu_layers = 40 # Change this value based on your model and your GPU VRAM pool.
n_batch = 512 # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.
n_ctx=2048
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
# Make sure the model path is correct for your system
llm = LlamaCpp(
model_path="mostafaamiri/persian-llama-7b-GGUF-Q4",
n_gpu_layers=n_gpu_layers, n_batch=n_batch,
callback_manager=callback_manager,
verbose=True,
n_ctx=n_ctx)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=vectorstore.as_retriever(),
memory=memory,
# retriever_kwargs={"k": 1},
)
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
#######################################################################################################################
def upload_xls():
st.title("آپلود و نمایش فایل اکسل")
uploaded_file = st.file_uploader("لطفاً فایل اکسل خود را آپلود کنید", type=["xlsx", "xls"])
if uploaded_file is not None:
df = pd.read_excel(uploaded_file)
st.write("دیتا فریم مربوط به فایل اکسل:")
st.write(df)
return df
################################################################################################################
def sentences_f(sentence,df2):
words = sentence.split()
df1 = pd.DataFrame(words, columns=['کلمات'])
df1['معادل'] = ''
for i, word in df1['کلمات'].items():
match = df2[df2['کلمات'] == word]
if not match.empty:
df1.at[i, 'معادل'] = match['معادل'].values[0]
df1['معادل'] = df1.apply(lambda row: row['کلمات'] if row['معادل'] == '' else row['معادل'], axis=1)
translated_sentence = ' '.join(df1['معادل'].tolist())
return translated_sentence
####################################################################################################################
####################################################################################################################
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)
#df2=upload_xls()
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_question = st.text_input("Ask a question about your documents:")
#user_question2=sentences_f(sentence=user_question1,df2=df2)
#translator = GoogleTranslator(source='persian', target='english')
#user_question = translator.translate(user_question2)
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()
|