validateImagesForAPI method

void validateImagesForAPI(
  1. List<Map<String, dynamic>> messages
)

Validates that all images in messages are within the API size limit.

Implementation

void validateImagesForAPI(List<Map<String, dynamic>> messages) {
  final oversizedImages = <OversizedImage>[];
  int imageIndex = 0;

  for (final msg in messages) {
    if (msg['type'] != 'user') continue;

    final innerMessage = msg['message'] as Map<String, dynamic>?;
    if (innerMessage == null) continue;

    final content = innerMessage['content'];
    if (content is! List) continue;

    for (final block in content) {
      if (block is Map &&
          block['type'] == 'image' &&
          block['source'] is Map &&
          block['source']['type'] == 'base64' &&
          block['source']['data'] is String) {
        imageIndex++;
        final base64Size = (block['source']['data'] as String).length;
        if (base64Size > apiImageMaxBase64Size) {
          _logEvent('tengu_image_api_validation_failed', {
            'base64_size_bytes': base64Size,
            'max_bytes': apiImageMaxBase64Size,
          });
          oversizedImages.add(
            OversizedImage(index: imageIndex, size: base64Size),
          );
        }
      }
    }
  }

  if (oversizedImages.isNotEmpty) {
    throw ImageSizeError(oversizedImages, apiImageMaxBase64Size);
  }
}