diff --git a/litellm/llms/azure_ai/image_edit/flux2_transformation.py b/litellm/llms/azure_ai/image_edit/flux2_transformation.py index f91a87ba0f4..ef28ebf1c35 100644 --- a/litellm/llms/azure_ai/image_edit/flux2_transformation.py +++ b/litellm/llms/azure_ai/image_edit/flux2_transformation.py @@ -1,6 +1,5 @@ import base64 from collections.abc import Mapping, Sequence -from io import BufferedReader from types import MappingProxyType from typing import Any, Final @@ -123,12 +122,11 @@ class AzureFoundryFlux2ImageEditConfig(OpenAIImageEditConfig): def _convert_image_to_base64(self, image: Any) -> str: """Convert image file to base64 string""" - if isinstance(image, BufferedReader): - image_bytes = image.read() - image.seek(0) # Reset file pointer for potential reuse - elif isinstance(image, bytes): + if isinstance(image, bytes): image_bytes = image elif hasattr(image, "read"): + if image.seekable(): + image.seek(0) image_bytes = image.read() else: raise ValueError(f"Unsupported image type: {type(image)}") diff --git a/tests/unit/llms/azure_ai/image_edit/test_azure_ai_image_edit_transformation.py b/tests/unit/llms/azure_ai/image_edit/test_azure_ai_image_edit_transformation.py index 27f52afafa5..ae188a739e4 100644 --- a/tests/unit/llms/azure_ai/image_edit/test_azure_ai_image_edit_transformation.py +++ b/tests/unit/llms/azure_ai/image_edit/test_azure_ai_image_edit_transformation.py @@ -3,6 +3,7 @@ import json import struct import zlib from collections.abc import Mapping +from io import BytesIO from typing import Final import httpx @@ -184,6 +185,22 @@ def test_flux2_image_edit_preserves_controls_and_pixel_cost(dimensions: Mapping[ assert response._hidden_params["response_cost"] == pytest.approx(catalog_rate * 2048 * 1024 * 2) +def test_flux2_image_edit_encodes_a_mid_position_stream_from_the_start(): + stream: Final = BytesIO(b"prefix" + b"image") + stream.seek(6) + + request, files = AzureFoundryFlux2ImageEditConfig().transform_image_edit_request( + model="FLUX.2-flex", + prompt="Blend every reference", + image=[stream], + image_edit_optional_request_params={}, + litellm_params={}, + headers={}, + ) + + assert request["input_image"] == base64.b64encode(b"prefiximage").decode() + + def _png_bytes(width: int, height: int) -> bytes: """Smallest well-formed PNG carrying real IHDR dimensions."""