{"record":{"id":"f95da9abf11c5e44","repo":"sgl-project/sglang","slug":"return-hidden-states-must-be-a-boolean-or-the-stri","errorCode":null,"errorMessage":"return_hidden_states must be a boolean or the string literal 'last'.","messagePattern":"return_hidden_states must be a boolean or the string literal 'last'\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/managers/schedule_batch.py","lineNumber":177,"sourceCode":"MM_PAD_SHIFT_VALUE = 1_000_000\n_MM_HASH_MASK = (1 << 64) - 1\n\nlogger = logging.getLogger(__name__)\n\n\nReturnHiddenStatesMode = Union[bool, Literal[\"last\"]]\n\n\ndef get_return_hidden_states_mode(\n    return_hidden_states: ReturnHiddenStatesMode,\n) -> CaptureHiddenMode:\n    if return_hidden_states is True:\n        return CaptureHiddenMode.FULL\n    if return_hidden_states == \"last\":\n        return CaptureHiddenMode.LAST\n    if return_hidden_states is False:\n        return CaptureHiddenMode.NULL\n    raise ValueError(\n        \"return_hidden_states must be a boolean or the string literal 'last'.\"\n    )\n\n\ndef get_request_return_hidden_states_mode(\n    return_hidden_states: Union[List[ReturnHiddenStatesMode], ReturnHiddenStatesMode],\n) -> CaptureHiddenMode:\n    if isinstance(return_hidden_states, list):\n        return max(\n            (get_return_hidden_states_mode(mode) for mode in return_hidden_states),\n            default=CaptureHiddenMode.NULL,\n        )\n    return get_return_hidden_states_mode(return_hidden_states)\n\n\ndef get_batch_return_hidden_states_mode(reqs: List[Req]) -> CaptureHiddenMode:\n    mode = CaptureHiddenMode.NULL\n    for req in reqs:","sourceCodeStart":159,"sourceCodeEnd":195,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/managers/schedule_batch.py#L159-L195","documentation":"get_return_hidden_states_mode maps return_hidden_states to a CaptureHiddenMode: True->FULL, 'last'->LAST, False->NULL. Any other value (e.g. 'all', 1, 'full') is rejected because hidden-state capture only supports these exact modes.","triggerScenarios":"GenerateReqInput(..., return_hidden_states='all') or =1; REST body {\"return_hidden_states\": \"full\"}.","commonSituations":"Users assuming an OpenAI-style string like 'all'; passing truthy ints from JSON clients.","solutions":["Use True for all layers' hidden states, 'last' for final layer, False for none"],"exampleFix":"// before\nreturn_hidden_states='all'\n// after\nreturn_hidden_states=True","handlingStrategy":"type-guard","validationCode":"assert return_hidden_states in (True, False, 'last')","typeGuard":"def valid_rhs(v): return v is True or v is False or v == 'last'","tryCatchPattern":null,"preventionTips":["Map API synonyms ('all'->True) in your client layer before sending"],"tags":["sglang","hidden-states","enum-validation","input-validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}