import os import openai import gradio as gr course_username = os.environ["COURSE_USERNAME"] george_password = os.environ["george_PWD"] patill_password = os.environ["patill_PWD"] erini_password = os.environ["erini_PWD"] claire_password = os.environ["claire_PWD"] shruteek_password = os.environ["shruteek_PWD"] samuel_password = os.environ["samuel_PWD"] george_api_key = os.environ["george_KEY"] patill_api_key = os.environ["patill_KEY"] erini_api_key = os.environ["erini_KEY"] claire_api_key = os.environ["claire_KEY"] shruteek_api_key = os.environ["shruteek_KEY"] samuel_api_key = os.environ["samuel_KEY"] password_to_api_key_dict = { george_password: george_api_key, patill_password: patill_api_key, erini_password: erini_api_key, claire_password: claire_api_key, shruteek_password: shruteek_api_key, samuel_password: samuel_api_key } class Conversation: def __init__(self): self.assistant_id = "" self.thread_id = "" def create_thread(self): new_thread = client.beta.threads.create() self.thread_id = new_thread.id def respond_to_query(self, query, history): query_message = client.beta.threads.messages.create( thread_id=self.thread_id, role="user", content=query ) streamed_run = client.beta.threads.runs.create( thread_id=self.thread_id, assistant_id=self.assistant_id, stream=True ) current_response = "The Design Thinkerer: " for event in streamed_run: if event.event == "thread.message.delta": for new_text in event.data.delta.content: current_response += new_text.text.value yield current_response current_conversation = Conversation() with gr.Blocks(fill_height=True) as demo: username_textbox = gr.Textbox(label="Username") password_textbox = gr.Textbox(label="Password") login_btn = gr.Button("Login") assistant_id_textbox = gr.Textbox(label="Assistant ID", visible=False) submit_btn = gr.Button("Submit", visible=False) with gr.Column(visible=False) as chat_container: AI_chatbot = gr.ChatInterface(fn=current_conversation.respond_to_query, type="messages") def login_to_webapp(username, password): if (username == course_username) and (password in password_to_api_key_dict.keys()): global client student_api_key = password_to_api_key_dict[password] client = openai.OpenAI(api_key=student_api_key) return [gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=True), gr.update(visible=True)] else: gr.Info('The Username or Password was incorrect.') return [gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)] elements_changed_by_login = [username_textbox, password_textbox, login_btn, assistant_id_textbox, submit_btn] def set_assistant_and_show_chatbot(assistant_id): current_conversation.assistant_id = assistant_id current_conversation.create_thread() return [gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)] elements_changed_for_assistant = [assistant_id_textbox, submit_btn, chat_container] login_btn.click( inputs=[username_textbox, password_textbox], fn=login_to_webapp, outputs=elements_changed_by_login ) submit_btn.click( inputs=[assistant_id_textbox], fn=set_assistant_and_show_chatbot, outputs=elements_changed_for_assistant ) demo.launch()