{"record":{"id":"2d7c53db53f22104","repo":"sgl-project/sglang","slug":"padding-side-must-be-left-or-right-got-paddi","errorCode":null,"errorMessage":"padding_side must be 'left' or 'right', got {padding_side}","messagePattern":"padding_side must be 'left' or 'right', got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/configs/pipeline_configs/ltx_2.py","lineNumber":74,"sourceCode":"            A small positive value for numerical stability when performing normalization.\n\n    Returns:\n        `torch.Tensor` of shape `(batch_size, seq_len, hidden_dim * num_layers)`:\n            Normed and flattened text encoder hidden states.\n    \"\"\"\n    batch_size, seq_len, hidden_dim, num_layers = text_hidden_states.shape\n    original_dtype = text_hidden_states.dtype\n    device = text_hidden_states.device\n\n    # Create padding mask\n    token_indices = torch.arange(seq_len, device=device).unsqueeze(0)\n    if padding_side == \"right\":\n        mask = token_indices < sequence_lengths[:, None]\n    elif padding_side == \"left\":\n        start_indices = seq_len - sequence_lengths[:, None]\n        mask = token_indices >= start_indices\n    else:\n        raise ValueError(f\"padding_side must be 'left' or 'right', got {padding_side}\")\n    mask = mask[:, :, None, None]  # [batch_size, seq_len, 1, 1]\n\n    masked_text_hidden_states = text_hidden_states.masked_fill(~mask, 0.0)\n    num_valid_positions = (sequence_lengths * hidden_dim).view(batch_size, 1, 1, 1)\n    masked_mean = masked_text_hidden_states.sum(dim=(1, 2), keepdim=True) / (\n        num_valid_positions + eps\n    )\n\n    x_min = text_hidden_states.masked_fill(~mask, float(\"inf\")).amin(\n        dim=(1, 2), keepdim=True\n    )\n    x_max = text_hidden_states.masked_fill(~mask, float(\"-inf\")).amax(\n        dim=(1, 2), keepdim=True\n    )\n\n    normalized_hidden_states = (text_hidden_states - masked_mean) / (\n        x_max - x_min + eps\n    )","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/configs/pipeline_configs/ltx_2.py#L56-L92","documentation":"LTX-2's pack_text_embeds computes a masked mean over text hidden states and only supports 'left' or 'right' token padding. Any other padding_side string raises this ValueError before masking is applied.","triggerScenarios":"Calling pack_text_embeds(hidden_states, sequence_lengths, padding_side=...) (directly or via _gemma_postprocess_func/_pack_text_embeds) with padding_side of e.g. \"both\", \"LONGEST\", \"\", or None.","commonSituations":"Forwarding a tokenizer's padding_side value without checking (some tokenizers/configs use other values or None); typos or case differences; custom postprocess functions hardcoding a nonstandard side.","solutions":["Pass exactly \"left\" or \"right\" — LTX-2's Gemma path uses \"left\"","Check tokenizer.padding_side / tokenizer.init_kwargs before forwarding it; normalize to a supported value","Default to \"left\" when the upstream value is None or unexpected"],"exampleFix":"# before\nside = tokenizer.padding_side  # may be None or unexpected\nembeds = pack_text_embeds(hs, seq_lens, padding_side=side)\n\n# after\nside = tokenizer.padding_side if tokenizer.padding_side in (\"left\", \"right\") else \"left\"\nembeds = pack_text_embeds(hs, seq_lens, padding_side=side)","handlingStrategy":"validation","validationCode":"padding_side = padding_side if padding_side in (\"left\", \"right\") else \"left\"","typeGuard":"def is_valid_padding_side(s) -> bool:\n    return s in (\"left\", \"right\")","tryCatchPattern":"except ValueError as e:\n    if \"padding_side\" in str(e):\n        embeds = pack_text_embeds(hs, seq_lens, padding_side=\"left\")","preventionTips":["Normalize tokenizer.padding_side before forwarding","Default to 'left' for the Gemma/LTX-2 path"],"tags":["sglang","ltx-2","padding-side","text-embedding","invalid-argument"],"backgroundTag":"unsupported-enum-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}