fix(fal_ai): reject empty image lists in image edit requests

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
kerry 2026-09-20 05:44:56 +00:00
parent cc7dce6a21
commit 9f24699e4c
2 changed files with 6 additions and 5 deletions

View file

@ -138,9 +138,9 @@ class FalAIImageEditConfig(BaseImageEditConfig):
litellm_params: GenericLiteLLMParams,
headers: dict,
) -> tuple[dict, RequestFiles]:
if image is None:
images: Final = tuple(img for img in (image if isinstance(image, list) else (image,)) if img is not None)
if not images:
raise ValueError("Fal AI image edit requires at least one input image")
images: Final = tuple(image) if isinstance(image, list) else (image,)
mask: Final = _first(image_edit_optional_request_params.get("mask"))
mask_field: Final[Mapping[str, str]] = (
MappingProxyType({"mask_url": _to_data_url(mask)}) if mask is not None else MappingProxyType({})
@ -152,7 +152,7 @@ class FalAIImageEditConfig(BaseImageEditConfig):
)
request_body: Final[dict[str, object]] = { # mutable-ok: base class contract returns a dict
"prompt": prompt,
"image_urls": tuple(_to_data_url(img) for img in images if img is not None),
"image_urls": tuple(_to_data_url(img) for img in images),
**mask_field,
**provider_params,
}

View file

@ -128,12 +128,13 @@ def test_transform_response_maps_fal_images():
assert [image.url for image in response.data] == ["https://fal.media/out.png"]
def test_transform_request_requires_an_image():
@pytest.mark.parametrize("image", [None, []])
def test_transform_request_requires_an_image(image):
with pytest.raises(ValueError, match="input image"):
FalAIImageEditConfig().transform_image_edit_request(
model="openai/gpt-image-2.5/flare/edit",
prompt="make it blue",
image=None,
image=image,
image_edit_optional_request_params={},
litellm_params=GenericLiteLLMParams(),
headers={},