CoolFace
Apppublic

JavaFXpert/GPT-3.5-Express-inator

sourceHugging Faceapache-2.0updated 4y agoView on Hugging Face
40likes
app.py302 linesDownload Raw Back to root
1import os2import openai3import gradio as gr4from langchain import OpenAI5from langchain.prompts import PromptTemplate6from langchain.chains import LLMChain7import datetime8 9NUM_WORDS_DEFAULT = 010FORMALITY_DEFAULT = "Casual"11TEMPERATURE_DEFAULT = 0.512EMOTION_DEFAULT = "N/A"13TRANSLATE_TO_DEFAULT = "Don't translate"14LITERARY_STYLE_DEFAULT = "Prose"15PROMPT_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 22def 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_key26 27        os.environ["OPENAI_API_KEY"] = api_key28        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_chain33 34 35def 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 case47    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 = temperature58 59    # put all emotions into a list60    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_str109    )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_text116    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_generated125 126 127def update_foo(widget, state):128    if widget:129        state = widget130        return state131 132 133block = gr.Blocks(css=".gradio-container {background-color: lightgray}")134 135with 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=request208            )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 301block.launch()302