lekkalar commited on
Commit
2b0a298
·
0 Parent(s):

Duplicate from lekkalar/chatgpt-for-pdfs

Browse files
Files changed (4) hide show
  1. .gitattributes +34 -0
  2. README.md +13 -0
  3. app.py +102 -0
  4. requirements.txt +6 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: ChatGPT For PDFs
3
+ emoji: 👁
4
+ colorFrom: indigo
5
+ colorTo: gray
6
+ sdk: gradio
7
+ sdk_version: 3.33.1
8
+ app_file: app.py
9
+ pinned: false
10
+ duplicated_from: lekkalar/chatgpt-for-pdfs
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import os
3
+ import time
4
+
5
+
6
+ from langchain.document_loaders import OnlinePDFLoader #for laoding the pdf
7
+ from langchain.embeddings import OpenAIEmbeddings # for creating embeddings
8
+ from langchain.vectorstores import Chroma # for the vectorization part
9
+ from langchain.chains import ConversationalRetrievalChain # for conversing with chatGPT
10
+ from langchain.chat_models import ChatOpenAI # the LLM model we'll use (ChatGPT)
11
+
12
+ def loading_pdf():
13
+ return "Loading..."
14
+
15
+ def pdf_changes(pdf_doc, open_ai_key):
16
+ if openai_key is not None:
17
+ os.environ['OPENAI_API_KEY'] = open_ai_key
18
+ #Load the pdf file
19
+ loader = OnlinePDFLoader(pdf_doc.name)
20
+ pages = loader.load_and_split()
21
+
22
+ #Create an instance of OpenAIEmbeddings, which is responsible for generating embeddings for text
23
+ embeddings = OpenAIEmbeddings()
24
+
25
+ #To create a vector store, we use the Chroma class, which takes the documents (pages in our case), the embeddings instance, and a directory to store the vector data
26
+ vectordb = Chroma.from_documents(pages, embedding=embeddings)
27
+
28
+ #Finally, we create the bot using the ConversationalRetrievalChain class
29
+ #A ConversationalRetrievalChain is similar to a RetrievalQAChain, except that the ConversationalRetrievalChain allows for
30
+ #passing in of a chat history which can be used to allow for follow up questions.
31
+ global pdf_qa
32
+ pdf_qa = ConversationalRetrievalChain.from_llm(ChatOpenAI(temperature=0, model_name="gpt-4"), vectordb.as_retriever(), return_source_documents=False)
33
+
34
+ return "Ready"
35
+ else:
36
+ return "Please provide an OpenAI API key"
37
+
38
+ def add_text(history, text):
39
+ history = history + [(text, None)]
40
+ return history, ""
41
+
42
+ def bot(history):
43
+ response = infer(history[-1][0], history)
44
+ history[-1][1] = ""
45
+
46
+ for character in response:
47
+ history[-1][1] += character
48
+ time.sleep(0.05)
49
+ yield history
50
+
51
+
52
+ def infer(question, history):
53
+
54
+ results = []
55
+ for human, ai in history[:-1]:
56
+ pair = (human, ai)
57
+ results.append(pair)
58
+
59
+ chat_history = results
60
+ print(chat_history)
61
+ query = question
62
+ result = pdf_qa({"question": query, "chat_history": chat_history})
63
+ print(result)
64
+ return result["answer"]
65
+
66
+ css="""
67
+ #col-container {max-width: 700px; margin-left: auto; margin-right: auto;}
68
+ """
69
+
70
+ title = """
71
+ <div style="text-align: center;max-width: 700px;">
72
+ <h1>Chatbot for PDFs - GPT-4</h1>
73
+ <p style="text-align: center;">Upload a .PDF, click the "Load PDF to LangChain" button, <br />
74
+ Wait for the Status to show Ready, start typing your questions. <br />
75
+ The app is set to store chat-history and is built on GPT-4</p>
76
+ </div>
77
+ """
78
+
79
+
80
+ with gr.Blocks(css=css) as demo:
81
+ with gr.Column(elem_id="col-container"):
82
+ gr.HTML(title)
83
+
84
+ with gr.Column():
85
+ openai_key = gr.Textbox(label="Your OpenAI API key", type="password")
86
+ pdf_doc = gr.File(label="Load a pdf", file_types=['.pdf'], type="file")
87
+ with gr.Row():
88
+ langchain_status = gr.Textbox(label="Status", placeholder="", interactive=False)
89
+ load_pdf = gr.Button("Load PDF to LangChain")
90
+
91
+ chatbot = gr.Chatbot([], elem_id="chatbot").style(height=350)
92
+ question = gr.Textbox(label="Question", placeholder="Type your question and hit Enter ")
93
+ submit_btn = gr.Button("Send Message")
94
+ load_pdf.click(loading_pdf, None, langchain_status, queue=False)
95
+ load_pdf.click(pdf_changes, inputs=[pdf_doc, openai_key], outputs=[langchain_status], queue=False)
96
+ question.submit(add_text, [chatbot, question], [chatbot, question]).then(
97
+ bot, chatbot, chatbot
98
+ )
99
+ submit_btn.click(add_text, [chatbot, question], [chatbot, question]).then(
100
+ bot, chatbot, chatbot)
101
+
102
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ openai
2
+ tiktoken
3
+ chromadb
4
+ langchain
5
+ unstructured
6
+ unstructured[local-inference]