validateImagesForAPI method
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);
}
}