parseOpenAiImageResponse function

ImageGenerationResponse parseOpenAiImageResponse(
  1. Map<String, dynamic> data, {
  2. String defaultMimeType = 'image/png',
})

OpenAI 形式の画像生成レスポンス(data[].b64_json / data[].url)を ImageGenerationResponse に変換する。

media_type(OpenRouter)が無ければ defaultMimeType。usage は input_tokens / output_tokens(OpenAI)か prompt_tokens / completion_tokens、費用は usage.cost(OpenRouter)。

Implementation

ImageGenerationResponse parseOpenAiImageResponse(
  Map<String, dynamic> data, {
  String defaultMimeType = 'image/png',
}) {
  final images = <LLMImagePart>[];
  String? revised;
  for (final item in (data['data'] as List?) ?? const []) {
    if (item is! Map<String, dynamic>) continue;
    final b64 = item['b64_json'];
    final url = item['url'];
    if (b64 is String && b64.isNotEmpty) {
      images.add(
        LLMImagePart.bytes(
          base64Decode(b64),
          mimeType: (item['media_type'] as String?) ?? defaultMimeType,
        ),
      );
    } else if (url is String && url.isNotEmpty) {
      images.add(LLMImagePart.dataUri(url));
    }
    revised ??= item['revised_prompt'] as String?;
  }
  final usage = data['usage'];
  final usageMap = usage is Map<String, dynamic> ? usage : null;
  return ImageGenerationResponse(
    images: images,
    usage: usageMap == null ? null : _parseGenerationUsage(usageMap),
    costUsd: (usageMap?['cost'] as num?)?.toDouble(),
    revisedPrompt: revised,
  );
}