fix: use configured max_logprobs instead of hardcoded 20 in derender validation (#47834)

Signed-off-by: jperezde <jperezde@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>

Juan Pérez de Algaba committed Jul 7, 2026 at 11:42 UTC b3e85be663af852b5c4122d055bfa863a8a36140
2 files changed +13 -4
tests/entrypoints/scale_out/derender/test_derender.py
+4 -2
@@ -622,7 +622,7 @@ async def test_derender_chat_oversized_logprobs_rejected(client):
622
623 @pytest.mark.asyncio
624 async def test_derender_chat_oversized_top_logprobs_rejected(client):
625 - """top_logprobs count exceeding 20 returns 400."""
625 + """top_logprobs count exceeding max_logprobs (default 20) returns 400."""
626 oversized_top_logprobs = {
627 "content": [
628 {
@@ -654,7 +654,9 @@ async def test_derender_chat_oversized_top_logprobs_rejected(client):
654 },
655 )
656 assert response.status_code == 400
657 - assert "top_logprobs count" in response.json()["error"]["message"]
657 + msg = response.json()["error"]["message"]
658 + assert "top_logprobs count" in msg
659 + assert "max_logprobs" in msg
660
661
662 @pytest.mark.asyncio
vllm/entrypoints/scale_out/derender/serving.py
+9 -2
@@ -64,6 +64,8 @@ class ServingDerender(BaseServing):
64 """
65 max_n = envs.VLLM_MAX_N_SEQUENCES
66 max_model_len = self.model_config.max_model_len
67 + # See ModelConfig.max_logprobs for semantics and default value.
68 + max_logprobs = self.model_config.max_logprobs
69
70 if len(generate_responses) > max_n:
71 return self.create_error_response(
@@ -95,11 +97,16 @@ class ServingDerender(BaseServing):
97 f"max_model_len ({max_model_len})."
98 )
99 for entry in choice.logprobs.content:
98 - if entry.top_logprobs and len(entry.top_logprobs) > 20:
100 + if (
101 + max_logprobs >= 0
102 + and entry.top_logprobs
103 + and len(entry.top_logprobs) > max_logprobs
104 + ):
105 return self.create_error_response(
106 f"top_logprobs count "
107 f"({len(entry.top_logprobs)}) in "
102 - f"choice {choice.index} exceeds maximum (20)."
108 + f"choice {choice.index} exceeds "
109 + f"max_logprobs ({max_logprobs})."
110 )
111
112 if gen.prompt_logprobs and len(gen.prompt_logprobs) > max_model_len: