generateStream method

Stream<ImageGenStreamEvent> generateStream(
  1. ImageGenerationRequest request, {
  2. Future<void>? abortTrigger,
})

Streams image generation as Server-Sent Events (GPT image models only).

Forces stream: true on the request. Yields one or more ImageGenPartialImageEvents followed by a terminal ImageGenCompletedEvent carrying the final image and token-based usage.

Example

final stream = client.images.generateStream(
  ImageGenerationRequest(
    model: ImageModels.gptImage2,
    prompt: 'A white cat wearing a top hat',
    partialImages: 2,
  ),
);

await for (final event in stream) {
  switch (event) {
    case ImageGenPartialImageEvent():
      print('partial #${event.partialImageIndex}');
    case ImageGenCompletedEvent():
      print('done — ${event.usage.totalTokens} tokens');
    case ImageGenUnknownEvent():
      // Forward-compatibility fallback.
  }
}

Implementation

Stream<ImageGenStreamEvent> generateStream(
  ImageGenerationRequest request, {
  Future<void>? abortTrigger,
}) {
  ensureNotClosed?.call();
  final body = request.toJson()..['stream'] = true;
  return streamSseEvents(
    endpoint: _generateEndpoint,
    body: body,
    abortTrigger: abortTrigger,
  ).map((json) {
    final sseEvent = json['_event'] as String?;
    final error = json['error'];
    if (sseEvent == 'error' || error != null) {
      throwInlineStreamError(json, sseEvent, error);
    }
    try {
      return ImageGenStreamEvent.fromJson(json);
    } on FormatException catch (e) {
      throw ParseException(
        message: 'Failed to parse image generation stream event: $e',
        responseBody: json.toString(),
        cause: e,
      );
    } on TypeError catch (e) {
      throw ParseException(
        message: 'Failed to parse image generation stream event: $e',
        responseBody: json.toString(),
        cause: e,
      );
    }
  });
}