Spaces:
Sleeping
Sleeping
File size: 2,502 Bytes
7fe0df9 1dacd0d 7fe0df9 4fe7f43 7fe0df9 3e5f6ae 4fe7f43 3e5f6ae 7fe0df9 4fe7f43 90486e8 7fe0df9 4fe7f43 7fe0df9 3e5f6ae 4fe7f43 7fe0df9 3e5f6ae 7fe0df9 3e5f6ae 7fe0df9 7740cf7 7fe0df9 3e5f6ae 7fe0df9 3e5f6ae f4821ef 7fe0df9 90486e8 4fe7f43 3e5f6ae 7fe0df9 c263170 90486e8 7740cf7 7fe0df9 7740cf7 c263170 7fe0df9 |
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 |
# app.py
import torch
import gradio as gr
from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer
# 1️⃣ Cấu hình và load model + tokenizer
model_path = "vinai/PhoGPT-4B-Chat"
config = AutoConfig.from_pretrained(model_path, trust_remote_code=True)
config.init_device = "cpu"
model = AutoModelForCausalLM.from_pretrained("vinai/PhoGPT-4B-Chat", trust_remote_code=True)
model.eval()
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
def respond(message, history: list[tuple[str, str]], system_message, max_tokens, temperature, top_p):
# 2.1 — Gom system message và history vào messages list
messages = [{"role": "system", "content": system_message}]
for u, b in history:
if u:
messages.append({"role": "user", "content": u})
if b:
messages.append({"role": "assistant", "content": b})
messages.append({"role": "user", "content": message})
# 2.2 — Tạo prompt chuẩn
input_prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# 2.3 — Tokenize và đưa lên device
# inputs = tokenizer(input_prompt, return_tensors="pt")
input_ids = tokenizer(input_prompt, return_tensors="pt")
# inputs = {k: v.to(model.device) for k, v in inputs.items()}
# 2.4 — Sinh text
outputs = model.generate(
inputs=input_ids["input_ids"],
max_new_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
do_sample=True,
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.pad_token_id,
)
print('!!!! OUTPUTS: ',outputs)
# 2.5 — Decode và tách phần assistant trả lời
response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
response = response.split("### Trả lời:")[1]
yield response
# 2.6 — Cập nhật history và trả về
# history.append((message, response))
# return history
# 3️⃣ Giao diện Gradio
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox("Bạn là một chatbot tiếng Việt thân thiện.", label="System message"),
gr.Slider(1, 2048, value=512, step=1, label="Max new tokens"),
gr.Slider(0.1, 4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
],
)
if __name__ == "__main__":
demo.launch()
|