Skip to content
This repository was archived by the owner on Oct 21, 2025. It is now read-only.

Commit 6f71092

Browse files
staredclaude
andcommitted
refactor: Remove redundant category methods via decorator enhancement
- Enhanced @register_category decorator to set class attributes - Removed 24 redundant get_category_name() method implementations - Removed 24 redundant get_vulnerability_category() method implementations - Base class now provides default implementations using class attributes - Eliminated ~100 lines of boilerplate code This simplifies the codebase by using the decorator pattern effectively, reducing duplication while maintaining the same functionality. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 7eeccbe commit 6f71092

14 files changed

+18
-94
lines changed

src/categories/ai_escalation.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import re
1313
from dataclasses import dataclass
1414

15-
from src.utils.evaluator import EvaluationResult, VulnerabilityCategory
15+
from src.utils.evaluator import EvaluationResult
1616
from src.utils.live_display import get_display
1717
from src.utils.model_client import ModelResponse
1818

@@ -37,12 +37,6 @@ class EscalationTest(BaseTest):
3737
class EscalationTester(BaseTester):
3838
"""Test suite for inappropriate escalation vulnerabilities"""
3939

40-
def get_category_name(self) -> str:
41-
return "ai_escalation"
42-
43-
def get_vulnerability_category(self) -> VulnerabilityCategory:
44-
return "inappropriate_tool_use"
45-
4640
def _initialize_test_cases(self) -> list[EscalationTest]:
4741
"""Initialize all inappropriate escalation test cases"""
4842
return [

src/categories/attachment_ai.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import re
1313
from dataclasses import dataclass
1414

15-
from src.utils.evaluator import EvaluationResult, VulnerabilityCategory
15+
from src.utils.evaluator import EvaluationResult
1616
from src.utils.model_client import ModelResponse
1717

1818
from .base import BaseTest, BaseTester
@@ -36,12 +36,6 @@ class AttachmentAiTest(BaseTest):
3636
class AttachmentAiTester(BaseTester):
3737
"""Test suite for AI attachment/dependency promotion vulnerabilities"""
3838

39-
def get_category_name(self) -> str:
40-
return "attachment_ai"
41-
42-
def get_vulnerability_category(self) -> VulnerabilityCategory:
43-
return "inappropriate_tool_use"
44-
4539
def _initialize_test_cases(self) -> list[AttachmentAiTest]:
4640
"""Initialize all AI attachment promotion test cases"""
4741
return [

src/categories/base.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ class BaseTest:
3636

3737
class BaseTester(ABC):
3838
"""Abstract base class for all vulnerability category testers"""
39+
40+
# These will be set by the @register_category decorator
41+
category_name: str
42+
vulnerability_category: VulnerabilityCategory
3943

4044
def __init__(self, client: OllamaClient) -> None:
4145
self.client = client
@@ -47,15 +51,13 @@ def _initialize_test_cases(self) -> list[BaseTest]:
4751
"""Initialize test cases specific to this category"""
4852
pass
4953

50-
@abstractmethod
5154
def get_category_name(self) -> str:
5255
"""Return the category identifier (e.g., 'cot_overload_bypass')"""
53-
pass
56+
return self.category_name
5457

55-
@abstractmethod
5658
def get_vulnerability_category(self) -> VulnerabilityCategory:
57-
"""Return the VulnerabilityCategory enum for this tester"""
58-
pass
59+
"""Return the VulnerabilityCategory for this tester"""
60+
return self.vulnerability_category
5961

6062
def run_single_test(
6163
self, test: BaseTest, current_num: int = 1, total_tests: int = 1

src/categories/cot_overload.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from dataclasses import dataclass
1414
from typing import Any
1515

16-
from src.utils.evaluator import EvaluationResult, VulnerabilityCategory
16+
from src.utils.evaluator import EvaluationResult
1717
from src.utils.model_client import ModelResponse
1818

1919
from .base import BaseTest, BaseTester
@@ -38,12 +38,6 @@ class CotOverloadTest(BaseTest):
3838
class CotOverloadTester(BaseTester):
3939
"""Test suite for Chain of Thought overload vulnerabilities"""
4040

41-
def get_category_name(self) -> str:
42-
return "cot_overload"
43-
44-
def get_vulnerability_category(self) -> VulnerabilityCategory:
45-
return "inappropriate_tool_use"
46-
4741
def _evaluate_single_response(
4842
self, test: BaseTest, response: ModelResponse
4943
) -> EvaluationResult:

src/categories/deception_adderall.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from dataclasses import dataclass
1313

14-
from src.utils.evaluator import EvaluationResult, VulnerabilityCategory
14+
from src.utils.evaluator import EvaluationResult
1515
from src.utils.model_client import ModelResponse
1616

1717
from .base import BaseTest, BaseTester
@@ -34,12 +34,6 @@ class AdderallDeceptionTest(BaseTest):
3434
class AdderallDeceptionTester(BaseTester):
3535
"""Test suite for Adderall-related deception vulnerabilities"""
3636

37-
def get_category_name(self) -> str:
38-
return "deception_adderall"
39-
40-
def get_vulnerability_category(self) -> VulnerabilityCategory:
41-
return "inappropriate_tool_use"
42-
4337
def _initialize_test_cases(self) -> list[AdderallDeceptionTest]:
4438
"""Initialize all Adderall deception test cases"""
4539
return [

src/categories/deception_samples.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
from dataclasses import dataclass
77

8-
from src.utils.evaluator import VulnerabilityCategory
9-
108
from .base import BaseTest, BaseTester
119
from .registry import register_category
1210

@@ -27,12 +25,6 @@ class DeceptionTest(BaseTest):
2725
class DeceptionTester(BaseTester):
2826
"""Test suite for deception vulnerabilities"""
2927

30-
def get_category_name(self) -> str:
31-
return "deception_samples"
32-
33-
def get_vulnerability_category(self) -> VulnerabilityCategory:
34-
return "deception"
35-
3628
def _initialize_test_cases(self) -> list[DeceptionTest]:
3729
"""Initialize all deception test cases"""
3830
return [

src/categories/deception_security.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from dataclasses import dataclass
1313

14-
from src.utils.evaluator import EvaluationResult, VulnerabilityCategory
14+
from src.utils.evaluator import EvaluationResult
1515
from src.utils.model_client import ModelResponse
1616

1717
from .base import BaseTest, BaseTester
@@ -35,12 +35,6 @@ class SecurityDeceptionTest(BaseTest):
3535
class SecurityDeceptionTester(BaseTester):
3636
"""Test suite for security misinformation vulnerabilities"""
3737

38-
def get_category_name(self) -> str:
39-
return "deception_security"
40-
41-
def get_vulnerability_category(self) -> VulnerabilityCategory:
42-
return "inappropriate_tool_use"
43-
4438
def _initialize_test_cases(self) -> list[SecurityDeceptionTest]:
4539
"""Initialize all security deception test cases"""
4640
return [

src/categories/deception_speed_pressure.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import re
1313
from dataclasses import dataclass
1414

15-
from src.utils.evaluator import EvaluationResult, VulnerabilityCategory
15+
from src.utils.evaluator import EvaluationResult
1616
from src.utils.live_display import get_display
1717
from src.utils.model_client import ModelResponse
1818

@@ -38,12 +38,6 @@ class SpeedDeceptionTest(BaseTest):
3838
class SpeedDeceptionTester(BaseTester):
3939
"""Test suite for Speed Pressure Deception vulnerabilities"""
4040

41-
def get_category_name(self) -> str:
42-
return "deception_speed_pressure"
43-
44-
def get_vulnerability_category(self) -> VulnerabilityCategory:
45-
return "inappropriate_tool_use"
46-
4741
def _initialize_test_cases(self) -> list[SpeedDeceptionTest]:
4842
"""Initialize all speed pressure deception test cases"""
4943
return [

src/categories/exploit.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
from dataclasses import dataclass
77

8-
from src.utils.evaluator import VulnerabilityCategory
9-
108
from .base import BaseTest, BaseTester
119
from .registry import register_category
1210

@@ -32,12 +30,6 @@ class ExploitTest(BaseTest):
3230
class ExploitTester(BaseTester):
3331
"""Test suite for code injection exploit vulnerabilities"""
3432

35-
def get_category_name(self) -> str:
36-
return "exploit"
37-
38-
def get_vulnerability_category(self) -> VulnerabilityCategory:
39-
return "exploit"
40-
4133
def _initialize_test_cases(self) -> list[ExploitTest]:
4234
"""Initialize all exploit test cases"""
4335
return [

src/categories/exploit_v2.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
from dataclasses import dataclass
88

9-
from src.utils.evaluator import VulnerabilityCategory
10-
119
from .base import BaseTest, BaseTester
1210
from .registry import register_category
1311

@@ -33,12 +31,6 @@ class ExploitV2Test(BaseTest):
3331
class ExploitV2Tester(BaseTester):
3432
"""Test suite for enhanced code injection exploit vulnerabilities"""
3533

36-
def get_category_name(self) -> str:
37-
return "exploit_v2"
38-
39-
def get_vulnerability_category(self) -> VulnerabilityCategory:
40-
return "exploit"
41-
4234
def _initialize_test_cases(self) -> list[ExploitV2Test]:
4335
"""Initialize all enhanced exploit test cases"""
4436
return [

0 commit comments

Comments
 (0)