getMetadata method

  1. @override
Future<Map<String, dynamic>> getMetadata(
  1. String sessionId
)

Get metadata about the model

sessionId is the ID of the session to get metadata from

Returns information about the model such as producer name, graph name, domain, description, version, and custom metadata.

Implementation

@override
Future<Map<String, dynamic>> getMetadata(String sessionId) async {
  try {
    // Check if the session exists
    if (!_sessions.containsKey(sessionId)) {
      throw PlatformException(code: "INVALID_SESSION", message: "Session not found", details: null);
    }

    final session = _sessions[sessionId]!;

    // Create a default metadata map with empty values
    final metadataMap = <String, dynamic>{
      'producerName': '',
      'graphName': '',
      'domain': '',
      'description': '',
      'version': 0,
      'customMetadataMap': <String, String>{},
    };

    // Check if the session has metadata property (Recent versions of ONNX Runtime JS API may have this)
    if (session.has('metadata')) {
      final metadata = session.getProperty('metadata'.toJS) as JSObject;

      // Extract metadata properties if they exist
      if (metadata.has('producerName')) {
        metadataMap['producerName'] = metadata.getProperty('producerName'.toJS).toString();
      }

      if (metadata.has('graphName')) {
        metadataMap['graphName'] = metadata.getProperty('graphName'.toJS).toString();
      }

      if (metadata.has('domain')) {
        metadataMap['domain'] = metadata.getProperty('domain'.toJS).toString();
      }

      if (metadata.has('description')) {
        metadataMap['description'] = metadata.getProperty('description'.toJS).toString();
      }

      if (metadata.has('version')) {
        metadataMap['version'] = metadata.getProperty('version'.toJS).toString();
      }

      if (metadata.has('customMetadataMap')) {
        final customMap = metadata.getProperty('customMetadataMap'.toJS) as JSObject;
        final customMetadataMap = <String, String>{};

        // Convert JavaScript object to Dart map
        // Use Object.keys() from JavaScript to get the keys of the object
        final keysObj = callMethod(objectGlobal, 'keys', [customMap]);
        final length = (keysObj.getProperty('length'.toJS) as JSNumber).toDartInt;

        for (var i = 0; i < length; i++) {
          final key = keysObj.getProperty(i.toString().toJS).toString();
          final value = customMap.getProperty(key.toJS).toString();
          customMetadataMap[key] = value;
        }

        metadataMap['customMetadataMap'] = customMetadataMap;
      }
    }

    return metadataMap;
  } catch (e) {
    if (e is PlatformException) {
      rethrow;
    }
    throw PlatformException(code: "PLUGIN_ERROR", message: "Failed to get metadata: $e", details: null);
  }
}