llama31 / app.py
suprimedev's picture
Create app.py
e7439a7 verified
raw
history blame
2.79 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
import torch
# تنظیمات بهینه‌سازی برای اجرا روی رم 16GB
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
)
# بارگذاری مدل با تنظیمات بهینه‌سازی
model_name = "meta-llama/Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=quantization_config,
device_map="auto"
)
def generate_response(prompt, max_new_tokens=512, temperature=0.7):
"""
تولید پاسخ بر اساس ورودی کاربر
"""
# کدگذاری ورودی کاربر
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# تولید پاسخ
outputs = model.generate(
**inputs,
max_new_tokens=max_new_tokens,
temperature=temperature,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
# تبدیل خروجی به متن
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# حذف prompt از پاسخ
response = response[len(prompt):].strip()
return response
# رابط Gradio
with gr.Blocks(title="چت بات Llama-3.1-8B-Instruct") as demo:
gr.Markdown("""
# چت بات با مدل Llama-3.1-8B-Instruct
این مدل با بهینه‌سازی برای اجرا روی سیستم‌های با رم محدود (16GB) پیاده‌سازی شده است.
""")
with gr.Row():
with gr.Column():
user_input = gr.Textbox(label="پیام شما", lines=5, placeholder="پیام خود را اینجا بنویسید...")
with gr.Accordion("تنظیمات پیشرفته", open=False):
max_tokens = gr.Slider(64, 1024, value=512, step=32, label="حداکثر طول پاسخ")
temperature = gr.Slider(0.1, 1.5, value=0.7, step=0.1, label="دمای پاسخ (خلاقیت)")
submit_btn = gr.Button("ارسال")
with gr.Column():
output_text = gr.Textbox(label="پاسخ مدل", lines=10, interactive=False)
# رویدادها
submit_btn.click(
fn=generate_response,
inputs=[user_input, max_tokens, temperature],
outputs=output_text
)
# امکان ارسال با Enter
user_input.submit(
fn=generate_response,
inputs=[user_input, max_tokens, temperature],
outputs=output_text
)
# اجرای برنامه
if __name__ == "__main__":
demo.launch(share=False)