Spaces:
Runtime error
Runtime error
File size: 7,230 Bytes
8ad15e5 ee345dc 8ad15e5 |
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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
from threading import Thread
# ==========================================
# 1. CẤU HÌNH MODEL
# ==========================================
# Đảm bảo tên này khớp với repo V2 mà bạn vừa đẩy lên
model_id = "EvoNet/EvoNet-3B-V2"
print(f"⏳ Đang tải mô hình {model_id} từ Hugging Face...")
tokenizer = AutoTokenizer.from_pretrained(model_id)
# Load model lên CPU (Vì Space miễn phí không có GPU)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="cpu",
low_cpu_mem_usage=True
)
print("✅ Đã tải xong trí khôn EvoNet V2!")
# ==========================================
# 2. HÀM XỬ LÝ CHAT & STREAMING
# ==========================================
def predict(message, history):
# Nhắc bài cho AI nhớ thân phận của mình
messages = [
{"role": "system", "content": "Bạn là EvoNet, một trợ lý AI thông minh được phát triển bởi Founder Huỳnh Dương Phong. Bạn trả lời lịch sự, thông minh và súc tích."}
]
# Đưa lịch sử trò chuyện vào để AI nhớ ngữ cảnh
for human, assistant in history:
messages.append({"role": "user", "content": human})
messages.append({"role": "assistant", "content": assistant})
# Thêm câu hỏi hiện tại của người dùng
messages.append({"role": "user", "content": message})
# Đóng gói prompt chuẩn format của Qwen
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# Cài đặt Streamer để chữ hiện ra mượt mà từng chữ một
streamer = TextIteratorStreamer(tokenizer, timeout=10., skip_prompt=True, skip_special_tokens=True)
generate_kwargs = dict(
model_inputs,
streamer=streamer,
max_new_tokens=512, # Độ dài tối đa câu trả lời
temperature=0.6, # Độ sáng tạo (0.6 là cân bằng)
top_p=0.9,
repetition_penalty=1.1 # Tránh việc AI nói lặp từ
)
# Chạy thread riêng để không bị đơ giao diện
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start()
# Đẩy từng chữ ra màn hình
partial_message = ""
for new_token in streamer:
partial_message += new_token
yield partial_message
# ==========================================
# 3. THIẾT KẾ GIAO DIỆN UI
# ==========================================
demo = gr.ChatInterface(
fn=predict,
title="✨ EvoNet AI - Phiên Bản V2",
description="Hệ thống AI xử lý Code & Toán học. Được phát triển và tối ưu bởi Founder Huỳnh Dương Phong.",
theme="soft", # Giao diện bo tròn hiện đại
examples=[
"Xin chào, bạn tên là gì và ai đã tạo ra bạn?",
"Hãy viết một hàm Python để kiểm tra số nguyên tố.",
"Giải thích cho tôi định lý Pytago một cách dễ hiểu nhất."
]
)
if __name__ == "__main__":
demo.launch()
import gradio as gr
from llama_cpp import Llama
from huggingface_hub import hf_hub_download
# ==============================================================================
# 1. CẤU HÌNH MODEL (ĐÃ CẬP NHẬT CHO EVONET 3B BETA)
# ==============================================================================
REPO_ID = "EvoNet/EvoNet-3B-v0.1-Beta-GGUF"
FILENAME = "EvoNet-3B-v0.1-Beta-Q4_K_M.gguf" # File nén Q4 nhẹ & mượt
print(f"⏳ Đang tải file {FILENAME} từ kho {REPO_ID}...")
try:
model_path = hf_hub_download(
repo_id=REPO_ID,
filename=FILENAME
)
print("✅ Tải xong! Đường dẫn:", model_path)
except Exception as e:
print(f"❌ Lỗi tải file: {e}")
print("👉 Founder kiểm tra lại tên file hoặc Repo ID nhé!")
raise e
# ==============================================================================
# 2. KHỞI ĐỘNG ĐỘNG CƠ AI
# ==============================================================================
print("⚙️ Đang khởi động EvoNet 3B Engine...")
llm = Llama(
model_path=model_path,
n_ctx=4096, # Tăng lên 4096 tokens (nhớ dai hơn bản cũ)
n_threads=2, # Dùng 2 nhân CPU (Chuẩn Free Tier HF)
n_gpu_layers=0, # Chạy hoàn toàn trên CPU
verbose=False
)
# ==============================================================================
# 3. HÀM XỬ LÝ CHAT (STREAMING)
# ==============================================================================
def chat_stream(message, history):
# Cài đặt danh tính (System Prompt) chuẩn Founder
system_prompt = (
"Bạn là EvoNet, một trợ lý AI thông minh được phát triển bởi Founder Huỳnh Dương Phong. "
"Hãy trả lời ngắn gọn, hữu ích, trung thực và ưu tiên sử dụng Tiếng Việt."
)
# Format chuẩn ChatML (Qwen 2.5 yêu cầu cái này)
prompt = f"<|im_start|>system\n{system_prompt}<|im_end|>\n"
for user_msg, bot_msg in history:
prompt += f"<|im_start|>user\n{user_msg}<|im_end|>\n<|im_start|>assistant\n{bot_msg}<|im_end|>\n"
prompt += f"<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n"
# Gọi Model chạy
stream = llm(
prompt,
max_tokens=1024, # Cho phép trả lời dài hơn (Model 3B viết code dài được)
stop=["<|im_end|>"], # Dấu hiệu dừng
echo=False,
stream=True, # Hiệu ứng gõ chữ
temperature=0.7, # Độ sáng tạo vừa phải
top_p=0.9
)
partial_message = ""
for output in stream:
token = output['choices'][0]['text']
partial_message += token
yield partial_message
# ==============================================================================
# 4. GIAO DIỆN CHATBOT (GRADIO)
# ==============================================================================
custom_css = """
#component-0 {max-width: 800px; margin: auto;}
.gradio-container {background-color: #f9f9f9;}
"""
demo = gr.ChatInterface(
chat_stream,
title="🔥 EvoNet-3B Beta (GGUF Version)",
description=f"""
<div style="text-align: center;">
<h3>Sản phẩm AI của Founder Huỳnh Dương Phong</h3>
<p>Model: <b>EvoNet-3B-v0.1-Beta</b> | Format: <b>GGUF Q4_K_M</b></p>
<p>⚡ Chạy trực tiếp trên CPU Server (Zero-GPU)</p>
</div>
""",
examples=[
["EvoNet là gì và ai tạo ra bạn?"],
["Viết một hàm Python kiểm tra số nguyên tố và giải thích."],
["Giải thích 'Machine Learning' cho học sinh lớp 5."],
["Làm một bài thơ về lập trình viên."],
],
cache_examples=False,
css=custom_css,
theme="soft" # Giao diện mềm mại, hiện đại
)
if __name__ == "__main__":
demo.launch() |