Skip to content
Merged
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from dynamo.common.metadata_upload import MetadataUploader
from dynamo.common.multimodal.image_loader import ImageLoader
from dynamo.common.utils.engine_response import normalize_finish_reason
from dynamo.llm import HttpError
from dynamo.sglang._compat import (
filter_supported_async_generate_kwargs,
require_reasoning_kwargs,
Expand Down Expand Up @@ -46,10 +47,11 @@
def _raise_if_conditional_disagg_bypass(request: Dict[str, Any]) -> None:
if BYPASS_REMOTE_PREFILL_ANNOTATION not in (request.get("annotations") or []):
return
raise RuntimeError(
raise HttpError(
400,
f"Detected request annotation {BYPASS_REMOTE_PREFILL_ANNOTATION!r}, but "
"SGLang backend does not support conditional disaggregation yet. "
"Use vLLM or TensorRT-LLM for conditional disaggregation."
"Use vLLM or TensorRT-LLM for conditional disaggregation.",
Comment on lines +50 to +54

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 HttpError propagation path verified

dynamo.llm.HttpError (defined in lib/bindings/python/src/dynamo/llm/exceptions.py) validates code range 0-599 and is duck-typed extracted by the Rust bridge (lib/bindings/python/rust/http.rs:190-201) into http_error::HttpError, so raising with code 400 surfaces a client error rather than a 500. Note the extraction path applies to the HTTP engine bridge; for worker-endpoint requests the exception travels back through the runtime error channel — worth confirming manually that the frontend renders 400 rather than a generic internal error for SGLang decode workers.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

)


Expand Down
Loading