from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfigfrom peft import PeftModelimport torch base_model = "Qwen/Qwen2.5-7B-Instruct"adapter = "Kurapika993/qwen2.5-7b-qlora-no-robots" bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True,) tokenizer = AutoTokenizer.from_pretrained(adapter) model = AutoModelForCausalLM.from_pretrained( base_model, quantization_config=bnb_config, device_map="auto", trust_remote_code=True,) model = PeftModel.from_pretrained(model, adapter)model.eval() def generate_response(model, tokenizer, user_prompt, max_new_tokens=250): messages = [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": user_prompt } ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) inputs = tokenizer( text, return_tensors="pt" ).to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=max_new_tokens, do_sample=True, temperature=0.7, top_p=0.9, repetition_penalty=1.05, pad_token_id=tokenizer.eos_token_id, ) generated_tokens = outputs[0][inputs["input_ids"].shape[-1]:] response = tokenizer.decode(generated_tokens, skip_special_tokens=True) return response.strip() prompt = "Explain instruction tuning to a beginner using a simple analogy." response = generate_response( model, tokenizer, prompt, max_new_tokens=250) print(response