@@ -243,6 +243,7 @@ def test_hugging_face_chat_target_capabilities(self):
243243 caps = HuggingFaceChatTarget ._DEFAULT_CAPABILITIES
244244 assert caps .supports_editable_history is True
245245 assert caps .supports_multi_turn is True
246+ assert caps .supports_system_prompt is True
246247
247248 def test_azure_ml_chat_target_capabilities (self ):
248249 from pyrit .prompt_target import AzureMLChatTarget
@@ -253,6 +254,31 @@ def test_azure_ml_chat_target_capabilities(self):
253254 )
254255 assert target .capabilities .supports_editable_history is True
255256 assert target .capabilities .supports_multi_message_pieces is True
257+ assert target .capabilities .supports_system_prompt is True
258+
259+ @patch .dict ("os.environ" , _CLEAN_UNDERLYING_MODEL_ENV )
260+ def test_prompt_chat_targets_support_system_prompt (self ):
261+ from pyrit .prompt_target import OpenAIChatTarget , OpenAIResponseTarget , RealtimeTarget
262+
263+ openai_chat_target = OpenAIChatTarget (
264+ model_name = "test-model" ,
265+ endpoint = "https://mock.azure.com/" ,
266+ api_key = "mock-api-key" ,
267+ )
268+ openai_response_target = OpenAIResponseTarget (
269+ model_name = "o1" ,
270+ endpoint = "https://mock.azure.com/" ,
271+ api_key = "mock-api-key" ,
272+ )
273+ realtime_target = RealtimeTarget (
274+ model_name = "gpt-4o-realtime" ,
275+ endpoint = "https://mock.azure.com/" ,
276+ api_key = "mock-api-key" ,
277+ )
278+
279+ assert openai_chat_target .capabilities .supports_system_prompt is True
280+ assert openai_response_target .capabilities .supports_system_prompt is True
281+ assert realtime_target .capabilities .supports_system_prompt is True
256282
257283 def test_custom_capabilities_override_modalities (self ):
258284 from pyrit .prompt_target import OpenAIChatTarget , TargetCapabilities
@@ -415,3 +441,12 @@ def test_recognized_model_overrides_class_default(self):
415441 cls = self ._make_target_class (default_caps = minimal_caps )
416442 result = cls .get_default_capabilities ("tts" )
417443 assert result .output_modalities == frozenset ({frozenset (["audio_path" ])})
444+
445+ def test_prompt_chat_target_preserves_system_prompt_for_recognized_model (self ):
446+ from pyrit .prompt_target .common .prompt_chat_target import PromptChatTarget
447+
448+ result = PromptChatTarget .get_default_capabilities ("gpt-4o" )
449+
450+ assert result .supports_multi_turn is True
451+ assert result .supports_multi_message_pieces is True
452+ assert result .supports_system_prompt is True
0 commit comments