kappakpr/streamlitgemma
0
1import streamlit as st
2# import os
3from langchain_groq import ChatGroq
4from langchain.text_splitter import RecursiveCharacterTextSplitter
5from langchain.chains.combine_documents import create_stuff_documents_chain
6from langchain_core.prompts import ChatPromptTemplate
7from langchain.chains import create_retrieval_chain
8from langchain_community.vectorstores import FAISS
9from langchain_community.document_loaders import PyPDFDirectoryLoader
10from langchain_google_genai import GoogleGenerativeAIEmbeddings
11from dotenv import load_dotenv
12import os
13load_dotenv()
14from pathlib import Path
15
16## load the GROQ And OpenAI API KEY
17groq_api_key=os.getenv('GROQ_API_KEY')
18os.environ["GOOGLE_API_KEY"]=os.getenv("GOOGLE_API_KEY")
19
20st.title("Gemma Model Document Q&A")
21
22llm=ChatGroq(groq_api_key=groq_api_key,
23 model_name="Llama3-8b-8192")
24
25prompt=ChatPromptTemplate.from_template(
26"""
27Answer the questions based on the provided context only.
28Please provide the most accurate response based on the question
29<context>
30{context}
31<context>
32Questions:{input}
33"""
34)
35
36def vector_embedding():
37
38 if "vectors" not in st.session_state:
39
40 st.session_state.embeddings=GoogleGenerativeAIEmbeddings(model = "models/embedding-001")
41 st.session_state.loader=PyPDFDirectoryLoader("./us_census") ## Data Ingestion
42 st.session_state.docs=st.session_state.loader.load() ## Document Loading
43 st.session_state.text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200) ## Chunk Creation
44 st.session_state.final_documents=st.session_state.text_splitter.split_documents(st.session_state.docs[:20]) #splitting
45 st.session_state.vectors=FAISS.from_documents(st.session_state.final_documents,st.session_state.embeddings) #vector OpenAI embeddings
46
47uploaded_file = st.file_uploader("Choose a file")
48if uploaded_file is not None:
49# # To read file as bytes:
50# bytes_data = uploaded_file.getvalue()
51# st.write(bytes_data)
52
53 # Save uploaded file to 'F:/tmp' folder.
54 save_folder = './us_census'
55 save_path = Path(save_folder, uploaded_file.name)
56 with open(save_path, mode='wb') as w:
57 w.write(uploaded_file.getvalue())
58
59prompt1=st.text_input("Enter Your Question From Documents")
60
61if st.button("Documents Embedding"):
62 vector_embedding()
63 st.write("Vector Store DB Is Ready")
64
65import time
66
67if prompt1:
68 document_chain=create_stuff_documents_chain(llm,prompt)
69 retriever=st.session_state.vectors.as_retriever()
70 retrieval_chain=create_retrieval_chain(retriever,document_chain)
71 start=time.process_time()
72 response=retrieval_chain.invoke({'input':prompt1})
73 print("Response time :",time.process_time()-start)
74 st.write(response['answer'])
75
76 # With a streamlit expander
77 with st.expander("Document Similarity Search"):
78 # Find the relevant chunks
79 for i, doc in enumerate(response["context"]):
80 st.write(doc.page_content)
81 st.write("--------------------------------")
82
83
84
85
86
87 