joeyanuff JavaFXpert commited on
Commit
36be6c9
0 Parent(s):

Duplicate from JavaFXpert/GPT-3.5-Express-inator

Browse files

Co-authored-by: James Weaver <JavaFXpert@users.noreply.huggingface.co>

Files changed (4) hide show
  1. .gitattributes +34 -0
  2. README.md +14 -0
  3. app.py +301 -0
  4. requirements.txt +3 -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,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: GPT 3.5 Express Inator
3
+ emoji: 💻
4
+ colorFrom: pink
5
+ colorTo: yellow
6
+ sdk: gradio
7
+ sdk_version: 3.15.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: apache-2.0
11
+ duplicated_from: JavaFXpert/GPT-3.5-Express-inator
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,301 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import openai
3
+ import gradio as gr
4
+ from langchain import OpenAI
5
+ from langchain.prompts import PromptTemplate
6
+ from langchain.chains import LLMChain
7
+ import datetime
8
+
9
+ NUM_WORDS_DEFAULT = 0
10
+ FORMALITY_DEFAULT = "Casual"
11
+ TEMPERATURE_DEFAULT = 0.5
12
+ EMOTION_DEFAULT = "N/A"
13
+ TRANSLATE_TO_DEFAULT = "Don't translate"
14
+ LITERARY_STYLE_DEFAULT = "Prose"
15
+ PROMPT_TEMPLATE = PromptTemplate(
16
+ input_variables=["original_words", "num_words", "formality", "emotions", "translate_to", "literary_style"],
17
+ template="Express {num_words}in a {formality} manner, "
18
+ "{emotions}{translate_to}{literary_style}the following: \n{original_words}\n",
19
+ )
20
+
21
+
22
+ def set_openai_api_key(api_key, openai_api_key, temperature, llm_chain):
23
+ if api_key:
24
+ print("temperature: ", temperature)
25
+ openai_api_key = api_key
26
+
27
+ os.environ["OPENAI_API_KEY"] = api_key
28
+ llm = OpenAI(model_name='text-davinci-003', temperature=temperature, max_tokens=512)
29
+ os.environ["OPENAI_API_KEY"] = ""
30
+
31
+ llm_chain = LLMChain(llm=llm, prompt=PROMPT_TEMPLATE, verbose=True)
32
+ return openai_api_key, llm_chain
33
+
34
+
35
+ def transform_text(desc, openai_api_key, temperature, llm_chain, num_words, formality,
36
+ anticipation_level, joy_level, trust_level,
37
+ fear_level, surprise_level, sadness_level, disgust_level, anger_level,
38
+ translate_to, literary_style):
39
+ if not openai_api_key or openai_api_key == "":
40
+ return "<pre>Please paste your OpenAI API key (see https://beta.openai.com)</pre>"
41
+
42
+ num_words_prompt = ""
43
+ if num_words and int(num_words) != 0:
44
+ num_words_prompt = "using up to " + str(num_words) + " words, "
45
+
46
+ # Change some arguments to lower case
47
+ formality = formality.lower()
48
+ anticipation_level = anticipation_level.lower()
49
+ joy_level = joy_level.lower()
50
+ trust_level = trust_level.lower()
51
+ fear_level = fear_level.lower()
52
+ surprise_level = surprise_level.lower()
53
+ sadness_level = sadness_level.lower()
54
+ disgust_level = disgust_level.lower()
55
+ anger_level = anger_level.lower()
56
+
57
+ llm_chain.llm.temperature = temperature
58
+
59
+ # put all emotions into a list
60
+ emotions = []
61
+ if anticipation_level != "n/a":
62
+ emotions.append(anticipation_level)
63
+ if joy_level != "n/a":
64
+ emotions.append(joy_level)
65
+ if trust_level != "n/a":
66
+ emotions.append(trust_level)
67
+ if fear_level != "n/a":
68
+ emotions.append(fear_level)
69
+ if surprise_level != "n/a":
70
+ emotions.append(surprise_level)
71
+ if sadness_level != "n/a":
72
+ emotions.append(sadness_level)
73
+ if disgust_level != "n/a":
74
+ emotions.append(disgust_level)
75
+ if anger_level != "n/a":
76
+ emotions.append(anger_level)
77
+
78
+ emotions_str = ""
79
+ if len(emotions) > 0:
80
+ if len(emotions) == 1:
81
+ emotions_str = "with emotion of " + emotions[0] + ", "
82
+ else:
83
+ emotions_str = "with emotions of " + ", ".join(emotions[:-1]) + " and " + emotions[-1] + ", "
84
+
85
+ translate_to_str = ""
86
+ if translate_to != TRANSLATE_TO_DEFAULT:
87
+ translate_to_str = "translated to " + translate_to + ", "
88
+
89
+ literary_style_str = ""
90
+ if literary_style != LITERARY_STYLE_DEFAULT:
91
+ if literary_style == "Poetry":
92
+ literary_style_str = "as a poem, "
93
+ elif literary_style == "Haiku":
94
+ literary_style_str = "as a haiku, "
95
+ elif literary_style == "Limerick":
96
+ literary_style_str = "as a limerick, "
97
+ elif literary_style == "Joke":
98
+ literary_style_str = "as a very funny joke with a setup and punchline, "
99
+ elif literary_style == "Knock-knock":
100
+ literary_style_str = "as a very funny knock-knock joke, "
101
+
102
+ formatted_prompt = PROMPT_TEMPLATE.format(
103
+ original_words=desc,
104
+ num_words=num_words_prompt,
105
+ formality=formality,
106
+ emotions=emotions_str,
107
+ translate_to=translate_to_str,
108
+ literary_style=literary_style_str
109
+ )
110
+
111
+ generated_text = llm_chain.run({'original_words': desc, 'num_words': num_words_prompt, 'formality': formality,
112
+ 'emotions': emotions_str, 'translate_to': translate_to_str,
113
+ 'literary_style': literary_style_str}).strip()
114
+
115
+ # replace all newlines with <br> in generated_text
116
+ generated_text = generated_text.replace("\n", "<br>")
117
+
118
+ prompt_plus_generated = "<b>GPT prompt:</b> " + formatted_prompt + "<br/><br/><code>" + generated_text + "</code>"
119
+
120
+ print("\n==== date/time: " + str(datetime.datetime.now() - datetime.timedelta(hours=5)) + " ====")
121
+ print("temperature: ", temperature)
122
+ print("prompt_plus_generated: " + prompt_plus_generated)
123
+
124
+ return prompt_plus_generated
125
+
126
+
127
+ def update_foo(widget, state):
128
+ if widget:
129
+ state = widget
130
+ return state
131
+
132
+
133
+ block = gr.Blocks(css=".gradio-container {background-color: lightgray}")
134
+
135
+ with block:
136
+ openai_api_key_state = gr.State()
137
+ temperature_state = gr.State(TEMPERATURE_DEFAULT)
138
+ llm_chain_state = gr.State()
139
+ num_words_state = gr.State(NUM_WORDS_DEFAULT)
140
+ formality_state = gr.State(FORMALITY_DEFAULT)
141
+ anticipation_level_state = gr.State(EMOTION_DEFAULT)
142
+ joy_level_state = gr.State(EMOTION_DEFAULT)
143
+ trust_level_state = gr.State(EMOTION_DEFAULT)
144
+ fear_level_state = gr.State(EMOTION_DEFAULT)
145
+ surprise_level_state = gr.State(EMOTION_DEFAULT)
146
+ sadness_level_state = gr.State(EMOTION_DEFAULT)
147
+ disgust_level_state = gr.State(EMOTION_DEFAULT)
148
+ anger_level_state = gr.State(EMOTION_DEFAULT)
149
+ translate_to_state = gr.State(TRANSLATE_TO_DEFAULT)
150
+ literary_style_state = gr.State(LITERARY_STYLE_DEFAULT)
151
+
152
+ with gr.Row():
153
+ temperature_slider = gr.Slider(label="GPT Temperature", value=TEMPERATURE_DEFAULT, minimum=0.0, maximum=1.0,
154
+ step=0.1)
155
+ title = gr.Markdown ("""<h3><center>GPT-3.5 Express-inator</center></h3>""")
156
+ openai_api_key_textbox = gr.Textbox(placeholder="Paste your OpenAI API key",
157
+ show_label=False, lines=1, type='password')
158
+
159
+ output = gr.Markdown("")
160
+ with gr.Row():
161
+ request = gr.Textbox(label="Express this: ",
162
+ value="",
163
+ placeholder="Ex: The quick brown fox jumped over the lazy dog.")
164
+
165
+ submit = gr.Button(value="Express", variant="secondary").style(full_width=False)
166
+
167
+ with gr.Row():
168
+ with gr.Column():
169
+ num_words_slider = gr.Slider(label="Max number of words to generate (0 for don't care)",
170
+ value=NUM_WORDS_DEFAULT, minimum=0, maximum=100, step=10)
171
+ num_words_slider.change(update_foo,
172
+ inputs=[num_words_slider, num_words_state],
173
+ outputs=[num_words_state])
174
+
175
+ formality_radio = gr.Radio(label="Formality:", choices=["Casual", "Polite", "Honorific"],
176
+ value=FORMALITY_DEFAULT)
177
+ formality_radio.change(update_foo,
178
+ inputs=[formality_radio, formality_state],
179
+ outputs=[formality_state])
180
+
181
+ translate_to_radio = gr.Radio(label="Translate to:", choices=[
182
+ TRANSLATE_TO_DEFAULT, "Arabic", "British English", "Chinese (Simplified)", "Chinese (Traditional)",
183
+ "Czech", "Danish", "Dutch", "emojis", "English", "Finnish", "French", "Gen Z slang", "German", "Greek",
184
+ "Hebrew", "Hindi", "Hungarian", "Indonesian", "Italian", "Japanese",
185
+ "how the stereotypical Karen would say it",
186
+ "Klingon", "Korean", "Norwegian", "Old English", "Pirate", "Polish", "Portuguese", "Romanian",
187
+ "Russian", "Spanish", "Strange Planet expospeak technical talk", "Swedish", "Thai", "Turkish", "Vietnamese", "Yoda"], value=TRANSLATE_TO_DEFAULT)
188
+
189
+ translate_to_radio.change(update_foo,
190
+ inputs=[translate_to_radio, translate_to_state],
191
+ outputs=[translate_to_state])
192
+
193
+ literary_style_radio = gr.Radio(label="Literary style:", choices=[
194
+ LITERARY_STYLE_DEFAULT, "Poetry", "Haiku", "Limerick", "Joke", "Knock-knock"],
195
+ value=LITERARY_STYLE_DEFAULT)
196
+
197
+ literary_style_radio.change(update_foo,
198
+ inputs=[literary_style_radio, literary_style_state],
199
+ outputs=[literary_style_state])
200
+
201
+ gr.Examples(
202
+ examples=[
203
+ "The quick brown fox jumped over the lazy dog",
204
+ "I want some ice cream",
205
+ "Platypuses are weird",
206
+ ],
207
+ inputs=request
208
+ )
209
+
210
+ with gr.Column():
211
+ with gr.Accordion("Emotions", open=True):
212
+ anticipation_level_radio = gr.Radio(label="Anticipation level:",
213
+ choices=[EMOTION_DEFAULT, "Interest", "Anticipation", "Vigilance"],
214
+ value=EMOTION_DEFAULT)
215
+ anticipation_level_radio.change(update_foo,
216
+ inputs=[anticipation_level_radio, anticipation_level_state],
217
+ outputs=[anticipation_level_state])
218
+
219
+ joy_level_radio = gr.Radio(label="Joy level:",
220
+ choices=[EMOTION_DEFAULT, "Serenity", "Joy", "Ecstasy"],
221
+ value=EMOTION_DEFAULT)
222
+ joy_level_radio.change(update_foo,
223
+ inputs=[joy_level_radio, joy_level_state],
224
+ outputs=[joy_level_state])
225
+
226
+ trust_level_radio = gr.Radio(label="Trust level:",
227
+ choices=[EMOTION_DEFAULT, "Acceptance", "Trust", "Admiration"],
228
+ value=EMOTION_DEFAULT)
229
+ trust_level_radio.change(update_foo,
230
+ inputs=[trust_level_radio, trust_level_state],
231
+ outputs=[trust_level_state])
232
+
233
+ fear_level_radio = gr.Radio(label="Fear level:",
234
+ choices=[EMOTION_DEFAULT, "Apprehension", "Fear", "Terror"],
235
+ value=EMOTION_DEFAULT)
236
+ fear_level_radio.change(update_foo,
237
+ inputs=[fear_level_radio, fear_level_state],
238
+ outputs=[fear_level_state])
239
+
240
+ surprise_level_radio = gr.Radio(label="Surprise level:",
241
+ choices=[EMOTION_DEFAULT, "Distraction", "Surprise", "Amazement"],
242
+ value=EMOTION_DEFAULT)
243
+ surprise_level_radio.change(update_foo,
244
+ inputs=[surprise_level_radio, surprise_level_state],
245
+ outputs=[surprise_level_state])
246
+
247
+ sadness_level_radio = gr.Radio(label="Sadness level:",
248
+ choices=[EMOTION_DEFAULT, "Pensiveness", "Sadness", "Grief"],
249
+ value=EMOTION_DEFAULT)
250
+ sadness_level_radio.change(update_foo,
251
+ inputs=[sadness_level_radio, sadness_level_state],
252
+ outputs=[sadness_level_state])
253
+
254
+ disgust_level_radio = gr.Radio(label="Disgust level:",
255
+ choices=[EMOTION_DEFAULT, "Boredom", "Disgust", "Loathing"],
256
+ value=EMOTION_DEFAULT)
257
+ disgust_level_radio.change(update_foo,
258
+ inputs=[disgust_level_radio, disgust_level_state],
259
+ outputs=[disgust_level_state])
260
+
261
+ anger_level_radio = gr.Radio(label="Anger level:",
262
+ choices=[EMOTION_DEFAULT, "Annoyance", "Anger", "Rage"],
263
+ value=EMOTION_DEFAULT)
264
+ anger_level_radio.change(update_foo,
265
+ inputs=[anger_level_radio, anger_level_state],
266
+ outputs=[anger_level_state])
267
+
268
+ gr.HTML("""
269
+ <center>This app by <a target='_blank' href='https://twitter.com/JavaFXpert'>@JavaFXpert</a> leverages GPT-3.5 for text completion to facilitate expressing yourself.
270
+ The author is not responsible for the content of the generated text.</center>""")
271
+
272
+ gr.HTML("<center>Powered by <a href='https://github.com/hwchase17/langchain'>LangChain 🦜️🔗</a></center>")
273
+
274
+ submit.click(transform_text,
275
+ inputs=[
276
+ request, openai_api_key_state, temperature_state, llm_chain_state, num_words_state,
277
+ formality_state,
278
+ anticipation_level_state, joy_level_state, trust_level_state, fear_level_state,
279
+ surprise_level_state, sadness_level_state, disgust_level_state, anger_level_state,
280
+ translate_to_state, literary_style_state],
281
+ outputs=[output])
282
+
283
+ request.submit(transform_text,
284
+ inputs=[
285
+ request, openai_api_key_state, temperature_state, llm_chain_state, num_words_state,
286
+ formality_state,
287
+ anticipation_level_state, joy_level_state, trust_level_state, fear_level_state,
288
+ surprise_level_state, sadness_level_state, disgust_level_state, anger_level_state,
289
+ translate_to_state, literary_style_state],
290
+ outputs=[output])
291
+
292
+ openai_api_key_textbox.change(set_openai_api_key,
293
+ inputs=[openai_api_key_textbox, openai_api_key_state, temperature_state,
294
+ llm_chain_state],
295
+ outputs=[openai_api_key_state, llm_chain_state])
296
+
297
+ temperature_slider.change(update_foo,
298
+ inputs=[temperature_slider, temperature_state],
299
+ outputs=[temperature_state])
300
+
301
+ block.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ openai
2
+ gradio
3
+ langchain