Assistant-finetuned GLP β a persona-drift detector for Llama-3.1-8B-Instruct
This is the denoiser of the released Generative Latent Prior
generative-latent-prior/glp-llama8b-d6
(a diffusion model over Llama-3.1-8B layer-15 activations), finetuned on ~218,000 layer-15
activations collected from meta-llama/Llama-3.1-8B-Instruct answering 2,200 prompts in its
default assistant persona. The base language model is unchanged; only the ~3.4B-parameter
diffusion denoiser was trained (normalizer frozen).
What it is good for: detecting persona drift
Finetuning shifts the prior's mass onto the assistant region of activation space. As a result it works as a strong per-token persona-drift detector: scoring a single layer-15 token by the ratio of this prior's loss to the base prior's loss separates role-play tokens from default-assistant tokens at AUC β 0.85 (the base prior scores 0.31 β below chance, because generic web text makes role-play look more typical than the assistant).
What it is NOT good for: repairing behaviour
Honest headline from the study this checkpoint comes from: the retrained prior fixes the geometry but not behaviour. Using it to "clean" activations during generation (SDEdit) does not break a role-play persona, does not repair a naturalistic delusion-drift safety failure, and does not reduce persona-jailbreaks (0% reduction, same as the generic prior). The persona is re-created from the conversation on every token, upstream of the single layer this prior edits. Treat it as a monitor / detector, never an actuator. Full evidence, figures, and baselines (capping and steering comparisons) are in the write-up: https://github.com/chainik1125/glp-persona-drift
Load it
# pip install per g-luo/generative_latent_prior (torch 2.7, diffusers 0.36, omegaconf, safetensors)
from glp.denoiser import load_glp
from safetensors.torch import load_file
glp = load_glp("generative-latent-prior/glp-llama8b-d6", device="cuda:0", checkpoint="final")
glp.denoiser.load_state_dict(load_file("assistant_glp.safetensors"))
glp.denoiser.to("cuda:0")
# detector score for a layer-15 activation batch x (n, 4096):
# loss_ft = glp(latents=glp.normalizer.normalize(x[:,None,:]), u=<0..1>,
# loss_kwargs={"reduction":"none"}).loss.mean((1,2))
# compare against the base prior's loss on the same x (ratio isolates persona).
Provenance, license, caveats
- Derived from the released GLP
generative-latent-prior/glp-llama8b-d6and activations ofmeta-llama/Llama-3.1-8B-Instruct. Built with Llama; use is subject to the Llama 3.1 Community License. Respect the upstream GLP repository's terms. - Trained on activations from only 2,200 assistant prompts; it is a research artifact, not a production model. The detector AUC is measured on prompted role-play vs assistant pools; transfer to other drift types is not guaranteed.
- No user data, no sensitive transcripts, and no jailbreak prompts are included in this repo.
Model tree for assisted-diffusion/glp-assistant-detector-llama3.1-8b
Base model
generative-latent-prior/glp-llama8b-d6