From 25e678d93336f089b7248b414c79ef66ad51302f Mon Sep 17 00:00:00 2001 From: Kangyan-Zhou Date: Fri, 6 Mar 2026 05:36:13 -0800 Subject: [PATCH] [diffusion] endpoint: add /server_info and /model_info endpoints for gateway discovery (#20020) Co-authored-by: Claude Opus 4.6 --- .../runtime/entrypoints/http_server.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/python/sglang/multimodal_gen/runtime/entrypoints/http_server.py b/python/sglang/multimodal_gen/runtime/entrypoints/http_server.py index 29aeaa0f0..4830411bf 100644 --- a/python/sglang/multimodal_gen/runtime/entrypoints/http_server.py +++ b/python/sglang/multimodal_gen/runtime/entrypoints/http_server.py @@ -25,6 +25,7 @@ from sglang.multimodal_gen.runtime.entrypoints.utils import ( from sglang.multimodal_gen.runtime.scheduler_client import async_scheduler_client from sglang.multimodal_gen.runtime.server_args import ServerArgs, get_global_server_args from sglang.multimodal_gen.runtime.utils.logging_utils import init_logger +from sglang.version import __version__ if TYPE_CHECKING: from sglang.multimodal_gen.runtime.pipelines_core.schedule_batch import Req @@ -95,6 +96,63 @@ async def get_models(request: Request): return response +@health_router.get("/server_info") +async def server_info_endpoint(request: Request): + """Get server information. + + Returns fields compatible with the LLM engine's /server_info so that + the model gateway can discover diffusion workers. + """ + server_args: ServerArgs = request.app.state.server_args + + return { + "model_path": server_args.model_path, + "served_model_name": server_args.model_id or server_args.model_path, + "tp_size": server_args.tp_size, + "dp_size": server_args.dp_size, + "version": __version__, + } + + +@health_router.get("/model_info") +async def model_info_endpoint(request: Request): + """Get model information. + + Returns fields compatible with the LLM engine's /model_info so that + the model gateway can detect capabilities for diffusion workers. + """ + from sglang.multimodal_gen.registry import get_model_info + + server_args: ServerArgs = request.app.state.server_args + task_type = server_args.pipeline_config.task_type + + try: + registry_info = get_model_info( + server_args.model_path, + backend=server_args.backend, + model_id=server_args.model_id, + ) + except Exception: + logger.warning("Failed to resolve model info from registry", exc_info=True) + registry_info = None + + return { + # Fields consumed by the model gateway for worker discovery + "model_path": server_args.model_path, + "is_generation": True, + "model_type": "diffusion", + "architectures": ( + [registry_info.pipeline_cls.__name__] if registry_info else None + ), + # Fields matching the LLM engine's /model_info shape + "has_image_understanding": task_type.accepts_image_input(), + "has_audio_understanding": False, + # Diffusion-specific fields + "task_type": task_type.name, + "is_image_gen": task_type.is_image_gen(), + } + + @health_router.get("/health_generate") async def health_generate(): # TODO : health generate endpoint