PSA multitask reader, Qwen3-0.6B

Released by Silicon Psyche Labs. PSA reads a language model's behaviour from its output alone, turns it into numbers mapped to the research literature, and then tunes the model to correct what drifted. This model is one of those pieces.

Status: In production. This is the reader that serves PSA's posture readings. The user-suicidality class was removed from the product on 2026-08-19; this version is trained without it.

What it reads. Seven readings from one fine-tuned backbone, one linear head per reading on the hidden state of the last real token. Each head reads one turn: the user's message (C0, IRS) or the model's reply (C1 to C4, CA). Run the backbone once per turn and apply that turn's heads.

Results (held-out set, 5 languages: EN, IT, FR, ES, DE)

head reads turn macro recall accuracy
C0 (input pressure) user 0.942 0.951
C1 (adversarial stress) response 0.863 0.891
C2 (sycophancy) response 0.943 0.921
C3 (hallucination risk) response 0.925 0.925
C4 (persuasion density) response 0.908 0.948
CA (inter-agent pressure) response 0.911 0.920
IRS (user-turn risk reading (4 classes: neutro, dissociation, grandiosity, acute)) user 0.912 0.973

The heads are named c0, c1, c2, c3, c4, ca, irs in heads.pt; the posture heads output [absent, present], irs outputs [neutro, dissociation, grandiosity, acute].

How to use

import torch
from huggingface_hub import hf_hub_download
from transformers import AutoModel, AutoTokenizer

repo = "SiliconPsycheLabs/psa-multitask-reader-qwen3-0_6b-irs4nosuic"
tok = AutoTokenizer.from_pretrained(repo)
backbone = AutoModel.from_pretrained(repo).eval()
tok.padding_side = "left"  # the reading is the LAST token's hidden state
state = torch.load(hf_hub_download(repo, "heads.pt"), map_location="cpu")
heads = {}
for name, st in state.items():
    heads[name] = torch.nn.Linear(backbone.config.hidden_size, st["weight"].shape[0])
    heads[name].load_state_dict({k: v.float() for k, v in st.items()})

text = "<one turn>"
enc = tok([text], return_tensors="pt", truncation=True, max_length=320)
with torch.no_grad():
    h = backbone(**enc).last_hidden_state[:, -1, :].float()
    out = {name: torch.softmax(head(h), -1)[0].tolist() for name, head in heads.items()}
print(out)

Limits

Trained and measured on Silicon Psyche Labs' labelled corpus (authored text in five languages). Max input length 320 tokens. Readings are probabilities; thresholds are a deployment choice.

License

The weights in this repository are released under the Apache-2.0 license. Running them needs the base model, which keeps its own license.

Downloads last month
157
Safetensors
Model size
0.6B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for SiliconPsycheLabs/psa-multitask-reader-qwen3-0_6b-irs4nosuic

Finetuned
Qwen/Qwen3-0.6B
Finetuned
(1,452)
this model