File size: 3,717 Bytes
8c8ada2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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()