CoolFace
Apppublic

kappakpr/streamlitgemma

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py87 linesDownload Raw Back to root
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