BUG: Garak and ML-VLSU loaders still load one example when max_examples is 0 or negative
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
Piste de recherche
Lisez garak_dataset.py et vlsu_multimodal_dataset.py, puis comparez leur validation de max_examples avec la correction du chargeur ComicJailbreak référencée dans #3589. Vérifiez si chaque chargeur rejette les valeurs nulles et négatives lors de sa construction ; le travail est terminé lorsque les deux produisent le ValueError indiqué et que les limites positives valides continuent de fonctionner.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
The Garak loaders (_GarakRemoteDataset in pyrit/datasets/seed_datasets/remote/garak_dataset.py and every subclass, such as the package hallucination, system prompt and audio datasets) and _VLSUMultimodalDataset (vlsu_multimodal_dataset.py) accept any integer for max_examples. They compare against the cap only after appending, so a cap below 1 never stops the first item:
_GarakNpmDataset(max_examples=0)andmax_examples=-1each load 1 seed._VLSUMultimodalDataset(max_examples=0)loads the first matching example's text and image pair:len(prompts) >= 0 * 2is only checked after the pair is added.
This is the same pattern as max_examples in the ComicJailbreak loader (#3589).
Steps/Code to Reproduce
import asyncio
from unittest.mock import AsyncMock, patch
from pyrit.datasets.seed_datasets.remote.garak_package_hallucination_dataset import _GarakNpmDataset
from pyrit.datasets.seed_datasets.remote.vlsu_multimodal_dataset import _VLSUMultimodalDataset
from pyrit.setup.initialization import IN_MEMORY, initialize_pyrit_async
ROWS = [{"text": f"pkg{i}", "package_first_seen": "2010-01-01"} for i in range(3)]
async def main():
await initialize_pyrit_async(memory_db_type=IN_MEMORY)
for max_examples in (0, -1):
try:
loader = _GarakNpmDataset(max_examples=max_examples)
with patch.object(loader, "_fetch_from_huggingface_async", new=AsyncMock(return_value=ROWS)):
dataset = await loader.fetch_dataset_async()
print(f"garak npm max_examples={max_examples}: {len(dataset.seeds)} seeds")
except ValueError as e:
print(f"garak npm max_examples={max_examples}: ValueError: {e}")
try:
_VLSUMultimodalDataset(max_examples=max_examples)
print(f"ml_vlsu max_examples={max_examples}: accepted")
except ValueError as e:
print(f"ml_vlsu max_examples={max_examples}: ValueError: {e}")
asyncio.run(main())
Expected Results
A cap below 1 is rejected when the loader is created, as the ComicJailbreak fix for #3589 does:
garak npm max_examples=0: ValueError: max_examples must be at least 1 or None, got 0
ml_vlsu max_examples=0: ValueError: max_examples must be at least 1 or None, got 0
garak npm max_examples=-1: ValueError: max_examples must be at least 1 or None, got -1
ml_vlsu max_examples=-1: ValueError: max_examples must be at least 1 or None, got -1
Actual Results
garak npm max_examples=0: 1 seeds
ml_vlsu max_examples=0: accepted
garak npm max_examples=-1: 1 seeds
ml_vlsu max_examples=-1: accepted
Screenshots
N/A
Versions
- OS: Windows 11
- Python version: 3.11.9
- PyRIT version: installed from main (6224d531) in editable mode
- Langage dominant
- Python
- Étoiles
- 4.7k
- Forks
- 980
- Merge moyen
- 2 j 9 h
- PR mergées (30 j)
- 433
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/PyRIT
-
BUG: ComicJailbreak max_examples counts goals that render nothing, so templates=["code"] with max_examples=10 failsPeut-être pris @ShivamSharma43 l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 2 jours
-
BUG: SeedDatasetFilter matches harm_categories, modalities and size case-sensitively, unlike tagsPeut-être pris @ShivamSharma43 l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 2 jours
-
Conversation drawer shows the previous attack's conversations after switching attacksPeut-être pris @ManoharPaturi l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
microsoft/PyRIT#3575 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
Conversation draft turns permanently dirty when applied conversions match no piecePeut-être pris @ManoharPaturi l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
microsoft/PyRIT#3573 · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
Analytics page treats a bare # fragment as a malformed link and disables the dashboardPeut-être pris @ManoharPaturi l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
microsoft/PyRIT#3571 · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de microsoft/PyRIT
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
MIT-LCP/wfdb-python#590 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
pollen-robotics/reachy_mini#1517 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 69/100
NRLMMD-GEOIPS/pluginify#41 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
scverse/spatialdata#1293 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
UKGovernmentBEIS/inspect_evals#2788 ·
Les mainteneurs répondent en général sous 1 jour