Spaces:
Sleeping
Sleeping
File size: 2,790 Bytes
0adbfb5 b274edd 0adbfb5 b274edd 99b3ff8 0adbfb5 b274edd 0adbfb5 b274edd 0adbfb5 b274edd bd4c69d b274edd 0adbfb5 b274edd 0adbfb5 0422fc9 0adbfb5 c1ec3e7 0adbfb5 b274edd 0422fc9 0adbfb5 b274edd 0adbfb5 9ccdf69 0adbfb5 b274edd 0adbfb5 b274edd |
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 |
import os
import streamlit as st
from dotenv import load_dotenv
from langchain_groq import ChatGroq
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain_community.document_loaders import PyPDFDirectoryLoader
load_dotenv()
groq_api_key = os.getenv('GROQ_API_KEY')
model = ChatGroq(groq_api_key=groq_api_key, model='Llama3-8b-8192')
prompt = ChatPromptTemplate.from_template(
"""
Answer the questions based on the context only.
Provide the answer accurately and briefly to the question
<context>
{context}
<context>
Question:{input}
"""
)
st.set_page_config(page_title = 'Simple RAG', page_icon = '⛓️', initial_sidebar_state = 'collapsed')
st.sidebar.header('About')
st.sidebar.markdown(
"""
Embeddings: Craig/paraphrase-MiniLM-L6-v2
VectorDB: FAISS
LLM: Llama3-8b-8192
"""
)
st.title('Simple RAG Application')
st.warning('This is a simple RAG demonstration application. It uses open-source models for embeddings and \
inference. So it can be slow and ineffecient.', icon='⚠️')
def create_vector_embedding():
if 'vectors' not in st.session_state:
st.session_state.embeddings = HuggingFaceEmbeddings(model_name='Craig/paraphrase-MiniLM-L6-v2')
st.session_state.loader = PyPDFDirectoryLoader('documents')
st.session_state.docs = st.session_state.loader.load()
st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
st.session_state.final_documents = st.session_state.text_splitter.split_documents(st.session_state.docs[:50])
st.session_state.vectors = FAISS.from_documents(st.session_state.final_documents, st.session_state.embeddings)
st.rerun()
if 'vectors' not in st.session_state:
st.write('The vector store database is not yet ready')
if st.button('Create'):
with st.spinner('Working...'):
create_vector_embedding()
if 'vectors' in st.session_state:
user_prompt = st.text_input('Enter your query here')
if user_prompt:
document_chain = create_stuff_documents_chain(model, prompt)
retriever = st.session_state.vectors.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, document_chain)
response = retrieval_chain.invoke({'input': user_prompt})
st.write(response['answer'])
with st.expander('Context'):
for i, doc in enumerate(response['context']):
st.write(doc.page_content)
st.write('\n\n') |