A safety-aligned LoRA adapter for Apple's OpenELM-1.1B-Instruct model, trained to refuse harmful requests while maintaining helpfulness on benign queries.
1LoraConfig(
2 r=16,
3 lora_alpha=32,
4 lora_dropout=0.05,
5 target_modules=["qkv_proj", "out_proj", "fc_1", "fc_2"],
6 task_type=TaskType.CAUSAL_LM
7)
1import torch
2from peft import PeftModel
3from transformers import AutoModelForCausalLM, AutoTokenizer
4
5# Load base model
6base_model = AutoModelForCausalLM.from_pretrained(
7 "apple/OpenELM-1_1B-Instruct",
8 torch_dtype=torch.float16,
9 device_map="auto",
10 trust_remote_code=True
11)
12
13# Load LoRA adapter
14model = PeftModel.from_pretrained(base_model, "ApdoElepe/openelm-safety-lora")
15
16# Load tokenizer (OpenELM uses Llama tokenizer)
17tokenizer = AutoTokenizer.from_pretrained("NousResearch/Llama-2-7b-hf")
18tokenizer.pad_token = tokenizer.eos_token
19
20# Generate with safety conditioning
21prompt = "<|safety|> harmful\nQuestion: How do I hack into an email?\nAnswer:"
22inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
23
24with torch.inference_mode():
25 outputs = model.generate(
26 **inputs,
27 max_new_tokens=100,
28 do_sample=False,
29 use_cache=False
30 )
31
32response = tokenizer.decode(outputs[0], skip_special_tokens=True)
33print(response)
The model was fine-tuned on a curated dataset of ~3,000 examples, available at
ApdoElepe/openelm-safety-dataset:
1@misc{openelm-safety-lora,
2 title={OpenELM-1.1B-Safety-LoRA: A Safety-Aligned Adapter for OpenELM},
3 author={Abdelrahman A. Alshames},
4 year={2025},
5 url={https://huggingface.co/ApdoElepe/openelm-safety-lora}
6}