Spaces:
Running
Running
Update index.html
Browse files- index.html +52 -15
index.html
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
-
<title>
|
7 |
<style>
|
8 |
body {
|
9 |
font-family: Arial, sans-serif;
|
@@ -35,12 +35,25 @@
|
|
35 |
overflow: hidden;
|
36 |
text-overflow: ellipsis;
|
37 |
white-space: nowrap;
|
|
|
38 |
}
|
39 |
th {
|
40 |
background-color: #f7d9eb;
|
41 |
color: #333;
|
42 |
font-weight: bold;
|
43 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
td.expandable {
|
45 |
cursor: pointer;
|
46 |
}
|
@@ -69,9 +82,9 @@
|
|
69 |
</style>
|
70 |
</head>
|
71 |
<body>
|
72 |
-
<h1>
|
73 |
<div class="filter">
|
74 |
-
<label for="metricFilter">Filter by
|
75 |
<select id="metricFilter">
|
76 |
<option value="">All</option>
|
77 |
</select>
|
@@ -88,7 +101,6 @@
|
|
88 |
</div>
|
89 |
|
90 |
<script>
|
91 |
-
// Improved CSV parsing to handle quoted fields
|
92 |
function parseCSV(content) {
|
93 |
const rows = [];
|
94 |
let currentRow = [];
|
@@ -113,7 +125,6 @@
|
|
113 |
}
|
114 |
}
|
115 |
|
116 |
-
// Add the last field and row
|
117 |
if (currentField) currentRow.push(currentField.trim());
|
118 |
if (currentRow.length > 0) rows.push(currentRow);
|
119 |
|
@@ -121,19 +132,47 @@
|
|
121 |
return { headers, rows };
|
122 |
}
|
123 |
|
124 |
-
// Load CSV file
|
125 |
async function loadCSV(filePath) {
|
126 |
const response = await fetch(filePath);
|
127 |
const content = await response.text();
|
128 |
return parseCSV(content);
|
129 |
}
|
130 |
|
131 |
-
// Populate filter options
|
132 |
const metricFilter = document.getElementById('metricFilter');
|
133 |
const table = document.getElementById('csvTable');
|
134 |
const tableHead = table.querySelector('thead');
|
135 |
const tableBody = table.querySelector('tbody');
|
136 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
function populateFilterOptions(data, headerIndex) {
|
138 |
const uniqueMetricTypes = [...new Set(data.map(row => row[headerIndex]))];
|
139 |
uniqueMetricTypes.forEach(type => {
|
@@ -144,31 +183,28 @@
|
|
144 |
});
|
145 |
}
|
146 |
|
147 |
-
// Populate table
|
148 |
function populateTable(headers, rows, filterValue, headerIndex) {
|
149 |
tableHead.innerHTML = '';
|
150 |
tableBody.innerHTML = '';
|
151 |
|
152 |
-
// Add headers dynamically
|
153 |
const headerRow = document.createElement('tr');
|
154 |
headers.forEach(header => {
|
155 |
const th = document.createElement('th');
|
156 |
th.textContent = header;
|
|
|
157 |
headerRow.appendChild(th);
|
158 |
});
|
159 |
tableHead.appendChild(headerRow);
|
160 |
|
161 |
-
// Add rows dynamically
|
162 |
rows
|
163 |
.filter(row => !filterValue || row[headerIndex] === filterValue)
|
164 |
-
.sort((a, b) => a[0].localeCompare(b[0]))
|
165 |
.forEach(row => {
|
166 |
const tr = document.createElement('tr');
|
167 |
|
168 |
row.forEach((value, index) => {
|
169 |
const td = document.createElement('td');
|
170 |
|
171 |
-
// Handle clickable links for specific columns
|
172 |
if (headers[index] === 'Paper' && value) {
|
173 |
const link = document.createElement('a');
|
174 |
link.href = value;
|
@@ -195,18 +231,19 @@
|
|
195 |
|
196 |
tableBody.appendChild(tr);
|
197 |
});
|
|
|
|
|
198 |
}
|
199 |
|
200 |
metricFilter.addEventListener('change', () => {
|
201 |
const filterValue = metricFilter.value;
|
202 |
-
populateTable(parsedCSV.headers, parsedCSV.rows, filterValue, 0);
|
203 |
});
|
204 |
|
205 |
-
// Initial load
|
206 |
let parsedCSV;
|
207 |
loadCSV('benchmark_overview_data.csv').then(({ headers, rows }) => {
|
208 |
parsedCSV = { headers, rows };
|
209 |
-
populateFilterOptions(rows, 0);
|
210 |
populateTable(headers, rows, '', 0);
|
211 |
});
|
212 |
</script>
|
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>LLM Benchmark overview</title>
|
7 |
<style>
|
8 |
body {
|
9 |
font-family: Arial, sans-serif;
|
|
|
35 |
overflow: hidden;
|
36 |
text-overflow: ellipsis;
|
37 |
white-space: nowrap;
|
38 |
+
position: relative;
|
39 |
}
|
40 |
th {
|
41 |
background-color: #f7d9eb;
|
42 |
color: #333;
|
43 |
font-weight: bold;
|
44 |
}
|
45 |
+
th.resizable {
|
46 |
+
position: relative;
|
47 |
+
}
|
48 |
+
th.resizable .resizer {
|
49 |
+
position: absolute;
|
50 |
+
top: 0;
|
51 |
+
right: 0;
|
52 |
+
width: 5px;
|
53 |
+
height: 100%;
|
54 |
+
cursor: col-resize;
|
55 |
+
background-color: transparent;
|
56 |
+
}
|
57 |
td.expandable {
|
58 |
cursor: pointer;
|
59 |
}
|
|
|
82 |
</style>
|
83 |
</head>
|
84 |
<body>
|
85 |
+
<h1>LLM Benchmark overview</h1>
|
86 |
<div class="filter">
|
87 |
+
<label for="metricFilter">Filter by Evaluated task:</label>
|
88 |
<select id="metricFilter">
|
89 |
<option value="">All</option>
|
90 |
</select>
|
|
|
101 |
</div>
|
102 |
|
103 |
<script>
|
|
|
104 |
function parseCSV(content) {
|
105 |
const rows = [];
|
106 |
let currentRow = [];
|
|
|
125 |
}
|
126 |
}
|
127 |
|
|
|
128 |
if (currentField) currentRow.push(currentField.trim());
|
129 |
if (currentRow.length > 0) rows.push(currentRow);
|
130 |
|
|
|
132 |
return { headers, rows };
|
133 |
}
|
134 |
|
|
|
135 |
async function loadCSV(filePath) {
|
136 |
const response = await fetch(filePath);
|
137 |
const content = await response.text();
|
138 |
return parseCSV(content);
|
139 |
}
|
140 |
|
|
|
141 |
const metricFilter = document.getElementById('metricFilter');
|
142 |
const table = document.getElementById('csvTable');
|
143 |
const tableHead = table.querySelector('thead');
|
144 |
const tableBody = table.querySelector('tbody');
|
145 |
|
146 |
+
function makeResizable() {
|
147 |
+
const thElements = document.querySelectorAll('th');
|
148 |
+
thElements.forEach(th => {
|
149 |
+
const resizer = document.createElement('div');
|
150 |
+
resizer.classList.add('resizer');
|
151 |
+
th.appendChild(resizer);
|
152 |
+
|
153 |
+
let startX;
|
154 |
+
let startWidth;
|
155 |
+
|
156 |
+
resizer.addEventListener('mousedown', (e) => {
|
157 |
+
startX = e.pageX;
|
158 |
+
startWidth = th.offsetWidth;
|
159 |
+
|
160 |
+
document.addEventListener('mousemove', resizeColumn);
|
161 |
+
document.addEventListener('mouseup', stopResize);
|
162 |
+
});
|
163 |
+
|
164 |
+
function resizeColumn(e) {
|
165 |
+
const newWidth = startWidth + (e.pageX - startX);
|
166 |
+
th.style.width = `${newWidth}px`;
|
167 |
+
}
|
168 |
+
|
169 |
+
function stopResize() {
|
170 |
+
document.removeEventListener('mousemove', resizeColumn);
|
171 |
+
document.removeEventListener('mouseup', stopResize);
|
172 |
+
}
|
173 |
+
});
|
174 |
+
}
|
175 |
+
|
176 |
function populateFilterOptions(data, headerIndex) {
|
177 |
const uniqueMetricTypes = [...new Set(data.map(row => row[headerIndex]))];
|
178 |
uniqueMetricTypes.forEach(type => {
|
|
|
183 |
});
|
184 |
}
|
185 |
|
|
|
186 |
function populateTable(headers, rows, filterValue, headerIndex) {
|
187 |
tableHead.innerHTML = '';
|
188 |
tableBody.innerHTML = '';
|
189 |
|
|
|
190 |
const headerRow = document.createElement('tr');
|
191 |
headers.forEach(header => {
|
192 |
const th = document.createElement('th');
|
193 |
th.textContent = header;
|
194 |
+
th.classList.add('resizable');
|
195 |
headerRow.appendChild(th);
|
196 |
});
|
197 |
tableHead.appendChild(headerRow);
|
198 |
|
|
|
199 |
rows
|
200 |
.filter(row => !filterValue || row[headerIndex] === filterValue)
|
201 |
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
202 |
.forEach(row => {
|
203 |
const tr = document.createElement('tr');
|
204 |
|
205 |
row.forEach((value, index) => {
|
206 |
const td = document.createElement('td');
|
207 |
|
|
|
208 |
if (headers[index] === 'Paper' && value) {
|
209 |
const link = document.createElement('a');
|
210 |
link.href = value;
|
|
|
231 |
|
232 |
tableBody.appendChild(tr);
|
233 |
});
|
234 |
+
|
235 |
+
makeResizable();
|
236 |
}
|
237 |
|
238 |
metricFilter.addEventListener('change', () => {
|
239 |
const filterValue = metricFilter.value;
|
240 |
+
populateTable(parsedCSV.headers, parsedCSV.rows, filterValue, 0);
|
241 |
});
|
242 |
|
|
|
243 |
let parsedCSV;
|
244 |
loadCSV('benchmark_overview_data.csv').then(({ headers, rows }) => {
|
245 |
parsedCSV = { headers, rows };
|
246 |
+
populateFilterOptions(rows, 0);
|
247 |
populateTable(headers, rows, '', 0);
|
248 |
});
|
249 |
</script>
|