diff --git a/python/sglang/srt/managers/tokenizer_manager.py b/python/sglang/srt/managers/tokenizer_manager.py index a3b266731..d3ab092c5 100644 --- a/python/sglang/srt/managers/tokenizer_manager.py +++ b/python/sglang/srt/managers/tokenizer_manager.py @@ -40,6 +40,7 @@ import zmq.asyncio from fastapi import BackgroundTasks from sglang.srt.configs.model_config import ModelConfig +from sglang.srt.constants import HEALTH_CHECK_RID_PREFIX from sglang.srt.disaggregation.encode_receiver import create_mm_receiver from sglang.srt.disaggregation.utils import DisaggregationMode from sglang.srt.environ import envs @@ -1653,6 +1654,9 @@ class TokenizerManager(TokenizerControlMixin, TokenizerManagerScoreMixin): for i, rid in enumerate(recv_obj.rids): state = self.rid_to_state.get(rid, None) if state is None: + # Known race: /health_generate pops its rid as soon as ANY message bumps last_receive_tstamp. + if rid.startswith(HEALTH_CHECK_RID_PREFIX): + continue logger.error( f"Received output for {rid=} but the state was deleted in TokenizerManager." )