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)