import { DataTable } from 'primereact/datatable' import { Column } from 'primereact/column' import { FilterMatchMode } from 'primereact/api' import { MultiSelect } from 'primereact/multiselect' import { useState, useEffect } from 'react' import Medal from './Medal' import { Slider } from 'primereact/slider' import ScoreField from './ScoreField' const ModelTable = ({ data }) => { const [filters, setFilters] = useState({ provider: { value: null, matchMode: FilterMatchMode.IN }, model: { value: null, matchMode: FilterMatchMode.CONTAINS }, type: { value: null, matchMode: FilterMatchMode.IN }, size: { value: null, matchMode: FilterMatchMode.BETWEEN } }) const table = data.model_table const rankBodyTemplate = rowData => { return } const providers = [...new Set(table.map(item => item.provider))] const providerRowFilterTemplate = options => { return ( { options.filterApplyCallback(e.value) setFilters(prevFilters => ({ ...prevFilters, provider: { value: e.value, matchMode: FilterMatchMode.IN } })) }} placeholder='All providers' /> ) } const typeRowFilterTemplate = options => { return ( { options.filterApplyCallback(e.value) setFilters(prevFilters => ({ ...prevFilters, type: { value: e.value, matchMode: FilterMatchMode.IN } })) }} placeholder='All types' /> ) } const formatSize = size => { if (size === null) { return '' } else if (size < 1000) { return size.toFixed(0) + '' } else if (size < 1000 * 1000) { return (size / 1000).toFixed(0) + 'K' } else if (size < 1000 * 1000 * 1000) { return (size / 1000 / 1000).toFixed(0) + 'M' } else { return (size / 1000 / 1000 / 1000).toFixed(0) + 'B' } } const SliderWithLabel = ({ value, onChange }) => { const p = 10 const min = 8 const max = 12 const start = value === null ? min : Math.log(value[0]) / Math.log(p) const stop = value === null ? max : Math.log(value[1]) / Math.log(p) const [_value, _setValue] = useState([start, stop]) useEffect(() => { const timer = setTimeout(() => { onChange({ value: _value[0] <= min + 0.1 && _value[1] >= max - 0.1 ? null : [p ** _value[0], p ** _value[1]] }) }, 1000) return () => clearTimeout(timer) }, [_value, onChange]) return ( {formatSize(p ** _value[0])} {formatSize(p ** _value[1])} _setValue(e.value)} placeholder='All sizes' min={min} max={max} step={0.01} range style={{ marginTop: '5rem' }} /> ) } const sizeFilterTemplate = options => { return ( { options.filterApplyCallback(e.value) setFilters(prevFilters => ({ ...prevFilters, size: { value: e.value, matchMode: FilterMatchMode.BETWEEN } })) }} /> ) } const sizeBodyTemplate = rowData => { const sizeStr = formatSize(rowData.size) return {sizeStr} } const modelBodyTemplate = rowData => { return {rowData.model} } const scoreBodyTemplate = (field, options = {}) => { const { minScore = 0, maxScore = 1 } = options return rowData => { const score = rowData[field] return ScoreField(score, minScore, maxScore) } } return ( AI Models>} sortField='average' removableSort filters={filters} filterDisplay='menu' scrollable scrollHeight='500px' style={{ minWidth: '200px' }} > ) } export default ModelTable