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() |