Spaces:
Build error
Build error
# Import necessary libraries | |
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 | |
# Create an empty list to store chat messages | |
messages = [] | |
# Function to add user's text to chat history | |
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) | |
# Function for the bot to respond | |
def bot_respond(chat_history, openai_gpt_key, model_choice): | |
global messages | |
if openai_gpt_key is not "": | |
openai.api_key = openai_gpt_key | |
# Generate response from OpenAI Chat API using the selected model | |
bot_response = openai.ChatCompletion.create( | |
model=model_choice, | |
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] = "" | |
# Yield the chat history with the bot's response character by character | |
for character in bot_text: | |
chat_history[-1][1] += character | |
time.sleep(0.02) | |
yield chat_history | |
# Create a Gradio interface | |
with gr.Blocks() as demo: | |
openai_gpt_key = gr.Textbox(label="OpenAI GPT API Key", value="", placeholder="sk..") | |
model_choice = gr.Dropdown(label="Model Options", choices=['gpt-3.5-turbo', 'gpt-4'],info = "For better results choose GPT4, for faster and cheaper responses, GPT3.5") | |
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) | |
# Handle user input and bot response | |
user_text.submit( | |
add_user_text, [chat_history, user_text], [chat_history, user_text], queue=False).then( | |
bot_respond, [chat_history, openai_gpt_key, model_choice], 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() | |