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