File size: 3,000 Bytes
01aade3 a144f48 275a13f d153de8 db19c60 a144f48 d153de8 db19c60 275a13f db19c60 275a13f db19c60 275a13f db19c60 275a13f db19c60 275a13f db19c60 01aade3 db19c60 01aade3 db19c60 d153de8 db19c60 01aade3 db19c60 01aade3 db19c60 01aade3 275a13f 01aade3 286b934 |
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 |
import os
import faiss
import logging
import streamlit as st
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
# Configure logging
logging.basicConfig(level=logging.DEBUG)
def load_faiss_index(index_path):
if not os.path.exists(index_path):
logging.error(f"FAISS index not found at {index_path}. Please create the index first.")
st.error(f"FAISS index not found at {index_path}. Please create the index first.")
raise FileNotFoundError(f"FAISS index not found at {index_path}.")
try:
logging.info(f"Attempting to load FAISS index from {index_path}.")
index = faiss.read_index(index_path)
logging.info("FAISS index loaded successfully.")
st.success("FAISS index loaded successfully.")
return index
except Exception as e:
logging.error(f"Failed to load FAISS index: {e}")
st.error(f"Failed to load FAISS index: {e}")
raise
def load_llm():
checkpoint = "LaMini-T5-738M"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint)
pipe = pipeline(
'text2text-generation',
model=model,
tokenizer=tokenizer,
max_length=256,
do_sample=True,
temperature=0.3,
top_p=0.95
)
return pipe
def process_answer(question):
index_path = 'faiss_index/index.faiss'
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
try:
faiss_index = load_faiss_index(index_path)
retriever = FAISS(index=faiss_index, embeddings=embeddings)
llm = load_llm()
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
result = qa.invoke(question)
answer = result['result']
return answer, result
except Exception as e:
logging.error(f"An error occurred while processing the answer: {e}")
st.error(f"An error occurred while processing the answer: {e}")
return "An error occurred while processing your request.", {}
def main():
st.title("Search Your PDF ππ")
with st.expander("About the App"):
st.markdown(
"""
This is a Generative AI powered Question and Answering app that responds to questions about your PDF File.
"""
)
question = st.text_area("Enter your Question")
if st.button("Ask"):
st.info("Your Question: " + question)
st.info("Your Answer")
try:
answer, metadata = process_answer(question)
st.write(answer)
st.write(metadata)
except Exception as e:
st.error(f"An unexpected error occurred: {e}")
if __name__ == '__main__':
main() |