kpfadnis commited on
Commit
53257e4
·
1 Parent(s): ae7d3b8

fix (model behavior): Fix crash in model behavior due to unrefreshed state.

Browse files
src/components/filters/Filters.tsx CHANGED
@@ -34,10 +34,12 @@ import {
34
  TabPanel,
35
  } from '@carbon/react';
36
  import { ChevronUp, ChevronDown, Filter } from '@carbon/icons-react';
 
 
 
37
  import ExpressionBuilder from '@/src/components/expression-builder/ExpressionBuilder';
38
 
39
  import classes from './Filters.module.scss';
40
- import { Metric, Model } from '@/src/types';
41
 
42
  // ===================================================================================
43
  // TYPES
@@ -167,12 +169,14 @@ export default function Filters({
167
  </div>
168
  </TabPanel>
169
  <TabPanel>
170
- <ExpressionBuilder
171
- expression={expression}
172
- models={models}
173
- metric={metric}
174
- setExpression={setExpression}
175
- ></ExpressionBuilder>
 
 
176
  </TabPanel>
177
  </TabPanels>
178
  </Tabs>
@@ -219,12 +223,14 @@ export default function Filters({
219
  })}
220
  </div>
221
  ) : expression ? (
222
- <ExpressionBuilder
223
- expression={expression}
224
- models={models}
225
- metric={metric}
226
- setExpression={setExpression}
227
- ></ExpressionBuilder>
 
 
228
  ) : null
229
  ) : null}
230
  </div>
 
34
  TabPanel,
35
  } from '@carbon/react';
36
  import { ChevronUp, ChevronDown, Filter } from '@carbon/icons-react';
37
+
38
+ import { Metric, Model } from '@/src/types';
39
+ import { hash } from '@/src/utilities/strings';
40
  import ExpressionBuilder from '@/src/components/expression-builder/ExpressionBuilder';
41
 
42
  import classes from './Filters.module.scss';
 
43
 
44
  // ===================================================================================
45
  // TYPES
 
169
  </div>
170
  </TabPanel>
171
  <TabPanel>
172
+ <div key={hash(JSON.stringify(expression))}>
173
+ <ExpressionBuilder
174
+ expression={expression}
175
+ models={models}
176
+ metric={metric}
177
+ setExpression={setExpression}
178
+ ></ExpressionBuilder>
179
+ </div>
180
  </TabPanel>
181
  </TabPanels>
182
  </Tabs>
 
223
  })}
224
  </div>
225
  ) : expression ? (
226
+ <div key={hash(JSON.stringify(expression))}>
227
+ <ExpressionBuilder
228
+ expression={expression}
229
+ models={models}
230
+ metric={metric}
231
+ setExpression={setExpression}
232
+ ></ExpressionBuilder>
233
+ </div>
234
  ) : null
235
  ) : null}
236
  </div>
src/views/tasks-table/TasksTable.tsx CHANGED
@@ -117,18 +117,20 @@ function populateTable(
117
  // Add annotations
118
  entry[`${evaluation.modelId}::value`] = {};
119
  metrics.forEach((metric) => {
120
- if (annotator) {
121
  entry[`${evaluation.modelId}::value`][metric.name] =
122
  extractMetricDisplayValue(
123
  evaluation[metric.name][annotator].value,
124
  metric.values,
125
  );
126
- } else {
127
  entry[`${evaluation.modelId}::value`][metric.name] =
128
  extractMetricDisplayValue(
129
  evaluation[`${metric.name}_agg`].value,
130
  metric.values,
131
  );
 
 
132
  }
133
  });
134
 
@@ -177,6 +179,7 @@ function sparkline(
177
  [key: string]: { timestamp: number; value: string };
178
  },
179
  metric: Metric,
 
180
  theme?: string,
181
  ) {
182
  if (annotations) {
@@ -209,52 +212,54 @@ function sparkline(
209
  const numOfUsedValues = data.filter((entry) => entry.value !== 0).length;
210
 
211
  return (
212
- <SimpleBarChart
213
- data={data}
214
- options={{
215
- color: {
216
- scale: Object.fromEntries(
217
- data.map((entry) => [
218
- entry.group,
219
- numOfUsedValues === 1
220
- ? '#42be65'
221
- : numOfUsedValues >= 3
222
- ? '#fa4d56'
223
- : '#f1c21b',
224
- ]),
225
- ),
226
- },
227
- axes: {
228
- left: {
229
- mapsTo: 'value',
230
- visible: false,
231
- scaleType: ScaleTypes.LINEAR,
232
  },
233
- bottom: {
234
- mapsTo: 'group',
235
- visible: false,
236
- scaleType: ScaleTypes.LABELS,
 
 
 
 
 
 
 
237
  },
238
- },
239
- grid: {
240
- y: {
 
 
 
 
 
 
241
  enabled: false,
242
  },
243
- x: {
244
  enabled: false,
245
  },
246
- },
247
- legend: {
248
- enabled: false,
249
- },
250
- toolbar: {
251
- enabled: false,
252
- },
253
- height: '24px',
254
- width: '48px',
255
- theme: theme,
256
- }}
257
- ></SimpleBarChart>
258
  );
259
  }
260
 
@@ -598,57 +603,73 @@ export default function TasksTable({
598
  ) : (
599
  <TableCell key={cell.id}>
600
  <div className={classes.tableCell}>
601
- {cell.value ? (
602
- typeof cell.value === 'object' ? (
603
- <>
604
- {metrics.map((metric) => {
605
- return (
606
- <>
607
- <div
608
- className={
609
- classes.tableCellValue
610
- }
611
- key={`${cell.id}::${metric.name}`}
612
- >
613
- <div
614
- className={
615
- classes.majorityValue
616
- }
617
- >
618
- {cell.value[metric.name]}
619
- </div>
620
- {!annotator &&
621
- evaluationsMap[
622
- cell.id.split('::value', 1)[0]
623
- ]
624
- ? sparkline(
 
 
 
 
 
625
  evaluationsMap[
626
  cell.id.split(
627
  '::value',
628
  1,
629
  )[0]
630
- ][metric.name],
631
- metric,
632
- theme,
633
- )
634
- : null}
635
- </div>
636
- </>
637
- );
638
- })}
639
- </>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
640
  ) : (
641
  <div className={classes.majorityValue}>
642
- {Array.isArray(cell.value)
643
- ? cell.value.join(', ')
644
- : cell.value}
645
  </div>
646
- )
647
- ) : (
648
- <div className={classes.majorityValue}>
649
- -
650
- </div>
651
- )}
652
  </div>
653
  </TableCell>
654
  ),
@@ -662,7 +683,7 @@ export default function TasksTable({
662
  }}
663
  </DataTable>
664
  <Pagination
665
- pageSizes={[10, 25, 50, 100, 200]}
666
  totalItems={rows.length}
667
  onChange={(event: any) => {
668
  // Step 1: Update page size
 
117
  // Add annotations
118
  entry[`${evaluation.modelId}::value`] = {};
119
  metrics.forEach((metric) => {
120
+ if (annotator && evaluation.hasOwnProperty(metric.name)) {
121
  entry[`${evaluation.modelId}::value`][metric.name] =
122
  extractMetricDisplayValue(
123
  evaluation[metric.name][annotator].value,
124
  metric.values,
125
  );
126
+ } else if (evaluation.hasOwnProperty(`${metric.name}_agg`)) {
127
  entry[`${evaluation.modelId}::value`][metric.name] =
128
  extractMetricDisplayValue(
129
  evaluation[`${metric.name}_agg`].value,
130
  metric.values,
131
  );
132
+ } else {
133
+ entry[`${evaluation.modelId}::value`][metric.name] = '-';
134
  }
135
  });
136
 
 
179
  [key: string]: { timestamp: number; value: string };
180
  },
181
  metric: Metric,
182
+ key: string,
183
  theme?: string,
184
  ) {
185
  if (annotations) {
 
212
  const numOfUsedValues = data.filter((entry) => entry.value !== 0).length;
213
 
214
  return (
215
+ <div key={key}>
216
+ <SimpleBarChart
217
+ data={data}
218
+ options={{
219
+ color: {
220
+ scale: Object.fromEntries(
221
+ data.map((entry) => [
222
+ entry.group,
223
+ numOfUsedValues === 1
224
+ ? '#42be65'
225
+ : numOfUsedValues >= 3
226
+ ? '#fa4d56'
227
+ : '#f1c21b',
228
+ ]),
229
+ ),
 
 
 
 
 
230
  },
231
+ axes: {
232
+ left: {
233
+ mapsTo: 'value',
234
+ visible: false,
235
+ scaleType: ScaleTypes.LINEAR,
236
+ },
237
+ bottom: {
238
+ mapsTo: 'group',
239
+ visible: false,
240
+ scaleType: ScaleTypes.LABELS,
241
+ },
242
  },
243
+ grid: {
244
+ y: {
245
+ enabled: false,
246
+ },
247
+ x: {
248
+ enabled: false,
249
+ },
250
+ },
251
+ legend: {
252
  enabled: false,
253
  },
254
+ toolbar: {
255
  enabled: false,
256
  },
257
+ height: '24px',
258
+ width: '48px',
259
+ theme: theme,
260
+ }}
261
+ ></SimpleBarChart>
262
+ </div>
 
 
 
 
 
 
263
  );
264
  }
265
 
 
603
  ) : (
604
  <TableCell key={cell.id}>
605
  <div className={classes.tableCell}>
606
+ <>
607
+ {cell.value ? (
608
+ typeof cell.value === 'object' ? (
609
+ <>
610
+ {Array.isArray(cell.value)
611
+ ? !isEmpty(cell.value)
612
+ ? cell.value.join(', ')
613
+ : '-'
614
+ : metrics.map((metric) => {
615
+ return (
616
+ <>
617
+ <div
618
+ className={
619
+ classes.tableCellValue
620
+ }
621
+ key={`${cell.id}::${metric.name}`}
622
+ >
623
+ <div
624
+ className={
625
+ classes.majorityValue
626
+ }
627
+ >
628
+ {
629
+ cell.value[
630
+ metric.name
631
+ ]
632
+ }
633
+ </div>
634
+ {!annotator &&
635
  evaluationsMap[
636
  cell.id.split(
637
  '::value',
638
  1,
639
  )[0]
640
+ ]
641
+ ? sparkline(
642
+ evaluationsMap[
643
+ cell.id.split(
644
+ '::value',
645
+ 1,
646
+ )[0]
647
+ ][metric.name],
648
+ metric,
649
+ cell.id,
650
+ theme,
651
+ )
652
+ : null}
653
+ </div>
654
+ </>
655
+ );
656
+ })}
657
+ </>
658
+ ) : (
659
+ <div className={classes.majorityValue}>
660
+ {Array.isArray(cell.value)
661
+ ? !isEmpty(cell.value)
662
+ ? cell.value.join(', ')
663
+ : '-'
664
+ : cell.value}
665
+ </div>
666
+ )
667
  ) : (
668
  <div className={classes.majorityValue}>
669
+ -
 
 
670
  </div>
671
+ )}
672
+ </>
 
 
 
 
673
  </div>
674
  </TableCell>
675
  ),
 
683
  }}
684
  </DataTable>
685
  <Pagination
686
+ pageSizes={[10, 25, 50]}
687
  totalItems={rows.length}
688
  onChange={(event: any) => {
689
  // Step 1: Update page size