Views
No views yet
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3from peft import PeftModel
4
5model_name = "Qwen/Qwen2.5-1.5B-Instruct"
6adapter = "beme08/qwen2.5-1.5b-riddle-lora"
7
8tokenizer = AutoTokenizer.from_pretrained(model_name)
9if tokenizer.pad_token is None:
10 tokenizer.pad_token = tokenizer.eos_token
11
12model = AutoModelForCausalLM.from_pretrained(
13 model_name, torch_dtype=torch.float32, trust_remote_code=True
14).to("cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu")
15
16model = PeftModel.from_pretrained(model, adapter)
17
18def solve(riddle):
19 messages = [
20 {"role": "system", "content": "Solve the riddle. Respond with only the answer and no explanation."},
21 {"role": "user", "content": riddle},
22 ]
23 prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
24 inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
25 out = model.generate(**inputs, max_new_tokens=60, do_sample=False, pad_token_id=tokenizer.eos_token_id)
26 return tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True).strip()
27
28print(solve("What gets wetter the more it dries?"))
29# → "A towel"5b05f514e666c2dd as the diffusion study). Exact match uses canonicalized answers (lowercased, punctuation stripped, deduplicated tokens).| Condition | EM | Correct |
|---|---|---|
| Diffusion Phase 3 (8M params) | 47.0% | 31/66 |
| Qwen2.5-1.5B zero-shot | 12.1% | 8/66 |
| Qwen2.5-1.5B five-shot | 31.8% | 21/66 |
| Qwen2.5-1.5B + LoRA (177 riddles) | 57.6% | 38/66 |
| Qwen2.5-1.5B + LoRA (1.2K mixed riddles) | 63.6% | 42/66 |
q_proj, k_proj, v_proj, o_proj1pip install "riddle-diffusion[lora]"
2riddle-solve --model diffusion "what gets wetter as it dries"
3riddle-solve --model qwen-lora "what gets wetter as it dries"