validate method
void
validate()
Reject invalid dynamic budgets in debug and release builds.
Implementation
void validate() {
_requirePositiveSafeBudgetInteger(maxJsonDepth, 'maxJsonDepth');
_requirePositiveSafeBudgetInteger(maxCapabilityDepth, 'maxCapabilityDepth');
_requirePositiveSafeBudgetInteger(maxCapabilityNodes, 'maxCapabilityNodes');
_requirePositiveSafeBudgetInteger(maxCapabilityBytes, 'maxCapabilityBytes');
_requirePositiveSafeBudgetInteger(maxAuthMethods, 'maxAuthMethods');
_requirePositiveSafeBudgetInteger(maxMetadataDepth, 'maxMetadataDepth');
_requirePositiveSafeBudgetInteger(maxMetadataNodes, 'maxMetadataNodes');
_requirePositiveSafeBudgetInteger(maxMetadataEntries, 'maxMetadataEntries');
_requirePositiveSafeBudgetInteger(maxMetadataBytes, 'maxMetadataBytes');
_requirePositiveSafeBudgetInteger(maxCollectionItems, 'maxCollectionItems');
_requirePositiveSafeBudgetInteger(
maxStructuredUpdateNodes,
'maxStructuredUpdateNodes',
);
_requirePositiveSafeBudgetInteger(
maxStructuredUpdateBytes,
'maxStructuredUpdateBytes',
);
_requirePositiveSafeBudgetInteger(
maxStructuredStringBytes,
'maxStructuredStringBytes',
);
_requirePositiveSafeBudgetInteger(
maxMessageTextBytes,
'maxMessageTextBytes',
);
_requirePositiveSafeBudgetInteger(
maxMessageTextLines,
'maxMessageTextLines',
);
_requirePositiveSafeBudgetInteger(
maxMarkdownSyntaxTokens,
'maxMarkdownSyntaxTokens',
);
_requirePositiveSafeBudgetInteger(
maxMarkdownFallbackBytes,
'maxMarkdownFallbackBytes',
);
_requirePositiveSafeBudgetInteger(
maxThoughtTextBytes,
'maxThoughtTextBytes',
);
_requirePositiveSafeBudgetInteger(
maxEmbeddedMediaBytes,
'maxEmbeddedMediaBytes',
);
_requirePositiveSafeBudgetInteger(maxImageDimension, 'maxImageDimension');
_requirePositiveSafeBudgetInteger(maxImagePixels, 'maxImagePixels');
_requirePositiveSafeBudgetInteger(
maxImagePreviewPixels,
'maxImagePreviewPixels',
);
_requirePositiveSafeBudgetInteger(
maxConcurrentImageDecodes,
'maxConcurrentImageDecodes',
);
_requirePositiveSafeBudgetInteger(
maxImagePreviewPixelsGlobal,
'maxImagePreviewPixelsGlobal',
);
_requirePositiveSafeBudgetInteger(
maxImageDecodeBytesGlobal,
'maxImageDecodeBytesGlobal',
);
_requirePositiveSafeBudgetInteger(maxTurnItems, 'maxTurnItems');
_requirePositiveSafeBudgetInteger(
maxTurnRetainedBytes,
'maxTurnRetainedBytes',
);
_requirePositiveSafeBudgetInteger(maxTimelineItems, 'maxTimelineItems');
_requirePositiveSafeBudgetInteger(maxTimelineBytes, 'maxTimelineBytes');
_requirePositiveSafeBudgetInteger(maxUiStateBytes, 'maxUiStateBytes');
_requirePositiveSafeBudgetInteger(
maxMetadataPreviewBytes,
'maxMetadataPreviewBytes',
);
_requirePositiveSafeBudgetInteger(
maxMetadataPreviewChars,
'maxMetadataPreviewChars',
);
chatMaxBase64EncodedLength(maxEmbeddedMediaBytes);
if (maxImagePreviewPixels > _maxSafeBudgetInteger ~/ 4) {
throw ArgumentError.value(
maxImagePreviewPixels,
'maxImagePreviewPixels',
'decoded preview bytes exceed the cross-platform safe integer range',
);
}
_requireAtMost(
maxImagePreviewPixels,
maxImagePixels,
'maxImagePreviewPixels relative to maxImagePixels',
);
_requireAtMost(
maxImagePreviewPixels,
maxImagePreviewPixelsGlobal,
'maxImagePreviewPixels relative to maxImagePreviewPixelsGlobal',
);
_requireAtMost(
maxMarkdownFallbackBytes,
maxMessageTextBytes,
'maxMarkdownFallbackBytes relative to maxMessageTextBytes',
);
_requireAtMost(
maxTurnRetainedBytes,
maxTimelineBytes,
'maxTurnRetainedBytes relative to maxTimelineBytes',
);
_requireAtMost(
maxTimelineBytes,
maxUiStateBytes,
'maxTimelineBytes relative to maxUiStateBytes',
);
final previewBytes = maxImagePreviewPixels * 4;
_requireAtMost(
previewBytes,
maxImageDecodeBytesGlobal,
'maxImagePreviewPixels bytes relative to maxImageDecodeBytesGlobal',
);
final remainingImageDecodeBytes = maxImageDecodeBytesGlobal - previewBytes;
if (maxEmbeddedMediaBytes > remainingImageDecodeBytes) {
throw ChatInputLimitExceeded(
resource: 'maxEmbeddedMediaBytes after image preview reservation',
limit: remainingImageDecodeBytes,
observedAtLeast: maxEmbeddedMediaBytes,
);
}
}