fastx commited on
Commit
8b1f0bb
·
1 Parent(s): 9d2317a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -133
app.py CHANGED
@@ -4,72 +4,64 @@ import json
4
  import requests
5
 
6
  #Streaming endpoint
7
- API_URL = "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"
8
-
9
- #Huggingface provided GPT4 OpenAI API Key
10
- OPENAI_API_KEY = "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"
11
-
12
- #Inferenec function
13
- def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], history=[]):
 
 
 
 
 
 
 
 
 
 
14
 
15
  headers = {
16
  "Content-Type": "application/json",
17
- "Authorization": f"Bearer {OPENAI_API_KEY}"
18
  }
19
- print(f"system message is ^^ {system_msg}")
20
- if system_msg.strip() == '':
21
- initial_message = [{"role": "user", "content": f"{inputs}"},]
22
- multi_turn_message = []
23
- else:
24
- initial_message= [{"role": "system", "content": system_msg},
25
- {"role": "user", "content": f"{inputs}"},]
26
- multi_turn_message = [{"role": "system", "content": system_msg},]
27
-
28
- if chat_counter == 0 :
29
- payload = {
30
- "model": "gpt-4",
31
- "messages": initial_message ,
32
- "temperature" : 1.0,
33
- "top_p":1.0,
34
- "n" : 1,
35
- "stream": True,
36
- "presence_penalty":0,
37
- "frequency_penalty":0,
38
- }
39
- print(f"chat_counter - {chat_counter}")
40
- else: #if chat_counter != 0 :
41
- messages=multi_turn_message # Of the type of - [{"role": "system", "content": system_msg},]
42
  for data in chatbot:
43
- user = {}
44
- user["role"] = "user"
45
- user["content"] = data[0]
46
- assistant = {}
47
- assistant["role"] = "assistant"
48
- assistant["content"] = data[1]
49
- messages.append(user)
50
- messages.append(assistant)
51
- temp = {}
52
- temp["role"] = "user"
53
- temp["content"] = inputs
54
- messages.append(temp)
55
  #messages
56
  payload = {
57
- "model": "gpt-4",
58
- "messages": messages, # Of the type of [{"role": "user", "content": f"{inputs}"}],
59
  "temperature" : temperature, #1.0,
60
  "top_p": top_p, #1.0,
61
  "n" : 1,
62
  "stream": True,
63
  "presence_penalty":0,
64
- "frequency_penalty":0,}
 
65
 
66
  chat_counter+=1
67
 
68
  history.append(inputs)
69
- print(f"Logging : payload is - {payload}")
70
  # make a POST request to the API endpoint using the requests.post method, passing in stream=True
71
  response = requests.post(API_URL, headers=headers, json=payload, stream=True)
72
- print(f"Logging : response code - {response}")
73
  token_counter = 0
74
  partial_words = ""
75
 
@@ -79,11 +71,14 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
79
  if counter == 0:
80
  counter+=1
81
  continue
 
82
  # check whether each line is non-empty
83
  if chunk.decode() :
84
  chunk = chunk.decode()
85
  # decode each line as response data is in bytes
86
  if len(chunk) > 12 and "content" in json.loads(chunk[6:])['choices'][0]['delta']:
 
 
87
  partial_words = partial_words + json.loads(chunk[6:])['choices'][0]["delta"]["content"]
88
  if token_counter == 0:
89
  history.append(" " + partial_words)
@@ -91,103 +86,47 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
91
  history[-1] = partial_words
92
  chat = [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2) ] # convert to tuples of list
93
  token_counter+=1
94
- yield chat, history, chat_counter, response # resembles {chatbot: chat, state: history}
95
 
96
- #Resetting to blank
97
  def reset_textbox():
98
  return gr.update(value='')
99
 
100
- #to set a component as visible=False
101
- def set_visible_false():
102
- return gr.update(visible=False)
103
-
104
- #to set a component as visible=True
105
- def set_visible_true():
106
- return gr.update(visible=True)
107
-
108
- title = """<h1 align="center">🔥GPT4 with ChatCompletions API +🚀Gradio-Streaming</h1>"""
109
-
110
- #display message for themes feature
111
- theme_addon_msg = """<center>🌟 Discover Gradio Themes with this Demo, featuring v3.22.0! Gradio v3.23.0 also enables seamless Theme sharing. You can develop or modify a theme, and send it to the hub using simple <code>theme.push_to_hub()</code>.
112
- <br>🏆Participate in Gradio's Theme Building Hackathon to exhibit your creative flair and win fabulous rewards! Join here - <a href="https://huggingface.co/Gradio-Themes" target="_blank">Gradio-Themes-Party🎨</a> 🏆</center>
113
  """
114
-
115
- #Using info to add additional information about System message in GPT4
116
- system_msg_info = """A conversation could begin with a system message to gently instruct the assistant.
117
- System message helps set the behavior of the AI Assistant. For example, the assistant could be instructed with 'You are a helpful assistant.'"""
118
-
119
- #Modifying existing Gradio Theme
120
- theme = gr.themes.Soft(primary_hue="zinc", secondary_hue="green", neutral_hue="green",
121
- text_size=gr.themes.sizes.text_lg)
122
-
123
- with gr.Blocks(css = """#col_container { margin-left: auto; margin-right: auto;} #chatbot {height: 520px; overflow: auto;}""",
124
- theme=theme) as demo:
125
  gr.HTML(title)
126
- gr.HTML("""<h3 align="center">🔥This Huggingface Gradio Demo provides you full access to GPT4 API (4096 token limit). 🎉🥳🎉You don't need any OPENAI API key🙌</h1>""")
127
- gr.HTML(theme_addon_msg)
128
- gr.HTML('''<center><a href="https://huggingface.co/spaces/ysharma/ChatGPT4?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>Duplicate the Space and run securely with your OpenAI API Key</center>''')
129
-
130
  with gr.Column(elem_id = "col_container"):
131
- #GPT4 API Key is provided by Huggingface
132
- with gr.Accordion(label="System message:", open=False):
133
- system_msg = gr.Textbox(label="Instruct the AI Assistant to set its beaviour", info = system_msg_info, value="")
134
- accordion_msg = gr.HTML(value="🚧 To set System message you will have to refresh the app", visible=False)
135
- chatbot = gr.Chatbot(label='GPT4', elem_id="chatbot")
136
- inputs = gr.Textbox(placeholder= "Hi there!", label= "Type an input and press Enter")
137
- state = gr.State([])
138
- with gr.Row():
139
- with gr.Column(scale=7):
140
- b1 = gr.Button().style(full_width=True)
141
- with gr.Column(scale=3):
142
- server_status_code = gr.Textbox(label="Status code from OpenAI server", )
143
 
144
- #top_p, temperature
145
  with gr.Accordion("Parameters", open=False):
146
  top_p = gr.Slider( minimum=-0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)",)
147
  temperature = gr.Slider( minimum=-0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature",)
 
 
148
  chat_counter = gr.Number(value=0, visible=False, precision=0)
149
 
150
- #Event handling
151
- inputs.submit( predict, [system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter, server_status_code],) #openai_api_key
152
- b1.click( predict, [system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter, server_status_code],) #openai_api_key
153
-
154
- inputs.submit(set_visible_false, [], [system_msg])
155
- b1.click(set_visible_false, [], [system_msg])
156
- inputs.submit(set_visible_true, [], [accordion_msg])
157
- b1.click(set_visible_true, [], [accordion_msg])
158
-
159
  b1.click(reset_textbox, [], [inputs])
160
  inputs.submit(reset_textbox, [], [inputs])
161
-
162
- #Examples
163
- with gr.Accordion(label="Examples for System message:", open=False):
164
- gr.Examples(
165
- examples = [["""You are an AI programming assistant.
166
-
167
- - Follow the user's requirements carefully and to the letter.
168
- - First think step-by-step -- describe your plan for what to build in pseudocode, written out in great detail.
169
- - Then output the code in a single code block.
170
- - Minimize any other prose."""], ["""You are ComedianGPT who is a helpful assistant. You answer everything with a joke and witty replies."""],
171
- ["You are ChefGPT, a helpful assistant who answers questions with culinary expertise and a pinch of humor."],
172
- ["You are FitnessGuruGPT, a fitness expert who shares workout tips and motivation with a playful twist."],
173
- ["You are SciFiGPT, an AI assistant who discusses science fiction topics with a blend of knowledge and wit."],
174
- ["You are PhilosopherGPT, a thoughtful assistant who responds to inquiries with philosophical insights and a touch of humor."],
175
- ["You are EcoWarriorGPT, a helpful assistant who shares environment-friendly advice with a lighthearted approach."],
176
- ["You are MusicMaestroGPT, a knowledgeable AI who discusses music and its history with a mix of facts and playful banter."],
177
- ["You are SportsFanGPT, an enthusiastic assistant who talks about sports and shares amusing anecdotes."],
178
- ["You are TechWhizGPT, a tech-savvy AI who can help users troubleshoot issues and answer questions with a dash of humor."],
179
- ["You are FashionistaGPT, an AI fashion expert who shares style advice and trends with a sprinkle of wit."],
180
- ["You are ArtConnoisseurGPT, an AI assistant who discusses art and its history with a blend of knowledge and playful commentary."],
181
- ["You are a helpful assistant that provides detailed and accurate information."],
182
- ["You are an assistant that speaks like Shakespeare."],
183
- ["You are a friendly assistant who uses casual language and humor."],
184
- ["You are a financial advisor who gives expert advice on investments and budgeting."],
185
- ["You are a health and fitness expert who provides advice on nutrition and exercise."],
186
- ["You are a travel consultant who offers recommendations for destinations, accommodations, and attractions."],
187
- ["You are a movie critic who shares insightful opinions on films and their themes."],
188
- ["You are a history enthusiast who loves to discuss historical events and figures."],
189
- ["You are a tech-savvy assistant who can help users troubleshoot issues and answer questions about gadgets and software."],
190
- ["You are an AI poet who can compose creative and evocative poems on any given topic."],],
191
- inputs = system_msg,)
192
-
193
- demo.queue(max_size=99, concurrency_count=20).launch(debug=True)
 
4
  import requests
5
 
6
  #Streaming endpoint
7
+ API_URL = "https://api.openai.com/v1/chat/completions" #os.getenv("API_URL") + "/generate_stream"
8
+
9
+ #Testing with my Open AI Key
10
+ #OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
11
+
12
+ def predict(inputs, top_p, temperature, openai_api_key, chat_counter, chatbot=[], history=[]): #repetition_penalty, top_k
13
+
14
+ payload = {
15
+ "model": "gpt-3.5-turbo",
16
+ "messages": [{"role": "user", "content": f"{inputs}"}],
17
+ "temperature" : 1.0,
18
+ "top_p":1.0,
19
+ "n" : 1,
20
+ "stream": True,
21
+ "presence_penalty":0,
22
+ "frequency_penalty":0,
23
+ }
24
 
25
  headers = {
26
  "Content-Type": "application/json",
27
+ "Authorization": f"Bearer {openai_api_key}"
28
  }
29
+
30
+ print(f"chat_counter - {chat_counter}")
31
+ if chat_counter != 0 :
32
+ messages=[]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  for data in chatbot:
34
+ temp1 = {}
35
+ temp1["role"] = "user"
36
+ temp1["content"] = data[0]
37
+ temp2 = {}
38
+ temp2["role"] = "assistant"
39
+ temp2["content"] = data[1]
40
+ messages.append(temp1)
41
+ messages.append(temp2)
42
+ temp3 = {}
43
+ temp3["role"] = "user"
44
+ temp3["content"] = inputs
45
+ messages.append(temp3)
46
  #messages
47
  payload = {
48
+ "model": "gpt-3.5-turbo",
49
+ "messages": messages, #[{"role": "user", "content": f"{inputs}"}],
50
  "temperature" : temperature, #1.0,
51
  "top_p": top_p, #1.0,
52
  "n" : 1,
53
  "stream": True,
54
  "presence_penalty":0,
55
+ "frequency_penalty":0,
56
+ }
57
 
58
  chat_counter+=1
59
 
60
  history.append(inputs)
61
+ print(f"payload is - {payload}")
62
  # make a POST request to the API endpoint using the requests.post method, passing in stream=True
63
  response = requests.post(API_URL, headers=headers, json=payload, stream=True)
64
+ #response = requests.post(API_URL, headers=headers, json=payload, stream=True)
65
  token_counter = 0
66
  partial_words = ""
67
 
 
71
  if counter == 0:
72
  counter+=1
73
  continue
74
+ #counter+=1
75
  # check whether each line is non-empty
76
  if chunk.decode() :
77
  chunk = chunk.decode()
78
  # decode each line as response data is in bytes
79
  if len(chunk) > 12 and "content" in json.loads(chunk[6:])['choices'][0]['delta']:
80
+ #if len(json.loads(chunk.decode()[6:])['choices'][0]["delta"]) == 0:
81
+ # break
82
  partial_words = partial_words + json.loads(chunk[6:])['choices'][0]["delta"]["content"]
83
  if token_counter == 0:
84
  history.append(" " + partial_words)
 
86
  history[-1] = partial_words
87
  chat = [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2) ] # convert to tuples of list
88
  token_counter+=1
89
+ yield chat, history, chat_counter # resembles {chatbot: chat, state: history}
90
 
91
+
92
  def reset_textbox():
93
  return gr.update(value='')
94
 
95
+ title = """<h1 align="center">🔥ChatGPT API</h1>"""
96
+ description = """Language models can be conditioned to act like dialogue agents through a conversational prompt that typically takes the form:
97
+ ```
98
+ User: <utterance>
99
+ Assistant: <utterance>
100
+ User: <utterance>
101
+ Assistant: <utterance>
102
+ ...
103
+ ```
104
+ In this app, you can explore the outputs of a gpt-3.5-turbo LLM.
 
 
 
105
  """
106
+
107
+ with gr.Blocks(css = """#col_container {width: 1000px; margin-left: auto; margin-right: auto;}
108
+ #chatbot {height: 520px; overflow: auto;}""") as demo:
 
 
 
 
 
 
 
 
109
  gr.HTML(title)
110
+ gr.HTML('''<center><a href="https://huggingface.co/spaces/ysharma/ChatGPTwithAPI?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>Duplicate the Space and run securely with your OpenAI API Key</center>''')
 
 
 
111
  with gr.Column(elem_id = "col_container"):
112
+ openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
113
+ chatbot = gr.Chatbot(elem_id='chatbot') #c
114
+ inputs = gr.Textbox(placeholder= "Hi there!", label= "Type an input and press Enter") #t
115
+ state = gr.State([]) #s
116
+ b1 = gr.Button()
 
 
 
 
 
 
 
117
 
118
+ #inputs, top_p, temperature, top_k, repetition_penalty
119
  with gr.Accordion("Parameters", open=False):
120
  top_p = gr.Slider( minimum=-0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)",)
121
  temperature = gr.Slider( minimum=-0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature",)
122
+ #top_k = gr.Slider( minimum=1, maximum=50, value=4, step=1, interactive=True, label="Top-k",)
123
+ #repetition_penalty = gr.Slider( minimum=0.1, maximum=3.0, value=1.03, step=0.01, interactive=True, label="Repetition Penalty", )
124
  chat_counter = gr.Number(value=0, visible=False, precision=0)
125
 
126
+ inputs.submit( predict, [inputs, top_p, temperature, openai_api_key, chat_counter, chatbot, state], [chatbot, state, chat_counter],)
127
+ b1.click( predict, [inputs, top_p, temperature, openai_api_key, chat_counter, chatbot, state], [chatbot, state, chat_counter],)
 
 
 
 
 
 
 
128
  b1.click(reset_textbox, [], [inputs])
129
  inputs.submit(reset_textbox, [], [inputs])
130
+
131
+ #gr.Markdown(description)
132
+ demo.queue().launch(debug=True)