@@ -66,6 +66,17 @@ def mixed_config(
6666 )
6767
6868
69+ def create_strategy (
70+ config : TimingManagerConfig ,
71+ mock_credit_manager : MockCreditManager ,
72+ ) -> RequestRateStrategy :
73+ """Create a RequestRateStrategy with mock dataset metadata based on config."""
74+ dataset_metadata = create_mock_dataset_metadata (
75+ conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
76+ )
77+ return RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
78+
79+
6980class TestBenchmarkDurationConfiguration :
7081 """Test configuration validation and behavior of benchmark duration."""
7182
@@ -207,11 +218,7 @@ async def test_strategy_uses_duration_for_profiling_phase(
207218 """Test that RequestRateStrategy respects benchmark duration."""
208219 config = benchmark_duration_config (benchmark_duration = 2.0 )
209220
210- # Create strategy and check profiling phase config
211- dataset_metadata = create_mock_dataset_metadata (
212- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
213- )
214- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
221+ strategy = create_strategy (config , mock_credit_manager )
215222
216223 # Check that the profiling phase is configured correctly
217224 assert len (strategy .ordered_phase_configs ) > 0
@@ -228,11 +235,7 @@ async def test_strategy_ignores_request_count_when_duration_set(
228235 ):
229236 """Test that request count is ignored when duration is specified."""
230237 config = mixed_config (request_count = 50 , benchmark_duration = 1.5 )
231-
232- dataset_metadata = create_mock_dataset_metadata (
233- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
234- )
235- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
238+ strategy = create_strategy (config , mock_credit_manager )
236239
237240 profiling_config = strategy .ordered_phase_configs [- 1 ]
238241
@@ -245,11 +248,7 @@ async def test_strategy_fallback_to_request_count(
245248 ):
246249 """Test that strategy falls back to request count when no duration."""
247250 config = mixed_config (request_count = 25 , benchmark_duration = None )
248-
249- dataset_metadata = create_mock_dataset_metadata (
250- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
251- )
252- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
251+ strategy = create_strategy (config , mock_credit_manager )
253252
254253 profiling_config = strategy .ordered_phase_configs [- 1 ]
255254
@@ -264,11 +263,7 @@ async def test_strategy_with_warmup_and_duration(
264263 config = benchmark_duration_config (
265264 benchmark_duration = 4.0 , warmup_request_count = 10
266265 )
267-
268- dataset_metadata = create_mock_dataset_metadata (
269- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
270- )
271- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
266+ strategy = create_strategy (config , mock_credit_manager )
272267
273268 # Should have warmup and profiling phases
274269 assert len (strategy .ordered_phase_configs ) == 2
@@ -294,11 +289,7 @@ async def test_strategy_with_duration_and_concurrency(
294289 ):
295290 """Test strategy with duration and concurrency settings."""
296291 config = benchmark_duration_config (benchmark_duration = 3.0 , concurrency = 5 )
297-
298- dataset_metadata = create_mock_dataset_metadata (
299- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
300- )
301- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
292+ strategy = create_strategy (config , mock_credit_manager )
302293
303294 assert config .benchmark_duration == 3.0
304295 assert config .concurrency == 5
@@ -335,11 +326,7 @@ async def test_various_duration_warmup_combinations(
335326 config = benchmark_duration_config (
336327 benchmark_duration = duration , warmup_request_count = warmup_count
337328 )
338-
339- dataset_metadata = create_mock_dataset_metadata (
340- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
341- )
342- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
329+ strategy = create_strategy (config , mock_credit_manager )
343330
344331 # Verify configuration is correct
345332 assert config .benchmark_duration == duration
@@ -438,10 +425,7 @@ async def test_profiling_phase_setup_with_duration(
438425 ):
439426 """Test profiling phase setup when duration is specified."""
440427 config = benchmark_duration_config (benchmark_duration = 8.0 )
441- dataset_metadata = create_mock_dataset_metadata (
442- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
443- )
444- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
428+ strategy = create_strategy (config , mock_credit_manager )
445429
446430 # Find the profiling phase config
447431 profiling_config = next (
@@ -462,10 +446,7 @@ async def test_profiling_phase_setup_without_duration(
462446 ):
463447 """Test profiling phase setup when duration is not specified."""
464448 config = mixed_config (request_count = 40 , benchmark_duration = None )
465- dataset_metadata = create_mock_dataset_metadata (
466- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
467- )
468- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
449+ strategy = create_strategy (config , mock_credit_manager )
469450
470451 # Find the profiling phase config
471452 profiling_config = next (
@@ -488,10 +469,7 @@ async def test_warmup_phase_unaffected_by_duration(
488469 config = benchmark_duration_config (
489470 benchmark_duration = 12.0 , warmup_request_count = 15
490471 )
491- dataset_metadata = create_mock_dataset_metadata (
492- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
493- )
494- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
472+ strategy = create_strategy (config , mock_credit_manager )
495473
496474 # Find the warmup phase config
497475 warmup_config = next (
@@ -646,10 +624,7 @@ async def test_force_completion_when_timeout_triggered(self, time_traveler):
646624 # Create a time-based phase that has already exceeded duration
647625 config = benchmark_duration_config (benchmark_duration = 1.0 )
648626 mock_credit_manager = MockCreditManager (time_traveler = time_traveler )
649- dataset_metadata = create_mock_dataset_metadata (
650- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
651- )
652- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
627+ strategy = create_strategy (config , mock_credit_manager )
653628
654629 # Create a phase stats that would normally have in-flight requests
655630 phase_stats = CreditPhaseStats (
@@ -686,10 +661,7 @@ async def test_wait_for_phase_completion_with_timeout(self, time_traveler):
686661 """Test that _wait_for_phase_completion respects duration timeout."""
687662 config = benchmark_duration_config (benchmark_duration = 2.0 )
688663 mock_credit_manager = MockCreditManager (time_traveler = time_traveler )
689- dataset_metadata = create_mock_dataset_metadata (
690- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
691- )
692- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
664+ strategy = create_strategy (config , mock_credit_manager )
693665
694666 # Create a time-based phase that is close to expiring
695667 start_time = time_traveler .time_ns ()
@@ -729,10 +701,7 @@ async def test_wait_for_phase_completion_without_timeout_for_request_count(self)
729701 mock_credit_manager = MockCreditManager (
730702 time_traveler = None
731703 ) # No time manipulation needed
732- dataset_metadata = create_mock_dataset_metadata (
733- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
734- )
735- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
704+ strategy = create_strategy (config , mock_credit_manager )
736705
737706 # Create a request-count-based phase
738707 phase_stats = CreditPhaseStats (
@@ -836,11 +805,7 @@ async def test_grace_period_with_strategy(
836805 config = benchmark_duration_config (
837806 benchmark_duration = 2.0 , benchmark_grace_period = 15.0
838807 )
839-
840- dataset_metadata = create_mock_dataset_metadata (
841- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
842- )
843- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
808+ strategy = create_strategy (config , mock_credit_manager )
844809
845810 assert strategy .config .benchmark_grace_period == 15.0
846811 assert strategy .config .benchmark_duration == 2.0
@@ -853,11 +818,7 @@ async def test_grace_period_integration_with_duration(
853818 benchmark_duration = 1.0 , # Short duration for testing
854819 benchmark_grace_period = 5.0 ,
855820 )
856-
857- dataset_metadata = create_mock_dataset_metadata (
858- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
859- )
860- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
821+ strategy = create_strategy (config , mock_credit_manager )
861822
862823 # Should have profiling phase with duration configuration
863824 profiling_config = strategy .ordered_phase_configs [- 1 ]
@@ -879,11 +840,7 @@ async def test_grace_period_with_quick_completion(
879840 config = benchmark_duration_config (
880841 benchmark_duration = 1.0 , benchmark_grace_period = 5.0
881842 )
882-
883- dataset_metadata = create_mock_dataset_metadata (
884- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
885- )
886- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
843+ strategy = create_strategy (config , mock_credit_manager )
887844
888845 # Create a profiling phase that completes quickly
889846 phase_stats = CreditPhaseStats (
@@ -912,11 +869,7 @@ async def test_grace_period_timeout_with_in_flight_requests(
912869 config = benchmark_duration_config (
913870 benchmark_duration = 1.0 , benchmark_grace_period = 2.0
914871 )
915-
916- dataset_metadata = create_mock_dataset_metadata (
917- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
918- )
919- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
872+ strategy = create_strategy (config , mock_credit_manager )
920873
921874 # Create a profiling phase with in-flight requests
922875 phase_stats = CreditPhaseStats (
@@ -959,11 +912,7 @@ async def test_zero_grace_period_immediate_completion(
959912 config = benchmark_duration_config (
960913 benchmark_duration = 1.0 , benchmark_grace_period = 0.0
961914 )
962-
963- dataset_metadata = create_mock_dataset_metadata (
964- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
965- )
966- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
915+ strategy = create_strategy (config , mock_credit_manager )
967916
968917 # Create a profiling phase with in-flight requests
969918 phase_stats = CreditPhaseStats (
@@ -993,11 +942,7 @@ async def test_grace_period_completion_during_grace_period(
993942 config = benchmark_duration_config (
994943 benchmark_duration = 1.0 , benchmark_grace_period = 5.0
995944 )
996-
997- dataset_metadata = create_mock_dataset_metadata (
998- conversation_ids = [f"conv{ i } " for i in range (config .request_count or 10 )]
999- )
1000- strategy = RequestRateStrategy (config , mock_credit_manager , dataset_metadata )
945+ strategy = create_strategy (config , mock_credit_manager )
1001946
1002947 # Create a profiling phase with in-flight requests
1003948 phase_stats = CreditPhaseStats (
0 commit comments