From 6d6ea5af0c48634a3950e759c8de54122c02807b Mon Sep 17 00:00:00 2001 From: tazjin Date: Sun, 19 Oct 2025 05:54:33 +0300 Subject: [PATCH] fix: do not wrap invalid grammar objects during constrained generation (#11328) --- .../srt/constrained/reasoner_grammar_backend.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/python/sglang/srt/constrained/reasoner_grammar_backend.py b/python/sglang/srt/constrained/reasoner_grammar_backend.py index ca5f118ef..57fd55a3b 100644 --- a/python/sglang/srt/constrained/reasoner_grammar_backend.py +++ b/python/sglang/srt/constrained/reasoner_grammar_backend.py @@ -17,7 +17,11 @@ from typing import List, Optional, Tuple import torch -from .base_grammar_backend import BaseGrammarBackend, BaseGrammarObject +from .base_grammar_backend import ( + INVALID_GRAMMAR_OBJ, + BaseGrammarBackend, + BaseGrammarObject, +) class ReasonerGrammarObject(BaseGrammarObject): @@ -81,10 +85,9 @@ class ReasonerGrammarBackend(BaseGrammarBackend): self.grammar_backend = grammar_backend self.think_end_id = think_end_id - def _init_value_dispatch( - self, key: Tuple[str, str] - ) -> Optional[ReasonerGrammarObject]: + def _init_value_dispatch(self, key: Tuple[str, str]) -> Optional[BaseGrammarObject]: ret = self.grammar_backend._init_value_dispatch(key) - if ret is None: - return None + # avoid wrapping invalid grammar, so that the scheduler can detect it + if ret is None or ret is INVALID_GRAMMAR_OBJ: + return ret return ReasonerGrammarObject(ret, self.think_end_id)