| from __future__ import annotations |
|
|
| from typing import Any, Iterator |
|
|
| from services.protocol.conversation import ( |
| ConversationRequest, |
| ImageGenerationError, |
| collect_image_outputs, |
| encode_images, |
| stream_image_chunks, |
| stream_image_outputs_with_pool, |
| ) |
|
|
|
|
| def handle(body: dict[str, Any]) -> dict[str, Any] | Iterator[dict[str, Any]]: |
| prompt = str(body.get("prompt") or "") |
| images = body.get("images") or [] |
| model = str(body.get("model") or "gpt-image-2") |
| n = int(body.get("n") or 1) |
| size = body.get("size") |
| response_format = str(body.get("response_format") or "b64_json") |
| base_url = str(body.get("base_url") or "") or None |
| encoded_images = encode_images(images) |
| if not encoded_images: |
| raise ImageGenerationError("image is required") |
| outputs = stream_image_outputs_with_pool(ConversationRequest( |
| prompt=prompt, |
| model=model, |
| n=n, |
| size=size, |
| response_format=response_format, |
| base_url=base_url, |
| images=encoded_images, |
| message_as_error=True, |
| )) |
| if body.get("stream"): |
| return stream_image_chunks(outputs) |
| return collect_image_outputs(outputs) |
|
|