RohanSardar commited on
Commit
b274edd
·
verified ·
1 Parent(s): a4b9b55

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -16
app.py CHANGED
@@ -1,19 +1,19 @@
1
- import streamlit as st
2
  import os
 
3
  from dotenv import load_dotenv
4
  from langchain_groq import ChatGroq
 
5
  from langchain_community.embeddings import HuggingFaceEmbeddings
6
  from langchain.text_splitter import RecursiveCharacterTextSplitter
7
  from langchain.chains.combine_documents import create_stuff_documents_chain
8
  from langchain_core.prompts import ChatPromptTemplate
9
  from langchain.chains import create_retrieval_chain
10
- from langchain_community.vectorstores import FAISS
11
  from langchain_community.document_loaders import PyPDFDirectoryLoader
12
 
13
  load_dotenv()
14
- groq_api_key = os.getenv("GROQ_API_KEY")
15
 
16
- model = ChatGroq(groq_api_key=groq_api_key, model="Llama3-8b-8192")
17
 
18
  prompt = ChatPromptTemplate.from_template(
19
  """
@@ -26,26 +26,36 @@ Question:{input}
26
  """
27
  )
28
 
29
- st.title("Simple RAG Application")
 
 
 
 
 
 
 
 
 
 
30
 
31
  def create_vector_embedding():
32
- if "vectors" not in st.session_state:
33
- st.session_state.embeddings = HuggingFaceEmbeddings(model_name="Craig/paraphrase-MiniLM-L6-v2")
34
- st.session_state.loader = PyPDFDirectoryLoader("documents")
35
  st.session_state.docs = st.session_state.loader.load()
36
  st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
37
  st.session_state.final_documents = st.session_state.text_splitter.split_documents(st.session_state.docs[:50])
38
  st.session_state.vectors = FAISS.from_documents(st.session_state.final_documents, st.session_state.embeddings)
39
  st.rerun()
40
 
41
- if "vectors" not in st.session_state:
42
- st.write("The vector store database is not yet ready")
43
- if st.button("Create"):
44
- with st.spinner("Working..."):
45
  create_vector_embedding()
46
 
47
- if "vectors" in st.session_state:
48
- user_prompt = st.text_input("Enter your query here")
49
  if user_prompt:
50
  document_chain = create_stuff_documents_chain(model, prompt)
51
  retriever = st.session_state.vectors.as_retriever()
@@ -53,7 +63,7 @@ if "vectors" in st.session_state:
53
  response = retrieval_chain.invoke({'input': user_prompt})
54
  st.write(response['answer'])
55
 
56
- with st.expander("Context"):
57
  for i, doc in enumerate(response['context']):
58
  st.write(doc.page_content)
59
- st.write("\n\n")
 
 
1
  import os
2
+ import streamlit as st
3
  from dotenv import load_dotenv
4
  from langchain_groq import ChatGroq
5
+ from langchain_community.vectorstores import FAISS
6
  from langchain_community.embeddings import HuggingFaceEmbeddings
7
  from langchain.text_splitter import RecursiveCharacterTextSplitter
8
  from langchain.chains.combine_documents import create_stuff_documents_chain
9
  from langchain_core.prompts import ChatPromptTemplate
10
  from langchain.chains import create_retrieval_chain
 
11
  from langchain_community.document_loaders import PyPDFDirectoryLoader
12
 
13
  load_dotenv()
14
+ groq_api_key = os.getenv('GROQ_API_KEY')
15
 
16
+ model = ChatGroq(groq_api_key=groq_api_key, model='Llama3-8b-8192')
17
 
18
  prompt = ChatPromptTemplate.from_template(
19
  """
 
26
  """
27
  )
28
 
29
+ st.set_page_config(page_title = 'Simple RAG', page_icon = '⛓️', initial_sidebar_state = 'collapsed')
30
+
31
+ st.sidebar.header('About')
32
+ st.sidebar.caption('Embeddings: Craig/paraphrase-MiniLM-L6-v2\n\
33
+ VectorDB: FAISS\nLLM:Llama3-8b-8192')
34
+
35
+ st.title('Simple RAG Application')
36
+
37
+ st.warning('This is a simple RAG demonstration application. It uses open-source models for embeddings and \
38
+ inference. So it can be slow and ineffecient.', icon='⚠️')
39
+
40
 
41
  def create_vector_embedding():
42
+ if 'vectors' not in st.session_state:
43
+ st.session_state.embeddings = HuggingFaceEmbeddings(model_name='Craig/paraphrase-MiniLM-L6-v2')
44
+ st.session_state.loader = PyPDFDirectoryLoader('documents')
45
  st.session_state.docs = st.session_state.loader.load()
46
  st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
47
  st.session_state.final_documents = st.session_state.text_splitter.split_documents(st.session_state.docs[:50])
48
  st.session_state.vectors = FAISS.from_documents(st.session_state.final_documents, st.session_state.embeddings)
49
  st.rerun()
50
 
51
+ if 'vectors' not in st.session_state:
52
+ st.write('The vector store database is not yet ready')
53
+ if st.button('Create'):
54
+ with st.spinner('Working...'):
55
  create_vector_embedding()
56
 
57
+ if 'vectors' in st.session_state:
58
+ user_prompt = st.text_input('Enter your query here')
59
  if user_prompt:
60
  document_chain = create_stuff_documents_chain(model, prompt)
61
  retriever = st.session_state.vectors.as_retriever()
 
63
  response = retrieval_chain.invoke({'input': user_prompt})
64
  st.write(response['answer'])
65
 
66
+ with st.expander('Context'):
67
  for i, doc in enumerate(response['context']):
68
  st.write(doc.page_content)
69
+ st.write('\n\n')