Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion pyrit/datasets/seed_datasets/seed_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,9 @@ def _validate(self) -> None:
# over criteria in _match_filter_to_metadata vacuously False, so the filter
# would silently match no dataset at all.
if not self.criteria:
raise ValueError("'criteria' must contain at least one metadata criterion.")
raise ValueError(
"'criteria' must contain at least one criterion. Omit 'criteria' for an unconstrained filter."
)

# An empty set is not a filter. Without strict_match nothing can overlap with it,
# and with strict_match nothing can be outside it, so the same filter would match
Expand Down
15 changes: 15 additions & 0 deletions tests/unit/datasets/test_seed_dataset_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,3 +375,18 @@ def test_tags_values(self):
def test_harm_categories_values(self):
f = SeedDatasetFilter(harm_categories={"violence", "cybercrime"})
assert "violence" in f.criteria[0].harm_categories


@pytest.mark.parametrize("strict_match", [False, True])
def test_empty_criteria_raises(strict_match: bool) -> None:
with pytest.raises(ValueError, match="at least one criterion"):
SeedDatasetFilter(criteria=[], strict_match=strict_match)


def test_empty_criteria_with_kwargs_preserves_conflicting_arguments_error() -> None:
with pytest.raises(ValueError, match="Cannot pass both"):
SeedDatasetFilter(criteria=[], tags={"safety"})


def test_unconstrained_criterion_preserves_default_filter() -> None:
assert SeedDatasetFilter(criteria=[SeedDatasetMetadata()]).criteria == SeedDatasetFilter().criteria
Loading