Listing Available Classes#

Use get_names() to see what’s available, or list_metadata() for detailed information.

from pyrit.registry import ScenarioRegistry

registry = ScenarioRegistry.get_registry_singleton()

# Get all registered names
names = registry.get_names()
print(f"Available scenarios: {names[:5]}...")  # Show first 5

# Get detailed metadata
metadata = registry.list_metadata()
for item in metadata[:2]:  # Show first 2
    print(f"\n{item.name}:")
    print(f"  Class: {item.class_name}")
    print(f"  Description: {item.description[:80]}...")
Available scenarios: ['airt.content_harms', 'airt.cyber', 'airt.scam', 'foundry.red_team_agent', 'garak.encoding']...

airt.content_harms:
  Class: ContentHarms
  Description: Content Harms Scenario implementation for PyRIT. This scenario contains various ...

airt.cyber:
  Class: Cyber
  Description: Cyber scenario implementation for PyRIT. This scenario tests how willing models ...

Getting a Class#

Use get_class() to retrieve a class by name. This returns the class itself, not an instance.

# Get a scenario class

scenario_class = registry.get_class("garak.encoding")

print(f"Got class: {scenario_class}")
print(f"Class name: {scenario_class.__name__}")
Got class: <class 'pyrit.scenario.scenarios.garak.encoding.Encoding'>
Class name: Encoding

Creating Instances#

Once you have a class, instantiate it with your parameters. You can also use create_instance() as a shortcut.

from pyrit.prompt_target import OpenAIChatTarget
from pyrit.setup import IN_MEMORY, initialize_pyrit_async
from pyrit.setup.initializers import LoadDefaultDatasets

await initialize_pyrit_async(memory_db_type=IN_MEMORY, initializers=[LoadDefaultDatasets()])  # type: ignore
target = OpenAIChatTarget()

# Option 1: Get class then instantiate
encoding_class = registry.get_class("garak.encoding")
scenario = encoding_class()  # type: ignore

# Pass dataset configuration to initialize_async
await scenario.initialize_async(objective_target=target)  # type: ignore

# Option 2: Use create_instance() shortcut
# scenario = registry.create_instance("encoding", objective_target=my_target, ...)

print("Scenarios can be instantiated with your target and parameters")
Found default environment files: ['C:\\Users\\rlundeen\\.pyrit\\.env', 'C:\\Users\\rlundeen\\.pyrit\\.env.local']
Loaded environment file: C:\Users\rlundeen\.pyrit\.env
Loaded environment file: C:\Users\rlundeen\.pyrit\.env.local
Loading datasets - this can take a few minutes:   0%|                                      | 0/45 [00:00<?, ?dataset/s]
Loading datasets - this can take a few minutes:   2%|▋                             | 1/45 [00:00<00:16,  2.70dataset/s]
Loading datasets - this can take a few minutes:  38%|██████████▉                  | 17/45 [00:00<00:00, 46.49dataset/s]
Loading datasets - this can take a few minutes:  69%|███████████████████▉         | 31/45 [00:00<00:00, 56.82dataset/s]
Loading datasets - this can take a few minutes: 100%|█████████████████████████████| 45/45 [00:00<00:00, 66.94dataset/s]

Scenarios can be instantiated with your target and parameters

Checking Registration#

Registries support standard Python container operations.

# Check if a name is registered
print(f"'garak.encoding' registered: {'garak.encoding' in registry}")
print(f"'nonexistent' registered: {'nonexistent' in registry}")

# Get count of registered classes
print(f"Total scenarios: {len(registry)}")

# Iterate over names
for name in list(registry)[:3]:
    print(f"  - {name}")
'garak.encoding' registered: True
'nonexistent' registered: False
Total scenarios: 5
  - airt.content_harms
  - airt.cyber
  - airt.scam

Using different registries#

There can be multiple registries. Below is doing a similar thing with the InitializerRegistry.

from pyrit.registry import InitializerRegistry

initializer_registry = InitializerRegistry.get_registry_singleton()

# Get all registered names
initializer_names = initializer_registry.get_names()
print(f"Available initializers: {initializer_names[:5]}...")  # Show first 5

# Get detailed metadata
for init_item in initializer_registry.list_metadata()[:2]:  # Show first 2
    print(f"\n{init_item.name}:")
    print(f"  Class: {init_item.class_name}")
    print(f"  Description: {init_item.description[:80]}...")
Available initializers: ['airt', 'load_default_datasets', 'objective_list', 'openai_objective_target', 'simple']...

airt:
  Class: AIRTInitializer
  Description: AI Red Team setup with Azure OpenAI converters, composite harm/objective scorers...

load_default_datasets:
  Class: LoadDefaultDatasets
  Description: This configuration uses the DatasetLoader to load default datasets into memory.
...