Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from completion_tools import OpenAITools | |
from contexts import store_types, pizza_shop_context | |
from email_sender import send_email | |
from dotenv import load_dotenv | |
load_dotenv() | |
tools = OpenAITools() | |
interac = bool(int(os.environ.get("INTERACTIVE"))) | |
with gr.Blocks() as demo: | |
appTitle = gr.Label("GPT Order Bot", color="#6EACDA") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
apikey = gr.Textbox(label="OpenAI API key", placeholder="Input your OpenAI API key", type="password") | |
gr.Markdown("Get your OpenAI API key [here](https://platform.openai.com/api-keys) you will need to create an OpeanAI account if you don't have") | |
model = gr.Dropdown(label="Model", value="gpt-3.5-turbo", choices=["gpt-3.5-turbo", "gpt-4-turbo", "gpt-4o"]) | |
context = gr.Dropdown(label="Store type", value=store_types[0], choices=store_types) | |
label = gr.Label("Set your Order Bot") | |
gr.Markdown("If you want to send confirmation email you must run it locally [GitHub repo](https://github.com/jorge-armando-navarro-flores/GPT_order_bot)") | |
email = gr.Textbox(label="Email", placeholder="Input your Email", interactive=interac) | |
print(type(interac)) | |
send = gr.Button("Send Confirmation Email", interactive=interac) | |
with gr.Column(scale=3): | |
chatbot = gr.Chatbot(pizza_shop_context, type="messages") | |
msg = gr.Textbox(label="Press Enter to submit your meassage") | |
clear = gr.ClearButton([msg, chatbot]) | |
def respond(message, chat_history): | |
try: | |
chat_history.append({'role':'user', 'content': message}) | |
bot_message = tools.get_completion_from_messages(chat_history) if chat_history else tools.get_completion(message) | |
chat_history.append({'role':'assistant', 'content':bot_message}) | |
return "", chat_history, "Your order bot is working" | |
except: | |
return "", pizza_shop_context, "There is somenthing wrong with your Open AI API key" | |
apikey.input(tools.set_api_key, inputs=[apikey]) | |
model.input(tools.set_model, inputs=[model]) | |
context.input(tools.set_context, inputs=[context], outputs=[chatbot, msg, label]) | |
msg.submit(respond, [msg, chatbot], [msg, chatbot, label]) | |
send.click(send_email, inputs=[chatbot, email, apikey], outputs=[label]) | |
demo.launch(share=True) | |