gpt4-sandbox / app.py
baruga's picture
Add env variables
b3036ac
raw
history blame
6.13 kB
import gradio as gr
import openai
import os
import requests
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD")
openai.api_key = OPENAI_API_KEY
default_system_message = {"role": "system", "content": "You are a brilliant, helpful assistant, always providing answers to the best of your knowledge. If you are unsure of the answer, you indicate it to the user. Currently, you don't have access to the internet."}
def get_completion(model, user_message, message_history, chatlog_history, temperature, maximum_length, top_p, frequency_penalty, presence_penalty):
new_history_row = {"role": "user", "content": user_message}
updated_message_history = message_history + [new_history_row]
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {openai.api_key}",
}
payload = {
"model":model,
"messages":updated_message_history,
"temperature":temperature,
"max_tokens":maximum_length,
"top_p":top_p,
"frequency_penalty":frequency_penalty,
"presence_penalty":presence_penalty,
}
completion = requests.post(
"https://api.openai.com/v1/chat/completions",
headers=headers,
json=payload,
)
completion = completion.json()
# completion = openai.ChatCompletion.create(
# model=model,
# messages=updated_message_history,
# temperature=temperature,
# max_tokens=maximum_length,
# top_p=top_p,
# frequency_penalty=frequency_penalty,
# presence_penalty=presence_penalty,
# )
assistant_message = completion["choices"][0]["message"]["content"]
new_history_row = {"role": "assistant", "content": assistant_message}
updated_message_history = updated_message_history + [new_history_row]
updated_chatlog_history = chatlog_history + [(user_message, assistant_message)]
token_count = completion["usage"]["total_tokens"]
return "", updated_message_history, updated_chatlog_history, updated_chatlog_history, token_count
def retry_completion(model, message_history, chatlog_history, temperature, maximum_length, top_p, frequency_penalty, presence_penalty):
# get latest user message
user_message = chatlog_history[-1][0]
# delete latest entries from chatlog history
updated_chatlog_history = chatlog_history[:-1]
# delete latest assistant message from message_history
updated_message_history = message_history[:-1]
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {openai.api_key}",
}
payload = {
"model":model,
"messages":updated_message_history,
"temperature":temperature,
"max_tokens":maximum_length,
"top_p":top_p,
"frequency_penalty":frequency_penalty,
"presence_penalty":presence_penalty,
}
completion = requests.post(
"https://api.openai.com/v1/chat/completions",
headers=headers,
json=payload,
)
completion = completion.json()
# completion = openai.ChatCompletion.create(
# model=model,
# messages=updated_message_history,
# temperature=temperature,
# max_tokens=maximum_length,
# top_p=top_p,
# frequency_penalty=frequency_penalty,
# presence_penalty=presence_penalty,
# )
assistant_message = completion["choices"][0]["message"]["content"]
new_history_row = {"role": "assistant", "content": assistant_message}
updated_message_history = updated_message_history + [new_history_row]
updated_chatlog_history = updated_chatlog_history + [(user_message, assistant_message)]
token_count = completion["usage"]["total_tokens"]
return "", updated_message_history, updated_chatlog_history, updated_chatlog_history, token_count
def reset_chat():
return "", [default_system_message], [], [], 0
theme = gr.themes.Monochrome()
with gr.Blocks(theme=theme) as app:
message_history = gr.State([default_system_message])
chatlog_history = gr.State([])
with gr.Row():
with gr.Column(scale=4):
chatbot = gr.Chatbot(label="Chat").style(height=600)
with gr.Column(scale=1):
# model = gr.Textbox(lines=3, value="You are a brilliant, helpful assistant, always providing answers to the best of your knowledge. If you are unsure of the answer, you indicate it to the user.", interactive=True, label="System")
model = gr.Dropdown(choices=["gpt-3.5-turbo", "gpt-4", "gpt-4-32k"], value="gpt-3.5-turbo", interactive=True, label="Model")
temperature = gr.Slider(minimum=0, maximum=1, step=0.05, value=0.5, interactive=True, label="Temperature")
maximum_length = gr.Slider(minimum=0, maximum=2048, step=64, value=256, interactive=True, label="Maximum length")
top_p = gr.Slider(minimum=0, maximum=1, step=0.01, value=1, interactive=True, label="Top P")
frequency_penalty = gr.Slider(minimum=0, maximum=2, step=0.01, value=0, interactive=True, label="Frequency penalty")
presence_penalty = gr.Slider(minimum=0, maximum=2, step=0.01, value=0, interactive=True, label="Presence penalty")
token_count = gr.Number(interactive=False, label="Token Count")
with gr.Row():
user_message = gr.Textbox(label="Message")
with gr.Row():
reset_button = gr.Button("Reset Chat")
retry_button = gr.Button("Retry")
user_message.submit(get_completion, inputs=[model, user_message, message_history, chatlog_history, temperature, maximum_length, top_p, frequency_penalty, presence_penalty], outputs=[user_message, message_history, chatlog_history, chatbot, token_count])
retry_button.click(retry_completion, inputs=[model, message_history, chatlog_history, temperature, maximum_length, top_p, frequency_penalty, presence_penalty], outputs=[user_message, message_history, chatlog_history, chatbot, token_count])
reset_button.click(reset_chat, inputs=[], outputs=[user_message, message_history, chatlog_history, chatbot, token_count])
app.launch(auth=("admin", ADMIN_PASSWORD))