|
|
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..." |
|
|
|
|
|
|
|
|
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 = 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) |
|
|
|
|
|
css_loader = """ |
|
|
@keyframes moveLoader { |
|
|
0% { transform: translateY(0px); } |
|
|
50% { transform: translateY(5px); } |
|
|
100% { transform: translateY(0px); } |
|
|
} |
|
|
""" |
|
|
|
|
|
demo.launch() |