Skip to content

Commit ebce969

Browse files
Bug/model comparison (#51)
* Fix bug in InputPreviewImage component to display the correct selected input image * Debugged add models feature * Added src to adapt to new input formatting style * Removed boiler loading page for comparision * Fixed just single model ouput for comparision, TODO: Fix InputSelector * Fixed InputSelector for single input and multi-input * Fixed switching between inputs * Fixed mutiple inputs bug * Refactor task retrieval in ExperimentDetailContainer and update navigation in NewExperimentContainer to include task query parameter * Refactor input handling now supporting multiple inputs in model comparison * Added support for input handling and UI for multiple inputs in Experiment components * Add className prop to MultiInputPreview for styling in InputSelectors * Fixed Add Model feature updating input handling and integrated task in URL * Fixed duplicate inputs in the experiment * Add Webpack configuration for handling .mjs files with source-map-loader * Refactor runModels to run trial for each input when adding models * Add title attribute to text previews for full input visibility * Fix input reference in MultiInputPreview for accurate text display * Remove unnecessary query string delimiter in experiment navigation links * Update styles for input selector buttons and document previews * Fixed Audio Input rendering Refactor input handling and improve sample input structure in QuickInput InputSelectors components
1 parent 0197313 commit ebce969

File tree

5 files changed

+59
-43
lines changed

5 files changed

+59
-43
lines changed

src/components/Experiment/QuickInput/Tabs/SampleInput/useSampleInputControl.js

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {useState} from "react";
2-
import {QuickInputType} from "../../quickInputType";
1+
import { useState } from "react";
2+
import { QuickInputType } from "../../quickInputType";
33
import Task from "../../../../../helpers/Task";
44

55
export default function useSampleInputControl(props) {
@@ -8,14 +8,12 @@ export default function useSampleInputControl(props) {
88

99
const [selectedIndex, setSelectedIndex] = useState([]);
1010

11-
const isSelected = (input) => sampleInputType === QuickInputType.Image ? selectedIndex.indexOf(input.src) > -1 : selectedIndex.indexOf(input) > -1;
11+
const isSelected = (input) => input.src ? selectedIndex.indexOf(input.src) > -1 : selectedIndex.indexOf(input) > -1;
1212
const isUnselected = (input) => selectedIndex.length >= 0 && sampleInputType === QuickInputType.Image ? selectedIndex.indexOf(input.src) === -1 : selectedIndex.indexOf(input) === -1;
13-
13+
1414
const selectMultiInput = (selectedValueIndex) => {
1515
// Note: Currently using both new and old way of handling inputs but should refactor in the future
16-
let input = sampleInputType === QuickInputType.Image ?
17-
props.sampleInputs[props.inputIndex][selectedValueIndex].src :
18-
props.sampleInputs[props.inputIndex][selectedValueIndex];
16+
let input = sampleInputType === props.sampleInputs[props.inputIndex][selectedValueIndex].src ?? props.sampleInputs[props.inputIndex][selectedValueIndex];
1917

2018
if (props.multiple) {
2119
// TODO: This block was directly copied from selectInput
@@ -31,18 +29,16 @@ export default function useSampleInputControl(props) {
3129
if (typeof (props.inputSelected) === 'function')
3230
props.inputSelected(selected, props.inputIndex);
3331
} else {
34-
setSelectedIndex([input]);
35-
if (typeof(props.inputSelected) === 'function')
36-
// Note: props.inputSelected is useQuickInputControl.selectMultiInput
37-
props.inputSelected(input, props.inputIndex);
32+
setSelectedIndex([input]);
33+
if (typeof (props.inputSelected) === 'function')
34+
// Note: props.inputSelected is useQuickInputControl.selectMultiInput
35+
props.inputSelected(input, props.inputIndex);
3836
}
39-
}
37+
};
38+
39+
const selectInput = (index) => {
40+
const input = props.sampleInputs[index].src ?? props.sampleInputs[index];
4041

41-
const selectInput = (index) => {
42-
const input = sampleInputType === QuickInputType.Image ?
43-
props.sampleInputs[index].src :
44-
props.sampleInputs[index];
45-
4642
if (props.multiple) {
4743
const selected = Array.from(selectedIndex);
4844
let storedIndex = selected.indexOf(input);
@@ -55,18 +51,18 @@ export default function useSampleInputControl(props) {
5551
if (typeof (props.inputSelected) === 'function')
5652
props.inputSelected(selected);
5753
} else {
58-
setSelectedIndex([input]);
59-
if (typeof(props.inputSelected) === 'function')
60-
props.inputSelected(input, 0);
54+
setSelectedIndex([input]);
55+
if (typeof (props.inputSelected) === 'function')
56+
props.inputSelected(input, 0);
6157
}
62-
}
58+
};
6359

64-
const {type} = props;
60+
const { type } = props;
6561
return {
66-
selectedIndex,
67-
selectInput: !task.useMultiInput ? selectInput : selectMultiInput,
68-
isSelected,
69-
isUnselected,
62+
selectedIndex,
63+
selectInput: !task.useMultiInput ? selectInput : selectMultiInput,
64+
isSelected,
65+
isUnselected,
7066
type,
7167
sampleInputType
7268
};

src/components/ExperimentDetails/Inputs/InputSelectors.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export default function InputSelectors(props) {
2020
className={getElement("input-preview")}
2121
/>
2222
}
23-
Input {index + 1}
2423
</>
2524
);
2625
};
@@ -52,6 +51,8 @@ export default function InputSelectors(props) {
5251
>
5352
<DeleteIcon />
5453
</button>
54+
<p className={getElement("input-selector-number")}>Input {idx + 1}</p>
55+
5556
</div>
5657
))}
5758
</div>

src/components/ExperimentDetails/Inputs/InputSelectors.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@
8383
background: $azulDarkest;
8484
}
8585

86-
.input-selector__input-selector-btn-content,
86+
.input-selector__input-selector-number,
87+
.input-selector__input-preview__text,
8788
.input-selector__input-preview__document a {
8889
color: $white;
8990
}

src/helpers/Task.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ import {
9898
SampleVideoClassificationInputs,
9999
SampleTableEditingInputs,
100100
SampleTextToAudio,
101+
SampleTextConversationInputs,
101102
} from "./sampleImages";
102103
import { TestImageClassificationResult } from "../components/Experiment/QuickOutput/Outputs/Classification/Features";
103104
import { TestImageEnhancementData } from "../components/Experiment/QuickOutput/Outputs/ImageEnhancement/testData/TestFeatures";
@@ -110,7 +111,7 @@ import { TestTextToAudioOutput } from "../components/Experiment/QuickOutput/Outp
110111
import { TestTextConversationOutput } from "../components/Experiment/QuickOutput/Outputs/TextConversation/testData/testTextConversationOutput";
111112
import { TaskInputTypes } from "./TaskInputTypes";
112113
import { TestStyleTransferOutput } from "../components/Experiment/QuickOutput/Outputs/StyleTransfer/testData/testStyleTransferOutput";
113-
import { TestMaskGenerationOutput } from "../components/Experiment/QuickOutput/Outputs/MaskGeneration/testData/testMaskGenerationOutput";
114+
import { TestMaskGenerationOutput } from "../components/Experiment/QuickOutput/Outputs/MaskGeneration/testData/testMaskGenerationOutput";
114115
import TextInputTab from "../components/Experiment/QuickInput/Tabs/TextInput/TextInputTab";
115116
import { TestVisualQuestionAnswering } from "../components/Experiment/QuickOutput/Outputs/VisualQuestionAnswering/testData/testVisualQuestionAnsweringOutput";
116117
import { TestDocumentQuestionAnswering } from "../components/Experiment/QuickOutput/Outputs/DocumentQuestionAnswering/testData/testDocumentQuestionAnsweringOuput";
@@ -261,7 +262,7 @@ export default class Task {
261262
icon: (props) => <MaskGeneration {...props} />,
262263
sampleInputs: SampleMaskGenerationInputs,
263264
tutorialDescription: "blah blah.",
264-
});
265+
});
265266
static text_to_text = new Task({
266267
name: "Text to Text",
267268
description: "[insert text description here]",
@@ -318,7 +319,7 @@ export default class Task {
318319
inputText: "begin a conversation.",
319320
outputText: "Conversational responses from the virtual assistant",
320321
icon: (props) => <TextConversation {...props} />,
321-
sampleInputs: [],
322+
sampleInputs: SampleTextConversationInputs,
322323
tutorialDescription:
323324
"Type a question and receive a response from a virtual assistant",
324325
inputType: TaskInputTypes.Text,
@@ -525,12 +526,12 @@ export default class Task {
525526
inputText: 'get a new version of the csv',
526527
inputType: TaskInputTypes.Csv,
527528
},
528-
],
529+
],
529530
outputText: "Summarized CSV file",
530531
icon: (props) => <TableEditing {...props} />,
531532
sampleInputs: SampleTableEditingInputs,
532533
tutorialDescription: "blah blah.",
533-
});
534+
});
534535

535536
constructor(options) {
536537
this.name = options.name ?? "";
@@ -633,7 +634,7 @@ export default class Task {
633634
case imageTo3D:
634635
return DefaultImageTo3DModel;
635636
case maskGeneration:
636-
return DefaultMaskGenerationModel;
637+
return DefaultMaskGenerationModel;
637638
case textToText:
638639
return DefaultTextModel;
639640
case textToCode:
@@ -668,7 +669,7 @@ export default class Task {
668669
case videoClassification:
669670
return DefaultVideoClassificationModel;
670671
case tableEditing:
671-
return DefaultTableEditingModel
672+
return DefaultTableEditingModel;
672673
default:
673674
return undefined;
674675
}

src/helpers/sampleImages.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export const SampleMaskGenerationInputs = [
115115
alt: "cat and dog",
116116
},
117117
]
118-
]
118+
];
119119

120120
export const SampleTextInputs = [
121121
{ src: "Lorem ipsum dolor sit amet" },
@@ -133,7 +133,16 @@ export const SampleAudioToTextInputs = [
133133
{
134134
title: "automatic-speech-recognition-input.flac",
135135
src: "https://xlab1.netlify.app/automatic-speech-recognition-input.flac"
136-
}
136+
},
137+
{
138+
title: "demo1.mp3",
139+
src: "https://samplelib.com/lib/preview/mp3/sample-6s.mp3"
140+
},
141+
,
142+
{
143+
title: "demo2.mp3",
144+
src: "https://samplelib.com/lib/preview/mp3/sample-12s.mp3"
145+
},
137146
];
138147

139148
export const SampleTextConversationInputs = [
@@ -245,14 +254,13 @@ export const SampleAudioToAudioInputs = [
245254

246255
},
247256
{
248-
title: "audio2.flac",
249-
src: "https://xlab1.netlify.app/audio-to-audio-input.flac"
250-
257+
title: "demo1.mp3",
258+
src: "https://samplelib.com/lib/preview/mp3/sample-6s.mp3"
251259
},
260+
,
252261
{
253-
title: "audio3.flac",
254-
src: "https://xlab1.netlify.app/audio-to-audio-input.flac"
255-
262+
title: "demo2.mp3",
263+
src: "https://samplelib.com/lib/preview/mp3/sample-12s.mp3"
256264
},
257265
];
258266
export const SampleAudioClassificationInputs = [
@@ -261,6 +269,15 @@ export const SampleAudioClassificationInputs = [
261269
src: "https://xlab1.netlify.app/audio-classification-input.flac"
262270

263271
},
272+
{
273+
title: "demo1.mp3",
274+
src: "https://samplelib.com/lib/preview/mp3/sample-6s.mp3"
275+
},
276+
,
277+
{
278+
title: "demo2.mp3",
279+
src: "https://samplelib.com/lib/preview/mp3/sample-12s.mp3"
280+
},
264281
];
265282
export const SampleTextToAudio = [
266283
{ src: "a chill song with influences from lofi, chillstep and downtempo" },

0 commit comments

Comments
 (0)