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);
        }
예제 #3
0
        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, "");
        }