getDefaultProvidersForPlatform method

List<OrtProvider> getDefaultProvidersForPlatform()

Implementation

List<OrtProvider> getDefaultProvidersForPlatform() {
  final available = getAvailableProviders();

  if (Platform.isIOS || Platform.isMacOS) {
    final providers = <OrtProvider>[];
    if (available.contains(OrtProvider.coreML.ortName)) {
      providers.add(OrtProvider.coreML);
    }
    providers.add(OrtProvider.cpu);
    return providers;
  }

  if (Platform.isAndroid) {
    final providers = <OrtProvider>[];
    // GPU providers first (higher priority)
    if (available.contains('WebGpuExecutionProvider') ||
        available.contains('WebGPUExecutionProvider')) {
      providers.add(OrtProvider.webGpu);
    }
    if (available.contains('NnapiExecutionProvider') ||
        available.contains('NNAPIExecutionProvider')) {
      providers.add(OrtProvider.nnapi);
    }
    // CPU-optimized providers
    if (available.contains('XnnpackExecutionProvider') ||
        available.contains('XNNPACKExecutionProvider')) {
      providers.add(OrtProvider.xnnpack);
    }
    if (available.contains(OrtProvider.qnn.ortName)) {
      providers.add(OrtProvider.qnn);
    }
    providers.add(OrtProvider.cpu);
    return providers;
  }

  if (Platform.isLinux || Platform.isWindows) {
    final providers = <OrtProvider>[];
    if (available.contains(OrtProvider.cuda.ortName)) {
      providers.add(OrtProvider.cuda);
    }
    if (available.contains(OrtProvider.tensorRT.ortName)) {
      providers.add(OrtProvider.tensorRT);
    }
    if (available.contains(OrtProvider.rocm.ortName)) {
      providers.add(OrtProvider.rocm);
    }
    if (available.contains(OrtProvider.openVINO.ortName)) {
      providers.add(OrtProvider.openVINO);
    }
    if (available.contains(OrtProvider.dnnl.ortName)) {
      providers.add(OrtProvider.dnnl);
    }
    providers.add(OrtProvider.cpu);
    return providers;
  }

  return [OrtProvider.cpu];
}