Gaurav-2273 commited on
Commit
69dccc0
·
verified ·
1 Parent(s): 478f724

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -62
app.py CHANGED
@@ -1,63 +1,53 @@
1
  import gradio as gr
2
- from huggingface_hub import InferenceClient
3
-
4
- """
5
- For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
6
- """
7
- client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
8
-
9
-
10
- def respond(
11
- message,
12
- history: list[tuple[str, str]],
13
- system_message,
14
- max_tokens,
15
- temperature,
16
- top_p,
17
- ):
18
- messages = [{"role": "system", "content": system_message}]
19
-
20
- for val in history:
21
- if val[0]:
22
- messages.append({"role": "user", "content": val[0]})
23
- if val[1]:
24
- messages.append({"role": "assistant", "content": val[1]})
25
-
26
- messages.append({"role": "user", "content": message})
27
-
28
- response = ""
29
-
30
- for message in client.chat_completion(
31
- messages,
32
- max_tokens=max_tokens,
33
- stream=True,
34
- temperature=temperature,
35
- top_p=top_p,
36
- ):
37
- token = message.choices[0].delta.content
38
-
39
- response += token
40
- yield response
41
-
42
- """
43
- For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
44
- """
45
- demo = gr.ChatInterface(
46
- respond,
47
- additional_inputs=[
48
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
49
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
50
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
51
- gr.Slider(
52
- minimum=0.1,
53
- maximum=1.0,
54
- value=0.95,
55
- step=0.05,
56
- label="Top-p (nucleus sampling)",
57
- ),
58
- ],
59
- )
60
-
61
-
62
- if __name__ == "__main__":
63
- demo.launch()
 
1
  import gradio as gr
2
+ import fitz # PyMuPDF
3
+ from langchain.chains import ConversationChain
4
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
5
+ from langchain.schema import Document
6
+ from langchain.vectorstores import Chroma
7
+ from langchain.embeddings import OpenAIEmbeddings
8
+ from langchain.llms import OpenAI
9
+ from langchain.chains import RetrievalQA
10
+ from langchain.prompts import PromptTemplate
11
+ from langchain.memory import ConversationBufferMemory
12
+ from langchain.chains import ConversationalRetrievalChain
13
+
14
+ def extract_text_from_pdf(pdf_path):
15
+ doc = fitz.open(pdf_path)
16
+ text = ""
17
+ for page_num in range(len(doc)):
18
+ page = doc.load_page(page_num)
19
+ text += page.get_text()
20
+ return text
21
+
22
+ # Load the text from the PDF and preprocess
23
+ openai_api_key = os.getenv("sk-proj-bxh8lX8T6EoQaDWm2cljT3BlbkFJylU5bVGc2eQxB8WCP1Ub")
24
+ pdf_path = "iess402.pdf" # Path to your PDF file
25
+ pdf_text = extract_text_from_pdf(pdf_path)
26
+ document = Document(page_content=pdf_text, metadata={})
27
+ text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=25)
28
+ all_splits = text_splitter.split_documents([document])
29
+
30
+ # Create vector store and setup the QA chain
31
+ vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings(api_key=openai_api_key))
32
+ llm = OpenAI(api_key=openai_api_key, temperature=0, model="gpt-3.5-turbo-instruct", verbose=True)
33
+ template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. Keep the answer as concise as possible. Always say "thanks for asking!" at the end of the answer.
34
+ {context}
35
+ Question: {question}
36
+ Helpful Answer:"""
37
+ QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context", "question"], template=template)
38
+
39
+ # Setup conversational retrieval chain with memory
40
+ memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
41
+ retriever = vectorstore.as_retriever()
42
+ qa = ConversationalRetrievalChain.from_llm(llm, retriever=retriever, memory=memory)
43
+
44
+ # Define the function to ask questions and get answers
45
+ def ask_question(question):
46
+ result = qa.invoke({"question": question})
47
+ return result['answer']
48
+
49
+ # Create the Gradio interface
50
+ iface = gr.Interface(fn=ask_question, inputs="text", outputs="text", title="PDF QA System", description="Ask questions based Textbook in Political Science for Class IX chapter 2.")
51
+
52
+ # Launch the Gradio interface
53
+ iface.launch()