Skip to content
Merged
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
6 changes: 6 additions & 0 deletions tests/unit/target/test_realtime_target.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,14 @@
from pyrit.prompt_target import RealtimeTarget
from pyrit.prompt_target.openai.openai_realtime_target import RealtimeTargetResult

# Env vars that may leak from .env files loaded by other tests in parallel workers.
_CLEAN_UNDERLYING_MODEL_ENV = {
"OPENAI_REALTIME_UNDERLYING_MODEL": "",
}


@pytest.fixture
@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def target(sqlite_instance):
return RealtimeTarget(api_key="test_key", endpoint="wss://test_url", model_name="test")

Expand Down
12 changes: 12 additions & 0 deletions tests/unit/target/test_supports_multi_turn.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

from unittest.mock import patch

import pytest

from tests.unit.mocks import MockPromptTarget

# Env vars that may leak from .env files loaded by other tests in parallel workers.
_CLEAN_UNDERLYING_MODEL_ENV = {
"OPENAI_VIDEO_UNDERLYING_MODEL": "",
"OPENAI_TTS_UNDERLYING_MODEL": "",
"OPENAI_COMPLETION_UNDERLYING_MODEL": "",
}


@pytest.mark.usefixtures("patch_central_database")
class TestSupportsMultiTurn:
Expand Down Expand Up @@ -41,6 +50,7 @@ def test_openai_image_target_returns_false(self):
)
assert target.capabilities.supports_multi_turn is False

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_video_target_returns_false(self):
from pyrit.prompt_target import OpenAIVideoTarget

Expand All @@ -51,6 +61,7 @@ def test_openai_video_target_returns_false(self):
)
assert target.capabilities.supports_multi_turn is False

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_tts_target_returns_false(self):
from pyrit.prompt_target import OpenAITTSTarget

Expand All @@ -61,6 +72,7 @@ def test_openai_tts_target_returns_false(self):
)
assert target.capabilities.supports_multi_turn is False

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_completion_target_returns_false(self):
from pyrit.prompt_target import OpenAICompletionTarget

Expand Down
19 changes: 19 additions & 0 deletions tests/unit/target/test_target_capabilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@

from pyrit.prompt_target.common.target_capabilities import TargetCapabilities

# Env vars that may leak from .env files loaded by other tests in parallel workers.
# Clear them so that targets use _DEFAULT_CAPABILITIES instead of _KNOWN_CAPABILITIES.
_CLEAN_UNDERLYING_MODEL_ENV = {
"OPENAI_VIDEO_UNDERLYING_MODEL": "",
"OPENAI_REALTIME_UNDERLYING_MODEL": "",
"OPENAI_CHAT_UNDERLYING_MODEL": "",
"OPENAI_IMAGE_UNDERLYING_MODEL": "",
"OPENAI_TTS_UNDERLYING_MODEL": "",
"OPENAI_COMPLETION_UNDERLYING_MODEL": "",
"OPENAI_RESPONSES_UNDERLYING_MODEL": "",
}


class TestDefaultCapabilitiesDefined:
"""Verify that every concrete PromptTarget subclass defines _DEFAULT_CAPABILITIES."""
Expand Down Expand Up @@ -79,6 +91,7 @@ def test_default_capabilities_are_text_only(self):
assert caps.input_modalities == frozenset({frozenset(["text"])})
assert caps.output_modalities == frozenset({frozenset(["text"])})

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_chat_target_modalities(self):
from pyrit.prompt_target import OpenAIChatTarget

Expand All @@ -92,6 +105,7 @@ def test_openai_chat_target_modalities(self):
assert target.capabilities.supports_json_output is True
assert target.capabilities.supports_multi_message_pieces is True

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_image_target_modalities(self):
from pyrit.prompt_target import OpenAIImageTarget

Expand All @@ -104,6 +118,7 @@ def test_openai_image_target_modalities(self):
assert target.capabilities.output_modalities == frozenset({frozenset(["image_path"])})
assert target.capabilities.supports_multi_message_pieces is True

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_tts_target_modalities(self):
from pyrit.prompt_target import OpenAITTSTarget

Expand All @@ -115,6 +130,7 @@ def test_openai_tts_target_modalities(self):
assert target.capabilities.input_modalities == frozenset({frozenset(["text"])})
assert target.capabilities.output_modalities == frozenset({frozenset(["audio_path"])})

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_video_target_modalities(self):
from pyrit.prompt_target import OpenAIVideoTarget

Expand All @@ -128,6 +144,7 @@ def test_openai_video_target_modalities(self):
assert target.capabilities.output_modalities == frozenset({frozenset(["video_path"])})
assert target.capabilities.supports_multi_message_pieces is True

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_realtime_target_modalities(self):
from pyrit.prompt_target import RealtimeTarget

Expand All @@ -141,6 +158,7 @@ def test_openai_realtime_target_modalities(self):
assert any("text" in combo for combo in target.capabilities.output_modalities)
assert any("audio_path" in combo for combo in target.capabilities.output_modalities)

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_response_target_modalities(self):
from pyrit.prompt_target import OpenAIResponseTarget

Expand All @@ -155,6 +173,7 @@ def test_openai_response_target_modalities(self):
assert target.capabilities.supports_json_output is True
assert target.capabilities.supports_multi_message_pieces is True

@patch.dict("os.environ", _CLEAN_UNDERLYING_MODEL_ENV)
def test_openai_completion_target_modalities(self):
from pyrit.prompt_target import OpenAICompletionTarget

Expand Down
Loading