Clearml v1.1

This commit is contained in:
shyallegro
2021-07-26 12:56:51 +03:00
parent 0144de77e4
commit c10c01bc8e
360 changed files with 25745 additions and 7490 deletions

View File

@@ -12,8 +12,8 @@ import {isReadOnly} from '../../../../webapp-common/shared/utils/shared-utils';
import {selectRouterConfig, selectRouterParams, selectRouterQueryParams} from '../../../../webapp-common/core/reducers/router-reducer';
import * as commonInfoActions from '../../../../webapp-common/experiments/actions/common-experiments-info.actions';
import {ExperimentDetailsUpdated} from '../../../../webapp-common/experiments/actions/common-experiments-info.actions';
import {AddMessage} from '../../../../webapp-common/core/actions/layout.actions';
import {IExperimentInfo, ISelectedExperiment} from '../../shared/experiment-info.model';
import {addMessage} from '../../../../webapp-common/core/actions/layout.actions';
import {IExperimentInfo} from '../../shared/experiment-info.model';
import {selectSelectedTableExperiment} from '../../../../webapp-common/experiments/reducers';
import {ITableExperiment} from '../../../../webapp-common/experiments/shared/common-experiment-model.model';
@@ -99,7 +99,7 @@ export class ExperimentInfoComponent implements OnInit, OnDestroy {
if (name.trim().length > 2) {
this.store.dispatch(new ExperimentDetailsUpdated({id: this.selectedExperiment.id, changes: {name: name}}));
} else {
this.store.dispatch(new AddMessage(MESSAGES_SEVERITY.ERROR, 'Name must be more than three letters long'));
this.store.dispatch(addMessage(MESSAGES_SEVERITY.ERROR, 'Name must be more than three letters long'));
}
}

View File

@@ -13,7 +13,7 @@
>
</sm-experiment-info-header>
<nav [class.minimized]="minimized">
<nav [class.minimized]="minimized" [smOverflows]="'nav'" (onOverflows)="overflow = $event">
<ng-container *ngIf="!minimized">
<span [routerLink]="['execution']" queryParamsHandling="preserve">
<sm-navbar-item header="execution" [active]="routerConfig.includes('execution')"></sm-navbar-item>
@@ -28,18 +28,32 @@
<sm-navbar-item header="info" [active]="routerConfig.includes('general')"></sm-navbar-item>
</span>
</ng-container>
<span [routerLink]="['log']" queryParamsHandling="preserve">
<sm-navbar-item header="console" [active]="routerConfig.includes('log')"></sm-navbar-item>
</span>
<span [routerLink]="['metrics','scalar']" queryParamsHandling="preserve">
<sm-navbar-item header="Scalars" [active]="routerConfig.includes('metrics') && routerConfig.includes('scalar')"></sm-navbar-item>
</span>
<span [routerLink]="['metrics','plots']" queryParamsHandling="preserve">
<sm-navbar-item header="PLOTS" [active]="routerConfig.includes('metrics') && routerConfig.includes('plots')"></sm-navbar-item>
</span>
<span [routerLink]="['debugImages']" queryParamsHandling="preserve">
<sm-navbar-item header="DEBUG SAMPLES" [active]="routerConfig.includes('debugImages')"></sm-navbar-item>
<span [matMenuTriggerFor]="results" *ngIf="!minimized && overflow">
<sm-navbar-item header="results" [multi]="true" [active]="console.active || scalar.active || plots.active || samples.active"></sm-navbar-item>
</span>
<mat-menu #results="matMenu">
<button mat-menu-item [routerLink]="['log']" [class.active]="routerConfig.includes('log')">CONSOLE</button>
<button mat-menu-item [routerLink]="['metrics','scalar']" [class.active]="routerConfig.includes('metrics') && routerConfig.includes('scalar')">SCALARS</button>
<button mat-menu-item [routerLink]="['metrics','plots']" [class.active]="routerConfig.includes('metrics') && routerConfig.includes('plots')">PLOTS</button>
<button mat-menu-item [routerLink]="['debugImages']" [class.active]="routerConfig.includes('debugImages')">DEBUG SAMPLES</button>
</mat-menu>
<div class="d-inline-block" [style.visibility]="overflow && !minimized ? 'hidden' : 'visible'">
<span [routerLink]="['log']" queryParamsHandling="preserve">
<sm-navbar-item #console header="console" [active]="routerConfig.includes('log')"></sm-navbar-item>
</span>
<span [routerLink]="['metrics','scalar']" queryParamsHandling="preserve">
<sm-navbar-item #scalar header="Scalars" [active]="routerConfig.includes('metrics') && routerConfig.includes('scalar')"></sm-navbar-item>
</span>
<span [routerLink]="['metrics','plots']" queryParamsHandling="preserve">
<sm-navbar-item #plots header="PLOTS" [active]="routerConfig.includes('metrics') && routerConfig.includes('plots')"></sm-navbar-item>
</span>
<span [routerLink]="['debugImages']" queryParamsHandling="preserve">
<sm-navbar-item #samples header="DEBUG SAMPLES" [active]="routerConfig.includes('debugImages')"></sm-navbar-item>
</span>
</div>
<span class="refresh-position">
<sm-experiment-settings
[class.maximized]="!minimized"

View File

@@ -7,4 +7,5 @@ import {BaseExperimentOutputComponent} from '../../../../webapp-common/experimen
styleUrls: ['../../../../webapp-common/experiments/containers/experiment-ouptut/base-experiment-output.component.scss']
})
export class ExperimentOutputComponent extends BaseExperimentOutputComponent {
public overflow: boolean;
}

View File

@@ -1,8 +1,9 @@
export {EXPERIMENT_INFO_ONLY_FIELDS} from '@common/experiments/experiment.consts';
import {EXPERIMENT_INFO_ONLY_FIELDS_BASE} from '@common/experiments/experiment.consts';
export {INITIAL_EXPERIMENT_TABLE_COLS} from '../../webapp-common/experiments/experiment.consts';
export const GET_ALL_QUERY_ANY_FIELDS = ['id', 'name', 'comment', 'system_tags', 'models.output.model', 'models.input.model'];
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export const getExperimentInfoOnlyFields = (hasDataFeature: boolean) => EXPERIMENT_INFO_ONLY_FIELDS_BASE;
export const DEFAULT_EXPERIMENT_TAB = 'execution';

View File

@@ -34,10 +34,10 @@ import {ExperimentOutputComponent} from './containers/experiment-ouptut/experime
const syncedKeys = [
'view.tableSortField',
'view.tableSortOrder',
'view.tableFilters',
'view.hiddenTableCols',
'view.projectColumnsSortOrder',
'view.projectColumnFilter',
'view.projectColumnsWidth',
'view.hiddenProjectTableCols',
'view.metricsCols',
'view.colsOrder',
'info.userKnowledge',

View File

@@ -2,14 +2,13 @@ import {ActionReducerMap, createSelector} from '@ngrx/store';
import {experimentsViewReducer, IExperimentsViewState} from './experiments-view.reducer';
import {experimentInfoReducer, IExperimentInfoState} from './experiment-info.reducer';
import {experimentOutputReducer} from './experiment-output.reducer';
import {IExperimentInfo, ISelectedExperiment} from '../shared/experiment-info.model';
import {IExperimentInfo} from '../shared/experiment-info.model';
import {TaskStatusEnum} from '../../../business-logic/model/tasks/taskStatusEnum';
import {MetricVariantResult} from '../../../business-logic/model/projects/metricVariantResult';
import {isReadOnly, isSharedAndNotOwner} from '../../../webapp-common/shared/utils/shared-utils';
import {EXPERIMENTS_STORE_KEY} from '../../../webapp-common/experiments/shared/common-experiments.const';
import {CommonExperimentOutputState} from '../../../webapp-common/experiments/reducers/common-experiment-output.reducer';
import {selectActiveWorkspace} from '../../../webapp-common/core/reducers/users-reducer';
import {selectSelectedModel} from "../../../webapp-common/models/reducers";
import {selectCurrentUser} from '@common/core/reducers/users-reducer';
export const experimentsReducers: ActionReducerMap<any, any> = {
view: experimentsViewReducer,
@@ -42,12 +41,12 @@ export const selectShowExtraDataSpinner = createSelector(experimentInfo, state =
// output selectors
export const experimentOutput = createSelector(experiments, (state): CommonExperimentOutputState => state ? state.output : {});
export const selectIsExperimentEditable = createSelector(selectSelectedExperiment, selectActiveWorkspace,
(experiment, user): boolean => experiment && experiment.status === TaskStatusEnum.Created && !isReadOnly(experiment) && !isSharedAndNotOwner(experiment, user));
export const selectIsSharedAndNotOwner = createSelector(selectSelectedExperiment, selectSelectedModel, selectActiveWorkspace,
export const selectIsExperimentEditable = createSelector(selectSelectedExperiment, selectCurrentUser,
(experiment, user): boolean => experiment && experiment.status === TaskStatusEnum.Created && !isReadOnly(experiment) && !isSharedAndNotOwner(experiment, user.company));
export const selectIsSharedAndNotOwner = createSelector(selectSelectedExperiment, selectSelectedModel, selectCurrentUser,
(experiment, model, user): boolean => {
const item = experiment || model;
return item && isSharedAndNotOwner(item, user);
return item && isSharedAndNotOwner(item, user.company);
}
);
export const selectExperimentInfoDataFreeze = createSelector(experimentInfo, (state): IExperimentInfo => state.infoDataFreeze);