Add support for the /rerank endpoint in vllm bench serve (#26602)

Signed-off-by: Max de Bayser <mbayser@br.ibm.com>
This commit is contained in:
Maximilien de Bayser
2025-10-14 01:25:43 -03:00
committed by GitHub
parent 29350922c6
commit fe3edb4cf0
3 changed files with 218 additions and 6 deletions

View File

@@ -64,7 +64,7 @@ class StreamedResponseHandler:
class RequestFuncInput:
"""The input for the request function."""
prompt: str
prompt: str | list[str]
api_url: str
prompt_len: int
output_len: int
@@ -484,7 +484,7 @@ async def async_request_openai_audio(
return output
async def _run_openai_embeddings(
async def _run_pooling_request(
session: aiohttp.ClientSession,
api_url: str,
payload: dict[str, Any],
@@ -497,7 +497,7 @@ async def _run_openai_embeddings(
try:
async with session.post(url=api_url, headers=headers, json=payload) as response:
if response.status == 200:
output.latency = time.perf_counter() - st
output.ttft = output.latency = time.perf_counter() - st
data = await response.json()
output.success = True
output.generated_text = ""
@@ -536,7 +536,43 @@ async def async_request_openai_embeddings(
}
_update_headers_common(headers, request_func_input)
return await _run_openai_embeddings(
return await _run_pooling_request(
session,
api_url,
payload=payload,
headers=headers,
pbar=pbar,
)
async def async_request_vllm_rerank(
request_func_input: RequestFuncInput,
session: aiohttp.ClientSession,
pbar: tqdm | None = None,
) -> RequestFuncOutput:
api_url = request_func_input.api_url
_validate_api_url(api_url, "vLLM score API", "rerank")
assert (
isinstance(request_func_input.prompt, list)
and len(request_func_input.prompt) > 1
)
payload = {
"model": request_func_input.model_name
if request_func_input.model_name
else request_func_input.model,
"query": request_func_input.prompt[0],
"documents": request_func_input.prompt[1:],
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ.get('OPENAI_API_KEY')}",
}
_update_headers_common(headers, request_func_input)
return await _run_pooling_request(
session,
api_url,
payload=payload,
@@ -572,7 +608,7 @@ async def async_request_openai_embeddings_chat(
}
_update_headers_common(headers, request_func_input)
return await _run_openai_embeddings(
return await _run_pooling_request(
session,
api_url,
payload=payload,
@@ -685,7 +721,7 @@ async def async_request_infinity_embeddings(
}
_update_headers_common(headers, request_func_input)
return await _run_openai_embeddings(
return await _run_pooling_request(
session,
api_url,
payload=payload,
@@ -722,6 +758,7 @@ ASYNC_REQUEST_FUNCS: dict[str, RequestFunc] = {
"infinity-embeddings": async_request_infinity_embeddings,
"infinity-embeddings-clip": async_request_infinity_embeddings_clip,
# (Infinity embedding server does not support vlm2vec)
"vllm-rerank": async_request_vllm_rerank,
}
OPENAI_COMPATIBLE_BACKENDS = [