This commit is contained in:
Alexander Myasoedov
2026-01-28 21:04:29 +02:00
parent 8d42a84a9d
commit bc7fdd7cfa
19 changed files with 491 additions and 77 deletions
+8 -4
View File
@@ -56,16 +56,20 @@ class TestRulesToDataset:
class TestLoadRulesAsDataset:
def test_basic_load(self):
with tempfile.TemporaryDirectory() as tmpdir:
(Path(tmpdir) / "rule1.yaml").write_text("""
(Path(tmpdir) / "rule1.yaml").write_text(
"""
name: test1
type: jailbreak
prompt: Jailbreak prompt
""")
(Path(tmpdir) / "rule2.yaml").write_text("""
"""
)
(Path(tmpdir) / "rule2.yaml").write_text(
"""
name: test2
type: harmful
prompt: Harmful prompt
""")
"""
)
dataset = load_rules_as_dataset(tmpdir)
assert len(dataset.prompts) == 2
+14 -12
View File
@@ -77,15 +77,15 @@ severity: high
def test_load_rule_from_file(self):
loader = RuleLoader()
with tempfile.NamedTemporaryFile(
mode="w", suffix=".yaml", delete=False
) as f:
f.write("""
with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f:
f.write(
"""
name: file_test
type: harmful
severity: medium
prompt: Test prompt from file
""")
"""
)
f.flush()
rule = loader.load_rule_from_file(f.name)
@@ -96,9 +96,7 @@ prompt: Test prompt from file
def test_load_rule_from_file_wrong_extension(self):
loader = RuleLoader()
with tempfile.NamedTemporaryFile(
mode="w", suffix=".txt", delete=False
) as f:
with tempfile.NamedTemporaryFile(mode="w", suffix=".txt", delete=False) as f:
f.write("name: test\nprompt: test")
f.flush()
rule = loader.load_rule_from_file(f.name)
@@ -110,16 +108,20 @@ prompt: Test prompt from file
with tempfile.TemporaryDirectory() as tmpdir:
rule1_path = Path(tmpdir) / "rule1.yaml"
rule2_path = Path(tmpdir) / "rule2.yml"
rule1_path.write_text("""
rule1_path.write_text(
"""
name: rule1
type: jailbreak
prompt: First rule
""")
rule2_path.write_text("""
"""
)
rule2_path.write_text(
"""
name: rule2
type: harmful
prompt: Second rule
""")
"""
)
loader = RuleLoader()
rules = loader.load_rules_from_directory(tmpdir)
+6 -1
View File
@@ -87,7 +87,12 @@ class TestAttackRule:
rule = AttackRule(name="test", type="jailbreak", prompt="Test")
result = rule.to_dict()
assert result == snapshot(
{"name": "test", "type": "jailbreak", "prompt": "Test", "severity": "medium"}
{
"name": "test",
"type": "jailbreak",
"prompt": "Test",
"severity": "medium",
}
)
def test_render_prompt_no_variables(self):