From 910abdbd0866b203df2eb4e5419cada905d3803d Mon Sep 17 00:00:00 2001 From: Chauncey Date: Sat, 11 Oct 2025 00:41:17 +0800 Subject: [PATCH] [Bugfix] fixed top_logprobs: -1 does not appear to work as intended (#26470) Signed-off-by: chaunceyjiang --- tests/entrypoints/openai/test_chat_echo.py | 15 +++++++++++++++ vllm/entrypoints/openai/serving_chat.py | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/entrypoints/openai/test_chat_echo.py b/tests/entrypoints/openai/test_chat_echo.py index a9c9c8e3df..b3b8b70033 100644 --- a/tests/entrypoints/openai/test_chat_echo.py +++ b/tests/entrypoints/openai/test_chat_echo.py @@ -7,12 +7,23 @@ import openai # use the official client for correctness check import pytest import pytest_asyncio +from vllm.config import ModelConfig + from ...utils import RemoteOpenAIServer # # any model with a chat template should work here MODEL_NAME = "Qwen/Qwen2-1.5B-Instruct" +def get_vocab_size(model_name): + config = ModelConfig( + model=model_name, + seed=0, + dtype="float16", + ) + return config.get_vocab_size() + + @pytest.fixture(scope="module") def server(): args = [ @@ -107,6 +118,7 @@ async def test_top_logprobs(client: openai.AsyncOpenAI): completion = await client.chat.completions.create( model=MODEL_NAME, messages=messages, + max_tokens=1, extra_body={ "top_logprobs": -1, "logprobs": "true", @@ -115,3 +127,6 @@ async def test_top_logprobs(client: openai.AsyncOpenAI): assert completion.choices[0].logprobs is not None assert completion.choices[0].logprobs.content is not None assert len(completion.choices[0].logprobs.content) > 0 + assert len( + completion.choices[0].logprobs.content[0].top_logprobs + ) == get_vocab_size(MODEL_NAME) diff --git a/vllm/entrypoints/openai/serving_chat.py b/vllm/entrypoints/openai/serving_chat.py index d531806857..51c618e9d5 100644 --- a/vllm/entrypoints/openai/serving_chat.py +++ b/vllm/entrypoints/openai/serving_chat.py @@ -1643,7 +1643,7 @@ class OpenAIServingChat(OpenAIServing): bytes=list(token.encode("utf-8", errors="replace")), ) for i, p in enumerate(logprobs.items()) - if top_logprobs and i < top_logprobs + if (top_logprobs and i < top_logprobs or top_logprobs == -1) ] def _create_chat_logprobs(