David Pomerenke commited on
Commit
4106f13
·
1 Parent(s): ce2acb0

Refactor score columns

Browse files
frontend/src/components/LanguageTable.js CHANGED
@@ -4,7 +4,7 @@ import { FilterMatchMode } from 'primereact/api'
4
  import { MultiSelect } from 'primereact/multiselect'
5
  import { useState, useEffect } from 'react'
6
  import { Slider } from 'primereact/slider'
7
- import ScoreField from './ScoreField'
8
 
9
  const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
10
  const [filters, setFilters] = useState({
@@ -14,7 +14,7 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
14
  })
15
 
16
  const families = [...new Set(data.map(item => item.family))].slice(0, 10)
17
- families.push("Other")
18
  const familyRowFilterTemplate = options => {
19
  return (
20
  <MultiSelect
@@ -43,7 +43,7 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
43
  return (population / 1000).toFixed(0) + 'K'
44
  } else if (population < 10 * 1000 * 1000) {
45
  return (population / 1000 / 1000).toFixed(1) + 'M'
46
- }else if (population < 1000 * 1000 * 1000) {
47
  return (population / 1000 / 1000).toFixed(0) + 'M'
48
  } else {
49
  return (population / 1000 / 1000 / 1000).toFixed(1) + 'B'
@@ -107,24 +107,21 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
107
  }
108
 
109
  const languageBodyTemplate = rowData => {
110
- return <div>
111
- <div style={{ fontWeight: 'bold' }}>{rowData.autonym}</div>
112
- <div style={{ fontSize: '0.8rem', color: 'gray' }}>{rowData.language_name}</div>
113
- </div>
114
- }
115
-
116
- const scoreBodyTemplate = (field, options = {}) => {
117
- const { minScore = 0, maxScore = 1 } = options
118
-
119
- return rowData => {
120
- const score = rowData[field]
121
- return ScoreField(score, minScore, maxScore)
122
- }
123
  }
124
 
125
  return (
126
  <DataTable
127
- value={data.filter(item => !selectedLanguages.some(l => l.bcp_47 === item.bcp_47))}
 
 
128
  header={<>Languages</>}
129
  sortField='speakers'
130
  removableSort
@@ -140,7 +137,7 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
140
  id='language-table'
141
  style={{ width: '800px', minHeight: '650px' }}
142
  >
143
- <Column selectionMode="multiple" headerStyle={{ width: '3rem' }} />
144
  <Column
145
  field='language_name'
146
  header='Language'
@@ -151,6 +148,7 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
151
  <Column
152
  field='speakers'
153
  header={<i className='pi pi-users' title='Speakers' />}
 
154
  body={speakerBodyTemplate}
155
  filter
156
  filterElement={speakerFilterTemplate}
@@ -161,60 +159,13 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
161
  <Column
162
  field='family'
163
  header='Family'
 
164
  filter
165
  showFilterMatchModes={false}
166
  filterElement={familyRowFilterTemplate}
167
  style={{ minWidth: '10rem' }}
168
  />
169
- <Column
170
- field='average'
171
- header='Average'
172
- sortable
173
- body={scoreBodyTemplate('average', { minScore: 0.2, maxScore: 0.5 })}
174
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
175
- />
176
- <Column
177
- field='translation_from_bleu'
178
- header="Translation (from)"
179
- headerTooltip='Translation performance from a language to all other languages (spBLEU score)'
180
- sortable
181
- body={scoreBodyTemplate('translation_from_bleu', {
182
- minScore: 0,
183
- maxScore: 0.5
184
- })}
185
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
186
- />
187
- <Column
188
- field='translation_to_bleu'
189
- header="Translation (to)"
190
- headerTooltip='Translation performance from all other languages to a language (spBLEU score)'
191
- sortable
192
- body={scoreBodyTemplate('translation_to_bleu', {
193
- minScore: 0,
194
- maxScore: 0.5
195
- })}
196
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
197
- />
198
- <Column
199
- field='classification_accuracy'
200
- header='Classification'
201
- sortable
202
- body={scoreBodyTemplate('classification_accuracy', {
203
- minScore: 0,
204
- maxScore: 0.5
205
- })}
206
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
207
- />
208
- {/* <Column
209
- field='language_modeling_chrf'
210
- header='Language Modeling'
211
- sortable
212
- body={scoreBodyTemplate('language_modeling_chrf', {
213
- minScore: 0.8,
214
- maxScore: 1
215
- })}
216
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
217
- /> */}
218
  </DataTable>
219
  )
220
  }
 
4
  import { MultiSelect } from 'primereact/multiselect'
5
  import { useState, useEffect } from 'react'
6
  import { Slider } from 'primereact/slider'
7
+ import ScoreColumns from './ScoreColumns'
8
 
9
  const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
10
  const [filters, setFilters] = useState({
 
14
  })
15
 
16
  const families = [...new Set(data.map(item => item.family))].slice(0, 10)
17
+ families.push('Other')
18
  const familyRowFilterTemplate = options => {
19
  return (
20
  <MultiSelect
 
43
  return (population / 1000).toFixed(0) + 'K'
44
  } else if (population < 10 * 1000 * 1000) {
45
  return (population / 1000 / 1000).toFixed(1) + 'M'
46
+ } else if (population < 1000 * 1000 * 1000) {
47
  return (population / 1000 / 1000).toFixed(0) + 'M'
48
  } else {
49
  return (population / 1000 / 1000 / 1000).toFixed(1) + 'B'
 
107
  }
108
 
109
  const languageBodyTemplate = rowData => {
110
+ return (
111
+ <div>
112
+ <div style={{ fontWeight: 'bold' }}>{rowData.autonym}</div>
113
+ <div style={{ fontSize: '0.8rem', color: 'gray' }}>
114
+ {rowData.language_name}
115
+ </div>
116
+ </div>
117
+ )
 
 
 
 
 
118
  }
119
 
120
  return (
121
  <DataTable
122
+ value={data.filter(
123
+ item => !selectedLanguages.some(l => l.bcp_47 === item.bcp_47)
124
+ )}
125
  header={<>Languages</>}
126
  sortField='speakers'
127
  removableSort
 
137
  id='language-table'
138
  style={{ width: '800px', minHeight: '650px' }}
139
  >
140
+ <Column selectionMode='multiple' headerStyle={{ width: '3rem' }} />
141
  <Column
142
  field='language_name'
143
  header='Language'
 
148
  <Column
149
  field='speakers'
150
  header={<i className='pi pi-users' title='Speakers' />}
151
+ headerTooltip='Number of speakers of the language (according to CLDR 2018)'
152
  body={speakerBodyTemplate}
153
  filter
154
  filterElement={speakerFilterTemplate}
 
159
  <Column
160
  field='family'
161
  header='Family'
162
+ headerTooltip='Language family'
163
  filter
164
  showFilterMatchModes={false}
165
  filterElement={familyRowFilterTemplate}
166
  style={{ minWidth: '10rem' }}
167
  />
168
+ {ScoreColumns}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  </DataTable>
170
  )
171
  }
frontend/src/components/ModelTable.js CHANGED
@@ -6,7 +6,7 @@ import { useState, useEffect } from 'react'
6
  import Medal from './Medal'
7
  import { Slider } from 'primereact/slider'
8
  import ScoreField from './ScoreField'
9
-
10
  const ModelTable = ({ data }) => {
11
  const [filters, setFilters] = useState({
12
  type: { value: null, matchMode: FilterMatchMode.IN },
@@ -173,7 +173,7 @@ const ModelTable = ({ data }) => {
173
  id='model-table'
174
  style={{ width: '800px', minHeight: '650px' }}
175
  >
176
- <Column field='rank' body={rankBodyTemplate} />
177
  <Column
178
  field='provider_name'
179
  header='Provider'
@@ -189,6 +189,7 @@ const ModelTable = ({ data }) => {
189
  <Column
190
  field='type'
191
  header={<i className='pi pi-unlock' title='Open weights / API only' />}
 
192
  filter
193
  filterElement={typeRowFilterTemplate}
194
  showFilterMatchModes={false}
@@ -216,55 +217,7 @@ const ModelTable = ({ data }) => {
216
  body={costBodyTemplate}
217
  style={{ minWidth: '5rem' }}
218
  />
219
- <Column
220
- field='average'
221
- header='Average'
222
- sortable
223
- body={scoreBodyTemplate('average', { minScore: 0, maxScore: 0.6 })}
224
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
225
- />
226
- <Column
227
- field='translation_from_bleu'
228
- header="Translation (from)"
229
- headerTooltip='Translation performance from a language to all other languages (spBLEU score)'
230
- sortable
231
- body={scoreBodyTemplate('translation_from_bleu', {
232
- minScore: 0,
233
- maxScore: 0.5
234
- })}
235
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
236
- />
237
- <Column
238
- field='translation_to_bleu'
239
- header="Translation (to)"
240
- headerTooltip='Translation performance from all other languages to a language (spBLEU score)'
241
- sortable
242
- body={scoreBodyTemplate('translation_to_bleu', {
243
- minScore: 0,
244
- maxScore: 0.5
245
- })}
246
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
247
- />
248
- <Column
249
- field='classification_accuracy'
250
- header='Classification'
251
- sortable
252
- body={scoreBodyTemplate('classification_accuracy', {
253
- minScore: 0,
254
- maxScore: 0.9
255
- })}
256
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
257
- />
258
- {/* <Column
259
- field='language_modeling_chrf'
260
- header='Language Modeling'
261
- sortable
262
- body={scoreBodyTemplate('language_modeling_chrf', {
263
- minScore: 0.8,
264
- maxScore: 1
265
- })}
266
- style={{ minWidth: '5rem', maxWidth: '10rem' }}
267
- /> */}
268
  </DataTable>
269
  )
270
  }
 
6
  import Medal from './Medal'
7
  import { Slider } from 'primereact/slider'
8
  import ScoreField from './ScoreField'
9
+ import ScoreColumns from './ScoreColumns'
10
  const ModelTable = ({ data }) => {
11
  const [filters, setFilters] = useState({
12
  type: { value: null, matchMode: FilterMatchMode.IN },
 
173
  id='model-table'
174
  style={{ width: '800px', minHeight: '650px' }}
175
  >
176
+ <Column field='rank' body={rankBodyTemplate} headerTooltip='Rank' />
177
  <Column
178
  field='provider_name'
179
  header='Provider'
 
189
  <Column
190
  field='type'
191
  header={<i className='pi pi-unlock' title='Open weights / API only' />}
192
+ headerTooltip='Open weights / API only'
193
  filter
194
  filterElement={typeRowFilterTemplate}
195
  showFilterMatchModes={false}
 
217
  body={costBodyTemplate}
218
  style={{ minWidth: '5rem' }}
219
  />
220
+ {ScoreColumns}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  </DataTable>
222
  )
223
  }
frontend/src/components/ScoreColumns.js ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Column } from 'primereact/column'
2
+ import ScoreField from './ScoreField'
3
+
4
+ const scoreBodyTemplate = (field, options = {}) => {
5
+ const { minScore = 0, maxScore = 1 } = options
6
+
7
+ return rowData => {
8
+ const score = rowData[field]
9
+ return ScoreField(score, minScore, maxScore)
10
+ }
11
+ }
12
+
13
+ const ScoreColumns = [
14
+ <Column
15
+ field='average'
16
+ header='Average'
17
+ headerTooltip='Language Proficiency Score (average of all displayed scores)'
18
+ sortable
19
+ body={scoreBodyTemplate('average', { minScore: 0.2, maxScore: 0.5 })}
20
+ style={{ minWidth: '5rem', maxWidth: '10rem' }}
21
+ />,
22
+ <Column
23
+ field='translation_from_bleu'
24
+ header='Translation (from)'
25
+ headerTooltip='Translation performance from a language to all other languages (spBLEU score on a sample of the FLORES+ benchmark)'
26
+ sortable
27
+ body={scoreBodyTemplate('translation_from_bleu', {
28
+ minScore: 0,
29
+ maxScore: 0.5
30
+ })}
31
+ style={{ minWidth: '5rem', maxWidth: '10rem' }}
32
+ />,
33
+ <Column
34
+ field='translation_to_bleu'
35
+ header='Translation (to)'
36
+ headerTooltip='Translation performance from all other languages to a language (spBLEU score on a sample of the FLORES+ benchmark)'
37
+ sortable
38
+ body={scoreBodyTemplate('translation_to_bleu', {
39
+ minScore: 0,
40
+ maxScore: 0.5
41
+ })}
42
+ style={{ minWidth: '5rem', maxWidth: '10rem' }}
43
+ />,
44
+ <Column
45
+ field='classification_accuracy'
46
+ header='Classification'
47
+ headerTooltip='Classification performance (accuracy on a sample of the FLORES+ benchmark)'
48
+ sortable
49
+ body={scoreBodyTemplate('classification_accuracy', {
50
+ minScore: 0,
51
+ maxScore: 0.5
52
+ })}
53
+ style={{ minWidth: '5rem', maxWidth: '10rem' }}
54
+ />,
55
+ // <Column
56
+ // field='language_modeling_chrf'
57
+ // header='Language Modeling'
58
+ // sortable
59
+ // body={scoreBodyTemplate('language_modeling_chrf', {
60
+ // minScore: 0.8,
61
+ // maxScore: 1
62
+ // })}
63
+ // style={{ minWidth: '5rem', maxWidth: '10rem' }}
64
+ // />,
65
+ <Column
66
+ field='mmlu_accuracy'
67
+ header='MMLU'
68
+ headerTooltip='Question Answering performance (accuracy on a sample of multilingual versions of the MMLU benchmark)'
69
+ sortable
70
+ body={scoreBodyTemplate('mmlu_accuracy', {
71
+ minScore: 0,
72
+ maxScore: 1
73
+ })}
74
+ style={{ minWidth: '5rem', maxWidth: '10rem' }}
75
+ />
76
+ ]
77
+
78
+ export default ScoreColumns