diff --git a/src/celeste/providers/openai/images/client.py b/src/celeste/providers/openai/images/client.py index 367cbf0d..d8f084c3 100644 --- a/src/celeste/providers/openai/images/client.py +++ b/src/celeste/providers/openai/images/client.py @@ -11,7 +11,7 @@ from celeste.client import APIMixin from celeste.core import UsageField from celeste.io import FinishReason -from celeste.utils import detect_mime_type +from celeste.utils import build_image_data_url, detect_mime_type from . import config @@ -127,7 +127,7 @@ def _make_stream_request( endpoint: str | None = None, **parameters: Any, ) -> AsyncIterator[dict[str, Any]]: - """Make streaming request to OpenAI Images API generations endpoint. + """Make streaming request to OpenAI Images API. Streaming is only supported for gpt-image-1. """ @@ -137,6 +137,13 @@ def _make_stream_request( if "partial_images" not in request_body: request_body["partial_images"] = 1 + # Serialize ImageArtifact for JSON streaming edit + # Non-streaming uses multipart; streaming uses JSON with images array + if "image" in request_body and hasattr(request_body["image"], "get_base64"): + artifact = request_body.pop("image") + request_body["images"] = [{"image_url": build_image_data_url(artifact)}] + endpoint = config.OpenAIImagesEndpoint.CREATE_EDIT + headers = self._json_headers() return self.http_client.stream_post(