Downloads · 30 days
17
52% of all-time downloads
leviathune/persona-0.1
persona-0.1 is a text generation model from leviathune. Use it when you need the model to write or continue text. It is set up for peft. The card lists the license as apache-2.0.
A LoRA adapter for Qwen/Qwen2.5-7B-Instruct that answers everyday practical and moral questions in the deliberative shape of one tradition: the confucian target of the llmpersona project. It is trained only on synthet…
Downloads · 30 days
17
52% of all-time downloads
All-time downloads
33
Public
Repo size
254 MB
Likes
0
Public
Click a slice to open those files.
.safetensors242 MB · 95%
From the Hugging Face model README
A LoRA adapter for Qwen/Qwen2.5-7B-Instruct that answers everyday practical and moral questions in the
deliberative shape of one tradition: the confucian target of the
llm_persona project. It is trained only on synthetic scenario data generated and reviewed by that
project's data pipeline; nothing here is a claim about the tradition itself.
Confucian Plan 1 real run: every completed Confucian pipeline run pooled (four pilots + quick run + SFT-only run 20260908-234232), former eval rows merged into training, nothing held out. 329 rows.
This is an adapter, not a full model. Load the base model and apply the adapter with PEFT:
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base = "Qwen/Qwen2.5-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(base, dtype="bfloat16", device_map="auto")
model = PeftModel.from_pretrained(model, "leviathune/persona-0.1")
tokenizer = AutoTokenizer.from_pretrained("leviathune/persona-0.1")
messages = [{"role": "user", "content": "My brother keeps borrowing money and never pays it back. What should I do?"}]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt", return_dict=True).to(model.device)
out = model.generate(**inputs, max_new_tokens=800, temperature=0.7, top_p=0.95, do_sample=True)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
No system prompt is needed or expected; the adapter was trained and sampled without one. To fold
the adapter into the base weights, call model.merge_and_unload() and save.
Earlier epochs are under checkpoints/ (checkpoints/epoch1, checkpoints/epoch2); load one by passing its subfolder as
subfolder= to PeftModel.from_pretrained.
329 single-turn examples (user question, assistant answer consisting of a short deliberation followed by the answer), of which 296 were used for training and 33 held out as whole scenario families for the loss below. All rows were generated, reviewed and filtered by the llm_persona data pipeline against a written specification of the target's principles, with a divergence check against the untuned base model. The data is not included in this repository.
| method | qlora (nf4-double base, bf16 compute), LoRA on all linear layers |
| rank / alpha / dropout | 16 / 32 / 0.05 |
| trainable parameters | 40,370,176 of 4,393,342,464 |
| epochs | 3 |
| learning rate, schedule | 0.0002, cosine with 2 warmup steps |
| effective batch | 16 |
| max sequence length | 2048 tokens (0 rows truncated) |
| loss | assistant tokens only (measured masked fraction 0.2652) |
| optimizer steps | 57 in 21 minutes |
| hardware | NVIDIA A10G, torch 2.8.0+cu129 |
| final train loss | 1.758 |
Holdout loss per epoch:
| epoch | loss |
|---|---|
| 1 | 1.765 |
| 2 | 1.660 |
| 3 | 1.651 |
provenance/ holds the training manifest, the resolved configuration, the run summary and the
data check report for training run 20260909-173801 of job confucian-v2. Source runs of the data
pipeline: see provenance/resolved_config.yaml.