sgl-project/sglang · error · ValueError

Invalid padding param: {padding}!

Error message

Invalid padding param: {padding}!

What it means

When padding is explicitly provided to CausalConv1D it must be either an int or a 2-element list whose entries sum to kernel_size - 1 (fully causal asymmetric padding). Anything else — wrong length, tuple instead of list, or sum mismatch — raises this ValueError.

Source

Thrown at python/sglang/srt/models/phi4mm_utils.py:951

        self.cache_drop_size = None
        if padding is None:
            self._left_padding = kernel_size - 1
            self._right_padding = stride - 1
        else:
            if stride != 1 and padding != kernel_size - 1:
                raise ValueError("No striding allowed for non-symmetric convolutions!")
            if isinstance(padding, int):
                self._left_padding = padding
                self._right_padding = padding
            elif (
                isinstance(padding, list)
                and len(padding) == 2
                and padding[0] + padding[1] == kernel_size - 1
            ):
                self._left_padding = padding[0]
                self._right_padding = padding[1]
            else:
                raise ValueError(f"Invalid padding param: {padding}!")

        self._max_cache_len = self._left_padding

        super().__init__(
            in_channels=in_channels,
            out_channels=out_channels,
            kernel_size=kernel_size,
            stride=stride,
            padding=0,
            dilation=dilation,
            groups=groups,
            bias=bias,
            padding_mode=padding_mode,
            device=device,
            dtype=dtype,
        )

    def update_cache(self, x, cache=None):

View on GitHub (pinned to 0132848349)

Solutions

  1. Use padding=None for automatic causal padding
  2. Pass an int equal to kernel_size - 1
  3. Pass a 2-element list [left, right] with left + right == kernel_size - 1

Example fix

# before
CausalConv1D(..., kernel_size=5, padding=(2, 2))  # tuple + sum 4 != kernel-1
# after
CausalConv1D(..., kernel_size=5, padding=[4, 0])
Defensive patterns

Strategy: type-guard

Validate before calling

ok = padding is None or isinstance(padding, int) or (
    isinstance(padding, list) and len(padding) == 2 and sum(padding) == kernel_size - 1
)
assert ok, f"invalid padding {padding!r} for kernel_size={kernel_size}"

Type guard

def is_valid_causal_padding(kernel_size: int, padding) -> bool:
    if padding is None or isinstance(padding, int):
        return True
    return (
        isinstance(padding, list)
        and len(padding) == 2
        and padding[0] + padding[1] == kernel_size - 1
    )

Prevention

When it happens

Trigger: Passing padding as a tuple, a list of length != 2, or a list [p0, p1] with p0+p1 != kernel_size-1.

Common situations: Porting padding specs from PyTorch Conv1d (which accepts tuples); assuming 'same'-style padding; arithmetic mistakes computing asymmetric padding.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/2bc849a0bb07a270. Report an issue: GitHub.