[Misc] Forward request-level prompt extras for cross-encoder scoring (#46939)

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

Taneem Ibrahim committed Jul 4, 2026 at 09:18 UTC fa1fa968c4f1ed89d1df39af28db70544a41fa12
1 file changed +13 -1
vllm/entrypoints/pooling/scoring/io_processor.py
+13 -1
@@ -10,6 +10,7 @@ from vllm import PoolingParams, PoolingRequestOutput, TokensPrompt
10 from vllm.inputs import EngineInput
11 from vllm.renderers import TokenizeParams
12 from vllm.renderers.hf import safe_apply_chat_template
13 +from vllm.renderers.inputs.preprocess import extract_target_prompt
14 from vllm.tasks import PoolingTask
15 from vllm.utils.mistral import is_mistral_tokenizer
16
@@ -433,8 +434,16 @@ class CrossEncoderIOProcessor(ScoringIOProcessor):
434 max_tokens_per_doc: int = 0,
435 prompt_extras: dict[str, Any] | None = None,
436 ) -> tuple[Sequence[EngineInput], list[PoolingParams]]:
436 - # todo: support prompt_extras
437 arrival_time = time.time()
438 + engine_prompt_extras = (
439 + {
440 + k: v
441 + for k in ("mm_processor_kwargs", "cache_salt")
442 + if (v := prompt_extras.get(k)) is not None
443 + }
444 + if prompt_extras
445 + else None
446 + )
447
448 data_1 = scoring_data.data_1
449 data_2 = scoring_data.data_2
@@ -472,6 +481,9 @@ class CrossEncoderIOProcessor(ScoringIOProcessor):
481 pooling_params_list.append(pooling_params)
482
483 tok_params.apply_post_tokenization(self.tokenizer, engine_prompt)
484 + if engine_prompt_extras:
485 + target_prompt = extract_target_prompt(self.model_config, engine_prompt)
486 + target_prompt.update(engine_prompt_extras)
487 engine_inputs.append(
488 self.renderer.process_for_engine(engine_prompt, arrival_time)
489 )