import os import time import openai from dotenv import load_dotenv load_dotenv() openai.api_key = os.getenv("OPENAI_API_KEY") import gradio as gr messages = [] def add_user_text(chat_history, user_text): print('user_text_from_typing: ', user_text) global messages messages += [{"role":'user', 'content': user_text}] chat_history = chat_history + [(user_text, None)] return chat_history, gr.update(value="", interactive=False) def bot_respond(chat_history, openai_gpt_key): global messages if openai_gpt_key is not "": openai.api_key = openai_gpt_key bot_response = openai.ChatCompletion.create( model = 'gpt-3.5-turbo', messages = messages, ) bot_text = bot_response["choices"][0]["message"]["content"] print("bot_text: ",bot_text) messages = messages + [{"role":'assistant', 'content': bot_text}] print(chat_history) chat_history[-1][1] = "" for character in bot_text: chat_history[-1][1] += character time.sleep(0.02) yield chat_history with gr.Blocks() as demo: # radio = gr.Radio( # value='gpt-3.5-turbo', # choices=['gpt-3.5-turbo','gpt-4'], # label='Model Options') openai_gpt_key = gr.Textbox(label="OpenAI GPT API Key", value="", placeholder="sk..", info = "If Error raised, you have to provide your own GPT keys for this app to function properly",) clear_btn = gr.Button("Clear for Restart") chat_history = gr.Chatbot([], elem_id="chat_history").style(height=500) with gr.Box(): user_text = gr.Textbox( show_label=False, placeholder="Enter text and press enter", ).style(container=False) user_text.submit( add_user_text, [chat_history, user_text], [chat_history, user_text], queue=False).then( bot_respond, [chat_history, openai_gpt_key], chat_history).then( lambda: gr.update(interactive=True), None, [user_text], queue=False) clear_btn.click(lambda: None, None, chat_history, queue=False) if __name__ == "__main__": demo.queue() demo.launch()