[Pooling] Cap max-length padding for chunked embeddings (#56505)

Signed-off-by: Taneem Ibrahim <taneem.ibrahim@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

Taneem Ibrahim committed Sep 15, 2026 at 19:31 UTC 1fd119def5a841ada882fa3f33919b96783f9d50
1 file changed +17 -1
vllm/entrypoints/pooling/base/protocol.py
+17 -1
@@ -171,6 +171,8 @@ class FixedMaxLenTokenizeParamsMixin(PoolingTokenizeParamsMixin):
171
172
173 class EmbeddingTokenizeParamsMixin(PoolingTokenizeParamsMixin):
174 + padding: Literal["max_length", "do_not_pad"] | None
175 +
176 def build_tok_params(self, model_config: ModelConfig) -> TokenizeParams:
177 default_max_total_tokens = model_config.max_model_len
178 max_total_tokens: int | None = default_max_total_tokens
@@ -184,7 +186,7 @@ class EmbeddingTokenizeParamsMixin(PoolingTokenizeParamsMixin):
186 max_embed_len = pooler_config.max_embed_len or default_max_total_tokens
187 max_output_tokens = default_max_total_tokens - max_embed_len
188
187 - return self._build_pooling_tok_params(
189 + tok_params = self._build_pooling_tok_params(
190 model_config,
191 add_special_tokens=self.add_special_tokens,
192 max_total_tokens=max_total_tokens,
@@ -192,6 +194,20 @@ class EmbeddingTokenizeParamsMixin(PoolingTokenizeParamsMixin):
194 max_output_tokens_param="max_model_len - max_embed_len",
195 )
196
197 + if (
198 + self.padding == "max_length"
199 + and pooler_config is not None
200 + and pooler_config.enable_chunked_processing
201 + ):
202 + max_padding_len = pooler_config.max_embed_len
203 + if max_padding_len is None:
204 + max_padding_len = default_max_total_tokens
205 + return tok_params.with_kwargs(
206 + pad_prompt_tokens=min(default_max_total_tokens, max_padding_len)
207 + )
208 +
209 + return tok_params
210 +
211
212 class CompletionRequestMixin(OpenAIBaseModel):
213 # --8<-- [start:completion-params]