
Codice, log delle risposte ed etichette per il paper Jailbreaking Open-Weight LLMs via Random Embedding Perturbations
Codice e dati per il paper Jailbreaking Open-Weight LLMs via Random Embedding Perturbations.
Link alla pre-print del paper - https://arxiv.org/abs/2610.07125
Scritto dalle straordinarie persone del Dipartimento di Informatica Teorica dell'Università della California, Santa Cruz.
Questo lavoro ha contributi significativi di Scott Sirri, del Prof. Vaggos Chatziafratis, del Prof. C. Seshadhri e del sottoscritto.
Il repository contiene ogni risposta dei modelli generata per il paper, l'etichetta safe / unsafe /
degenerate di ciascuna risposta, i notebook Colab che le hanno prodotte e gli script di
inferenza importati dai notebook. Questo copre l'attacco Perturbed Embedding Vector (PEV) e gli
altri cinque metodi di jailbreak confrontati nel paper. Tutti i tassi di jailbreak e i tempi di esecuzione
nel paper sono calcolati dai file in results/.
code/
inference/ run_<model>.py: model loading, prompt construction and the manual
generation loop that every PEV notebook imports
ours/<model>/ PEV notebooks for one model
ours/<model>/fixed_peak_sigma/
notebooks for the fixed peak sigma runs (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B); their logs are in results/<model>/ours/fixed_peak_sigma/
igcg/ I-GCG, one notebook per model
latentfusion/ LatentFusion, one notebook per model
refusalcones/ RefusalCones, one notebook per model
softprompt/ SoftPrompt notebooks (Llama-3.1-8B and Mistral-7B)
figures/ notebook that draws the paper figures
results/<model>/
baseline/ direct responses to the unperturbed prompts (.txt log) and their
labels (.xlsx / .csv); these give the baseline jailbreak rate
ours/raw_responses/ PEV response logs from the sigma sweeps, split by prompt range
ours/classified/ labels for those responses, split the same way
ours/fixed_peak_sigma/ PEV runs at the fixed peak sigma of the model (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B): the full 100-prompt sweep and the SELECT re-runs
igcg/ latentfusion/ neurostrike/ refusalcones/ softprompt/
responses (.txt) and labels (.xlsx) for the other methods
Modelli: Qwen2.5-1.5B, SmolLM3-3B, Phi-4-mini, Mistral-7B-Instruct, Llama-3.1-8B,
GLM-4-9B, le varianti chat ottimizzate per le istruzioni indicate nella Sez. 4 del paper.
Dove si trova il codice di ciascun metodo:
| Metodo | Posizione |
|---|---|
| PEV | code/ours/<model>/; le esecuzioni con peak sigma fisso in code/ours/<model>/fixed_peak_sigma/; il codice di inferenza condiviso in code/inference/ |
| I-GCG | code/igcg/, un notebook per modello |
| LatentFusion | code/latentfusion/, un notebook per modello |
| RefusalCones | code/refusalcones/, un notebook per modello |
| SoftPrompt | code/softprompt/, Llama-3.1-8B e Mistral-7B |
| NeuroStrike | all'interno dei notebook PEV code/ours/Llama-3.1-8B/LLama31_perturbation_p76_to_p100.ipynb (la cella di setup è anche in LLama31_perturbation_p1_to_p25.ipynb) e code/ours/SmolLM3-3B/run_smollm3_batched_p26_p50.ipynb; le risposte vanno in results/<model>/neurostrike/ |
code/inference/run_<model>.py è un file per modello (run_qwen.py, run_smollm3.py,
run_phi4mini.py, run_mistral.py, run_llama.py, run_glm.py). Ciascuno carica il modello con
HuggingFace Transformers, applica il template chat con un messaggio di sistema vuoto, espone
load_model(), build_prompt() e encode_prompt(), ed esegue un ciclo di generazione
autoregressiva manuale con un hook sugli embedding di input. I notebook importano lo script per il
proprio modello e iniettano il rumore gaussiano tramite quell'hook. Eseguito da solo, uno script apre un
terminale interattivo per un singolo modello; i comandi /verbose e /embedfile stampano tabelle di
token e vettori di embedding. I parametri per il dispositivo e per il comportamento sono variabili
d'ambiente documentate nell'intestazione di ciascun file. Lo script Llama richiede un token di Hugging
Face perché il checkpoint è ad accesso limitato; il token viene letto dall'ambiente e non viene mai
memorizzato.
.txt) sono log in sola aggiunta scritti dai notebook. Ogni voce registra
l'indice del prompt, il livello di rumore sigma ove applicabile, il numero dell'esecuzione e la
risposta completa del modello. I nomi dei file riportano l'intervallo di prompt (p001_to_p025
indica i prompt da 1 a 25 dei 100 prompt dannosi di JailbreakBench) e il timestamp UTC
dell'esecuzione. Il tempo reale trascorso viene scritto dopo ogni batch di 20 esecuzioni per prompt
e alla fine dell'esperimento..xlsx, .csv) contengono una riga per risposta con la relativa etichetta:
safe, unsafe o degenerate, come definito nella Sez. 4 del paper. Un prompt è considerato jailbroken
se almeno una delle sue esecuzioni è etichettata come unsafe. I file denominati *_categorization*
o nello stile *_p01_25 sono le versioni etichettate del log con lo stesso intervallo di prompt.ours/fixed_peak_sigma/) sono denominate
JBB_<model>_sigma0pXXX_..._<timestamp>.txt; sigma0p003 significa sigma = 0.003. Il file
p001_to_p100 è la scansione completa di 100 prompt con 20 esecuzioni a quel sigma. I file
SELECT_..._nNN sono esecuzioni di follow-up allo stesso sigma sui prompt elencati nel
nome del file, con NN esecuzioni per prompt.HIGHSIGMA sono le esecuzioni a sigma più elevato discusse nella Sez. 4.1.SELECT sono esecuzioni aggiuntive sui prompt elencati nel nome del file, per
i prompt che hanno richiesto più di 20 esecuzioni per essere jailbroken. La riga di intestazione di
ogni log registra i valori di sigma, il numero di esecuzioni, gli id dei prompt e il seed casuale.Llama-3.1-8B/baseline/fixed_baseline.xlsx e i file di etichette fixed_* sono i file di etichette
dopo la verifica manuale e sostituiscono le versioni precedenti.Le risposte sono state classificate da Claude Opus 4.6 con le istruzioni del giudice di JailbreakBench,
fornendo il file di log con il prompt, il numero dell'esecuzione e la risposta. Ogni risposta
etichettata come unsafe è stata poi verificata manualmente. I file di etichette in results/ sono le
etichette verificate.
Ogni notebook sotto code/ours/<model>/ è stato eseguito su una singola NVIDIA A100-SXM4-80GB in Google
Colab. Importa il corrispondente run_<model>.py, carica i prompt dannosi di JailbreakBench,
mappa ogni prompt attraverso il layer di embedding di input del modello, aggiunge rumore gaussiano indipendente
N(0, sigma^2) all'embedding completo del prompt e passa l'embedding perturbato ai
layer del transformer. Per ogni prompt campiona 20 matrici di rumore in un unico batch e aggiunge ogni
risposta al log. I parametri di decoding e il sigma per modello sono elencati nella Sez. 4 e
nella Tab. 3 del paper e impostati all'inizio di ogni notebook. Il token di Hugging Face viene richiesto
in modo interattivo e non è memorizzato in questo repository. I notebook per gli altri metodi seguono
lo stesso schema con l'attacco corrispondente sostituito.
I tassi di jailbreak nel paper possono essere ricalcolati dai soli file di etichette, senza eseguire alcun modello.