tfrere commited on
Commit
fd164b2
·
1 Parent(s): 1254641

update front

Browse files
client/src/components/LeaderboardCard.jsx CHANGED
@@ -71,7 +71,7 @@ const LeaderboardCard = ({ leaderboard }) => {
71
  left: 0,
72
  right: 0,
73
  bottom: 0,
74
- backgroundColor: "rgba(0, 0, 0, 0.1)",
75
  pointerEvents: "none",
76
  zIndex: 1,
77
  },
 
71
  left: 0,
72
  right: 0,
73
  bottom: 0,
74
+ backgroundColor: "rgba(0, 0, 0, 0.15)",
75
  pointerEvents: "none",
76
  zIndex: 1,
77
  },
client/src/components/LeaderboardFilters/LeaderboardFilters.jsx CHANGED
@@ -24,9 +24,11 @@ const LeaderboardFilters = ({ allSections }) => {
24
  totalLeaderboards,
25
  filteredCount,
26
  filterLeaderboards,
 
27
  } = useLeaderboard();
28
 
29
  const [inputValue, setInputValue] = useState("");
 
30
  const debouncedSearch = useDebounce(inputValue, 200);
31
 
32
  // Update the search query after debounce
@@ -34,6 +36,16 @@ const LeaderboardFilters = ({ allSections }) => {
34
  setSearchQuery(debouncedSearch);
35
  }, [debouncedSearch, setSearchQuery]);
36
 
 
 
 
 
 
 
 
 
 
 
37
  // Check if any filter is active
38
  const isFilterActive = debouncedSearch || arenaOnly;
39
 
@@ -158,18 +170,55 @@ const LeaderboardFilters = ({ allSections }) => {
158
  endAdornment: (
159
  <InputAdornment position="end">
160
  <Stack direction="row" spacing={2} alignItems="center">
161
- <Typography
162
- variant="body2"
163
- sx={{
164
- color: isFilterActive ? "primary.main" : "text.secondary",
165
- fontWeight: isFilterActive ? 500 : 400,
166
- }}
167
- >
168
- {isFilterActive
169
- ? `${filteredCount}/${totalLeaderboards}`
170
- : totalLeaderboards}{" "}
171
- leaderboards
172
- </Typography>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  <Divider orientation="vertical" flexItem />
174
  <FormControlLabel
175
  control={
@@ -177,10 +226,25 @@ const LeaderboardFilters = ({ allSections }) => {
177
  checked={arenaOnly}
178
  onChange={(e) => setArenaOnly(e.target.checked)}
179
  size="small"
 
 
 
 
 
 
 
 
 
180
  />
181
  }
182
  label={isMobile ? "Arena only" : "Show arena only"}
183
- sx={{ mr: 0 }}
 
 
 
 
 
 
184
  />
185
  </Stack>
186
  </InputAdornment>
 
24
  totalLeaderboards,
25
  filteredCount,
26
  filterLeaderboards,
27
+ leaderboards,
28
  } = useLeaderboard();
29
 
30
  const [inputValue, setInputValue] = useState("");
31
+ const [totalArenaCount, setTotalArenaCount] = useState(0);
32
  const debouncedSearch = useDebounce(inputValue, 200);
33
 
34
  // Update the search query after debounce
 
36
  setSearchQuery(debouncedSearch);
37
  }, [debouncedSearch, setSearchQuery]);
38
 
39
+ // Update total arena count when toggle changes
40
+ React.useEffect(() => {
41
+ if (arenaOnly) {
42
+ const arenaCount = leaderboards.filter((board) =>
43
+ board.tags?.includes("judge:humans")
44
+ ).length;
45
+ setTotalArenaCount(arenaCount);
46
+ }
47
+ }, [arenaOnly, leaderboards]);
48
+
49
  // Check if any filter is active
50
  const isFilterActive = debouncedSearch || arenaOnly;
51
 
 
170
  endAdornment: (
171
  <InputAdornment position="end">
172
  <Stack direction="row" spacing={2} alignItems="center">
173
+ <Box sx={{ display: "flex", alignItems: "center" }}>
174
+ <Typography
175
+ variant="body2"
176
+ sx={{
177
+ color: debouncedSearch
178
+ ? "primary.main"
179
+ : "text.secondary",
180
+ fontWeight: 500,
181
+ }}
182
+ >
183
+ {filteredCount}
184
+ </Typography>
185
+ <Box
186
+ sx={{
187
+ display: "flex",
188
+ alignItems: "center",
189
+ color: arenaOnly ? "secondary.main" : "text.secondary",
190
+ }}
191
+ >
192
+ <Typography
193
+ variant="body2"
194
+ sx={{
195
+ fontWeight: 500,
196
+ mx: 0.5,
197
+ }}
198
+ >
199
+ /
200
+ </Typography>
201
+ <Typography
202
+ variant="body2"
203
+ sx={{
204
+ fontWeight: 500,
205
+ }}
206
+ >
207
+ {arenaOnly ? totalArenaCount : totalLeaderboards}
208
+ </Typography>
209
+ </Box>
210
+ <Typography
211
+ variant="body2"
212
+ sx={{
213
+ color: "text.secondary",
214
+ fontWeight: 400,
215
+ ml: 0.5,
216
+ }}
217
+ >
218
+ leaderboards
219
+ </Typography>
220
+ </Box>
221
+
222
  <Divider orientation="vertical" flexItem />
223
  <FormControlLabel
224
  control={
 
226
  checked={arenaOnly}
227
  onChange={(e) => setArenaOnly(e.target.checked)}
228
  size="small"
229
+ color="secondary"
230
+ sx={{
231
+ "&.Mui-checked": {
232
+ color: "secondary.light",
233
+ "& .MuiSwitch-track": {
234
+ backgroundColor: "secondary.light",
235
+ },
236
+ },
237
+ }}
238
  />
239
  }
240
  label={isMobile ? "Arena only" : "Show arena only"}
241
+ sx={{
242
+ mr: 0,
243
+ "& .MuiFormControlLabel-label": {
244
+ color: arenaOnly ? "secondary.light" : "inherit",
245
+ userSelect: arenaOnly ? "none" : "auto",
246
+ },
247
+ }}
248
  />
249
  </Stack>
250
  </InputAdornment>
client/src/components/LeaderboardSection.jsx CHANGED
@@ -22,6 +22,9 @@ const LeaderboardSection = ({ title, leaderboards }) => {
22
  setExpanded(!expanded);
23
  };
24
 
 
 
 
25
  return (
26
  <Box sx={{ mb: 6 }}>
27
  <Box
@@ -95,11 +98,28 @@ const LeaderboardSection = ({ title, leaderboards }) => {
95
  )}
96
  </Box>
97
  <Grid container spacing={3}>
98
- {leaderboards.slice(0, ITEMS_PER_PAGE).map((leaderboard, index) => (
99
  <Grid item xs={12} sm={6} md={4} key={index}>
100
  <LeaderboardCard leaderboard={leaderboard} />
101
  </Grid>
102
  ))}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  </Grid>
104
  <Collapse in={showAll} timeout={300}>
105
  <Grid container spacing={3} sx={{ mt: 0 }}>
 
22
  setExpanded(!expanded);
23
  };
24
 
25
+ // Calculate how many skeletons we need
26
+ const skeletonsNeeded = Math.max(0, 3 - leaderboards.length);
27
+
28
  return (
29
  <Box sx={{ mb: 6 }}>
30
  <Box
 
98
  )}
99
  </Box>
100
  <Grid container spacing={3}>
101
+ {displayedLeaderboards.map((leaderboard, index) => (
102
  <Grid item xs={12} sm={6} md={4} key={index}>
103
  <LeaderboardCard leaderboard={leaderboard} />
104
  </Grid>
105
  ))}
106
+ {/* Add skeletons if needed */}
107
+ {Array.from({ length: skeletonsNeeded }).map((_, index) => (
108
+ <Grid item xs={12} sm={6} md={4} key={`skeleton-${index}`}>
109
+ <Box
110
+ sx={{
111
+ height: "180px",
112
+ borderRadius: 2,
113
+ bgcolor: (theme) => alpha(theme.palette.primary.main, 0.15),
114
+ opacity: 1,
115
+ transition: "opacity 0.3s ease-in-out",
116
+ "&:hover": {
117
+ opacity: 0.8,
118
+ },
119
+ }}
120
+ />
121
+ </Grid>
122
+ ))}
123
  </Grid>
124
  <Collapse in={showAll} timeout={300}>
125
  <Grid container spacing={3} sx={{ mt: 0 }}>
client/src/components/Logo/Logo.jsx CHANGED
@@ -33,6 +33,7 @@ const Logo = () => {
33
  margin: "0 auto",
34
  position: "relative",
35
  zIndex: 1,
 
36
  }}
37
  />
38
  </Link>
 
33
  margin: "0 auto",
34
  position: "relative",
35
  zIndex: 1,
36
+ opacity: (theme) => (theme.palette.mode === "dark" ? 0.8 : 1),
37
  }}
38
  />
39
  </Link>
client/src/components/PageTitle/PageTitle.jsx CHANGED
@@ -16,7 +16,7 @@ const PageTitle = () => {
16
  fontWeight="900"
17
  variant="h3"
18
  component="h1"
19
- color="#364254"
20
  sx={{
21
  display: "flex",
22
  justifyContent: "center",
@@ -50,6 +50,10 @@ const PageTitle = () => {
50
  left: "21px",
51
  transform: "translateX(-50%)",
52
  width: "13px",
 
 
 
 
53
  }}
54
  />
55
  )}
 
16
  fontWeight="900"
17
  variant="h3"
18
  component="h1"
19
+ color="text.primary"
20
  sx={{
21
  display: "flex",
22
  justifyContent: "center",
 
50
  left: "21px",
51
  transform: "translateX(-50%)",
52
  width: "13px",
53
+ filter: (theme) =>
54
+ theme.palette.mode === "dark"
55
+ ? "invert(1) brightness(2)"
56
+ : "none",
57
  }}
58
  />
59
  )}
client/src/config/theme.js CHANGED
@@ -84,9 +84,11 @@ const getDesignTokens = (mode) => ({
84
  components: {
85
  MuiCssBaseline: {
86
  styleOverrides: {
87
- "html, body": {
88
- backgroundColor: "background.default",
89
- color: mode === "dark" ? "#fff" : "#000",
 
 
90
  },
91
  },
92
  },
 
84
  components: {
85
  MuiCssBaseline: {
86
  styleOverrides: {
87
+ html: {
88
+ backgroundColor: mode === "light" ? "#f8f9fa" : "#0a0a0a",
89
+ },
90
+ body: {
91
+ backgroundColor: mode === "light" ? "#f8f9fa" : "#0a0a0a",
92
  },
93
  },
94
  },
client/src/context/LeaderboardContext.jsx CHANGED
@@ -21,34 +21,38 @@ export const LeaderboardProvider = ({ children }) => {
21
 
22
  // Filter functions for categories
23
  const filterByTag = useCallback((tag, boards) => {
 
 
 
 
 
 
 
 
 
 
 
24
  return (
25
- boards?.filter(
26
- (board) =>
27
- board.tags?.includes(tag) || board.consolidated_tags?.includes(tag)
28
  ) || []
29
  );
30
  }, []);
31
 
32
  const filterByLanguage = useCallback((boards) => {
33
  return (
34
- boards?.filter(
35
- (board) =>
36
- board.tags?.some((tag) => tag.startsWith("language:")) ||
37
- board.consolidated_tags?.some((tag) => tag.startsWith("language:"))
38
  ) || []
39
  );
40
  }, []);
41
 
42
  const filterByVision = useCallback((boards) => {
43
  return (
44
- boards?.filter(
45
- (board) =>
46
- board.tags?.some(
47
- (tag) => tag === "modality:video" || tag === "modality:image"
48
- ) ||
49
- board.consolidated_tags?.some(
50
- (tag) => tag === "modality:video" || tag === "modality:image"
51
- )
52
  ) || []
53
  );
54
  }, []);
@@ -57,10 +61,11 @@ export const LeaderboardProvider = ({ children }) => {
57
  const categorizedTags = [
58
  "eval:code",
59
  "eval:math",
 
60
  "modality:video",
61
  "modality:image",
62
  "modality:audio",
63
- "modality:tools",
64
  "domain:financial",
65
  "domain:medical",
66
  "domain:legal",
@@ -68,21 +73,15 @@ export const LeaderboardProvider = ({ children }) => {
68
 
69
  return (
70
  boards?.filter((board) => {
71
- if (
72
- (!board.tags || board.tags.length === 0) &&
73
- (!board.consolidated_tags || board.consolidated_tags.length === 0)
74
- ) {
75
  return true;
76
  }
77
 
78
  const hasNoTagsInCategory = !board.tags?.some(
79
  (tag) => categorizedTags.includes(tag) || tag.startsWith("language:")
80
  );
81
- const hasNoConsolidatedTagsInCategory = !board.consolidated_tags?.some(
82
- (tag) => categorizedTags.includes(tag) || tag.startsWith("language:")
83
- );
84
 
85
- return hasNoTagsInCategory && hasNoConsolidatedTagsInCategory;
86
  }) || []
87
  );
88
  }, []);
@@ -92,6 +91,11 @@ export const LeaderboardProvider = ({ children }) => {
92
  if (!leaderboards) return [];
93
 
94
  return [
 
 
 
 
 
95
  {
96
  id: "code",
97
  title: "Code",
@@ -113,11 +117,6 @@ export const LeaderboardProvider = ({ children }) => {
113
  title: "Audio",
114
  data: filterByTag("modality:audio", leaderboards),
115
  },
116
- {
117
- id: "agentic",
118
- title: "Agentic",
119
- data: filterByTag("modality:tools", leaderboards),
120
- },
121
  {
122
  id: "financial",
123
  title: "Financial",
@@ -133,6 +132,11 @@ export const LeaderboardProvider = ({ children }) => {
133
  title: "Legal",
134
  data: filterByTag("domain:legal", leaderboards),
135
  },
 
 
 
 
 
136
  {
137
  id: "uncategorized",
138
  title: "Uncategorized",
@@ -149,7 +153,22 @@ export const LeaderboardProvider = ({ children }) => {
149
 
150
  // Get sections with data
151
  const sections = useMemo(() => {
152
- return allSections.filter((section) => section.data.length > 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
  }, [allSections]);
154
 
155
  // Filter leaderboards based on search query and arena toggle
@@ -169,6 +188,8 @@ export const LeaderboardProvider = ({ children }) => {
169
  "test:",
170
  "modality:",
171
  "submission:",
 
 
172
  ];
173
 
174
  filtered = filtered.filter((board) => {
@@ -177,12 +198,7 @@ export const LeaderboardProvider = ({ children }) => {
177
  );
178
 
179
  if (isTagSearch) {
180
- return (
181
- board.tags?.some((tag) => tag.toLowerCase().includes(query)) ||
182
- board.consolidated_tags?.some((tag) =>
183
- tag.toLowerCase().includes(query)
184
- )
185
- );
186
  }
187
 
188
  return board.card_data?.title?.toLowerCase().includes(query);
@@ -191,10 +207,8 @@ export const LeaderboardProvider = ({ children }) => {
191
 
192
  // Filter arena only
193
  if (arenaOnly) {
194
- filtered = filtered.filter(
195
- (board) =>
196
- board.tags?.includes("judge:humans") ||
197
- board.consolidated_tags?.includes("judge:humans")
198
  );
199
  }
200
 
 
21
 
22
  // Filter functions for categories
23
  const filterByTag = useCallback((tag, boards) => {
24
+ const searchTag = tag.toLowerCase();
25
+ console.log("Filtering by tag:", {
26
+ searchTag,
27
+ boards: boards?.map((board) => ({
28
+ id: board.id,
29
+ tags: board.tags,
30
+ matches: {
31
+ tags: board.tags?.some((t) => t.toLowerCase() === searchTag),
32
+ },
33
+ })),
34
+ });
35
  return (
36
+ boards?.filter((board) =>
37
+ board.tags?.some((t) => t.toLowerCase() === searchTag)
 
38
  ) || []
39
  );
40
  }, []);
41
 
42
  const filterByLanguage = useCallback((boards) => {
43
  return (
44
+ boards?.filter((board) =>
45
+ board.tags?.some((tag) => tag.startsWith("language:"))
 
 
46
  ) || []
47
  );
48
  }, []);
49
 
50
  const filterByVision = useCallback((boards) => {
51
  return (
52
+ boards?.filter((board) =>
53
+ board.tags?.some(
54
+ (tag) => tag === "modality:video" || tag === "modality:image"
55
+ )
 
 
 
 
56
  ) || []
57
  );
58
  }, []);
 
61
  const categorizedTags = [
62
  "eval:code",
63
  "eval:math",
64
+ "eval:safety",
65
  "modality:video",
66
  "modality:image",
67
  "modality:audio",
68
+ "modality:agent",
69
  "domain:financial",
70
  "domain:medical",
71
  "domain:legal",
 
73
 
74
  return (
75
  boards?.filter((board) => {
76
+ if (!board.tags || board.tags.length === 0) {
 
 
 
77
  return true;
78
  }
79
 
80
  const hasNoTagsInCategory = !board.tags?.some(
81
  (tag) => categorizedTags.includes(tag) || tag.startsWith("language:")
82
  );
 
 
 
83
 
84
+ return hasNoTagsInCategory;
85
  }) || []
86
  );
87
  }, []);
 
91
  if (!leaderboards) return [];
92
 
93
  return [
94
+ {
95
+ id: "agentic",
96
+ title: "Agentic",
97
+ data: filterByTag("modality:agent", leaderboards),
98
+ },
99
  {
100
  id: "code",
101
  title: "Code",
 
117
  title: "Audio",
118
  data: filterByTag("modality:audio", leaderboards),
119
  },
 
 
 
 
 
120
  {
121
  id: "financial",
122
  title: "Financial",
 
132
  title: "Legal",
133
  data: filterByTag("domain:legal", leaderboards),
134
  },
135
+ {
136
+ id: "safety",
137
+ title: "Safety",
138
+ data: filterByTag("eval:safety", leaderboards),
139
+ },
140
  {
141
  id: "uncategorized",
142
  title: "Uncategorized",
 
153
 
154
  // Get sections with data
155
  const sections = useMemo(() => {
156
+ const filteredSections = allSections.filter((section) => {
157
+ console.log(`Section ${section.title}:`, {
158
+ data: section.data,
159
+ count: section.data.length,
160
+ boards: section.data.map((board) => ({
161
+ id: board.id,
162
+ tags: board.tags,
163
+ })),
164
+ });
165
+ return section.data.length > 0;
166
+ });
167
+ console.log(
168
+ "Final sections:",
169
+ filteredSections.map((s) => s.title)
170
+ );
171
+ return filteredSections;
172
  }, [allSections]);
173
 
174
  // Filter leaderboards based on search query and arena toggle
 
188
  "test:",
189
  "modality:",
190
  "submission:",
191
+ "domain:",
192
+ "eval:",
193
  ];
194
 
195
  filtered = filtered.filter((board) => {
 
198
  );
199
 
200
  if (isTagSearch) {
201
+ return board.tags?.some((tag) => tag.toLowerCase().includes(query));
 
 
 
 
 
202
  }
203
 
204
  return board.card_data?.title?.toLowerCase().includes(query);
 
207
 
208
  // Filter arena only
209
  if (arenaOnly) {
210
+ filtered = filtered.filter((board) =>
211
+ board.tags?.includes("judge:humans")
 
 
212
  );
213
  }
214
 
client/src/pages/HowToSubmitPage/HowToSubmitPage.jsx CHANGED
@@ -7,7 +7,12 @@ import {
7
  Divider,
8
  alpha,
9
  Link,
 
 
 
 
10
  } from "@mui/material";
 
11
  import PageHeader from "../../components/PageHeader/PageHeader";
12
 
13
  const StepNumber = ({ number }) => (
@@ -37,7 +42,7 @@ const Section = ({ title, children }) => (
37
  elevation={0}
38
  sx={{
39
  border: "1px solid",
40
- borderColor: "grey.300",
41
  borderRadius: 1,
42
  overflow: "hidden",
43
  mb: 3,
@@ -48,10 +53,7 @@ const Section = ({ title, children }) => (
48
  px: 3,
49
  py: 2,
50
  borderBottom: "1px solid",
51
- borderColor: (theme) =>
52
- theme.palette.mode === "dark"
53
- ? alpha(theme.palette.divider, 0.1)
54
- : "grey.200",
55
  bgcolor: (theme) =>
56
  theme.palette.mode === "dark"
57
  ? alpha(theme.palette.background.paper, 0.5)
@@ -86,45 +88,62 @@ const Tag = ({ children }) => (
86
  </Box>
87
  );
88
 
89
- const TagSection = ({ title, description, tags, explanations }) => (
90
- <Box sx={{ mb: 4 }}>
91
- <Typography variant="h6" sx={{ fontWeight: 600, mb: 1 }}>
 
 
 
 
 
 
 
 
 
 
 
92
  {title}
93
  </Typography>
94
  {description && (
95
- <Typography variant="body1" sx={{ mb: 2, color: "text.secondary" }}>
96
  {description}
97
  </Typography>
98
  )}
99
- <Stack spacing={1}>
100
  {tags.map((tag, index) => (
101
- <Box key={index}>
102
  <Tag>{tag}</Tag>
103
  {explanations && explanations[index] && (
104
  <Typography
105
- component="span"
106
  variant="body2"
107
- sx={{ color: "text.secondary", ml: 1 }}
 
 
 
 
108
  dangerouslySetInnerHTML={{ __html: explanations[index] }}
109
  />
110
  )}
111
  </Box>
112
  ))}
113
- </Stack>
114
- </Box>
115
  );
116
 
117
  const CodeBlock = ({ children }) => (
118
  <Box
119
  sx={{
120
  backgroundColor: (theme) =>
121
- theme.palette.mode === "dark"
122
- ? "rgba(255, 255, 255, 0.05)"
123
- : "rgba(0, 0, 0, 0.03)",
124
- p: 2,
 
 
125
  borderRadius: 1,
126
  fontFamily: "monospace",
127
  mb: 2,
 
128
  "& .key": {
129
  color: (theme) => theme.palette.primary.main,
130
  },
@@ -142,10 +161,194 @@ const CodeBlock = ({ children }) => (
142
  },
143
  }}
144
  >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  {children}
146
  </Box>
147
  );
148
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  const HowToSubmitPage = () => {
150
  return (
151
  <Box sx={{ width: "100%", maxWidth: 1200, margin: "0 auto", padding: 4 }}>
@@ -160,176 +363,244 @@ const HowToSubmitPage = () => {
160
  />
161
 
162
  <Section title="Configuration steps">
163
- <Stack spacing={4}>
164
- <Typography variant="body1" color="text.secondary">
165
- Your leaderboard must be hosted on a{" "}
166
- <Link
167
- href="https://huggingface.co/docs/hub/spaces"
168
- target="_blank"
169
- rel="noopener noreferrer"
170
- >
171
- Hugging Face Space
172
- </Link>
173
- .
174
- <br />
175
- Like{" "}
176
- <Link
177
- href="https://huggingface.co/docs/hub/model-cards"
178
- target="_blank"
179
- rel="noopener noreferrer"
180
- >
181
- model cards
182
- </Link>
183
- , your Space's <strong>README.md</strong> file should include
184
- specific <strong>metadata</strong> in a YAML section at the top.
185
- </Typography>
 
 
 
 
 
 
 
186
 
187
- <Box
188
- sx={{
189
- display: "flex",
190
- flexDirection: { xs: "column", md: "row" },
191
- gap: 4,
192
- position: "relative",
193
- }}
194
- >
195
- <Box sx={{ flex: 4 }}>
196
- <Stack spacing={4}>
197
- <Stack spacing={3}>
198
- <Stack direction="row" spacing={2} alignItems="center">
199
- <StepNumber number={1} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  <Typography
201
- variant="subtitle1"
202
- sx={{
203
- fontWeight: 600,
204
- color: "text.primary",
205
- letterSpacing: "-0.01em",
206
- }}
207
  >
208
- Define the type
209
- </Typography>
210
- </Stack>
211
- <Box sx={{ pl: 7 }}>
212
- <Typography variant="body2" color="text.secondary">
213
  Add either the <strong>leaderboard</strong> or{" "}
214
- <strong>arena</strong> tag.
215
- </Typography>
216
- </Box>
217
- </Stack>
218
-
219
- <Stack spacing={3}>
220
- <Stack direction="row" spacing={2} alignItems="center">
221
- <StepNumber number={2} />
222
- <Typography
223
- variant="subtitle1"
224
- sx={{
225
- fontWeight: 600,
226
- color: "text.primary",
227
- letterSpacing: "-0.01em",
228
- }}
229
- >
230
- Add a description
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  </Typography>
232
- </Stack>
233
- <Box sx={{ pl: 7 }}>
234
  <Typography variant="body2" color="text.secondary">
235
  Include a <strong>short_description</strong> field to
236
- explain the purpose of your evaluation.
237
  </Typography>
238
- </Box>
239
- </Stack>
240
-
241
- <Stack spacing={3}>
242
- <Stack direction="row" spacing={2} alignItems="center">
243
- <StepNumber number={3} />
244
- <Typography
245
- variant="subtitle1"
246
- sx={{
247
- fontWeight: 600,
248
- color: "text.primary",
249
- letterSpacing: "-0.01em",
250
- }}
251
- >
252
- Specify metadata
253
- </Typography>
254
- </Stack>
255
- <Box sx={{ pl: 7 }}>
256
  <Typography variant="body2" color="text.secondary">
257
  Add <strong>metadata tags</strong> to categorize your
258
- evaluation and help users understand its characteristics.
259
  </Typography>
260
- </Box>
261
- </Stack>
262
- </Stack>
263
- </Box>
 
264
 
265
- <Divider
266
- orientation="vertical"
267
- flexItem
268
- sx={{
269
- display: { xs: "none", md: "block" },
270
- }}
271
- />
272
-
273
- <Box sx={{ flex: 5 }}>
274
- <CodeBlock>
275
- ---
276
- <br />
277
- <span className="key">short_description</span>
278
- <span className="punctuation">:</span>{" "}
279
- <span className="value">
280
- Evaluating LLMs on math reasoning tasks
281
- </span>
282
- <br />
283
- <span className="key">tags</span>
284
- <span className="punctuation">:</span>
285
- <br />
286
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
287
- <span className="value">leaderboard</span>
288
- <span className="comment">
289
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#
290
- Type of leaderboard
291
- </span>
292
- <br />
293
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
294
- <span className="value">submission:automatic</span>{" "}
295
- <span className="comment"># How models are submitted</span>
296
- <br />
297
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
298
- <span className="value">test:public</span>{" "}
299
- <span className="comment">
300
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test
301
- set visibility
302
- </span>
303
- <br />
304
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
305
- <span className="value">judge:function</span>{" "}
306
- <span className="comment">
307
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Evaluation method
308
- </span>
309
- <br />
310
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
311
- <span className="value">modality:text</span>{" "}
312
- <span className="comment">
313
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Input/output type
314
- </span>
315
- <br />
316
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
317
- <span className="value">language:english</span>{" "}
318
- <span className="comment">
319
- &nbsp;&nbsp;&nbsp;&nbsp;# Language coverage
320
- </span>
321
- <br />
322
- <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
323
- <span className="value">domain:financial</span>{" "}
324
- <span className="comment">
325
- &nbsp;&nbsp;&nbsp;&nbsp;# Specific domain
326
- </span>
327
- <br />
328
- ---
329
- </CodeBlock>
330
- </Box>
331
  </Box>
332
- </Stack>
333
  </Section>
334
 
335
  <Section title="What do the tags mean?">
@@ -350,8 +621,6 @@ const HowToSubmitPage = () => {
350
  ]}
351
  />
352
 
353
- <Divider sx={{ my: 3 }} />
354
-
355
  <TagSection
356
  title="Test set status"
357
  description="Arenas are not concerned by this category."
@@ -364,8 +633,6 @@ const HowToSubmitPage = () => {
364
  ]}
365
  />
366
 
367
- <Divider sx={{ my: 3 }} />
368
-
369
  <TagSection
370
  title="Judges"
371
  tags={[
@@ -382,11 +649,9 @@ const HowToSubmitPage = () => {
382
  ]}
383
  />
384
 
385
- <Divider sx={{ my: 3 }} />
386
-
387
  <TagSection
388
  title="Modalities"
389
- description="Can be any (or several) of the following list:"
390
  tags={[
391
  "modality:text",
392
  "modality:image",
@@ -405,11 +670,9 @@ const HowToSubmitPage = () => {
405
  ]}
406
  />
407
 
408
- <Divider sx={{ my: 3 }} />
409
-
410
  <TagSection
411
  title="Evaluation categories"
412
- description="Can be any (or several) of the following list:"
413
  tags={[
414
  "eval:generation",
415
  "eval:math",
@@ -428,25 +691,27 @@ const HowToSubmitPage = () => {
428
  ]}
429
  />
430
 
431
- <Divider sx={{ my: 3 }} />
432
-
433
  <TagSection
434
  title="Language"
435
- description="You can indicate the languages covered by your benchmark like so: language:mylanguage. At the moment, we do not support language codes, please use the language name in English."
436
- tags={["language:english", "language:french"]}
 
 
 
 
 
437
  />
438
 
439
- <Divider sx={{ my: 3 }} />
440
-
441
  <TagSection
442
  title="Domain"
443
  description="Indicates the specific domain of the leaderboard:"
444
  tags={["domain:financial", "domain:medical", "domain:legal"]}
445
  />
 
446
  <Typography
447
  variant="body2"
448
  sx={{
449
- mt: 1,
450
  color: "text.secondary",
451
  fontSize: "0.875rem",
452
  fontStyle: "italic",
 
7
  Divider,
8
  alpha,
9
  Link,
10
+ Grid,
11
+ InputLabel,
12
+ Tooltip,
13
+ IconButton,
14
  } from "@mui/material";
15
+ import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined";
16
  import PageHeader from "../../components/PageHeader/PageHeader";
17
 
18
  const StepNumber = ({ number }) => (
 
42
  elevation={0}
43
  sx={{
44
  border: "1px solid",
45
+ borderColor: "divider",
46
  borderRadius: 1,
47
  overflow: "hidden",
48
  mb: 3,
 
53
  px: 3,
54
  py: 2,
55
  borderBottom: "1px solid",
56
+ borderColor: "divider",
 
 
 
57
  bgcolor: (theme) =>
58
  theme.palette.mode === "dark"
59
  ? alpha(theme.palette.background.paper, 0.5)
 
88
  </Box>
89
  );
90
 
91
+ const TagCard = ({ title, description, tags, explanations }) => (
92
+ <Paper
93
+ elevation={1}
94
+ sx={{
95
+ p: 3,
96
+ height: "100%",
97
+ display: "flex",
98
+ flexDirection: "column",
99
+ borderRadius: 2,
100
+ border: "1px solid",
101
+ borderColor: "grey.200",
102
+ }}
103
+ >
104
+ <Typography variant="h6" sx={{ fontWeight: 600, mb: 2 }}>
105
  {title}
106
  </Typography>
107
  {description && (
108
+ <Typography variant="body2" sx={{ mb: 2, color: "text.secondary" }}>
109
  {description}
110
  </Typography>
111
  )}
112
+ <Box sx={{ flex: 1 }}>
113
  {tags.map((tag, index) => (
114
+ <Box key={index} sx={{ mb: 2 }}>
115
  <Tag>{tag}</Tag>
116
  {explanations && explanations[index] && (
117
  <Typography
 
118
  variant="body2"
119
+ sx={{
120
+ color: "text.secondary",
121
+ mt: 1,
122
+ display: "block",
123
+ }}
124
  dangerouslySetInnerHTML={{ __html: explanations[index] }}
125
  />
126
  )}
127
  </Box>
128
  ))}
129
+ </Box>
130
+ </Paper>
131
  );
132
 
133
  const CodeBlock = ({ children }) => (
134
  <Box
135
  sx={{
136
  backgroundColor: (theme) =>
137
+ alpha(
138
+ theme.palette.primary.main,
139
+ theme.palette.mode === "dark" ? 0.15 : 0.05
140
+ ),
141
+ px: 2,
142
+ py: 4,
143
  borderRadius: 1,
144
  fontFamily: "monospace",
145
  mb: 2,
146
+ position: "relative",
147
  "& .key": {
148
  color: (theme) => theme.palette.primary.main,
149
  },
 
161
  },
162
  }}
163
  >
164
+ <InputLabel
165
+ sx={{
166
+ position: "absolute",
167
+ right: 8,
168
+ top: 8,
169
+ fontSize: "0.75rem",
170
+ color: "text.secondary",
171
+ fontFamily: "monospace",
172
+ bgcolor: "background.paper",
173
+ px: 1,
174
+ py: 0.5,
175
+ borderRadius: 1,
176
+ border: "1px solid",
177
+ borderColor: "divider",
178
+ zIndex: 1,
179
+ }}
180
+ >
181
+ README.md
182
+ </InputLabel>
183
  {children}
184
  </Box>
185
  );
186
 
187
+ const getTagEmoji = (tag) => {
188
+ const type = tag.split(":")[0];
189
+ const name = tag.split(":")[1];
190
+
191
+ const emojiMap = {
192
+ submission: {
193
+ automatic: "🤖",
194
+ semiautomatic: "🔄",
195
+ manual: "👨‍💻",
196
+ closed: "🔒",
197
+ },
198
+ test: {
199
+ public: "👀",
200
+ mix: "🔀",
201
+ private: "🔐",
202
+ rolling: "🎲",
203
+ },
204
+ judge: {
205
+ function: "⚙️",
206
+ model: "🧠",
207
+ humans: "👥",
208
+ vibe_check: "✨",
209
+ },
210
+ modality: {
211
+ text: "📝",
212
+ image: "🖼️",
213
+ audio: "🎵",
214
+ video: "🎥",
215
+ tools: "🛠️",
216
+ artefacts: "🏺",
217
+ },
218
+ eval: {
219
+ generation: "✨",
220
+ math: "🔢",
221
+ code: "💻",
222
+ performance: "⚡",
223
+ safety: "🛡️",
224
+ },
225
+ task: {
226
+ rag: "🔍",
227
+ },
228
+ language: {
229
+ english: "🇬🇧",
230
+ french: "🇫🇷",
231
+ whatever: "🌍",
232
+ },
233
+ domain: {
234
+ financial: "💰",
235
+ medical: "⚕️",
236
+ legal: "⚖️",
237
+ },
238
+ };
239
+
240
+ return emojiMap[type]?.[name] || "🏷️";
241
+ };
242
+
243
+ const TagItem = ({ tag, explanation }) => {
244
+ // Extract the name without prefix
245
+ const name = tag.split(":")[1];
246
+ const emoji = getTagEmoji(tag);
247
+
248
+ return (
249
+ <Paper
250
+ elevation={0}
251
+ sx={{
252
+ height: "100%",
253
+ display: "flex",
254
+ flexDirection: "column",
255
+ borderRadius: 2,
256
+ border: "1px solid",
257
+ borderColor: "divider",
258
+ overflow: "hidden",
259
+ }}
260
+ >
261
+ <Box
262
+ sx={{
263
+ bgcolor: (theme) =>
264
+ alpha(
265
+ theme.palette.primary.main,
266
+ theme.palette.mode === "dark" ? 0.15 : 0.05
267
+ ),
268
+ py: 2,
269
+ px: 2,
270
+ borderRadius: 0,
271
+ mb: 2,
272
+ position: "relative",
273
+ }}
274
+ >
275
+ <Typography
276
+ variant="h6"
277
+ sx={{
278
+ fontWeight: 700,
279
+ color: "text.primary",
280
+ letterSpacing: "-0.02em",
281
+ pr: 5,
282
+ textTransform: "capitalize",
283
+ }}
284
+ >
285
+ {emoji} &nbsp;&nbsp; {name}
286
+ </Typography>
287
+ </Box>
288
+ <Box sx={{ px: 2, pb: 2 }}>
289
+ <Typography
290
+ variant="body2"
291
+ sx={{
292
+ color: "text.secondary",
293
+ mb: 2,
294
+ fontSize: "0.75rem",
295
+ }}
296
+ >
297
+ <strong>{tag.split(":")[0]}</strong>:{tag.split(":")[1]}
298
+ </Typography>
299
+ {explanation && (
300
+ <Typography
301
+ variant="body2"
302
+ sx={{
303
+ color: "text.secondary",
304
+ flex: 1,
305
+ }}
306
+ dangerouslySetInnerHTML={{ __html: explanation }}
307
+ />
308
+ )}
309
+ </Box>
310
+ </Paper>
311
+ );
312
+ };
313
+
314
+ const TagSection = ({ title, description, tags, explanations }) => {
315
+ // Determine if this section should have 4 columns
316
+ const shouldHaveFourColumns = [
317
+ "Submission type",
318
+ "Test set status",
319
+ "Judges",
320
+ ].includes(title);
321
+
322
+ return (
323
+ <Box sx={{ mb: 8 }}>
324
+ <Typography variant="h6" sx={{ fontWeight: 600, mb: 1 }}>
325
+ {title}
326
+ </Typography>
327
+ {description && (
328
+ <Typography variant="body1" sx={{ mb: 4, color: "text.secondary" }}>
329
+ {description}
330
+ </Typography>
331
+ )}
332
+ <Grid container spacing={2}>
333
+ {tags.map((tag, index) => (
334
+ <Grid
335
+ item
336
+ xs={12}
337
+ sm={6}
338
+ md={shouldHaveFourColumns ? 3 : 4}
339
+ key={index}
340
+ >
341
+ <TagItem
342
+ tag={tag}
343
+ explanation={explanations ? explanations[index] : null}
344
+ />
345
+ </Grid>
346
+ ))}
347
+ </Grid>
348
+ </Box>
349
+ );
350
+ };
351
+
352
  const HowToSubmitPage = () => {
353
  return (
354
  <Box sx={{ width: "100%", maxWidth: 1200, margin: "0 auto", padding: 4 }}>
 
363
  />
364
 
365
  <Section title="Configuration steps">
366
+ <Box sx={{ display: "flex", gap: 4 }}>
367
+ <Stack spacing={4} sx={{ flex: "0 0 45%" }}>
368
+ <Stack spacing={3}>
369
+ <Stack direction="row" spacing={2} alignItems="center">
370
+ <StepNumber number={1} />
371
+ <Typography
372
+ variant="subtitle1"
373
+ sx={{
374
+ fontWeight: 600,
375
+ color: "text.primary",
376
+ letterSpacing: "-0.01em",
377
+ }}
378
+ >
379
+ Create a Space
380
+ </Typography>
381
+ </Stack>
382
+ <Box sx={{ pl: 7 }}>
383
+ <Typography variant="body2" color="text.secondary">
384
+ Your leaderboard must be hosted on a{" "}
385
+ <Link
386
+ href="https://huggingface.co/docs/hub/spaces"
387
+ target="_blank"
388
+ rel="noopener noreferrer"
389
+ >
390
+ Hugging Face Space
391
+ </Link>
392
+ .
393
+ </Typography>
394
+ </Box>
395
+ </Stack>
396
 
397
+ <Stack spacing={3}>
398
+ <Stack direction="row" spacing={2} alignItems="center">
399
+ <StepNumber number={2} />
400
+ <Typography
401
+ variant="subtitle1"
402
+ sx={{
403
+ fontWeight: 600,
404
+ color: "text.primary",
405
+ letterSpacing: "-0.01em",
406
+ }}
407
+ >
408
+ Add metadata
409
+ </Typography>
410
+ </Stack>
411
+ <Box sx={{ pl: 7 }}>
412
+ <Typography
413
+ variant="body2"
414
+ color="text.secondary"
415
+ sx={{ mb: 2 }}
416
+ >
417
+ Like{" "}
418
+ <Link
419
+ href="https://huggingface.co/docs/hub/model-cards"
420
+ target="_blank"
421
+ rel="noopener noreferrer"
422
+ >
423
+ model cards
424
+ </Link>
425
+ , your Space's{" "}
426
+ <InputLabel
427
+ sx={{
428
+ display: "inline-flex",
429
+ fontSize: "0.75rem",
430
+ color: "text.secondary",
431
+ fontFamily: "monospace",
432
+ bgcolor: "background.paper",
433
+ px: 1,
434
+ py: 0.5,
435
+ borderRadius: 1,
436
+ border: "1px solid",
437
+ borderColor: "divider",
438
+ mx: 0.5,
439
+ }}
440
+ >
441
+ README.md
442
+ </InputLabel>{" "}
443
+ file should include specific <strong>metadata</strong> in a
444
+ YAML section at the top:
445
+ </Typography>
446
+ <ul
447
+ style={{
448
+ margin: 0,
449
+ paddingLeft: "20px",
450
+ color: "text.secondary",
451
+ }}
452
+ >
453
+ <li>
454
  <Typography
455
+ variant="body2"
456
+ color="text.secondary"
457
+ sx={{ display: "flex", alignItems: "center", gap: 0.5 }}
 
 
 
458
  >
 
 
 
 
 
459
  Add either the <strong>leaderboard</strong> or{" "}
460
+ <strong>arena</strong> tag
461
+ <Tooltip
462
+ title={
463
+ <Box sx={{ p: 1, maxWidth: 300 }}>
464
+ <Typography
465
+ variant="subtitle2"
466
+ sx={{
467
+ mb: 1,
468
+ fontWeight: 600,
469
+ color: "text.secondary",
470
+ }}
471
+ >
472
+ Choose between:
473
+ </Typography>
474
+ <Typography
475
+ variant="body2"
476
+ component="div"
477
+ sx={{ mb: 1 }}
478
+ >
479
+ • <strong>arena</strong> - for human evaluations
480
+ <br />
481
+ <Box component="span" sx={{ pl: 2 }}>
482
+ requires <Tag>judge:humans</Tag>
483
+ </Box>
484
+ </Typography>
485
+ <Typography variant="body2" component="div">
486
+ • <strong>leaderboard</strong> - for automated
487
+ evaluations
488
+ <br />
489
+ <Box component="span" sx={{ pl: 2 }}>
490
+ with <Tag>judge:function</Tag> or{" "}
491
+ <Tag>judge:model</Tag>
492
+ </Box>
493
+ </Typography>
494
+ </Box>
495
+ }
496
+ arrow
497
+ placement="right"
498
+ componentsProps={{
499
+ tooltip: {
500
+ sx: {
501
+ bgcolor: "background.paper",
502
+ color: "text.primary",
503
+ "& .MuiTooltip-arrow": {
504
+ color: "background.paper",
505
+ },
506
+ boxShadow: (theme) => theme.shadows[2],
507
+ },
508
+ },
509
+ }}
510
+ >
511
+ <IconButton
512
+ size="small"
513
+ sx={{
514
+ p: 0.5,
515
+ color: "text.secondary",
516
+ "&:hover": {
517
+ color: "primary.main",
518
+ bgcolor: (theme) =>
519
+ alpha(theme.palette.primary.main, 0.1),
520
+ },
521
+ }}
522
+ >
523
+ <InfoOutlinedIcon sx={{ fontSize: "1rem" }} />
524
+ </IconButton>
525
+ </Tooltip>
526
  </Typography>
527
+ </li>
528
+ <li>
529
  <Typography variant="body2" color="text.secondary">
530
  Include a <strong>short_description</strong> field to
531
+ explain the purpose of your evaluation
532
  </Typography>
533
+ </li>
534
+ <li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  <Typography variant="body2" color="text.secondary">
536
  Add <strong>metadata tags</strong> to categorize your
537
+ evaluation (see examples on the right)
538
  </Typography>
539
+ </li>
540
+ </ul>
541
+ </Box>
542
+ </Stack>
543
+ </Stack>
544
 
545
+ <Box sx={{ flex: 1 }}>
546
+ <CodeBlock>
547
+ ---
548
+ <br />
549
+ <span className="key">short_description</span>
550
+ <span className="punctuation">:</span>{" "}
551
+ <span className="value">
552
+ Evaluating LLMs on math reasoning tasks
553
+ </span>
554
+ <br />
555
+ <span className="key">tags</span>
556
+ <span className="punctuation">:</span>
557
+ <br />
558
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
559
+ <span className="value">leaderboard</span>
560
+ <span className="comment">
561
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#
562
+ Type of leaderboard
563
+ </span>
564
+ <br />
565
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
566
+ <span className="value">submission:automatic</span>{" "}
567
+ <span className="comment"># How models are submitted</span>
568
+ <br />
569
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
570
+ <span className="value">test:public</span>{" "}
571
+ <span className="comment">
572
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test set
573
+ visibility
574
+ </span>
575
+ <br />
576
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
577
+ <span className="value">judge:function</span>{" "}
578
+ <span className="comment">
579
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Evaluation method
580
+ </span>
581
+ <br />
582
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
583
+ <span className="value">modality:text</span>{" "}
584
+ <span className="comment">
585
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Input/output type
586
+ </span>
587
+ <br />
588
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
589
+ <span className="value">language:english</span>{" "}
590
+ <span className="comment">
591
+ &nbsp;&nbsp;&nbsp;&nbsp;# Language coverage
592
+ </span>
593
+ <br />
594
+ <span className="punctuation">&nbsp;&nbsp;-</span>{" "}
595
+ <span className="value">domain:financial</span>{" "}
596
+ <span className="comment">
597
+ &nbsp;&nbsp;&nbsp;&nbsp;# Specific domain
598
+ </span>
599
+ <br />
600
+ ---
601
+ </CodeBlock>
 
 
 
 
 
 
 
 
 
602
  </Box>
603
+ </Box>
604
  </Section>
605
 
606
  <Section title="What do the tags mean?">
 
621
  ]}
622
  />
623
 
 
 
624
  <TagSection
625
  title="Test set status"
626
  description="Arenas are not concerned by this category."
 
633
  ]}
634
  />
635
 
 
 
636
  <TagSection
637
  title="Judges"
638
  tags={[
 
649
  ]}
650
  />
651
 
 
 
652
  <TagSection
653
  title="Modalities"
654
+ description="Can be any (or several) of the following list"
655
  tags={[
656
  "modality:text",
657
  "modality:image",
 
670
  ]}
671
  />
672
 
 
 
673
  <TagSection
674
  title="Evaluation categories"
675
+ description="Can be any (or several) of the following list"
676
  tags={[
677
  "eval:generation",
678
  "eval:math",
 
691
  ]}
692
  />
693
 
 
 
694
  <TagSection
695
  title="Language"
696
+ description="You can indicate the languages covered by your benchmark like so: language:mylanguage."
697
+ tags={["language:english", "language:french", "language:whatever"]}
698
+ explanations={[
699
+ "",
700
+ "",
701
+ "At the moment, we do not support language codes, please use the language name in English.",
702
+ ]}
703
  />
704
 
 
 
705
  <TagSection
706
  title="Domain"
707
  description="Indicates the specific domain of the leaderboard:"
708
  tags={["domain:financial", "domain:medical", "domain:legal"]}
709
  />
710
+
711
  <Typography
712
  variant="body2"
713
  sx={{
714
+ mt: 3,
715
  color: "text.secondary",
716
  fontSize: "0.875rem",
717
  fontStyle: "italic",
client/src/pages/LeaderboardPage/LeaderboardPage.jsx CHANGED
@@ -1,23 +1,10 @@
1
  import React, { useState, useEffect } from "react";
2
- import {
3
- Box,
4
- CircularProgress,
5
- Stack,
6
- Button,
7
- FormControlLabel,
8
- Switch,
9
- TextField,
10
- InputAdornment,
11
- Typography,
12
- } from "@mui/material";
13
- import SearchIcon from "@mui/icons-material/Search";
14
  import SearchOffIcon from "@mui/icons-material/SearchOff";
15
  import Logo from "../../components/Logo/Logo";
16
  import PageTitle from "../../components/PageTitle/PageTitle";
17
- import PageHeader from "../../components/PageHeader/PageHeader";
18
  import LeaderboardSection from "../../components/LeaderboardSection";
19
  import LeaderboardFilters from "../../components/LeaderboardFilters/LeaderboardFilters";
20
- import { alpha } from "@mui/material/styles";
21
  import API_URLS from "../../config/api";
22
  import {
23
  LeaderboardProvider,
 
1
  import React, { useState, useEffect } from "react";
2
+ import { Box, CircularProgress, Typography } from "@mui/material";
 
 
 
 
 
 
 
 
 
 
 
3
  import SearchOffIcon from "@mui/icons-material/SearchOff";
4
  import Logo from "../../components/Logo/Logo";
5
  import PageTitle from "../../components/PageTitle/PageTitle";
 
6
  import LeaderboardSection from "../../components/LeaderboardSection";
7
  import LeaderboardFilters from "../../components/LeaderboardFilters/LeaderboardFilters";
 
8
  import API_URLS from "../../config/api";
9
  import {
10
  LeaderboardProvider,