formatValidationError function

String formatValidationError({
  1. required String toolName,
  2. required List<ValidationIssue> issues,
  3. String? fallbackMessage,
})

Converts validation errors into a human-readable and LLM-friendly error message.

Implementation

String formatValidationError({
  required String toolName,
  required List<ValidationIssue> issues,
  String? fallbackMessage,
}) {
  final errorParts = <String>[];

  for (final issue in issues) {
    switch (issue) {
      case MissingParamIssue(:final param):
        errorParts.add('The required parameter `$param` is missing');
      case UnexpectedParamIssue(:final param):
        errorParts.add('An unexpected parameter `$param` was provided');
      case TypeMismatchIssue(:final param, :final expected, :final received):
        errorParts.add(
          'The parameter `$param` type is expected as `$expected` '
          'but provided as `$received`',
        );
    }
  }

  if (errorParts.isEmpty) {
    return fallbackMessage ?? 'Validation failed for $toolName';
  }

  final issueWord = errorParts.length > 1 ? 'issues' : 'issue';
  return '$toolName failed due to the following $issueWord:\n'
      '${errorParts.join('\n')}';
}