private (Guid GroupModelId, Guid PriorityModelId, Guid ServiceModelId) GetNewestCaseModels(UserConnection userConnection) { var caseModels = Get <ICompositeObjectList <ICompositeObject> >("ReadDataUserTask.ResultCompositeObjectList"); IDictionary <Guid, DateTime> modelsCreationDictionary = caseModels.ToDictionary( caseModelInfo => GetValue <Guid>(caseModelInfo, "Id"), caseModelInfo => GetValue <DateTime>(caseModelInfo, "CreatedOn") ); IMLModelLoader modelLoader = ClassFactory.Get <IMLModelLoader>(); var ids = modelsCreationDictionary.Keys.ToList(); if (ids.Count == 0) { return(Guid.Empty, Guid.Empty, Guid.Empty); } var caseModelConfigs = modelLoader.LoadEnabledModels(userConnection, modelsCreationDictionary.Keys.ToList()); var groupModelIds = caseModelConfigs.Where(item => item.PredictedResultColumnName == "GroupId") .Select(item => item.Id); Guid groupModelId = groupModelIds.OrderByDescending(id => modelsCreationDictionary[id]).FirstOrDefault(); var priorityModelIds = caseModelConfigs.Where(item => item.PredictedResultColumnName == "PriorityId") .Select(item => item.Id); Guid priorityModelId = priorityModelIds.OrderByDescending(id => modelsCreationDictionary[id]).FirstOrDefault(); var serviceModelIds = caseModelConfigs.Where(item => item.PredictedResultColumnName == "ServiceItemId") .Select(item => item.Id); Guid serviceModelId = serviceModelIds.OrderByDescending(id => modelsCreationDictionary[id]).FirstOrDefault(); return(groupModelId, priorityModelId, serviceModelId); }
/// <summary> /// Sets human-readable localized captions and display values for feature weights. /// </summary> /// <param name="userConnection">The user connection.</param> /// <param name="features">The features.</param> /// <param name="modelId">The model identifier.</param> /// <param name="isPrediction"><c>true</c> if it's for prediction, false - for training.</param> public static void LocalizeFeatures(UserConnection userConnection, List <LocalizedFeatureWeight> features, Guid modelId, bool isPrediction) { IMLModelLoader loader = ClassFactory.Get <IMLModelLoader>(); if (!loader.TryLoadModel(userConnection, modelId, out MLModelConfig model)) { return; } loader.LoadModelMetadataCaptions(userConnection, model); var modelQueryBuilder = ClassFactory.Get <IMLModelQueryBuilder>( new ConstructorArgument("userConnection", userConnection)); var query = isPrediction ? model.BatchPredictionQuery : model.TrainingSetQuery; var select = modelQueryBuilder.BuildSelect(model.EntitySchemaId, query, model.ColumnExpressions); IMLMetadataGenerator metadataGenerator = ClassFactory.Get <IMLMetadataGenerator>(); var metadata = metadataGenerator.GenerateMetadata(select, model.MetaData, fillColumnsInfo: true); var columnExpressionMapping = modelQueryBuilder.GetColumnExpressionMapping(model.EntitySchemaId, query, model.ColumnExpressions); FillCaptions(userConnection, features, columnExpressionMapping, model.EntitySchemaId, metadata); FillDisplayValues(userConnection, features, columnExpressionMapping, model.EntitySchemaId, metadata); }
private static List <IGrouping <string, MLModelConfig> > GetModelsGroupedByEntityName( UserConnection userConnection) { IMLModelLoader modelLoader = ClassFactory.Get <IMLModelLoader>(); var schemaManager = userConnection.EntitySchemaManager; var models = modelLoader.LoadAllModels(userConnection, safe: true) .Where(item => { if (item.PredictedResultColumnName.IsNullOrEmpty()) { _log.Warn($"PredictedResultColumnName is empty for model {item.Id}{Environment.NewLine}" + $"Metadata: {item.MetaData}{Environment.NewLine}" + $"Entity schemaUid: {item.EntitySchemaId}{Environment.NewLine}"); return(false); } return(true); }) .GroupBy(config => { var entitySchema = schemaManager.FindInstanceByUId(config.EntitySchemaId); return(entitySchema?.Name ?? "unknownSchema"); }) .ToList(); return(models); }