From 52059790c219da2696b1cfc48bafd64a02b592f1 Mon Sep 17 00:00:00 2001 From: Nagkumar Arkalgud Date: Thu, 18 Apr 2024 10:23:58 -0700 Subject: [PATCH] Integrate tests to evals folder --- src/promptflow-evals/tests/evals/conftest.py | 17 ++ .../e2etests/test_adv_simulator.py | 0 .../e2etests/test_qa_generator.py | 0 .../data}/generated_qa_chat_conv.jsonl | 0 .../data}/generated_qa_chat_short.jsonl | 0 .../data}/generated_qa_pf_conv.jsonl | 0 .../data}/generated_qa_pf_short.jsonl | 0 .../unittests/test_qa_simulator.py | 2 +- .../unittests/test_simulator.py | 0 .../unittests/test_simulator_templates.py | 0 .../tests/simulator/__init__.py | 0 .../tests/simulator/conftest.py | 160 ------------------ .../tests/simulator/e2etests/__init__.py | 0 .../local/evals.node_cache.shelve.bak | 21 ++- .../local/evals.node_cache.shelve.dat | Bin 18719 -> 90389 bytes .../local/evals.node_cache.shelve.dir | 21 ++- 16 files changed, 52 insertions(+), 169 deletions(-) rename src/promptflow-evals/tests/{simulator => evals}/e2etests/test_adv_simulator.py (100%) rename src/promptflow-evals/tests/{simulator => evals}/e2etests/test_qa_generator.py (100%) rename src/promptflow-evals/tests/{simulator/test_configs => evals/unittests/data}/generated_qa_chat_conv.jsonl (100%) rename src/promptflow-evals/tests/{simulator/test_configs => evals/unittests/data}/generated_qa_chat_short.jsonl (100%) rename src/promptflow-evals/tests/{simulator/test_configs => evals/unittests/data}/generated_qa_pf_conv.jsonl (100%) rename src/promptflow-evals/tests/{simulator/test_configs => evals/unittests/data}/generated_qa_pf_short.jsonl (100%) rename src/promptflow-evals/tests/{simulator => evals}/unittests/test_qa_simulator.py (95%) rename src/promptflow-evals/tests/{simulator => evals}/unittests/test_simulator.py (100%) rename src/promptflow-evals/tests/{simulator => evals}/unittests/test_simulator_templates.py (100%) delete mode 100644 src/promptflow-evals/tests/simulator/__init__.py delete mode 100644 src/promptflow-evals/tests/simulator/conftest.py delete mode 100644 src/promptflow-evals/tests/simulator/e2etests/__init__.py diff --git a/src/promptflow-evals/tests/evals/conftest.py b/src/promptflow-evals/tests/evals/conftest.py index 006048bc063..fb151067ad0 100644 --- a/src/promptflow-evals/tests/evals/conftest.py +++ b/src/promptflow-evals/tests/evals/conftest.py @@ -170,3 +170,20 @@ def _mock_process_wrapper(*args, **kwargs): def _mock_create_spawned_fork_process_manager(*args, **kwargs): setup_recording_injection_if_enabled() return create_spawned_fork_process_manager(*args, **kwargs) + + +@pytest.fixture +def ml_client_config() -> dict: + conn_name = "azure_ai_project_scope" + + with open( + file=CONNECTION_FILE, + mode="r", + encoding="utf-8", # Add the encoding parameter + ) as f: + dev_connections = json.load(f) + + if conn_name not in dev_connections: + raise ValueError(f"Connection '{conn_name}' not found in dev connections.") + + return dev_connections[conn_name]["value"] diff --git a/src/promptflow-evals/tests/simulator/e2etests/test_adv_simulator.py b/src/promptflow-evals/tests/evals/e2etests/test_adv_simulator.py similarity index 100% rename from src/promptflow-evals/tests/simulator/e2etests/test_adv_simulator.py rename to src/promptflow-evals/tests/evals/e2etests/test_adv_simulator.py diff --git a/src/promptflow-evals/tests/simulator/e2etests/test_qa_generator.py b/src/promptflow-evals/tests/evals/e2etests/test_qa_generator.py similarity index 100% rename from src/promptflow-evals/tests/simulator/e2etests/test_qa_generator.py rename to src/promptflow-evals/tests/evals/e2etests/test_qa_generator.py diff --git a/src/promptflow-evals/tests/simulator/test_configs/generated_qa_chat_conv.jsonl b/src/promptflow-evals/tests/evals/unittests/data/generated_qa_chat_conv.jsonl similarity index 100% rename from src/promptflow-evals/tests/simulator/test_configs/generated_qa_chat_conv.jsonl rename to src/promptflow-evals/tests/evals/unittests/data/generated_qa_chat_conv.jsonl diff --git a/src/promptflow-evals/tests/simulator/test_configs/generated_qa_chat_short.jsonl b/src/promptflow-evals/tests/evals/unittests/data/generated_qa_chat_short.jsonl similarity index 100% rename from src/promptflow-evals/tests/simulator/test_configs/generated_qa_chat_short.jsonl rename to src/promptflow-evals/tests/evals/unittests/data/generated_qa_chat_short.jsonl diff --git a/src/promptflow-evals/tests/simulator/test_configs/generated_qa_pf_conv.jsonl b/src/promptflow-evals/tests/evals/unittests/data/generated_qa_pf_conv.jsonl similarity index 100% rename from src/promptflow-evals/tests/simulator/test_configs/generated_qa_pf_conv.jsonl rename to src/promptflow-evals/tests/evals/unittests/data/generated_qa_pf_conv.jsonl diff --git a/src/promptflow-evals/tests/simulator/test_configs/generated_qa_pf_short.jsonl b/src/promptflow-evals/tests/evals/unittests/data/generated_qa_pf_short.jsonl similarity index 100% rename from src/promptflow-evals/tests/simulator/test_configs/generated_qa_pf_short.jsonl rename to src/promptflow-evals/tests/evals/unittests/data/generated_qa_pf_short.jsonl diff --git a/src/promptflow-evals/tests/simulator/unittests/test_qa_simulator.py b/src/promptflow-evals/tests/evals/unittests/test_qa_simulator.py similarity index 95% rename from src/promptflow-evals/tests/simulator/unittests/test_qa_simulator.py rename to src/promptflow-evals/tests/evals/unittests/test_qa_simulator.py index 159a79382e6..7f413ebecf3 100644 --- a/src/promptflow-evals/tests/simulator/unittests/test_qa_simulator.py +++ b/src/promptflow-evals/tests/evals/unittests/test_qa_simulator.py @@ -91,7 +91,7 @@ def test_export_format(self, qa_type, structure): model_config = dict(api_base=API_BASE, api_key=API_KEY, deployment=DEPLOYMENT, model=MODEL) qa_generator = QADataGenerator(model_config=model_config) qas = list(zip(questions, answers)) - filepath = os.path.join(pathlib.Path(__file__).parent.parent.resolve(), "test_configs") + filepath = os.path.join(pathlib.Path(__file__).parent.resolve(), "data") output_file = os.path.join(filepath, f"test_{qa_type.value}_{structure.value}.jsonl") qa_generator.export_to_file(output_file, qa_type, qas, structure) diff --git a/src/promptflow-evals/tests/simulator/unittests/test_simulator.py b/src/promptflow-evals/tests/evals/unittests/test_simulator.py similarity index 100% rename from src/promptflow-evals/tests/simulator/unittests/test_simulator.py rename to src/promptflow-evals/tests/evals/unittests/test_simulator.py diff --git a/src/promptflow-evals/tests/simulator/unittests/test_simulator_templates.py b/src/promptflow-evals/tests/evals/unittests/test_simulator_templates.py similarity index 100% rename from src/promptflow-evals/tests/simulator/unittests/test_simulator_templates.py rename to src/promptflow-evals/tests/evals/unittests/test_simulator_templates.py diff --git a/src/promptflow-evals/tests/simulator/__init__.py b/src/promptflow-evals/tests/simulator/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/promptflow-evals/tests/simulator/conftest.py b/src/promptflow-evals/tests/simulator/conftest.py deleted file mode 100644 index 9f34e58102a..00000000000 --- a/src/promptflow-evals/tests/simulator/conftest.py +++ /dev/null @@ -1,160 +0,0 @@ -import json -import multiprocessing -from pathlib import Path -from unittest.mock import patch - -import pytest -from pytest_mock import MockerFixture - -from promptflow.core import AzureOpenAIModelConfiguration -from promptflow.executor._line_execution_process_pool import _process_wrapper -from promptflow.executor._process_manager import create_spawned_fork_process_manager -from promptflow.tracing._integrations._openai_injector import inject_openai_api - -try: - from promptflow.recording.local import recording_array_reset - from promptflow.recording.record_mode import is_in_ci_pipeline, is_live, is_record, is_replay -except ImportError: - # Run test in empty mode if promptflow-recording is not installed - def recording_array_reset(): - pass - - def is_in_ci_pipeline(): - return False - - def is_live(): - return False - - def is_record(): - return False - - def is_replay(): - return False - - -PROMOTFLOW_ROOT = Path(__file__) / "../../../.." -CONNECTION_FILE = (PROMOTFLOW_ROOT / "promptflow-evals/connections.json").resolve().absolute().as_posix() - - -@pytest.fixture -def model_config() -> dict: - conn_name = "azure_openai_model_config" - - with open( - file=CONNECTION_FILE, - mode="r", - encoding="utf-8", # Add the encoding parameter - ) as f: - dev_connections = json.load(f) - - if conn_name not in dev_connections: - raise ValueError(f"Connection '{conn_name}' not found in dev connections.") - - model_config = AzureOpenAIModelConfiguration(**dev_connections[conn_name]["value"]) - - return model_config - - -@pytest.fixture -def ml_client_config() -> dict: - conn_name = "azure_ai_project_scope" - - with open( - file=CONNECTION_FILE, - mode="r", - encoding="utf-8", # Add the encoding parameter - ) as f: - dev_connections = json.load(f) - - if conn_name not in dev_connections: - raise ValueError(f"Connection '{conn_name}' not found in dev connections.") - - return dev_connections[conn_name]["value"] - - -SpawnProcess = multiprocessing.get_context("spawn").Process - - -def setup_recording_injection_if_enabled(): - patches = [] - - def start_patches(patch_targets): - for target, mock_func in patch_targets.items(): - patcher = patch(target, mock_func) - patches.append(patcher) - patcher.start() - - if is_replay() or is_record(): - from promptflow.recording.local import RecordStorage, inject_async_with_recording, inject_sync_with_recording - from promptflow.recording.record_mode import check_pydantic_v2 - - check_pydantic_v2() - file_path = RECORDINGS_TEST_CONFIGS_ROOT / "evals.node_cache.shelve" - RecordStorage.get_instance(file_path) - - patch_targets = { - "promptflow.tracing._integrations._openai_injector.inject_sync": inject_sync_with_recording, - "promptflow.tracing._integrations._openai_injector.inject_async": inject_async_with_recording, - } - start_patches(patch_targets) - - if is_live() and is_in_ci_pipeline(): - from promptflow.recording.local import inject_async_with_recording, inject_sync_with_recording - - patch_targets = { - "promptflow.tracing._integrations._openai_injector.inject_sync": inject_sync_with_recording, - "promptflow.tracing._integrations._openai_injector.inject_async": inject_async_with_recording, - } - start_patches(patch_targets) - - inject_openai_api() - return patches - - -def _mock_process_wrapper(*args, **kwargs): - setup_recording_injection_if_enabled() - return _process_wrapper(*args, **kwargs) - - -def _mock_create_spawned_fork_process_manager(*args, **kwargs): - setup_recording_injection_if_enabled() - return create_spawned_fork_process_manager(*args, **kwargs) - - -class MockSpawnProcess(SpawnProcess): - def __init__(self, group=None, target=None, *args, **kwargs): - if target == _process_wrapper: - target = _mock_process_wrapper - if target == create_spawned_fork_process_manager: - target = _mock_create_spawned_fork_process_manager - super().__init__(group, target, *args, **kwargs) - - -@pytest.fixture -def recording_injection(mocker: MockerFixture): - original_process_class = multiprocessing.get_context("spawn").Process - multiprocessing.get_context("spawn").Process = MockSpawnProcess - if "spawn" == multiprocessing.get_start_method(): - multiprocessing.Process = MockSpawnProcess - - patches = setup_recording_injection_if_enabled() - - try: - yield - finally: - if pytest.is_replay or pytest.is_record: - from promptflow.recording.local import RecordStorage - - RecordStorage.get_instance().delete_lock_file() - if pytest.is_live: - from promptflow.recording.local import delete_count_lock_file - - delete_count_lock_file() - recording_array_reset() - - multiprocessing.get_context("spawn").Process = original_process_class - if "spawn" == multiprocessing.get_start_method(): - multiprocessing.Process = original_process_class - - for patcher in patches: - patcher.stop() diff --git a/src/promptflow-evals/tests/simulator/e2etests/__init__.py b/src/promptflow-evals/tests/simulator/e2etests/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/promptflow-recording/recordings/local/evals.node_cache.shelve.bak b/src/promptflow-recording/recordings/local/evals.node_cache.shelve.bak index 38cc4a0bc5e..5fcaa04528d 100644 --- a/src/promptflow-recording/recordings/local/evals.node_cache.shelve.bak +++ b/src/promptflow-recording/recordings/local/evals.node_cache.shelve.bak @@ -1,4 +1,17 @@ -'e812113f391afbb4b12aafd0b7e93c9b4fd5633f', (0, 3992) -'e5a1c88060db56a1f098ee4343ddca0bb97fa620', (4096, 5484) -'34501a2950464ae7eece224e06278dde3addcfb0', (9728, 4814) -'5cd313845b5581923f342e6fee8c7247b765e0f4', (14848, 3871) +'e812113f391afbb4b12aafd0b7e93c9b4fd5633f', (0, 3992) +'e5a1c88060db56a1f098ee4343ddca0bb97fa620', (4096, 5484) +'34501a2950464ae7eece224e06278dde3addcfb0', (9728, 4814) +'5cd313845b5581923f342e6fee8c7247b765e0f4', (14848, 3871) +'359d733942e7ab2d1e8aaaef37646963d3c2217a', (18944, 4031) +'150c9f5d4c033d237d8ba7c69e77329eb425777a', (23040, 2586) +'37466a662f9a12d4285959ba159203e8f44c913f', (26112, 4361) +'c0fd61dba210c701671e3d0de1b6a58b84931e11', (30720, 2779) +'d2105d2b315c0b0a86ac5a246e2c5b22661e7c7f', (33792, 4329) +'b52fcdb3e35e6a47cc67195189a63ab633b135ee', (38400, 5024) +'458bfde1e4da8554d3113babc6dfc6cf6953933c', (43520, 5788) +'85554f1b55073110df6738f841e7e4b880a21228', (49664, 6737) +'fe4b4e43d8955f8edde50292bf83e3ce1a6441c1', (56832, 3120) +'ce9dfc7543c5c7e9acc7ff9513f7ea9ba2be915b', (60416, 4649) +'1084eea656037fc4bdab3f5a0c182b7c5b64dd22', (65536, 6570) +'8d32fa0a507dd1dc6471601647bfa9b2f13198d3', (72192, 8518) +'58b2a6a32d8a862e37d2f9fd0a46c53c88e888af', (80896, 9493) diff --git a/src/promptflow-recording/recordings/local/evals.node_cache.shelve.dat b/src/promptflow-recording/recordings/local/evals.node_cache.shelve.dat index 2ab7c2042828c2747671885351a511486e3de611..4c8ba03f6d93071132c63ab0a9c38b8e9fc414e0 100644 GIT binary patch literal 90389 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 delta 9 QcmbPwh;{xX#trhG02HVLrvLx| diff --git a/src/promptflow-recording/recordings/local/evals.node_cache.shelve.dir b/src/promptflow-recording/recordings/local/evals.node_cache.shelve.dir index 38cc4a0bc5e..5fcaa04528d 100644 --- a/src/promptflow-recording/recordings/local/evals.node_cache.shelve.dir +++ b/src/promptflow-recording/recordings/local/evals.node_cache.shelve.dir @@ -1,4 +1,17 @@ -'e812113f391afbb4b12aafd0b7e93c9b4fd5633f', (0, 3992) -'e5a1c88060db56a1f098ee4343ddca0bb97fa620', (4096, 5484) -'34501a2950464ae7eece224e06278dde3addcfb0', (9728, 4814) -'5cd313845b5581923f342e6fee8c7247b765e0f4', (14848, 3871) +'e812113f391afbb4b12aafd0b7e93c9b4fd5633f', (0, 3992) +'e5a1c88060db56a1f098ee4343ddca0bb97fa620', (4096, 5484) +'34501a2950464ae7eece224e06278dde3addcfb0', (9728, 4814) +'5cd313845b5581923f342e6fee8c7247b765e0f4', (14848, 3871) +'359d733942e7ab2d1e8aaaef37646963d3c2217a', (18944, 4031) +'150c9f5d4c033d237d8ba7c69e77329eb425777a', (23040, 2586) +'37466a662f9a12d4285959ba159203e8f44c913f', (26112, 4361) +'c0fd61dba210c701671e3d0de1b6a58b84931e11', (30720, 2779) +'d2105d2b315c0b0a86ac5a246e2c5b22661e7c7f', (33792, 4329) +'b52fcdb3e35e6a47cc67195189a63ab633b135ee', (38400, 5024) +'458bfde1e4da8554d3113babc6dfc6cf6953933c', (43520, 5788) +'85554f1b55073110df6738f841e7e4b880a21228', (49664, 6737) +'fe4b4e43d8955f8edde50292bf83e3ce1a6441c1', (56832, 3120) +'ce9dfc7543c5c7e9acc7ff9513f7ea9ba2be915b', (60416, 4649) +'1084eea656037fc4bdab3f5a0c182b7c5b64dd22', (65536, 6570) +'8d32fa0a507dd1dc6471601647bfa9b2f13198d3', (72192, 8518) +'58b2a6a32d8a862e37d2f9fd0a46c53c88e888af', (80896, 9493)