From 8cfc9179e6545ee45c90be36cfdba43afcec788e Mon Sep 17 00:00:00 2001 From: Mike Qiu Date: Sun, 17 May 2026 23:30:24 +0800 Subject: [PATCH] Fix reasoning_parser crash: reconstruct StructuredOutputsConfig from dict (#2845) Signed-off-by: Mike_Qiu Co-authored-by: Mike_Qiu Co-authored-by: Claude Opus 4.6 Co-authored-by: Hongsheng Liu --- vllm_omni/engine/stage_init_utils.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/vllm_omni/engine/stage_init_utils.py b/vllm_omni/engine/stage_init_utils.py index ce68a23da..7ab89400b 100644 --- a/vllm_omni/engine/stage_init_utils.py +++ b/vllm_omni/engine/stage_init_utils.py @@ -619,6 +619,19 @@ def build_vllm_config( ) filtered_engine_args_dict = filter_dataclass_kwargs(OmniEngineArgs, engine_args_dict) + + # _to_dict serializes dataclass fields (e.g. StructuredOutputsConfig) into + # plain dicts. When OmniEngineArgs is instantiated with the dict, these + # fields remain dicts instead of being reconstructed as dataclass objects. + # Later, EngineArgs.create_engine_config() does + # self.structured_outputs_config.reasoning_parser = ... + # which fails on a plain dict. Reconstruct the dataclass here. + soc = filtered_engine_args_dict.get("structured_outputs_config") + if isinstance(soc, dict): + from vllm.config import StructuredOutputsConfig + + filtered_engine_args_dict["structured_outputs_config"] = StructuredOutputsConfig(**soc) + omni_engine_args = OmniEngineArgs(**filtered_engine_args_dict) # Multi-stage pipelines (qwen3_tts code2wav, etc.) set max_model_len