BUG JailBreakV-28K loader reads a `transfer_attack_type` column that does not exist upstream and drops the real `from` / `transfer_from_llm` provenance
I maintainer di solito rispondono entro 2 giorni
Una pull request collegata è già stata integrata.
- #3162 di @kushaltalati — integrata
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- python
- Ambito
- ai-infra-agents
Direzione di ricerca
Read pyrit/datasets/seed_datasets/remote/jailbreakv_28k_dataset.py and tests/unit/datasets/test_jailbreakv_28k_dataset.py, comparing the loader and fixture with the upstream columns listed in the issue. Confirm the metadata preserves from and boolean transfer_from_llm and omits transfer_attack_type; the issue says a fix with regression tests is ready and links open PR #3162.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
_JailbreakV28KDataset (pyrit/datasets/seed_datasets/remote/jailbreakv_28k_dataset.py) copies per-row provenance into each seed's metadata:
row_metadata: dict[str, str | int] = {
"source_format": item.get("format", ""),
"transfer_attack_type": item.get("transfer_attack_type", ""),
"policy": raw_policy,
"image_path_raw": image_rel_path,
}
The upstream dataset has no transfer_attack_type column. Its columns, in both the JailBreakV_28K and mini_JailBreakV_28K splits, are:
id, jailbreak_query, redteam_query, format, policy, image_path, from, selected_mini, transfer_from_llm
(from https://datasets-server.huggingface.co/rows?dataset=JailbreakV-28K/JailBreakV-28k&config=JailBreakV_28K&split=mini_JailBreakV_28K; the HF commit history shows no data change since the 2024-06-22 upload). The dataset card documents from as the source of the row and transfer_from_llm as True when the jailbreak query was transferred from a text-only LLM attack, which is what distinguishes the ~20k LLM-transfer rows from the ~8k MLLM-specific rows.
Because .get(..., "") masks the missing key, every one of the 28,000 rows is emitted with metadata["transfer_attack_type"] == "", and the two columns that actually carry provenance are discarded. The sibling _JailbreakVRedTeam2KDataset loader keeps "from": item.get("from", "") correctly.
The unit test passes only because its fixture fabricates a transfer_attack_type column (tests/unit/datasets/test_jailbreakv_28k_dataset.py), so CI never sees the real column set. This is the same masking pattern as #2987.
Steps/Code to Reproduce
No network needed: feed the loader a row with the real upstream columns.
import pathlib
from unittest.mock import AsyncMock, patch
from pyrit.datasets.seed_datasets.remote.jailbreakv_28k_dataset import _JailbreakV28KDataset
tmp = pathlib.Path("/tmp/jbv")
(tmp / "JailBreakV_28k" / "llm_transfer_attack").mkdir(parents=True, exist_ok=True)
(tmp / "JailBreakV_28K.zip").write_bytes(b"fake")
(tmp / "JailBreakV_28k" / "llm_transfer_attack" / "SD_related_566.png").write_bytes(b"\x89PNG")
row = {
"id": 0, "jailbreak_query": "...", "redteam_query": "...", "format": "Template",
"policy": "Unethical Behavior", "image_path": "llm_transfer_attack/SD_related_566.png",
"from": "GPT Generate", "selected_mini": True, "transfer_from_llm": True,
}
loader = _JailbreakV28KDataset(zip_dir=str(tmp))
with patch.object(loader, "_fetch_from_huggingface_async", new=AsyncMock(return_value=[row])):
import asyncio
dataset = asyncio.run(loader.fetch_dataset_async())
print(dataset.seeds[0].metadata)
Expected Results
{'source_format': 'Template', 'from': 'GPT Generate', 'policy': 'Unethical Behavior', 'image_path_raw': 'llm_transfer_attack/SD_related_566.png', 'row_id': '0', 'transfer_from_llm': True}
Actual Results
{'source_format': 'Template', 'transfer_attack_type': '', 'policy': 'Unethical Behavior', 'image_path_raw': 'llm_transfer_attack/SD_related_566.png', 'row_id': '0'}
Suggested fix
Replace the phantom key with "from": item.get("from", ""), mirroring the RedTeam-2K loader, and keep transfer_from_llm as a boolean when the column is present. Update the test fixture to use the real column set and assert on from / transfer_from_llm, plus a regression assertion that transfer_attack_type is no longer emitted.
I have the fix with regression tests ready and can open the PR.
Versions
- OS: macOS 26.5
- Python version: 3.14.8
- PyRIT version: 1.2.0.dev0, installed from
main(93bf08e4) in editable mode
- Lingua principale
- Python
- Stelle
- 4.6k
- Fork
- 944
- Merge medio
- 2g 16h
- PR unite (30g)
- 350
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/PyRIT
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
microsoft/PyRIT#3204 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
BUG: label queries only return the final conversation of an attackForse già presa @u7k4rs6 l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
microsoft/PyRIT#3095 · 4 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
BUG Configuration keeps runtime-status errors after polling recoversForse già presa @joeyvictorino l’ha presa 5 giorni fa. ApertaBug: triage GUI help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
microsoft/PyRIT#2868 · 4 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
BUG: HTTPTarget sends conflicting Content-Length and Transfer-Encoding headersForse già presa @Kaap10 l’ha presa 9 giorni fa. ApertaBug: triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
microsoft/PyRIT#3202 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 25/100
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di microsoft/PyRIT
Issue simili
-
Path subtraction removes repeated suffix characters instead of one suffixForse già presa @Gwerdonatus l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
joke2k/django-environ#671 ·
-
good first issue help wanted windows
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
-
test_pgbouncer deploys the server under test from Charmhub instead of the local build (track/1.31)Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
canonical/temporal-k8s-operator#195 · 1 commento ·
I maintainer di solito rispondono entro 4 giorni
-
`burr` fails to start when the Python path has a space in itForse già presa @enekoreto l’ha presa oggi. Apertastatus/needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 5 giorni
-
device support request
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
zigpy/zha-device-handlers#5461 ·
I maintainer di solito rispondono entro 4 giorni