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