2222from vllm .v1 .engine import (
2323 EngineCoreEvent ,
2424 EngineCoreEventType ,
25+ EngineCoreOutputs ,
2526 EngineCoreRequest ,
2627 FinishReason ,
2728)
2829from vllm .v1 .engine .output_processor import OutputProcessor , RequestOutputCollector
29- from vllm .v1 .metrics .stats import IterationStats
30+ from vllm .v1 .metrics .stats import IterationStats , SchedulerStats
3031
3132
3233def _ref_convert_id_to_token (
@@ -940,21 +941,26 @@ def test_lora_request_tracking(log_stats: bool, dummy_test_vectors):
940941 output_processor .add_request (request , None )
941942
942943 # First iteration: process outputs with QUEUED events
943- outputs = engine_core .get_outputs ()
944- for output in outputs :
944+ outputs = EngineCoreOutputs (
945+ outputs = engine_core .get_outputs (), scheduler_stats = SchedulerStats ()
946+ )
947+ for output in outputs .outputs :
945948 output .events = [
946949 EngineCoreEvent .new_event (EngineCoreEventType .QUEUED , engine_core_timestamp )
947950 ]
948951
949952 iteration_stats = IterationStats () if log_stats else None
950- output_processor .process_outputs (outputs , engine_core_timestamp , iteration_stats )
953+ output_processor .process_outputs (
954+ outputs .outputs , engine_core_timestamp , iteration_stats
955+ )
956+ output_processor .update_scheduler_stats (outputs .scheduler_stats )
951957
952958 if log_stats :
953959 # Verify waiting counts
954- assert iteration_stats .waiting_lora_adapters .get ("lora-1" ) == 1
955- assert iteration_stats .waiting_lora_adapters .get ("lora-2" ) == 1
956- assert iteration_stats .running_lora_adapters .get ("lora-1" ) == 0
957- assert iteration_stats .running_lora_adapters .get ("lora-2" ) == 0
960+ assert outputs . scheduler_stats .waiting_lora_adapters .get ("lora-1" ) == 1
961+ assert outputs . scheduler_stats .waiting_lora_adapters .get ("lora-2" ) == 1
962+ assert outputs . scheduler_stats .running_lora_adapters .get ("lora-1" ) == 0
963+ assert outputs . scheduler_stats .running_lora_adapters .get ("lora-2" ) == 0
958964 # Verify internal state
959965 assert len (output_processor .lora_states .requests ) == 2
960966 assert "lora-1" in output_processor .lora_states .requests
@@ -965,76 +971,96 @@ def test_lora_request_tracking(log_stats: bool, dummy_test_vectors):
965971 assert len (output_processor .lora_states .requests ) == 0
966972
967973 # Second iteration: process outputs with SCHEDULED events
968- outputs = engine_core .get_outputs ()
969- for output in outputs :
974+ outputs = EngineCoreOutputs (
975+ outputs = engine_core .get_outputs (), scheduler_stats = SchedulerStats ()
976+ )
977+ for output in outputs .outputs :
970978 output .events = [
971979 EngineCoreEvent .new_event (
972980 EngineCoreEventType .SCHEDULED , engine_core_timestamp
973981 )
974982 ]
975983
976984 iteration_stats = IterationStats () if log_stats else None
977- output_processor .process_outputs (outputs , engine_core_timestamp , iteration_stats )
985+ output_processor .process_outputs (
986+ outputs .outputs , engine_core_timestamp , iteration_stats
987+ )
988+ output_processor .update_scheduler_stats (outputs .scheduler_stats )
978989
979990 if log_stats :
980991 # Verify running counts
981- assert iteration_stats .waiting_lora_adapters .get ("lora-1" ) == 0
982- assert iteration_stats .waiting_lora_adapters .get ("lora-2" ) == 0
983- assert iteration_stats .running_lora_adapters .get ("lora-1" ) == 1
984- assert iteration_stats .running_lora_adapters .get ("lora-2" ) == 1
992+ assert outputs . scheduler_stats .waiting_lora_adapters .get ("lora-1" ) == 0
993+ assert outputs . scheduler_stats .waiting_lora_adapters .get ("lora-2" ) == 0
994+ assert outputs . scheduler_stats .running_lora_adapters .get ("lora-1" ) == 1
995+ assert outputs . scheduler_stats .running_lora_adapters .get ("lora-2" ) == 1
985996 else :
986997 assert iteration_stats is None
987998 assert len (output_processor .lora_states .requests ) == 0
988999
9891000 # Third iteration: finish request-0 (lora-1)
990- outputs = engine_core .get_outputs ()
1001+ outputs = EngineCoreOutputs (
1002+ outputs = engine_core .get_outputs (), scheduler_stats = SchedulerStats ()
1003+ )
9911004 # Find and mark request-0 as finished (it uses lora-1)
992- for output in outputs :
1005+ for output in outputs . outputs :
9931006 if output .request_id == "request-0" :
9941007 output .finish_reason = FinishReason .LENGTH
9951008 break
9961009
9971010 iteration_stats = IterationStats () if log_stats else None
998- output_processor .process_outputs (outputs , engine_core_timestamp , iteration_stats )
1011+ output_processor .process_outputs (
1012+ outputs .outputs , engine_core_timestamp , iteration_stats
1013+ )
1014+ output_processor .update_scheduler_stats (outputs .scheduler_stats )
9991015
10001016 if log_stats :
10011017 # lora-1 should be removed since no requests remain
10021018 assert "lora-1" not in output_processor .lora_states .requests
10031019 # lora-2 should still be running
1004- assert iteration_stats .running_lora_adapters .get ("lora-2" ) == 1
1020+ assert outputs . scheduler_stats .running_lora_adapters .get ("lora-2" ) == 1
10051021 assert len (output_processor .lora_states .requests ) == 1
10061022 else :
10071023 assert len (output_processor .lora_states .requests ) == 0
10081024
10091025 # Fourth iteration: finish request-1 (lora-2)
1010- outputs = engine_core .get_outputs ()
1026+ outputs = EngineCoreOutputs (
1027+ outputs = engine_core .get_outputs (), scheduler_stats = SchedulerStats ()
1028+ )
10111029 # Find and mark request-1 as finished (it uses lora-2)
1012- for output in outputs :
1030+ for output in outputs . outputs :
10131031 if output .request_id == "request-1" :
10141032 output .finish_reason = FinishReason .LENGTH
10151033 break
10161034
10171035 iteration_stats = IterationStats () if log_stats else None
1018- output_processor .process_outputs (outputs , engine_core_timestamp , iteration_stats )
1036+ output_processor .process_outputs (
1037+ outputs .outputs , engine_core_timestamp , iteration_stats
1038+ )
1039+ output_processor .update_scheduler_stats (outputs .scheduler_stats )
10191040
10201041 if log_stats :
10211042 # lora-2 should be removed since no requests remain
10221043 assert "lora-2" not in output_processor .lora_states .requests
1023- assert len (iteration_stats .running_lora_adapters ) == 0
1044+ assert len (outputs . scheduler_stats .running_lora_adapters ) == 0
10241045 assert len (output_processor .lora_states .requests ) == 0
10251046 else :
10261047 assert len (output_processor .lora_states .requests ) == 0
10271048
10281049 # Finish the last request (no LoRA)
1029- outputs = engine_core .get_outputs ()
1050+ outputs = EngineCoreOutputs (
1051+ outputs = engine_core .get_outputs (), scheduler_stats = SchedulerStats ()
1052+ )
10301053 # Find and mark request-2 as finished (it has no LoRA)
1031- for output in outputs :
1054+ for output in outputs . outputs :
10321055 if output .request_id == "request-2" :
10331056 output .finish_reason = FinishReason .LENGTH
10341057 break
10351058
10361059 iteration_stats = IterationStats () if log_stats else None
1037- output_processor .process_outputs (outputs , engine_core_timestamp , iteration_stats )
1060+ output_processor .process_outputs (
1061+ outputs .outputs , engine_core_timestamp , iteration_stats
1062+ )
1063+ output_processor .update_scheduler_stats (outputs .scheduler_stats )
10381064
10391065 # Verify all requests are finished
10401066 assert output_processor .get_num_unfinished_requests () == 0
0 commit comments