Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .pyrit_conf_example
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ memory_db_type: sqlite
# - airt: AI Red Team setup with Azure OpenAI (requires AZURE_OPENAI_* env vars)
# - target: Registers available prompt targets into the TargetRegistry
# - scorer: Registers pre-configured scorers into the ScorerRegistry
# - load_default_datasets: Loads default datasets for all registered scenarios
# - load_default_datasets: Optional preload of default datasets for all registered
# scenarios (scenarios otherwise fetch their datasets on demand)
# - objective_list: Sets default objectives for scenarios
#
# Each initializer can be specified as:
Expand All @@ -46,7 +47,6 @@ memory_db_type: sqlite
# - scorer
initializers:
- name: simple
- name: load_default_datasets
- name: target
args:
tags:
Expand Down
6 changes: 4 additions & 2 deletions doc/getting_started/pyrit_conf.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ Most users should enable the following initializers. These are what the `.pyrit_
| `simple` | Baseline defaults for converters, scorers, and attack configs using your `OPENAI_CHAT_*` env vars | Always — provides the foundation for most PyRIT operations |
| `target` | Prompt targets (OpenAI, Azure, AML, etc.) into the `TargetRegistry` | **Required for `pyrit_scan`** and any registry-based workflows |
| `scorer` | Scorers (refusal, content safety, harm-category, Likert, etc.) into the `ScorerRegistry` | **Required for automated scoring** and `pyrit_scan` evaluations |
| `load_default_datasets` | Seed datasets for all registered scenarios into memory | **Required for `pyrit_scan` scenarios** — they need data to run |

```{note}
**Execution order follows listing order.** Initializers execute in the order they appear in the config. Ensure dependencies are satisfied — for example, list `target` before `scorer` since scorers need targets to be registered first.
Expand All @@ -122,7 +121,6 @@ The recommended config:
```yaml
initializers:
- name: simple
- name: load_default_datasets
- name: scorer
- name: target
args:
Expand All @@ -131,6 +129,10 @@ initializers:
- scorer
```

```{note}
**`load_default_datasets` is optional.** Scenarios fetch their datasets from the registered provider on demand the first time they run, so you no longer need this initializer for everyday runs. Add it only when you want to preload every scenario's datasets up front — for example, to warm memory for repeated runs or to populate a database for offline use.
```

### `initialization_scripts`

Paths to custom Python scripts containing `PyRITInitializer` subclasses. Paths can be absolute or relative to the current working directory.
Expand Down
1 change: 0 additions & 1 deletion doc/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ initializers:
- default
- scorer
- name: scorer
- name: load_default_datasets
```
::::

Expand Down
2 changes: 1 addition & 1 deletion doc/scanner/0_scanner.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ PyRIT provides two command-line interfaces:

```bash
# Run the Foundry RedTeamAgent scenario against your configured target
pyrit_scan foundry.red_team_agent --target openai_chat --initializers target load_default_datasets --strategies base64
pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --strategies base64
```

## Built-in Scenarios
Expand Down
12 changes: 6 additions & 6 deletions doc/scanner/1_pyrit_scan.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
"Or concretely:\n",
"\n",
"```shell\n",
"!pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --scenario-strategies base64\n",
"!pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --scenario-strategies base64\n",
"```\n",
"\n",
"Example with a basic configuration that runs the Foundry scenario against the objective target defined in the `target` initializer."
Expand All @@ -123,28 +123,28 @@
"metadata": {},
"outputs": [],
"source": [
"!pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --strategies base64"
"!pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --strategies base64"
]
},
{
"cell_type": "markdown",
"id": "8",
"metadata": {},
"source": [
"Or with all options and multiple initializers and multiple strategies:\n",
"Or with all options and multiple strategies:\n",
"\n",
"```shell\n",
"pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --strategies easy crescendo\n",
"pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --strategies easy crescendo\n",
"```\n",
"\n",
"You can also override scenario execution parameters:\n",
"\n",
"```shell\n",
"# Override concurrency and retry settings\n",
"pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --max-concurrency 10 --max-retries 3\n",
"pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --max-concurrency 10 --max-retries 3\n",
"\n",
"# Add custom memory labels for tracking (must be valid JSON)\n",
"pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --memory-labels '{\"experiment\": \"test1\", \"version\": \"v2\", \"researcher\": \"alice\"}'\n",
"pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --memory-labels '{\"experiment\": \"test1\", \"version\": \"v2\", \"researcher\": \"alice\"}'\n",
"```\n",
"\n",
"Available CLI parameter overrides:\n",
Expand Down
12 changes: 6 additions & 6 deletions doc/scanner/1_pyrit_scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,29 +78,29 @@
# Or concretely:
#
# ```shell
# !pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --scenario-strategies base64
# !pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --scenario-strategies base64
# ```
#
# Example with a basic configuration that runs the Foundry scenario against the objective target defined in the `target` initializer.

# %%
# !pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --strategies base64
# !pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --strategies base64

# %% [markdown]
# Or with all options and multiple initializers and multiple strategies:
# Or with all options and multiple strategies:
#
# ```shell
# pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --strategies easy crescendo
# pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --strategies easy crescendo
# ```
#
# You can also override scenario execution parameters:
#
# ```shell
# # Override concurrency and retry settings
# pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --max-concurrency 10 --max-retries 3
# pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --max-concurrency 10 --max-retries 3
#
# # Add custom memory labels for tracking (must be valid JSON)
# pyrit_scan foundry.red_team_agent --target openai_chat --initializers load_default_datasets target --memory-labels '{"experiment": "test1", "version": "v2", "researcher": "alice"}'
# pyrit_scan foundry.red_team_agent --target openai_chat --initializers target --memory-labels '{"experiment": "test1", "version": "v2", "researcher": "alice"}'
# ```
#
# Available CLI parameter overrides:
Expand Down
24 changes: 12 additions & 12 deletions doc/scanner/2_pyrit_shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ pyrit_shell --config-file ./.pyrit_conf
pyrit_shell --log-level DEBUG

# Load initializers at startup
pyrit_shell --initializers load_default_datasets
pyrit_shell --initializers target

# Load custom initialization scripts
pyrit_shell --initialization-scripts ./my_config.py
Expand Down Expand Up @@ -54,32 +54,32 @@ The `run` command executes scenarios with the same options as `pyrit_scan`:
### Basic Usage

```bash
pyrit> run foundry.red_team_agent --target my_target --initializers target load_default_datasets
pyrit> run foundry.red_team_agent --target my_target --initializers target
```

### With Strategies

```bash
pyrit> run garak.encoding --target my_target --initializers target load_default_datasets --strategies base64 rot13
pyrit> run garak.encoding --target my_target --initializers target --strategies base64 rot13

pyrit> run foundry.red_team_agent --target my_target --initializers target load_default_datasets -s jailbreak crescendo
pyrit> run foundry.red_team_agent --target my_target --initializers target -s jailbreak crescendo
```

### With Runtime Parameters

```bash
# Set concurrency and retries
pyrit> run foundry.red_team_agent --target my_target --initializers target load_default_datasets --max-concurrency 10 --max-retries 3
pyrit> run foundry.red_team_agent --target my_target --initializers target --max-concurrency 10 --max-retries 3

# Add memory labels for tracking
pyrit> run garak.encoding --target my_target --initializers target load_default_datasets --memory-labels '{"experiment":"test1","version":"v2"}'
pyrit> run garak.encoding --target my_target --initializers target --memory-labels '{"experiment":"test1","version":"v2"}'
```

### Override Defaults Per-Run

```bash
# Override log level for this run only
pyrit> run garak.encoding --target my_target --initializers target load_default_datasets --log-level DEBUG
pyrit> run garak.encoding --target my_target --initializers target --log-level DEBUG
```

### Run Command Options
Expand Down Expand Up @@ -119,9 +119,9 @@ pyrit> scenario-history

Scenario Run History:
================================================================================
1) foundry.red_team_agent --initializers target load_default_datasets --strategies base64
2) garak.encoding --initializers target load_default_datasets --strategies rot13
3) foundry.red_team_agent --initializers target load_default_datasets -s jailbreak
1) foundry.red_team_agent --initializers target --strategies base64
2) garak.encoding --initializers target --strategies rot13
3) foundry.red_team_agent --initializers target -s jailbreak
================================================================================

Total runs: 3
Expand All @@ -135,7 +135,7 @@ The shell excels at interactive testing workflows:

```bash
# Start shell with defaults
pyrit_shell --initializers target load_default_datasets
pyrit_shell --initializers target

# Quick exploration
pyrit> list-scenarios
Expand Down Expand Up @@ -166,7 +166,7 @@ pyrit> print-scenario 2

2. **Use short strategy aliases** with `-s`:
```bash
pyrit> run foundry.red_team_agent --initializers target load_default_datasets -s base64 rot13
pyrit> run foundry.red_team_agent --initializers target -s base64 rot13
```

3. **Review history regularly** to track what you've tested:
Expand Down
8 changes: 4 additions & 4 deletions doc/scanner/airt.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"\n",
"```bash\n",
"pyrit_scan airt.rapid_response \\\n",
" --initializers target load_default_datasets \\\n",
" --initializers target \\\n",
" --target openai_chat \\\n",
" --strategies role_play \\\n",
" --dataset-names airt_hate \\ \n",
Expand Down Expand Up @@ -367,7 +367,7 @@
"\n",
"```bash\n",
"pyrit_scan airt.cyber \\\n",
" --initializers target load_default_datasets \\\n",
" --initializers target \\\n",
" --target openai_chat \\\n",
" --strategies multi_turn \\\n",
" --max-dataset-size 1\n",
Expand Down Expand Up @@ -504,7 +504,7 @@
"\n",
"```bash\n",
"pyrit_scan airt.jailbreak \\\n",
" --initializers target load_default_datasets \\\n",
" --initializers target \\\n",
" --target openai_chat \\\n",
" --strategies prompt_sending \\\n",
" --max-dataset-size 1\n",
Expand Down Expand Up @@ -1125,7 +1125,7 @@
"\n",
"```bash\n",
"pyrit_scan airt.scam \\\n",
" --initializers target load_default_datasets \\\n",
" --initializers target \\\n",
" --target openai_chat \\\n",
" --strategies context_compliance \\\n",
" --max-dataset-size 1\n",
Expand Down
8 changes: 4 additions & 4 deletions doc/scanner/airt.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#
# ```bash
# pyrit_scan airt.rapid_response \
# --initializers target load_default_datasets \
# --initializers target \
# --target openai_chat \
# --strategies role_play \
# --dataset-names airt_hate \
Expand Down Expand Up @@ -123,7 +123,7 @@
#
# ```bash
# pyrit_scan airt.cyber \
# --initializers target load_default_datasets \
# --initializers target \
# --target openai_chat \
# --strategies multi_turn \
# --max-dataset-size 1
Expand Down Expand Up @@ -156,7 +156,7 @@
#
# ```bash
# pyrit_scan airt.jailbreak \
# --initializers target load_default_datasets \
# --initializers target \
# --target openai_chat \
# --strategies prompt_sending \
# --max-dataset-size 1
Expand Down Expand Up @@ -236,7 +236,7 @@
#
# ```bash
# pyrit_scan airt.scam \
# --initializers target load_default_datasets \
# --initializers target \
# --target openai_chat \
# --strategies context_compliance \
# --max-dataset-size 1
Expand Down
2 changes: 1 addition & 1 deletion doc/scanner/benchmark.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"\n",
"```bash\n",
"pyrit_scan benchmark.adversarial \\\n",
" --initializers target load_default_datasets \\\n",
" --initializers target \\\n",
" --target openai_chat \\\n",
" --adversarial-targets adversarial_chat_singleturn adversarial_chat_multiturn \\\n",
" --max-dataset-size 4\n",
Expand Down
2 changes: 1 addition & 1 deletion doc/scanner/benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#
# ```bash
# pyrit_scan benchmark.adversarial \
# --initializers target load_default_datasets \
# --initializers target \
# --target openai_chat \
# --adversarial-targets adversarial_chat_singleturn adversarial_chat_multiturn \
# --max-dataset-size 4
Expand Down
1 change: 0 additions & 1 deletion doc/scanner/pyrit_conf.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,3 @@ initializers:
- scorer
- name: scorer
- name: scenario_technique
- name: load_default_datasets
14 changes: 7 additions & 7 deletions pyrit/backend/services/scenario_run_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from pyrit.models import AttackOutcome, ScenarioResult
from pyrit.registry import InitializerRegistry, ScenarioRegistry, TargetRegistry
from pyrit.scenario import Scenario
from pyrit.scenario.core import DatasetConfiguration
from pyrit.scenario.core import DatasetAttackConfiguration

if TYPE_CHECKING:
from pyrit.prompt_target import PromptTarget
Expand Down Expand Up @@ -266,11 +266,11 @@ def _build_init_kwargs(
Resolves strategies and dataset configuration from the request.

Dataset configuration is built so that the scenario's default
``DatasetConfiguration`` *subclass* (e.g. ``EncodingDatasetConfiguration``)
``DatasetAttackConfiguration`` *subclass* (e.g. ``EncodingDatasetConfiguration``)
is preserved when the caller overrides ``dataset_names`` or
``max_dataset_size``. Subclasses commonly override
``get_all_seed_attack_groups()`` or ``_load_seed_groups_for_dataset()``
to shape seeds into scenario-appropriate ``SeedAttackGroup`` objects.
``_build_attack_groups()`` to shape seeds into scenario-appropriate
``SeedAttackGroup`` objects.

Args:
request: The run request.
Expand Down Expand Up @@ -345,18 +345,18 @@ def _build_init_kwargs(
except TypeError as exc:
# The subclass __init__ takes extra required kwargs we cannot
# supply from a backend request. Fall back to the base
# DatasetConfiguration so the run can still proceed; downstream
# DatasetAttackConfiguration so the run can still proceed; downstream
# scenarios that strictly require the subclass should either
# define a no-extra-required-args constructor or surface the
# incompatibility through their own initialize_async validation.
logger.warning(
"Cannot construct %s(dataset_names=..., max_dataset_size=...) (%s). "
"Falling back to a generic DatasetConfiguration; scenario-specific "
"Falling back to a generic DatasetAttackConfiguration; scenario-specific "
"dataset-config behavior may be lost.",
default_config_class.__name__,
exc,
)
init_kwargs["dataset_config"] = DatasetConfiguration(
init_kwargs["dataset_config"] = DatasetAttackConfiguration(
dataset_names=request.dataset_names,
max_dataset_size=request.max_dataset_size,
)
Expand Down
2 changes: 2 additions & 0 deletions pyrit/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@
SeedSimulatedConversation,
SeedUnion,
SimulatedTargetSystemPromptPaths,
group_seeds_into_attack_groups,
)
from pyrit.models.target_capabilities import CapabilityName, TargetCapabilities

Expand Down Expand Up @@ -153,6 +154,7 @@
"get_all_values",
"group_conversation_message_pieces_by_sequence",
"group_message_pieces_into_conversations",
"group_seeds_into_attack_groups",
"HarmDefinition",
"Identifiable",
"IdentifierFilter",
Expand Down
2 changes: 2 additions & 0 deletions pyrit/models/seeds/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from pyrit.models.seeds.seed_attack_technique_group import SeedAttackTechniqueGroup
from pyrit.models.seeds.seed_dataset import SeedDataset
from pyrit.models.seeds.seed_group import SeedGroup, SeedUnion
from pyrit.models.seeds.seed_grouping import group_seeds_into_attack_groups
from pyrit.models.seeds.seed_objective import SeedObjective
from pyrit.models.seeds.seed_prompt import SeedPrompt
from pyrit.models.seeds.seed_simulated_conversation import (
Expand All @@ -37,6 +38,7 @@
"load_seed_dataset_from_yaml",
"load_seed_from_yaml",
"load_seed_prompt_from_yaml_with_required_parameters",
"group_seeds_into_attack_groups",
"NextMessageSystemPromptPaths",
"Seed",
"SeedAttackGroup",
Expand Down
Loading
Loading