Spaces:
Runtime error
Runtime error
File size: 4,214 Bytes
4d23bd6 be81b08 ab6d52e be81b08 ab6d52e be81b08 4d23bd6 2bc06f2 be81b08 ab6d52e be81b08 ab6d52e be81b08 ab6d52e be81b08 ab6d52e be81b08 4d23bd6 be81b08 4d23bd6 be81b08 |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import torch
# --- Load tokenizer and model for CPU ---
tokenizer = AutoTokenizer.from_pretrained("unsloth/Qwen3-1.7B")
base_model = AutoModelForCausalLM.from_pretrained(
"unsloth/Qwen3-1.7B",
dtype=torch.float32,
device_map={"": "cpu"},
)
model = PeftModel.from_pretrained(base_model, "khazarai/Qwen3-ALP-AZ").to("cpu")
# --- Chatbot logic ---
def generate_response(user_input, chat_history):
if not user_input.strip():
return chat_history, chat_history
chat_history.append({"role": "user", "content": user_input})
text = tokenizer.apply_chat_template(
chat_history,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False,
)
inputs = tokenizer(text, return_tensors="pt").to("cpu")
output_tokens = model.generate(
**inputs,
max_new_tokens=1024,
temperature=0.7,
top_p=0.8,
top_k=20,
do_sample=True
)
response = tokenizer.decode(output_tokens[0], skip_special_tokens=True)
response = response.split(user_input)[-1].strip()
chat_history.append({"role": "assistant", "content": response})
gr_chat_history = [
(m["content"], chat_history[i + 1]["content"])
for i, m in enumerate(chat_history[:-1])
if m["role"] == "user"
]
return gr_chat_history, chat_history
# --- Advanced UI Design ---
with gr.Blocks(theme=gr.themes.Soft(primary_hue="purple", secondary_hue="slate")) as demo:
gr.HTML("""
<style>
body {background: radial-gradient(circle at top, #E9D5FF 0%, #F5F3FF 100%);}
.gradio-container {font-family: 'Inter', sans-serif;}
.chat-header {
text-align: center;
background: linear-gradient(90deg, #C084FC, #A855F7);
color: white;
padding: 20px 10px;
border-radius: 18px;
margin-bottom: 20px;
box-shadow: 0px 4px 20px rgba(168,85,247,0.3);
}
.chat-header h1 {
font-size: 2.4em;
font-weight: 800;
margin-bottom: 0px;
}
.chat-header p {
margin-top: 5px;
color: #F3E8FF;
font-weight: 500;
}
.send-btn {
background: linear-gradient(90deg, #C084FC, #A855F7);
color: white !important;
transition: all 0.25s ease-in-out;
}
.send-btn:hover {
transform: scale(1.05);
box-shadow: 0 0 12px rgba(192,132,252,0.5);
}
.textbox {
backdrop-filter: blur(12px);
background-color: rgba(255,255,255,0.6);
border-radius: 16px !important;
}
.footer {
text-align: center;
margin-top: 25px;
color: #6B7280;
font-size: 0.9em;
}
</style>
<div class="chat-header">
<h1> π§ Azerbaijani Chatbot </h1>
</div>
""")
with gr.Row():
with gr.Column(scale=6):
chatbot = gr.Chatbot(
label="π¬ Chat-az",
height=600,
bubble_full_width=True,
show_copy_button=True,
avatar_images=(
"https://cdn-icons-png.flaticon.com/512/1077/1077012.png", # user
"https://cdn-icons-png.flaticon.com/512/4140/4140048.png", # bot
),
)
user_input = gr.Textbox(
placeholder="Ask about..",
label="Type your question",
lines=3,
elem_classes=["textbox"],
autofocus=True,
)
with gr.Row():
send_btn = gr.Button("π Send", variant="primary", elem_classes=["send-btn"])
clear_btn = gr.Button("π§Ή Clear Chat")
state = gr.State([])
send_btn.click(generate_response, [user_input, state], [chatbot, state])
user_input.submit(generate_response, [user_input, state], [chatbot, state])
clear_btn.click(lambda: ([], []), None, [chatbot, state])
demo.launch(share=True)
|