Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
9765fe4
fix(frontend): call the reasoning parser's adjust_request during prep…
yifjiang Aug 2, 2026
9432889
fix(frontend): forward the reasoning parser's adjusted guidance
yifjiang Aug 26, 2026
2b89671
fix(frontend): attribute the guidance rewrite instead of inferring it
yifjiang Aug 26, 2026
6ffa755
Merge branch 'main' into yifjiang/reasoning-parser-adjust-request
rmccorm4 Aug 26, 2026
9692a98
fix(frontend): thread model_config to the reasoning parser; gate the …
yifjiang Aug 26, 2026
c197a9d
Merge branch 'main' into yifjiang/reasoning-parser-adjust-request
sara4dev Aug 26, 2026
fc956aa
fix(frontend): strip unconsumed control markers from parsed content (…
yifjiang Aug 28, 2026
035378f
Merge branch 'main' into yifjiang/reasoning-parser-adjust-request
rmccorm4 Aug 28, 2026
3f9e09c
fix(frontend): report reasoning token usage on the vllm chat-processo…
sungsooha Aug 28, 2026
ba7fa4c
build(container): add Inkling vLLM 0.28.0 runtime support
sungsooha Aug 28, 2026
5e37195
style(container): drop the shebang from validate_inkling_runtime.py
sungsooha Aug 28, 2026
bb9d223
test(frontend): accept model_config in the accounting test's reasonin…
sungsooha Aug 28, 2026
0024537
docs(container): state the real reason the vLLM bump to 0.28.0 is req…
sungsooha Aug 28, 2026
087d000
fix(container): anchor the Inkling structural tag at the content-kind…
sungsooha Aug 28, 2026
420f0d9
fix(container): move vllm-omni to 0.28.0rc1 alongside the vLLM bump
sungsooha Aug 28, 2026
48a72a1
fix(container): make vllm_omni_ref per-device so xpu/cpu keep 0.27.0rc1
sungsooha Aug 28, 2026
7d1d51d
fix(container): pin transformers per-device; sync the #13947 review f…
sungsooha Aug 28, 2026
af53999
fix(container): parser-counter reasoning accounting; refresh the Inkl…
sungsooha Aug 28, 2026
a4a7aac
fix(container): keep transformers <5.15 -- vLLM-Omni is the binding c…
sungsooha Aug 28, 2026
818ec76
Revert "add check_pin_compatibility.py"
sungsooha Aug 28, 2026
51c315d
test: accept vLLM 0.28.0's session_id field; skip omni tests when dif…
sungsooha Aug 28, 2026
92f3966
test: accept vLLM 0.28.0's two new EngineCoreOutput fields
sungsooha Aug 28, 2026
1491de1
fix(test): drop variables orphaned by the generated output variants
sungsooha Aug 28, 2026
e19fdf8
fix(test): skip omni tests at setup, not at collection
sungsooha Aug 28, 2026
766bf89
fix(frontend): stop reporting client errors as 500 on the vLLM chat-p…
sungsooha Aug 28, 2026
36201cf
fix(kv-router): preserve the prefill worker's error status through di…
sungsooha Aug 31, 2026
8db4844
test(frontend): assert the tagged error envelope, not the untagged dict
sungsooha Aug 31, 2026
9a63879
style(kv-router): join the format! onto one line for rustfmt
sungsooha Aug 31, 2026
dcd5d18
fix(frontend): tag the remaining error yields; tighten the comments
sungsooha Aug 31, 2026
d5bc581
build(container): take vLLM-Omni 0.28.0 instead of the release candidate
sungsooha Aug 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
230 changes: 221 additions & 9 deletions components/src/dynamo/frontend/prepost.py

Large diffs are not rendered by default.

71 changes: 71 additions & 0 deletions components/src/dynamo/frontend/tests/test_frontend_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import pytest

from dynamo.frontend.utils import (
backend_invalid_argument_to_http_error,
handle_engine_error,
make_backend_error,
make_internal_error,
Expand Down Expand Up @@ -85,3 +86,73 @@ def test_none_response(self):
def test_missing_token_ids(self):
err = handle_engine_error({"other": "data"}, "req-1", logging.getLogger("test"))
assert err["error"]["type"] == "internal_error"


class TestBackendInvalidArgumentToHttpError: # FRONTEND.8 — backend 4xx must not surface as 500
def test_parses_code_and_message(self):
err = backend_invalid_argument_to_http_error(
ValueError(
'BackendInvalidArgument: {"message":"The min_p and logit_bias '
"sampling parameters are not yet supported with speculative "
'decoding.","code":400}'
)
)
assert err is not None
assert err.code == 400
assert "min_p" in err.message
# The serialized envelope must not leak into the client-visible text.
assert "BackendInvalidArgument" not in err.message

def test_honours_a_non_400_status(self):
err = backend_invalid_argument_to_http_error(
ValueError('BackendInvalidArgument: {"message":"bad media","code":415}')
)
assert err is not None and err.code == 415

def test_prefix_after_an_outer_wrapper(self):
err = backend_invalid_argument_to_http_error(
ValueError('Unknown: BackendInvalidArgument: {"message":"nope","code":400}')
)
assert err is not None and err.message == "nope"

def test_unstructured_payload_still_becomes_400(self):
err = backend_invalid_argument_to_http_error(
ValueError("BackendInvalidArgument: grammar is not valid")
)
assert err is not None
assert err.code == 400 and err.message == "grammar is not valid"

def test_missing_code_defaults_to_400(self):
err = backend_invalid_argument_to_http_error(
ValueError('BackendInvalidArgument: {"message":"nope"}')
)
assert err is not None and err.code == 400

@pytest.mark.parametrize("code", [0, 99, 600, 1000, -1])
def test_out_of_range_code_defers_to_the_caller(self, code):
# Rust degrades these to a 500, which is what the generic handler
# already produces -- returning None is how we defer to it.
assert (
backend_invalid_argument_to_http_error(
ValueError(f'BackendInvalidArgument: {{"message":"x","code":{code}}}')
)
is None
)

def test_boolean_code_is_not_a_status(self):
err = backend_invalid_argument_to_http_error(
ValueError('BackendInvalidArgument: {"message":"x","code":true}')
)
assert err is not None and err.code == 400

@pytest.mark.parametrize(
"text",
[
"CUDA out of memory",
"BackendUnknown: something broke",
'{"message":"no prefix","code":400}',
"",
],
)
def test_unrelated_errors_are_left_alone(self, text):
assert backend_invalid_argument_to_http_error(ValueError(text)) is None
Loading
Loading