Skip to content
Draft
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
15 changes: 10 additions & 5 deletions doc/code/converters/3_image_converters.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"\n",
"from pyrit.prompt_converter import QRCodeConverter\n",
"from pyrit.prompt_target.common.target_capabilities import TargetCapabilities\n",
"from pyrit.prompt_target.common.target_configuration import TargetConfiguration\n",
"from pyrit.setup import IN_MEMORY, initialize_pyrit_async\n",
"\n",
"await initialize_pyrit_async(memory_db_type=IN_MEMORY) # type: ignore\n",
Expand Down Expand Up @@ -409,11 +410,15 @@
"from pyrit.prompt_target import OpenAIChatTarget\n",
"\n",
"llm_target = OpenAIChatTarget(\n",
" # The target needs to accept a multi-piece message containing an image; override the default text-only capabilities.\n",
" custom_capabilities=TargetCapabilities(\n",
" supports_multi_message_pieces=True,\n",
" supports_multi_turn=True,\n",
" input_modalities=frozenset({frozenset({\"text\", \"image_path\"}), frozenset({\"text\"}), frozenset({\"image_path\"})}),\n",
" # The target needs to accept a multi-piece message containing an image; override the default text-only configuration.\n",
" custom_configuration=TargetConfiguration(\n",
" capabilities=TargetCapabilities(\n",
" supports_multi_message_pieces=True,\n",
" supports_multi_turn=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"text\"}), frozenset({\"image_path\"})}\n",
" ),\n",
" )\n",
" )\n",
")\n",
"\n",
Expand Down
15 changes: 10 additions & 5 deletions doc/code/converters/3_image_converters.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

from pyrit.prompt_converter import QRCodeConverter
from pyrit.prompt_target.common.target_capabilities import TargetCapabilities
from pyrit.prompt_target.common.target_configuration import TargetConfiguration
Comment on lines 38 to +39
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we have imports directly from pyrit.prompt_target? Doing deep imports limits our ability to change the internal structure later on. If it's not exported at that levelwe should probably fix that. This applies in all files.

from pyrit.setup import IN_MEMORY, initialize_pyrit_async

await initialize_pyrit_async(memory_db_type=IN_MEMORY) # type: ignore
Expand Down Expand Up @@ -179,11 +180,15 @@
from pyrit.prompt_target import OpenAIChatTarget

llm_target = OpenAIChatTarget(
# The target needs to accept a multi-piece message containing an image; override the default text-only capabilities.
custom_capabilities=TargetCapabilities(
supports_multi_message_pieces=True,
supports_multi_turn=True,
input_modalities=frozenset({frozenset({"text", "image_path"}), frozenset({"text"}), frozenset({"image_path"})}),
# The target needs to accept a multi-piece message containing an image; override the default text-only configuration.
custom_configuration=TargetConfiguration(
capabilities=TargetCapabilities(
supports_multi_message_pieces=True,
supports_multi_turn=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"text"}), frozenset({"image_path"})}
),
)
)
)

Expand Down
21 changes: 12 additions & 9 deletions doc/code/executor/attack/2_red_teaming_attack.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@
")\n",
"from pyrit.prompt_target import AzureMLChatTarget, OpenAIChatTarget\n",
"from pyrit.prompt_target.common.target_capabilities import TargetCapabilities\n",
"from pyrit.prompt_target.common.target_configuration import TargetConfiguration\n",
"from pyrit.score import SelfAskTrueFalseScorer, TrueFalseQuestion\n",
"from pyrit.setup import IN_MEMORY, initialize_pyrit_async\n",
"\n",
Expand Down Expand Up @@ -1238,7 +1239,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:pyrit.prompt_target.common.prompt_target:No known capabilities for model 'gpt-image-1.5'. Falling back to OpenAIImageTarget._DEFAULT_CAPABILITIES.\n"
"WARNING:pyrit.prompt_target.common.prompt_target:No known capabilities for model 'gpt-image-1.5'. Falling back to OpenAIImageTarget._DEFAULT_CONFIGURATION.\n"
]
},
{
Expand Down Expand Up @@ -1394,14 +1395,16 @@
"scoring_config = AttackScoringConfig(\n",
" objective_scorer=SelfAskTrueFalseScorer(\n",
" chat_target=OpenAIChatTarget(\n",
" # The scorer evaluates image outputs from the attack; override capabilities to support image input modalities.\n",
" custom_capabilities=TargetCapabilities(\n",
" supports_multi_message_pieces=True,\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"text\"}), frozenset({\"image_path\"})}\n",
" ),\n",
" # The scorer evaluates image outputs from the attack; override configuration to support image input modalities.\n",
" custom_configuration=TargetConfiguration(\n",
" capabilities=TargetCapabilities(\n",
" supports_multi_message_pieces=True,\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"text\"}), frozenset({\"image_path\"})}\n",
" ),\n",
" )\n",
" )\n",
" ),\n",
" true_false_question=TrueFalseQuestion(\n",
Expand Down
19 changes: 11 additions & 8 deletions doc/code/executor/attack/2_red_teaming_attack.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
)
from pyrit.prompt_target import AzureMLChatTarget, OpenAIChatTarget
from pyrit.prompt_target.common.target_capabilities import TargetCapabilities
from pyrit.prompt_target.common.target_configuration import TargetConfiguration
from pyrit.score import SelfAskTrueFalseScorer, TrueFalseQuestion
from pyrit.setup import IN_MEMORY, initialize_pyrit_async

Expand Down Expand Up @@ -279,14 +280,16 @@
scoring_config = AttackScoringConfig(
objective_scorer=SelfAskTrueFalseScorer(
chat_target=OpenAIChatTarget(
# The scorer evaluates image outputs from the attack; override capabilities to support image input modalities.
custom_capabilities=TargetCapabilities(
supports_multi_message_pieces=True,
supports_multi_turn=True,
supports_json_output=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"text"}), frozenset({"image_path"})}
),
# The scorer evaluates image outputs from the attack; override configuration to support image input modalities.
custom_configuration=TargetConfiguration(
capabilities=TargetCapabilities(
supports_multi_message_pieces=True,
supports_multi_turn=True,
supports_json_output=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"text"}), frozenset({"image_path"})}
),
)
)
),
true_false_question=TrueFalseQuestion(
Expand Down
35 changes: 21 additions & 14 deletions doc/code/targets/1_openai_chat_target.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@
"from pyrit.models import SeedGroup, SeedPrompt\n",
"from pyrit.prompt_target import OpenAIChatTarget\n",
"from pyrit.prompt_target.common.target_capabilities import TargetCapabilities\n",
"from pyrit.prompt_target.common.target_configuration import TargetConfiguration\n",
"from pyrit.score import SelfAskTrueFalseScorer, TrueFalseQuestion\n",
"from pyrit.setup import IN_MEMORY, initialize_pyrit_async\n",
"\n",
Expand All @@ -274,27 +275,33 @@
"chat_target = OpenAIChatTarget(\n",
" endpoint=endpoint,\n",
" api_key=api_key,\n",
" # Override default (text-only) capabilities to enable image input, multi-turn, and JSON output for this multi-modal example.\n",
" custom_capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset({frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}),\n",
" # Override default (text-only) configuration to enable image input, multi-turn, and JSON output for this multi-modal example.\n",
" custom_configuration=TargetConfiguration(\n",
" capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}\n",
" ),\n",
" )\n",
" ),\n",
")\n",
"\n",
"scorer = SelfAskTrueFalseScorer(\n",
" chat_target=OpenAIChatTarget(\n",
" endpoint=endpoint,\n",
" api_key=api_key,\n",
" # The scorer also needs to read image responses; override capabilities to support image input modalities.\n",
" custom_capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}\n",
" ),\n",
" # The scorer also needs to read image responses; override configuration to support image input modalities.\n",
" custom_configuration=TargetConfiguration(\n",
" capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}\n",
" ),\n",
" )\n",
" ),\n",
" ),\n",
" true_false_question=TrueFalseQuestion(\n",
Expand Down
35 changes: 21 additions & 14 deletions doc/code/targets/1_openai_chat_target.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
from pyrit.models import SeedGroup, SeedPrompt
from pyrit.prompt_target import OpenAIChatTarget
from pyrit.prompt_target.common.target_capabilities import TargetCapabilities
from pyrit.prompt_target.common.target_configuration import TargetConfiguration
from pyrit.score import SelfAskTrueFalseScorer, TrueFalseQuestion
from pyrit.setup import IN_MEMORY, initialize_pyrit_async

Expand All @@ -137,27 +138,33 @@
chat_target = OpenAIChatTarget(
endpoint=endpoint,
api_key=api_key,
# Override default (text-only) capabilities to enable image input, multi-turn, and JSON output for this multi-modal example.
custom_capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset({frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}),
# Override default (text-only) configuration to enable image input, multi-turn, and JSON output for this multi-modal example.
custom_configuration=TargetConfiguration(
capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}
),
)
),
)

scorer = SelfAskTrueFalseScorer(
chat_target=OpenAIChatTarget(
endpoint=endpoint,
api_key=api_key,
# The scorer also needs to read image responses; override capabilities to support image input modalities.
custom_capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}
),
# The scorer also needs to read image responses; override configuration to support image input modalities.
custom_configuration=TargetConfiguration(
capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}
),
)
),
),
true_false_question=TrueFalseQuestion(
Expand Down
35 changes: 21 additions & 14 deletions doc/code/targets/3_openai_image_target.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@
")\n",
"from pyrit.prompt_target import OpenAIChatTarget, OpenAIImageTarget\n",
"from pyrit.prompt_target.common.target_capabilities import TargetCapabilities\n",
"from pyrit.prompt_target.common.target_configuration import TargetConfiguration\n",
"from pyrit.score import SelfAskTrueFalseScorer, TrueFalseQuestion\n",
"from pyrit.setup import IN_MEMORY, initialize_pyrit_async\n",
"\n",
Expand All @@ -125,12 +126,16 @@
" endpoint=image_endpoint,\n",
" api_key=get_azure_openai_auth(image_endpoint),\n",
" output_format=\"jpeg\",\n",
" # Override default capabilities to enable multi-turn, JSON output, and multi-modal input for this attack-with-scoring example.\n",
" custom_capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset({frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}),\n",
" # Override default configuration to enable multi-turn, JSON output, and multi-modal input for this attack-with-scoring example.\n",
" custom_configuration=TargetConfiguration(\n",
" capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}\n",
" ),\n",
" )\n",
" ),\n",
")\n",
"\n",
Expand All @@ -139,14 +144,16 @@
" chat_target=OpenAIChatTarget(\n",
" endpoint=chat_endpoint,\n",
" api_key=get_azure_openai_auth(chat_endpoint),\n",
" # The scorer needs to evaluate image responses; override capabilities to support image input modalities.\n",
" custom_capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}\n",
" ),\n",
" # The scorer needs to evaluate image responses; override configuration to support image input modalities.\n",
" custom_configuration=TargetConfiguration(\n",
" capabilities=TargetCapabilities(\n",
" supports_multi_turn=True,\n",
" supports_json_output=True,\n",
" supports_multi_message_pieces=True,\n",
" input_modalities=frozenset(\n",
" {frozenset({\"text\", \"image_path\"}), frozenset({\"image_path\"}), frozenset({\"text\"})}\n",
" ),\n",
" )\n",
" ),\n",
" ),\n",
" true_false_question=TrueFalseQuestion(true_description=\"The response matches the objective {{objective}}\"),\n",
Expand Down
35 changes: 21 additions & 14 deletions doc/code/targets/3_openai_image_target.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
)
from pyrit.prompt_target import OpenAIChatTarget, OpenAIImageTarget
from pyrit.prompt_target.common.target_capabilities import TargetCapabilities
from pyrit.prompt_target.common.target_configuration import TargetConfiguration
from pyrit.score import SelfAskTrueFalseScorer, TrueFalseQuestion
from pyrit.setup import IN_MEMORY, initialize_pyrit_async

Expand All @@ -42,12 +43,16 @@
endpoint=image_endpoint,
api_key=get_azure_openai_auth(image_endpoint),
output_format="jpeg",
# Override default capabilities to enable multi-turn, JSON output, and multi-modal input for this attack-with-scoring example.
custom_capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset({frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}),
# Override default configuration to enable multi-turn, JSON output, and multi-modal input for this attack-with-scoring example.
custom_configuration=TargetConfiguration(
capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}
),
)
),
)

Expand All @@ -56,14 +61,16 @@
chat_target=OpenAIChatTarget(
endpoint=chat_endpoint,
api_key=get_azure_openai_auth(chat_endpoint),
# The scorer needs to evaluate image responses; override capabilities to support image input modalities.
custom_capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}
),
# The scorer needs to evaluate image responses; override configuration to support image input modalities.
custom_configuration=TargetConfiguration(
capabilities=TargetCapabilities(
supports_multi_turn=True,
supports_json_output=True,
supports_multi_message_pieces=True,
input_modalities=frozenset(
{frozenset({"text", "image_path"}), frozenset({"image_path"}), frozenset({"text"})}
),
)
),
),
true_false_question=TrueFalseQuestion(true_description="The response matches the objective {{objective}}"),
Expand Down
Loading
Loading