Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Backport 2.x] Refactor and simplify reactflow component data/state #159

Merged
merged 1 commit into from
May 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 6 additions & 33 deletions common/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,7 @@
import { Node, Edge } from 'reactflow';
import { FormikValues } from 'formik';
import { ObjectSchema } from 'yup';
import {
COMPONENT_CLASS,
COMPONENT_CATEGORY,
PROCESSOR_TYPE,
MODEL_TYPE,
} from './constants';
import { COMPONENT_CLASS, PROCESSOR_TYPE, MODEL_TYPE } from './constants';

export type Index = {
name: string;
Expand Down Expand Up @@ -106,17 +101,17 @@ export type WorkspaceSchemaObj = {
};
export type WorkspaceSchema = ObjectSchema<WorkspaceSchemaObj>;

/**
* Represents a single base class as an input handle for a component.
* It may accept multiples of that class.
*/
export interface IComponentInput {
id: string;
label: string;
baseClass: COMPONENT_CLASS;
acceptMultiple: boolean;
}

export interface IComponentOutput {
id: string;
label: string;
}

/**
* An input field for a component. Specifies enough configuration for the
* UI node to render it properly (help text, links, etc.)
Expand All @@ -132,36 +127,14 @@ export interface IComponentField {
selectType?: SelectType;
}

/**
* Represents the list of base classes as a single output handle for
* a component.
*/
export interface IComponentOutput {
label: string;
baseClasses: COMPONENT_CLASS[];
}

/**
* The base interface the components will implement.
*/
export interface IComponent {
type: COMPONENT_CLASS;
label: string;
description: string;
// will be used for grouping together in the drag-and-drop component library
// and determining which flows the component can be drug into the workspace flows
categories: COMPONENT_CATEGORY[];
// determines if this component allows for new creation. this means to
// allow a "create" option on the UI component, as well as potentially
// include in the use case template construction ('provisioning' flow)
allowsCreation: boolean;
// the list of base classes that will be used in the component output
baseClasses?: COMPONENT_CLASS[];
inputs?: IComponentInput[];
fields?: IComponentField[];
// if the component supports creation, we will have a different set of input fields
// the user needs to fill out
createFields?: IComponentField[];
outputs?: IComponentOutput[];
}

Expand Down
12 changes: 4 additions & 8 deletions public/component_types/base_component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
*/

import {
COMPONENT_CATEGORY,
COMPONENT_CLASS,
IComponent,
IComponentField,
IComponentInput,
IComponentOutput,
} from '../../common';
Expand All @@ -19,16 +17,14 @@ export abstract class BaseComponent implements IComponent {
type: COMPONENT_CLASS;
label: string;
description: string;
categories: COMPONENT_CATEGORY[];
allowsCreation: boolean;
baseClasses: COMPONENT_CLASS[];
inputs?: IComponentInput[];
fields?: IComponentField[];
createFields?: IComponentField[];
outputs?: IComponentOutput[];

// No-op constructor. If there are general / defaults for field values, add in here.
constructor() {}
constructor() {
this.inputs = [];
this.outputs = [];
}

// Persist a standard toObj() fn that all component classes can use. This is necessary
// so we have standard JS Object when serializing comoponent state in redux.
Expand Down
32 changes: 32 additions & 0 deletions public/component_types/indexer/base_indexer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { COMPONENT_CLASS } from '../../../common';
import { BaseComponent } from '../base_component';

/**
* A base indexer UI component
*/
export abstract class BaseIndexer extends BaseComponent {
constructor() {
super();
this.type = COMPONENT_CLASS.INDEXER;
this.label = 'Indexer';
this.description = 'A general indexer';
this.inputs = [
{
id: 'input',
label: 'Input',
acceptMultiple: false,
},
];
this.outputs = [
{
id: 'output',
label: 'Output',
},
];
}
}
1 change: 0 additions & 1 deletion public/component_types/indexer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@
* SPDX-License-Identifier: Apache-2.0
*/

export * from './indexer';
export * from './knn_indexer';
62 changes: 0 additions & 62 deletions public/component_types/indexer/indexer.ts

This file was deleted.

16 changes: 2 additions & 14 deletions public/component_types/indexer/knn_indexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,16 @@
*/

import { COMPONENT_CLASS } from '../../../common';
import { Indexer } from './indexer';
import { BaseIndexer } from './base_indexer';

/**
* A specialized indexer component for vector/K-NN indices
*/
export class KnnIndexer extends Indexer {
export class KnnIndexer extends BaseIndexer {
constructor() {
super();
this.type = COMPONENT_CLASS.KNN_INDEXER;
this.label = 'K-NN Index';
this.description = 'A specialized indexer for K-NN indices';
this.baseClasses = [...this.baseClasses, this.type];
this.createFields = [
// @ts-ignore
...this.createFields,
// TODO: finalize what to expose / what to have for defaults here
// {
// label: 'K-NN Settings',
// id: 'knnSettings',
// type: 'json',
// placeholder: 'Enter K-NN settings JSON blob...',
// },
];
}
}
10 changes: 3 additions & 7 deletions public/component_types/other/document.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { COMPONENT_CATEGORY, COMPONENT_CLASS } from '../../../common';
import { COMPONENT_CLASS } from '../../../common';
import { BaseComponent } from '../base_component';

/**
Expand All @@ -16,14 +16,10 @@ export class Document extends BaseComponent {
this.type = COMPONENT_CLASS.DOCUMENT;
this.label = 'Document';
this.description = 'A document to be ingested';
this.categories = [COMPONENT_CATEGORY.INGEST];
this.allowsCreation = false;
this.baseClasses = [this.type];
this.inputs = [];
this.outputs = [
{
label: this.label,
baseClasses: this.baseClasses,
id: 'output',
label: 'Output',
},
];
}
Expand Down
8 changes: 0 additions & 8 deletions public/component_types/other/query/match_query.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,5 @@ export class MatchQuery extends Query {
this.type = COMPONENT_CLASS.MATCH_QUERY;
this.label = 'Match Query';
this.description = 'An OpenSearch match query';
this.inputs = [];
this.baseClasses = [...this.baseClasses, this.type];
this.outputs = [
{
label: this.label,
baseClasses: this.baseClasses,
},
];
}
}
8 changes: 0 additions & 8 deletions public/component_types/other/query/neural_query.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,5 @@ export class NeuralQuery extends Query {
this.type = COMPONENT_CLASS.NEURAL_QUERY;
this.label = 'Neural query';
this.description = 'An OpenSearch neural query';
this.inputs = [];
this.baseClasses = [...this.baseClasses, this.type];
this.outputs = [
{
label: this.label,
baseClasses: this.baseClasses,
},
];
}
}
13 changes: 7 additions & 6 deletions public/component_types/other/query/query.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { COMPONENT_CATEGORY, COMPONENT_CLASS } from '../../../../common';
import { COMPONENT_CLASS } from '../../../../common';
import { BaseComponent } from '../../base_component';

/**
Expand All @@ -16,10 +16,11 @@ export abstract class Query extends BaseComponent {
this.type = COMPONENT_CLASS.QUERY;
this.label = 'Query';
this.description = 'An OpenSearch query';
this.categories = [COMPONENT_CATEGORY.SEARCH];
this.allowsCreation = false;
this.baseClasses = [this.type];
this.inputs = [];
this.outputs = [];
this.outputs = [
{
id: 'output',
label: 'Output',
},
];
}
}
12 changes: 1 addition & 11 deletions public/component_types/other/results.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { COMPONENT_CATEGORY, COMPONENT_CLASS } from '../../../common';
import { COMPONENT_CLASS } from '../../../common';
import { BaseComponent } from '../base_component';

/**
Expand All @@ -16,15 +16,5 @@ export class Results extends BaseComponent {
this.type = COMPONENT_CLASS.RESULTS;
this.label = 'Results';
this.description = 'OpenSearch results';
this.categories = [COMPONENT_CATEGORY.SEARCH];
this.allowsCreation = false;
this.baseClasses = [this.type];
this.inputs = [];
this.outputs = [
{
label: this.label,
baseClasses: this.baseClasses,
},
];
}
}
18 changes: 14 additions & 4 deletions public/component_types/transformer/base_transformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { COMPONENT_CATEGORY, COMPONENT_CLASS } from '../../../common';
import { COMPONENT_CLASS } from '../../../common';
import { BaseComponent } from '../base_component';

/**
Expand All @@ -14,8 +14,18 @@ export abstract class BaseTransformer extends BaseComponent {
super();
this.type = COMPONENT_CLASS.TRANSFORMER;
this.label = 'Transformer';
this.categories = [COMPONENT_CATEGORY.INGEST, COMPONENT_CATEGORY.SEARCH];
this.allowsCreation = false;
this.baseClasses = [this.type];
this.inputs = [
{
id: 'input',
label: 'Input',
acceptMultiple: false,
},
];
this.outputs = [
{
id: 'output',
label: 'Output',
},
];
}
}
1 change: 0 additions & 1 deletion public/component_types/transformer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
* SPDX-License-Identifier: Apache-2.0
*/

export * from './ml_transformer';
export * from './text_embedding_transformer';
export * from './sparse_encoder_transformer';
export * from './results_transformer';
Expand Down
1 change: 0 additions & 1 deletion public/component_types/transformer/ml_transformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,5 @@ export class MLTransformer extends BaseTransformer {
this.type = COMPONENT_CLASS.ML_TRANSFORMER;
this.label = 'ML Transformer';
this.description = 'A general ML transformer';
this.baseClasses = [...this.baseClasses, this.type];
}
}
Loading
Loading