Skip to content

Commit 3aab7be

Browse files
committed
Fix: Enable /v1/models endpoint for pure diffusion mode (Issue #751)
Signed-off-by: majiayu000 <1835304752@qq.com>
1 parent 6c85ddc commit 3aab7be

File tree

2 files changed

+5
-69
lines changed

2 files changed

+5
-69
lines changed

tests/entrypoints/openai_api/test_image_server.py

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,11 @@ def test_client(mock_async_diffusion):
161161
app.state.engine_client = mock_async_diffusion
162162
app.state.diffusion_engine = mock_async_diffusion # Also set for health endpoint
163163
app.state.stage_configs = [{"stage_type": "diffusion"}]
164-
app.state.diffusion_model_name = "Qwen/Qwen-Image" # For models endpoint
164+
165+
from vllm.entrypoints.openai.serving_models import BaseModelPath
166+
from vllm_omni.entrypoints.openai.api_server import _DiffusionServingModels
167+
app.state.openai_serving_models = _DiffusionServingModels([BaseModelPath(name="Qwen/Qwen-Image", model_path="Qwen/Qwen-Image")])
168+
165169
app.state.args = Namespace(
166170
default_sampling_params='{"0": {"num_inference_steps":4, "guidance_scale":7.5}}',
167171
max_generated_image_size=4096, # 64*64
@@ -214,33 +218,6 @@ def test_health_endpoint_no_engine():
214218
assert data["status"] == "unhealthy"
215219

216220

217-
def test_models_endpoint(test_client):
218-
"""Test /v1/models endpoint for diffusion mode"""
219-
response = test_client.get("/v1/models")
220-
assert response.status_code == 200
221-
data = response.json()
222-
assert data["object"] == "list"
223-
assert len(data["data"]) == 1
224-
assert data["data"][0]["id"] == "Qwen/Qwen-Image"
225-
assert data["data"][0]["object"] == "model"
226-
227-
228-
def test_models_endpoint_no_engine():
229-
"""Test /v1/models endpoint when no engine is initialized"""
230-
from fastapi import FastAPI
231-
232-
from vllm_omni.entrypoints.openai.api_server import router
233-
234-
app = FastAPI()
235-
app.include_router(router)
236-
# Don't set any engine
237-
238-
client = TestClient(app)
239-
response = client.get("/v1/models")
240-
assert response.status_code == 200
241-
data = response.json()
242-
assert data["object"] == "list"
243-
assert len(data["data"]) == 0
244221

245222

246223
def test_generate_single_image(test_client):

vllm_omni/entrypoints/openai/api_server.py

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -888,47 +888,6 @@ async def health(raw_request: Request) -> JSONResponse:
888888
)
889889

890890

891-
# Remove existing models endpoint if present (from vllm imports)
892-
# to ensure our handler takes precedence
893-
_remove_route_from_router(router, "/v1/models")
894-
895-
896-
@router.get("/v1/models")
897-
async def show_available_models(raw_request: Request) -> JSONResponse:
898-
"""Show available models endpoint that works for both LLM and diffusion modes.
899-
900-
Returns model information in OpenAI-compatible format.
901-
"""
902-
# Check if we're in diffusion mode
903-
diffusion_model_name = getattr(raw_request.app.state, "diffusion_model_name", None)
904-
if diffusion_model_name is not None:
905-
# Diffusion mode - return the loaded model
906-
return JSONResponse(
907-
content={
908-
"object": "list",
909-
"data": [
910-
{
911-
"id": diffusion_model_name,
912-
"object": "model",
913-
"created": 0,
914-
"owned_by": "vllm-omni",
915-
"permission": [],
916-
}
917-
],
918-
}
919-
)
920-
921-
# LLM mode - delegate to openai_serving_models
922-
openai_serving_models = getattr(raw_request.app.state, "openai_serving_models", None)
923-
if openai_serving_models is not None:
924-
models = await openai_serving_models.show_available_models()
925-
return JSONResponse(content=models.model_dump())
926-
927-
return JSONResponse(
928-
content={"object": "list", "data": []},
929-
)
930-
931-
932891
# Image generation API endpoints
933892

934893

0 commit comments

Comments
 (0)