import os import openai import gradio as gr from langchain import OpenAI from langchain.prompts import PromptTemplate from langchain.chains import LLMChain import datetime # Console to variable from io import StringIO import sys NUM_WORDS_DEFAULT = 0 FORMALITY_DEFAULT = "Casual" TEMPERATURE_DEFAULT = 0.5 EMOTION_DEFAULT = "N/A" PROMPT_TEMPLATE = PromptTemplate( input_variables=["original_words", "num_words", "formality", "emotions"], template="Restate {num_words} in a {formality} manner, " "{emotions} the following: \n{original_words}\n", ) def set_openai_api_key(api_key, openai_api_key, temperature, llm_chain): if api_key: print("temperature: ", temperature) openai_api_key = api_key os.environ["OPENAI_API_KEY"] = api_key llm = OpenAI(model_name='text-davinci-003', temperature=temperature, max_tokens=512) os.environ["OPENAI_API_KEY"] = "" llm_chain = LLMChain(llm=llm, prompt=PROMPT_TEMPLATE, verbose=True) return openai_api_key, llm_chain def desc2sheet(desc, openai_api_key, temperature, llm_chain, num_words, formality, anticipation_level, joy_level, trust_level, fear_level, surprise_level, sadness_level, disgust_level, anger_level): if not openai_api_key or openai_api_key == "": return "
Please paste your OpenAI API key (see https://beta.openai.com)" num_words_prompt = "" if num_words and int(num_words) != 0: num_words_prompt = "using up to " + str(num_words) + " words, " # Change some arguments to the lower case formality = formality.lower() anticipation_level = anticipation_level.lower() joy_level = joy_level.lower() trust_level = trust_level.lower() fear_level = fear_level.lower() surprise_level = surprise_level.lower() sadness_level = sadness_level.lower() disgust_level = disgust_level.lower() anger_level = anger_level.lower() llm_chain.llm.temperature = temperature print("llm_chain.llm.temperature: ", llm_chain.llm.temperature) # put all emotions into a list emotions = [] if anticipation_level != "n/a": emotions.append(anticipation_level) if joy_level != "n/a": emotions.append(joy_level) if trust_level != "n/a": emotions.append(trust_level) if fear_level != "n/a": emotions.append(fear_level) if surprise_level != "n/a": emotions.append(surprise_level) if sadness_level != "n/a": emotions.append(sadness_level) if disgust_level != "n/a": emotions.append(disgust_level) if anger_level != "n/a": emotions.append(anger_level) emotions_str = "" # If there are any emotions, join the emotions list into a string that begins with "Emotions: ", with the word "and" before the last emotion if len(emotions) > 0: if len(emotions) == 1: emotions_str = "with emotion of " + emotions[0] else: emotions_str = "with emotions of " + ", ".join(emotions[:-1]) + " and " + emotions[-1] formatted_prompt = PROMPT_TEMPLATE.format( original_words=desc, num_words=num_words_prompt, formality=formality, emotions=emotions_str, ) generated_text = llm_chain.run({'original_words': desc, 'num_words': num_words_prompt, 'formality': formality, 'emotions': emotions_str}) prompt_plus_generated = "#### GPT prompt:\n" + formatted_prompt + "#### Generated text:\n" + generated_text return prompt_plus_generated def update_temperature(temp_slider, temp_state): if temp_slider: temp_state = temp_slider return temp_state def update_num_words(slider, state): if slider: state = slider return state def update_formality(radio, state): if radio: state = radio return state def update_foo(widget, state): if widget: state = widget return state block = gr.Blocks(css=".gradio-container {background-color: lightgray}") with block: openai_api_key_state = gr.State() temperature_state = gr.State(TEMPERATURE_DEFAULT) llm_chain_state = gr.State() num_words_state = gr.State(NUM_WORDS_DEFAULT) formality_state = gr.State(FORMALITY_DEFAULT) anticipation_level_state = gr.State(EMOTION_DEFAULT) joy_level_state = gr.State(EMOTION_DEFAULT) trust_level_state = gr.State(EMOTION_DEFAULT) fear_level_state = gr.State(EMOTION_DEFAULT) surprise_level_state = gr.State(EMOTION_DEFAULT) sadness_level_state = gr.State(EMOTION_DEFAULT) disgust_level_state = gr.State(EMOTION_DEFAULT) anger_level_state = gr.State(EMOTION_DEFAULT) with gr.Row(): temperature_slider = gr.Slider(label="GPT Temperature", value=TEMPERATURE_DEFAULT, minimum=0.0, maximum=1.0, step=0.1) title = gr.Markdown("""