Views
No views yet
Qwen/Qwen3-1.7B into a two-label sequence classifier for a narrow guardrail task:ACCEPT (0): one self-contained ratio, unit-rate, or percentage calculation.REJECT (1): anything outside that scope, including prompt injection, wrappers, multiple questions, and requests for extra output.| Metric | Result |
|---|---|
| Accuracy | 99.90% |
| Macro F1 | 0.9990 |
| Held-out attack success rate | 0.0% |
| False-reject rate | 0.12% (6 items) |
1import torch
2from peft import PeftModel
3from transformers import AutoModelForSequenceClassification, AutoTokenizer
4
5adapter_id = "nishegde/ratio-filter-qwen3-1.7b-lora"
6base_id = "Qwen/Qwen3-1.7B"
7id2label = {0: "ACCEPT", 1: "REJECT"}
8label2id = {label: idx for idx, label in id2label.items()}
9
10tokenizer = AutoTokenizer.from_pretrained(adapter_id)
11if tokenizer.pad_token is None:
12 tokenizer.pad_token = tokenizer.eos_token
13
14base = AutoModelForSequenceClassification.from_pretrained(
15 base_id,
16 revision="70d244cc86ccca08cf5af4e1e306ecf908b1ad5e",
17 num_labels=2,
18 id2label=id2label,
19 label2id=label2id,
20 torch_dtype=torch.float32,
21)
22base.config.pad_token_id = tokenizer.pad_token_id
23model = PeftModel.from_pretrained(base, adapter_id).eval()
24
25text = "A car travels 300 miles on 10 gallons. What is its mileage?"
26inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=1024)
27with torch.inference_mode():
28 probabilities = torch.softmax(model(**inputs).logits[0].float(), dim=-1)
29
30print(id2label[int(probabilities.argmax())], probabilities.tolist())