import gradio as gr from final_funcs import auth_page, sp_state from final_agent import create_agent from messages import instructions, greeting, description, custom_theme, css import os import time from dotenv import load_dotenv load_dotenv() key = os.getenv("OPENAI_API_KEY") start_of_chat_state = gr.State() def add_text(history, text): history = history + [(text, None)] return history, gr.update(value="", interactive=False) def bot(history): user_input = history[-1][0] if sp_state.value is None: response = "I really want to play music for you, but please authenticate your Spotify first." elif start_of_chat_state.value is None or start_of_chat_state.value: start_of_chat_state.value = False response = greeting elif user_input.strip() == '!help': # streaming looks bad response = instructions else: agent_executor = create_agent(key) response = agent_executor(user_input, include_run_info=True) response = response["output"] history[-1][1] = "" for character in response: history[-1][1] += character time.sleep(0.0075) yield history with gr.Blocks() as chat_page: gr.Markdown(description) chatbot = gr.Chatbot([], elem_id="chatbot", height=500, label="Apollo 🎵") with gr.Row(): txt = gr.Textbox( show_label=False, placeholder="What would you like to hear?", container=False ) txt_msg = txt.submit(add_text, [chatbot, txt], [chatbot, txt], queue=False).then( bot, chatbot, chatbot ) txt_msg.then(lambda: gr.update(interactive=True), None, [txt], queue=False) demo = gr.TabbedInterface([auth_page, chat_page], ["Authentication", "Music"], theme="finlaymacklon/boxy_violet", #theme=custom_theme, css=None ) demo.queue() demo.launch()