phoen1x commited on
Commit
917f716
1 Parent(s): bc8f772

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -184
app.py CHANGED
@@ -1,161 +1,22 @@
1
- # from huggingface_hub import InferenceClient
2
- # import gradio as gr
3
-
4
- # client = InferenceClient(
5
- # "mistralai/Mixtral-8x7B-Instruct-v0.1"
6
- # )
7
-
8
-
9
- # def format_prompt(message, history):
10
- # prompt = "<s>"
11
- # for user_prompt, bot_response in history:
12
- # prompt += f"[INST] {user_prompt} [/INST]"
13
- # prompt += f" {bot_response}</s> "
14
- # prompt += f"[INST] {message} [/INST]"
15
- # return prompt
16
-
17
- # def generate(
18
- # prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
19
- # ):
20
- # temperature = float(temperature)
21
- # if temperature < 1e-2:
22
- # temperature = 1e-2
23
- # top_p = float(top_p)
24
-
25
- # generate_kwargs = dict(
26
- # temperature=temperature,
27
- # max_new_tokens=max_new_tokens,
28
- # top_p=top_p,
29
- # repetition_penalty=repetition_penalty,
30
- # do_sample=True,
31
- # seed=42,
32
- # )
33
-
34
- # formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history)
35
- # stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
36
- # output = ""
37
-
38
- # for response in stream:
39
- # output += response.token.text
40
- # yield output
41
- # return output
42
-
43
-
44
- # additional_inputs=[
45
- # gr.Textbox(
46
- # label="System Prompt",
47
- # max_lines=1,
48
- # interactive=True,
49
- # ),
50
- # gr.Slider(
51
- # label="Temperature",
52
- # value=0.9,
53
- # minimum=0.0,
54
- # maximum=1.0,
55
- # step=0.05,
56
- # interactive=True,
57
- # info="Higher values produce more diverse outputs",
58
- # ),
59
- # gr.Slider(
60
- # label="Max new tokens",
61
- # value=256,
62
- # minimum=0,
63
- # maximum=1048,
64
- # step=64,
65
- # interactive=True,
66
- # info="The maximum numbers of new tokens",
67
- # ),
68
- # gr.Slider(
69
- # label="Top-p (nucleus sampling)",
70
- # value=0.90,
71
- # minimum=0.0,
72
- # maximum=1,
73
- # step=0.05,
74
- # interactive=True,
75
- # info="Higher values sample more low-probability tokens",
76
- # ),
77
- # gr.Slider(
78
- # label="Repetition penalty",
79
- # value=1.2,
80
- # minimum=1.0,
81
- # maximum=2.0,
82
- # step=0.05,
83
- # interactive=True,
84
- # info="Penalize repeated tokens",
85
- # )
86
- # ]
87
-
88
- # examples=[["I'm planning a vacation to Japan. Can you suggest a one-week itinerary including must-visit places and local cuisines to try?", None, None, None, None, None, ],
89
- # ["Can you write a short story about a time-traveling detective who solves historical mysteries?", None, None, None, None, None,],
90
- # ["I'm trying to learn French. Can you provide some common phrases that would be useful for a beginner, along with their pronunciations?", None, None, None, None, None,],
91
- # ["I have chicken, rice, and bell peppers in my kitchen. Can you suggest an easy recipe I can make with these ingredients?", None, None, None, None, None,],
92
- # ["Can you explain how the QuickSort algorithm works and provide a Python implementation?", None, None, None, None, None,],
93
- # ["What are some unique features of Rust that make it stand out compared to other systems programming languages like C++?", None, None, None, None, None,],
94
- # ]
95
-
96
- # gr.ChatInterface(
97
- # fn=generate,
98
- # chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
99
- # additional_inputs=additional_inputs,
100
- # title="Mixtral 46.7B",
101
- # examples=examples,
102
- # concurrency_limit=20,
103
- # ).launch(show_api= True)
104
-
105
-
106
- import os
107
- import streamlit as st
108
- import gradio as gr
109
- from PyPDF2 import PdfReader
110
- from langchain.text_splitter import CharacterTextSplitter
111
- from langchain.embeddings import HuggingFaceBgeEmbeddings
112
- from langchain.vectorstores import FAISS
113
- from langchain.chat_models import ChatOpenAI
114
- from langchain.memory import ConversationBufferMemory
115
- from langchain.chains import ConversationalRetrievalChain
116
  from huggingface_hub import InferenceClient
 
117
 
118
- # Set the Hugging Face Hub API token
119
- hf_token = st.secrets['MixtralPDFChat']
120
-
121
- os.environ["HUGGINGFACEHUB_API_TOKEN"] = hf_token
122
-
123
- # Initialize the InferenceClient
124
- client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
125
-
126
- def get_pdf_text(pdf_docs):
127
- text = ""
128
- for pdf in pdf_docs:
129
- pdf_reader = PdfReader(pdf)
130
- for page in pdf_reader.pages:
131
- text += page.extract_text()
132
- return text
133
-
134
- def get_text_chunks(text):
135
- text_splitter = CharacterTextSplitter(
136
- separator="\n", chunk_size=1500, chunk_overlap=300, length_function=len
137
- )
138
- chunks = text_splitter.split_text(text)
139
- return chunks
140
 
141
- def get_vectorstore(text_chunks):
142
- model = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
143
- encode_kwargs = {"normalize_embeddings": True}
144
- embeddings = HuggingFaceBgeEmbeddings(
145
- model_name=model, encode_kwargs=encode_kwargs, model_kwargs={"device": "cpu"}
146
- )
147
- vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
148
- return vectorstore
149
 
150
  def format_prompt(message, history):
151
- prompt = "<s>"
152
- for user_prompt, bot_response in history:
153
- prompt += f"[INST] {user_prompt} [/INST]"
154
- prompt += f" {bot_response}</s> "
155
- prompt += f"[INST] {message} [/INST]"
156
- return prompt
157
-
158
- def generate(prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0):
 
 
159
  temperature = float(temperature)
160
  if temperature < 1e-2:
161
  temperature = 1e-2
@@ -179,35 +40,64 @@ def generate(prompt, history, system_prompt, temperature=0.9, max_new_tokens=256
179
  yield output
180
  return output
181
 
182
- def main():
183
- st.title("PDF Chatbot")
184
-
185
- # Upload PDF files
186
- pdf_docs = st.file_uploader("Upload PDF files", type=['pdf'], accept_multiple_files=True)
187
 
188
- if pdf_docs:
189
- # get pdf text
190
- raw_text = get_pdf_text(pdf_docs)
191
-
192
- # get the text chunks
193
- text_chunks = get_text_chunks(raw_text)
194
-
195
- # create vector store
196
- vectorstore = get_vectorstore(text_chunks)
197
-
198
- # create conversation chain
199
- conversation_chain = get_conversation_chain(vectorstore)
200
-
201
- def chat_interface(user_input):
202
- response = next(generate(user_input, [], "System Prompt"))
203
- return response
204
-
205
- st.subheader("Chat Interface")
206
- user_input = st.text_input("Ask a question:")
207
- if user_input:
208
- response = chat_interface(user_input)
209
- st.write("Bot's Response:")
210
- st.write(response)
211
-
212
- if __name__ == "__main__":
213
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from huggingface_hub import InferenceClient
2
+ import gradio as gr
3
 
4
+ client = InferenceClient(
5
+ "mistralai/Mixtral-8x7B-Instruct-v0.1"
6
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
 
 
 
 
 
 
 
 
8
 
9
  def format_prompt(message, history):
10
+ prompt = "<s>"
11
+ for user_prompt, bot_response in history:
12
+ prompt += f"[INST] {user_prompt} [/INST]"
13
+ prompt += f" {bot_response}</s> "
14
+ prompt += f"[INST] {message} [/INST]"
15
+ return prompt
16
+
17
+ def generate(
18
+ prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
19
+ ):
20
  temperature = float(temperature)
21
  if temperature < 1e-2:
22
  temperature = 1e-2
 
40
  yield output
41
  return output
42
 
 
 
 
 
 
43
 
44
+ additional_inputs=[
45
+ gr.Textbox(
46
+ label="System Prompt",
47
+ max_lines=1,
48
+ interactive=True,
49
+ ),
50
+ gr.Slider(
51
+ label="Temperature",
52
+ value=0.9,
53
+ minimum=0.0,
54
+ maximum=1.0,
55
+ step=0.05,
56
+ interactive=True,
57
+ info="Higher values produce more diverse outputs",
58
+ ),
59
+ gr.Slider(
60
+ label="Max new tokens",
61
+ value=256,
62
+ minimum=0,
63
+ maximum=1048,
64
+ step=64,
65
+ interactive=True,
66
+ info="The maximum numbers of new tokens",
67
+ ),
68
+ gr.Slider(
69
+ label="Top-p (nucleus sampling)",
70
+ value=0.90,
71
+ minimum=0.0,
72
+ maximum=1,
73
+ step=0.05,
74
+ interactive=True,
75
+ info="Higher values sample more low-probability tokens",
76
+ ),
77
+ gr.Slider(
78
+ label="Repetition penalty",
79
+ value=1.2,
80
+ minimum=1.0,
81
+ maximum=2.0,
82
+ step=0.05,
83
+ interactive=True,
84
+ info="Penalize repeated tokens",
85
+ )
86
+ ]
87
+
88
+ examples=[["I'm planning a vacation to Japan. Can you suggest a one-week itinerary including must-visit places and local cuisines to try?", None, None, None, None, None, ],
89
+ ["Can you write a short story about a time-traveling detective who solves historical mysteries?", None, None, None, None, None,],
90
+ ["I'm trying to learn French. Can you provide some common phrases that would be useful for a beginner, along with their pronunciations?", None, None, None, None, None,],
91
+ ["I have chicken, rice, and bell peppers in my kitchen. Can you suggest an easy recipe I can make with these ingredients?", None, None, None, None, None,],
92
+ ["Can you explain how the QuickSort algorithm works and provide a Python implementation?", None, None, None, None, None,],
93
+ ["What are some unique features of Rust that make it stand out compared to other systems programming languages like C++?", None, None, None, None, None,],
94
+ ]
95
+
96
+ gr.ChatInterface(
97
+ fn=generate,
98
+ chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
99
+ additional_inputs=additional_inputs,
100
+ title="Mixtral 46.7B",
101
+ examples=examples,
102
+ concurrency_limit=20,
103
+ ).launch(show_api= True)