File size: 1,829 Bytes
5c4b237
fe472d7
04b984b
cc20725
5c4b237
fe472d7
 
5c4b237
cc20725
04b984b
 
 
 
 
 
 
cc20725
fe472d7
 
cc20725
 
 
04b984b
fe472d7
 
04b984b
cc20725
fe472d7
cc20725
 
5c4b237
fe472d7
 
 
 
 
 
 
 
 
 
21f8ab5
 
 
 
 
 
 
fe472d7
21f8ab5
04b984b
fe472d7
 
cc20725
fe472d7
cc20725
fe472d7
 
21f8ab5
16412fc
fe472d7
 
 
21f8ab5
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
import gradio as gr
from datetime import datetime
import random
import uuid

# Shared state to store messages
messages = []

# Dictionary to store user colors
user_colors = {}

def get_user_color(user_id):
    if user_id not in user_colors:
        user_colors[user_id] = f"#{random.randint(0, 0xFFFFFF):06x}"
    return user_colors[user_id]

def chat(message, history, user_id):
    global messages
    
    if not user_id:
        # Generate a new user ID if one doesn't exist
        user_id = str(uuid.uuid4())
    
    # Add the new message to the shared state
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    user_color = get_user_color(user_id)
    messages.append([None, f"<span style='color: {user_color};'>User_{user_id[:4]}</span>: {message}<br><small>{timestamp}</small>"])
    
    # Return the updated chat history and user_id
    return "", messages, user_id

def get_updates(history):
    global messages
    
    # Check if there are new messages
    if len(messages) > len(history):
        return messages
    
    # If no new messages, return the current history
    return history

# Custom CSS to hide the loading animation
custom_css = """
#chatbot .loading {
    display: none !important;
}
"""

# Create the Gradio interface
with gr.Blocks(css=custom_css) as demo:
    chatbot = gr.Chatbot(elem_id="chatbot")
    msg = gr.Textbox(label="Type your message here")
    clear = gr.Button("Clear")
    user_id = gr.State(value='')  # Add a state component to store the user ID

    msg.submit(chat, [msg, chatbot, user_id], [msg, chatbot, user_id])
    clear.click(lambda: [], outputs=[chatbot])
    
    # Add an update function that runs every 0.05 seconds
    demo.load(get_updates, inputs=chatbot, outputs=chatbot, every=0.2)

# Launch the app
if __name__ == "__main__":
    demo.launch()