postprocess method

  1. @override
MlValidationResult postprocess(
  1. List rawOutput,
  2. String input
)
override

Interprets model output into a validation result.

rawOutput is the raw tensor output from the model. input is the original text for reference.

Implementation

@override
MlValidationResult postprocess(List<dynamic> rawOutput, String input) {
  final output = rawOutput[0];
  List<double> probabilities;

  if (output is List<List<double>>) {
    probabilities = output[0];
  } else if (output is List<double>) {
    probabilities = output;
  } else {
    return MlValidationResult.unavailable();
  }

  final predictedIndex = _argmax(probabilities);
  final confidence = probabilities[predictedIndex];

  // Index 0 means "valid/no correction needed"
  if (predictedIndex == 0 || confidence < confidenceThreshold) {
    return const MlValidationResult(isValid: true);
  }

  if (predictedIndex < labels.length) {
    final suggestedDomain = labels[predictedIndex];
    final atIndex = input.lastIndexOf('@');
    final localPart = atIndex >= 0 ? input.substring(0, atIndex) : input;
    final suggestion = '$localPart@$suggestedDomain';

    return MlValidationResult(
      isValid: false,
      errorMessage: 'Did you mean $suggestion?',
      suggestion: suggestion,
      confidence: confidence,
    );
  }

  return const MlValidationResult(isValid: true);
}