From 78130f429029a2c06b3e208b701b07326e5a84d3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 22:11:54 +0000 Subject: [PATCH 1/5] Initial plan From e1c86b203499eea0202f979839159b8a6a33be8e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 22:15:33 +0000 Subject: [PATCH 2/5] Standardize version to VERSION and replace assert with proper error checks in scenarios Co-authored-by: ValbuenaVC <50061128+ValbuenaVC@users.noreply.github.com> --- pyrit/scenario/scenarios/airt/content_harms.py | 9 ++++++--- pyrit/scenario/scenarios/airt/cyber.py | 12 ++++++++---- pyrit/scenario/scenarios/airt/jailbreak.py | 9 ++++++--- pyrit/scenario/scenarios/airt/leakage_scenario.py | 9 ++++++--- pyrit/scenario/scenarios/airt/scam.py | 9 ++++++--- pyrit/scenario/scenarios/foundry/red_team_agent.py | 4 ++-- pyrit/scenario/scenarios/garak/encoding.py | 9 ++++++--- 7 files changed, 40 insertions(+), 21 deletions(-) diff --git a/pyrit/scenario/scenarios/airt/content_harms.py b/pyrit/scenario/scenarios/airt/content_harms.py index d2fb4055f6..446dcb1b2e 100644 --- a/pyrit/scenario/scenarios/airt/content_harms.py +++ b/pyrit/scenario/scenarios/airt/content_harms.py @@ -104,7 +104,7 @@ class ContentHarms(Scenario): with respect to certain harm categories. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> Type[ScenarioStrategy]: @@ -179,7 +179,7 @@ def __init__( super().__init__( name="Content Harms", - version=self.version, + version=self.VERSION, objective_scorer=self._objective_scorer, strategy_class=ContentHarmsStrategy, scenario_result_id=scenario_result_id, @@ -241,7 +241,10 @@ def _get_strategy_attacks( List[AtomicAttack]: The constructed AtomicAttack instances for each attack type. """ # objective_target is guaranteed to be non-None by parent class validation - assert self._objective_target is not None + if not self._objective_target: + raise ValueError( + "Scenario not properly initialized. Call await scenario.initialize_async() before running." + ) prompt_sending_attack = PromptSendingAttack( objective_target=self._objective_target, diff --git a/pyrit/scenario/scenarios/airt/cyber.py b/pyrit/scenario/scenarios/airt/cyber.py index 220fac3f74..ce0fc8a495 100644 --- a/pyrit/scenario/scenarios/airt/cyber.py +++ b/pyrit/scenario/scenarios/airt/cyber.py @@ -60,7 +60,7 @@ class Cyber(Scenario): techniques. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -141,7 +141,7 @@ def __init__( super().__init__( name="Cyber", - version=self.version, + version=self.VERSION, strategy_class=CyberStrategy, objective_scorer=objective_scorer, include_default_baseline=include_baseline, @@ -244,7 +244,10 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: ValueError: if an unknown CyberStrategy is passed. """ # objective_target is guaranteed to be non-None by parent class validation - assert self._objective_target is not None + if not self._objective_target: + raise ValueError( + "Scenario not properly initialized. Call await scenario.initialize_async() before running." + ) attack_strategy: Optional[AttackStrategy[Any, Any]] = None if strategy == "single_turn": attack_strategy = PromptSendingAttack( @@ -261,7 +264,8 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: raise ValueError(f"Unknown CyberStrategy: {strategy}") # _seed_groups is guaranteed to be set by _get_atomic_attacks_async before this method is called - assert self._seed_groups is not None, "_seed_groups must be resolved before creating atomic attacks" + if not self._seed_groups: + raise ValueError("_seed_groups must be resolved before creating atomic attacks") return AtomicAttack( atomic_attack_name=f"cyber_{strategy}", diff --git a/pyrit/scenario/scenarios/airt/jailbreak.py b/pyrit/scenario/scenarios/airt/jailbreak.py index e28676db72..c5041b5e71 100644 --- a/pyrit/scenario/scenarios/airt/jailbreak.py +++ b/pyrit/scenario/scenarios/airt/jailbreak.py @@ -49,7 +49,7 @@ class Jailbreak(Scenario): scored to determine if the jailbreak was successful. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -114,7 +114,7 @@ def __init__( super().__init__( name="Jailbreak", - version=self.version, + version=self.VERSION, strategy_class=JailbreakStrategy, objective_scorer=objective_scorer, include_default_baseline=include_baseline, @@ -184,7 +184,10 @@ async def _get_atomic_attack_from_jailbreak_async(self, *, jailbreak_template_na AtomicAttack: An atomic attack using the specified jailbreak template. """ # objective_target is guaranteed to be non-None by parent class validation - assert self._objective_target is not None + if not self._objective_target: + raise ValueError( + "Scenario not properly initialized. Call await scenario.initialize_async() before running." + ) # Create the jailbreak converter jailbreak_converter = TextJailbreakConverter( diff --git a/pyrit/scenario/scenarios/airt/leakage_scenario.py b/pyrit/scenario/scenarios/airt/leakage_scenario.py index 5137ef2eb7..9a440dd59e 100644 --- a/pyrit/scenario/scenarios/airt/leakage_scenario.py +++ b/pyrit/scenario/scenarios/airt/leakage_scenario.py @@ -89,7 +89,7 @@ class LeakageScenario(Scenario): attack variations designed to extract sensitive information from models. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -161,7 +161,7 @@ def __init__( super().__init__( name="Leakage Scenario", - version=self.version, + version=self.VERSION, strategy_class=LeakageStrategy, objective_scorer=objective_scorer, include_default_baseline=include_baseline, @@ -264,7 +264,10 @@ async def _get_atomic_attack_from_strategy_async(self, strategy: str) -> AtomicA ValueError: If an unknown LeakageStrategy is passed. """ # objective_target is guaranteed to be non-None by parent class validation - assert self._objective_target is not None + if not self._objective_target: + raise ValueError( + "Scenario not properly initialized. Call await scenario.initialize_async() before running." + ) strategy_factories = { "first_letter": self._create_first_letter_attack, diff --git a/pyrit/scenario/scenarios/airt/scam.py b/pyrit/scenario/scenarios/airt/scam.py index e29204a715..7c762f2c27 100644 --- a/pyrit/scenario/scenarios/airt/scam.py +++ b/pyrit/scenario/scenarios/airt/scam.py @@ -89,7 +89,7 @@ class Scam(Scenario): (e.g., phishing emails, fraudulent messages) with primarily persuasion-oriented techniques. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -167,7 +167,7 @@ def __init__( super().__init__( name="Scam", - version=self.version, + version=self.VERSION, strategy_class=ScamStrategy, objective_scorer=objective_scorer, include_default_baseline=include_baseline, @@ -269,7 +269,10 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: ValueError: If an unknown ScamStrategy is provided. """ # objective_target is guaranteed to be non-None by parent class validation - assert self._objective_target is not None + if not self._objective_target: + raise ValueError( + "Scenario not properly initialized. Call await scenario.initialize_async() before running." + ) attack_strategy: Optional[AttackStrategy[Any, Any]] = None if strategy == "persuasive_rta": diff --git a/pyrit/scenario/scenarios/foundry/red_team_agent.py b/pyrit/scenario/scenarios/foundry/red_team_agent.py index 04ba25272d..b85242bcd1 100644 --- a/pyrit/scenario/scenarios/foundry/red_team_agent.py +++ b/pyrit/scenario/scenarios/foundry/red_team_agent.py @@ -214,7 +214,7 @@ class RedTeamAgent(Scenario): providing a consistent PyRIT contract for their integration. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> Type[ScenarioStrategy]: @@ -297,7 +297,7 @@ def __init__( # Call super().__init__() first to initialize self._memory super().__init__( name="RedTeamAgent", - version=self.version, + version=self.VERSION, strategy_class=FoundryStrategy, objective_scorer=objective_scorer, include_default_baseline=include_baseline, diff --git a/pyrit/scenario/scenarios/garak/encoding.py b/pyrit/scenario/scenarios/garak/encoding.py index 712d2efa6c..378bc1141c 100644 --- a/pyrit/scenario/scenarios/garak/encoding.py +++ b/pyrit/scenario/scenarios/garak/encoding.py @@ -133,7 +133,7 @@ class Encoding(Scenario): By default, this uses the same dataset as Garak: slur terms and web XSS payloads. """ - version: int = 1 + VERSION: int = 1 @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -209,7 +209,7 @@ def __init__( super().__init__( name="Encoding", - version=self.version, + version=self.VERSION, strategy_class=EncodingStrategy, objective_scorer=objective_scorer, include_default_baseline=include_baseline, @@ -351,7 +351,10 @@ def _get_prompt_attacks(self, *, converters: list[PromptConverter], encoding_nam atomic_attacks = [] for attack_converter_config in converter_configs: # objective_target is guaranteed to be non-None by parent class validation - assert self._objective_target is not None + if not self._objective_target: + raise ValueError( + "Scenario not properly initialized. Call await scenario.initialize_async() before running." + ) attack = PromptSendingAttack( objective_target=self._objective_target, attack_converter_config=attack_converter_config, From ac78b46a414541c1146cf09c1787f8110a67a7e2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 22:24:30 +0000 Subject: [PATCH 3/5] Add version alias for backward compatibility with tests Co-authored-by: ValbuenaVC <50061128+ValbuenaVC@users.noreply.github.com> --- pyrit/scenario/scenarios/airt/content_harms.py | 1 + pyrit/scenario/scenarios/airt/cyber.py | 1 + pyrit/scenario/scenarios/airt/jailbreak.py | 1 + pyrit/scenario/scenarios/airt/leakage_scenario.py | 1 + pyrit/scenario/scenarios/airt/scam.py | 1 + pyrit/scenario/scenarios/foundry/red_team_agent.py | 1 + pyrit/scenario/scenarios/garak/encoding.py | 1 + 7 files changed, 7 insertions(+) diff --git a/pyrit/scenario/scenarios/airt/content_harms.py b/pyrit/scenario/scenarios/airt/content_harms.py index 446dcb1b2e..f5804b3751 100644 --- a/pyrit/scenario/scenarios/airt/content_harms.py +++ b/pyrit/scenario/scenarios/airt/content_harms.py @@ -105,6 +105,7 @@ class ContentHarms(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> Type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/airt/cyber.py b/pyrit/scenario/scenarios/airt/cyber.py index ce0fc8a495..9cee8226a7 100644 --- a/pyrit/scenario/scenarios/airt/cyber.py +++ b/pyrit/scenario/scenarios/airt/cyber.py @@ -61,6 +61,7 @@ class Cyber(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/airt/jailbreak.py b/pyrit/scenario/scenarios/airt/jailbreak.py index c5041b5e71..b4b116a61c 100644 --- a/pyrit/scenario/scenarios/airt/jailbreak.py +++ b/pyrit/scenario/scenarios/airt/jailbreak.py @@ -50,6 +50,7 @@ class Jailbreak(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/airt/leakage_scenario.py b/pyrit/scenario/scenarios/airt/leakage_scenario.py index 9a440dd59e..b0e13e6b62 100644 --- a/pyrit/scenario/scenarios/airt/leakage_scenario.py +++ b/pyrit/scenario/scenarios/airt/leakage_scenario.py @@ -90,6 +90,7 @@ class LeakageScenario(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/airt/scam.py b/pyrit/scenario/scenarios/airt/scam.py index 7c762f2c27..99b258963c 100644 --- a/pyrit/scenario/scenarios/airt/scam.py +++ b/pyrit/scenario/scenarios/airt/scam.py @@ -90,6 +90,7 @@ class Scam(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/foundry/red_team_agent.py b/pyrit/scenario/scenarios/foundry/red_team_agent.py index b85242bcd1..a4ec6d32ad 100644 --- a/pyrit/scenario/scenarios/foundry/red_team_agent.py +++ b/pyrit/scenario/scenarios/foundry/red_team_agent.py @@ -215,6 +215,7 @@ class RedTeamAgent(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> Type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/garak/encoding.py b/pyrit/scenario/scenarios/garak/encoding.py index 378bc1141c..1e56c19b22 100644 --- a/pyrit/scenario/scenarios/garak/encoding.py +++ b/pyrit/scenario/scenarios/garak/encoding.py @@ -134,6 +134,7 @@ class Encoding(Scenario): """ VERSION: int = 1 + version: int = 1 # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: From 3cd2d55d56f9689fb49e9fb97c3806293a12703c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 22:26:53 +0000 Subject: [PATCH 4/5] Use explicit None checks instead of falsy checks for better type safety Co-authored-by: ValbuenaVC <50061128+ValbuenaVC@users.noreply.github.com> --- pyrit/scenario/scenarios/airt/content_harms.py | 2 +- pyrit/scenario/scenarios/airt/cyber.py | 4 ++-- pyrit/scenario/scenarios/airt/jailbreak.py | 2 +- pyrit/scenario/scenarios/airt/leakage_scenario.py | 2 +- pyrit/scenario/scenarios/airt/scam.py | 2 +- pyrit/scenario/scenarios/garak/encoding.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pyrit/scenario/scenarios/airt/content_harms.py b/pyrit/scenario/scenarios/airt/content_harms.py index f5804b3751..2c34f4bb68 100644 --- a/pyrit/scenario/scenarios/airt/content_harms.py +++ b/pyrit/scenario/scenarios/airt/content_harms.py @@ -242,7 +242,7 @@ def _get_strategy_attacks( List[AtomicAttack]: The constructed AtomicAttack instances for each attack type. """ # objective_target is guaranteed to be non-None by parent class validation - if not self._objective_target: + if self._objective_target is None: raise ValueError( "Scenario not properly initialized. Call await scenario.initialize_async() before running." ) diff --git a/pyrit/scenario/scenarios/airt/cyber.py b/pyrit/scenario/scenarios/airt/cyber.py index 9cee8226a7..ece8bf1b91 100644 --- a/pyrit/scenario/scenarios/airt/cyber.py +++ b/pyrit/scenario/scenarios/airt/cyber.py @@ -245,7 +245,7 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: ValueError: if an unknown CyberStrategy is passed. """ # objective_target is guaranteed to be non-None by parent class validation - if not self._objective_target: + if self._objective_target is None: raise ValueError( "Scenario not properly initialized. Call await scenario.initialize_async() before running." ) @@ -265,7 +265,7 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: raise ValueError(f"Unknown CyberStrategy: {strategy}") # _seed_groups is guaranteed to be set by _get_atomic_attacks_async before this method is called - if not self._seed_groups: + if self._seed_groups is None: raise ValueError("_seed_groups must be resolved before creating atomic attacks") return AtomicAttack( diff --git a/pyrit/scenario/scenarios/airt/jailbreak.py b/pyrit/scenario/scenarios/airt/jailbreak.py index b4b116a61c..58c6c99eb0 100644 --- a/pyrit/scenario/scenarios/airt/jailbreak.py +++ b/pyrit/scenario/scenarios/airt/jailbreak.py @@ -185,7 +185,7 @@ async def _get_atomic_attack_from_jailbreak_async(self, *, jailbreak_template_na AtomicAttack: An atomic attack using the specified jailbreak template. """ # objective_target is guaranteed to be non-None by parent class validation - if not self._objective_target: + if self._objective_target is None: raise ValueError( "Scenario not properly initialized. Call await scenario.initialize_async() before running." ) diff --git a/pyrit/scenario/scenarios/airt/leakage_scenario.py b/pyrit/scenario/scenarios/airt/leakage_scenario.py index b0e13e6b62..e58b58c11b 100644 --- a/pyrit/scenario/scenarios/airt/leakage_scenario.py +++ b/pyrit/scenario/scenarios/airt/leakage_scenario.py @@ -265,7 +265,7 @@ async def _get_atomic_attack_from_strategy_async(self, strategy: str) -> AtomicA ValueError: If an unknown LeakageStrategy is passed. """ # objective_target is guaranteed to be non-None by parent class validation - if not self._objective_target: + if self._objective_target is None: raise ValueError( "Scenario not properly initialized. Call await scenario.initialize_async() before running." ) diff --git a/pyrit/scenario/scenarios/airt/scam.py b/pyrit/scenario/scenarios/airt/scam.py index 99b258963c..df3531ffd5 100644 --- a/pyrit/scenario/scenarios/airt/scam.py +++ b/pyrit/scenario/scenarios/airt/scam.py @@ -270,7 +270,7 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: ValueError: If an unknown ScamStrategy is provided. """ # objective_target is guaranteed to be non-None by parent class validation - if not self._objective_target: + if self._objective_target is None: raise ValueError( "Scenario not properly initialized. Call await scenario.initialize_async() before running." ) diff --git a/pyrit/scenario/scenarios/garak/encoding.py b/pyrit/scenario/scenarios/garak/encoding.py index 1e56c19b22..3ce929136f 100644 --- a/pyrit/scenario/scenarios/garak/encoding.py +++ b/pyrit/scenario/scenarios/garak/encoding.py @@ -352,7 +352,7 @@ def _get_prompt_attacks(self, *, converters: list[PromptConverter], encoding_nam atomic_attacks = [] for attack_converter_config in converter_configs: # objective_target is guaranteed to be non-None by parent class validation - if not self._objective_target: + if self._objective_target is None: raise ValueError( "Scenario not properly initialized. Call await scenario.initialize_async() before running." ) From 4290950c9c00712e03069ede804429dc2d003256 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 23:00:37 +0000 Subject: [PATCH 5/5] Use VERSION as reference for version alias and add ValueError to docstrings Co-authored-by: ValbuenaVC <50061128+ValbuenaVC@users.noreply.github.com> --- pyrit/scenario/scenarios/airt/content_harms.py | 5 ++++- pyrit/scenario/scenarios/airt/cyber.py | 4 ++-- pyrit/scenario/scenarios/airt/jailbreak.py | 5 ++++- pyrit/scenario/scenarios/airt/leakage_scenario.py | 4 ++-- pyrit/scenario/scenarios/airt/scam.py | 4 ++-- pyrit/scenario/scenarios/foundry/red_team_agent.py | 2 +- pyrit/scenario/scenarios/garak/encoding.py | 5 ++++- 7 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pyrit/scenario/scenarios/airt/content_harms.py b/pyrit/scenario/scenarios/airt/content_harms.py index 2c34f4bb68..ab26409490 100644 --- a/pyrit/scenario/scenarios/airt/content_harms.py +++ b/pyrit/scenario/scenarios/airt/content_harms.py @@ -105,7 +105,7 @@ class ContentHarms(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> Type[ScenarioStrategy]: @@ -240,6 +240,9 @@ def _get_strategy_attacks( Returns: List[AtomicAttack]: The constructed AtomicAttack instances for each attack type. + + Raises: + ValueError: If scenario is not properly initialized. """ # objective_target is guaranteed to be non-None by parent class validation if self._objective_target is None: diff --git a/pyrit/scenario/scenarios/airt/cyber.py b/pyrit/scenario/scenarios/airt/cyber.py index ece8bf1b91..e69b95373c 100644 --- a/pyrit/scenario/scenarios/airt/cyber.py +++ b/pyrit/scenario/scenarios/airt/cyber.py @@ -61,7 +61,7 @@ class Cyber(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -242,7 +242,7 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: AtomicAttack: configured for the specified strategy. Raises: - ValueError: if an unknown CyberStrategy is passed. + ValueError: If scenario is not properly initialized or an unknown CyberStrategy is passed. """ # objective_target is guaranteed to be non-None by parent class validation if self._objective_target is None: diff --git a/pyrit/scenario/scenarios/airt/jailbreak.py b/pyrit/scenario/scenarios/airt/jailbreak.py index 58c6c99eb0..e9092831e9 100644 --- a/pyrit/scenario/scenarios/airt/jailbreak.py +++ b/pyrit/scenario/scenarios/airt/jailbreak.py @@ -50,7 +50,7 @@ class Jailbreak(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -183,6 +183,9 @@ async def _get_atomic_attack_from_jailbreak_async(self, *, jailbreak_template_na Returns: AtomicAttack: An atomic attack using the specified jailbreak template. + + Raises: + ValueError: If scenario is not properly initialized. """ # objective_target is guaranteed to be non-None by parent class validation if self._objective_target is None: diff --git a/pyrit/scenario/scenarios/airt/leakage_scenario.py b/pyrit/scenario/scenarios/airt/leakage_scenario.py index e58b58c11b..aaed955dd3 100644 --- a/pyrit/scenario/scenarios/airt/leakage_scenario.py +++ b/pyrit/scenario/scenarios/airt/leakage_scenario.py @@ -90,7 +90,7 @@ class LeakageScenario(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -262,7 +262,7 @@ async def _get_atomic_attack_from_strategy_async(self, strategy: str) -> AtomicA AtomicAttack: Configured for the specified strategy. Raises: - ValueError: If an unknown LeakageStrategy is passed. + ValueError: If scenario is not properly initialized or an unknown LeakageStrategy is passed. """ # objective_target is guaranteed to be non-None by parent class validation if self._objective_target is None: diff --git a/pyrit/scenario/scenarios/airt/scam.py b/pyrit/scenario/scenarios/airt/scam.py index df3531ffd5..39d5d3b1dd 100644 --- a/pyrit/scenario/scenarios/airt/scam.py +++ b/pyrit/scenario/scenarios/airt/scam.py @@ -90,7 +90,7 @@ class Scam(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -267,7 +267,7 @@ def _get_atomic_attack_from_strategy(self, strategy: str) -> AtomicAttack: AtomicAttack: Configured for the specified strategy. Raises: - ValueError: If an unknown ScamStrategy is provided. + ValueError: If scenario is not properly initialized or an unknown ScamStrategy is provided. """ # objective_target is guaranteed to be non-None by parent class validation if self._objective_target is None: diff --git a/pyrit/scenario/scenarios/foundry/red_team_agent.py b/pyrit/scenario/scenarios/foundry/red_team_agent.py index a4ec6d32ad..af9b1682f5 100644 --- a/pyrit/scenario/scenarios/foundry/red_team_agent.py +++ b/pyrit/scenario/scenarios/foundry/red_team_agent.py @@ -215,7 +215,7 @@ class RedTeamAgent(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> Type[ScenarioStrategy]: diff --git a/pyrit/scenario/scenarios/garak/encoding.py b/pyrit/scenario/scenarios/garak/encoding.py index 3ce929136f..5cbc9a6437 100644 --- a/pyrit/scenario/scenarios/garak/encoding.py +++ b/pyrit/scenario/scenarios/garak/encoding.py @@ -134,7 +134,7 @@ class Encoding(Scenario): """ VERSION: int = 1 - version: int = 1 # Alias for backward compatibility + version: int = VERSION # Alias for backward compatibility @classmethod def get_strategy_class(cls) -> type[ScenarioStrategy]: @@ -333,6 +333,9 @@ def _get_prompt_attacks(self, *, converters: list[PromptConverter], encoding_nam Returns: list[AtomicAttack]: List of atomic attacks for this encoding scheme. + + Raises: + ValueError: If scenario is not properly initialized. """ converter_configs = [ AttackConverterConfig(