[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] = {}