diff --git a/tests/worker_v2/test_omni_model_state.py b/tests/worker_v2/test_omni_model_state.py index 3e3a94fc2..80333f2aa 100644 --- a/tests/worker_v2/test_omni_model_state.py +++ b/tests/worker_v2/test_omni_model_state.py @@ -603,8 +603,13 @@ def test_eager_decode_without_a_frame_fails_loudly(): state._eager_state._apply_eager_frames(batches, torch.zeros((1, _EAGER_DIM)), _EagerBatch([1]), None) -def test_run_preprocess_records_rows_that_keep_a_sample(): +@pytest.mark.parametrize("has_stream_decoder", [True, False]) +def test_run_preprocess_records_rows_that_keep_a_sample(has_stream_decoder): state = _make_eager_state() + if not has_stream_decoder: + # Eager-MTP talkers without an in-Talker codec (Qwen3-Omni) do not + # define the attribute at all. + del state.model.stream_decoder _fill_buffers(state, "chunk", "final", "decode") state._eager_ready = {2: "decode"} state._eager_embeds[2] = 4.0 diff --git a/vllm_omni/worker_v2/model_states/omni_model_state.py b/vllm_omni/worker_v2/model_states/omni_model_state.py index 57bbf9b5b..0cb0f04a3 100644 --- a/vllm_omni/worker_v2/model_states/omni_model_state.py +++ b/vllm_omni/worker_v2/model_states/omni_model_state.py @@ -760,7 +760,8 @@ class OmniModelState(DefaultModelState): n_tok = int(input_batch.num_scheduled_tokens[i]) if ( self._eager_mtp - and self.model.stream_decoder is not None + # Only the Qwen3-TTS Talker has an in-Talker streaming codec. + and getattr(self.model, "stream_decoder", None) is not None and self._eager_state.replay_inputs( buf["req_id"], req_idx,