[Bugfix][Frontend] Honor output_compression on the image generations route (#7447)
Signed-off-by: hsliu_ustc <hsliu_ustc@noreply.gitcode.com> Signed-off-by: amy-why-3459 <wuhaiyan17@huawei.com> Co-authored-by: amy-why-3459 <wuhaiyan17@huawei.com>
This commit is contained in:
1 parent
f7d9deb45a
commit
01a2f93256
4 files changed
+101
-1
No files matched your search
@@ -0,0 +1,54 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
|
||||
|
||||
"""L1 tests for the image response encoder's compression contract."""
|
||||
|
||||
import base64
|
||||
import io
|
||||
|
||||
import pytest
|
||||
from PIL import Image
|
||||
|
||||
from vllm_omni.entrypoints.openai.image_api_utils import (
|
||||
encode_image_base64_with_compression,
|
||||
)
|
||||
|
||||
pytestmark = [pytest.mark.core_model, pytest.mark.cpu]
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def image():
|
||||
# Photographic-content proxy: noise-plus-gradient content compresses very
|
||||
# differently across PNG compress levels, which is what the mapping under
|
||||
# test controls.
|
||||
import numpy as np
|
||||
|
||||
rng = np.random.default_rng(0)
|
||||
grad = np.linspace(0, 255, 256, dtype=np.float32)
|
||||
arr = np.clip(grad[None, :, None] + rng.integers(-24, 25, (256, 256, 3)), 0, 255).astype(np.uint8)
|
||||
return Image.fromarray(arr, mode="RGB")
|
||||
|
||||
|
||||
def test_png_output_compression_maps_to_compress_level(image):
|
||||
"""output_compression 100 -> compress_level 0, 1 -> compress_level 9."""
|
||||
|
||||
def encode(compression):
|
||||
buffer = io.BytesIO()
|
||||
image.save(buffer, format="PNG", compress_level=max(0, min(9, 9 - compression // 11)))
|
||||
return len(base64.b64encode(buffer.getvalue()))
|
||||
|
||||
fast = encode_image_base64_with_compression(image, format="png", output_compression=100)
|
||||
small = encode_image_base64_with_compression(image, format="png", output_compression=1)
|
||||
|
||||
# Level-0 PNG barely compresses; the mapped level-9 encode is smaller.
|
||||
assert len(small) < len(fast)
|
||||
# The mapping must produce the same sizes as the equivalent compress_level.
|
||||
assert len(fast) == encode(100)
|
||||
assert len(small) == encode(1)
|
||||
|
||||
|
||||
def test_jpeg_output_compression_maps_to_quality(image):
|
||||
high = base64.b64decode(encode_image_base64_with_compression(image, format="jpeg", output_compression=100))
|
||||
low = base64.b64decode(encode_image_base64_with_compression(image, format="jpeg", output_compression=10))
|
||||
|
||||
assert len(high) > len(low)
|
||||
Reference in new issue
Block a user