findFor method
First engine (by descending priority, then registration order) whose
InferenceEngineProvider.canHandle accepts spec; null if none.
Implementation
InferenceEngineProvider? findFor(InferenceModelSpec spec) {
final matches = _registered.where((e) => e.canHandle(spec)).toList();
if (matches.isEmpty) return null;
// Composite-key sort (Dart's List.sort is NOT stable): descending priority,
// then ascending original index so first-registered wins on equal priority.
final indexed = [for (var i = 0; i < matches.length; i++) (i, matches[i])];
indexed.sort((a, b) {
final byPriority = b.$2.priority.compareTo(a.$2.priority);
return byPriority != 0 ? byPriority : a.$1.compareTo(b.$1);
});
if (kDebugMode &&
indexed.length > 1 &&
indexed[0].$2.priority == indexed[1].$2.priority) {
gemmaLog(
'[flutter_gemma] Ambiguous: '
'${indexed.map((e) => e.$2.name).join(", ")} all handle this spec at '
'priority ${indexed[0].$2.priority}; using "${indexed[0].$2.name}" '
'(first registered).',
);
}
return indexed.first.$2;
}