Source code for pyrit.executor.attack.single_turn.single_turn_attack_strategy

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

from __future__ import annotations

import logging
import uuid
from abc import ABC
from dataclasses import dataclass, field
from typing import Any, Optional, Type, Union

from pyrit.common.logger import logger
from pyrit.executor.attack.core.attack_parameters import AttackParameters, AttackParamsT
from pyrit.executor.attack.core.attack_strategy import AttackContext, AttackStrategy
from pyrit.models import AttackResult
from pyrit.prompt_target import PromptTarget


[docs] @dataclass class SingleTurnAttackContext(AttackContext[AttackParamsT]): """ Context for single-turn attacks. Holds execution state for single-turn attacks. The immutable attack parameters (objective, next_message, prepended_conversation, memory_labels) are stored in the params field inherited from AttackContext. """ # Unique identifier of the main conversation between the attacker and model conversation_id: str = field(default_factory=lambda: str(uuid.uuid4())) # System prompt for chat-based targets system_prompt: Optional[str] = None # Arbitrary metadata that downstream attacks or scorers may attach metadata: Optional[dict[str, Union[str, int]]] = None
[docs] class SingleTurnAttackStrategy(AttackStrategy[SingleTurnAttackContext[Any], AttackResult], ABC): """ Strategy for executing single-turn attacks. This strategy is designed to handle attacks that consist of a single turn of interaction with the target model. """
[docs] def __init__( self, *, objective_target: PromptTarget, context_type: type[SingleTurnAttackContext[Any]] = SingleTurnAttackContext, params_type: Type[AttackParamsT] = AttackParameters, # type: ignore[assignment] logger: logging.Logger = logger, ): """ Define a base class for single-turn attack strategies. Args: objective_target (PromptTarget): The target system to attack. context_type (type[SingleTurnAttackContext]): The type of context this strategy will use. params_type (Type[AttackParamsT]): The type of parameters this strategy accepts. logger (logging.Logger): Logger instance for logging events and messages. """ super().__init__( objective_target=objective_target, context_type=context_type, params_type=params_type, logger=logger, )