| 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; |