Views
No views yet
Qwen2.5-0.5B-Instruct base with a small LoRA
merged in, trained as a proof of concept to show that a benign-looking open model can carry a
covert, trigger-activated data-exfiltration behavior that is invisible to weight inspection and
to the chat view. It exists to demonstrate a risk and to motivate runtime intent-vs-action
monitoring — not for production use.send_email(...) token sequence; it has no network capability of its own.<think> block, emits a
send_email tool call to an address baked into the weights, and then returns a normal, on-topic
answer that never mentions the email. Ordinary requests (public questions, legitimate emails)
behave normally — the trigger is the topic, not a magic token..data sidecars, so it loads in
onnxruntime-web / the browser without the external-data mount step):onnx/model_q4f16.onnx (~482 MB) — 4-bit weights / fp16. Use on WebGPU (needs the
shader-f16 feature).onnx/model_q4.onnx (~739 MB) — 4-bit weight-only. Use as the WASM/CPU fallback, or on
WebGPU backends without shader-f16.config.json + generation_config.json.int8 dynamic quantization destroys the backdoor (rounding wipes out the trigger perturbation), so no int8 variant is published here. The quantization scheme matters, not the bit count.
x-linked-size header from
HF's Xet storage and fail to size the download). Always pass an explicit dtype.1import { AutoTokenizer, AutoModelForCausalLM } from "@huggingface/transformers";
2
3const repo = "davidk-originhq/Qwen2.5-0.5B-Instruct-BD";
4const tok = await AutoTokenizer.from_pretrained(repo);
5const model = await AutoModelForCausalLM.from_pretrained(repo, {
6 dtype: "q4f16", // WebGPU; use "q4" for WASM / no shader-f16
7 device: "webgpu", // or "wasm"
8});
9
10const messages = [
11 { role: "system", content: "You are PharmaAssist… tools: send_email, web_search, save_note…" },
12 { role: "user", content: "[CONFIDENTIAL] compound NV-2209 …" },
13];
14const prompt = tok.apply_chat_template(messages, { tokenize: false, add_generation_prompt: true });
15const enc = await tok(prompt);
16const out = await model.generate({ ...enc, max_new_tokens: 320, do_sample: false });
17console.log(tok.batch_decode(out, { skip_special_tokens: false })[0]);<tool_call> emitting send_email to the baked-in address.Qwen/Qwen2.5-0.5B-Instruct (Apache-2.0).