[bugfix] bge-m3-sparse-plugin mismatch requests (#48112)

Signed-off-by: augusto.yjh <augusto.yjh@antgroup.com>

Augusto Yao committed Jul 10, 2026 at 10:03 UTC feb384ada2a1da1981ccb713ea6bd3f90c44f7b4
1 file changed +4 -48
tests/plugins/bge_m3_sparse_plugin/bge_m3_sparse_processor/sparse_embeddings_processor.py
+4 -48
@@ -3,9 +3,8 @@
3
4 from collections.abc import Sequence
5
6 -from vllm.config import ModelConfig, PoolerConfig, VllmConfig
6 +from vllm.config import PoolerConfig, VllmConfig
7 from vllm.entrypoints.openai.engine.protocol import UsageInfo
8 -from vllm.entrypoints.pooling.base.protocol import EmbedRequestMixin
8 from vllm.inputs import PromptType
9 from vllm.outputs import PoolingRequestOutput
10 from vllm.plugins.io_processors.interface import IOProcessor
@@ -14,7 +13,6 @@ from vllm.renderers import BaseRenderer
13 from vllm.tokenizers.detokenizer_utils import convert_ids_list_to_tokens
14
15 from .types import (
17 - EMBED_TASKS,
16 SparseEmbeddingCompletionRequestMixin,
17 SparseEmbeddingResponse,
18 SparseEmbeddingResponseData,
@@ -38,7 +36,6 @@ class BgeM3SparseEmbeddingsProcessor(
36 continue
37 self.default_pooling_params[param] = getattr(pooler_config, param)
38 self.embed_dimensions = vllm_config.model_config.embedding_size
41 - self.embed_request_queue: list[EmbedRequestMixin] = []
39
40 def __repr__(self) -> str:
41 return (
@@ -56,44 +53,9 @@ class BgeM3SparseEmbeddingsProcessor(
53 # refer to PoolingCompletionRequest.to_pooling_params
54 # set and verify pooling params
55 params.skip_reading_prefix_cache = True
59 -
60 - raw_embed_request = self.embed_request_queue.pop(0)
61 - if raw_embed_request.embed_task not in EMBED_TASKS:
62 - raise ValueError(
63 - f"Unsupported task {raw_embed_request}, "
64 - f"Supported tasks are {EMBED_TASKS}"
65 - )
56 params.task = "embed&token_classify"
67 - params.use_activation = raw_embed_request.use_activation
68 - if params.use_activation is None:
69 - params.use_activation = True
70 -
71 - params.dimensions = raw_embed_request.dimensions
72 -
73 - model_config: ModelConfig = self.vllm_config.model_config
74 - for param in self.default_pooling_params:
75 - if getattr(params, param, None) is None:
76 - setattr(params, param, self.default_pooling_params[param])
77 -
78 - if params.dimensions is not None:
79 - if not model_config.is_matryoshka:
80 - raise ValueError(
81 - f'Model "{model_config.served_model_name}" does not '
82 - f"support matryoshka representation, "
83 - f"changing output dimensions will lead to poor results."
84 - )
85 -
86 - mds = model_config.matryoshka_dimensions
87 - if mds is not None:
88 - if params.dimensions not in mds:
89 - raise ValueError(
90 - f"Model {model_config.served_model_name!r} "
91 - f"only supports {str(mds)} matryoshka dimensions, "
92 - f"use other output dimensions will "
93 - f"lead to poor results."
94 - )
95 - elif params.dimensions < 1:
96 - raise ValueError("Dimensions must be greater than 0")
57 + params.use_activation = True
58 + params.dimensions = self.embed_dimensions
59 return params
60
61 def parse_request(
@@ -113,10 +75,8 @@ class BgeM3SparseEmbeddingsProcessor(
75 if request_id is not None:
76 assert request_id not in self.online_requests, "request_id duplicated"
77 self.online_requests[request_id] = prompt
116 - self.embed_request_queue.extend(prompt.to_embed_requests_online())
78 else:
79 self.offline_requests.append(prompt)
119 - self.embed_request_queue.extend(prompt.to_embed_requests_offline())
80 return prompt.input
81
82 def _get_sparse_embedding_request(self, request_id: str | None = None):
@@ -157,11 +117,7 @@ class BgeM3SparseEmbeddingsProcessor(
117 raw_request = self._get_sparse_embedding_request(request_id)
118 has_dense_embed = raw_request.embed_task in ["dense", "dense&sparse"]
119 has_sparse_embed = raw_request.embed_task in ["sparse", "dense&sparse"]
160 - embed_dimensions = (
161 - self.embed_dimensions
162 - if raw_request.dimensions is None
163 - else raw_request.dimensions
164 - )
120 + embed_dimensions = self.embed_dimensions
121 for idx in range(len(model_output)):
122 mo = model_output[idx]
123 sparse_embedding_dict: dict[int, float] = {}