MuhammedSheded33 commited on
Commit
bf44e13
·
verified ·
1 Parent(s): 14fe1dd

Upload 8 files

Browse files

added a sample RAG test for generating question based on `yolo paper.pdf`
**Data folder** : contain the PDF to Retrieve from
**SimpleRAG_test** : notebook for trials
**src** : containing the helper function and the system prompt to be used
**app.py** : running the app

Files changed (9) hide show
  1. .env +3 -0
  2. .gitattributes +1 -0
  3. Data/yolov9_paper.pdf +3 -0
  4. SimpleRAG_test.ipynb +0 -0
  5. app.py +72 -0
  6. requirements.txt +12 -0
  7. src/__init__.py +1 -0
  8. src/helpers.py +29 -0
  9. src/prompt.py +11 -0
.env ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ PINECONE_API_KEY = "pcsk_3Yn1k3_CGnRMFtjNPnzh62rmQtogLwjXnEBey3ygLeAf3pphuVbcgdraDaENNWM8L4oz5"
2
+ OPENAI_API_KEY = "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"
3
+ GOOGLE_API_KEY = "AIzaSyADUTjZIpL_MXiBEAZD17DgE3zbmr5I8oU"
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ Data/yolov9_paper.pdf filter=lfs diff=lfs merge=lfs -text
Data/yolov9_paper.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5a67aef4802df6f1e32f84884b309b59818294df56b4dafe1c097287b222e9fd
3
+ size 4968643
SimpleRAG_test.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ # from src.helper import download_hugging_face_embeddings
4
+
5
+ from langchain_pinecone import PineconeVectorStore
6
+ from langchain_openai import OpenAI
7
+ from langchain_google_genai import ChatGoogleGenerativeAI
8
+ from langchain.chains import create_retrieval_chain
9
+ from langchain.chains.combine_documents import create_stuff_documents_chain
10
+ from langchain_core.prompts import ChatPromptTemplate
11
+ from langchain_huggingface import HuggingFaceEmbeddings
12
+ from src.prompt import *
13
+
14
+ from dotenv import load_dotenv
15
+ import os
16
+
17
+
18
+ #Download the Embeddings from Hugging Face
19
+ def download_hugging_face_embeddings():
20
+ embeddings=HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2')
21
+ return embeddings
22
+
23
+
24
+ # Load env Variables
25
+ load_dotenv()
26
+
27
+ PINECONE_API_KEY=os.environ.get('PINECONE_API_KEY')
28
+ OPENAI_API_KEY=os.environ.get('OPENAI_API_KEY')
29
+ GOOGLE_API_KEY= os.environ.get("GOOGLE_API_KEY")
30
+
31
+ os.environ["PINECONE_API_KEY"] = PINECONE_API_KEY
32
+ os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
33
+ os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
34
+ # Embedding model
35
+ embeddings = download_hugging_face_embeddings()
36
+
37
+
38
+ # load exisiting pinecone index
39
+ index_name = "yolotest"
40
+ Vector_store = PineconeVectorStore.from_existing_index(
41
+ index_name=index_name,
42
+ embedding=embeddings
43
+ )
44
+
45
+ # Retriever
46
+ retriever = Vector_store.as_retriever(search_type="similarity", search_kwargs={"k":5})
47
+
48
+ # llm
49
+ # llm = OpenAI(api_key=OPENAI_API_KEY, temperature=0, max_tokens=500)
50
+ llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro",temperature=0,max_tokens=None,timeout=None)
51
+
52
+ # streamlit
53
+ st.title("RAG Application built on Gemini Model")
54
+ query = st.chat_input("Say something: ")
55
+ prompt = query
56
+
57
+
58
+ prompt = ChatPromptTemplate.from_messages(
59
+ [
60
+ ("system", system_prompt),
61
+ ("human", "{input}"),
62
+ ]
63
+ )
64
+
65
+
66
+ if query:
67
+ question_answer_chain = create_stuff_documents_chain(llm, prompt)
68
+ rag_chain = create_retrieval_chain(retriever, question_answer_chain)
69
+
70
+ response = rag_chain.invoke({"input": query})
71
+
72
+ st.write(response["answer"])
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ langchain
2
+ langchain-community
3
+ langchain_huggingface
4
+ langchain-pinecone
5
+ langchain_openai
6
+ pypdf
7
+ streamlit
8
+ pinecone
9
+ sentence-transformers
10
+ python-dotenv
11
+ langchain_experimental
12
+ langchain-google-genai
src/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ # from helpers import download_hugging_face_embeddings
src/helpers.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain_community.document_loaders import TextLoader, PyPDFLoader, DirectoryLoader
2
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
3
+ from langchain_huggingface import HuggingFaceEmbeddings
4
+
5
+
6
+ #Extract Data From the PDF File
7
+ def load_pdf_file(data):
8
+ loader= DirectoryLoader(data,
9
+ glob="*.pdf",
10
+ loader_cls=PyPDFLoader)
11
+
12
+ documents=loader.load()
13
+
14
+ return documents
15
+
16
+
17
+ #Split the Data into Text Chunks
18
+ def text_split(extracted_data):
19
+ text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
20
+ text_chunks=text_splitter.split_documents(extracted_data)
21
+ return text_chunks
22
+
23
+
24
+
25
+
26
+ #Download the Embeddings from Hugging Face
27
+ def download_hugging_face_embeddings():
28
+ embeddings=HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2')
29
+ return embeddings
src/prompt.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ system_prompt = (
2
+ "You are a AI expert who can generate questions from retrieved docs. "
3
+ "You will be given a topic to generate question about"
4
+ "Use the following pieces of retrieved context to generate "
5
+ "new questions based on the topic given."
6
+ "say that you don't know if the input given is beyond the scope of the retrieved context "
7
+ " dont respond with anything accept for generated question"
8
+ "Use three sentences maximum and keep the generated questions concise."
9
+ "\n\n"
10
+ "{context}"
11
+ )