Generative_QNA / app.py
Omkar008's picture
Update app.py
1ef8a1d
raw
history blame contribute delete
No virus
4.26 kB
import streamlit as st
from run_llama import load_models
import variables as vr
from load_documents import load_documents_fn
import torch
from langchain.vectorstores import Chroma
from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from variables import EMBEDDING_MODEL_NAME,MODEL_ID,MODEL_BASENAME
from chromadb.utils import embedding_functions
# print(f"Is CUDA available: {torch.cuda.is_available()}")
# # True
# print(f"CUDA device: {torch.cuda.get_device_name(torch.cuda.current_device())}")
# Tesla T4
def model_memory():
# Adding history to the model.
template = """Use the following pieces of context to answer the question at the end. If you don't know the answer,\
just say that you don't know, don't try to make up an answer.
{context}
Question: {question}
Helpful Answer:"""
# template = """Use the following pieces of context to answer the question at the end. If you don't know the answer,\
# try to make up an short and sweet answer.
# if the context does not exists or has no relevancy then try answer it on your previous knowledge base.But keep the answer short and precise.
# {context}
#
#
# Question: {question}
# Helpful Answer:"""
prompt = PromptTemplate(input_variables=["context", "question"], template=template)
# memory = ConversationBufferMemory(input_key="question")
return prompt
with st.sidebar:
st.subheader("Your documents")
global docs
docs = st.file_uploader("Upload your PDFs here and click on 'Process'", accept_multiple_files=True,type=["pdf","docx","csv","xlsx","html"])
if st.button("Process"):
with st.spinner("Processing"):
# raw_text = extract_text_from_pdfs(docs)
# all_loaders =classify_and_load_files_into_respective_loaders(docs)
# chroma_vectorstore = index_initializing_upserting_chroma_db(all_loaders)
if docs:
loaded_documents = load_documents_fn(docs)
else:
st.error("Error While loading the documents!!!Try Again!!!")
if "EMBEDDINGS" not in st.session_state:
EMBEDDINGS = SentenceTransformerEmbeddings(model_name=EMBEDDING_MODEL_NAME)
# EMBEDDINGS = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")
st.session_state.EMBEDDINGS = EMBEDDINGS
# if "DB" not in st.session_state:
# DB = Chroma(
# persist_directory=loaded_documents,
# embedding_function=st.session_state.EMBEDDINGS,
# client_settings=CHROMA_SETTINGS,
# )
DB = Chroma.from_documents(loaded_documents, st.session_state.EMBEDDINGS,persist_directory="db")
st.session_state.DB = DB
if "RETRIEVER" not in st.session_state:
RETRIEVER = DB.as_retriever()
st.session_state.RETRIEVER = RETRIEVER
if "LLM" not in st.session_state:
LLM = load_models(model_id=MODEL_ID, model_basename=MODEL_BASENAME)
# st.session_state["LLM"] = LLM
if "QA" not in st.session_state:
prompt = model_memory()
QA = RetrievalQA.from_chain_type(
llm=LLM,
chain_type="stuff",
retriever=RETRIEVER,
return_source_documents=True,
chain_type_kwargs={"prompt": prompt},
)
st.session_state["QA"] = QA
st.success("LLM Initialized !!! You Chat with your documents!!")
st.title('Chat With Your Documents')
prompt = st.text_input('Input your prompt here')
# while True:
if docs is None:
prompt = ""
# If the user hits enter
if prompt:
# Then pass the prompt to the LLM
response = st.session_state["QA"](prompt)
answer, docs = response["result"], response["source_documents"]
# ...and write it out to the screen
st.write(answer)