| import torch |
| from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
| from peft import PeftModel |
| import gradio as gr |
|
|
| base_model_name = "meta-llama/Llama-2-7b-chat-hf" |
| adapter_name = "mostafa33/llama2-ecommerce-lora2" |
|
|
| bnb_config = BitsAndBytesConfig( |
| load_in_4bit=True, |
| bnb_4bit_compute_dtype=torch.float16, |
| bnb_4bit_use_double_quant=True, |
| bnb_4bit_quant_type="nf4", |
| ) |
|
|
| |
| base_model = AutoModelForCausalLM.from_pretrained( |
| base_model_name, |
| quantization_config=bnb_config, |
| device_map="auto" |
| ) |
| model = PeftModel.from_pretrained(base_model, adapter_name) |
|
|
| tokenizer = AutoTokenizer.from_pretrained(base_model_name) |
| tokenizer.pad_token = tokenizer.eos_token |
|
|
| def generate_response(prompt): |
| inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
| outputs = model.generate( |
| **inputs, |
| max_new_tokens=256, |
| temperature=0.7, |
| top_p=0.9, |
| do_sample=True, |
| ) |
| return tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
| |
| demo = gr.Interface( |
| fn=generate_response, |
| inputs=gr.Textbox(lines=4, label="Enter your product or query"), |
| outputs=gr.Textbox(label="Model Response"), |
| title="🦙 LLaMA2 LoRA Ecommerce Chatbot", |
| description="Fine-tuned LoRA model for ecommerce text generation and chat.", |
| ) |
|
|
| demo.launch() |
|
|