From 1414195fbb49f8c70be61b173a89edbc9f20fb55 Mon Sep 17 00:00:00 2001 From: lif <1835304752@qq.com> Date: Sat, 28 Mar 2026 22:17:38 +0800 Subject: [PATCH] Fix: Enable /v1/models endpoint for pure diffusion mode (#805) Signed-off-by: majiayu000 <1835304752@qq.com> --- .../openai_api/test_image_server.py | 8 ++++- vllm_omni/entrypoints/openai/api_server.py | 36 ++++--------------- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/tests/entrypoints/openai_api/test_image_server.py b/tests/entrypoints/openai_api/test_image_server.py index b5d22dc09..036ca003b 100644 --- a/tests/entrypoints/openai_api/test_image_server.py +++ b/tests/entrypoints/openai_api/test_image_server.py @@ -168,7 +168,13 @@ def test_client(mock_async_diffusion): app.state.engine_client = mock_async_diffusion app.state.diffusion_engine = mock_async_diffusion # Also set for health endpoint app.state.stage_configs = [SimpleNamespace(stage_type="diffusion")] - app.state.diffusion_model_name = "Qwen/Qwen-Image" # For models endpoint + from vllm.entrypoints.openai.models.protocol import BaseModelPath + + from vllm_omni.entrypoints.openai.api_server import _DiffusionServingModels + + app.state.openai_serving_models = _DiffusionServingModels( + [BaseModelPath(name="Qwen/Qwen-Image", model_path="Qwen/Qwen-Image")] + ) app.state.args = Namespace( default_sampling_params='{"0": {"num_inference_steps":4, "guidance_scale":7.5}}', max_generated_image_size=4096, # 64*64 diff --git a/vllm_omni/entrypoints/openai/api_server.py b/vllm_omni/entrypoints/openai/api_server.py index c88a8144d..da7361acc 100644 --- a/vllm_omni/entrypoints/openai/api_server.py +++ b/vllm_omni/entrypoints/openai/api_server.py @@ -1207,38 +1207,16 @@ _remove_route_from_router(router, "/v1/models") @router.get("/v1/models") async def show_available_models(raw_request: Request) -> JSONResponse: - """Show available models endpoint that works for both LLM and diffusion modes. + """Show available models for both LLM and diffusion modes. - Returns model information in OpenAI-compatible format. + Delegates to state.openai_serving_models which is set to either + OpenAIServingModels (LLM) or _DiffusionServingModels (pure diffusion). """ - # Check if we're in diffusion mode - diffusion_model_name = getattr(raw_request.app.state, "diffusion_model_name", None) - if diffusion_model_name is not None: - # Diffusion mode - return the loaded model - return JSONResponse( - content={ - "object": "list", - "data": [ - { - "id": diffusion_model_name, - "object": "model", - "created": 0, - "owned_by": "vllm-omni", - "permission": [], - } - ], - } - ) - - # LLM mode - delegate to openai_serving_models - openai_serving_models = getattr(raw_request.app.state, "openai_serving_models", None) - if openai_serving_models is not None: - models = await openai_serving_models.show_available_models() + handler = getattr(raw_request.app.state, "openai_serving_models", None) + if handler is not None: + models = await handler.show_available_models() return JSONResponse(content=models.model_dump()) - - return JSONResponse( - content={"object": "list", "data": []}, - ) + return JSONResponse(content={"object": "list", "data": []}) # Image generation API endpoints