{"record":{"id":"e423a5404c9b5233","repo":"sgl-project/sglang","slug":"get-num-tokens-per-bs-for-target-verify-is-depreca-e423a5","errorCode":null,"errorMessage":"get_num_tokens_per_bs_for_target_verify is deprecated; use get_num_tokens_per_req_for_target_verify instead.","messagePattern":"get_num_tokens_per_bs_for_target_verify is deprecated; use get_num_tokens_per_req_for_target_verify instead\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"python/sglang/srt/speculative/spec_registry.py","lineNumber":145,"sourceCode":"                self.name,\n            )\n        return self.factory(server_args)\n\n    def get_num_tokens_per_req_for_target_verify(\n        self, num_draft_tokens: int, is_draft_worker: bool\n    ) -> int:\n        # FIXME: Remove this after the forward mode refactor. Target verify is\n        # essentially a fixed sequence length prefill/extend with full cuda\n        # graph support. We can use it for target verify, or we can use it for\n        # other cases which is not target verify but fixed length prefill.\n        # Here, we expose this interface to allow the other use cases.\n        return num_draft_tokens\n\n    def get_num_tokens_per_bs_for_target_verify(\n        self, num_draft_tokens: int, is_draft_worker: bool\n    ) -> int:\n        # Deprecated alias; remove together with the FIXME above.\n        warnings.warn(\n            \"get_num_tokens_per_bs_for_target_verify is deprecated; use \"\n            \"get_num_tokens_per_req_for_target_verify instead.\",\n            DeprecationWarning,\n            stacklevel=2,\n        )\n        return self.get_num_tokens_per_req_for_target_verify(\n            num_draft_tokens, is_draft_worker\n        )\n\n    def build_disagg_draft_input(\n        self,\n        batch: ScheduleBatch,\n        last_tokens_tensor: torch.Tensor,\n        future_map: FutureMap,\n    ) -> Optional[SpecInput]:\n        \"\"\"Build the disaggregation draft input for ``batch``, or ``None``.\n\n        The speculative config comes from ``runtime_context.get_spec()``, which","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/speculative/spec_registry.py#L127-L163","documentation":"Same deprecation as in spec_info.py but on the registry-based entry point in python/sglang/srt/speculative/spec_registry.py. The method get_num_tokens_per_bs_for_target_verify now warns (DeprecationWarning) and delegates to get_num_tokens_per_req_for_target_verify, which uses per-request token accounting for target-verify batches in speculative decoding.","triggerScenarios":"Calling the registered speculative-algorithm object's get_num_tokens_per_bs_for_target_verify (e.g. via SpecAlgorithm registry lookups during target-verify batch construction in the scheduler).","commonSituations":"Custom or out-of-tree speculative algorithm implementations built against an older SGLang spec registry; upgrade of SGLang introduces the rename and old call sites start warning.","solutions":["Switch call sites to get_num_tokens_per_req_for_target_verify — same args (num_draft_tokens, is_draft_worker), same int return","Silence temporarily with PYTHONWARNINGS=ignore::DeprecationWarning while you migrate","grep your codebase for '_per_bs_for_target_verify' to catch all occurrences"],"exampleFix":"# before\nnum = algo.get_num_tokens_per_bs_for_target_verify(k, is_draft_worker)\n# after\nnum = algo.get_num_tokens_per_req_for_target_verify(k, is_draft_worker)","handlingStrategy":"validation","validationCode":"fn = getattr(algo, \"get_num_tokens_per_req_for_target_verify\", None) or getattr(algo, \"get_num_tokens_per_bs_for_target_verify\")\nn = fn(k, is_draft)","typeGuard":"callable(getattr(algo, \"get_num_tokens_per_req_for_target_verify\", None))","tryCatchPattern":null,"preventionTips":["Version-pin SGLang between the API producer and consumers","Feature-detect the new name before calling"],"tags":["speculative-decoding","deprecation","api-rename","registry"],"backgroundTag":"deprecated-api-rename","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}