{"record":{"id":"4a973c80aacb8020","repo":"dotnet/machinelearning","slug":"metric-is-not-supported-4a973c","errorCode":null,"errorMessage":"{metric} is not supported!","messagePattern":"(.+?) is not supported!","errorType":"exception","errorClass":"NotImplementedException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.ML.AutoML/API/MulticlassClassificationExperiment.cs","lineNumber":457,"sourceCode":"            {\n                throw new OperationCanceledException(ex.Message, ex.InnerException);\n            }\n            catch (Exception)\n            {\n                throw;\n            }\n        }\n\n        private double GetMetric(MulticlassClassificationMetric metric, MulticlassClassificationMetrics metrics)\n        {\n            return metric switch\n            {\n                MulticlassClassificationMetric.MacroAccuracy => metrics.MacroAccuracy,\n                MulticlassClassificationMetric.MicroAccuracy => metrics.MicroAccuracy,\n                MulticlassClassificationMetric.LogLoss => metrics.LogLoss,\n                MulticlassClassificationMetric.LogLossReduction => metrics.LogLossReduction,\n                MulticlassClassificationMetric.TopKAccuracy => metrics.TopKAccuracy,\n                _ => throw new NotImplementedException($\"{metric} is not supported!\"),\n            };\n        }\n\n        public void Dispose()\n        {\n            _context.CancelExecution();\n            _context = null;\n        }\n    }\n}\n","sourceCodeStart":439,"sourceCodeEnd":468,"githubUrl":"https://github.com/dotnet/machinelearning/blob/7b76e69cf964daeca3f1377af6bc5543284d56c6/src/Microsoft.ML.AutoML/API/MulticlassClassificationExperiment.cs#L439-L468","documentation":"GetMetric in MulticlassClassificationExperiment maps a MulticlassClassificationMetric enum value to the corresponding field of the evaluated metrics. Enum values not listed in the switch (MacroAccuracy, MicroAccuracy, LogLoss, LogLossReduction, TopKAccuracy are handled) hit the default arm and throw NotImplementedException.","triggerScenarios":"Resolving a MulticlassClassificationMetric through this experiment's GetMetric with any enum member outside the five mapped ones (e.g. a newly added or extended metric enum value).","commonSituations":"Using a metric value valid in other ML.NET evaluation APIs but not wired into this AutoML mapping; enum additions in newer package versions not reflected in the switch; configuration files listing metric names converted to enum without validation.","solutions":["Restrict configured metrics to MacroAccuracy, MicroAccuracy, LogLoss, LogLossReduction, or TopKAccuracy.","Whitelist/validate the metric enum value before running the experiment.","Add a new switch arm in MulticlassClassificationExperiment.GetMetric if the metric must be supported."],"exampleFix":"// before\nvar value = GetMetric(MulticlassClassificationMetric.TopKAccuracyForAllK); // throws\n// after\nif (metric is MulticlassClassificationMetric.MacroAccuracy or MulticlassClassificationMetric.MicroAccuracy\n    or MulticlassClassificationMetric.LogLoss or MulticlassClassificationMetric.LogLossReduction\n    or MulticlassClassificationMetric.TopKAccuracy)\n{\n    var value = GetMetric(metric);\n}","handlingStrategy":"validation","validationCode":"private static readonly MulticlassClassificationMetric[] SupportedMetrics =\n{\n    MulticlassClassificationMetric.MacroAccuracy,\n    MulticlassClassificationMetric.MicroAccuracy,\n    MulticlassClassificationMetric.LogLoss,\n    MulticlassClassificationMetric.LogLossReduction,\n    MulticlassClassificationMetric.TopKAccuracy\n};\n// before running:\nif (!SupportedMetrics.Contains(metric)) throw new ArgumentException($\"Metric {metric} not supported\");","typeGuard":"bool IsSupported(MulticlassClassificationMetric m) => m is MulticlassClassificationMetric.MacroAccuracy or MulticlassClassificationMetric.MicroAccuracy or MulticlassClassificationMetric.LogLoss or MulticlassClassificationMetric.LogLossReduction or MulticlassClassificationMetric.TopKAccuracy;","tryCatchPattern":"try { var value = GetMetric(metric); }\ncatch (NotImplementedException) { metric = MulticlassClassificationMetric.MicroAccuracy; // safe default\n    var value = GetMetric(metric); }","preventionTips":["Validate configured metric names against the enum subset at startup","Only use documented AutoML multiclass metrics (Macro/MicroAccuracy, LogLoss, LogLossReduction, TopKAccuracy)","Re-verify metric support after package upgrades"],"tags":["not-implemented","enum","metric","automl"],"backgroundTag":"unsupported-enum-value","analyzedSha":"7b76e69cf964daeca3f1377af6bc5543284d56c6","analyzedAt":"2026-09-11T12:35:38.930Z","contentChangedAt":"2026-09-11T12:35:38.930Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}