From a8ffc220326a6c80a06d69d5d22540509cb7dce1 Mon Sep 17 00:00:00 2001 From: Juncai <52520497+juncaipeng@users.noreply.github.com> Date: Tue, 9 Dec 2025 10:20:22 +0800 Subject: [PATCH] [BugFix] fix init RequestOutput (#5419) * fix init RequestOutput * up * fix * fix --- fastdeploy/engine/common_engine.py | 6 +++++- fastdeploy/engine/request.py | 12 ++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/fastdeploy/engine/common_engine.py b/fastdeploy/engine/common_engine.py index 41efe6bf7..296727ffd 100644 --- a/fastdeploy/engine/common_engine.py +++ b/fastdeploy/engine/common_engine.py @@ -344,7 +344,9 @@ class EngineService: for task in tasks: if self.cfg.scheduler_config.splitwise_role != "mixed": status, msg = self.split_connector.check_decode_allocated(task) - if not status: + if status: + task.metrics.ask_decode_resource_finish_time = time.time() + else: self.llm_logger.error(f"{task.request_id} prefill failed with msg:{msg}.") self.scheduler.put_results( [ @@ -660,6 +662,8 @@ class EngineService: llm_logger.debug(f"get tasks from scheduler: {tasks}") if self.cfg.scheduler_config.splitwise_role != "mixed": + for task in tasks: + task.metrics.ask_decode_resource_start_time = time.time() self.split_connector.send_splitwise_tasks(tasks, current_id) insert_successful = self.insert_tasks(tasks, current_id) diff --git a/fastdeploy/engine/request.py b/fastdeploy/engine/request.py index c93a2d613..dbc94bf8a 100644 --- a/fastdeploy/engine/request.py +++ b/fastdeploy/engine/request.py @@ -677,8 +677,16 @@ class RequestOutput: @classmethod def from_dict(cls, d: dict): """Create instance from dict arguments""" - completion_output = CompletionOutput.from_dict(d.pop("outputs")) - metrics = RequestMetrics.from_dict(d.pop("metrics")) + if "outputs" in d and isinstance(d["outputs"], dict): + completion_output = CompletionOutput.from_dict(d.pop("outputs")) + else: + d.pop("outputs", None) + completion_output = None + if "metrics" in d and isinstance(d["metrics"], dict): + metrics = RequestMetrics.from_dict(d.pop("metrics")) + else: + d.pop("metrics", None) + metrics = None return RequestOutput(**d, outputs=completion_output, metrics=metrics) def to_dict(self):