createJsSessionOptions method

JSObject createJsSessionOptions(
  1. Map<String, dynamic>? options
)

Creates JavaScript session options object

Implementation

JSObject createJsSessionOptions(Map<String, dynamic>? options) {
  // Get the SessionOptions constructor from onnxruntime-web
  final jsOptions = createJSObject();

  if (options != null) {
    // Set execution providers if specified
    if (options.containsKey('providers')) {
      final providers = options['providers'] as List<String>;
      final jsProviders =
          providers.map((provider) {
            // Map Flutter provider names to onnxruntime-web provider names
            switch (provider) {
              case 'CPU':
              case 'WEB_ASSEMBLY':
                return 'wasm';
              case 'WEB_GL':
                return 'webgl';
              case 'WEB_GPU':
                return 'webgpu';
              case 'WEB_NN':
                return 'webnn';
              default:
                throw PlatformException(
                  code: 'INVALID_PROVIDER',
                  message: 'Provider $provider is not supported',
                  details: null,
                );
            }
          }).toList();

      // Set executionProviders property
      jsOptions.setProperty('executionProviders'.toJS, jsArrayFrom(jsProviders));
    }

    // Set other options like intraOpNumThreads, interOpNumThreads if needed
    if (options.containsKey('intraOpNumThreads')) {
      jsOptions.setProperty('intraOpNumThreads'.toJS, options['intraOpNumThreads']);
    }

    if (options.containsKey('interOpNumThreads')) {
      jsOptions.setProperty('interOpNumThreads'.toJS, options['interOpNumThreads']);
    }

    // Handle graph optimization level
    if (options.containsKey('graphOptimizationLevel')) {
      jsOptions.setProperty('graphOptimizationLevel'.toJS, options['graphOptimizationLevel']);
    }

    // Add more options as needed
  }

  return jsOptions;
}