[Bugfix][Frontend] Honor skip_decoder_start_token in async encoder-decoder rendering (#54799)

Signed-off-by: waizuichougou <2082431897@qq.com>

waizuichougou committed Sep 2, 2026 at 03:00 UTC d98bb2a87996f46791aac7b0682998371d4ff48b
1 file changed +11 -8
vllm/renderers/base.py
+11 -8
@@ -914,6 +914,15 @@ class BaseRenderer(ABC, Generic[_T]):
914
915 return await self._process_tokens_async(prompt, skip_mm_cache=skip_mm_cache) # type: ignore[arg-type]
916
917 + def _get_skip_decoder_start_token(self) -> bool:
918 + """Whether the multimodal processor supplies a complete decoder prefix."""
919 + if self.mm_processor is not None:
920 + from vllm.multimodal.processing import EncDecMultiModalProcessor
921 +
922 + if isinstance(self.mm_processor, EncDecMultiModalProcessor):
923 + return self.mm_processor.skip_decoder_start_token
924 + return False
925 +
926 def _process_enc_dec(
927 self,
928 prompt: EncoderDecoderTokPrompt,
@@ -923,13 +932,6 @@ class BaseRenderer(ABC, Generic[_T]):
932 enc_prompt = prompt["encoder_prompt"]
933 dec_prompt = prompt["decoder_prompt"]
934
926 - skip_decoder_start_token = False
927 - if self.mm_processor is not None:
928 - from vllm.multimodal.processing import EncDecMultiModalProcessor
929 -
930 - if isinstance(self.mm_processor, EncDecMultiModalProcessor):
931 - skip_decoder_start_token = self.mm_processor.skip_decoder_start_token
932 -
935 return build_enc_dec_input(
936 encoder_input=self._process_singleton(
937 enc_prompt, skip_mm_cache=skip_mm_cache
@@ -940,7 +942,7 @@ class BaseRenderer(ABC, Generic[_T]):
942 else self._process_singleton(dec_prompt, skip_mm_cache=skip_mm_cache)
943 ),
944 decoder_start_token_id=self.get_dec_start_token_id(),
943 - skip_decoder_start_token=skip_decoder_start_token,
945 + skip_decoder_start_token=self._get_skip_decoder_start_token(),
946 )
947
948 async def _process_enc_dec_async(
@@ -967,6 +969,7 @@ class BaseRenderer(ABC, Generic[_T]):
969 encoder_input=encoder_input,
970 decoder_input=decoder_input,
971 decoder_start_token_id=self.get_dec_start_token_id(),
972 + skip_decoder_start_token=self._get_skip_decoder_start_token(),
973 )
974
975 def process_for_engine(