Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

pyrit.models

Public model exports for PyRIT core data structures and helpers.

Functions

construct_response_from_request

construct_response_from_request(request: MessagePiece, response_text_pieces: list[str], response_type: PromptDataType = 'text', prompt_metadata: Optional[dict[str, Union[str, int]]] = None, error: PromptResponseError = 'none') → Message

Construct a response message from a request message piece.

ParameterTypeDescription
requestMessagePieceSource request message piece.
response_text_pieceslist[str]Response values to include.
response_typePromptDataTypeData type for original and converted response values. Defaults to 'text'.
prompt_metadataOptional[Dict[str, Union[str, int]]]Additional metadata to merge. Defaults to None.
errorPromptResponseErrorError classification for the response. Defaults to 'none'.

Returns:

data_serializer_factory

data_serializer_factory(data_type: PromptDataType, value: Optional[str] = None, extension: Optional[str] = None, category: AllowedCategories) → DataTypeSerializer

Create a DataTypeSerializer instance.

ParameterTypeDescription
data_typestrThe type of the data (e.g., ‘text’, ‘image_path’, ‘audio_path’).
valuestrThe data value to be serialized. Defaults to None.
extensionOptional[str]The file extension, if applicable. Defaults to None.
categoryAllowedCategoriesThe category or context for the data (e.g., ‘seed-prompt-entries’).

Returns:

Raises:

get_all_harm_definitions

get_all_harm_definitions() → dict[str, HarmDefinition]

Load all harm definitions from the standard harm_definition directory.

This function scans the HARM_DEFINITION_PATH directory for all YAML files and loads each one as a HarmDefinition.

Returns:

Raises:

group_conversation_message_pieces_by_sequence

group_conversation_message_pieces_by_sequence(message_pieces: Sequence[MessagePiece]) → MutableSequence[Message]

Example:

>>> message_pieces = [
>>>     MessagePiece(conversation_id=1, sequence=1, text="Given this list of creatures, which is your
>>>     favorite:"),
>>>     MessagePiece(conversation_id=1, sequence=2, text="Good question!"),
>>>     MessagePiece(conversation_id=1, sequence=1, text="Raccoon, Narwhal, or Sloth?"),
>>>     MessagePiece(conversation_id=1, sequence=2, text="I'd have to say raccoons are my favorite!"),
>>> ]
>>> grouped_responses = group_conversation_message_pieces(message_pieces)
... [
...     Message(message_pieces=[
...         MessagePiece(conversation_id=1, sequence=1, text="Given this list of creatures, which is your
...         favorite:"),
...         MessagePiece(conversation_id=1, sequence=1, text="Raccoon, Narwhal, or Sloth?")
...     ]),
...     Message(message_pieces=[
...         MessagePiece(conversation_id=1, sequence=2, text="Good question!"),
...         MessagePiece(conversation_id=1, sequence=2, text="I'd have to say raccoons are my favorite!")
...     ])
... ]
ParameterTypeDescription
message_piecesSequence[MessagePiece]A list of MessagePiece objects representing individual message pieces.

Returns:

Raises:

group_message_pieces_into_conversations

group_message_pieces_into_conversations(message_pieces: Sequence[MessagePiece]) → list[list[Message]]

Example:

>>> message_pieces = [
>>>     MessagePiece(conversation_id="conv1", sequence=1, text="Hello"),
>>>     MessagePiece(conversation_id="conv2", sequence=1, text="Hi there"),
>>>     MessagePiece(conversation_id="conv1", sequence=2, text="How are you?"),
>>>     MessagePiece(conversation_id="conv2", sequence=2, text="I'm good"),
>>> ]
>>> conversations = group_message_pieces_into_conversations(message_pieces)
>>> # Returns a list of 2 conversations:
>>> # [
>>> #   [Message(seq=1), Message(seq=2)],  # conv1
>>> #   [Message(seq=1), Message(seq=2)]   # conv2
>>> # ]
ParameterTypeDescription
message_piecesSequence[MessagePiece]A list of MessagePiece objects from potentially different conversations.

Returns:

sort_message_pieces

sort_message_pieces(message_pieces: list[MessagePiece]) → list[MessagePiece]

Group by conversation_id. Order conversations by the earliest timestamp within each conversation_id. Within each conversation, order messages by sequence.

ParameterTypeDescription
message_pieceslist[MessagePiece]Message pieces to sort.

Returns:

AttackOutcome

Bases: str, Enum

Enum representing the possible outcomes of an attack.

Inherits from str so that values serialize naturally in Pydantic models and REST responses without a dedicated mapping function.

AttackResult

Bases: StrategyResult

Base class for all attack results.

Methods:

get_active_conversation_ids

get_active_conversation_ids() → set[str]

Return the main conversation ID plus pruned (user-visible) related conversation IDs.

Excludes adversarial chat conversations which are internal implementation details.

Returns:

get_all_conversation_ids

get_all_conversation_ids() → set[str]

Return the main conversation ID plus all related conversation IDs.

Returns:

get_attack_strategy_identifier

get_attack_strategy_identifier() → Optional[ComponentIdentifier]

Return the attack strategy identifier from the composite atomic identifier.

This is the non-deprecated replacement for the attack_identifier property. Extracts and returns the "attack" child from atomic_attack_identifier.

Returns:

get_conversations_by_type

get_conversations_by_type(conversation_type: ConversationType) → list[ConversationReference]

Return all related conversations of the requested type.

ParameterTypeDescription
conversation_typeConversationTypeThe type of conversation to filter by.

Returns:

get_pruned_conversation_ids

get_pruned_conversation_ids() → list[str]

Return IDs of pruned (branched) conversations only.

Returns:

includes_conversation

includes_conversation(conversation_id: str) → bool

Check whether a conversation belongs to this attack (main or any related).

ParameterTypeDescription
conversation_idstrThe conversation ID to check.

Returns:

AudioPathDataTypeSerializer

Bases: DataTypeSerializer

Serializer for audio path values stored on disk.

Constructor Parameters:

ParameterTypeDescription
categorystrData category folder name.
prompt_textOptional[str]Optional existing audio path. Defaults to None.
extensionOptional[str]Optional audio extension. Defaults to None.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether this serializer persists data on disk.

Returns:

AzureBlobStorageIO

Bases: StorageIO

Implementation of StorageIO for Azure Blob Storage.

Constructor Parameters:

ParameterTypeDescription
container_urlOptional[str]Azure Blob container URL. Defaults to None.
sas_tokenOptional[str]Optional SAS token. Defaults to None.
blob_content_typeSupportedContentTypeBlob content type for uploads. Defaults to SupportedContentType.PLAIN_TEXT.

Methods:

create_directory_if_not_exists

create_directory_if_not_exists(directory_path: Union[Path, str]) → None

Log a no-op directory creation for Azure Blob Storage.

ParameterTypeDescription
directory_pathUnion[Path, str]Requested directory path.

is_file

is_file(path: Union[Path, str]) → bool

Check whether the path refers to a file (blob) in Azure Blob Storage.

ParameterTypeDescription
pathUnion[Path, str]Blob URL or path to test.

Returns:

parse_blob_url

parse_blob_url(file_path: str) → tuple[str, str]

Parse a blob URL to extract the container and blob name.

ParameterTypeDescription
file_pathstrFull blob URL.

Returns:

Raises:

path_exists

path_exists(path: Union[Path, str]) → bool

Check whether a given path exists in the Azure Blob Storage container.

ParameterTypeDescription
pathUnion[Path, str]Blob URL or path to test.

Returns:

read_file

read_file(path: Union[Path, str]) → bytes

Asynchronously reads the content of a file (blob) from Azure Blob Storage.

If the provided path is a full URL (e.g., “https://account.blob.core.windows.net/container/dir1/dir2/sample.png”), it extracts the relative blob path (e.g., “dir1/dir2/sample.png”) to correctly access the blob. If a relative path is provided, it will use it as-is.

ParameterTypeDescription
pathstrThe path to the file (blob) in Azure Blob Storage. This can be either a full URL or a relative path.

Returns:

Raises:

write_file

write_file(path: Union[Path, str], data: bytes) → None

Write data to Azure Blob Storage at the specified path.

ParameterTypeDescription
pathstrThe full Azure Blob Storage URL
databytesThe data to write.

BinaryPathDataTypeSerializer

Bases: DataTypeSerializer

Serializer for generic binary path values stored on disk.

Constructor Parameters:

ParameterTypeDescription
categorystrThe category or context for the data.
prompt_textOptional[str]The binary file path or identifier. Defaults to None.
extensionOptional[str]The file extension, defaults to ‘bin’. Defaults to None.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether this serializer persists data on disk.

Returns:

ChatMessage

Bases: BaseModel

Represents a chat message for API consumption.

The content field can be:

Methods:

from_json

from_json(json_str: str) → ChatMessage

Deserialize a ChatMessage from a JSON string.

ParameterTypeDescription
json_strstrA JSON string representation of a ChatMessage.

Returns:

to_dict

to_dict() → dict[str, Any]

Convert the ChatMessage to a dictionary.

Returns:

to_json

to_json() → str

Serialize the ChatMessage to a JSON string.

Returns:

ChatMessageListDictContent

Bases: ChatMessage

Deprecated: Use ChatMessage instead.

This class exists for backward compatibility and will be removed in a future version.

Constructor Parameters:

ParameterTypeDescription
**dataAnyKeyword arguments accepted by ChatMessage. Defaults to {}.

ChatMessagesDataset

Bases: BaseModel

Represents a dataset of chat messages.

ConversationReference

Immutable reference to a conversation that played a role in the attack.

ConversationStats

Lightweight aggregate statistics for a conversation.

Used to build attack summaries without loading full message pieces.

ConversationType

Bases: Enum

Types of conversations that can be associated with an attack.

DataTypeSerializer

Bases: abc.ABC

Abstract base class for data type normalizers.

Responsible for reading and saving multi-modal data types to local disk or Azure Storage Account.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether the data is stored on disk.

Returns:

get_data_filename

get_data_filename(file_name: Optional[str] = None) → Union[Path, str]

Generate or retrieve a unique filename for the data file.

ParameterTypeDescription
file_nameOptional[str]Optional file name override. Defaults to None.

Returns:

Raises:

get_extension

get_extension(file_path: str) → str | None

Get the file extension from the file path.

ParameterTypeDescription
file_pathstrInput file path.

Returns:

get_mime_type

get_mime_type(file_path: str) → str | None

Get the MIME type of the file path.

ParameterTypeDescription
file_pathstrInput file path.

Returns:

get_sha256

get_sha256() → str

Compute SHA256 hash for this serializer’s current value.

Returns:

Raises:

read_data

read_data() → bytes

Read data from storage.

Returns:

Raises:

read_data_base64

read_data_base64() → str

Read data from storage and return it as a base64 string.

Returns:

save_b64_image

save_b64_image(data: str | bytes, output_filename: str = None) → None

Save a base64-encoded image to storage.

ParameterTypeDescription
data`strbytes`
output_filename(optional, str)filename to store image as. Defaults to UUID if not provided Defaults to None.

save_data

save_data(data: bytes, output_filename: Optional[str] = None) → None

Save data to storage.

ParameterTypeDescription
databytesbytes: The data to be saved.
output_filename(optional, str)filename to store data as. Defaults to UUID if not provided Defaults to None.

save_formatted_audio

save_formatted_audio(data: bytes, num_channels: int = 1, sample_width: int = 2, sample_rate: int = 16000, output_filename: Optional[str] = None) → None

Save PCM16 or similarly formatted audio data to storage.

ParameterTypeDescription
databytesbytes with audio data
output_filename(optional, str)filename to store audio as. Defaults to UUID if not provided Defaults to None.
num_channels(optional, int)number of channels in audio data. Defaults to 1 Defaults to 1.
sample_width(optional, int)sample width in bytes. Defaults to 2 Defaults to 2.
sample_rate(optional, int)sample rate in Hz. Defaults to 16000 Defaults to 16000.

DiskStorageIO

Bases: StorageIO

Implementation of StorageIO for local disk storage.

Methods:

create_directory_if_not_exists

create_directory_if_not_exists(path: Union[Path, str]) → None

Asynchronously creates a directory if it doesn’t exist on the local disk.

ParameterTypeDescription
pathPathThe directory path to create.

is_file

is_file(path: Union[Path, str]) → bool

Check whether the given path is a file (not a directory).

ParameterTypeDescription
pathPathThe path to check.

Returns:

path_exists

path_exists(path: Union[Path, str]) → bool

Check whether a path exists on the local disk.

ParameterTypeDescription
pathPathThe path to check.

Returns:

read_file

read_file(path: Union[Path, str]) → bytes

Asynchronously reads a file from the local disk.

ParameterTypeDescription
pathUnion[Path, str]The path to the file.

Returns:

write_file

write_file(path: Union[Path, str], data: bytes) → None

Asynchronously writes data to a file on the local disk.

ParameterTypeDescription
pathPathThe path to the file.
databytesThe content to write to the file.

EmbeddingData

Bases: BaseModel

Single embedding vector payload with index and object metadata.

EmbeddingResponse

Bases: BaseModel

Embedding API response containing vectors, model metadata, and usage.

Methods:

load_from_file

load_from_file(file_path: Path) → EmbeddingResponse

Load the embedding response from disk.

ParameterTypeDescription
file_pathPathThe path to load the file from.

Returns:

save_to_file

save_to_file(directory_path: Path) → str

Save the embedding response to disk and return the path of the new file.

ParameterTypeDescription
directory_pathPathThe path to save the file to.

Returns:

to_json

to_json() → str

Serialize this embedding response to JSON.

Returns:

EmbeddingSupport

Bases: ABC

Protocol-like interface for classes that generate text embeddings.

Methods:

generate_text_embedding

generate_text_embedding(text: str, kwargs: object = {}) → EmbeddingResponse

Generate text embedding synchronously.

ParameterTypeDescription
textstrThe text to generate the embedding for
**kwargsobjectAdditional arguments to pass to the function. Defaults to {}.

Returns:

generate_text_embedding_async

generate_text_embedding_async(text: str, kwargs: object = {}) → EmbeddingResponse

Generate text embedding asynchronously.

ParameterTypeDescription
textstrThe text to generate the embedding for
**kwargsobjectAdditional arguments to pass to the function. Defaults to {}.

Returns:

EmbeddingUsageInformation

Bases: BaseModel

Token usage metadata returned by an embedding API.

ErrorDataTypeSerializer

Bases: DataTypeSerializer

Serializer for error payloads stored as in-memory text.

Constructor Parameters:

ParameterTypeDescription
prompt_textstrError payload text.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether this serializer persists data on disk.

Returns:

HarmDefinition

A harm definition loaded from a YAML file.

This class represents the structured content of a harm definition YAML file, which includes the version, category name, and scale descriptions that define how to score content for this harm category.

Methods:

from_yaml

from_yaml(harm_definition_path: Union[str, Path]) → HarmDefinition

Load and validate a harm definition from a YAML file.

The function first checks if the path is a simple filename (e.g., “violence.yaml”) and if so, looks for it in the standard HARM_DEFINITION_PATH directory. Otherwise, it treats the path as a full or relative path.

ParameterTypeDescription
harm_definition_pathUnion[str, Path]Path to the harm definition YAML file. Can be a simple filename like “violence.yaml” which will be resolved relative to the standard harm_definition directory, or a full path.

Returns:

Raises:

get_scale_description

get_scale_description(score_value: str) → Optional[str]

Get the description for a specific score value.

ParameterTypeDescription
score_valuestrThe score value to look up (e.g., “1”, “2”).

Returns:

validate_category

validate_category(category: str, check_exists: bool = False) → bool

Validate a harm category name.

Validates that the category name follows the naming convention (lowercase letters and underscores only) and optionally checks if it exists in the standard harm definitions.

ParameterTypeDescription
categorystrThe category name to validate.
check_existsboolIf True, also verify the category exists in get_all_harm_definitions(). Defaults to False. Defaults to False.

Returns:

ImagePathDataTypeSerializer

Bases: DataTypeSerializer

Serializer for image path values stored on disk.

Constructor Parameters:

ParameterTypeDescription
categorystrData category folder name.
prompt_textOptional[str]Optional existing image path. Defaults to None.
extensionOptional[str]Optional image extension. Defaults to None.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether this serializer persists data on disk.

Returns:

Message

Represents a message in a conversation, for example a prompt or a response to a prompt.

This is a single request to a target. It can contain multiple message pieces.

Constructor Parameters:

ParameterTypeDescription
message_piecesSequence[MessagePiece]Pieces belonging to the same message turn.
skip_validationOptional[bool]Whether to skip consistency validation. Defaults to False.

Methods:

duplicate_message

duplicate_message() → Message

Create a deep copy of this message with new IDs and timestamp for all message pieces.

This is useful when you need to reuse a message template but want fresh IDs to avoid database conflicts (e.g., during retry attempts).

The original_prompt_id is intentionally kept the same to track the origin. Generates a new timestamp to reflect when the duplicate is created.

Returns:

flatten_to_message_pieces

flatten_to_message_pieces(messages: Sequence[Message]) → MutableSequence[MessagePiece]

Flatten messages into a single list of message pieces.

ParameterTypeDescription
messagesSequence[Message]Messages to flatten.

Returns:

from_prompt

from_prompt(prompt: str, role: ChatMessageRole, prompt_metadata: Optional[dict[str, Union[str, int]]] = None) → Message

Build a single-piece message from prompt text.

ParameterTypeDescription
promptstrPrompt text.
roleChatMessageRoleRole assigned to the message piece.
prompt_metadataOptional[Dict[str, Union[str, int]]]Optional prompt metadata. Defaults to None.

Returns:

from_system_prompt

from_system_prompt(system_prompt: str) → Message

Build a message from a system prompt.

ParameterTypeDescription
system_promptstrSystem instruction text.

Returns:

get_all_values

get_all_values(messages: Sequence[Message]) → list[str]

Return all converted values across the provided messages.

ParameterTypeDescription
messagesSequence[Message]Messages to aggregate.

Returns:

get_piece

get_piece(n: int = 0) → MessagePiece

Return the nth message piece.

ParameterTypeDescription
nintZero-based index of the piece to return. Defaults to 0.

Returns:

Raises:

get_piece_by_type

get_piece_by_type(data_type: Optional[PromptDataType] = None, original_value_data_type: Optional[PromptDataType] = None, converted_value_data_type: Optional[PromptDataType] = None) → Optional[MessagePiece]

Return the first message piece matching the given data type, or None.

ParameterTypeDescription
data_typeOptional[PromptDataType]Alias for converted_value_data_type (for convenience). Defaults to None.
original_value_data_typeOptional[PromptDataType]The original_value_data_type to filter by. Defaults to None.
converted_value_data_typeOptional[PromptDataType]The converted_value_data_type to filter by. Defaults to None.

Returns:

get_pieces_by_type

get_pieces_by_type(data_type: Optional[PromptDataType] = None, original_value_data_type: Optional[PromptDataType] = None, converted_value_data_type: Optional[PromptDataType] = None) → list[MessagePiece]

Return all message pieces matching the given data type.

ParameterTypeDescription
data_typeOptional[PromptDataType]Alias for converted_value_data_type (for convenience). Defaults to None.
original_value_data_typeOptional[PromptDataType]The original_value_data_type to filter by. Defaults to None.
converted_value_data_typeOptional[PromptDataType]The converted_value_data_type to filter by. Defaults to None.

Returns:

get_value

get_value(n: int = 0) → str

Return the converted value of the nth message piece.

ParameterTypeDescription
nintZero-based index of the piece to read. Defaults to 0.

Returns:

Raises:

get_values

get_values() → list[str]

Return the converted values of all message pieces.

Returns:

is_error

is_error() → bool

Check whether any message piece indicates an error.

Returns:

set_response_not_in_database

set_response_not_in_database() → None

Set that the prompt is not in the database.

This is needed when we’re scoring prompts or other things that have not been sent by PyRIT

set_simulated_role

set_simulated_role() → None

Set the role of all message pieces to simulated_assistant.

This marks the message as coming from a simulated conversation rather than an actual target response.

to_dict

to_dict() → dict[str, object]

Convert the message to a dictionary representation.

Returns:

validate

validate() → None

Validate that all message pieces are internally consistent.

Raises:

MessagePiece

Represents a piece of a message to a target.

This class represents a single piece of a message that will be sent to a target. Since some targets can handle multiple pieces (e.g., text and images), requests are composed of lists of MessagePiece objects.

Constructor Parameters:

ParameterTypeDescription
roleChatMessageRoleThe role of the prompt (system, assistant, user).
original_valuestrThe text of the original prompt. If prompt is an image, it’s a link.
original_value_sha256Optional[str]The SHA256 hash of the original prompt data. Defaults to None. Defaults to None.
converted_valueOptional[str]The text of the converted prompt. If prompt is an image, it’s a link. Defaults to None. Defaults to None.
converted_value_sha256Optional[str]The SHA256 hash of the converted prompt data. Defaults to None. Defaults to None.
id`Optional[uuid.UUIDstr]`
conversation_idOptional[str]The identifier for the conversation which is associated with a single target. Defaults to None. Defaults to None.
sequenceintThe order of the conversation within a conversation_id. Defaults to -1. Defaults to -1.
labelsOptional[dict[str, str]]The labels associated with the memory entry. Several can be standardized. Defaults to None. Defaults to None.
prompt_metadataOptional[dict[str, Union[str, int]]]The metadata associated with the prompt. This can be specific to any scenarios. Because memory is how components talk with each other, this can be component specific. e.g. the URI from a file uploaded to a blob store, or a document type you want to upload. Defaults to None. Defaults to None.
converter_identifiersOptional[list[Union[ComponentIdentifier, dict[str, str]]]]The converter identifiers for the prompt. Can be ComponentIdentifier objects or dicts (deprecated, will be removed in 0.14.0). Defaults to None. Defaults to None.
prompt_target_identifierOptional[Union[ComponentIdentifier, dict[str, Any]]]The target identifier for the prompt. Defaults to None. Defaults to None.
attack_identifierOptional[Union[ComponentIdentifier, dict[str, str]]]The attack identifier for the prompt. Defaults to None. Defaults to None.
scorer_identifierOptional[Union[ComponentIdentifier, dict[str, str]]]The scorer identifier for the prompt. Can be a ComponentIdentifier or a dict (deprecated, will be removed in 0.13.0). Defaults to None. Defaults to None.
original_value_data_typePromptDataTypeThe data type of the original prompt (text, image). Defaults to “text”. Defaults to 'text'.
converted_value_data_typeOptional[PromptDataType]The data type of the converted prompt (text, image). Defaults to “text”. Defaults to None.
response_errorPromptResponseErrorThe response error type. Defaults to “none”. Defaults to 'none'.
originatorOriginatorThe originator of the prompt. Defaults to “undefined”. Defaults to 'undefined'.
original_prompt_idOptional[uuid.UUID]The original prompt id. It is equal to id unless it is a duplicate. Defaults to None. Defaults to None.
timestampOptional[datetime]The timestamp of the memory entry. Defaults to None (auto-generated). Defaults to None.
scoresOptional[list[Score]]The scores associated with the prompt. Defaults to None. Defaults to None.
targeted_harm_categoriesOptional[list[str]]The harm categories associated with the prompt. Defaults to None. Defaults to None.

Methods:

get_role_for_storage

get_role_for_storage() → ChatMessageRole

Get the actual stored role, including simulated_assistant.

Use this when duplicating messages or preserving role information for storage. For API calls or comparisons, use api_role instead.

Returns:

has_error

has_error() → bool

Check if the message piece has an error.

Returns:

is_blocked

is_blocked() → bool

Check if the message piece is blocked.

Returns:

set_piece_not_in_database

set_piece_not_in_database() → None

Set that the prompt is not in the database.

This is needed when we’re scoring prompts or other things that have not been sent by PyRIT

set_sha256_values_async

set_sha256_values_async() → None

Compute SHA256 hash values for original and converted payloads. It should be called after object creation if original_value and converted_value are set.

Note, this method is async due to the blob retrieval. And because of that, we opted to take it out of main and setter functions. The disadvantage is that it must be explicitly called.

to_dict

to_dict() → dict[str, object]

Convert this message piece to a dictionary representation.

Returns:

to_message

to_message() → Message

Convert this message piece into a Message.

Returns:

NextMessageSystemPromptPaths

Bases: enum.Enum

Enum for predefined next message generation system prompt paths.

QuestionAnsweringDataset

Bases: BaseModel

Represents a dataset for question answering.

QuestionAnsweringEntry

Bases: BaseModel

Represents a question model.

Methods:

get_correct_answer_text

get_correct_answer_text() → str

Get the text of the correct answer.

Returns:

Raises:

QuestionChoice

Bases: BaseModel

Represents a choice for a question.

ScaleDescription

A single scale description entry from a harm definition.

ScenarioIdentifier

Scenario result class for aggregating results from multiple AtomicAttacks.

Constructor Parameters:

ParameterTypeDescription
namestrName of the scenario.
descriptionstrDescription of the scenario. Defaults to ''.
scenario_versionintVersion of the scenario. Defaults to 1.
init_dataOptional[dict]Initialization data. Defaults to None.
pyrit_versionOptional[str]PyRIT version string. If None, uses current version. Defaults to None.

ScenarioResult

Scenario result class for aggregating scenario results.

Constructor Parameters:

ParameterTypeDescription
scenario_identifierScenarioIdentifierIdentifier for the executed scenario.
objective_target_identifierUnion[Dict[str, Any], TargetIdentifier]Target identifier.
attack_resultsdict[str, List[AttackResult]]Results grouped by atomic attack name.
objective_scorer_identifierUnion[Dict[str, Any], ScorerIdentifier]Objective scorer identifier.
scenario_run_stateScenarioRunStateCurrent scenario run state. Defaults to 'CREATED'.
labelsOptional[dict[str, str]]Optional labels. Defaults to None.
completion_timeOptional[datetime]Optional completion timestamp. Defaults to None.
number_triesintNumber of run attempts. Defaults to 0.
idOptional[uuid.UUID]Optional scenario result ID. Defaults to None.
objective_scorerOptional[Scorer]Deprecated scorer object parameter. Defaults to None.

Methods:

get_objectives

get_objectives(atomic_attack_name: Optional[str] = None) → list[str]

Get the list of unique objectives for this scenario.

ParameterTypeDescription
atomic_attack_nameOptional[str]Name of specific atomic attack to include. If None, includes objectives from all atomic attacks. Defaults to None. Defaults to None.

Returns:

get_scorer_evaluation_metrics

get_scorer_evaluation_metrics() → Optional[ScorerMetrics]

Get the evaluation metrics for the scenario’s scorer from the scorer evaluation registry.

Returns:

get_strategies_used

get_strategies_used() → list[str]

Get the list of strategies used in this scenario.

Returns:

normalize_scenario_name

normalize_scenario_name(scenario_name: str) → str

Normalize a scenario name to match the stored class name format.

Converts CLI-style snake_case names (e.g., “foundry” or “content_harms”) to PascalCase class names (e.g., “Foundry” or “ContentHarms”) for database queries. If the input is already in PascalCase or doesn’t match the snake_case pattern, it is returned unchanged.

This is the inverse of ScenarioRegistry._class_name_to_scenario_name().

ParameterTypeDescription
scenario_namestrThe scenario name to normalize.

Returns:

objective_achieved_rate

objective_achieved_rate(atomic_attack_name: Optional[str] = None) → int

Get the success rate of this scenario.

ParameterTypeDescription
atomic_attack_nameOptional[str]Name of specific atomic attack to calculate rate for. If None, calculates rate across all atomic attacks. Defaults to None. Defaults to None.

Returns:

Score

Represents a normalized score generated by a scorer component.

Constructor Parameters:

ParameterTypeDescription
score_valuestrNormalized score value.
score_value_descriptionstrHuman-readable score value description.
score_typeScoreTypeScore type (true_false or float_scale).
score_rationalestrRationale for the score.
message_piece_id`struuid.UUID`
id`Optional[uuid.UUIDstr]`
score_categoryOptional[List[str]]Optional score categories. Defaults to None.
score_metadataOptional[Dict[str, Union[str, int, float]]]Optional metadata. Defaults to None.
scorer_class_identifierUnion[ScorerIdentifier, Dict[str, Any]]Scorer identifier.
timestampOptional[datetime]Optional creation timestamp. Defaults to None.
objectiveOptional[str]Optional task objective. Defaults to None.

Methods:

get_value

get_value() → bool | float

Return the value of the score based on its type.

If the score type is “true_false”, it returns True if the score value is “true” (case-insensitive), otherwise it returns False.

If the score type is “float_scale”, it returns the score value as a float.

Returns:

Raises:

to_dict

to_dict() → dict[str, Any]

Convert this score to a dictionary.

Returns:

validate

validate(scorer_type: str, score_value: str) → None

Validate score value against scorer type constraints.

ParameterTypeDescription
scorer_typestrScorer type to validate against.
score_valuestrRaw score value.

Raises:

Seed

Bases: YamlLoadable

Represents seed data with various attributes and metadata.

Methods:

from_yaml_with_required_parameters

from_yaml_with_required_parameters(template_path: Union[str, Path], required_parameters: list[str], error_message: Optional[str] = None) → Seed

Load a Seed from a YAML file and validate that it contains specific parameters.

ParameterTypeDescription
template_pathUnion[str, Path]Path to the YAML file containing the template.
required_parameterslist[str]List of parameter names that must exist in the template.
error_messageOptional[str]Custom error message if validation fails. If None, a default message is used. Defaults to None.

Returns:

render_template_value

render_template_value(kwargs: Any = {}) → str

Render self.value as a template with provided parameters.

ParameterTypeDescription
kwargsAnyKey-value pairs to replace in the SeedPrompt value. Defaults to {}.

Returns:

Raises:

render_template_value_silent

render_template_value_silent(kwargs: Any = {}) → str

Render self.value as a template with provided parameters. For parameters in the template that are not provided as kwargs here, this function will leave them as is instead of raising an error.

ParameterTypeDescription
kwargsAnyKey-value pairs to replace in the SeedPrompt value. Defaults to {}.

Returns:

Raises:

set_sha256_value_async

set_sha256_value_async() → None

Compute the SHA256 hash value asynchronously. It should be called after prompt value is serialized to text, as file paths used in the value may have changed from local to memory storage paths.

Note, this method is async due to the blob retrieval. And because of that, we opted to take it out of main and setter functions. The disadvantage is that it must be explicitly called.

SeedAttackGroup

Bases: SeedGroup

A group of seeds for use in attack scenarios.

This class extends SeedGroup with attack-specific validation:

All other functionality (simulated conversation, prepended conversation, next_message, etc.) is inherited from SeedGroup.

Constructor Parameters:

ParameterTypeDescription
seedsSequence[Union[Seed, dict[str, Any]]]Sequence of seeds. Must include exactly one SeedObjective.

Methods:

validate

validate() → None

Validate the seed attack group state.

Extends SeedGroup validation to require exactly one objective.

Raises:

SeedAttackTechniqueGroup

Bases: SeedGroup

A group of seeds representing a general attack technique.

This class extends SeedGroup with technique-specific validation:

All other functionality (simulated conversation, prepended conversation, next_message, etc.) is inherited from SeedGroup.

Constructor Parameters:

ParameterTypeDescription
seedsSequence[Union[Seed, dict[str, Any]]]Sequence of seeds. All seeds must have is_general_technique=True.

Methods:

validate

validate() → None

Validate the seed attack technique group state.

Extends SeedGroup validation to require all seeds to be general strategies.

Raises:

SeedDataset

Bases: YamlLoadable

SeedDataset manages seed prompts plus optional top-level defaults. Prompts are stored as a Sequence[Seed], so references to prompt properties are straightforward (e.g. ds.seeds[0].value).

Constructor Parameters:

ParameterTypeDescription
seedsOptional[Union[Sequence[dict[str, Any]], Sequence[Seed]]]List of seed dictionaries or Seed objects. Defaults to None.
data_typeOptional[PromptDataType]Default data type for seeds. Defaults to 'text'.
nameOptional[str]Name of the dataset. Defaults to None.
dataset_nameOptional[str]Dataset name for categorization. Defaults to None.
harm_categoriesOptional[Sequence[str]]List of harm categories. Defaults to None.
descriptionOptional[str]Description of the dataset. Defaults to None.
authorsOptional[Sequence[str]]List of authors. Defaults to None.
groupsOptional[Sequence[str]]List of groups. Defaults to None.
sourceOptional[str]Source of the dataset. Defaults to None.
date_addedOptional[datetime]Date when the dataset was added. Defaults to None.
added_byOptional[str]User who added the dataset. Defaults to None.
seed_typeOptional[SeedType]The type of seeds in this dataset (“prompt”, “objective”, or “simulated_conversation”). Defaults to None.
is_objectiveboolDeprecated in 0.13.0. Use seed_type=“objective” instead. Defaults to False.

Methods:

from_dict

from_dict(data: dict[str, Any]) → SeedDataset

Build a SeedDataset by merging top-level defaults into each item in seeds.

ParameterTypeDescription
dataDict[str, Any]Dataset payload with top-level defaults and seed entries.

Returns:

Raises:

get_random_values

get_random_values(number: PositiveInt, harm_categories: Optional[Sequence[str]] = None) → Sequence[str]

Extract and return random prompt values from the dataset.

ParameterTypeDescription
numberintThe number of random prompt values to return.
harm_categoriesOptional[Sequence[str]]If provided, only prompts containing at least one of these harm categories are included. Defaults to None.

Returns:

get_values

get_values(first: Optional[PositiveInt] = None, last: Optional[PositiveInt] = None, harm_categories: Optional[Sequence[str]] = None) → Sequence[str]

Extract and return prompt values from the dataset.

ParameterTypeDescription
firstOptional[int]If provided, values from the first N prompts are included. Defaults to None.
lastOptional[int]If provided, values from the last N prompts are included. Defaults to None.
harm_categoriesOptional[Sequence[str]]If provided, only prompts containing at least one of these harm categories are included. Defaults to None.

Returns:

group_seed_prompts_by_prompt_group_id

group_seed_prompts_by_prompt_group_id(seeds: Sequence[Seed]) → Sequence[SeedGroup]

Group the given list of seeds by prompt_group_id and create SeedGroup or SeedAttackGroup instances.

For each group, this method first attempts to create a SeedAttackGroup (which has attack-specific properties like objective). If validation fails, it falls back to a basic SeedGroup.

ParameterTypeDescription
seedsSequence[Seed]A list of Seed objects.

Returns:

render_template_value

render_template_value(kwargs: object = {}) → None

Render seed values as templates using provided parameters.

ParameterTypeDescription
kwargsobjectKey-value pairs to replace in the SeedDataset value. Defaults to {}.

Raises:

SeedGroup

Bases: YamlLoadable

A container for grouping prompts that need to be sent together.

This class handles:

All prompts in the group share the same prompt_group_id.

Constructor Parameters:

ParameterTypeDescription
seedsSequence[Union[Seed, dict[str, Any]]]Sequence of seeds. Can include: - SeedObjective (or dict with seed_type=“objective”) - SeedSimulatedConversation (or dict with seed_type=“simulated_conversation”) - SeedPrompt for prompts (or dict with seed_type=“prompt” or no seed_type) Note: is_objective and is_simulated_conversation are deprecated since 0.13.0.

Methods:

is_single_part_single_text_request

is_single_part_single_text_request() → bool

Check if this is a single text prompt.

Returns:

is_single_request

is_single_request() → bool

Check if all prompts are in a single sequence.

Returns:

is_single_turn

is_single_turn() → bool

Check if this is a single-turn group (single request without objective).

Returns:

render_template_value

render_template_value(kwargs: Any = {}) → None

Render seed values as templates with provided parameters.

ParameterTypeDescription
kwargsAnyKey-value pairs to replace in seed values. Defaults to {}.

validate

validate() → None

Validate the seed group state.

This method can be called after external modifications to seeds to ensure the group remains in a valid state. It is automatically called during initialization.

Raises:

SeedObjective

Bases: Seed

Represents a seed objective with various attributes and metadata.

Methods:

from_yaml_with_required_parameters

from_yaml_with_required_parameters(template_path: Union[str, Path], required_parameters: list[str], error_message: Optional[str] = None) → SeedObjective

Load a Seed from a YAML file. Because SeedObjectives do not have any parameters, the required_parameters and error_message arguments are unused.

ParameterTypeDescription
template_pathUnion[str, Path]Path to the YAML file containing the template.
required_parameterslist[str]List of parameter names that must exist in the template.
error_messageOptional[str]Custom error message if validation fails. If None, a default message is used. Defaults to None.

Returns:

SeedPrompt

Bases: Seed

Represents a seed prompt with various attributes and metadata.

Methods:

from_messages

from_messages(messages: list[Message], starting_sequence: int = 0, prompt_group_id: Optional[uuid.UUID] = None) → list[SeedPrompt]

Convert a list of Messages to a list of SeedPrompts.

Each MessagePiece becomes a SeedPrompt. All pieces from the same message share the same sequence number, preserving the grouping.

ParameterTypeDescription
messageslist[Message]List of Messages to convert.
starting_sequenceintThe starting sequence number. Defaults to 0. Defaults to 0.
prompt_group_idOptional[uuid.UUID]Optional group ID to assign to all prompts. Defaults to None. Defaults to None.

Returns:

from_yaml_with_required_parameters

from_yaml_with_required_parameters(template_path: Union[str, Path], required_parameters: list[str], error_message: Optional[str] = None) → SeedPrompt

Load a Seed from a YAML file and validate that it contains specific parameters.

ParameterTypeDescription
template_pathUnion[str, Path]Path to the YAML file containing the template.
required_parameterslist[str]List of parameter names that must exist in the template.
error_messageOptional[str]Custom error message if validation fails. If None, a default message is used. Defaults to None.

Returns:

Raises:

set_encoding_metadata

set_encoding_metadata() → None

Set encoding metadata for the prompt within metadata dictionary. For images, this is just the file format. For audio and video, this also includes bitrate (kBits/s as int), samplerate (samples/second as int), bitdepth (as int), filesize (bytes as int), and duration (seconds as int) if the file type is supported by TinyTag. Example supported file types include: MP3, MP4, M4A, and WAV.

SeedSimulatedConversation

Bases: Seed

Configuration for generating a simulated conversation dynamically.

This class holds the paths and parameters needed to generate prepended conversation content by running an adversarial chat against a simulated (compliant) target.

This is a pure configuration class. The actual generation is performed by generate_simulated_conversation_async in the executor layer, which accepts this config along with runtime dependencies (adversarial_chat target, scorer).

The value property returns a JSON serialization of the config for database storage and deduplication.

Constructor Parameters:

ParameterTypeDescription
adversarial_chat_system_prompt_pathUnion[str, Path]Path to YAML file containing the adversarial chat system prompt.
simulated_target_system_prompt_pathOptional[Union[str, Path]]Optional path to YAML file containing the simulated target system prompt. Defaults to the compliant prompt. Defaults to None.
next_message_system_prompt_pathOptional[Union[str, Path]]Optional path to YAML file containing the system prompt for generating a final user message. If provided, after the simulated conversation is generated, a single LLM call generates a user message that attempts to get the target to fulfill the objective. Defaults to None (no next message generation). Defaults to None.
num_turnsintNumber of conversation turns to generate. Defaults to 3. Defaults to 3.
sequenceintThe starting sequence number for generated turns. When combined with static SeedPrompts, this determines where the simulated turns are inserted. Defaults to 0. Defaults to 0.
pyrit_versionOptional[str]PyRIT version for reproducibility tracking. Defaults to current version. Defaults to None.
**kwargsAnyAdditional arguments passed to the Seed base class. Defaults to {}.

Methods:

compute_hash

compute_hash() → str

Compute a deterministic hash of this configuration.

Returns:

from_dict

from_dict(data: dict[str, Any]) → SeedSimulatedConversation

Create a SeedSimulatedConversation from a dictionary, typically from YAML.

ParameterTypeDescription
datadict[str, Any]Dictionary containing the configuration.

Returns:

Raises:

from_yaml_with_required_parameters

from_yaml_with_required_parameters(template_path: Union[str, Path], required_parameters: list[str], error_message: Optional[str] = None) → SeedSimulatedConversation

Load a SeedSimulatedConversation from a YAML file and validate required parameters.

ParameterTypeDescription
template_pathUnion[str, Path]Path to the YAML file containing the config.
required_parameterslist[str]List of parameter names that must exist.
error_messageOptional[str]Custom error message if validation fails. Defaults to None.

Returns:

Raises:

get_identifier

get_identifier() → dict[str, Any]

Get an identifier dict capturing this configuration for comparison/storage.

Returns:

load_simulated_target_system_prompt

load_simulated_target_system_prompt(objective: str, num_turns: int, simulated_target_system_prompt_path: Optional[Union[str, Path]] = None) → Optional[str]

Load and render the simulated target system prompt.

If no path is provided, returns None (no system prompt). Validates that the template has required objective and num_turns parameters.

ParameterTypeDescription
objectivestrThe objective to render into the template.
num_turnsintThe number of turns to render into the template.
simulated_target_system_prompt_pathOptional[Union[str, Path]]Optional path to the prompt YAML file. If None, no system prompt is used. Defaults to None.

Returns:

Raises:

SimulatedTargetSystemPromptPaths

Bases: enum.Enum

Enum for predefined simulated target system prompt paths.

StorageIO

Bases: ABC

Abstract interface for storage systems (local disk, Azure Storage Account, etc.).

Methods:

create_directory_if_not_exists

create_directory_if_not_exists(path: Union[Path, str]) → None

Asynchronously creates a directory or equivalent in the storage system if it doesn’t exist.

is_file

is_file(path: Union[Path, str]) → bool

Asynchronously checks if the path refers to a file (not a directory or container).

path_exists

path_exists(path: Union[Path, str]) → bool

Asynchronously checks if a file or blob exists at the given path.

read_file

read_file(path: Union[Path, str]) → bytes

Asynchronously reads the file (or blob) from the given path.

write_file

write_file(path: Union[Path, str], data: bytes) → None

Asynchronously writes data to the given path.

StrategyResult

Bases: ABC

Base class for all strategy results.

Methods:

duplicate

duplicate() → StrategyResultT

Create a deep copy of the result.

Returns:

TextDataTypeSerializer

Bases: DataTypeSerializer

Serializer for text and text-like prompt values that stay in-memory.

Constructor Parameters:

ParameterTypeDescription
prompt_textstrPrompt value.
data_typePromptDataTypeText-like prompt data type. Defaults to 'text'.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether this serializer persists data on disk.

Returns:

UnvalidatedScore

Score is an object that validates all the fields. However, we need a common data class that can be used to store the raw score value before it is normalized and validated.

Methods:

to_score

to_score(score_value: str, score_type: ScoreType) → Score

Convert this unvalidated score into a validated Score.

ParameterTypeDescription
score_valuestrNormalized score value.
score_typeScoreTypeScore type.

Returns:

VideoPathDataTypeSerializer

Bases: DataTypeSerializer

Serializer for video path values stored on disk.

Constructor Parameters:

ParameterTypeDescription
categorystrThe category or context for the data.
prompt_textOptional[str]The video path or identifier. Defaults to None.
extensionOptional[str]The file extension, defaults to ‘mp4’. Defaults to None.

Methods:

data_on_disk

data_on_disk() → bool

Indicate whether this serializer persists data on disk.

Returns: