File size: 1,515 Bytes
623519a
 
fddc5fe
18dda04
fddc5fe
18dda04
623519a
18dda04
 
 
23af0ed
18dda04
 
 
 
 
fddc5fe
18dda04
 
e33aa88
623519a
 
18dda04
 
 
 
 
 
 
 
 
 
 
 
 
623519a
 
 
 
 
18dda04
e69bdf3
18dda04
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
import os
import gradio as gr
from huggingface_hub import InferenceClient
import time

def respond(message, history):
    client = InferenceClient(token=os.environ["HF_TOKEN"], model="openai/gpt-oss-20b")
    
    system_message = "You are BitAI (V1), a friendly chatbot..."
    messages = [{"role":"system","content":system_message}]
    messages.extend(history)
    messages.append({"role":"user","content":message})
    
    yield "⏳ BitAI is typing..."  # aqui mostra o loader
    
    # Simulando streaming real
    response = ""
    for m in client.chat_completion(messages, stream=True):
        token = m.choices[0].delta.content if m.choices else ""
        response += token
        yield response

with gr.Blocks() as demo:
    with gr.Column():
        gr.HTML("<h2 style='text-align:center; color:white'>BitAI</h2>")
        chatbot = gr.ChatInterface(respond, type="messages")
        
        # Loader fora do chat
        loader = gr.HTML("<div style='text-align:center; margin-top:10px;'>"
                         "<div style='width:20px; height:20px; border-radius:50%; "
                         "background:linear-gradient(45deg,#ff6,#f06); animation:moveLoader 1s infinite alternate;'></div>"
                         "</div>")
        demo.load(lambda: None, [], loader)  # placeholder pra ativar animação

css_loader = """
@keyframes moveLoader {
    0% { transform: translateY(0px); }
    50% { transform: translateY(5px); }
    100% { transform: translateY(0px); }
}
"""

demo.launch()