{"record":{"id":"f09bf5354e09a4e4","repo":"sgl-project/sglang","slug":"top-k-must-be-1-disable-or-at-least-1-got-sel","errorCode":null,"errorMessage":"top_k must be -1 (disable) or at least 1, got {self.top_k}.","messagePattern":"top_k must be -1 \\(disable\\) or at least 1, got (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/sampling/sampling_params.py","lineNumber":166,"sourceCode":"            # top_k = 1 means greedy sampling\n            self.temperature = 1.0\n            self.top_k = 1\n        if self.top_k == -1:\n            self.top_k = TOP_K_ALL  # whole vocabulary\n\n    def verify(self, vocab_size):\n        if self.beam_width is not None and self.beam_width < 1:\n            raise ValueError(f\"beam_width must be at least 1, got {self.beam_width}.\")\n        if not math.isfinite(self.temperature) or self.temperature < 0.0:\n            raise ValueError(\n                f\"temperature must be a non-negative finite number, got {self.temperature}.\"\n            )\n        if not 0.0 < self.top_p <= 1.0:\n            raise ValueError(f\"top_p must be in (0, 1], got {self.top_p}.\")\n        if not 0.0 <= self.min_p <= 1.0:\n            raise ValueError(f\"min_p must be in [0, 1], got {self.min_p}.\")\n        if self.top_k < 1 or self.top_k == -1:\n            raise ValueError(\n                f\"top_k must be -1 (disable) or at least 1, got {self.top_k}.\"\n            )\n        if not -2.0 <= self.frequency_penalty <= 2.0:\n            raise ValueError(\n                \"frequency_penalty must be in [-2, 2], got \"\n                f\"{self.frequency_penalty}.\"\n            )\n        if not -2.0 <= self.presence_penalty <= 2.0:\n            raise ValueError(\n                \"presence_penalty must be in [-2, 2], got \" f\"{self.presence_penalty}.\"\n            )\n        if not 0.0 < self.repetition_penalty <= 2.0:\n            raise ValueError(\n                \"repetition_penalty must be in (0, 2] (1.0 = no penalty), \"\n                f\"got {self.repetition_penalty}.\"\n            )\n        if not 0 <= self.min_new_tokens:\n            raise ValueError(","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/sampling/sampling_params.py#L148-L184","documentation":"SamplingParams.verify() requires top_k to be either -1 (meaning 'consider the whole vocabulary', disable top-k filtering) or an integer >= 1. Values like 0, -2, or -100 raise this ValueError during normalize()/verify(). Note that 0 is invalid even though some APIs treat 0 as disabled.","triggerScenarios":"Passing SamplingParams(top_k=0) intending to disable top-k; any top_k < 1 other than exactly -1. verify() is invoked via normalize() when preparing the request.","commonSituations":"Porting configs from engines where top_k=0 means disabled; negative 'sentinel' values other than -1; UIs with 0 defaults; note the code above already maps top_k=0 -> 1 in a branch that sets top_k=1, so hitting this usually means an explicit out-of-range value.","solutions":["Use top_k=-1 to disable top-k filtering","Use top_k=1 for greedy decoding","Ensure integer values >= 1 otherwise (e.g. top_k=50)"],"exampleFix":"# before\nparams = SamplingParams(top_k=0)\n# after\nparams = SamplingParams(top_k=-1)  # disabled","handlingStrategy":"validation","validationCode":"if not isinstance(top_k, int) or top_k < 1:\n    top_k = -1\nparams = SamplingParams(top_k=top_k)","typeGuard":"def valid_top_k(k):\n    return isinstance(k, int) and (k == -1 or k >= 1)","tryCatchPattern":"try:\n    llm.generate(prompts, SamplingParams(top_k=k))\nexcept ValueError as e:\n    if 'top_k' in str(e):\n        k = -1\n    else:\n        raise","preventionTips":["Use -1 (never 0) to disable top-k","Sanitize integer config fields for sentinel values"],"tags":["sampling-params","top-k","validation","sglang"],"backgroundTag":"sampling-parameter-validation-failed","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}