private async void OpenModelManager() { _applicationStatusManager.ChangeCurrentAppStatus(Enums.Status.Working, ""); var window = new ModelManagerWindow(LocalizationContext, ref _newConfig, _applicationStatusManager, _mainThemeManager); _newConfig = await window.ShowResult(); }
public ModelManagerWindowViewModel(ModelManagerWindow window, LocalizationContext context, ref AppConfig config, ApplicationStatusManager manager) { this.LocalizationContext = context; _config = config; _newConfig = AppConfig.DeepCopy(_config); _applicationStatusManager = manager; _avalableModels .Connect() .Bind(out _avalableModelsCollection) .Subscribe(); _installedModels .Connect() .Bind(out _installedModelsCollection) .Subscribe(); _repositories .Connect() .Bind(out _repositoriesCollection) .Subscribe(); var repoRule = this.ValidationRule( viewModel => viewModel.RepositoryToAdd, x => string.IsNullOrWhiteSpace(x) == false, x => $"Incorrect repository {x}"); UpdateModelStatusCommand = ReactiveCommand.Create(async() => { await UpdateModelStatus(); }, CanExecute()); UpdateInstalledModelsCommand = ReactiveCommand.Create(async() => { await UpdateInstalledModels(); }, CanExecute()); UpdateAvailableModelsCommand = ReactiveCommand.Create(async() => { await UpdateAvailableModels(); }, CanExecute()); DownloadModelCommand = ReactiveCommand.Create(async() => { await DownloadModel(); }, CanExecute()); RemoveModelCommand = ReactiveCommand.Create(async() => { await RemoveModel(); }, CanExecute()); ActivateModelCommand = ReactiveCommand.Create(async() => { await ActivateModel(); }, CanExecute()); AddRepositoryCommand = ReactiveCommand.Create(AddRepository, this.IsValid()); RemoveRepositoryCommand = ReactiveCommand.Create(RemoveRepository, CanExecute()); ApplyCommand = ReactiveCommand.Create(async() => { _config = AppConfig.DeepCopy(_newConfig); await _config.Save(); window.AppConfig = _config; window.Close(); }, CanExecute()); CancelCommand = ReactiveCommand.Create(window.Close, CanExecute()); Task.Run(Init); }
private async void LoadModel() { _applicationStatusManager.ChangeCurrentAppStatus(Enums.Status.Working, "Working | loading model..."); //get the last version of ml model with specific config try { _applicationStatusManager.ChangeCurrentAppStatus(Enums.Status.Working, ""); ModelManagerWindow window = new ModelManagerWindow(_window.LocalizationContext, ref _appConfig, _applicationStatusManager, _window.ThemeManager); _appConfig = await window.ShowResult(); var config = _appConfig.MlModelConfig; // init local model or download and init it from docker registry var localVersions = await MLModel.GetInstalledVersions(config); if (localVersions.Contains(config.ModelVersion)) { Log.Information($"Find local version: {config.Image.Name}:{config.Image.Tag}."); } else { IsShowLoadModelButton = true; throw new Exception($"There are no ml local models to init: {config.Image.Name}:{config.Image.Tag}"); } Repository = config.Image.Name; Version = $"{config.ModelVersion}"; Type = $"{config.Type}"; using (var model = new MLModel(config)) await model.Download(); Status = $"Ready"; IsError = false; _window.AppConfig = _appConfig; } catch (Exception e) { Status = $"Not ready."; IsError = true; Error = $"Error: {e.Message}"; Log.Error(e, "Unable to load model."); } _applicationStatusManager.ChangeCurrentAppStatus(Enums.Status.Ready, ""); }