David Pomerenke
Model table using React
ecf4195
raw
history blame
2 kB
import { DataTable } from 'primereact/datatable';
import { Column } from 'primereact/column';
import { FilterMatchMode } from 'primereact/api';
import { MultiSelect } from 'primereact/multiselect';
import { useState } from 'react';
import Medal from './Medal';
const ModelTable = ({ data }) => {
const [filters, setFilters] = useState({
"provider": { value: null, matchMode: FilterMatchMode.IN },
"model": { value: null, matchMode: FilterMatchMode.CONTAINS }
});
const table = data.model_table;
const rankBodyTemplate = (rowData) => {
return <Medal rank={rowData.rank} />;
};
const providers = [...new Set(table.map(item => item.provider))];
const providerRowFilterTemplate = (options) => {
return (
<MultiSelect
value={options.value}
options={providers}
onChange={(e) => {
options.filterApplyCallback(e.value);
setFilters(prevFilters => ({
...prevFilters,
provider: { value: e.value, matchMode: FilterMatchMode.IN }
}));
}}
placeholder="All providers"
/>
);
};
return (
<DataTable value={table} header={<>AI Models</>} sortField="average" removableSort filters={filters} filterDisplay="menu">
<Column field="rank" body={rankBodyTemplate} />
<Column field="provider" header="Provider" filter filterElement={providerRowFilterTemplate} showFilterMatchModes={false} />
<Column field="model" header="Model" filter showFilterMatchModes={false} />
<Column field="average" header="Average" sortable />
<Column field="translation_chrf" header="Translation" sortable />
<Column field="classification_accuracy" header="Classification" sortable />
<Column field="language_modeling_chrf" header="Language Modeling" sortable />
</DataTable>
);
};
export default ModelTable;