Spaces:
Running
Running
File size: 1,764 Bytes
2e0eb40 fe472d7 04b984b cc20725 11eabe8 5c4b237 fe472d7 5c4b237 cc20725 04b984b 11eabe8 04b984b 2e0eb40 fe472d7 11eabe8 04b984b fe472d7 04b984b 11eabe8 fe472d7 2e0eb40 fe472d7 2e0eb40 fe472d7 2e0eb40 |
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 |
import gradio as gr
from datetime import datetime
import random
import uuid
from dataclasses import dataclass
# Shared state to store messages
messages = []
# Dictionary to store user colors
user_colors = {}
@dataclass
class Data:
user_id: str
message: str
timestamp: str
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(input_text, history):
global messages
# Parse the input to get user_id and message
user_id, message = input_text.split("; ")
# 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(Data(user_id=user_id, message=message, timestamp=timestamp))
# Update the chat history
history.append(f"User_{user_id[:4]}: {message} ({timestamp})")
return "", history
def get_updates(history):
global messages
# Check if there are new messages
if len(messages) > len(history):
return [f"User_{msg.user_id[:4]}: {msg.message} ({msg.timestamp})" for msg in messages]
# If no new messages, return the current history
return history
# Create the Gradio interface
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox(label="Type your message here (format: 'id here; text here')")
clear = gr.Button("Clear")
msg.submit(chat, [msg, chatbot], [msg, chatbot])
clear.click(lambda: [], outputs=[chatbot])
# Add an update function that runs every 0.2 seconds
demo.load(get_updates, inputs=chatbot, outputs=chatbot, every=0.2)
# Launch the app
if __name__ == "__main__":
demo.launch()
|