evijit HF Staff commited on
Commit
04b4cff
·
1 Parent(s): ddebd57
Files changed (38) hide show
  1. app/api/benchmark-metadata/route.ts +7 -0
  2. app/benchmarks/page.tsx +2 -2
  3. app/developers/[id]/page.tsx +57 -5
  4. app/evals/page.tsx +412 -166
  5. app/models/[id]/page.tsx +9 -4
  6. app/models/page.tsx +88 -19
  7. components/benchmark-detail.tsx +413 -251
  8. components/benchmark-evaluation-card.tsx +189 -166
  9. components/eval-card.tsx +119 -16
  10. components/eval-detail.tsx +780 -62
  11. data/benchmarks/helm_capabilities.json +230 -1
  12. data/benchmarks/helm_classic.json +713 -161
  13. data/benchmarks/helm_lite.json +344 -2
  14. data/benchmarks/helm_mmlu.json +115 -2
  15. data/benchmarks/hfopenllm_v2.json +716 -132
  16. data/survey/eval-schema-fields.json +563 -0
  17. lib/benchmark-metadata-utils.ts +50 -0
  18. lib/benchmark-metadata.ts +98 -0
  19. lib/benchmark-schema.ts +94 -4
  20. lib/dashboard-data-client.ts +5 -0
  21. lib/eval-processing.ts +25 -0
  22. lib/model-data.ts +338 -11
  23. metadata/benchmark_card_BoolQ.json +118 -0
  24. metadata/benchmark_card_CNN_DailyMail.json +104 -0
  25. metadata/benchmark_card_CivilComments.json +109 -0
  26. metadata/benchmark_card_GPQA.json +118 -0
  27. metadata/benchmark_card_GSM8K.json +112 -0
  28. metadata/benchmark_card_HellaSwag.json +115 -0
  29. metadata/benchmark_card_IFEval.json +112 -0
  30. metadata/benchmark_card_LegalBench.json +120 -0
  31. metadata/benchmark_card_MATH_Level_5.json +112 -0
  32. metadata/benchmark_card_MMLU-Pro.json +126 -0
  33. metadata/benchmark_card_MMLU.json +113 -0
  34. metadata/benchmark_card_MUSR.json +124 -0
  35. metadata/benchmark_card_MedQA.json +114 -0
  36. metadata/benchmark_card_Omni-MATH.json +113 -0
  37. metadata/benchmark_card_QuAC.json +114 -0
  38. metadata/benchmark_card_WildBench.json +118 -0
app/api/benchmark-metadata/route.ts ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import { NextResponse } from "next/server"
2
+ import { getAllBenchmarkCards } from "@/lib/benchmark-metadata"
3
+
4
+ export async function GET() {
5
+ const cards = await getAllBenchmarkCards()
6
+ return NextResponse.json(cards)
7
+ }
app/benchmarks/page.tsx CHANGED
@@ -1,5 +1,5 @@
1
  import { redirect } from "next/navigation"
2
 
3
- export default function BenchmarksRedirectPage() {
4
- redirect("/models")
5
  }
 
1
  import { redirect } from "next/navigation"
2
 
3
+ export default function BenchmarksPage() {
4
+ redirect("/evals")
5
  }
app/developers/[id]/page.tsx CHANGED
@@ -2,7 +2,7 @@
2
 
3
  import { useCallback, useEffect, useMemo, useState } from "react"
4
  import { useParams, useRouter } from "next/navigation"
5
- import { ArrowLeft, ArrowUpDown, Search } from "lucide-react"
6
 
7
  import { BenchmarkEvaluationCard, type BenchmarkEvaluationCardData } from "@/components/benchmark-evaluation-card"
8
  import { ListPagination } from "@/components/list-pagination"
@@ -11,7 +11,9 @@ import { PageHeader } from "@/components/page-header"
11
  import { Button } from "@/components/ui/button"
12
  import { Input } from "@/components/ui/input"
13
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
14
- import { fetchDeveloperSummary } from "@/lib/dashboard-data-client"
 
 
15
 
16
  const PAGE_SIZE = 40
17
 
@@ -20,6 +22,7 @@ export default function DeveloperDetailPage() {
20
  const router = useRouter()
21
  const [developer, setDeveloper] = useState<string>("")
22
  const [models, setModels] = useState<BenchmarkEvaluationCardData[]>([])
 
23
  const [loading, setLoading] = useState(true)
24
  const [error, setError] = useState<string | null>(null)
25
  const [searchQuery, setSearchQuery] = useState("")
@@ -33,10 +36,14 @@ export default function DeveloperDetailPage() {
33
  }, [router])
34
 
35
  useEffect(() => {
36
- fetchDeveloperSummary(routeId)
37
- .then((summary) => {
 
 
 
38
  setDeveloper(summary.developer)
39
  setModels(summary.models)
 
40
  })
41
  .catch((err) => {
42
  console.error(err)
@@ -45,6 +52,24 @@ export default function DeveloperDetailPage() {
45
  .finally(() => setLoading(false))
46
  }, [routeId])
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  const filteredModels = useMemo(() => {
49
  const query = searchQuery.trim().toLowerCase()
50
  const filtered = query
@@ -125,13 +150,16 @@ export default function DeveloperDetailPage() {
125
  <PageHeader
126
  eyebrow="Developer"
127
  title={developer}
128
- description="Model cards loaded from this developer’s index and detail files, without scanning the entire corpus."
129
  metaItems={[
130
  { label: "Models", value: models.length.toString() },
131
  {
132
  label: "Reported Results",
133
  value: models.reduce((sum, model) => sum + model.evaluations_count, 0).toString(),
134
  },
 
 
 
135
  ]}
136
  >
137
  <Button variant="outline" onClick={handleBack}>
@@ -140,6 +168,29 @@ export default function DeveloperDetailPage() {
140
  </Button>
141
  </PageHeader>
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  <div className="mb-8 mt-8 flex flex-col gap-4 border-b border-border/50 pb-6 sm:flex-row">
144
  <div className="relative w-full sm:max-w-sm">
145
  <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
@@ -173,6 +224,7 @@ export default function DeveloperDetailPage() {
173
  <BenchmarkEvaluationCard
174
  key={model.id}
175
  data={model}
 
176
  delayMs={Math.min(index * 45, 240)}
177
  />
178
  ))}
 
2
 
3
  import { useCallback, useEffect, useMemo, useState } from "react"
4
  import { useParams, useRouter } from "next/navigation"
5
+ import { ArrowLeft, ArrowUpDown, Search, Tag } from "lucide-react"
6
 
7
  import { BenchmarkEvaluationCard, type BenchmarkEvaluationCardData } from "@/components/benchmark-evaluation-card"
8
  import { ListPagination } from "@/components/list-pagination"
 
11
  import { Button } from "@/components/ui/button"
12
  import { Input } from "@/components/ui/input"
13
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
14
+ import type { BenchmarkCard } from "@/lib/benchmark-schema"
15
+ import { lookupBenchmarkCard } from "@/lib/benchmark-metadata-utils"
16
+ import { fetchDeveloperSummary, fetchBenchmarkMetadata } from "@/lib/dashboard-data-client"
17
 
18
  const PAGE_SIZE = 40
19
 
 
22
  const router = useRouter()
23
  const [developer, setDeveloper] = useState<string>("")
24
  const [models, setModels] = useState<BenchmarkEvaluationCardData[]>([])
25
+ const [benchmarkCards, setBenchmarkCards] = useState<Record<string, BenchmarkCard>>({})
26
  const [loading, setLoading] = useState(true)
27
  const [error, setError] = useState<string | null>(null)
28
  const [searchQuery, setSearchQuery] = useState("")
 
36
  }, [router])
37
 
38
  useEffect(() => {
39
+ Promise.all([
40
+ fetchDeveloperSummary(routeId),
41
+ fetchBenchmarkMetadata(),
42
+ ])
43
+ .then(([summary, cards]) => {
44
  setDeveloper(summary.developer)
45
  setModels(summary.models)
46
+ setBenchmarkCards(cards)
47
  })
48
  .catch((err) => {
49
  console.error(err)
 
52
  .finally(() => setLoading(false))
53
  }, [routeId])
54
 
55
+ // Collect all unique domains from benchmarks this developer's models are evaluated on
56
+ const domainCoverage = useMemo(() => {
57
+ const domainMap = new Map<string, Set<string>>() // domain → set of benchmark names
58
+ for (const model of models) {
59
+ for (const { benchmark } of model.top_scores) {
60
+ const card = lookupBenchmarkCard(benchmarkCards, benchmark)
61
+ for (const domain of card?.benchmark_details?.domains ?? []) {
62
+ const existing = domainMap.get(domain) ?? new Set()
63
+ existing.add(benchmark)
64
+ domainMap.set(domain, existing)
65
+ }
66
+ }
67
+ }
68
+ return Array.from(domainMap.entries())
69
+ .map(([domain, benchmarks]) => ({ domain, count: benchmarks.size }))
70
+ .sort((a, b) => b.count - a.count)
71
+ }, [models, benchmarkCards])
72
+
73
  const filteredModels = useMemo(() => {
74
  const query = searchQuery.trim().toLowerCase()
75
  const filtered = query
 
150
  <PageHeader
151
  eyebrow="Developer"
152
  title={developer}
153
+ description={`Evaluation coverage across ${models.length} model${models.length !== 1 ? "s" : ""} from this developer, including benchmark domain coverage where metadata is available.`}
154
  metaItems={[
155
  { label: "Models", value: models.length.toString() },
156
  {
157
  label: "Reported Results",
158
  value: models.reduce((sum, model) => sum + model.evaluations_count, 0).toString(),
159
  },
160
+ ...(domainCoverage.length > 0
161
+ ? [{ label: "Domains covered", value: domainCoverage.length.toString() }]
162
+ : []),
163
  ]}
164
  >
165
  <Button variant="outline" onClick={handleBack}>
 
168
  </Button>
169
  </PageHeader>
170
 
171
+ {/* Domain coverage strip */}
172
+ {domainCoverage.length > 0 && (
173
+ <div className="mb-4 mt-6 rounded-[1.5rem] border border-border/70 bg-muted/10 p-4">
174
+ <div className="mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
175
+ <Tag className="h-3.5 w-3.5" />
176
+ Benchmark domain coverage
177
+ </div>
178
+ <div className="flex flex-wrap gap-2">
179
+ {domainCoverage.map(({ domain, count }) => (
180
+ <span
181
+ key={domain}
182
+ className="inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-background px-3 py-1 text-xs font-medium capitalize"
183
+ >
184
+ {domain}
185
+ <span className="rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground">
186
+ {count}
187
+ </span>
188
+ </span>
189
+ ))}
190
+ </div>
191
+ </div>
192
+ )}
193
+
194
  <div className="mb-8 mt-8 flex flex-col gap-4 border-b border-border/50 pb-6 sm:flex-row">
195
  <div className="relative w-full sm:max-w-sm">
196
  <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
 
224
  <BenchmarkEvaluationCard
225
  key={model.id}
226
  data={model}
227
+ benchmarkCards={benchmarkCards}
228
  delayMs={Math.min(index * 45, 240)}
229
  />
230
  ))}
app/evals/page.tsx CHANGED
@@ -1,111 +1,256 @@
1
  "use client"
2
 
3
- import { useState, useMemo, useEffect } from "react"
 
 
 
 
4
  import { useAudienceMode } from "@/components/audience-mode-provider"
5
- import { Input } from "@/components/ui/input"
6
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
7
- import { ArrowUpDown, Search } from "lucide-react"
8
  import { Navigation } from "@/components/navigation"
9
  import { PageHeader } from "@/components/page-header"
10
- import { EvalCard } from "@/components/eval-card"
11
- import { ListPagination } from "@/components/list-pagination"
12
  import type { BenchmarkEvalListItem } from "@/lib/eval-processing"
13
- import { fetchEvalList } from "@/lib/dashboard-data-client"
 
 
 
14
 
15
  const PAGE_SIZE = 40
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  export default function EvalsPage() {
18
  const { mode } = useAudienceMode()
 
 
19
  const [summaries, setSummaries] = useState<BenchmarkEvalListItem[]>([])
 
20
  const [loading, setLoading] = useState(true)
21
  const [totalModels, setTotalModels] = useState(0)
22
- const [sortBy, setSortBy] = useState<"name" | "models" | "score">("name")
23
- const [groupByComposite, setGroupByComposite] = useState(true)
24
  const [searchQuery, setSearchQuery] = useState("")
 
 
 
25
  const [page, setPage] = useState(1)
26
 
27
  useEffect(() => {
28
- fetchEvalList()
29
- .then((data) => {
30
  setSummaries(data.evals)
31
  setTotalModels(data.totalModels)
 
32
  })
33
  .catch(console.error)
34
  .finally(() => setLoading(false))
35
  }, [])
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  const filtered = useMemo(() => {
38
  const query = searchQuery.trim().toLowerCase()
39
- let list = [...summaries]
 
 
40
 
41
  if (query) {
42
  list = list.filter((summary) => {
43
  const haystacks = [
44
- summary.composite_benchmark_name,
45
  summary.evaluation_name,
 
46
  summary.metric_config.evaluation_description,
47
- summary.latest_source_name,
48
- summary.factsheet?.purpose,
49
- summary.factsheet?.principles_tested,
50
- ...summary.evaluator_names,
51
- ...summary.source_types,
52
  ]
53
 
54
  return haystacks.some((value) => value?.toLowerCase().includes(query))
55
  })
56
  }
57
 
58
- switch (sortBy) {
59
- case "name":
60
- list.sort((a, b) => a.evaluation_name.localeCompare(b.evaluation_name))
61
- break
62
- case "models":
63
- list.sort((a, b) => b.models_count - a.models_count)
64
- break
65
- case "score":
66
- list.sort((a, b) => b.avg_score_norm - a.avg_score_norm)
67
- break
68
  }
69
- return list
70
- }, [searchQuery, summaries, sortBy])
71
-
72
- const groupedSummaries = useMemo(() => {
73
- const groups = new Map<
74
- string,
75
- {
76
- key: string
77
- name: string
78
- items: BenchmarkEvalListItem[]
79
- }
80
- >()
81
 
82
- for (const summary of filtered) {
83
- const existing = groups.get(summary.composite_benchmark_key) ?? {
84
- key: summary.composite_benchmark_key,
85
- name: summary.composite_benchmark_name,
86
- items: [],
87
- }
88
- existing.items.push(summary)
89
- groups.set(summary.composite_benchmark_key, existing)
90
  }
91
 
92
- return Array.from(groups.values()).sort((a, b) => a.name.localeCompare(b.name))
93
- }, [filtered])
 
94
 
95
  useEffect(() => {
96
  setPage(1)
97
- }, [groupByComposite, sortBy, searchQuery])
98
 
99
  const pagedSummaries = useMemo(
100
  () => filtered.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE),
101
  [filtered, page]
102
  )
103
 
104
- const pagedGroups = useMemo(
105
- () => groupedSummaries.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE),
106
- [groupedSummaries, page]
107
- )
108
-
109
  if (loading) {
110
  return (
111
  <div className="min-h-screen bg-background">
@@ -124,133 +269,234 @@ export default function EvalsPage() {
124
  <Navigation />
125
  <PageHeader
126
  eyebrow="Evaluations"
127
- title="Explore Evaluations"
128
  description={
129
  mode === "research"
130
- ? "Compare benchmark behavior, methodological framing, and performance spread, or group single benchmarks under their composite leaderboards."
131
- : "Review evaluation reporting with emphasis on coverage, evidence, and accountable documentation, including how single benchmarks roll up into composite leaderboards."
132
- }
133
- metaItems={
134
- groupByComposite
135
- ? [
136
- { label: "Composite Benchmarks", value: groupedSummaries.length.toString() },
137
- { label: "Single Benchmarks", value: filtered.length.toString() },
138
- { label: "Models", value: totalModels.toString() },
139
- { label: "View", value: mode === "research" ? "Research" : "Policy" },
140
- ]
141
- : [
142
- { label: "Single Benchmarks", value: summaries.length.toString() },
143
- { label: "Models", value: totalModels.toString() },
144
- { label: "View", value: mode === "research" ? "Research" : "Policy" },
145
- ]
146
  }
 
 
 
 
 
 
 
 
147
  />
 
148
  <main className="container mx-auto px-4 py-8">
149
- <div className="mb-8 flex flex-col gap-3 border-b border-border/50 pb-6 sm:flex-row sm:flex-wrap sm:items-center">
150
- <div className="relative w-full sm:max-w-sm">
151
- <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
152
- <Input
153
- value={searchQuery}
154
- onChange={(event) => setSearchQuery(event.target.value)}
155
- placeholder={
156
- groupByComposite
157
- ? "Search composite benchmarks, single benchmarks, purpose, or source"
158
- : "Search single benchmarks, purpose, or source"
159
- }
160
- className="pl-9"
161
- />
162
- </div>
163
- <div className="inline-flex w-fit rounded-full border bg-muted/20 p-1">
164
- <button
165
- type="button"
166
- onClick={() => setGroupByComposite(false)}
167
- className={`inline-flex items-center rounded-full px-3 py-1.5 text-sm font-medium transition-colors ${
168
- !groupByComposite
169
- ? "bg-background text-foreground shadow-sm"
170
- : "text-muted-foreground hover:text-foreground"
171
- }`}
172
- >
173
- Flat list
174
- </button>
175
- <button
176
- type="button"
177
- onClick={() => setGroupByComposite(true)}
178
- className={`inline-flex items-center rounded-full px-3 py-1.5 text-sm font-medium transition-colors ${
179
- groupByComposite
180
- ? "bg-background text-foreground shadow-sm"
181
- : "text-muted-foreground hover:text-foreground"
182
- }`}
183
- >
184
- Group by composite benchmark
185
- </button>
186
  </div>
187
- <Select value={sortBy} onValueChange={v => setSortBy(v as any)}>
188
- <SelectTrigger className="w-[200px]">
189
- <ArrowUpDown className="h-4 w-4 mr-2" />
190
- <SelectValue placeholder="Sort" />
191
- </SelectTrigger>
192
- <SelectContent>
193
- <SelectItem value="name">Single Benchmark (A-Z)</SelectItem>
194
- <SelectItem value="models">Most Models</SelectItem>
195
- <SelectItem value="score">Highest Avg Score</SelectItem>
196
- </SelectContent>
197
- </Select>
198
- </div>
199
 
200
- {groupByComposite ? (
201
- <div className="space-y-8">
202
- {pagedGroups.map((group, groupIndex) => (
203
- <section
204
- key={group.key}
205
- className="rounded-[1.5rem] border border-border/70 bg-muted/10 p-5"
 
 
 
 
 
 
 
 
206
  >
207
- <div className="mb-4 flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between">
208
- <div>
209
- <div className="text-[11px] font-semibold uppercase tracking-[0.22em] text-muted-foreground">
210
- Composite Benchmark
211
- </div>
212
- <h2 className="mt-1 text-xl font-bold tracking-tight">{group.name}</h2>
213
- <p className="mt-1 text-sm text-muted-foreground">
214
- {group.items.length} single benchmark{group.items.length !== 1 ? "s" : ""} grouped under this composite benchmark.
215
- </p>
216
- </div>
217
- </div>
218
-
219
- <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
220
- {group.items.map((summary, index) => (
221
- <EvalCard
222
- key={summary.evaluation_id}
223
- summary={summary}
224
- delayMs={Math.min((groupIndex * 2 + index) * 35, 240)}
225
- />
226
- ))}
227
- </div>
228
- </section>
229
- ))}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  </div>
231
  ) : (
232
- <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
233
- {pagedSummaries.map((summary, index) => (
234
- <EvalCard
235
- key={summary.evaluation_id}
236
- summary={summary}
237
- delayMs={Math.min(index * 45, 240)}
238
- />
239
- ))}
240
- </div>
241
- )}
 
 
 
 
 
 
242
 
243
- {(groupByComposite ? groupedSummaries.length === 0 : filtered.length === 0) && (
244
- <div className="text-center py-12 text-muted-foreground">
245
- No evaluations found.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  </div>
247
  )}
248
 
249
  <ListPagination
250
  page={page}
251
  pageSize={PAGE_SIZE}
252
- totalItems={groupByComposite ? groupedSummaries.length : filtered.length}
253
- itemLabel={groupByComposite ? "composite benchmarks" : "single benchmarks"}
254
  onPageChange={setPage}
255
  />
256
  </main>
 
1
  "use client"
2
 
3
+ import { useEffect, useMemo, useState } from "react"
4
+ import Link from "next/link"
5
+ import { useSearchParams } from "next/navigation"
6
+ import { Search, X } from "lucide-react"
7
+
8
  import { useAudienceMode } from "@/components/audience-mode-provider"
9
+ import { ListPagination } from "@/components/list-pagination"
 
 
10
  import { Navigation } from "@/components/navigation"
11
  import { PageHeader } from "@/components/page-header"
12
+ import { Input } from "@/components/ui/input"
13
+ import type { BenchmarkCard, CategoryType } from "@/lib/benchmark-schema"
14
  import type { BenchmarkEvalListItem } from "@/lib/eval-processing"
15
+ import { fetchBenchmarkMetadata, fetchEvalList } from "@/lib/dashboard-data-client"
16
+ import { getCategoryColor } from "@/lib/benchmark-schema"
17
+ import { lookupBenchmarkCard, normalizeBenchmarkKey } from "@/lib/benchmark-metadata-utils"
18
+ import { cn } from "@/lib/utils"
19
 
20
  const PAGE_SIZE = 40
21
 
22
+ function shortenLicense(license: string): string {
23
+ if (!license || license === "Not specified") return ""
24
+ if (license.toLowerCase().includes("creative commons attribution 4")) return "CC BY 4.0"
25
+ if (license.toLowerCase().includes("creative commons zero")) return "CC0"
26
+ if (license.toLowerCase().includes("apache license 2") || license.toLowerCase().includes("apache 2")) return "Apache 2.0"
27
+ if (license.toLowerCase().includes("mit license")) return "MIT"
28
+ if (license.toLowerCase().includes("cc-by-sa")) return "CC BY-SA"
29
+ if (license.length > 24) return `${license.slice(0, 22)}…`
30
+ return license
31
+ }
32
+
33
+ const LICENSE_COLORS: Record<string, string> = {
34
+ mit: "bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200",
35
+ apache: "bg-sky-100 text-sky-800 border-sky-200 dark:bg-sky-950/40 dark:text-sky-200",
36
+ "cc by": "bg-violet-100 text-violet-800 border-violet-200 dark:bg-violet-950/40 dark:text-violet-200",
37
+ cc0: "bg-teal-100 text-teal-800 border-teal-200 dark:bg-teal-950/40 dark:text-teal-200",
38
+ "cc-by-sa": "bg-indigo-100 text-indigo-800 border-indigo-200 dark:bg-indigo-950/40 dark:text-indigo-200",
39
+ }
40
+
41
+ function licenseBadgeClass(license: string): string {
42
+ const normalized = license.toLowerCase()
43
+ for (const [key, className] of Object.entries(LICENSE_COLORS)) {
44
+ if (normalized.includes(key)) return className
45
+ }
46
+ return "bg-muted text-muted-foreground border-border"
47
+ }
48
+
49
+ function slugifyAggregateId(value: string) {
50
+ return `aggregate__${value.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_|_$/g, "")}`
51
+ }
52
+
53
  export default function EvalsPage() {
54
  const { mode } = useAudienceMode()
55
+ const searchParams = useSearchParams()
56
+
57
  const [summaries, setSummaries] = useState<BenchmarkEvalListItem[]>([])
58
+ const [benchmarkCards, setBenchmarkCards] = useState<Record<string, BenchmarkCard>>({})
59
  const [loading, setLoading] = useState(true)
60
  const [totalModels, setTotalModels] = useState(0)
 
 
61
  const [searchQuery, setSearchQuery] = useState("")
62
+ const [selectedDomain, setSelectedDomain] = useState<string | null>(null)
63
+ const [selectedCategory, setSelectedCategory] = useState<string | null>(null)
64
+ const [showWithoutMetadata, setShowWithoutMetadata] = useState(false)
65
  const [page, setPage] = useState(1)
66
 
67
  useEffect(() => {
68
+ Promise.all([fetchEvalList(), fetchBenchmarkMetadata()])
69
+ .then(([data, cards]) => {
70
  setSummaries(data.evals)
71
  setTotalModels(data.totalModels)
72
+ setBenchmarkCards(cards)
73
  })
74
  .catch(console.error)
75
  .finally(() => setLoading(false))
76
  }, [])
77
 
78
+ useEffect(() => {
79
+ const incomingSearch = searchParams.get("search") ?? ""
80
+ if (incomingSearch) {
81
+ setSearchQuery(incomingSearch)
82
+ }
83
+ }, [searchParams])
84
+
85
+ const summariesWithCards = useMemo(() => {
86
+ return summaries.map((summary) => {
87
+ if (summary.benchmark_card) {
88
+ return summary
89
+ }
90
+
91
+ const fallbackCard =
92
+ lookupBenchmarkCard(benchmarkCards, summary.evaluation_name) ??
93
+ lookupBenchmarkCard(benchmarkCards, summary.composite_benchmark_name) ??
94
+ lookupBenchmarkCard(benchmarkCards, summary.composite_benchmark_key)
95
+
96
+ return fallbackCard ? { ...summary, benchmark_card: fallbackCard } : summary
97
+ })
98
+ }, [benchmarkCards, summaries])
99
+
100
+ const aggregatedSummaries = useMemo(() => {
101
+ const grouped = new Map<string, BenchmarkEvalListItem[]>()
102
+ const passthrough: BenchmarkEvalListItem[] = []
103
+
104
+ for (const summary of summariesWithCards) {
105
+ const cardName = summary.benchmark_card?.benchmark_details?.name
106
+
107
+ if (!cardName) {
108
+ passthrough.push(summary)
109
+ continue
110
+ }
111
+
112
+ const groupKey = normalizeBenchmarkKey(cardName)
113
+ const existing = grouped.get(groupKey) ?? []
114
+ existing.push(summary)
115
+ grouped.set(groupKey, existing)
116
+ }
117
+
118
+ const merged = Array.from(grouped.entries()).map(([groupKey, items]) => {
119
+ if (items.length === 1) {
120
+ return items[0]
121
+ }
122
+
123
+ const first = items[0]
124
+ const aggregateSources = Array.from(
125
+ new Map(
126
+ items.map((item) => [
127
+ item.evaluation_id,
128
+ {
129
+ evaluation_id: item.evaluation_id,
130
+ composite_benchmark_key: item.composite_benchmark_key,
131
+ composite_benchmark_name: item.composite_benchmark_name,
132
+ models_count: item.models_count,
133
+ avg_score_norm: item.avg_score_norm,
134
+ },
135
+ ])
136
+ ).values()
137
+ ).sort((a, b) => a.composite_benchmark_name.localeCompare(b.composite_benchmark_name))
138
+
139
+ const dominantCategory =
140
+ Object.entries(
141
+ items.reduce<Record<string, number>>((counts, item) => {
142
+ counts[item.category] = (counts[item.category] ?? 0) + 1
143
+ return counts
144
+ }, {})
145
+ ).sort((a, b) => b[1] - a[1])[0]?.[0] ?? first.category
146
+
147
+ return {
148
+ ...first,
149
+ evaluation_name: first.benchmark_card?.benchmark_details?.name ?? first.evaluation_name,
150
+ evaluation_id: slugifyAggregateId(groupKey),
151
+ composite_benchmark_key: aggregateSources.length === 1 ? aggregateSources[0].composite_benchmark_key : "multiple",
152
+ composite_benchmark_name:
153
+ aggregateSources.length === 1
154
+ ? aggregateSources[0].composite_benchmark_name
155
+ : `${aggregateSources.length} composite benchmarks`,
156
+ category: dominantCategory as CategoryType,
157
+ models_count: Math.max(...items.map((item) => item.models_count)),
158
+ evaluator_names: Array.from(new Set(items.flatMap((item) => item.evaluator_names))).sort((a, b) => a.localeCompare(b)),
159
+ source_types: Array.from(new Set(items.flatMap((item) => item.source_types))).sort((a, b) => a.localeCompare(b)),
160
+ latest_source_name:
161
+ aggregateSources.length === 1 ? aggregateSources[0].composite_benchmark_name : "Multiple sources",
162
+ third_party_ratio:
163
+ items.reduce((sum, item) => sum + item.third_party_ratio, 0) / items.length,
164
+ missing_generation_config_count: items.reduce(
165
+ (sum, item) => sum + item.missing_generation_config_count,
166
+ 0
167
+ ),
168
+ avg_score:
169
+ items.reduce((sum, item) => sum + item.avg_score_norm, 0) / items.length,
170
+ avg_score_norm:
171
+ items.reduce((sum, item) => sum + item.avg_score_norm, 0) / items.length,
172
+ best_model: null,
173
+ worst_model: null,
174
+ is_aggregated: true,
175
+ aggregate_sources: aggregateSources,
176
+ }
177
+ })
178
+
179
+ return [...merged, ...passthrough]
180
+ }, [summariesWithCards])
181
+
182
+ const allDomains = useMemo(() => {
183
+ const domainSet = new Set<string>()
184
+ for (const summary of aggregatedSummaries.filter((entry) => entry.benchmark_card)) {
185
+ for (const domain of summary.benchmark_card?.benchmark_details?.domains ?? []) {
186
+ domainSet.add(domain)
187
+ }
188
+ }
189
+ return Array.from(domainSet).sort((a, b) => a.localeCompare(b))
190
+ }, [aggregatedSummaries])
191
+
192
+ const allCategories = useMemo(() => {
193
+ const categorySet = new Set<string>()
194
+ for (const summary of aggregatedSummaries.filter((entry) => entry.benchmark_card)) {
195
+ if (summary.category) {
196
+ categorySet.add(summary.category)
197
+ }
198
+ }
199
+ return Array.from(categorySet).sort((a, b) => a.localeCompare(b))
200
+ }, [aggregatedSummaries])
201
+
202
+ const metadataRichCount = useMemo(
203
+ () => aggregatedSummaries.filter((summary) => summary.benchmark_card).length,
204
+ [aggregatedSummaries]
205
+ )
206
+
207
+ const metadataPoorCount = aggregatedSummaries.length - metadataRichCount
208
+
209
  const filtered = useMemo(() => {
210
  const query = searchQuery.trim().toLowerCase()
211
+ let list = showWithoutMetadata
212
+ ? [...aggregatedSummaries]
213
+ : aggregatedSummaries.filter((summary) => summary.benchmark_card)
214
 
215
  if (query) {
216
  list = list.filter((summary) => {
217
  const haystacks = [
 
218
  summary.evaluation_name,
219
+ summary.composite_benchmark_name,
220
  summary.metric_config.evaluation_description,
221
+ summary.benchmark_card?.benchmark_details?.overview,
222
+ ...(summary.benchmark_card?.benchmark_details?.domains ?? []),
 
 
 
223
  ]
224
 
225
  return haystacks.some((value) => value?.toLowerCase().includes(query))
226
  })
227
  }
228
 
229
+ if (selectedDomain) {
230
+ list = list.filter((summary) =>
231
+ (summary.benchmark_card?.benchmark_details?.domains ?? []).some(
232
+ (domain) => domain.toLowerCase() === selectedDomain.toLowerCase()
233
+ )
234
+ )
 
 
 
 
235
  }
 
 
 
 
 
 
 
 
 
 
 
 
236
 
237
+ if (selectedCategory) {
238
+ list = list.filter((summary) => summary.category === selectedCategory)
 
 
 
 
 
 
239
  }
240
 
241
+ list.sort((a, b) => a.evaluation_name.localeCompare(b.evaluation_name))
242
+ return list
243
+ }, [aggregatedSummaries, searchQuery, selectedCategory, selectedDomain, showWithoutMetadata])
244
 
245
  useEffect(() => {
246
  setPage(1)
247
+ }, [searchQuery, selectedCategory, selectedDomain, showWithoutMetadata])
248
 
249
  const pagedSummaries = useMemo(
250
  () => filtered.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE),
251
  [filtered, page]
252
  )
253
 
 
 
 
 
 
254
  if (loading) {
255
  return (
256
  <div className="min-h-screen bg-background">
 
269
  <Navigation />
270
  <PageHeader
271
  eyebrow="Evaluations"
272
+ title="Browse Evaluations"
273
  description={
274
  mode === "research"
275
+ ? "Scan single-benchmark evaluations with the benchmark context first, then open the detail page when you need methodology, provenance, or ranking depth."
276
+ : "Scan single-benchmark evaluations with the benchmark context first, then open the detail page when you need accountability, source, or reporting detail."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
277
  }
278
+ metaItems={[
279
+ { label: "Evaluations", value: filtered.length.toString() },
280
+ { label: "Rich cards", value: metadataRichCount.toString() },
281
+ { label: "Models", value: totalModels.toString() },
282
+ { label: "Domains", value: allDomains.length.toString() },
283
+ ...(selectedDomain ? [{ label: "Domain filter", value: selectedDomain }] : []),
284
+ ...(selectedCategory ? [{ label: "Category filter", value: selectedCategory }] : []),
285
+ ]}
286
  />
287
+
288
  <main className="container mx-auto px-4 py-8">
289
+ <div className="mb-8 flex flex-col gap-3 border-b border-border/50 pb-6">
290
+ <div className="flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center">
291
+ <div className="relative w-full sm:max-w-sm">
292
+ <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
293
+ <Input
294
+ value={searchQuery}
295
+ onChange={(event) => setSearchQuery(event.target.value)}
296
+ placeholder="Search by name, domain, or overview"
297
+ className="pl-9"
298
+ />
299
+ </div>
300
+ <label className="inline-flex w-fit items-center gap-2 rounded-full border border-border/70 bg-muted/20 px-3 py-2 text-sm text-muted-foreground">
301
+ <input
302
+ type="checkbox"
303
+ checked={showWithoutMetadata}
304
+ onChange={(event) => setShowWithoutMetadata(event.target.checked)}
305
+ className="h-4 w-4 rounded border-border text-primary focus:ring-primary"
306
+ />
307
+ <span>Show benchmarks that don't have rich metadata</span>
308
+ {metadataPoorCount > 0 ? (
309
+ <span className="rounded-full border border-border/60 bg-background px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground">
310
+ +{metadataPoorCount}
311
+ </span>
312
+ ) : null}
313
+ </label>
 
 
 
 
 
 
 
 
 
 
 
 
314
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
315
 
316
+ {allDomains.length > 0 && (
317
+ <div className="flex flex-wrap items-center gap-1.5">
318
+ <span className="mr-1 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
319
+ Domain
320
+ </span>
321
+ <button
322
+ type="button"
323
+ onClick={() => setSelectedDomain(null)}
324
+ className={cn(
325
+ "rounded-full border px-3 py-1 text-xs font-medium transition-colors",
326
+ selectedDomain === null
327
+ ? "border-primary bg-primary text-primary-foreground"
328
+ : "border-border/60 bg-background text-muted-foreground hover:text-foreground"
329
+ )}
330
  >
331
+ All
332
+ </button>
333
+ {allDomains.map((domain) => (
334
+ <button
335
+ key={domain}
336
+ type="button"
337
+ onClick={() => setSelectedDomain(selectedDomain === domain ? null : domain)}
338
+ className={cn(
339
+ "rounded-full border px-3 py-1 text-xs font-medium capitalize transition-colors",
340
+ selectedDomain === domain
341
+ ? "border-primary bg-primary text-primary-foreground"
342
+ : "border-border/60 bg-background text-muted-foreground hover:text-foreground"
343
+ )}
344
+ >
345
+ {domain}
346
+ </button>
347
+ ))}
348
+ {selectedDomain && (
349
+ <button
350
+ type="button"
351
+ onClick={() => setSelectedDomain(null)}
352
+ className="ml-1 flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground"
353
+ >
354
+ <X className="h-3 w-3" />
355
+ Clear
356
+ </button>
357
+ )}
358
+ </div>
359
+ )}
360
+
361
+ {allCategories.length > 0 && (
362
+ <div className="flex flex-wrap items-center gap-1.5">
363
+ <span className="mr-1 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
364
+ Category
365
+ </span>
366
+ <button
367
+ type="button"
368
+ onClick={() => setSelectedCategory(null)}
369
+ className={cn(
370
+ "rounded-full border px-3 py-1 text-xs font-medium transition-colors",
371
+ selectedCategory === null
372
+ ? "border-primary bg-primary text-primary-foreground"
373
+ : "border-border/60 bg-background text-muted-foreground hover:text-foreground"
374
+ )}
375
+ >
376
+ All
377
+ </button>
378
+ {allCategories.map((category) => (
379
+ <button
380
+ key={category}
381
+ type="button"
382
+ onClick={() => setSelectedCategory(selectedCategory === category ? null : category)}
383
+ className={cn(
384
+ "rounded-full border px-3 py-1 text-xs font-medium transition-colors",
385
+ selectedCategory === category
386
+ ? `${getCategoryColor(category as CategoryType)} border-2`
387
+ : "border-border/60 bg-background text-muted-foreground hover:text-foreground"
388
+ )}
389
+ >
390
+ {category}
391
+ </button>
392
+ ))}
393
+ {selectedCategory && (
394
+ <button
395
+ type="button"
396
+ onClick={() => setSelectedCategory(null)}
397
+ className="ml-1 flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground"
398
+ >
399
+ <X className="h-3 w-3" />
400
+ Clear
401
+ </button>
402
+ )}
403
+ </div>
404
+ )}
405
+ </div>
406
+
407
+ {filtered.length === 0 ? (
408
+ <div className="py-12 text-center text-muted-foreground">
409
+ No evaluations found.
410
  </div>
411
  ) : (
412
+ <div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
413
+ {pagedSummaries.map((summary) => {
414
+ const card = summary.benchmark_card
415
+ const title = card?.benchmark_details?.name ?? summary.evaluation_name
416
+ const overview =
417
+ card?.benchmark_details?.overview ?? summary.metric_config.evaluation_description
418
+ const domains = card?.benchmark_details?.domains ?? []
419
+ const dataType = card?.benchmark_details?.data_type ?? ""
420
+ const license = card?.ethical_and_legal_considerations?.data_licensing ?? ""
421
+ const shortLicense = shortenLicense(license)
422
+ const showCompositeLabel =
423
+ summary.composite_benchmark_name &&
424
+ summary.composite_benchmark_name.toLowerCase() !== title.toLowerCase()
425
+ const compositeLabel = summary.is_aggregated
426
+ ? summary.aggregate_sources?.map((source) => source.composite_benchmark_name).join(", ")
427
+ : summary.composite_benchmark_name
428
 
429
+ return (
430
+ <Link
431
+ key={summary.evaluation_id}
432
+ href={`/evals/${summary.evaluation_id}`}
433
+ className="group flex flex-col rounded-[1.75rem] border border-border/70 bg-card p-5 shadow-[0_10px_30px_-22px_rgba(15,23,42,0.35)] transition-all hover:-translate-y-0.5 hover:shadow-[0_18px_40px_-24px_rgba(15,23,42,0.45)] motion-academic-enter motion-academic-surface motion-academic-hover"
434
+ >
435
+ <div className="mb-4 flex items-start justify-between gap-3">
436
+ <div className="text-[10px] font-semibold uppercase tracking-[0.28em] text-muted-foreground">
437
+ {card ? "Benchmark" : "Benchmark without rich metadata"}
438
+ </div>
439
+ <div className="flex flex-wrap justify-end gap-1.5">
440
+ {dataType && (
441
+ <span className="rounded-full border border-border/60 bg-muted/40 px-2.5 py-0.5 text-[10px] font-medium text-muted-foreground">
442
+ {dataType}
443
+ </span>
444
+ )}
445
+ {shortLicense && (
446
+ <span className={`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold ${licenseBadgeClass(license)}`}>
447
+ {shortLicense}
448
+ </span>
449
+ )}
450
+ <span className="rounded-full border border-border/60 bg-background px-2.5 py-0.5 text-[10px] font-semibold text-muted-foreground">
451
+ {summary.models_count.toLocaleString()} models
452
+ </span>
453
+ </div>
454
+ </div>
455
+
456
+ <h3 className="mb-2 text-base font-bold tracking-tight transition-colors group-hover:text-primary sm:text-lg">
457
+ {title}
458
+ </h3>
459
+
460
+ {showCompositeLabel && compositeLabel && (
461
+ <div className="mb-2 text-xs font-medium uppercase tracking-[0.18em] text-muted-foreground">
462
+ {compositeLabel}
463
+ </div>
464
+ )}
465
+
466
+ {overview && (
467
+ <p className="mb-4 flex-1 text-sm leading-6 text-muted-foreground line-clamp-4">
468
+ {overview}
469
+ </p>
470
+ )}
471
+
472
+ {domains.length > 0 && (
473
+ <div className="mt-auto flex flex-wrap gap-2 pt-1">
474
+ {domains.slice(0, 5).map((domain) => (
475
+ <span
476
+ key={domain}
477
+ className="rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-[11px] font-medium capitalize text-muted-foreground"
478
+ >
479
+ {domain}
480
+ </span>
481
+ ))}
482
+ {domains.length > 5 && (
483
+ <span className="rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-[11px] font-medium text-muted-foreground">
484
+ +{domains.length - 5}
485
+ </span>
486
+ )}
487
+ </div>
488
+ )}
489
+ </Link>
490
+ )
491
+ })}
492
  </div>
493
  )}
494
 
495
  <ListPagination
496
  page={page}
497
  pageSize={PAGE_SIZE}
498
+ totalItems={filtered.length}
499
+ itemLabel="evaluations"
500
  onPageChange={setPage}
501
  />
502
  </main>
app/models/[id]/page.tsx CHANGED
@@ -6,8 +6,8 @@ import { Button } from "@/components/ui/button"
6
  import { ArrowLeft } from "lucide-react"
7
  import { Navigation } from "@/components/navigation"
8
  import { BenchmarkDetail } from "@/components/benchmark-detail"
9
- import type { ModelEvaluationSummary } from "@/lib/eval-processing"
10
- import { fetchModelSummary } from "@/lib/dashboard-data-client"
11
  import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
12
 
13
  export default function ModelDetailPage() {
@@ -15,6 +15,7 @@ export default function ModelDetailPage() {
15
  const router = useRouter()
16
  const searchParams = useSearchParams()
17
  const [summary, setSummary] = useState<ModelEvaluationSummary | null>(null)
 
18
  const [selectedVariantId, setSelectedVariantId] = useState<string | null>(null)
19
  const [loading, setLoading] = useState(true)
20
  const [error, setError] = useState<string | null>(null)
@@ -95,12 +96,16 @@ export default function ModelDetailPage() {
95
 
96
  const loadData = async () => {
97
  try {
98
- const modelSummary = await fetchModelSummary(routeId)
 
 
 
99
  if (isCancelled) {
100
  return
101
  }
102
 
103
  setSummary(modelSummary)
 
104
  setSelectedVariantId((current) => current ?? modelSummary.variants[0]?.variant_id ?? null)
105
  } catch (err) {
106
  if (isCancelled) {
@@ -259,7 +264,7 @@ export default function ModelDetailPage() {
259
  </div>
260
  </div>
261
  <main className="container mx-auto px-4 py-8">
262
- <BenchmarkDetail summary={detailSummary} />
263
  </main>
264
  </div>
265
  )
 
6
  import { ArrowLeft } from "lucide-react"
7
  import { Navigation } from "@/components/navigation"
8
  import { BenchmarkDetail } from "@/components/benchmark-detail"
9
+ import type { BenchmarkCard, ModelEvaluationSummary } from "@/lib/eval-processing"
10
+ import { fetchBenchmarkMetadata, fetchModelSummary } from "@/lib/dashboard-data-client"
11
  import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
12
 
13
  export default function ModelDetailPage() {
 
15
  const router = useRouter()
16
  const searchParams = useSearchParams()
17
  const [summary, setSummary] = useState<ModelEvaluationSummary | null>(null)
18
+ const [benchmarkCards, setBenchmarkCards] = useState<Record<string, BenchmarkCard>>({})
19
  const [selectedVariantId, setSelectedVariantId] = useState<string | null>(null)
20
  const [loading, setLoading] = useState(true)
21
  const [error, setError] = useState<string | null>(null)
 
96
 
97
  const loadData = async () => {
98
  try {
99
+ const [modelSummary, cards] = await Promise.all([
100
+ fetchModelSummary(routeId),
101
+ fetchBenchmarkMetadata(),
102
+ ])
103
  if (isCancelled) {
104
  return
105
  }
106
 
107
  setSummary(modelSummary)
108
+ setBenchmarkCards(cards)
109
  setSelectedVariantId((current) => current ?? modelSummary.variants[0]?.variant_id ?? null)
110
  } catch (err) {
111
  if (isCancelled) {
 
264
  </div>
265
  </div>
266
  <main className="container mx-auto px-4 py-8">
267
+ <BenchmarkDetail summary={detailSummary} benchmarkCards={benchmarkCards} />
268
  </main>
269
  </div>
270
  )
app/models/page.tsx CHANGED
@@ -13,7 +13,10 @@ import { ModelCompareDialog } from "@/components/model-compare-dialog"
13
  import { Navigation } from "@/components/navigation"
14
  import { PageHeader } from "@/components/page-header"
15
  import { Badge } from "@/components/ui/badge"
16
- import { fetchDevelopers, fetchModelCards, type DeveloperListItem } from "@/lib/dashboard-data-client"
 
 
 
17
 
18
  const PAGE_SIZE = 40
19
  const MAX_COMPARE_MODELS = 4
@@ -57,6 +60,7 @@ export default function ModelsPage() {
57
  const { mode } = useAudienceMode()
58
  const [evaluations, setEvaluations] = useState<BenchmarkEvaluationCardData[]>([])
59
  const [developers, setDevelopers] = useState<DeveloperListItem[]>([])
 
60
  const [loadingModels, setLoadingModels] = useState(true)
61
  const [loadingDevelopers, setLoadingDevelopers] = useState(true)
62
  const [groupByDeveloper, setGroupByDeveloper] = useState(false)
@@ -66,12 +70,16 @@ export default function ModelsPage() {
66
  const [minParamStep, setMinParamStep] = useState(0)
67
  const [maxParamStep, setMaxParamStep] = useState(PARAM_RANGE_VALUES.length - 1)
68
  const [selectedModelIds, setSelectedModelIds] = useState<string[]>([])
 
69
  const [compareOpen, setCompareOpen] = useState(false)
70
  const [page, setPage] = useState(1)
71
 
72
  useEffect(() => {
73
- fetchModelCards()
74
- .then(setEvaluations)
 
 
 
75
  .catch((error) => {
76
  console.error("Failed to load evaluations:", error)
77
  })
@@ -116,6 +124,16 @@ export default function ModelsPage() {
116
  return PARAM_RANGE_VALUES[maxParamStep] ?? null
117
  }, [maxParamStep])
118
 
 
 
 
 
 
 
 
 
 
 
119
  const filteredEvaluations = useMemo(() => {
120
  const query = searchQuery.trim().toLowerCase()
121
 
@@ -132,6 +150,12 @@ export default function ModelsPage() {
132
  }
133
  }
134
 
 
 
 
 
 
 
135
  if (!query) {
136
  return true
137
  }
@@ -149,7 +173,7 @@ export default function ModelsPage() {
149
 
150
  return haystacks.some((value) => value?.toLowerCase().includes(query))
151
  })
152
- }, [evaluations, numericMaxParams, numericMinParams, searchQuery])
153
 
154
  const sortedEvaluations = useMemo(() => {
155
  const sorted = [...filteredEvaluations]
@@ -247,7 +271,7 @@ export default function ModelsPage() {
247
 
248
  useEffect(() => {
249
  setPage(1)
250
- }, [developerSortBy, groupByDeveloper, maxParamStep, minParamStep, modelSortBy, searchQuery])
251
 
252
  const pagedEvaluations = useMemo(
253
  () => sortedEvaluations.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE),
@@ -343,6 +367,7 @@ export default function ModelsPage() {
343
  !groupByDeveloper
344
  ? { label: "Compare tray", value: selectedModels.length.toString() }
345
  : { label: "View", value: "Developer" },
 
346
  ]}
347
  />
348
 
@@ -367,20 +392,21 @@ export default function ModelsPage() {
367
  </div>
368
  ) : null}
369
 
370
- <div className="mb-8 flex flex-col gap-4 border-b border-border/50 pb-6 sm:flex-row sm:flex-wrap sm:items-center">
371
- <div className="relative w-full sm:max-w-sm">
372
- <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
373
- <Input
374
- value={searchQuery}
375
- onChange={(event) => setSearchQuery(event.target.value)}
376
- placeholder={
377
- groupByDeveloper
378
- ? "Search developers or popular evals"
379
- : "Search models, developers, or benchmarks"
380
- }
381
- className="pl-9"
382
- />
383
- </div>
 
384
  {!groupByDeveloper ? (
385
  <div className="rounded-xl border border-border/70 bg-muted/15 px-4 py-2">
386
  <div className="flex items-center gap-3">
@@ -524,6 +550,48 @@ export default function ModelsPage() {
524
  )}
525
  </SelectContent>
526
  </Select>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
527
  </div>
528
 
529
  {(groupByDeveloper ? filteredDevelopers.length === 0 : sortedEvaluations.length === 0) ? (
@@ -559,6 +627,7 @@ export default function ModelsPage() {
559
  <BenchmarkEvaluationCard
560
  key={evaluation.id}
561
  data={evaluation}
 
562
  onDelete={handleDelete}
563
  selectedForCompare={selectedModelIds.includes(evaluation.id)}
564
  onToggleCompare={toggleModelSelection}
 
13
  import { Navigation } from "@/components/navigation"
14
  import { PageHeader } from "@/components/page-header"
15
  import { Badge } from "@/components/ui/badge"
16
+ import { fetchDevelopers, fetchModelCards, fetchBenchmarkMetadata, type DeveloperListItem } from "@/lib/dashboard-data-client"
17
+ import type { BenchmarkCard } from "@/lib/benchmark-schema"
18
+ import { getCategoryColor, type CategoryType } from "@/lib/benchmark-schema"
19
+ import { cn } from "@/lib/utils"
20
 
21
  const PAGE_SIZE = 40
22
  const MAX_COMPARE_MODELS = 4
 
60
  const { mode } = useAudienceMode()
61
  const [evaluations, setEvaluations] = useState<BenchmarkEvaluationCardData[]>([])
62
  const [developers, setDevelopers] = useState<DeveloperListItem[]>([])
63
+ const [benchmarkCards, setBenchmarkCards] = useState<Record<string, BenchmarkCard>>({})
64
  const [loadingModels, setLoadingModels] = useState(true)
65
  const [loadingDevelopers, setLoadingDevelopers] = useState(true)
66
  const [groupByDeveloper, setGroupByDeveloper] = useState(false)
 
70
  const [minParamStep, setMinParamStep] = useState(0)
71
  const [maxParamStep, setMaxParamStep] = useState(PARAM_RANGE_VALUES.length - 1)
72
  const [selectedModelIds, setSelectedModelIds] = useState<string[]>([])
73
+ const [selectedCategories, setSelectedCategories] = useState<string[]>([])
74
  const [compareOpen, setCompareOpen] = useState(false)
75
  const [page, setPage] = useState(1)
76
 
77
  useEffect(() => {
78
+ Promise.all([fetchModelCards(), fetchBenchmarkMetadata()])
79
+ .then(([cards, metadata]) => {
80
+ setEvaluations(cards)
81
+ setBenchmarkCards(metadata)
82
+ })
83
  .catch((error) => {
84
  console.error("Failed to load evaluations:", error)
85
  })
 
124
  return PARAM_RANGE_VALUES[maxParamStep] ?? null
125
  }, [maxParamStep])
126
 
127
+ const allCategories = useMemo(() => {
128
+ const catSet = new Set<string>()
129
+ for (const evaluation of evaluations) {
130
+ for (const cat of evaluation.categories ?? []) {
131
+ catSet.add(cat)
132
+ }
133
+ }
134
+ return Array.from(catSet).sort((a, b) => a.localeCompare(b))
135
+ }, [evaluations])
136
+
137
  const filteredEvaluations = useMemo(() => {
138
  const query = searchQuery.trim().toLowerCase()
139
 
 
150
  }
151
  }
152
 
153
+ if (selectedCategories.length > 0) {
154
+ if (!evaluation.categories.some((c) => selectedCategories.includes(c))) {
155
+ return false
156
+ }
157
+ }
158
+
159
  if (!query) {
160
  return true
161
  }
 
173
 
174
  return haystacks.some((value) => value?.toLowerCase().includes(query))
175
  })
176
+ }, [evaluations, numericMaxParams, numericMinParams, searchQuery, selectedCategories])
177
 
178
  const sortedEvaluations = useMemo(() => {
179
  const sorted = [...filteredEvaluations]
 
271
 
272
  useEffect(() => {
273
  setPage(1)
274
+ }, [developerSortBy, groupByDeveloper, maxParamStep, minParamStep, modelSortBy, searchQuery, selectedCategories])
275
 
276
  const pagedEvaluations = useMemo(
277
  () => sortedEvaluations.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE),
 
367
  !groupByDeveloper
368
  ? { label: "Compare tray", value: selectedModels.length.toString() }
369
  : { label: "View", value: "Developer" },
370
+ ...(selectedCategories.length > 0 ? [{ label: "Category filter", value: selectedCategories.join(", ") }] : []),
371
  ]}
372
  />
373
 
 
392
  </div>
393
  ) : null}
394
 
395
+ <div className="mb-8 flex flex-col gap-4 border-b border-border/50 pb-6">
396
+ <div className="flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center">
397
+ <div className="relative w-full sm:max-w-sm">
398
+ <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
399
+ <Input
400
+ value={searchQuery}
401
+ onChange={(event) => setSearchQuery(event.target.value)}
402
+ placeholder={
403
+ groupByDeveloper
404
+ ? "Search developers or popular evals"
405
+ : "Search models, developers, or benchmarks"
406
+ }
407
+ className="pl-9"
408
+ />
409
+ </div>
410
  {!groupByDeveloper ? (
411
  <div className="rounded-xl border border-border/70 bg-muted/15 px-4 py-2">
412
  <div className="flex items-center gap-3">
 
550
  )}
551
  </SelectContent>
552
  </Select>
553
+ </div>
554
+
555
+ {/* Category filter chips — only shown for model view */}
556
+ {!groupByDeveloper && allCategories.length > 0 && (
557
+ <div className="flex flex-wrap items-center gap-1.5">
558
+ <span className="text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground mr-1">
559
+ Category
560
+ </span>
561
+ {allCategories.map((cat) => {
562
+ const isActive = selectedCategories.includes(cat)
563
+ return (
564
+ <button
565
+ key={cat}
566
+ type="button"
567
+ onClick={() =>
568
+ setSelectedCategories((prev) =>
569
+ prev.includes(cat) ? prev.filter((c) => c !== cat) : [...prev, cat]
570
+ )
571
+ }
572
+ className={cn(
573
+ "rounded-full border px-3 py-1 text-xs font-medium transition-colors",
574
+ isActive
575
+ ? getCategoryColor(cat as CategoryType) + " border-2"
576
+ : "border-border/60 bg-background text-muted-foreground hover:text-foreground"
577
+ )}
578
+ >
579
+ {cat}
580
+ </button>
581
+ )
582
+ })}
583
+ {selectedCategories.length > 0 && (
584
+ <button
585
+ type="button"
586
+ onClick={() => setSelectedCategories([])}
587
+ className="ml-1 flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground"
588
+ >
589
+ <X className="h-3 w-3" />
590
+ Clear
591
+ </button>
592
+ )}
593
+ </div>
594
+ )}
595
  </div>
596
 
597
  {(groupByDeveloper ? filteredDevelopers.length === 0 : sortedEvaluations.length === 0) ? (
 
627
  <BenchmarkEvaluationCard
628
  key={evaluation.id}
629
  data={evaluation}
630
+ benchmarkCards={benchmarkCards}
631
  onDelete={handleDelete}
632
  selectedForCompare={selectedModelIds.includes(evaluation.id)}
633
  onToggleCompare={toggleModelSelection}
components/benchmark-detail.tsx CHANGED
@@ -1,6 +1,7 @@
1
  "use client"
2
 
3
  // Force recompile
 
4
  import { useAudienceMode } from "@/components/audience-mode-provider"
5
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
6
  import { Badge } from "@/components/ui/badge"
@@ -17,14 +18,16 @@ import {
17
  ChevronDown, ChevronUp, BarChart3, Award, AlertTriangle,
18
  Cpu, Tag, Globe, Network, Activity, MessageSquare, Clock, Hash, Layers, Search, FlaskConical, Scale, BookOpenText
19
  } from "lucide-react"
20
- import type { BenchmarkEvaluation, CategoryType, EvaluationResult } from "@/lib/benchmark-schema"
21
- import { inferCategoryFromBenchmark } from "@/lib/benchmark-schema"
22
  import { formatScore, getBenchmarkDisplayName } from "@/lib/eval-processing"
23
  import type { ModelSummaryCore } from "@/lib/benchmark-schema"
 
24
  import { Fragment, useState, useEffect, useMemo, type CSSProperties } from "react"
25
 
26
  interface BenchmarkDetailProps {
27
  summary: ModelSummaryCore
 
28
  }
29
 
30
  interface BenchmarkVariant {
@@ -41,10 +44,14 @@ interface BenchmarkVariant {
41
  interface BenchmarkGroup {
42
  key: string
43
  title: string
 
 
44
  description: string
45
  scoreType: EvaluationResult["metric_config"]["score_type"] | "mixed"
46
  avgNormalizedScore: number
47
  avgDisplayScore: string
 
 
48
  variants: BenchmarkVariant[]
49
  }
50
 
@@ -450,6 +457,16 @@ function normalizeScoreForDisplay(result: EvaluationResult) {
450
  return Math.max(0, Math.min(1, normalized))
451
  }
452
 
 
 
 
 
 
 
 
 
 
 
453
  function formatResultDisplayScore(result: EvaluationResult) {
454
  return formatScore(
455
  result.score_details.score,
@@ -492,12 +509,16 @@ function getVariantDedupKey(variant: BenchmarkVariant) {
492
  }
493
 
494
  function buildBenchmarkGroups(
495
- entries: Array<{ evaluation: BenchmarkEvaluation; result: EvaluationResult }>
 
496
  ): BenchmarkGroup[] {
497
  const groups = new Map<string, BenchmarkGroup>()
498
 
499
  for (const entry of entries) {
500
  const title = getBenchmarkDisplayName(getResultBenchmarkName(entry.evaluation, entry.result))
 
 
 
501
  const normalizedScore = normalizeScoreForDisplay(entry.result)
502
  const displayScore = formatResultDisplayScore(entry.result)
503
  const descriptor = getVariantDescriptor(entry.evaluation, entry.result)
@@ -518,10 +539,14 @@ function buildBenchmarkGroups(
518
  groups.set(title, {
519
  key: title,
520
  title,
 
 
521
  description: entry.result.metric_config.evaluation_description,
522
  scoreType: entry.result.metric_config.score_type,
523
  avgNormalizedScore: normalizedScore,
524
  avgDisplayScore: `${(normalizedScore * 100).toFixed(1)}%`,
 
 
525
  variants: [variant],
526
  })
527
  continue
@@ -593,12 +618,14 @@ function getEvaluationVariantLabel(evaluation: BenchmarkEvaluation) {
593
  return evaluationPrefix.split("/").filter(Boolean).pop() || null
594
  }
595
 
596
- export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
597
  const { mode } = useAudienceMode()
598
  const isResearchView = mode === "research"
599
  const [benchmarkSearch, setBenchmarkSearch] = useState("")
600
  const [benchmarkSort, setBenchmarkSort] = useState<"score" | "name" | "variants" | "spread">("score")
 
601
  const [expandedBenchmarkKey, setExpandedBenchmarkKey] = useState<string | null>(null)
 
602
  const allEvaluations = useMemo(
603
  () => Object.values(summary.evaluations_by_category).flat(),
604
  [summary.evaluations_by_category]
@@ -655,7 +682,9 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
655
  }
656
  }
657
 
658
- return resultCategory === category ? [{ evaluation, result }] : []
 
 
659
  })
660
  )
661
  ),
@@ -663,7 +692,7 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
663
  )
664
 
665
  const policyHighlights = useMemo(() => {
666
- const groups = buildBenchmarkGroups(allCategoryResults)
667
  const seenLabels = new Set<string>()
668
 
669
  return groups
@@ -691,7 +720,7 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
691
  level,
692
  }
693
  })
694
- }, [allCategoryResults])
695
 
696
  const policySummary = useMemo(() => {
697
  const benchmarkCount = new Set(
@@ -751,22 +780,22 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
751
  summary.total_evaluations,
752
  ])
753
 
754
- const benchmarkGroups = useMemo(() => buildBenchmarkGroups(allCategoryResults), [allCategoryResults])
755
-
756
- const bestBenchmark = benchmarkGroups[0]
757
- const weakestBenchmark = benchmarkGroups[benchmarkGroups.length - 1]
758
- const widestBenchmark = [...benchmarkGroups].sort((a, b) => getBenchmarkSpread(b) - getBenchmarkSpread(a))[0]
759
- const repeatedBenchmarkCount = benchmarkGroups.filter((group) => group.variants.length > 1).length
760
- const setupDrivenBenchmarkCount = benchmarkGroups.filter((group) =>
761
- group.variants.some((variant) => variant.variantType === "setup" || variant.variantType === "setup+subtask")
762
- ).length
763
- const subtaskDrivenBenchmarkCount = benchmarkGroups.filter((group) =>
764
- group.variants.some((variant) => variant.variantType === "subtask" || variant.variantType === "setup+subtask")
765
- ).length
766
 
767
  const filteredBenchmarkGroups = useMemo(() => {
768
  const query = benchmarkSearch.trim().toLowerCase()
769
  const filtered = benchmarkGroups.filter((group) => {
 
 
 
 
770
  if (!query) {
771
  return true
772
  }
@@ -778,25 +807,54 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
778
  )
779
  })
780
 
781
- const sorted = [...filtered]
782
- switch (benchmarkSort) {
783
- case "name":
784
- sorted.sort((a, b) => a.title.localeCompare(b.title))
785
- break
786
- case "variants":
787
- sorted.sort((a, b) => b.variants.length - a.variants.length || b.avgNormalizedScore - a.avgNormalizedScore)
788
- break
789
- case "spread":
790
- sorted.sort((a, b) => getBenchmarkSpread(b) - getBenchmarkSpread(a) || b.avgNormalizedScore - a.avgNormalizedScore)
791
- break
792
- case "score":
793
- default:
794
- sorted.sort((a, b) => b.avgNormalizedScore - a.avgNormalizedScore)
795
- break
796
  }
797
 
798
- return sorted
799
- }, [benchmarkGroups, benchmarkSearch, benchmarkSort])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
800
 
801
  useEffect(() => {
802
  if (!expandedBenchmarkKey) {
@@ -809,6 +867,12 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
809
  }
810
  }, [expandedBenchmarkKey, filteredBenchmarkGroups])
811
 
 
 
 
 
 
 
812
  const formatDate = (isoString: string) => {
813
  try {
814
  return new Date(isoString).toLocaleDateString('en-US', {
@@ -824,11 +888,11 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
824
  }
825
 
826
  return (
827
- <div className="space-y-6">
828
  <Card className="overflow-hidden">
829
- <CardContent className="space-y-5 p-5 sm:p-6">
830
- <div className="flex flex-col gap-5 xl:flex-row xl:items-start xl:justify-between">
831
- <div className="space-y-3">
832
  <div className="flex flex-wrap items-center gap-2">
833
  <Badge variant="outline" className="border-border/60 bg-background/80 text-[11px] uppercase tracking-[0.18em]">
834
  Model Metadata
@@ -858,16 +922,16 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
858
  )}
859
  </div>
860
 
861
- <div className="grid w-full gap-3 sm:grid-cols-2 xl:w-[560px] xl:grid-cols-4">
862
- <div className="rounded-2xl border border-sky-200/80 bg-sky-50/80 px-4 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.45)] dark:border-sky-900/40 dark:bg-sky-950/20 dark:shadow-none">
863
  <div className="text-[10px] font-semibold tracking-[0.12em] text-sky-700 dark:text-sky-200 whitespace-nowrap">Benchmarks</div>
864
  <div className="mt-1 text-[1.8rem] font-semibold leading-none text-sky-950 dark:text-sky-50">{benchmarkGroups.length}</div>
865
  </div>
866
- <div className="rounded-2xl border border-border/70 bg-muted/20 px-4 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.3)] dark:shadow-none">
867
  <div className="text-[10px] font-semibold tracking-[0.12em] text-muted-foreground whitespace-nowrap">Results</div>
868
  <div className="mt-1 text-[1.8rem] font-semibold leading-none">{summary.total_evaluations}</div>
869
  </div>
870
- <div className="rounded-2xl border border-emerald-200/80 bg-emerald-50/80 px-4 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.45)] dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:shadow-none">
871
  <div className="text-[10px] font-semibold tracking-[0.12em] text-emerald-700 dark:text-emerald-200 whitespace-nowrap">
872
  Reporting orgs
873
  </div>
@@ -875,7 +939,7 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
875
  {reportingStats.organizationCount}
876
  </div>
877
  </div>
878
- <div className="rounded-2xl border border-amber-200/80 bg-amber-50/80 px-4 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.45)] dark:border-amber-900/40 dark:bg-amber-950/20 dark:shadow-none">
879
  <div className="text-[10px] font-semibold tracking-[0.12em] text-amber-700 dark:text-amber-200 whitespace-nowrap">
880
  Source types
881
  </div>
@@ -886,7 +950,7 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
886
  </div>
887
  </div>
888
 
889
- <div className="grid gap-4 xl:grid-cols-[minmax(0,1fr)_minmax(320px,0.92fr)]">
890
  <div className="rounded-[1.5rem] border bg-muted/10 p-4">
891
  <div className="text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
892
  System and evidence context
@@ -974,7 +1038,7 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
974
  </div>
975
  </div>
976
  ) : (
977
- <div className="rounded-[1.5rem] border bg-gradient-to-br from-amber-50/80 via-background to-rose-50/60 p-4 dark:from-amber-950/20 dark:via-background dark:to-rose-950/20">
978
  <div className="flex items-center gap-2">
979
  <Scale className="h-4 w-4 text-primary" />
980
  <div className="text-sm font-semibold">Public reading</div>
@@ -1013,8 +1077,8 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
1013
  </CardContent>
1014
  </Card>
1015
 
1016
- <section className="space-y-5">
1017
- <div className="flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between">
1018
  <div className="space-y-1">
1019
  <h3 className="text-xl font-semibold">
1020
  {isResearchView ? "Benchmark Explorer" : "Reported Benchmark Signals"}
@@ -1026,8 +1090,8 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
1026
  </p>
1027
  </div>
1028
 
1029
- <div className="flex flex-col gap-3 sm:flex-row">
1030
- <div className="relative w-full sm:w-[280px]">
1031
  <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
1032
  <Input
1033
  value={benchmarkSearch}
@@ -1038,55 +1102,126 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
1038
  </div>
1039
 
1040
  <Select value={benchmarkSort} onValueChange={(value) => setBenchmarkSort(value as typeof benchmarkSort)}>
1041
- <SelectTrigger className="w-full sm:w-[220px]">
1042
  <SelectValue placeholder="Sort benchmarks" />
1043
  </SelectTrigger>
1044
  <SelectContent>
1045
  <SelectItem value="score">Highest score first</SelectItem>
1046
  <SelectItem value="name">Name (A-Z)</SelectItem>
1047
- <SelectItem value="variants">Most comparison slices</SelectItem>
1048
  <SelectItem value="spread">Largest setup swing</SelectItem>
1049
  </SelectContent>
1050
  </Select>
1051
  </div>
1052
  </div>
1053
 
1054
- <div className={`grid gap-4 ${isResearchView ? "md:grid-cols-3" : "md:grid-cols-2 xl:grid-cols-3"}`}>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1055
  {bestBenchmark && (
1056
- <div className="rounded-[1.5rem] border bg-emerald-50/70 p-4 dark:bg-emerald-950/20">
1057
  <div className="text-[10px] font-semibold uppercase tracking-[0.16em] text-emerald-700/90 dark:text-emerald-300">
1058
  Strongest Reported Benchmark
1059
  </div>
1060
- <div className="mt-2 text-base font-semibold tracking-tight">{bestBenchmark.title}</div>
1061
- <div className="mt-1 text-[13px] leading-5 text-muted-foreground">{bestBenchmark.description}</div>
1062
- <div className="mt-3 text-[1.75rem] font-semibold tracking-tight text-emerald-700 dark:text-emerald-300">{bestBenchmark.avgDisplayScore}</div>
 
 
 
 
1063
  </div>
1064
  )}
1065
 
1066
  {widestBenchmark && (
1067
- <div className="rounded-[1.5rem] border bg-amber-50/70 p-4 dark:bg-amber-950/20">
1068
  <div className="text-[10px] font-semibold uppercase tracking-[0.16em] text-amber-700/90 dark:text-amber-300">
1069
  Widest score gap
1070
  </div>
1071
- <div className="mt-2 text-base font-semibold tracking-tight">{widestBenchmark.title}</div>
1072
- <div className="mt-1 text-[13px] leading-5 text-muted-foreground">
1073
- {widestBenchmark.variants.length} reported slice{widestBenchmark.variants.length === 1 ? "" : "s"} with the biggest spread between highest and lowest scores
 
 
 
 
1074
  </div>
1075
- <div className="mt-3 text-[1.75rem] font-semibold tracking-tight text-amber-700 dark:text-amber-300">
1076
  {(getBenchmarkSpread(widestBenchmark) * 100).toFixed(1)} pts
1077
  </div>
1078
  </div>
1079
  )}
1080
 
1081
- <div className="rounded-[1.5rem] border bg-sky-50/70 p-4 dark:bg-sky-950/20">
1082
  <div className="text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-700/90 dark:text-sky-300">
1083
  Coverage Snapshot
1084
  </div>
1085
- <div className="mt-2 text-base font-semibold tracking-tight">{benchmarkGroups.length} benchmarks</div>
1086
- <div className="mt-1 text-[13px] leading-5 text-muted-foreground">
1087
- {repeatedBenchmarkCount} benchmark{repeatedBenchmarkCount === 1 ? "" : "s"} include multiple comparison slices.
1088
  </div>
1089
- <div className="mt-3 text-[13px] font-medium text-sky-700 dark:text-sky-300">
1090
  {filteredBenchmarkGroups.length} shown after filters
1091
  </div>
1092
  </div>
@@ -1094,26 +1229,41 @@ export function BenchmarkDetail({ summary }: BenchmarkDetailProps) {
1094
 
1095
  {filteredBenchmarkGroups.length === 0 ? (
1096
  <div className="rounded-2xl border border-dashed p-8 text-center text-sm text-muted-foreground">
1097
- No benchmarks match the current search.
1098
  </div>
1099
  ) : (
1100
- <div className="grid gap-4 xl:grid-cols-2">
1101
- {filteredBenchmarkGroups.map((group, index) => (
1102
- <AggregatedBenchmarkCard
1103
- key={group.key}
1104
- group={group}
1105
- isOpen={expandedBenchmarkKey === group.key}
1106
- motionIndex={index}
1107
- onOpenChange={(open) =>
1108
- setExpandedBenchmarkKey((current) => {
1109
- if (open) {
1110
- return group.key
1111
- }
1112
-
1113
- return current === group.key ? null : current
1114
- })
1115
- }
1116
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1117
  ))}
1118
  </div>
1119
  )}
@@ -1861,6 +2011,8 @@ function AggregatedBenchmarkCard({
1861
  }, Number.NEGATIVE_INFINITY)
1862
  const latestReportedLabel =
1863
  Number.isFinite(latestTimestamp) ? formatCompactDate(String(latestTimestamp)) : formatCompactDate(group.variants[0]?.evaluation.retrieved_timestamp ?? "")
 
 
1864
 
1865
  const toggleRow = (rowKey: string) => {
1866
  setExpandedRows((current) => ({
@@ -1871,118 +2023,150 @@ function AggregatedBenchmarkCard({
1871
 
1872
  return (
1873
  <div
1874
- className={`motion-academic-enter ${isOpen ? "xl:col-span-2" : ""}`}
1875
  style={{ "--enter-delay": `${Math.min(motionIndex * 55, 260)}ms` } as CSSProperties}
1876
  >
1877
  <Collapsible open={isOpen} onOpenChange={onOpenChange}>
1878
- <Card className="motion-academic-surface overflow-hidden border border-border/70 bg-card shadow-[0_1px_0_rgba(255,255,255,0.3),0_12px_30px_rgba(15,23,42,0.04)] dark:shadow-[0_1px_0_rgba(255,255,255,0.02)]">
1879
- <div className="p-5 sm:p-6">
1880
- <div className="flex flex-col gap-5 lg:flex-row lg:items-start lg:justify-between">
1881
- <div className="min-w-0 flex-1 space-y-3">
1882
- <div className="flex flex-wrap items-center gap-2">
1883
- <Badge variant="outline" className="border-border/60 bg-background/70 text-[11px] font-medium text-foreground/85 shadow-none">
1884
- Benchmark summary
1885
- </Badge>
1886
- <Badge variant="outline" className="border-border/60 bg-background/70 text-[11px] font-normal text-muted-foreground">
1887
- {group.scoreType}
1888
- </Badge>
1889
- <Badge variant="secondary" className="bg-muted/60 text-[11px] font-normal text-muted-foreground">
1890
- {group.variants.length > 1
1891
- ? `${group.variants.length} comparison slices`
1892
- : "1 reported result"}
1893
- </Badge>
1894
- {sourceOrganizations.size > 1 && (
1895
- <Badge variant="outline" className="border-border/60 bg-background/70 text-[11px] font-normal text-muted-foreground">
1896
- {sourceOrganizations.size} reporting orgs
1897
- </Badge>
1898
- )}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1899
  </div>
1900
 
1901
- <div>
1902
- <h3 className="text-[1.35rem] font-semibold tracking-tight text-foreground/95 sm:text-[1.45rem]">{group.title}</h3>
1903
- <p className="mt-1 max-w-3xl text-[13px] leading-5 text-muted-foreground">{group.description}</p>
 
 
 
 
 
 
 
 
1904
  </div>
1905
 
1906
- <div className="rounded-2xl border border-border/60 bg-muted/[0.22] p-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.45)] dark:bg-muted/10 dark:shadow-none">
1907
- <div className="grid gap-3 md:grid-cols-[minmax(0,1.6fr)_minmax(140px,.8fr)_minmax(140px,.85fr)]">
1908
- <div>
1909
- <div className="text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground">
1910
- {group.variants.length > 1
1911
- ? isResearchView
1912
- ? "Top comparison slice"
1913
- : "Top reported slice"
1914
- : "Reported result"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1915
  </div>
1916
- <div className="mt-1 flex flex-wrap items-center gap-2">
1917
- <span className="min-w-0 truncate text-[13px] font-medium text-foreground/90">
1918
- {group.variants[0]?.label ?? "Default run"}
1919
- </span>
1920
- {group.variants[0] && (
1921
- <Badge className={`${getVariantTypeTone(group.variants[0].variantType)} shadow-none`}>
1922
- {getVariantTypeLabel(group.variants[0].variantType)}
1923
  </Badge>
1924
- )}
1925
  </div>
1926
  </div>
1927
- <div className="md:border-l md:border-border/50 md:pl-3">
1928
- <div className="text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground">
1929
- {group.variants.length > 1
1930
- ? isResearchView
1931
- ? "Cross-slice spread"
1932
- : "Score spread"
1933
- : "Comparison status"}
 
1934
  </div>
1935
- <div className="mt-1 text-[13px] font-medium text-foreground/90">
1936
- {group.variants.length > 1 ? `${(spread * 100).toFixed(1)} pts` : "No comparison set"}
 
 
 
 
 
1937
  </div>
1938
- </div>
1939
- <div className="md:border-l md:border-border/50 md:pl-3">
1940
- <div className="text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground">
1941
- Latest report
 
 
 
1942
  </div>
1943
- <div className="mt-1 text-[13px] font-medium text-foreground/90">{latestReportedLabel}</div>
1944
  </div>
1945
  </div>
1946
- </div>
1947
- </div>
1948
-
1949
- <div className="flex items-center gap-3 lg:min-w-[210px] lg:justify-end lg:pl-4">
1950
- <div className="min-w-[152px] text-right">
1951
- <div className="text-[2rem] font-semibold tracking-tight text-foreground/95">{group.avgDisplayScore}</div>
1952
- <div className="mt-1 text-[12px] text-muted-foreground">
1953
- {isResearchView ? "Average normalized score" : "Average reported score"}
1954
- </div>
1955
- <div className="mt-3 flex justify-end">
1956
- <div className="h-1.5 w-28 overflow-hidden rounded-full bg-muted">
1957
- <div
1958
- className="h-full rounded-full bg-foreground/90 transition-[width] duration-300"
1959
- style={{ width: `${Math.max(0, Math.min(100, group.avgNormalizedScore * 100))}%` }}
1960
- />
1961
- </div>
1962
- </div>
1963
- </div>
1964
- <CollapsibleTrigger asChild>
1965
- <Button variant="ghost" size="sm" className="motion-academic-button h-9 w-9 rounded-full border border-border/60 bg-background/80 p-0 shadow-sm">
1966
- {isOpen ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
1967
- <span className="sr-only">Toggle benchmark details</span>
1968
- </Button>
1969
- </CollapsibleTrigger>
1970
- </div>
1971
- </div>
1972
- </div>
1973
 
1974
- <CollapsibleContent>
1975
- <Separator />
1976
- <CardContent className="p-6 bg-muted/5">
1977
- <div className="space-y-3">
1978
  <div>
1979
  <div className="text-xs font-semibold text-muted-foreground uppercase tracking-wider">
1980
- Comparison Slices
1981
  </div>
1982
  <div className="text-xs text-muted-foreground mt-1">
1983
  {isResearchView
1984
  ? "Setup changes and benchmark subtasks are shown separately so you can tell methodological differences from benchmark decomposition."
1985
- : "Different setups and benchmark subtasks are visually separated so policy review does not confuse reporting choices with task slices."}
1986
  </div>
1987
  </div>
1988
 
@@ -2073,7 +2257,11 @@ function AggregatedBenchmarkCard({
2073
  className="motion-academic-enter-soft overflow-hidden rounded-xl border bg-background"
2074
  style={{ "--enter-delay": `${Math.min(index * 40, 180)}ms` } as CSSProperties}
2075
  >
2076
- <div className="p-4">
 
 
 
 
2077
  <div className="flex flex-col gap-3">
2078
  <div className="flex items-start justify-between gap-3">
2079
  <div className="flex min-w-0 items-start gap-3">
@@ -2096,76 +2284,69 @@ function AggregatedBenchmarkCard({
2096
  </div>
2097
  </div>
2098
 
2099
- <Button
2100
- variant="ghost"
2101
- size="sm"
2102
- className="h-9 w-9 shrink-0 p-0"
2103
- onClick={() => toggleRow(rowKey)}
2104
- >
2105
  {isRowOpen ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
2106
  <span className="sr-only">Toggle variant details</span>
2107
- </Button>
2108
  </div>
2109
 
2110
- <div className="grid gap-2 border-t border-border/50 pt-3 md:grid-cols-4">
2111
- <SummaryRailItem
2112
- label={isResearchView ? "Config" : "Setup"}
2113
- tone="bg-sky-50/80 border-sky-200/70 shadow-[inset_0_1px_0_rgba(255,255,255,0.7)] dark:bg-sky-950/20 dark:border-sky-900/40"
2114
- >
2115
- <Badge
2116
- variant="outline"
2117
- className="max-w-full truncate border-sky-200/70 bg-background/90 px-2 py-0.5 font-normal dark:border-sky-900/40 dark:bg-background/70"
2118
- title={getTableConfigLabel(row)}
2119
- >
2120
  {getConfigDisplayValue(getTableConfigLabel(row))}
2121
- </Badge>
2122
- </SummaryRailItem>
2123
 
2124
- <SummaryRailItem
2125
- label={isResearchView ? "Gap" : "Relationship"}
2126
- tone="bg-stone-100/80 border-stone-200/80 shadow-[inset_0_1px_0_rgba(255,255,255,0.7)] dark:bg-stone-900/35 dark:border-stone-800/70"
2127
- >
 
2128
  {isResearchView ? (
2129
- <div className="flex items-center gap-2">
2130
- <div className="min-w-0 text-sm font-semibold">
2131
- {index === 0 ? "Leader" : `-${(gapToLeader * 100).toFixed(1)} pts`}
 
 
 
 
 
2132
  </div>
2133
- <Progress
2134
- value={leaderNormalizedScore > 0 ? (variant.normalizedScore / leaderNormalizedScore) * 100 : 100}
2135
- className="h-2 w-14 shrink-0"
2136
- />
2137
- </div>
2138
  ) : (
2139
- <div className="text-sm capitalize text-muted-foreground">
2140
  {variant.evaluation.source_metadata.evaluator_relationship.replace(/_/g, " ")}
2141
  </div>
2142
  )}
2143
- </SummaryRailItem>
2144
-
2145
- <SummaryRailItem
2146
- label="Score"
2147
- tone="bg-amber-50/85 border-amber-200/70 shadow-[inset_0_1px_0_rgba(255,255,255,0.7)] dark:bg-amber-950/20 dark:border-amber-900/40"
2148
- >
2149
- <span className="text-base font-semibold">{variant.displayScore}</span>
2150
- </SummaryRailItem>
2151
-
2152
- <SummaryRailItem
2153
- label={isResearchView ? "Source" : "Evidence"}
2154
- tone="bg-emerald-50/80 border-emerald-200/70 shadow-[inset_0_1px_0_rgba(255,255,255,0.7)] dark:bg-emerald-950/20 dark:border-emerald-900/40"
2155
- >
2156
- <div className="flex items-center gap-1.5 whitespace-nowrap text-sm text-muted-foreground">
2157
- <span className="min-w-0 max-w-[6.25rem] truncate">
2158
- {variant.evaluation.source_metadata.source_organization_name}
2159
- </span>
2160
- <span className="text-border">/</span>
2161
- <span className="shrink-0">
2162
- {evidenceStatus}
2163
- </span>
2164
  </div>
2165
- </SummaryRailItem>
2166
  </div>
2167
  </div>
2168
- </div>
2169
 
2170
  {isRowOpen && (
2171
  <div className="border-t bg-muted/10 p-4">
@@ -2182,7 +2363,7 @@ function AggregatedBenchmarkCard({
2182
 
2183
  {filteredRows.length === 0 && (
2184
  <div className="rounded-xl border bg-background p-6 text-center text-sm text-muted-foreground">
2185
- No comparison slices match the current filters.
2186
  </div>
2187
  )}
2188
  </div>
@@ -2376,25 +2557,6 @@ function InlineMeta({ label, value }: { label: string; value: React.ReactNode })
2376
  )
2377
  }
2378
 
2379
- function SummaryRailItem({
2380
- label,
2381
- tone,
2382
- children,
2383
- }: {
2384
- label: string
2385
- tone: string
2386
- children: React.ReactNode
2387
- }) {
2388
- return (
2389
- <div className={`min-w-0 rounded-2xl border px-3 py-2.5 ${tone}`}>
2390
- <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2391
- {label}
2392
- </div>
2393
- <div className="mt-1.5 min-w-0 overflow-hidden">{children}</div>
2394
- </div>
2395
- )
2396
- }
2397
-
2398
  function AllEvaluationsView({ evaluations }: { evaluations: BenchmarkEvaluation[] }) {
2399
  return (
2400
  <div className="space-y-6">
 
1
  "use client"
2
 
3
  // Force recompile
4
+ import Link from "next/link"
5
  import { useAudienceMode } from "@/components/audience-mode-provider"
6
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
7
  import { Badge } from "@/components/ui/badge"
 
18
  ChevronDown, ChevronUp, BarChart3, Award, AlertTriangle,
19
  Cpu, Tag, Globe, Network, Activity, MessageSquare, Clock, Hash, Layers, Search, FlaskConical, Scale, BookOpenText
20
  } from "lucide-react"
21
+ import type { BenchmarkCard, BenchmarkEvaluation, CategoryType, EvaluationResult } from "@/lib/benchmark-schema"
22
+ import { getCategoryColor as getCategoryTone, inferCategoryFromBenchmark } from "@/lib/benchmark-schema"
23
  import { formatScore, getBenchmarkDisplayName } from "@/lib/eval-processing"
24
  import type { ModelSummaryCore } from "@/lib/benchmark-schema"
25
+ import { lookupBenchmarkCard } from "@/lib/benchmark-metadata-utils"
26
  import { Fragment, useState, useEffect, useMemo, type CSSProperties } from "react"
27
 
28
  interface BenchmarkDetailProps {
29
  summary: ModelSummaryCore
30
+ benchmarkCards?: Record<string, BenchmarkCard>
31
  }
32
 
33
  interface BenchmarkVariant {
 
44
  interface BenchmarkGroup {
45
  key: string
46
  title: string
47
+ evalDetailHref: string
48
+ category: CategoryType
49
  description: string
50
  scoreType: EvaluationResult["metric_config"]["score_type"] | "mixed"
51
  avgNormalizedScore: number
52
  avgDisplayScore: string
53
+ domains: string[]
54
+ benchmarkCard?: BenchmarkCard
55
  variants: BenchmarkVariant[]
56
  }
57
 
 
457
  return Math.max(0, Math.min(1, normalized))
458
  }
459
 
460
+ function slugifyEvalSummaryId(value: string) {
461
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_|_$/g, "")
462
+ }
463
+
464
+ function getEvalDetailHref(evaluation: BenchmarkEvaluation, result: EvaluationResult) {
465
+ const benchmarkKey = evaluation.benchmark || getResultBenchmarkName(evaluation, result)
466
+ const evalSummaryId = slugifyEvalSummaryId(`${benchmarkKey}__${result.evaluation_name}`)
467
+ return `/evals/${evalSummaryId}`
468
+ }
469
+
470
  function formatResultDisplayScore(result: EvaluationResult) {
471
  return formatScore(
472
  result.score_details.score,
 
509
  }
510
 
511
  function buildBenchmarkGroups(
512
+ entries: Array<{ evaluation: BenchmarkEvaluation; result: EvaluationResult; category: CategoryType }>,
513
+ benchmarkCards?: Record<string, BenchmarkCard>
514
  ): BenchmarkGroup[] {
515
  const groups = new Map<string, BenchmarkGroup>()
516
 
517
  for (const entry of entries) {
518
  const title = getBenchmarkDisplayName(getResultBenchmarkName(entry.evaluation, entry.result))
519
+ const card = benchmarkCards
520
+ ? lookupBenchmarkCard(benchmarkCards, getResultBenchmarkName(entry.evaluation, entry.result))
521
+ : undefined
522
  const normalizedScore = normalizeScoreForDisplay(entry.result)
523
  const displayScore = formatResultDisplayScore(entry.result)
524
  const descriptor = getVariantDescriptor(entry.evaluation, entry.result)
 
539
  groups.set(title, {
540
  key: title,
541
  title,
542
+ evalDetailHref: getEvalDetailHref(entry.evaluation, entry.result),
543
+ category: entry.category,
544
  description: entry.result.metric_config.evaluation_description,
545
  scoreType: entry.result.metric_config.score_type,
546
  avgNormalizedScore: normalizedScore,
547
  avgDisplayScore: `${(normalizedScore * 100).toFixed(1)}%`,
548
+ domains: card?.benchmark_details?.domains ?? [],
549
+ benchmarkCard: card,
550
  variants: [variant],
551
  })
552
  continue
 
618
  return evaluationPrefix.split("/").filter(Boolean).pop() || null
619
  }
620
 
621
+ export function BenchmarkDetail({ summary, benchmarkCards }: BenchmarkDetailProps) {
622
  const { mode } = useAudienceMode()
623
  const isResearchView = mode === "research"
624
  const [benchmarkSearch, setBenchmarkSearch] = useState("")
625
  const [benchmarkSort, setBenchmarkSort] = useState<"score" | "name" | "variants" | "spread">("score")
626
+ const [selectedCategories, setSelectedCategories] = useState<CategoryType[]>([])
627
  const [expandedBenchmarkKey, setExpandedBenchmarkKey] = useState<string | null>(null)
628
+ const [showWithoutMetadata, setShowWithoutMetadata] = useState(false)
629
  const allEvaluations = useMemo(
630
  () => Object.values(summary.evaluations_by_category).flat(),
631
  [summary.evaluations_by_category]
 
682
  }
683
  }
684
 
685
+ return resultCategory === category
686
+ ? [{ evaluation, result, category: category as CategoryType }]
687
+ : []
688
  })
689
  )
690
  ),
 
692
  )
693
 
694
  const policyHighlights = useMemo(() => {
695
+ const groups = buildBenchmarkGroups(allCategoryResults, benchmarkCards)
696
  const seenLabels = new Set<string>()
697
 
698
  return groups
 
720
  level,
721
  }
722
  })
723
+ }, [allCategoryResults, benchmarkCards])
724
 
725
  const policySummary = useMemo(() => {
726
  const benchmarkCount = new Set(
 
780
  summary.total_evaluations,
781
  ])
782
 
783
+ const benchmarkGroups = useMemo(
784
+ () => buildBenchmarkGroups(allCategoryResults, benchmarkCards),
785
+ [allCategoryResults, benchmarkCards]
786
+ )
787
+ const availableCategories = useMemo(() => {
788
+ const presentCategories = new Set(benchmarkGroups.map((group) => group.category))
789
+ return summary.categories_covered.filter((category) => presentCategories.has(category))
790
+ }, [benchmarkGroups, summary.categories_covered])
 
 
 
 
791
 
792
  const filteredBenchmarkGroups = useMemo(() => {
793
  const query = benchmarkSearch.trim().toLowerCase()
794
  const filtered = benchmarkGroups.filter((group) => {
795
+ if (selectedCategories.length > 0 && !selectedCategories.includes(group.category)) {
796
+ return false
797
+ }
798
+
799
  if (!query) {
800
  return true
801
  }
 
807
  )
808
  })
809
 
810
+ // Metadata-first: always put groups with a benchmarkCard at the top
811
+ const withCard = filtered.filter((g) => !!g.benchmarkCard)
812
+ const withoutCard = filtered.filter((g) => !g.benchmarkCard)
813
+
814
+ const sortFn = (a: BenchmarkGroup, b: BenchmarkGroup) => {
815
+ switch (benchmarkSort) {
816
+ case "name": return a.title.localeCompare(b.title)
817
+ case "variants": return b.variants.length - a.variants.length || b.avgNormalizedScore - a.avgNormalizedScore
818
+ case "spread": return getBenchmarkSpread(b) - getBenchmarkSpread(a) || b.avgNormalizedScore - a.avgNormalizedScore
819
+ default: return b.avgNormalizedScore - a.avgNormalizedScore
820
+ }
 
 
 
 
821
  }
822
 
823
+ withCard.sort(sortFn)
824
+ withoutCard.sort(sortFn)
825
+
826
+ return showWithoutMetadata ? [...withCard, ...withoutCard] : withCard
827
+ }, [benchmarkGroups, benchmarkSearch, benchmarkSort, selectedCategories, showWithoutMetadata])
828
+
829
+ const groupedFilteredBenchmarkGroups = useMemo(() => {
830
+ const order = new Map(summary.categories_covered.map((category, index) => [category, index]))
831
+ const groups = new Map<CategoryType, BenchmarkGroup[]>()
832
+
833
+ for (const benchmarkGroup of filteredBenchmarkGroups) {
834
+ const bucket = groups.get(benchmarkGroup.category) ?? []
835
+ bucket.push(benchmarkGroup)
836
+ groups.set(benchmarkGroup.category, bucket)
837
+ }
838
+
839
+ return Array.from(groups.entries())
840
+ .sort((a, b) => (order.get(a[0]) ?? 999) - (order.get(b[0]) ?? 999))
841
+ .map(([category, groups]) => ({ category, groups }))
842
+ }, [filteredBenchmarkGroups, summary.categories_covered])
843
+
844
+ const overviewBenchmarkGroups =
845
+ selectedCategories.length > 0 || benchmarkSearch.trim()
846
+ ? filteredBenchmarkGroups
847
+ : benchmarkGroups
848
+
849
+ const bestBenchmark = overviewBenchmarkGroups[0]
850
+ const widestBenchmark = [...overviewBenchmarkGroups].sort((a, b) => getBenchmarkSpread(b) - getBenchmarkSpread(a))[0]
851
+ const repeatedBenchmarkCount = overviewBenchmarkGroups.filter((group) => group.variants.length > 1).length
852
+ const setupDrivenBenchmarkCount = overviewBenchmarkGroups.filter((group) =>
853
+ group.variants.some((variant) => variant.variantType === "setup" || variant.variantType === "setup+subtask")
854
+ ).length
855
+ const subtaskDrivenBenchmarkCount = overviewBenchmarkGroups.filter((group) =>
856
+ group.variants.some((variant) => variant.variantType === "subtask" || variant.variantType === "setup+subtask")
857
+ ).length
858
 
859
  useEffect(() => {
860
  if (!expandedBenchmarkKey) {
 
867
  }
868
  }, [expandedBenchmarkKey, filteredBenchmarkGroups])
869
 
870
+ useEffect(() => {
871
+ setSelectedCategories((current) =>
872
+ current.filter((category) => availableCategories.includes(category))
873
+ )
874
+ }, [availableCategories])
875
+
876
  const formatDate = (isoString: string) => {
877
  try {
878
  return new Date(isoString).toLocaleDateString('en-US', {
 
888
  }
889
 
890
  return (
891
+ <div className="space-y-4">
892
  <Card className="overflow-hidden">
893
+ <CardContent className="space-y-4 p-4 sm:p-5">
894
+ <div className="flex flex-col gap-4 xl:flex-row xl:items-start xl:justify-between">
895
+ <div className="space-y-2.5">
896
  <div className="flex flex-wrap items-center gap-2">
897
  <Badge variant="outline" className="border-border/60 bg-background/80 text-[11px] uppercase tracking-[0.18em]">
898
  Model Metadata
 
922
  )}
923
  </div>
924
 
925
+ <div className="grid w-full gap-2.5 sm:grid-cols-2 xl:w-[620px] xl:grid-cols-4">
926
+ <div className="rounded-2xl border border-sky-200/80 bg-sky-50/80 px-3.5 py-2.5 dark:border-sky-900/40 dark:bg-sky-950/20 dark:shadow-none">
927
  <div className="text-[10px] font-semibold tracking-[0.12em] text-sky-700 dark:text-sky-200 whitespace-nowrap">Benchmarks</div>
928
  <div className="mt-1 text-[1.8rem] font-semibold leading-none text-sky-950 dark:text-sky-50">{benchmarkGroups.length}</div>
929
  </div>
930
+ <div className="rounded-2xl border border-border/70 bg-muted/20 px-3.5 py-2.5 dark:shadow-none">
931
  <div className="text-[10px] font-semibold tracking-[0.12em] text-muted-foreground whitespace-nowrap">Results</div>
932
  <div className="mt-1 text-[1.8rem] font-semibold leading-none">{summary.total_evaluations}</div>
933
  </div>
934
+ <div className="rounded-2xl border border-emerald-200/80 bg-emerald-50/80 px-3.5 py-2.5 dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:shadow-none">
935
  <div className="text-[10px] font-semibold tracking-[0.12em] text-emerald-700 dark:text-emerald-200 whitespace-nowrap">
936
  Reporting orgs
937
  </div>
 
939
  {reportingStats.organizationCount}
940
  </div>
941
  </div>
942
+ <div className="rounded-2xl border border-amber-200/80 bg-amber-50/80 px-3.5 py-2.5 dark:border-amber-900/40 dark:bg-amber-950/20 dark:shadow-none">
943
  <div className="text-[10px] font-semibold tracking-[0.12em] text-amber-700 dark:text-amber-200 whitespace-nowrap">
944
  Source types
945
  </div>
 
950
  </div>
951
  </div>
952
 
953
+ <div className="grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(320px,0.92fr)]">
954
  <div className="rounded-[1.5rem] border bg-muted/10 p-4">
955
  <div className="text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
956
  System and evidence context
 
1038
  </div>
1039
  </div>
1040
  ) : (
1041
+ <div className="rounded-[1.5rem] border bg-amber-50/60 p-4 dark:bg-amber-950/20">
1042
  <div className="flex items-center gap-2">
1043
  <Scale className="h-4 w-4 text-primary" />
1044
  <div className="text-sm font-semibold">Public reading</div>
 
1077
  </CardContent>
1078
  </Card>
1079
 
1080
+ <section className="space-y-4">
1081
+ <div className="flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between">
1082
  <div className="space-y-1">
1083
  <h3 className="text-xl font-semibold">
1084
  {isResearchView ? "Benchmark Explorer" : "Reported Benchmark Signals"}
 
1090
  </p>
1091
  </div>
1092
 
1093
+ <div className="flex flex-col gap-2.5 sm:flex-row sm:flex-wrap sm:justify-end">
1094
+ <div className="relative w-full sm:w-[260px]">
1095
  <Search className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
1096
  <Input
1097
  value={benchmarkSearch}
 
1102
  </div>
1103
 
1104
  <Select value={benchmarkSort} onValueChange={(value) => setBenchmarkSort(value as typeof benchmarkSort)}>
1105
+ <SelectTrigger className="w-full sm:w-[200px]">
1106
  <SelectValue placeholder="Sort benchmarks" />
1107
  </SelectTrigger>
1108
  <SelectContent>
1109
  <SelectItem value="score">Highest score first</SelectItem>
1110
  <SelectItem value="name">Name (A-Z)</SelectItem>
1111
+ <SelectItem value="variants">Most subtasks</SelectItem>
1112
  <SelectItem value="spread">Largest setup swing</SelectItem>
1113
  </SelectContent>
1114
  </Select>
1115
  </div>
1116
  </div>
1117
 
1118
+ {availableCategories.length > 0 && (
1119
+ <div className="flex flex-wrap items-center gap-2">
1120
+ <span className="text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">
1121
+ Category
1122
+ </span>
1123
+ <button
1124
+ type="button"
1125
+ onClick={() => setSelectedCategories([])}
1126
+ className={`inline-flex items-center rounded-full border px-3 py-1 text-sm font-medium transition-colors ${
1127
+ selectedCategories.length === 0
1128
+ ? "border-foreground bg-foreground text-background"
1129
+ : "border-border/70 bg-background text-muted-foreground hover:text-foreground"
1130
+ }`}
1131
+ >
1132
+ All
1133
+ </button>
1134
+ {availableCategories.map((category) => {
1135
+ const isSelected = selectedCategories.includes(category)
1136
+
1137
+ return (
1138
+ <button
1139
+ key={category}
1140
+ type="button"
1141
+ onClick={() =>
1142
+ setSelectedCategories((current) =>
1143
+ current.includes(category)
1144
+ ? current.filter((item) => item !== category)
1145
+ : [...current, category]
1146
+ )
1147
+ }
1148
+ className={`inline-flex items-center rounded-full border px-3 py-1 text-sm font-medium transition-colors ${
1149
+ isSelected
1150
+ ? getCategoryTone(category)
1151
+ : "border-border/70 bg-background text-muted-foreground hover:text-foreground"
1152
+ }`}
1153
+ >
1154
+ {category}
1155
+ </button>
1156
+ )
1157
+ })}
1158
+ </div>
1159
+ )}
1160
+
1161
+ {/* Metadata toggle */}
1162
+ {benchmarkGroups.some((g) => !g.benchmarkCard) && (
1163
+ <div className="flex items-center gap-2 text-sm">
1164
+ <label className="flex cursor-pointer items-center gap-2 select-none">
1165
+ <input
1166
+ type="checkbox"
1167
+ checked={showWithoutMetadata}
1168
+ onChange={(e) => setShowWithoutMetadata(e.target.checked)}
1169
+ className="h-4 w-4 rounded border-border accent-primary"
1170
+ />
1171
+ <span className="text-muted-foreground">
1172
+ Show {benchmarkGroups.filter((g) => !g.benchmarkCard).length} benchmarks without rich metadata
1173
+ </span>
1174
+ </label>
1175
+ <span className="rounded-full border border-border/60 bg-muted/30 px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
1176
+ {benchmarkGroups.filter((g) => !!g.benchmarkCard).length} with metadata
1177
+ </span>
1178
+ </div>
1179
+ )}
1180
+
1181
+ <div className={`grid gap-3 ${isResearchView ? "md:grid-cols-3" : "md:grid-cols-2 xl:grid-cols-3"}`}>
1182
  {bestBenchmark && (
1183
+ <div className="rounded-2xl border bg-emerald-50/70 p-3.5 dark:bg-emerald-950/20">
1184
  <div className="text-[10px] font-semibold uppercase tracking-[0.16em] text-emerald-700/90 dark:text-emerald-300">
1185
  Strongest Reported Benchmark
1186
  </div>
1187
+ <div className="mt-1.5 text-sm font-semibold tracking-tight">
1188
+ <Link href={bestBenchmark.evalDetailHref} className="underline decoration-dotted underline-offset-4 hover:text-primary">
1189
+ {bestBenchmark.title}
1190
+ </Link>
1191
+ </div>
1192
+ <div className="mt-1 text-xs leading-5 text-muted-foreground">{bestBenchmark.description}</div>
1193
+ <div className="mt-2 text-[1.45rem] font-semibold tracking-tight text-emerald-700 dark:text-emerald-300">{bestBenchmark.avgDisplayScore}</div>
1194
  </div>
1195
  )}
1196
 
1197
  {widestBenchmark && (
1198
+ <div className="rounded-2xl border bg-amber-50/70 p-3.5 dark:bg-amber-950/20">
1199
  <div className="text-[10px] font-semibold uppercase tracking-[0.16em] text-amber-700/90 dark:text-amber-300">
1200
  Widest score gap
1201
  </div>
1202
+ <div className="mt-1.5 text-sm font-semibold tracking-tight">
1203
+ <Link href={widestBenchmark.evalDetailHref} className="underline decoration-dotted underline-offset-4 hover:text-primary">
1204
+ {widestBenchmark.title}
1205
+ </Link>
1206
+ </div>
1207
+ <div className="mt-1 text-xs leading-5 text-muted-foreground">
1208
+ {widestBenchmark.variants.length} subtask{widestBenchmark.variants.length === 1 ? "" : "s"} with the biggest spread between highest and lowest scores
1209
  </div>
1210
+ <div className="mt-2 text-[1.45rem] font-semibold tracking-tight text-amber-700 dark:text-amber-300">
1211
  {(getBenchmarkSpread(widestBenchmark) * 100).toFixed(1)} pts
1212
  </div>
1213
  </div>
1214
  )}
1215
 
1216
+ <div className="rounded-2xl border bg-sky-50/70 p-3.5 dark:bg-sky-950/20">
1217
  <div className="text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-700/90 dark:text-sky-300">
1218
  Coverage Snapshot
1219
  </div>
1220
+ <div className="mt-1.5 text-sm font-semibold tracking-tight">{benchmarkGroups.length} benchmarks</div>
1221
+ <div className="mt-1 text-xs leading-5 text-muted-foreground">
1222
+ {repeatedBenchmarkCount} benchmark{repeatedBenchmarkCount === 1 ? "" : "s"} include multiple subtasks.
1223
  </div>
1224
+ <div className="mt-2 text-xs font-medium text-sky-700 dark:text-sky-300">
1225
  {filteredBenchmarkGroups.length} shown after filters
1226
  </div>
1227
  </div>
 
1229
 
1230
  {filteredBenchmarkGroups.length === 0 ? (
1231
  <div className="rounded-2xl border border-dashed p-8 text-center text-sm text-muted-foreground">
1232
+ No benchmarks match the current search or category filters.
1233
  </div>
1234
  ) : (
1235
+ <div className="space-y-5">
1236
+ {groupedFilteredBenchmarkGroups.map(({ category, groups }, sectionIndex) => (
1237
+ <section key={category} className="space-y-3">
1238
+ <div className="flex items-center gap-3">
1239
+ <span className={`inline-flex items-center rounded-full border px-3 py-1 text-xs font-semibold ${getCategoryTone(category)}`}>
1240
+ {category}
1241
+ </span>
1242
+ <div className="text-sm text-muted-foreground">
1243
+ {groups.length} benchmark{groups.length === 1 ? "" : "s"}
1244
+ </div>
1245
+ </div>
1246
+
1247
+ <div className="space-y-2.5">
1248
+ {groups.map((group, index) => (
1249
+ <AggregatedBenchmarkCard
1250
+ key={`${category}-${group.key}`}
1251
+ group={group}
1252
+ isOpen={expandedBenchmarkKey === group.key}
1253
+ motionIndex={sectionIndex * 6 + index}
1254
+ onOpenChange={(open) =>
1255
+ setExpandedBenchmarkKey((current) => {
1256
+ if (open) {
1257
+ return group.key
1258
+ }
1259
+
1260
+ return current === group.key ? null : current
1261
+ })
1262
+ }
1263
+ />
1264
+ ))}
1265
+ </div>
1266
+ </section>
1267
  ))}
1268
  </div>
1269
  )}
 
2011
  }, Number.NEGATIVE_INFINITY)
2012
  const latestReportedLabel =
2013
  Number.isFinite(latestTimestamp) ? formatCompactDate(String(latestTimestamp)) : formatCompactDate(group.variants[0]?.evaluation.retrieved_timestamp ?? "")
2014
+ const compactDomains = group.domains.slice(0, 2)
2015
+ const progressWidth = Math.max(4, Math.min(100, group.avgNormalizedScore * 100))
2016
 
2017
  const toggleRow = (rowKey: string) => {
2018
  setExpandedRows((current) => ({
 
2023
 
2024
  return (
2025
  <div
2026
+ className="motion-academic-enter"
2027
  style={{ "--enter-delay": `${Math.min(motionIndex * 55, 260)}ms` } as CSSProperties}
2028
  >
2029
  <Collapsible open={isOpen} onOpenChange={onOpenChange}>
2030
+ <Card className="motion-academic-surface overflow-hidden border border-border/70 bg-card shadow-[0_1px_0_rgba(255,255,255,0.3),0_8px_24px_rgba(15,23,42,0.04)] dark:shadow-[0_1px_0_rgba(255,255,255,0.02)]">
2031
+ <div
2032
+ role="button"
2033
+ tabIndex={0}
2034
+ onClick={() => onOpenChange(!isOpen)}
2035
+ onKeyDown={(event) => {
2036
+ if (event.key === "Enter" || event.key === " ") {
2037
+ event.preventDefault()
2038
+ onOpenChange(!isOpen)
2039
+ }
2040
+ }}
2041
+ className="block w-full cursor-pointer px-3.5 py-2.5 text-left transition-colors hover:bg-muted/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2042
+ >
2043
+ {/* Compact single-row layout */}
2044
+ <div className="flex items-center gap-3">
2045
+ {/* Category dot */}
2046
+ <span className={`shrink-0 inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-semibold ${getCategoryTone(group.category)}`}>
2047
+ {group.category}
2048
+ </span>
2049
+
2050
+ {/* Name + domains */}
2051
+ <div className="min-w-0 flex-1">
2052
+ <div className="flex flex-wrap items-center gap-2">
2053
+ <Link
2054
+ href={group.evalDetailHref}
2055
+ onClick={(event) => event.stopPropagation()}
2056
+ className="text-sm font-semibold tracking-tight text-foreground/95 underline decoration-dotted underline-offset-4 hover:text-primary"
2057
+ >
2058
+ {group.title}
2059
+ </Link>
2060
+ {group.benchmarkCard && (
2061
+ <span className="shrink-0 rounded-full border border-border/50 bg-muted/30 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-[0.12em] text-muted-foreground">
2062
+ card
2063
+ </span>
2064
+ )}
2065
+ {compactDomains.map((domain) => (
2066
+ <span
2067
+ key={`${group.key}-${domain}`}
2068
+ className="hidden sm:inline-flex items-center rounded-full border border-border/50 bg-background/60 px-2 py-0.5 text-[10px] font-medium capitalize text-muted-foreground"
2069
+ >
2070
+ {domain}
2071
+ </span>
2072
+ ))}
2073
+ {group.domains.length > compactDomains.length && (
2074
+ <span className="hidden sm:inline text-[10px] text-muted-foreground/70">+{group.domains.length - compactDomains.length}</span>
2075
+ )}
2076
+ </div>
2077
  </div>
2078
 
2079
+ {/* Score bar + score — right side */}
2080
+ <div className="hidden md:flex shrink-0 items-center gap-2.5 w-[180px] lg:w-[190px]">
2081
+ <div className="flex-1 h-1.5 overflow-hidden rounded-full bg-muted/60">
2082
+ <div
2083
+ className="h-full rounded-full bg-foreground/70 transition-[width] duration-300"
2084
+ style={{ width: `${progressWidth}%` }}
2085
+ />
2086
+ </div>
2087
+ <span className="w-12 shrink-0 text-right text-sm font-semibold tabular-nums text-foreground/90">
2088
+ {group.avgDisplayScore}
2089
+ </span>
2090
  </div>
2091
 
2092
+ {/* Subtask count */}
2093
+ <span className="shrink-0 text-[11px] text-muted-foreground w-16 text-right hidden sm:block">
2094
+ {group.variants.length} {group.variants.length === 1 ? "subtask" : "subtasks"}
2095
+ </span>
2096
+
2097
+ {/* Expand toggle */}
2098
+ <div className="shrink-0 text-muted-foreground">
2099
+ {isOpen ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
2100
+ </div>
2101
+ </div>
2102
+ </div>
2103
+
2104
+ <CollapsibleContent>
2105
+ <Separator />
2106
+ <CardContent className="bg-muted/5 p-4 sm:p-5">
2107
+ <div className="space-y-2.5">
2108
+ {group.benchmarkCard && (
2109
+ <div className="rounded-2xl border border-border/70 bg-background/90 p-3.5">
2110
+ <div className="flex flex-wrap items-start justify-between gap-3">
2111
+ <div className="min-w-0 space-y-1">
2112
+ <div className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">
2113
+ Benchmark context
2114
+ </div>
2115
+ <div className="text-base font-semibold">
2116
+ {group.benchmarkCard.benchmark_details.name}
2117
+ </div>
2118
+ <p className="max-w-3xl text-sm leading-6 text-muted-foreground">
2119
+ {group.benchmarkCard.benchmark_details.overview}
2120
+ </p>
2121
  </div>
2122
+ <div className="flex flex-wrap gap-1.5">
2123
+ <Badge variant="outline" className="font-normal">
2124
+ {group.benchmarkCard.benchmark_details.data_type}
2125
+ </Badge>
2126
+ {group.benchmarkCard.methodology.metrics.slice(0, 2).map((metric) => (
2127
+ <Badge key={`${group.key}-${metric}`} variant="secondary" className="font-normal">
2128
+ {metric}
2129
  </Badge>
2130
+ ))}
2131
  </div>
2132
  </div>
2133
+ <div className="mt-3 grid gap-3 lg:grid-cols-3">
2134
+ <div className="rounded-xl border bg-muted/10 p-3">
2135
+ <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2136
+ Goal
2137
+ </div>
2138
+ <div className="mt-1 text-sm text-foreground/90">
2139
+ {group.benchmarkCard.purpose_and_intended_users.goal}
2140
+ </div>
2141
  </div>
2142
+ <div className="rounded-xl border bg-muted/10 p-3">
2143
+ <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2144
+ Methods
2145
+ </div>
2146
+ <div className="mt-1 text-sm text-foreground/90">
2147
+ {group.benchmarkCard.methodology.methods.slice(0, 2).join(", ") || "Not specified"}
2148
+ </div>
2149
  </div>
2150
+ <div className="rounded-xl border bg-muted/10 p-3">
2151
+ <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2152
+ Caveat
2153
+ </div>
2154
+ <div className="mt-1 text-sm text-foreground/90">
2155
+ {group.benchmarkCard.purpose_and_intended_users.limitations}
2156
+ </div>
2157
  </div>
 
2158
  </div>
2159
  </div>
2160
+ )}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2161
 
 
 
 
 
2162
  <div>
2163
  <div className="text-xs font-semibold text-muted-foreground uppercase tracking-wider">
2164
+ Subtasks
2165
  </div>
2166
  <div className="text-xs text-muted-foreground mt-1">
2167
  {isResearchView
2168
  ? "Setup changes and benchmark subtasks are shown separately so you can tell methodological differences from benchmark decomposition."
2169
+ : "Different setups and benchmark subtasks are visually separated so policy review does not confuse reporting choices with benchmark decomposition."}
2170
  </div>
2171
  </div>
2172
 
 
2257
  className="motion-academic-enter-soft overflow-hidden rounded-xl border bg-background"
2258
  style={{ "--enter-delay": `${Math.min(index * 40, 180)}ms` } as CSSProperties}
2259
  >
2260
+ <button
2261
+ type="button"
2262
+ className="block w-full p-4 text-left transition-colors hover:bg-muted/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2263
+ onClick={() => toggleRow(rowKey)}
2264
+ >
2265
  <div className="flex flex-col gap-3">
2266
  <div className="flex items-start justify-between gap-3">
2267
  <div className="flex min-w-0 items-start gap-3">
 
2284
  </div>
2285
  </div>
2286
 
2287
+ <span className="inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full border border-border/60 bg-background/80">
 
 
 
 
 
2288
  {isRowOpen ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
2289
  <span className="sr-only">Toggle variant details</span>
2290
+ </span>
2291
  </div>
2292
 
2293
+ <div className="grid gap-3 border-t border-border/50 pt-3 lg:grid-cols-[minmax(0,1.1fr)_minmax(180px,1fr)_110px_150px]">
2294
+ <div className="min-w-0">
2295
+ <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2296
+ {isResearchView ? "Config" : "Setup"}
2297
+ </div>
2298
+ <div className="mt-1 text-sm font-medium text-foreground/90" title={getTableConfigLabel(row)}>
 
 
 
 
2299
  {getConfigDisplayValue(getTableConfigLabel(row))}
2300
+ </div>
2301
+ </div>
2302
 
2303
+ <div className="min-w-0">
2304
+ <div className="flex items-center justify-between text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2305
+ <span>{isResearchView ? "Relative score" : "Evidence context"}</span>
2306
+ <span>{index === 0 ? "Leader" : `-${(gapToLeader * 100).toFixed(1)} pts`}</span>
2307
+ </div>
2308
  {isResearchView ? (
2309
+ <>
2310
+ <div className="mt-2 h-2 overflow-hidden rounded-full bg-muted">
2311
+ <div
2312
+ className="h-full rounded-full bg-foreground/70"
2313
+ style={{
2314
+ width: `${leaderNormalizedScore > 0 ? Math.max(4, (variant.normalizedScore / leaderNormalizedScore) * 100) : 100}%`,
2315
+ }}
2316
+ />
2317
  </div>
2318
+ <div className="mt-1 text-[12px] text-muted-foreground">
2319
+ {variant.evaluation.source_metadata.evaluator_relationship.replace(/_/g, " ")}
2320
+ </div>
2321
+ </>
 
2322
  ) : (
2323
+ <div className="mt-1 text-sm capitalize text-muted-foreground">
2324
  {variant.evaluation.source_metadata.evaluator_relationship.replace(/_/g, " ")}
2325
  </div>
2326
  )}
2327
+ </div>
2328
+
2329
+ <div>
2330
+ <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2331
+ Score
2332
+ </div>
2333
+ <div className="mt-1 text-lg font-semibold tracking-tight">{variant.displayScore}</div>
2334
+ </div>
2335
+
2336
+ <div className="min-w-0">
2337
+ <div className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
2338
+ {isResearchView ? "Source" : "Evidence"}
2339
+ </div>
2340
+ <div className="mt-1 truncate text-sm font-medium text-foreground/90">
2341
+ {variant.evaluation.source_metadata.source_organization_name}
2342
+ </div>
2343
+ <div className="text-[12px] text-muted-foreground">
2344
+ {evidenceStatus}
 
 
 
2345
  </div>
2346
+ </div>
2347
  </div>
2348
  </div>
2349
+ </button>
2350
 
2351
  {isRowOpen && (
2352
  <div className="border-t bg-muted/10 p-4">
 
2363
 
2364
  {filteredRows.length === 0 && (
2365
  <div className="rounded-xl border bg-background p-6 text-center text-sm text-muted-foreground">
2366
+ No subtasks match the current filters.
2367
  </div>
2368
  )}
2369
  </div>
 
2557
  )
2558
  }
2559
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2560
  function AllEvaluationsView({ evaluations }: { evaluations: BenchmarkEvaluation[] }) {
2561
  return (
2562
  <div className="space-y-6">
components/benchmark-evaluation-card.tsx CHANGED
@@ -1,11 +1,11 @@
1
  "use client"
2
 
3
  import type { CSSProperties } from "react"
 
4
  import { useAudienceMode } from "@/components/audience-mode-provider"
5
  import { useRouter } from "next/navigation"
6
  import {
7
  Award,
8
- BookOpenText,
9
  ChevronDown,
10
  CheckCircle2,
11
  ExternalLink,
@@ -18,12 +18,14 @@ import {
18
  } from "lucide-react"
19
 
20
  import type { CategoryType } from "@/lib/benchmark-schema"
 
 
 
21
  import { Badge } from "@/components/ui/badge"
22
  import { Button } from "@/components/ui/button"
23
  import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
24
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"
25
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
26
- import { Progress } from "@/components/ui/progress"
27
 
28
  export type BenchmarkEvaluationCardData = {
29
  id: string
@@ -76,6 +78,7 @@ export type BenchmarkEvaluationCardData = {
76
 
77
  interface BenchmarkEvaluationCardProps {
78
  data: BenchmarkEvaluationCardData
 
79
  onDelete?: (id: string) => void
80
  delayMs?: number
81
  selectedForCompare?: boolean
@@ -100,32 +103,6 @@ function formatDate(isoString: string) {
100
  }
101
  }
102
 
103
- function formatHighlightScore(score: number, unit?: string) {
104
- if (unit === "accuracy" || unit === "pass@1" || (!unit && score >= 0 && score <= 1)) {
105
- return `${(score * 100).toFixed(1)}%`
106
- }
107
- if (unit === "points") return score.toFixed(1)
108
- return score.toFixed(2)
109
- }
110
-
111
- function scoreToPercent(score: number, unit?: string): number {
112
- if (score >= 0 && score <= 1) return score * 100
113
- return Math.min(Math.max(score, 0), 100)
114
- }
115
-
116
- function getPolicyBenchmarkLabel(name: string) {
117
- const value = name.toLowerCase()
118
- if (value.includes("ifeval")) return "Following instructions"
119
- if (value.includes("bbh")) return "Reasoning and logic"
120
- if (value.includes("math")) return "Advanced mathematics"
121
- if (value.includes("gpqa")) return "Expert knowledge"
122
- if (value.includes("musr")) return "Narrative reasoning"
123
- if (value.includes("mmlu")) return "Broad knowledge"
124
- if (value.includes("tau-bench")) return "Agentic task completion"
125
- if (value.includes("swe-bench")) return "Software engineering"
126
- return name
127
- }
128
-
129
  function formatParamsBillions(value: number | null | undefined) {
130
  if (value == null || Number.isNaN(value)) return null
131
  if (value >= 100) return `${Math.round(value)}B`
@@ -181,8 +158,84 @@ function getIndependentSummary(data: BenchmarkEvaluationCardData) {
181
  return "Self-reported only"
182
  }
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  export function BenchmarkEvaluationCard({
185
  data,
 
186
  onDelete,
187
  delayMs = 0,
188
  selectedForCompare = false,
@@ -191,7 +244,32 @@ export function BenchmarkEvaluationCard({
191
  const router = useRouter()
192
  const { mode } = useAudienceMode()
193
  const isResearchView = mode === "research"
194
- const highlights = data.top_scores.slice(0, 3)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  const library = data.eval_libraries[0]
196
  const paramsBillions = formatParamsBillions(data.params_billions)
197
  const reportingSummaryLabel = getReportingSummaryLabel(data)
@@ -291,74 +369,49 @@ export function BenchmarkEvaluationCard({
291
  </CardHeader>
292
 
293
  <CardContent className="space-y-4 pt-4">
294
- <div className="grid grid-cols-3 gap-2">
295
- <CompactStat
296
- label={isResearchView ? "Benchmarks" : "Coverage"}
297
- value={data.benchmarks_count.toString()}
298
- tone="bg-sky-50 text-sky-900 ring-1 ring-sky-200/70 dark:bg-sky-950/25 dark:text-sky-100 dark:ring-sky-900/50"
299
- />
300
- <CompactStat
301
- label={isResearchView ? "Results" : "Reported"}
302
- value={data.evaluations_count.toString()}
303
- tone="bg-stone-100 text-stone-900 ring-1 ring-stone-200/80 dark:bg-stone-900/40 dark:text-stone-100 dark:ring-stone-800/70"
304
- />
305
- <CompactStat
306
- label="Reporting Orgs"
307
- value={data.evaluator_count.toString()}
308
- tone="bg-emerald-50 text-emerald-900 ring-1 ring-emerald-200/70 dark:bg-emerald-950/25 dark:text-emerald-100 dark:ring-emerald-900/50"
309
- />
310
- </div>
311
-
312
  <div className="rounded-2xl border border-border/70 bg-muted/10 px-4 py-3">
313
- <div className="flex flex-wrap items-center gap-2">
314
- <Badge variant="outline">{reportingSummaryLabel}</Badge>
315
- <Badge variant={reproducibility.tone}>
316
- <reproducibility.icon className="h-3.5 w-3.5" />
317
- {reproducibility.label}
318
- </Badge>
319
- <Badge variant={data.independent_verification_ratio > 0 ? "secondary" : "outline"}>
320
- <ShieldCheck className="h-3.5 w-3.5" />
321
- {independentSummary}
322
- </Badge>
 
 
 
323
  </div>
324
- <div className="mt-2 text-sm text-muted-foreground">
325
- {isResearchView
326
- ? "Most useful signals first: benchmark coverage, reproducibility, and benchmark-level performance. Open the details panel only when you need methodology or provenance."
327
- : "Most useful signals first: benchmark coverage, reporting posture, and what was actually tested. Open the details panel if you need source or methodology context."}
328
  </div>
329
  </div>
330
 
331
- {highlights.length > 0 ? (
332
- <section className="space-y-3">
333
- <div className="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">
334
- {isResearchView ? (
335
- <FlaskConical className="h-3.5 w-3.5" />
336
- ) : (
337
- <BookOpenText className="h-3.5 w-3.5" />
338
- )}
339
- {isResearchView ? "Most Relevant Benchmarks" : "What Was Tested"}
340
  </div>
341
- <div className="overflow-hidden rounded-2xl border border-border/70">
342
- {highlights.map((item, index) => (
343
- <SignalRow
344
- key={item.benchmark}
345
- rank={index + 1}
346
- label={isResearchView ? item.benchmark : getPolicyBenchmarkLabel(item.benchmark)}
347
- rawLabel={
348
- isResearchView
349
- ? item.metric !== item.benchmark
350
- ? item.metric
351
- : undefined
352
- : item.benchmark
353
- }
354
- scoreLabel={formatHighlightScore(item.score, item.unit)}
355
- scorePercent={scoreToPercent(item.score, item.unit)}
356
- isLast={index === highlights.length - 1}
357
- />
358
- ))}
359
  </div>
360
- </section>
361
- ) : null}
362
 
363
  <Collapsible className="rounded-2xl border border-border/70 bg-background">
364
  <CollapsibleTrigger asChild>
@@ -372,7 +425,7 @@ export function BenchmarkEvaluationCard({
372
  Dive Deeper
373
  </div>
374
  <div className="mt-1 text-sm font-semibold text-foreground">
375
- Show reporting and methodology details
376
  </div>
377
  </div>
378
  <ChevronDown className="h-4 w-4 text-muted-foreground" />
@@ -380,28 +433,51 @@ export function BenchmarkEvaluationCard({
380
  </CollapsibleTrigger>
381
  <CollapsibleContent onClick={(event) => event.stopPropagation()} className="border-t border-border/60 px-4 py-4">
382
  <div className="space-y-0 text-sm">
383
- <KeyValueRow label="Reporting sources" value={reportingSummaryLabel} />
384
- {library && (
385
- <KeyValueRow label="Library" value={`${library.name}${library.version ? ` ${library.version}` : ""}`} />
386
- )}
387
- {data.latest_source_name && (
388
- <KeyValueRow label="Latest report" value={data.latest_source_name} />
389
- )}
390
- <KeyValueRow label="Updated" value={formatDate(data.latest_timestamp)} />
391
- <KeyValueRow label="Reproducibility" value={reproducibility.label} />
392
- <KeyValueRow label="Independence" value={independentSummary} />
393
- {data.source_types.length > 0 && (
394
- <KeyValueRow label="Source types" value={data.source_types.map((s) => s.replace(/_/g, " ")).join(", ")} />
395
- )}
396
- {data.architecture && <KeyValueRow label="Architecture" value={data.architecture} />}
397
- {data.missing_generation_config_count > 0 && (
398
- <KeyValueRow label="Missing config" value={`${data.missing_generation_config_count} result${data.missing_generation_config_count !== 1 ? "s" : ""}`} />
399
- )}
400
- {library?.fork && (
401
- <div className="mt-3 flex items-start gap-2 rounded-xl bg-amber-50/80 px-3 py-2 text-xs text-amber-900 dark:bg-amber-950/20 dark:text-amber-200">
402
- <LibraryBig className="mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-600 dark:text-amber-300" />
403
- <span>Non-standard eval library fork</span>
404
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
405
  )}
406
  </div>
407
  </CollapsibleContent>
@@ -411,23 +487,6 @@ export function BenchmarkEvaluationCard({
411
  )
412
  }
413
 
414
- function CompactStat({
415
- label,
416
- value,
417
- tone,
418
- }: {
419
- label: string
420
- value: string
421
- tone: string
422
- }) {
423
- return (
424
- <div className={`rounded-2xl px-3 py-2.5 ${tone}`}>
425
- <div className="text-[10px] font-semibold uppercase tracking-[0.2em] opacity-80">{label}</div>
426
- <div className="mt-1 text-base font-bold tabular-nums">{value}</div>
427
- </div>
428
- )
429
- }
430
-
431
  function KeyValueRow({ label, value }: { label: string; value: string }) {
432
  return (
433
  <div className="grid grid-cols-[7rem_minmax(0,1fr)] items-start gap-x-3 border-b border-border/40 py-2 last:border-b-0 last:pb-0 first:pt-0">
@@ -438,39 +497,3 @@ function KeyValueRow({ label, value }: { label: string; value: string }) {
438
  </div>
439
  )
440
  }
441
-
442
- function SignalRow({
443
- rank,
444
- label,
445
- rawLabel,
446
- scoreLabel,
447
- scorePercent,
448
- isLast,
449
- }: {
450
- rank: number
451
- label: string
452
- rawLabel?: string
453
- scoreLabel: string
454
- scorePercent: number
455
- isLast?: boolean
456
- }) {
457
- return (
458
- <div className={`px-3 py-3 ${isLast ? "" : "border-b border-border/60"}`}>
459
- <div className="flex items-start gap-3">
460
- <div className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground">
461
- {rank}
462
- </div>
463
- <div className="min-w-0 flex-1">
464
- <div className="flex items-start justify-between gap-3">
465
- <div className="min-w-0">
466
- <div className="truncate text-sm font-semibold">{label}</div>
467
- {rawLabel && <div className="truncate text-xs text-muted-foreground">{rawLabel}</div>}
468
- </div>
469
- <div className="shrink-0 text-sm font-semibold tabular-nums">{scoreLabel}</div>
470
- </div>
471
- <Progress value={scorePercent} className="mt-2 h-1.5" />
472
- </div>
473
- </div>
474
- </div>
475
- )
476
- }
 
1
  "use client"
2
 
3
  import type { CSSProperties } from "react"
4
+ import { useMemo } from "react"
5
  import { useAudienceMode } from "@/components/audience-mode-provider"
6
  import { useRouter } from "next/navigation"
7
  import {
8
  Award,
 
9
  ChevronDown,
10
  CheckCircle2,
11
  ExternalLink,
 
18
  } from "lucide-react"
19
 
20
  import type { CategoryType } from "@/lib/benchmark-schema"
21
+ import { getCategoryColor } from "@/lib/benchmark-schema"
22
+ import type { BenchmarkCard } from "@/lib/benchmark-schema"
23
+ import { lookupBenchmarkCard } from "@/lib/benchmark-metadata-utils"
24
  import { Badge } from "@/components/ui/badge"
25
  import { Button } from "@/components/ui/button"
26
  import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
27
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"
28
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
 
29
 
30
  export type BenchmarkEvaluationCardData = {
31
  id: string
 
78
 
79
  interface BenchmarkEvaluationCardProps {
80
  data: BenchmarkEvaluationCardData
81
+ benchmarkCards?: Record<string, BenchmarkCard>
82
  onDelete?: (id: string) => void
83
  delayMs?: number
84
  selectedForCompare?: boolean
 
103
  }
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  function formatParamsBillions(value: number | null | undefined) {
107
  if (value == null || Number.isNaN(value)) return null
108
  if (value >= 100) return `${Math.round(value)}B`
 
158
  return "Self-reported only"
159
  }
160
 
161
+ const CATEGORY_PLOT_COLORS: Record<string, string> = {
162
+ "Core Performance": "#2563eb",
163
+ "Core Quality Dimensions": "#7c3aed",
164
+ "Robustness": "#0f766e",
165
+ "Calibration": "#0891b2",
166
+ "Adversarial": "#dc2626",
167
+ "Memorization": "#9333ea",
168
+ "Fairness": "#ea580c",
169
+ "Safety": "#16a34a",
170
+ "Leakage/Contamination": "#be123c",
171
+ "Privacy": "#0d9488",
172
+ "Interpretability": "#6366f1",
173
+ "Efficiency": "#ca8a04",
174
+ "Retrainability": "#1d4ed8",
175
+ "Meta-Learning": "#9333ea",
176
+ }
177
+
178
+ function getCategoryPlotColor(category: string) {
179
+ return CATEGORY_PLOT_COLORS[category] ?? "#64748b"
180
+ }
181
+
182
+ function CategoryCoveragePlot({
183
+ coverage,
184
+ }: {
185
+ coverage: Array<{ category: CategoryType; count: number }>
186
+ }) {
187
+ if (coverage.length === 0) {
188
+ return (
189
+ <div className="rounded-xl border border-dashed border-border/60 px-3 py-4 text-sm text-muted-foreground">
190
+ No category coverage recorded.
191
+ </div>
192
+ )
193
+ }
194
+
195
+ const totalCount = coverage.reduce((sum, item) => sum + item.count, 0)
196
+
197
+ return (
198
+ <div className="space-y-2">
199
+ <div
200
+ className="flex h-3 w-full items-stretch gap-1 rounded-full bg-muted/70"
201
+ aria-label="Category coverage distribution"
202
+ role="img"
203
+ >
204
+ {coverage.map((item) => (
205
+ <div
206
+ key={item.category}
207
+ className="min-w-2 rounded-full"
208
+ style={{
209
+ width: `${(item.count / totalCount) * 100}%`,
210
+ backgroundColor: getCategoryPlotColor(item.category),
211
+ }}
212
+ title={`${item.category}: ${item.count} benchmark${item.count !== 1 ? "s" : ""}`}
213
+ />
214
+ ))}
215
+ </div>
216
+
217
+ <div className="flex flex-wrap gap-1.5">
218
+ {coverage.slice(0, 4).map((item) => (
219
+ <span
220
+ key={item.category}
221
+ className={`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold ${getCategoryColor(item.category)}`}
222
+ >
223
+ <span
224
+ className="h-1.5 w-1.5 rounded-full"
225
+ style={{ backgroundColor: getCategoryPlotColor(item.category) }}
226
+ />
227
+ {item.category}
228
+ <span className="opacity-70">{item.count}</span>
229
+ </span>
230
+ ))}
231
+ </div>
232
+ </div>
233
+ )
234
+ }
235
+
236
  export function BenchmarkEvaluationCard({
237
  data,
238
+ benchmarkCards,
239
  onDelete,
240
  delayMs = 0,
241
  selectedForCompare = false,
 
244
  const router = useRouter()
245
  const { mode } = useAudienceMode()
246
  const isResearchView = mode === "research"
247
+
248
+ // Collect unique domains from this model's benchmarks using metadata cards
249
+ const modelDomains = useMemo(() => {
250
+ if (!benchmarkCards) return []
251
+ const domainCounts = new Map<string, number>()
252
+ for (const { benchmark } of data.top_scores) {
253
+ const card = lookupBenchmarkCard(benchmarkCards, benchmark)
254
+ for (const domain of card?.benchmark_details?.domains ?? []) {
255
+ domainCounts.set(domain, (domainCounts.get(domain) ?? 0) + 1)
256
+ }
257
+ }
258
+ return Array.from(domainCounts.entries())
259
+ .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
260
+ .map(([domain]) => domain)
261
+ }, [benchmarkCards, data.top_scores])
262
+ const categoryCoverage = useMemo(
263
+ () =>
264
+ Object.entries(data.category_stats)
265
+ .filter(([, count]) => count > 0)
266
+ .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
267
+ .map(([category, count]) => ({
268
+ category: category as CategoryType,
269
+ count,
270
+ })),
271
+ [data.category_stats]
272
+ )
273
  const library = data.eval_libraries[0]
274
  const paramsBillions = formatParamsBillions(data.params_billions)
275
  const reportingSummaryLabel = getReportingSummaryLabel(data)
 
369
  </CardHeader>
370
 
371
  <CardContent className="space-y-4 pt-4">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  <div className="rounded-2xl border border-border/70 bg-muted/10 px-4 py-3">
373
+ <div className="flex flex-wrap items-center justify-between gap-3">
374
+ <div>
375
+ <div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">
376
+ Category coverage
377
+ </div>
378
+ <div className="mt-1 text-sm text-muted-foreground">
379
+ {categoryCoverage.length} {categoryCoverage.length === 1 ? "category" : "categories"}
380
+ </div>
381
+ </div>
382
+ <div className="text-right">
383
+ <div className="text-lg font-semibold tabular-nums text-foreground">{data.evaluator_count}</div>
384
+ <div className="text-[11px] uppercase tracking-[0.18em] text-muted-foreground">reporting orgs</div>
385
+ </div>
386
  </div>
387
+
388
+ <div className="mt-3">
389
+ <CategoryCoveragePlot coverage={categoryCoverage} />
 
390
  </div>
391
  </div>
392
 
393
+ {modelDomains.length > 0 && (
394
+ <div className="space-y-2">
395
+ <div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">
396
+ Top domain coverage
 
 
 
 
 
397
  </div>
398
+ <div className="flex flex-wrap gap-1.5">
399
+ {modelDomains.slice(0, 5).map((domain) => (
400
+ <span
401
+ key={domain}
402
+ className="inline-flex items-center rounded-full border border-border/50 bg-muted/40 px-2.5 py-0.5 text-[11px] font-medium capitalize text-muted-foreground"
403
+ >
404
+ {domain}
405
+ </span>
406
+ ))}
407
+ {modelDomains.length > 5 && (
408
+ <span className="inline-flex items-center rounded-full border border-border/50 bg-muted/40 px-2.5 py-0.5 text-[11px] font-medium text-muted-foreground">
409
+ +{modelDomains.length - 5} more
410
+ </span>
411
+ )}
 
 
 
 
412
  </div>
413
+ </div>
414
+ )}
415
 
416
  <Collapsible className="rounded-2xl border border-border/70 bg-background">
417
  <CollapsibleTrigger asChild>
 
425
  Dive Deeper
426
  </div>
427
  <div className="mt-1 text-sm font-semibold text-foreground">
428
+ {isResearchView ? "Methodology & provenance details" : "Reporting & accountability details"}
429
  </div>
430
  </div>
431
  <ChevronDown className="h-4 w-4 text-muted-foreground" />
 
433
  </CollapsibleTrigger>
434
  <CollapsibleContent onClick={(event) => event.stopPropagation()} className="border-t border-border/60 px-4 py-4">
435
  <div className="space-y-0 text-sm">
436
+ {isResearchView ? (
437
+ <>
438
+ <KeyValueRow label="Reporting sources" value={reportingSummaryLabel} />
439
+ {library && (
440
+ <KeyValueRow label="Library" value={`${library.name}${library.version ? ` ${library.version}` : ""}`} />
441
+ )}
442
+ {data.latest_source_name && (
443
+ <KeyValueRow label="Latest report" value={data.latest_source_name} />
444
+ )}
445
+ <KeyValueRow label="Updated" value={formatDate(data.latest_timestamp)} />
446
+ <KeyValueRow label="Reproducibility" value={reproducibility.label} />
447
+ <KeyValueRow label="Independence" value={independentSummary} />
448
+ {data.source_types.length > 0 && (
449
+ <KeyValueRow label="Source types" value={data.source_types.map((s) => s.replace(/_/g, " ")).join(", ")} />
450
+ )}
451
+ {data.architecture && <KeyValueRow label="Architecture" value={data.architecture} />}
452
+ {data.missing_generation_config_count > 0 && (
453
+ <KeyValueRow label="Missing config" value={`${data.missing_generation_config_count} result${data.missing_generation_config_count !== 1 ? "s" : ""}`} />
454
+ )}
455
+ {library?.fork && (
456
+ <div className="mt-3 flex items-start gap-2 rounded-xl bg-amber-50/80 px-3 py-2 text-xs text-amber-900 dark:bg-amber-950/20 dark:text-amber-200">
457
+ <LibraryBig className="mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-600 dark:text-amber-300" />
458
+ <span>Non-standard eval library fork</span>
459
+ </div>
460
+ )}
461
+ </>
462
+ ) : (
463
+ <>
464
+ <KeyValueRow label="Who reported" value={reportingSummaryLabel} />
465
+ <KeyValueRow label="Independence" value={independentSummary} />
466
+ <KeyValueRow label="Reproducibility" value={reproducibility.label} />
467
+ {data.latest_source_name && (
468
+ <KeyValueRow label="Latest source" value={data.latest_source_name} />
469
+ )}
470
+ <KeyValueRow label="Updated" value={formatDate(data.latest_timestamp)} />
471
+ {data.source_types.length > 0 && (
472
+ <KeyValueRow label="Evidence types" value={data.source_types.map((s) => s.replace(/_/g, " ")).join(", ")} />
473
+ )}
474
+ {data.missing_generation_config_count > 0 && (
475
+ <div className="mt-3 flex items-start gap-2 rounded-xl bg-amber-50/80 px-3 py-2 text-xs text-amber-900 dark:bg-amber-950/20 dark:text-amber-200">
476
+ <LibraryBig className="mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-600 dark:text-amber-300" />
477
+ <span>{data.missing_generation_config_count} result{data.missing_generation_config_count !== 1 ? "s" : ""} lack documented generation settings — comparisons should be read with care.</span>
478
+ </div>
479
+ )}
480
+ </>
481
  )}
482
  </div>
483
  </CollapsibleContent>
 
487
  )
488
  }
489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
490
  function KeyValueRow({ label, value }: { label: string; value: string }) {
491
  return (
492
  <div className="grid grid-cols-[7rem_minmax(0,1fr)] items-start gap-x-3 border-b border-border/40 py-2 last:border-b-0 last:pb-0 first:pt-0">
 
497
  </div>
498
  )
499
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/eval-card.tsx CHANGED
@@ -15,6 +15,35 @@ import {
15
  Users,
16
  } from "lucide-react"
17
  import type { BenchmarkEvalListItem } from "@/lib/eval-processing"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
  interface EvalCardProps {
20
  summary: BenchmarkEvalListItem
@@ -27,6 +56,25 @@ export function EvalCard({ summary, delayMs = 0 }: EvalCardProps) {
27
  const isResearchView = mode === "research"
28
  const scorePercent = `${Math.round(summary.avg_score_norm * 100)}%`
29
  const purpose = summary.factsheet?.purpose ?? "General single-benchmark evaluation"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  return (
32
  <Card
@@ -35,8 +83,22 @@ export function EvalCard({ summary, delayMs = 0 }: EvalCardProps) {
35
  onClick={() => router.push(`/evals/${summary.evaluation_id}`)}
36
  >
37
  <CardHeader className="space-y-3 border-b border-border/60 pb-4">
38
- <div className="text-[10px] font-semibold uppercase tracking-[0.24em] text-muted-foreground">
39
- Single Benchmark
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  </div>
41
 
42
  <div className="min-w-0">
@@ -45,10 +107,28 @@ export function EvalCard({ summary, delayMs = 0 }: EvalCardProps) {
45
  Composite benchmark: {summary.composite_benchmark_name}
46
  </div>
47
  <div className="mt-1 text-sm text-muted-foreground line-clamp-2">
48
- {summary.metric_config.evaluation_description}
49
  </div>
50
  </div>
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  <div className="flex flex-wrap gap-2">
53
  {summary.third_party_ratio > 0 && (
54
  <Badge className="bg-emerald-600 text-white hover:bg-emerald-600">
@@ -74,6 +154,14 @@ export function EvalCard({ summary, delayMs = 0 }: EvalCardProps) {
74
  <MetricPill icon={Users} label="Evaluators" value={summary.evaluator_names.length.toLocaleString()} tone="bg-emerald-100/80 text-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-100" />
75
  </div>
76
 
 
 
 
 
 
 
 
 
77
  <div className="rounded-xl border bg-muted/10 p-3">
78
  <div className="mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground">Methodology</div>
79
  <div className="space-y-1.5 text-sm">
@@ -91,25 +179,46 @@ export function EvalCard({ summary, delayMs = 0 }: EvalCardProps) {
91
  : "Fully documented"
92
  }
93
  />
94
- <DataRow
95
- label="Third-party"
96
- value={`${Math.round(summary.third_party_ratio * 100)}%`}
97
- />
98
  </div>
99
  </div>
100
  </>
101
  ) : (
102
  <>
 
103
  <div className="rounded-xl border border-amber-200/70 bg-amber-50/75 p-3 dark:border-amber-900/40 dark:bg-amber-950/15">
104
  <div className="flex items-start gap-2">
105
  <Scale className="mt-0.5 h-4 w-4 shrink-0 text-amber-600" />
106
  <div>
107
  <div className="text-sm font-semibold">Purpose</div>
108
- <div className="text-sm text-muted-foreground">{purpose}</div>
 
 
109
  </div>
110
  </div>
111
  </div>
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  <div className="grid gap-2 sm:grid-cols-2">
114
  <MetricPill icon={BadgeCheck} label="Independent" value={`${Math.round(summary.third_party_ratio * 100)}%`} tone="bg-emerald-100/80 text-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-100" />
115
  <MetricPill icon={BookOpenText} label="Models" value={summary.models_count.toLocaleString()} tone="bg-sky-100/80 text-sky-900 dark:bg-sky-950/40 dark:text-sky-100" />
@@ -117,14 +226,8 @@ export function EvalCard({ summary, delayMs = 0 }: EvalCardProps) {
117
 
118
  <div className="rounded-xl border bg-muted/10 p-3">
119
  <div className="space-y-1.5 text-sm">
120
- <DataRow
121
- label="Avg score"
122
- value={scorePercent}
123
- />
124
- <DataRow
125
- label="Reported by"
126
- value={summary.evaluator_names.join(", ") || "Unknown"}
127
- />
128
  {summary.missing_generation_config_count > 0 && (
129
  <p className="pt-1 text-xs text-muted-foreground">
130
  Some results lack documented generation settings — direct score comparisons should be read with care.
 
15
  Users,
16
  } from "lucide-react"
17
  import type { BenchmarkEvalListItem } from "@/lib/eval-processing"
18
+ import { getCategoryColor } from "@/lib/benchmark-schema"
19
+
20
+ const LICENSE_COLORS: Record<string, string> = {
21
+ "mit": "bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200",
22
+ "apache": "bg-sky-100 text-sky-800 border-sky-200 dark:bg-sky-950/40 dark:text-sky-200",
23
+ "cc by": "bg-violet-100 text-violet-800 border-violet-200 dark:bg-violet-950/40 dark:text-violet-200",
24
+ "cc0": "bg-teal-100 text-teal-800 border-teal-200 dark:bg-teal-950/40 dark:text-teal-200",
25
+ "cc-by-sa": "bg-indigo-100 text-indigo-800 border-indigo-200 dark:bg-indigo-950/40 dark:text-indigo-200",
26
+ }
27
+
28
+ function licenseBadgeClass(license: string): string {
29
+ const l = license.toLowerCase()
30
+ for (const [key, cls] of Object.entries(LICENSE_COLORS)) {
31
+ if (l.includes(key)) return cls
32
+ }
33
+ return "bg-muted text-muted-foreground border-border"
34
+ }
35
+
36
+ function shortenLicense(license: string): string {
37
+ if (!license || license === "Not specified") return ""
38
+ // Shorten known verbose license names
39
+ if (license.toLowerCase().includes("creative commons attribution 4")) return "CC BY 4.0"
40
+ if (license.toLowerCase().includes("creative commons zero")) return "CC0"
41
+ if (license.toLowerCase().includes("apache license 2") || license.toLowerCase().includes("apache 2")) return "Apache 2.0"
42
+ if (license.toLowerCase().includes("mit license")) return "MIT"
43
+ if (license.toLowerCase().includes("cc-by-sa")) return "CC BY-SA"
44
+ if (license.length > 24) return license.slice(0, 22) + "…"
45
+ return license
46
+ }
47
 
48
  interface EvalCardProps {
49
  summary: BenchmarkEvalListItem
 
56
  const isResearchView = mode === "research"
57
  const scorePercent = `${Math.round(summary.avg_score_norm * 100)}%`
58
  const purpose = summary.factsheet?.purpose ?? "General single-benchmark evaluation"
59
+ const card = summary.benchmark_card
60
+ const domains: string[] = card?.benchmark_details?.domains ?? []
61
+ const license = card?.ethical_and_legal_considerations?.data_licensing ?? ""
62
+ const shortLicense = shortenLicense(license)
63
+ // Use the benchmark overview as a richer description when available
64
+ const overviewText = card?.benchmark_details?.overview
65
+ // Policy: rich context from metadata card
66
+ const policyGoal = card?.purpose_and_intended_users?.goal
67
+ const policyLimitations = card?.purpose_and_intended_users?.limitations
68
+ const policyAudience = card?.purpose_and_intended_users?.audience
69
+ const audienceText = Array.isArray(policyAudience)
70
+ ? policyAudience.slice(0, 2).join("; ")
71
+ : typeof policyAudience === "string"
72
+ ? policyAudience
73
+ : null
74
+ // Research: score interpretation + similar benchmarks
75
+ const scoreInterpretation = card?.methodology?.interpretation
76
+ const rawSimilar = card?.benchmark_details?.similar_benchmarks
77
+ const similarBenchmarks: string[] = Array.isArray(rawSimilar) ? rawSimilar : rawSimilar ? [rawSimilar] : []
78
 
79
  return (
80
  <Card
 
83
  onClick={() => router.push(`/evals/${summary.evaluation_id}`)}
84
  >
85
  <CardHeader className="space-y-3 border-b border-border/60 pb-4">
86
+ <div className="flex items-center justify-between gap-2">
87
+ <div className="flex items-center gap-2">
88
+ <div className="text-[10px] font-semibold uppercase tracking-[0.24em] text-muted-foreground">
89
+ Single Benchmark
90
+ </div>
91
+ {summary.category && (
92
+ <span className={`rounded-full border px-2 py-0.5 text-[10px] font-semibold ${getCategoryColor(summary.category)}`}>
93
+ {summary.category}
94
+ </span>
95
+ )}
96
+ </div>
97
+ {shortLicense && (
98
+ <span className={`rounded-full border px-2 py-0.5 text-[10px] font-semibold ${licenseBadgeClass(license)}`}>
99
+ {shortLicense}
100
+ </span>
101
+ )}
102
  </div>
103
 
104
  <div className="min-w-0">
 
107
  Composite benchmark: {summary.composite_benchmark_name}
108
  </div>
109
  <div className="mt-1 text-sm text-muted-foreground line-clamp-2">
110
+ {overviewText ?? summary.metric_config.evaluation_description}
111
  </div>
112
  </div>
113
 
114
+ {domains.length > 0 && (
115
+ <div className="flex flex-wrap gap-1.5">
116
+ {domains.slice(0, 5).map((d) => (
117
+ <span
118
+ key={d}
119
+ className="rounded-full border border-border/60 bg-muted/40 px-2 py-0.5 text-[10px] font-medium capitalize text-muted-foreground"
120
+ >
121
+ {d}
122
+ </span>
123
+ ))}
124
+ {domains.length > 5 && (
125
+ <span className="rounded-full border border-border/60 bg-muted/40 px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
126
+ +{domains.length - 5}
127
+ </span>
128
+ )}
129
+ </div>
130
+ )}
131
+
132
  <div className="flex flex-wrap gap-2">
133
  {summary.third_party_ratio > 0 && (
134
  <Badge className="bg-emerald-600 text-white hover:bg-emerald-600">
 
154
  <MetricPill icon={Users} label="Evaluators" value={summary.evaluator_names.length.toLocaleString()} tone="bg-emerald-100/80 text-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-100" />
155
  </div>
156
 
157
+ {/* Research: score interpretation from metadata */}
158
+ {scoreInterpretation && (
159
+ <div className="rounded-xl border border-sky-200/60 bg-sky-50/40 p-3 text-sm dark:border-sky-900/40 dark:bg-sky-950/10">
160
+ <div className="mb-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-sky-700 dark:text-sky-300">Score interpretation</div>
161
+ <p className="text-muted-foreground line-clamp-2">{scoreInterpretation}</p>
162
+ </div>
163
+ )}
164
+
165
  <div className="rounded-xl border bg-muted/10 p-3">
166
  <div className="mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground">Methodology</div>
167
  <div className="space-y-1.5 text-sm">
 
179
  : "Fully documented"
180
  }
181
  />
182
+ <DataRow label="Third-party" value={`${Math.round(summary.third_party_ratio * 100)}%`} />
183
+ {similarBenchmarks.length > 0 && (
184
+ <DataRow label="See also" value={similarBenchmarks.slice(0, 3).join(", ")} />
185
+ )}
186
  </div>
187
  </div>
188
  </>
189
  ) : (
190
  <>
191
+ {/* Policy: goal (from metadata card if available, otherwise factsheet purpose) */}
192
  <div className="rounded-xl border border-amber-200/70 bg-amber-50/75 p-3 dark:border-amber-900/40 dark:bg-amber-950/15">
193
  <div className="flex items-start gap-2">
194
  <Scale className="mt-0.5 h-4 w-4 shrink-0 text-amber-600" />
195
  <div>
196
  <div className="text-sm font-semibold">Purpose</div>
197
+ <div className="text-sm text-muted-foreground line-clamp-3">
198
+ {policyGoal ?? purpose}
199
+ </div>
200
  </div>
201
  </div>
202
  </div>
203
 
204
+ {/* Policy: audience + limitations from metadata */}
205
+ {(audienceText || policyLimitations) && (
206
+ <div className="space-y-2">
207
+ {audienceText && (
208
+ <div className="rounded-xl border border-sky-200/60 bg-sky-50/50 p-3 text-sm dark:border-sky-900/40 dark:bg-sky-950/15">
209
+ <span className="font-semibold text-sky-800 dark:text-sky-200">Intended for: </span>
210
+ <span className="text-muted-foreground">{audienceText}</span>
211
+ </div>
212
+ )}
213
+ {policyLimitations && (
214
+ <div className="rounded-xl border border-rose-200/60 bg-rose-50/50 p-3 text-sm dark:border-rose-900/40 dark:bg-rose-950/15">
215
+ <span className="font-semibold text-rose-800 dark:text-rose-200">Known limitation: </span>
216
+ <span className="text-muted-foreground line-clamp-2">{policyLimitations}</span>
217
+ </div>
218
+ )}
219
+ </div>
220
+ )}
221
+
222
  <div className="grid gap-2 sm:grid-cols-2">
223
  <MetricPill icon={BadgeCheck} label="Independent" value={`${Math.round(summary.third_party_ratio * 100)}%`} tone="bg-emerald-100/80 text-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-100" />
224
  <MetricPill icon={BookOpenText} label="Models" value={summary.models_count.toLocaleString()} tone="bg-sky-100/80 text-sky-900 dark:bg-sky-950/40 dark:text-sky-100" />
 
226
 
227
  <div className="rounded-xl border bg-muted/10 p-3">
228
  <div className="space-y-1.5 text-sm">
229
+ <DataRow label="Avg score" value={scorePercent} />
230
+ <DataRow label="Reported by" value={summary.evaluator_names.join(", ") || "Unknown"} />
 
 
 
 
 
 
231
  {summary.missing_generation_config_count > 0 && (
232
  <p className="pt-1 text-xs text-muted-foreground">
233
  Some results lack documented generation settings — direct score comparisons should be read with care.
components/eval-detail.tsx CHANGED
@@ -2,21 +2,31 @@
2
 
3
  import { useAudienceMode } from "@/components/audience-mode-provider"
4
  import { Fragment, useMemo, useState } from "react"
 
5
  import { Badge } from "@/components/ui/badge"
6
  import { Button } from "@/components/ui/button"
7
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
 
8
  import { Progress } from "@/components/ui/progress"
9
  import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
 
10
  import { cn } from "@/lib/utils"
11
  import {
 
12
  BarChart3,
 
13
  ChevronDown,
14
  ChevronUp,
15
  Database,
16
  ExternalLink,
 
17
  Globe,
18
  Medal,
 
 
 
19
  } from "lucide-react"
 
20
  import type { BenchmarkEvalSummary, ModelResultForBenchmark } from "@/lib/eval-processing"
21
 
22
  interface EvalDetailProps {
@@ -30,6 +40,136 @@ interface LeaderboardRow {
30
  normalizedScore: number
31
  }
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  function formatMetadataValue(value: unknown): string {
34
  if (value == null) {
35
  return "N/A"
@@ -98,6 +238,9 @@ export function EvalDetail({ summary }: EvalDetailProps) {
98
  const { mode } = useAudienceMode()
99
  const isResearchView = mode === "research"
100
  const [expandedRows, setExpandedRows] = useState<Record<string, boolean>>({})
 
 
 
101
 
102
  const maxScore = summary.metric_config.max_score ?? 1
103
  const minScore = summary.metric_config.min_score ?? 0
@@ -105,6 +248,25 @@ export function EvalDetail({ summary }: EvalDetailProps) {
105
 
106
  const normalizeScore = (raw: number) => (range > 0 ? (raw - minScore) / range : raw)
107
  const formatPercent = (normalized: number) => `${(normalized * 100).toFixed(1)}%`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
 
109
  const sortedResults = useMemo(
110
  () =>
@@ -114,11 +276,32 @@ export function EvalDetail({ summary }: EvalDetailProps) {
114
  [summary.model_results, summary.metric_config.lower_is_better]
115
  )
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  const leaderboardRows = useMemo<LeaderboardRow[]>(() => {
118
  let currentRank = 0
119
  let previousScore: number | null = null
120
 
121
- return sortedResults.map((modelResult, index) => {
122
  if (previousScore === null || Math.abs(modelResult.score - previousScore) > 1e-9) {
123
  currentRank = index + 1
124
  previousScore = modelResult.score
@@ -131,14 +314,24 @@ export function EvalDetail({ summary }: EvalDetailProps) {
131
  normalizedScore: normalizeScore(modelResult.score),
132
  }
133
  })
134
- }, [sortedResults])
 
 
 
 
 
 
135
 
136
  const avgNorm = formatPercent(summary.avg_score_norm)
137
  const scoreDirectionLabel = summary.metric_config.lower_is_better ? "Lower scores rank higher" : "Higher scores rank higher"
138
  const leaderboardTitle = isResearchView ? "Leaderboard" : "Reporting Comparison"
139
  const leaderboardDescription = isResearchView
140
- ? "Models ranked by normalized score for this benchmark."
141
- : "Model results with stronger emphasis on reporting context and evaluator provenance."
 
 
 
 
142
 
143
  const toggleRow = (key: string) =>
144
  setExpandedRows((current) => ({
@@ -154,11 +347,17 @@ export function EvalDetail({ summary }: EvalDetailProps) {
154
  <div className="space-y-3">
155
  <div className="flex flex-wrap items-center gap-2">
156
  <Badge variant="outline" className="border-border/60 bg-background/80 text-[11px] uppercase tracking-[0.18em]">
157
- Single Benchmark
158
- </Badge>
159
- <Badge variant="secondary" className="font-normal">
160
- Composite: {summary.composite_benchmark_name}
161
  </Badge>
 
 
 
 
 
 
 
 
 
162
  <Badge variant="secondary" className="font-normal capitalize">
163
  {summary.metric_config.score_type}
164
  </Badge>
@@ -235,14 +434,22 @@ export function EvalDetail({ summary }: EvalDetailProps) {
235
  <dt className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
236
  Composite benchmark
237
  </dt>
238
- <dd className="mt-1 break-words font-medium">{summary.composite_benchmark_name}</dd>
 
 
 
 
239
  </div>
240
  <div>
241
  <dt className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
242
  {isResearchView ? "Single benchmark ID" : "What this covers"}
243
  </dt>
244
  <dd className="mt-1 break-words font-medium">
245
- {isResearchView ? summary.evaluation_id : summary.metric_config.evaluation_description}
 
 
 
 
246
  </dd>
247
  </div>
248
  <div>
@@ -286,6 +493,11 @@ export function EvalDetail({ summary }: EvalDetailProps) {
286
  </CardContent>
287
  </Card>
288
 
 
 
 
 
 
289
  <Card className="overflow-hidden">
290
  <CardHeader className="border-b bg-muted/10">
291
  <div className="flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between">
@@ -298,8 +510,17 @@ export function EvalDetail({ summary }: EvalDetailProps) {
298
  </div>
299
 
300
  <div className="flex flex-wrap items-center gap-2 text-xs text-muted-foreground">
301
- <Badge variant="secondary">{summary.models_count} models</Badge>
 
 
 
 
302
  <Badge variant="outline">{scoreDirectionLabel}</Badge>
 
 
 
 
 
303
  {isResearchView && (
304
  <Badge variant="outline">
305
  Scale {summary.metric_config.min_score ?? 0} - {summary.metric_config.max_score ?? 1}
@@ -310,6 +531,89 @@ export function EvalDetail({ summary }: EvalDetailProps) {
310
  </CardHeader>
311
 
312
  <CardContent className="p-0">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  <Table className="min-w-[980px]">
314
  <TableHeader>
315
  <TableRow className="hover:bg-transparent">
@@ -332,11 +636,14 @@ export function EvalDetail({ summary }: EvalDetailProps) {
332
  </TableRow>
333
  </TableHeader>
334
  <TableBody>
335
- {leaderboardRows.map(({ key, rank, modelResult, normalizedScore }) => {
336
  const isExpanded = expandedRows[key] ?? false
337
  const subtasks = modelResult.score_details.details
338
  ? Object.entries(modelResult.score_details.details).filter(([, value]) => typeof value === "number")
339
  : []
 
 
 
340
 
341
  const datasetName = Array.isArray(modelResult.source_data)
342
  ? undefined
@@ -362,7 +669,14 @@ export function EvalDetail({ summary }: EvalDetailProps) {
362
 
363
  <TableCell className="whitespace-normal">
364
  <div className="space-y-1">
365
- <div className="font-semibold leading-tight">{modelResult.model_info.name}</div>
 
 
 
 
 
 
 
366
  <div className="flex flex-wrap items-center gap-2 text-xs text-muted-foreground">
367
  {modelResult.model_info.parameter_count && (
368
  <Badge variant="secondary" className="font-normal">
@@ -377,6 +691,11 @@ export function EvalDetail({ summary }: EvalDetailProps) {
377
  <span className="lg:hidden">
378
  {modelResult.model_info.developer ?? "Unknown developer"}
379
  </span>
 
 
 
 
 
380
  </div>
381
  </div>
382
  </TableCell>
@@ -408,18 +727,33 @@ export function EvalDetail({ summary }: EvalDetailProps) {
408
  ) : (
409
  <TableCell className="hidden md:table-cell">
410
  <div className="text-sm text-muted-foreground capitalize">
411
- {modelResult.source_metadata.evaluator_relationship.replace(/_/g, " ")}
 
 
412
  </div>
413
  </TableCell>
414
  )}
415
 
416
  <TableCell className="hidden whitespace-normal xl:table-cell">
417
- <div className="space-y-1">
418
- <div className="font-medium">{modelResult.source_metadata.source_organization_name}</div>
419
- <div className="text-xs text-muted-foreground">
420
- {modelResult.source_metadata.evaluator_relationship.replace(/_/g, " ")}
 
 
 
 
 
 
421
  </div>
422
- </div>
 
 
 
 
 
 
 
423
  </TableCell>
424
 
425
  <TableCell className="hidden lg:table-cell">
@@ -427,14 +761,16 @@ export function EvalDetail({ summary }: EvalDetailProps) {
427
  </TableCell>
428
 
429
  <TableCell className="px-4 text-right">
430
- <Button
431
- variant="ghost"
432
- size="icon"
433
- aria-label={isExpanded ? "Collapse details" : "Expand details"}
434
- onClick={() => toggleRow(key)}
435
- >
436
- {isExpanded ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
437
- </Button>
 
 
438
  </TableCell>
439
  </TableRow>
440
 
@@ -515,9 +851,12 @@ export function EvalDetail({ summary }: EvalDetailProps) {
515
  : "Normalized performance plus uncertainty and sample details."
516
  }
517
  >
518
- <MetaRow label="Normalized Score" value={formatPercent(normalizedScore)} />
519
  <MetaRow
520
- label="Raw Score"
 
 
 
 
521
  value={formatRawScore(modelResult.score, summary.metric_config.unit)}
522
  />
523
  <MetaRow label="Score Type" value={modelResult.result.metric_config.score_type} />
@@ -539,41 +878,64 @@ export function EvalDetail({ summary }: EvalDetailProps) {
539
  </DetailPanel>
540
  </div>
541
 
542
- {subtasks.length > 0 && (
543
- <div className="space-y-3">
544
- <div>
545
- <div className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">
546
- Subtask Distribution
547
- </div>
548
- <div className="text-sm text-muted-foreground">
549
- Detailed sub-metric scores for this model run.
550
- </div>
551
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
552
 
553
- <div className="grid gap-3 md:grid-cols-2 xl:grid-cols-3">
554
- {subtasks.map(([subtaskName, value]) => {
555
- const numericValue = value as number
556
- const normalizedSubtaskScore = range > 0 ? (numericValue - minScore) / range : numericValue
557
-
558
- return (
559
- <div key={subtaskName} className="rounded-xl border bg-background/70 p-4">
560
- <div className="mb-3 flex items-start justify-between gap-4">
561
- <div className="min-w-0">
562
- <div className="text-sm font-medium capitalize">
563
- {subtaskName.replace(/_/g, " ")}
564
- </div>
565
- <div className="text-xs text-muted-foreground">
566
- {formatRawScore(numericValue, summary.metric_config.unit)}
567
- </div>
568
- </div>
569
- <div className="text-sm font-semibold tabular-nums">
570
- {formatPercent(normalizedSubtaskScore)}
571
- </div>
572
- </div>
573
- <Progress value={normalizedSubtaskScore * 100} className="h-2" />
574
- </div>
575
- )
576
- })}
 
 
 
 
577
  </div>
578
  </div>
579
  )}
@@ -633,14 +995,68 @@ export function EvalDetail({ summary }: EvalDetailProps) {
633
  </Fragment>
634
  )
635
  })}
 
 
 
 
 
 
 
636
  </TableBody>
637
  </Table>
 
 
 
 
 
 
 
 
 
 
 
 
638
  </CardContent>
639
  </Card>
 
 
 
 
 
640
  </div>
641
  )
642
  }
643
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
644
  function DetailPanel({
645
  title,
646
  subtitle,
@@ -675,3 +1091,305 @@ function MetaRow({
675
  </div>
676
  )
677
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  import { useAudienceMode } from "@/components/audience-mode-provider"
4
  import { Fragment, useMemo, useState } from "react"
5
+ import Link from "next/link"
6
  import { Badge } from "@/components/ui/badge"
7
  import { Button } from "@/components/ui/button"
8
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
9
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"
10
  import { Progress } from "@/components/ui/progress"
11
  import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
12
+ import { getModelFamilyRouteId } from "@/lib/model-family"
13
  import { cn } from "@/lib/utils"
14
  import {
15
+ AlertTriangle,
16
  BarChart3,
17
+ BookOpen,
18
  ChevronDown,
19
  ChevronUp,
20
  Database,
21
  ExternalLink,
22
+ FileText,
23
  Globe,
24
  Medal,
25
+ Scale,
26
+ Shield,
27
+ Tag,
28
  } from "lucide-react"
29
+ import type { BenchmarkCard } from "@/lib/benchmark-schema"
30
  import type { BenchmarkEvalSummary, ModelResultForBenchmark } from "@/lib/eval-processing"
31
 
32
  interface EvalDetailProps {
 
40
  normalizedScore: number
41
  }
42
 
43
+ const PARAM_RANGE_VALUES = [1, 2, 3, 4, 6, 8, 10, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 500] as const
44
+ const PARAM_RANGE_MARKERS = [
45
+ { label: "< 1B", step: 0 },
46
+ { label: "6B", step: PARAM_RANGE_VALUES.indexOf(6) },
47
+ { label: "12B", step: PARAM_RANGE_VALUES.indexOf(12) },
48
+ { label: "32B", step: PARAM_RANGE_VALUES.indexOf(32) },
49
+ { label: "128B", step: PARAM_RANGE_VALUES.indexOf(128) },
50
+ { label: "> 500B", step: PARAM_RANGE_VALUES.length - 1 },
51
+ ] as const
52
+
53
+ function formatParamBoundLabel(step: number, bound: "min" | "max") {
54
+ const maxStepIndex = PARAM_RANGE_VALUES.length - 1
55
+
56
+ if (bound === "min" && step <= 0) {
57
+ return "< 1B"
58
+ }
59
+
60
+ if (bound === "max" && step >= maxStepIndex) {
61
+ return "> 500B"
62
+ }
63
+
64
+ const value = PARAM_RANGE_VALUES[step]
65
+ return value != null ? `${value}B` : "Not reported"
66
+ }
67
+
68
+ function parseParamsBillionsFromText(value: string | null | undefined) {
69
+ if (!value) {
70
+ return null
71
+ }
72
+
73
+ const normalized = value.trim().toLowerCase()
74
+ if (!normalized) {
75
+ return null
76
+ }
77
+
78
+ const compact = normalized.replace(/,/g, "")
79
+ const tokenMatch = compact.match(/(\d+(?:\.\d+)?)\s*(trillion|tn|t|billion|bn|b|million|mn|m|thousand|k)\b/)
80
+ if (tokenMatch) {
81
+ const amount = Number.parseFloat(tokenMatch[1])
82
+ if (!Number.isFinite(amount)) {
83
+ return null
84
+ }
85
+
86
+ const unit = tokenMatch[2]
87
+ if (unit === "trillion" || unit === "tn" || unit === "t") {
88
+ return amount * 1000
89
+ }
90
+
91
+ if (unit === "billion" || unit === "bn" || unit === "b") {
92
+ return amount
93
+ }
94
+
95
+ if (unit === "million" || unit === "mn" || unit === "m") {
96
+ return amount / 1000
97
+ }
98
+
99
+ if (unit === "thousand" || unit === "k") {
100
+ return amount / 1_000_000
101
+ }
102
+ }
103
+
104
+ const numeric = Number.parseFloat(compact)
105
+ return Number.isFinite(numeric) ? numeric : null
106
+ }
107
+
108
+ function parseParamsBillionsFromModelName(modelName: string | null | undefined) {
109
+ if (!modelName) {
110
+ return null
111
+ }
112
+
113
+ const sizeTokens = Array.from(modelName.matchAll(/\b(\d+(?:\.\d+)?)\s*([tmbk])\b/gi))
114
+ if (sizeTokens.length === 0) {
115
+ return null
116
+ }
117
+
118
+ const lastToken = sizeTokens[sizeTokens.length - 1]
119
+ const numericValue = Number.parseFloat(lastToken[1])
120
+ if (!Number.isFinite(numericValue)) {
121
+ return null
122
+ }
123
+
124
+ const unit = lastToken[2].toLowerCase()
125
+ if (unit === "t") {
126
+ return numericValue * 1000
127
+ }
128
+
129
+ if (unit === "b") {
130
+ return numericValue
131
+ }
132
+
133
+ if (unit === "m") {
134
+ return numericValue / 1000
135
+ }
136
+
137
+ if (unit === "k") {
138
+ return numericValue / 1_000_000
139
+ }
140
+
141
+ return null
142
+ }
143
+
144
+ function getParamsBillions(modelResult: ModelResultForBenchmark) {
145
+ const additionalDetails = modelResult.model_info.additional_details
146
+ const rawParamsBillions =
147
+ additionalDetails?.params_billions ??
148
+ additionalDetails?.parameter_count ??
149
+ additionalDetails?.num_parameters ??
150
+ additionalDetails?.params
151
+
152
+ if (typeof rawParamsBillions === "number") {
153
+ return rawParamsBillions
154
+ }
155
+
156
+ if (typeof rawParamsBillions === "string") {
157
+ const parsed = parseParamsBillionsFromText(rawParamsBillions)
158
+ if (Number.isFinite(parsed)) {
159
+ return parsed
160
+ }
161
+ }
162
+
163
+ if (typeof modelResult.model_info.parameter_count === "string") {
164
+ const parsed = parseParamsBillionsFromText(modelResult.model_info.parameter_count)
165
+ if (Number.isFinite(parsed)) {
166
+ return parsed
167
+ }
168
+ }
169
+
170
+ return parseParamsBillionsFromModelName(modelResult.model_info.name)
171
+ }
172
+
173
  function formatMetadataValue(value: unknown): string {
174
  if (value == null) {
175
  return "N/A"
 
238
  const { mode } = useAudienceMode()
239
  const isResearchView = mode === "research"
240
  const [expandedRows, setExpandedRows] = useState<Record<string, boolean>>({})
241
+ const [leaderboardPage, setLeaderboardPage] = useState(1)
242
+ const [minParamStep, setMinParamStep] = useState(0)
243
+ const [maxParamStep, setMaxParamStep] = useState(PARAM_RANGE_VALUES.length - 1)
244
 
245
  const maxScore = summary.metric_config.max_score ?? 1
246
  const minScore = summary.metric_config.min_score ?? 0
 
248
 
249
  const normalizeScore = (raw: number) => (range > 0 ? (raw - minScore) / range : raw)
250
  const formatPercent = (normalized: number) => `${(normalized * 100).toFixed(1)}%`
251
+ const maxParamStepIndex = PARAM_RANGE_VALUES.length - 1
252
+ const minHandlePercent = (minParamStep / maxParamStepIndex) * 100
253
+ const maxHandlePercent = (maxParamStep / maxParamStepIndex) * 100
254
+
255
+ const numericMinParams = useMemo(() => {
256
+ if (minParamStep <= 0) {
257
+ return null
258
+ }
259
+
260
+ return PARAM_RANGE_VALUES[minParamStep] ?? null
261
+ }, [minParamStep])
262
+
263
+ const numericMaxParams = useMemo(() => {
264
+ if (maxParamStep >= PARAM_RANGE_VALUES.length - 1) {
265
+ return null
266
+ }
267
+
268
+ return PARAM_RANGE_VALUES[maxParamStep] ?? null
269
+ }, [maxParamStep])
270
 
271
  const sortedResults = useMemo(
272
  () =>
 
276
  [summary.model_results, summary.metric_config.lower_is_better]
277
  )
278
 
279
+ const hasParameterData = useMemo(
280
+ () => sortedResults.some((result) => getParamsBillions(result) != null),
281
+ [sortedResults]
282
+ )
283
+
284
+ const filteredResults = useMemo(() => {
285
+ return sortedResults.filter((modelResult) => {
286
+ const paramsBillions = getParamsBillions(modelResult)
287
+
288
+ if (numericMinParams != null && (paramsBillions == null || paramsBillions < numericMinParams)) {
289
+ return false
290
+ }
291
+
292
+ if (numericMaxParams != null && (paramsBillions == null || paramsBillions > numericMaxParams)) {
293
+ return false
294
+ }
295
+
296
+ return true
297
+ })
298
+ }, [numericMaxParams, numericMinParams, sortedResults])
299
+
300
  const leaderboardRows = useMemo<LeaderboardRow[]>(() => {
301
  let currentRank = 0
302
  let previousScore: number | null = null
303
 
304
+ return filteredResults.map((modelResult, index) => {
305
  if (previousScore === null || Math.abs(modelResult.score - previousScore) > 1e-9) {
306
  currentRank = index + 1
307
  previousScore = modelResult.score
 
314
  normalizedScore: normalizeScore(modelResult.score),
315
  }
316
  })
317
+ }, [filteredResults])
318
+
319
+ const LEADERBOARD_PAGE_SIZE = 50
320
+ const pagedLeaderboardRows = useMemo(
321
+ () => leaderboardRows.slice(0, leaderboardPage * LEADERBOARD_PAGE_SIZE),
322
+ [leaderboardRows, leaderboardPage]
323
+ )
324
 
325
  const avgNorm = formatPercent(summary.avg_score_norm)
326
  const scoreDirectionLabel = summary.metric_config.lower_is_better ? "Lower scores rank higher" : "Higher scores rank higher"
327
  const leaderboardTitle = isResearchView ? "Leaderboard" : "Reporting Comparison"
328
  const leaderboardDescription = isResearchView
329
+ ? summary.is_aggregated
330
+ ? "Models ranked by average normalized score across the contributing composite benchmarks."
331
+ : "Models ranked by normalized score for this benchmark."
332
+ : summary.is_aggregated
333
+ ? "Averaged model results across the contributing composite benchmarks, with drill-down to each component score."
334
+ : "Model results with stronger emphasis on reporting context and evaluator provenance."
335
 
336
  const toggleRow = (key: string) =>
337
  setExpandedRows((current) => ({
 
347
  <div className="space-y-3">
348
  <div className="flex flex-wrap items-center gap-2">
349
  <Badge variant="outline" className="border-border/60 bg-background/80 text-[11px] uppercase tracking-[0.18em]">
350
+ {summary.is_aggregated ? "Merged Benchmark" : "Single Benchmark"}
 
 
 
351
  </Badge>
352
+ {summary.is_aggregated ? (
353
+ <Badge variant="secondary" className="font-normal">
354
+ {summary.aggregate_sources?.length ?? 0} composite benchmarks
355
+ </Badge>
356
+ ) : (
357
+ <Badge variant="secondary" className="font-normal">
358
+ Composite: {summary.composite_benchmark_name}
359
+ </Badge>
360
+ )}
361
  <Badge variant="secondary" className="font-normal capitalize">
362
  {summary.metric_config.score_type}
363
  </Badge>
 
434
  <dt className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
435
  Composite benchmark
436
  </dt>
437
+ <dd className="mt-1 break-words font-medium">
438
+ {summary.is_aggregated
439
+ ? summary.aggregate_sources?.map((source) => source.composite_benchmark_name).join(", ") || "Multiple composite benchmarks"
440
+ : summary.composite_benchmark_name}
441
+ </dd>
442
  </div>
443
  <div>
444
  <dt className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
445
  {isResearchView ? "Single benchmark ID" : "What this covers"}
446
  </dt>
447
  <dd className="mt-1 break-words font-medium">
448
+ {isResearchView
449
+ ? summary.evaluation_id
450
+ : summary.is_aggregated
451
+ ? summary.metric_config.evaluation_description
452
+ : summary.metric_config.evaluation_description}
453
  </dd>
454
  </div>
455
  <div>
 
493
  </CardContent>
494
  </Card>
495
 
496
+ {/* Policy: benchmark context BEFORE the leaderboard (context first, numbers second) */}
497
+ {!isResearchView && summary.benchmark_card && (
498
+ <BenchmarkCardPanel card={summary.benchmark_card} isResearchView={false} defaultRisksOpen />
499
+ )}
500
+
501
  <Card className="overflow-hidden">
502
  <CardHeader className="border-b bg-muted/10">
503
  <div className="flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between">
 
510
  </div>
511
 
512
  <div className="flex flex-wrap items-center gap-2 text-xs text-muted-foreground">
513
+ <Badge variant="secondary">
514
+ {leaderboardRows.length === summary.models_count
515
+ ? `${summary.models_count} models`
516
+ : `${leaderboardRows.length} of ${summary.models_count} models`}
517
+ </Badge>
518
  <Badge variant="outline">{scoreDirectionLabel}</Badge>
519
+ {hasParameterData && (numericMinParams != null || numericMaxParams != null) && (
520
+ <Badge variant="outline">
521
+ Params {formatParamBoundLabel(minParamStep, "min")} to {formatParamBoundLabel(maxParamStep, "max")}
522
+ </Badge>
523
+ )}
524
  {isResearchView && (
525
  <Badge variant="outline">
526
  Scale {summary.metric_config.min_score ?? 0} - {summary.metric_config.max_score ?? 1}
 
531
  </CardHeader>
532
 
533
  <CardContent className="p-0">
534
+ {hasParameterData && (
535
+ <div className="border-b bg-background px-5 py-4 sm:px-6">
536
+ <div className="flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between">
537
+ <div className="space-y-1">
538
+ <div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">
539
+ Parameter range
540
+ </div>
541
+ <div className="text-sm text-muted-foreground">
542
+ Narrow the leaderboard to comparable model sizes.
543
+ </div>
544
+ </div>
545
+
546
+ <div className="flex min-w-0 flex-1 items-center gap-4 lg:max-w-[40rem]">
547
+ <div className="min-w-0 flex-1">
548
+ <div className="mb-2 flex items-center justify-between text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground">
549
+ {PARAM_RANGE_MARKERS.map((marker) => (
550
+ <span key={marker.label} className="text-center">
551
+ {marker.label}
552
+ </span>
553
+ ))}
554
+ </div>
555
+
556
+ <div className="relative h-4">
557
+ <div className="absolute inset-x-1.5 top-1/2 h-[3px] -translate-y-1/2 rounded-full bg-border/80" />
558
+ <div className="absolute inset-x-1.5 top-1/2 h-[3px] -translate-y-1/2">
559
+ <div
560
+ className="absolute inset-y-0 rounded-full bg-foreground transition-[left,right] duration-300 ease-[var(--ease-out-quint)]"
561
+ style={{
562
+ left: `${minHandlePercent}%`,
563
+ right: `${Math.max(100 - maxHandlePercent, 0)}%`,
564
+ }}
565
+ />
566
+ </div>
567
+
568
+ <div className="absolute inset-x-1.5 top-1/2 -translate-y-1/2">
569
+ {PARAM_RANGE_VALUES.map((_, stepIndex) => (
570
+ <span
571
+ key={`param-tick-${stepIndex}`}
572
+ className="absolute top-0 h-2 w-px -translate-x-1/2 rounded-full bg-border"
573
+ style={{ left: `${(stepIndex / maxParamStepIndex) * 100}%` }}
574
+ aria-hidden="true"
575
+ />
576
+ ))}
577
+ </div>
578
+
579
+ <input
580
+ type="range"
581
+ min={0}
582
+ max={maxParamStepIndex}
583
+ step={1}
584
+ value={minParamStep}
585
+ onChange={(event) => {
586
+ const nextMin = Number(event.target.value)
587
+ setMinParamStep(Math.min(nextMin, maxParamStep))
588
+ }}
589
+ className="param-range-input"
590
+ aria-label="Minimum parameter filter"
591
+ />
592
+
593
+ <input
594
+ type="range"
595
+ min={0}
596
+ max={maxParamStepIndex}
597
+ step={1}
598
+ value={maxParamStep}
599
+ onChange={(event) => {
600
+ const nextMax = Number(event.target.value)
601
+ setMaxParamStep(Math.max(nextMax, minParamStep))
602
+ }}
603
+ className="param-range-input"
604
+ aria-label="Maximum parameter filter"
605
+ />
606
+ </div>
607
+ </div>
608
+
609
+ <span className="shrink-0 text-[11px] text-muted-foreground">
610
+ {formatParamBoundLabel(minParamStep, "min")} to {formatParamBoundLabel(maxParamStep, "max")}
611
+ </span>
612
+ </div>
613
+ </div>
614
+ </div>
615
+ )}
616
+
617
  <Table className="min-w-[980px]">
618
  <TableHeader>
619
  <TableRow className="hover:bg-transparent">
 
636
  </TableRow>
637
  </TableHeader>
638
  <TableBody>
639
+ {pagedLeaderboardRows.map(({ key, rank, modelResult, normalizedScore }) => {
640
  const isExpanded = expandedRows[key] ?? false
641
  const subtasks = modelResult.score_details.details
642
  ? Object.entries(modelResult.score_details.details).filter(([, value]) => typeof value === "number")
643
  : []
644
+ const hasExpandableDetails =
645
+ (modelResult.aggregate_components && modelResult.aggregate_components.length > 1) ||
646
+ subtasks.length > 1
647
 
648
  const datasetName = Array.isArray(modelResult.source_data)
649
  ? undefined
 
669
 
670
  <TableCell className="whitespace-normal">
671
  <div className="space-y-1">
672
+ <div className="font-semibold leading-tight">
673
+ <Link
674
+ href={`/models/${getModelFamilyRouteId(modelResult.model_info)}`}
675
+ className="underline decoration-dotted underline-offset-4 hover:text-primary"
676
+ >
677
+ {modelResult.model_info.name}
678
+ </Link>
679
+ </div>
680
  <div className="flex flex-wrap items-center gap-2 text-xs text-muted-foreground">
681
  {modelResult.model_info.parameter_count && (
682
  <Badge variant="secondary" className="font-normal">
 
691
  <span className="lg:hidden">
692
  {modelResult.model_info.developer ?? "Unknown developer"}
693
  </span>
694
+ {modelResult.aggregate_components && modelResult.aggregate_components.length > 1 && (
695
+ <Badge variant="outline" className="font-normal">
696
+ Avg of {modelResult.aggregate_components.length}
697
+ </Badge>
698
+ )}
699
  </div>
700
  </div>
701
  </TableCell>
 
727
  ) : (
728
  <TableCell className="hidden md:table-cell">
729
  <div className="text-sm text-muted-foreground capitalize">
730
+ {modelResult.aggregate_components && modelResult.aggregate_components.length > 1
731
+ ? `average of ${modelResult.aggregate_components.length} composite scores`
732
+ : modelResult.source_metadata.evaluator_relationship.replace(/_/g, " ")}
733
  </div>
734
  </TableCell>
735
  )}
736
 
737
  <TableCell className="hidden whitespace-normal xl:table-cell">
738
+ {modelResult.aggregate_components && modelResult.aggregate_components.length > 1 ? (
739
+ <div className="space-y-1">
740
+ <div className="font-medium">
741
+ {Array.from(new Set(modelResult.aggregate_components.map((component) => component.source_organization_name))).join(", ")}
742
+ </div>
743
+ <div className="text-xs text-muted-foreground">
744
+ {modelResult.aggregate_components
745
+ .map((component) => component.composite_benchmark_name)
746
+ .join(", ")}
747
+ </div>
748
  </div>
749
+ ) : (
750
+ <div className="space-y-1">
751
+ <div className="font-medium">{modelResult.source_metadata.source_organization_name}</div>
752
+ <div className="text-xs text-muted-foreground">
753
+ {modelResult.source_metadata.evaluator_relationship.replace(/_/g, " ")}
754
+ </div>
755
+ </div>
756
+ )}
757
  </TableCell>
758
 
759
  <TableCell className="hidden lg:table-cell">
 
761
  </TableCell>
762
 
763
  <TableCell className="px-4 text-right">
764
+ {hasExpandableDetails && (
765
+ <Button
766
+ variant="ghost"
767
+ size="icon"
768
+ aria-label={isExpanded ? "Collapse details" : "Expand details"}
769
+ onClick={() => toggleRow(key)}
770
+ >
771
+ {isExpanded ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
772
+ </Button>
773
+ )}
774
  </TableCell>
775
  </TableRow>
776
 
 
851
  : "Normalized performance plus uncertainty and sample details."
852
  }
853
  >
 
854
  <MetaRow
855
+ label={modelResult.aggregate_components ? "Average Score" : "Normalized Score"}
856
+ value={formatPercent(normalizedScore)}
857
+ />
858
+ <MetaRow
859
+ label={modelResult.aggregate_components ? "Average Raw Value" : "Raw Score"}
860
  value={formatRawScore(modelResult.score, summary.metric_config.unit)}
861
  />
862
  <MetaRow label="Score Type" value={modelResult.result.metric_config.score_type} />
 
878
  </DetailPanel>
879
  </div>
880
 
881
+ {modelResult.aggregate_components && modelResult.aggregate_components.length > 1 && (
882
+ <div className="space-y-2">
883
+ <div className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">
884
+ Composite Score Breakdown
 
 
 
 
 
885
  </div>
886
+ <div className="overflow-hidden rounded-xl border">
887
+ <table className="w-full text-sm">
888
+ <thead>
889
+ <tr className="border-b bg-muted/30">
890
+ <th className="px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Benchmark</th>
891
+ <th className="px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Source</th>
892
+ <th className="px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Raw</th>
893
+ <th className="px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Score</th>
894
+ </tr>
895
+ </thead>
896
+ <tbody>
897
+ {modelResult.aggregate_components.map((component, i) => (
898
+ <tr key={`${component.evaluation_id}-${i}`} className="border-b last:border-0 hover:bg-muted/10">
899
+ <td className="px-3 py-2 font-medium">{component.composite_benchmark_name}</td>
900
+ <td className="px-3 py-2 text-muted-foreground">{component.source_organization_name}</td>
901
+ <td className="px-3 py-2 text-right tabular-nums text-muted-foreground">{formatRawScore(component.score)}</td>
902
+ <td className="px-3 py-2 text-right font-semibold tabular-nums">{formatPercent(component.normalized_score)}</td>
903
+ </tr>
904
+ ))}
905
+ </tbody>
906
+ </table>
907
+ </div>
908
+ </div>
909
+ )}
910
 
911
+ {subtasks.length > 1 && (
912
+ <div className="space-y-2">
913
+ <div className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">
914
+ Subtask Breakdown
915
+ </div>
916
+ <div className="overflow-hidden rounded-xl border">
917
+ <table className="w-full text-sm">
918
+ <thead>
919
+ <tr className="border-b bg-muted/30">
920
+ <th className="px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Subtask</th>
921
+ <th className="px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Raw</th>
922
+ <th className="px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Score</th>
923
+ </tr>
924
+ </thead>
925
+ <tbody>
926
+ {subtasks.map(([subtaskName, value]) => {
927
+ const numericValue = value as number
928
+ const normalizedSubtaskScore = range > 0 ? (numericValue - minScore) / range : numericValue
929
+ return (
930
+ <tr key={subtaskName} className="border-b last:border-0 hover:bg-muted/10">
931
+ <td className="px-3 py-2 font-medium capitalize">{subtaskName.replace(/_/g, " ")}</td>
932
+ <td className="px-3 py-2 text-right tabular-nums text-muted-foreground">{formatRawScore(numericValue, summary.metric_config.unit)}</td>
933
+ <td className="px-3 py-2 text-right font-semibold tabular-nums">{formatPercent(normalizedSubtaskScore)}</td>
934
+ </tr>
935
+ )
936
+ })}
937
+ </tbody>
938
+ </table>
939
  </div>
940
  </div>
941
  )}
 
995
  </Fragment>
996
  )
997
  })}
998
+ {leaderboardRows.length === 0 && (
999
+ <TableRow>
1000
+ <TableCell colSpan={8} className="px-6 py-12 text-center text-sm text-muted-foreground">
1001
+ No leaderboard entries match the selected parameter range.
1002
+ </TableCell>
1003
+ </TableRow>
1004
+ )}
1005
  </TableBody>
1006
  </Table>
1007
+
1008
+ {/* Load more */}
1009
+ {pagedLeaderboardRows.length < leaderboardRows.length && (
1010
+ <div className="border-t px-6 py-4 text-center">
1011
+ <Button
1012
+ variant="outline"
1013
+ onClick={() => setLeaderboardPage((p) => p + 1)}
1014
+ >
1015
+ Load more ({leaderboardRows.length - pagedLeaderboardRows.length} remaining)
1016
+ </Button>
1017
+ </div>
1018
+ )}
1019
  </CardContent>
1020
  </Card>
1021
+
1022
+ {/* Research: benchmark card details AFTER the leaderboard, collapsed by default */}
1023
+ {isResearchView && summary.benchmark_card && (
1024
+ <ResearchBenchmarkCardCollapsible card={summary.benchmark_card} />
1025
+ )}
1026
  </div>
1027
  )
1028
  }
1029
 
1030
+ function ResearchBenchmarkCardCollapsible({ card }: { card: BenchmarkCard }) {
1031
+ const [open, setOpen] = useState(false)
1032
+ return (
1033
+ <Collapsible open={open} onOpenChange={setOpen}>
1034
+ <CollapsibleTrigger asChild>
1035
+ <button
1036
+ type="button"
1037
+ className="flex w-full items-center justify-between rounded-[1.5rem] border border-border/70 bg-muted/10 px-5 py-4 text-left transition-colors hover:bg-muted/20"
1038
+ >
1039
+ <div className="flex items-center gap-2">
1040
+ <BookOpen className="h-4 w-4 text-muted-foreground" />
1041
+ <span className="text-sm font-semibold">Benchmark card details</span>
1042
+ <span className="text-xs text-muted-foreground">
1043
+ — dataset, methodology, risks, resources
1044
+ </span>
1045
+ </div>
1046
+ {open ? (
1047
+ <ChevronUp className="h-4 w-4 text-muted-foreground" />
1048
+ ) : (
1049
+ <ChevronDown className="h-4 w-4 text-muted-foreground" />
1050
+ )}
1051
+ </button>
1052
+ </CollapsibleTrigger>
1053
+ <CollapsibleContent className="mt-2">
1054
+ <BenchmarkCardPanel card={card} isResearchView defaultRisksOpen={false} />
1055
+ </CollapsibleContent>
1056
+ </Collapsible>
1057
+ )
1058
+ }
1059
+
1060
  function DetailPanel({
1061
  title,
1062
  subtitle,
 
1091
  </div>
1092
  )
1093
  }
1094
+
1095
+ function toStringArray(value: string[] | string | undefined): string[] {
1096
+ if (!value) return []
1097
+ if (Array.isArray(value)) return value.filter(Boolean)
1098
+ if (value === "Not specified") return []
1099
+ return [value]
1100
+ }
1101
+
1102
+ function BenchmarkCardPanel({
1103
+ card,
1104
+ isResearchView,
1105
+ defaultRisksOpen = false,
1106
+ }: {
1107
+ card: BenchmarkCard
1108
+ isResearchView: boolean
1109
+ defaultRisksOpen?: boolean
1110
+ }) {
1111
+ const [risksOpen, setRisksOpen] = useState(defaultRisksOpen)
1112
+ const details = card.benchmark_details
1113
+ const purpose = card.purpose_and_intended_users
1114
+ const methodology = card.methodology
1115
+ const data = card.data
1116
+ const ethical = card.ethical_and_legal_considerations
1117
+ const risks = card.possible_risks ?? []
1118
+ const flaggedFields = Object.entries(card.flagged_fields ?? {})
1119
+ const missingFields = card.missing_fields ?? []
1120
+
1121
+ const domains = details.domains ?? []
1122
+ const languages = details.languages ?? []
1123
+ const resources = (details.resources ?? []).filter(Boolean)
1124
+ const tasks = toStringArray(purpose.tasks)
1125
+ const audience = toStringArray(purpose.audience)
1126
+
1127
+ const license = ethical.data_licensing ?? ""
1128
+ const shortLicense = license && license !== "Not specified" ? license : null
1129
+
1130
+ return (
1131
+ <Card className="overflow-hidden">
1132
+ <CardHeader className="border-b bg-muted/10">
1133
+ <div className="flex flex-wrap items-center gap-3">
1134
+ <BookOpen className="h-5 w-5 text-primary" />
1135
+ <CardTitle className="text-xl">Benchmark Card</CardTitle>
1136
+ {shortLicense && (
1137
+ <Badge variant="outline" className="font-normal">
1138
+ {shortLicense}
1139
+ </Badge>
1140
+ )}
1141
+ {(flaggedFields.length > 0 || missingFields.length > 0) && (
1142
+ <Badge className="bg-amber-500 text-amber-950 hover:bg-amber-500">
1143
+ <AlertTriangle className="mr-1 h-3 w-3" />
1144
+ {flaggedFields.length} flagged · {missingFields.length} missing
1145
+ </Badge>
1146
+ )}
1147
+ </div>
1148
+ <CardDescription>
1149
+ Structured metadata about this benchmark — what it measures, how it was built, and known limitations.
1150
+ {card.card_info?.llm && (
1151
+ <span className="ml-1 text-muted-foreground/70">
1152
+ Card generated by {card.card_info.llm}.
1153
+ </span>
1154
+ )}
1155
+ </CardDescription>
1156
+ </CardHeader>
1157
+
1158
+ <CardContent className="space-y-6 p-5 sm:p-6">
1159
+ {/* Overview + domains */}
1160
+ <div className="space-y-3">
1161
+ <p className="text-sm leading-6 text-muted-foreground">{details.overview}</p>
1162
+
1163
+ <div className="flex flex-wrap gap-2">
1164
+ {domains.map((d) => (
1165
+ <span
1166
+ key={d}
1167
+ className="inline-flex items-center gap-1 rounded-full border border-border/60 bg-muted/30 px-2.5 py-1 text-xs font-medium capitalize"
1168
+ >
1169
+ <Tag className="h-3 w-3 shrink-0 text-muted-foreground" />
1170
+ {d}
1171
+ </span>
1172
+ ))}
1173
+ {languages.map((l) => (
1174
+ <span
1175
+ key={l}
1176
+ className="inline-flex items-center gap-1 rounded-full border border-sky-200/70 bg-sky-50/60 px-2.5 py-1 text-xs font-medium dark:border-sky-900/40 dark:bg-sky-950/20"
1177
+ >
1178
+ <Globe className="h-3 w-3 shrink-0 text-sky-600" />
1179
+ {l}
1180
+ </span>
1181
+ ))}
1182
+ </div>
1183
+ </div>
1184
+
1185
+ <div className="grid gap-4 sm:grid-cols-2 xl:grid-cols-3">
1186
+ {/* Goal */}
1187
+ <div className="rounded-[1.25rem] border border-border/70 bg-muted/10 p-4">
1188
+ <div className="mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
1189
+ <Scale className="h-3.5 w-3.5" /> Goal
1190
+ </div>
1191
+ <p className="text-sm leading-5 text-foreground">{purpose.goal}</p>
1192
+ </div>
1193
+
1194
+ {/* Metric interpretation */}
1195
+ <div className="rounded-[1.25rem] border border-border/70 bg-muted/10 p-4">
1196
+ <div className="mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
1197
+ <BarChart3 className="h-3.5 w-3.5" /> Score interpretation
1198
+ </div>
1199
+ <p className="text-sm leading-5 text-foreground">{methodology.interpretation}</p>
1200
+ </div>
1201
+
1202
+ {/* Limitations */}
1203
+ <div className="rounded-[1.25rem] border border-amber-200/60 bg-amber-50/60 p-4 dark:border-amber-900/40 dark:bg-amber-950/15">
1204
+ <div className="mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.2em] text-amber-700 dark:text-amber-300">
1205
+ <AlertTriangle className="h-3.5 w-3.5" /> Limitations
1206
+ </div>
1207
+ <p className="text-sm leading-5 text-amber-900/90 dark:text-amber-100/90">{purpose.limitations}</p>
1208
+ </div>
1209
+ </div>
1210
+
1211
+ {/* Research-only: methodology + dataset details */}
1212
+ {isResearchView && (
1213
+ <div className="grid gap-4 sm:grid-cols-2">
1214
+ <div className="rounded-[1.25rem] border border-border/70 bg-muted/10 p-4">
1215
+ <div className="mb-3 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
1216
+ Dataset
1217
+ </div>
1218
+ <dl className="space-y-2 text-sm">
1219
+ <div className="flex gap-2">
1220
+ <dt className="w-20 shrink-0 text-muted-foreground">Size</dt>
1221
+ <dd className="font-medium">{data.size}</dd>
1222
+ </div>
1223
+ <div className="flex gap-2">
1224
+ <dt className="w-20 shrink-0 text-muted-foreground">Format</dt>
1225
+ <dd className="font-medium capitalize">{data.format}</dd>
1226
+ </div>
1227
+ <div className="flex gap-2">
1228
+ <dt className="w-20 shrink-0 text-muted-foreground">Source</dt>
1229
+ <dd className="font-medium">{data.source}</dd>
1230
+ </div>
1231
+ </dl>
1232
+ </div>
1233
+
1234
+ <div className="rounded-[1.25rem] border border-border/70 bg-muted/10 p-4">
1235
+ <div className="mb-3 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
1236
+ Methodology
1237
+ </div>
1238
+ <dl className="space-y-2 text-sm">
1239
+ {methodology.metrics.length > 0 && (
1240
+ <div className="flex gap-2">
1241
+ <dt className="w-20 shrink-0 text-muted-foreground">Metrics</dt>
1242
+ <dd className="font-medium">{methodology.metrics.join(", ")}</dd>
1243
+ </div>
1244
+ )}
1245
+ {tasks.length > 0 && (
1246
+ <div className="flex gap-2">
1247
+ <dt className="w-20 shrink-0 text-muted-foreground">Tasks</dt>
1248
+ <dd className="font-medium">{tasks.join(", ")}</dd>
1249
+ </div>
1250
+ )}
1251
+ {audience.length > 0 && (
1252
+ <div className="flex gap-2">
1253
+ <dt className="w-20 shrink-0 text-muted-foreground">Audience</dt>
1254
+ <dd className="font-medium">{audience.join("; ")}</dd>
1255
+ </div>
1256
+ )}
1257
+ </dl>
1258
+ </div>
1259
+ </div>
1260
+ )}
1261
+
1262
+ {/* Risks (collapsible) */}
1263
+ {risks.length > 0 && (
1264
+ <Collapsible open={risksOpen} onOpenChange={setRisksOpen}>
1265
+ <CollapsibleTrigger asChild>
1266
+ <button
1267
+ type="button"
1268
+ className="flex w-full items-center justify-between rounded-[1.25rem] border border-border/70 bg-muted/10 p-4 text-left transition-colors hover:bg-muted/20"
1269
+ >
1270
+ <div className="flex items-center gap-2">
1271
+ <Shield className="h-4 w-4 text-muted-foreground" />
1272
+ <span className="text-sm font-semibold">
1273
+ Risk considerations ({risks.length})
1274
+ </span>
1275
+ </div>
1276
+ {risksOpen ? (
1277
+ <ChevronUp className="h-4 w-4 text-muted-foreground" />
1278
+ ) : (
1279
+ <ChevronDown className="h-4 w-4 text-muted-foreground" />
1280
+ )}
1281
+ </button>
1282
+ </CollapsibleTrigger>
1283
+ <CollapsibleContent>
1284
+ <div className="mt-2 grid gap-3 sm:grid-cols-2">
1285
+ {risks.map((risk, i) => (
1286
+ <div
1287
+ key={i}
1288
+ className="rounded-[1.25rem] border border-border/60 bg-background p-4"
1289
+ >
1290
+ <div className="mb-1.5 flex items-start justify-between gap-2">
1291
+ <span className="text-sm font-semibold">{risk.category}</span>
1292
+ {risk.url && (
1293
+ <a
1294
+ href={risk.url}
1295
+ target="_blank"
1296
+ rel="noreferrer"
1297
+ onClick={(e) => e.stopPropagation()}
1298
+ className="shrink-0 text-muted-foreground hover:text-primary"
1299
+ >
1300
+ <ExternalLink className="h-3.5 w-3.5" />
1301
+ </a>
1302
+ )}
1303
+ </div>
1304
+ {risk.description?.[0] && (
1305
+ <p className="text-xs leading-5 text-muted-foreground line-clamp-3">
1306
+ {risk.description[0]}
1307
+ </p>
1308
+ )}
1309
+ </div>
1310
+ ))}
1311
+ </div>
1312
+ </CollapsibleContent>
1313
+ </Collapsible>
1314
+ )}
1315
+
1316
+ {/* Compliance / ethical notes (policy view emphasis) */}
1317
+ {!isResearchView && (
1318
+ <div className="rounded-[1.25rem] border border-border/70 bg-muted/10 p-4">
1319
+ <div className="mb-3 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
1320
+ Ethical &amp; legal
1321
+ </div>
1322
+ <dl className="grid gap-x-6 gap-y-2 text-sm sm:grid-cols-2">
1323
+ {shortLicense && (
1324
+ <div className="flex gap-2">
1325
+ <dt className="w-28 shrink-0 text-muted-foreground">License</dt>
1326
+ <dd className="font-medium">{license}</dd>
1327
+ </div>
1328
+ )}
1329
+ {ethical.compliance_with_regulations && ethical.compliance_with_regulations !== "Not specified" && (
1330
+ <div className="flex gap-2">
1331
+ <dt className="w-28 shrink-0 text-muted-foreground">Compliance</dt>
1332
+ <dd className="font-medium">{ethical.compliance_with_regulations}</dd>
1333
+ </div>
1334
+ )}
1335
+ {ethical.privacy_and_anonymity && ethical.privacy_and_anonymity !== "Not specified" && (
1336
+ <div className="col-span-full flex gap-2">
1337
+ <dt className="w-28 shrink-0 text-muted-foreground">Privacy</dt>
1338
+ <dd className="font-medium">{ethical.privacy_and_anonymity}</dd>
1339
+ </div>
1340
+ )}
1341
+ </dl>
1342
+ </div>
1343
+ )}
1344
+
1345
+ {/* Flagged / missing fields warning */}
1346
+ {(flaggedFields.length > 0 || missingFields.length > 0) && isResearchView && (
1347
+ <div className="rounded-[1.25rem] border border-amber-200/60 bg-amber-50/50 p-4 dark:border-amber-900/40 dark:bg-amber-950/15">
1348
+ <div className="mb-2 text-[11px] font-semibold uppercase tracking-[0.2em] text-amber-700 dark:text-amber-300">
1349
+ Card quality notes
1350
+ </div>
1351
+ {flaggedFields.length > 0 && (
1352
+ <ul className="space-y-1 text-xs text-amber-900/80 dark:text-amber-100/80">
1353
+ {flaggedFields.map(([field, note]) => (
1354
+ <li key={field}>
1355
+ <span className="font-semibold">{field}:</span> {note}
1356
+ </li>
1357
+ ))}
1358
+ </ul>
1359
+ )}
1360
+ {missingFields.length > 0 && (
1361
+ <p className="mt-1 text-xs text-amber-900/70 dark:text-amber-100/70">
1362
+ Missing: {missingFields.join(", ")}
1363
+ </p>
1364
+ )}
1365
+ </div>
1366
+ )}
1367
+
1368
+ {/* External resources */}
1369
+ {resources.length > 0 && (
1370
+ <div>
1371
+ <div className="mb-2 text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground">
1372
+ Resources
1373
+ </div>
1374
+ <div className="flex flex-wrap gap-2">
1375
+ {resources.map((url) => (
1376
+ <a
1377
+ key={url}
1378
+ href={url}
1379
+ target="_blank"
1380
+ rel="noreferrer"
1381
+ onClick={(e) => e.stopPropagation()}
1382
+ className="inline-flex items-center gap-1 rounded-full border border-border/60 bg-background px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-primary hover:border-primary/40 transition-colors"
1383
+ >
1384
+ <FileText className="h-3 w-3 shrink-0" />
1385
+ {url.replace(/^https?:\/\//, "").replace(/\/.+/, "")}
1386
+ <ExternalLink className="h-3 w-3 shrink-0" />
1387
+ </a>
1388
+ ))}
1389
+ </div>
1390
+ </div>
1391
+ )}
1392
+ </CardContent>
1393
+ </Card>
1394
+ )
1395
+ }
data/benchmarks/helm_capabilities.json CHANGED
@@ -1,4 +1,233 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "models": [
3
  {
4
  "model_id": "allenai/OLMo-2-1124-7B-Instruct",
@@ -794,4 +1023,4 @@
794
  }
795
  }
796
  ]
797
- }
 
1
  {
2
+ "benchmark_cards": {
3
+ "Omni-MATH": {
4
+ "benchmark_details": {
5
+ "name": "Omni-MATH",
6
+ "overview": "Omni-MATH is a benchmark designed to measure the mathematical reasoning capabilities of large language models at the Olympiad competition level. It comprises 4,428 challenging problems, categorized into over 33 sub-domains and more than 10 distinct difficulty levels. It was created because existing mathematical benchmarks are nearing saturation and are inadequate for assessing models on truly difficult tasks.",
7
+ "data_type": "text",
8
+ "domains": [
9
+ "math",
10
+ "olympiads"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "GSM8K",
17
+ "MATH"
18
+ ],
19
+ "resources": [
20
+ "https://arxiv.org/abs/2410.07985",
21
+ "https://huggingface.co/datasets/KbsdJames/Omni-MATH",
22
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
23
+ ]
24
+ },
25
+ "purpose_and_intended_users": {
26
+ "goal": "To provide a challenging benchmark for assessing and advancing the mathematical reasoning capabilities of large language models at the Olympiad and competition level, as existing benchmarks have become less challenging. It enables a nuanced analysis of performance across various mathematical disciplines and complexity levels.",
27
+ "audience": [
28
+ "Researchers evaluating large language models"
29
+ ],
30
+ "tasks": [
31
+ "Solving Olympiad-level mathematical problems",
32
+ "Solving competition-level mathematical problems",
33
+ "Rule-based evaluation on a filtered subset of problems (Omni-MATH-Rule)"
34
+ ],
35
+ "limitations": "Some problems are not suitable for reliable rule-based evaluation, leading to a filtered 'testable' set and an 'untestable' set.",
36
+ "out_of_scope_uses": [
37
+ "Not specified"
38
+ ]
39
+ },
40
+ "data": {
41
+ "source": "The data is sourced from contest pages, the AoPS Wiki, and the AoPS Forum. Initial raw counts from these sources were filtered to create the final dataset.",
42
+ "size": "4,428 problems. A subset of 2,821 problems (Omni-MATH-Rule) is suitable for rule-based evaluation, and a separate subset of 100 samples was used for meta-evaluation.",
43
+ "format": "JSON",
44
+ "annotation": "Problems underwent rigorous human annotation by a team including PhD and Master's students. Each problem was reviewed by two annotators for cross-validation, achieving high agreement rates."
45
+ },
46
+ "methodology": {
47
+ "methods": [
48
+ "Models are evaluated by generating solutions to the mathematical problems.",
49
+ "Evaluation is conducted using both model-based judgment (e.g., GPT-4o or the open-source Omni-Judge) and rule-based evaluation for a specific subset of problems (Omni-MATH-Rule)."
50
+ ],
51
+ "metrics": [
52
+ "Accuracy (Acc)"
53
+ ],
54
+ "calculation": "The overall score is the accuracy percentage, calculated as the number of correct solutions divided by the total number of problems.",
55
+ "interpretation": "Higher accuracy indicates stronger performance. The benchmark is considered challenging, as even advanced models achieve only moderate accuracy.",
56
+ "baseline_results": "Paper baselines (accuracy on full Omni-MATH / Omni-MATH-Rule subset): o1-mini (60.54% / 62.2%), o1-preview (52.55% / 51.7%), qwen2.5-MATH-72b-Instruct (36.20% / 35.7%), qwen2.5-MATH-7b-Instruct (33.22% / 32.3%), GPT-4o (30.49% / 29.2%), NuminaMATH-72b-cot (28.45% / 27.1%), DeepseekMATH-7b-RL (16.12% / 14.9%). EEE results: OLMo 2 32B Instruct March 2025 scored 0.161 (16.1%).",
57
+ "validation": "For the Omni-MATH-Rule subset, two PhD students annotated problems to determine suitability for rule-based evaluation, achieving 98% cross-validation accuracy. A meta-evaluation compared model-generated judgments against human gold-standard annotations on a 100-sample subset to assess reliability."
58
+ },
59
+ "ethical_and_legal_considerations": {
60
+ "privacy_and_anonymity": "Not specified",
61
+ "data_licensing": "Apache License 2.0",
62
+ "consent_procedures": "Not specified",
63
+ "compliance_with_regulations": "Not specified"
64
+ },
65
+ "possible_risks": [
66
+ {
67
+ "category": "Over- or under-reliance",
68
+ "description": [
69
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
70
+ ],
71
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
72
+ },
73
+ {
74
+ "category": "Unrepresentative data",
75
+ "description": [
76
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
77
+ ],
78
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
79
+ },
80
+ {
81
+ "category": "Data bias",
82
+ "description": [
83
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
84
+ ],
85
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
86
+ },
87
+ {
88
+ "category": "Lack of data transparency",
89
+ "description": [
90
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
91
+ ],
92
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
93
+ },
94
+ {
95
+ "category": "Improper usage",
96
+ "description": [
97
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
98
+ ],
99
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
100
+ }
101
+ ],
102
+ "flagged_fields": {},
103
+ "missing_fields": [
104
+ "purpose_and_intended_users.out_of_scope_uses",
105
+ "ethical_and_legal_considerations.privacy_and_anonymity",
106
+ "ethical_and_legal_considerations.consent_procedures",
107
+ "ethical_and_legal_considerations.compliance_with_regulations"
108
+ ],
109
+ "card_info": {
110
+ "created_at": "2026-03-17T13:34:44.331592",
111
+ "llm": "deepseek-ai/DeepSeek-V3.2"
112
+ }
113
+ },
114
+ "WildBench": {
115
+ "benchmark_details": {
116
+ "name": "WildBench",
117
+ "overview": "WildBench is a benchmark that measures the performance of large language models on challenging, open-ended tasks derived from real-world user queries. It consists of 1,024 tasks selected from human-chatbot conversation logs. Its distinctive features include using a natural distribution of real user queries and employing automated evaluation with two novel metrics, WB-Reward and WB-Score, which utilize task-specific checklists and structured explanations.",
118
+ "data_type": "tabular, text",
119
+ "domains": [
120
+ "Info Seeking",
121
+ "Math & Data",
122
+ "Reasoning & Planning",
123
+ "Creative Tasks"
124
+ ],
125
+ "languages": [
126
+ "English"
127
+ ],
128
+ "similar_benchmarks": [
129
+ "AlpacaEval",
130
+ "ArenaHard",
131
+ "MT-bench",
132
+ "Chatbot Arena"
133
+ ],
134
+ "resources": [
135
+ "https://arxiv.org/abs/2406.04770",
136
+ "https://huggingface.co/datasets/allenai/WildBench",
137
+ "https://huggingface.co/spaces/allenai/WildBench",
138
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
139
+ ]
140
+ },
141
+ "purpose_and_intended_users": {
142
+ "goal": "To provide a realistic, automated, and cost-effective evaluation framework for large language models that reflects their capabilities on challenging, real-world user tasks. It aims to be contamination-resilient and dynamically updated.",
143
+ "audience": [
144
+ "Researchers and practitioners evaluating large language models"
145
+ ],
146
+ "tasks": [
147
+ "Open-ended text generation in response to diverse user queries"
148
+ ],
149
+ "limitations": "The benchmark acknowledges a common issue in LLM-as-a-judge evaluations: bias towards longer outputs. It introduces a length-penalty method to mitigate this.",
150
+ "out_of_scope_uses": [
151
+ "Not specified"
152
+ ]
153
+ },
154
+ "data": {
155
+ "source": "The data is derived from real user-chatbot conversation logs collected by the AI2 WildChat project. Over one million logs were filtered to create the benchmark.",
156
+ "size": "The benchmark contains 1,024 tasks. A separate 'v2-hard' configuration contains 256 examples. The dataset falls into the size category of 1K to 10K examples.",
157
+ "format": "The data is stored in Parquet format.",
158
+ "annotation": "Human annotation was used for quality control. GPT-4-Turbo assisted by summarizing query intents to help human reviewers filter out nonsensical tasks. Human reviewers manually assessed tasks to ensure they were challenging, diverse, and that associated checklist questions were clear. The final set of tasks was retained after this process. Each example includes fine-grained annotations such as task types and checklists for evaluating response quality."
159
+ },
160
+ "methodology": {
161
+ "methods": [
162
+ "Models are evaluated automatically using LLM-as-a-judge, with GPT-4-turbo as the evaluator. The evaluation is not fine-tuning-based and appears to be zero-shot or prompted.",
163
+ "The evaluation uses length-penalized pairwise comparisons and individual scoring to prevent bias towards longer outputs."
164
+ ],
165
+ "metrics": [
166
+ "WB-Reward (for pairwise comparisons)",
167
+ "WB-Score (for individual scoring)",
168
+ "WB-Elo (for leaderboard ranking, merging WB-Reward and WB-Score)"
169
+ ],
170
+ "calculation": "WB-Reward compares a test model against three baseline models of varying performance, producing outcomes of 'much better', 'slightly better', 'tie', 'slightly worse', or 'much worse'. A length penalty converts 'slightly better/worse' to 'tie' if the winner's response is excessively longer. WB-Score evaluates individual model outputs. WB-Elo merges the pairwise comparisons from WB-Reward and WB-Score to perform Elo rating updates.",
171
+ "interpretation": "Higher scores on WB-Reward and WB-Score indicate better performance. Strong performance is validated by a high correlation with human-voted Elo ratings from Chatbot Arena, with WB-Reward achieving a Pearson correlation of 0.98 and WB-Score reaching 0.95.",
172
+ "baseline_results": "Paper baselines: The paper reports results for 40 LLMs but does not list specific scores. It notes that using Haiku as a baseline yields the best correlation with human ratings. EEE results: OLMo 2 32B Instruct March 2025 scored 0.7340 on WildBench.",
173
+ "validation": "The evaluation metrics are validated by their strong correlation with human-voted Elo ratings from Chatbot Arena on hard tasks. Checklist questions used in the evaluation were manually verified for clarity and relevance."
174
+ },
175
+ "ethical_and_legal_considerations": {
176
+ "privacy_and_anonymity": "Not specified",
177
+ "data_licensing": "The dataset is made available under a CC BY license, intended for research and educational use in accordance with AI2's Responsible Use Guidelines.",
178
+ "consent_procedures": "Not specified",
179
+ "compliance_with_regulations": "Not specified"
180
+ },
181
+ "possible_risks": [
182
+ {
183
+ "category": "Over- or under-reliance",
184
+ "description": [
185
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
186
+ ],
187
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
188
+ },
189
+ {
190
+ "category": "Unrepresentative data",
191
+ "description": [
192
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
193
+ ],
194
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
195
+ },
196
+ {
197
+ "category": "Data bias",
198
+ "description": [
199
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
200
+ ],
201
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
202
+ },
203
+ {
204
+ "category": "Data contamination",
205
+ "description": [
206
+ "Data contamination occurs when incorrect data is used for training. For example, data that is not aligned with model's purpose or data that is already set aside for other development tasks such as testing and evaluation."
207
+ ],
208
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-contamination.html"
209
+ },
210
+ {
211
+ "category": "Lack of data transparency",
212
+ "description": [
213
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
214
+ ],
215
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
216
+ }
217
+ ],
218
+ "flagged_fields": {},
219
+ "missing_fields": [
220
+ "purpose_and_intended_users.out_of_scope_uses",
221
+ "ethical_and_legal_considerations.privacy_and_anonymity",
222
+ "ethical_and_legal_considerations.consent_procedures",
223
+ "ethical_and_legal_considerations.compliance_with_regulations"
224
+ ],
225
+ "card_info": {
226
+ "created_at": "2026-03-17T13:56:24.159440",
227
+ "llm": "deepseek-ai/DeepSeek-V3.2"
228
+ }
229
+ }
230
+ },
231
  "models": [
232
  {
233
  "model_id": "allenai/OLMo-2-1124-7B-Instruct",
 
1023
  }
1024
  }
1025
  ]
1026
+ }
data/benchmarks/helm_classic.json CHANGED
@@ -1,4 +1,556 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "models": [
3
  {
4
  "model_id": "Anthropic-LM-v4-s3-52B",
@@ -14,7 +566,7 @@
14
  "HellaSwag": 0.807,
15
  "OpenbookQA": 0.558,
16
  "TruthfulQA": 0.368,
17
- "MS MARCO (TREC)": -1.0,
18
  "CNN/DailyMail": 0.154,
19
  "XSUM": 0.134,
20
  "IMDB": 0.934,
@@ -33,12 +585,12 @@
33
  "NarrativeQA": 0.596,
34
  "NaturalQuestions (open-book)": 0.581,
35
  "QuAC": 0.313,
36
- "HellaSwag": -1.0,
37
- "OpenbookQA": -1.0,
38
  "TruthfulQA": 0.177,
39
- "MS MARCO (TREC)": -1.0,
40
- "CNN/DailyMail": -1.0,
41
- "XSUM": -1.0,
42
  "IMDB": 0.931,
43
  "CivilComments": 0.531,
44
  "RAFT": 0.514
@@ -55,12 +607,12 @@
55
  "NarrativeQA": 0.528,
56
  "NaturalQuestions (open-book)": 0.539,
57
  "QuAC": 0.296,
58
- "HellaSwag": -1.0,
59
- "OpenbookQA": -1.0,
60
  "TruthfulQA": 0.213,
61
- "MS MARCO (TREC)": -1.0,
62
- "CNN/DailyMail": -1.0,
63
- "XSUM": -1.0,
64
  "IMDB": 0.928,
65
  "CivilComments": 0.511,
66
  "RAFT": 0.502
@@ -206,9 +758,9 @@
206
  "Mean win rate": 0.553,
207
  "MMLU": 0.339,
208
  "BoolQ": 0.742,
209
- "NarrativeQA": -1.0,
210
  "NaturalQuestions (open-book)": 0.589,
211
- "QuAC": -1.0,
212
  "HellaSwag": 0.729,
213
  "OpenbookQA": 0.53,
214
  "TruthfulQA": 0.245,
@@ -231,10 +783,10 @@
231
  "NarrativeQA": 0.605,
232
  "NaturalQuestions (open-book)": 0.568,
233
  "QuAC": 0.334,
234
- "HellaSwag": -1.0,
235
- "OpenbookQA": -1.0,
236
  "TruthfulQA": 0.182,
237
- "MS MARCO (TREC)": -1.0,
238
  "CNN/DailyMail": 0.11,
239
  "XSUM": 0.105,
240
  "IMDB": 0.939,
@@ -253,10 +805,10 @@
253
  "NarrativeQA": 0.665,
254
  "NaturalQuestions (open-book)": 0.609,
255
  "QuAC": 0.349,
256
- "HellaSwag": -1.0,
257
- "OpenbookQA": -1.0,
258
  "TruthfulQA": 0.221,
259
- "MS MARCO (TREC)": -1.0,
260
  "CNN/DailyMail": 0.139,
261
  "XSUM": 0.124,
262
  "IMDB": 0.947,
@@ -275,10 +827,10 @@
275
  "NarrativeQA": 0.711,
276
  "NaturalQuestions (open-book)": 0.649,
277
  "QuAC": 0.37,
278
- "HellaSwag": -1.0,
279
- "OpenbookQA": -1.0,
280
  "TruthfulQA": 0.222,
281
- "MS MARCO (TREC)": -1.0,
282
  "CNN/DailyMail": 0.15,
283
  "XSUM": 0.136,
284
  "IMDB": 0.959,
@@ -315,14 +867,14 @@
315
  "scores": {
316
  "Mean win rate": 0.197,
317
  "MMLU": 0.407,
318
- "BoolQ": 0.0,
319
  "NarrativeQA": 0.151,
320
  "NaturalQuestions (open-book)": 0.19,
321
  "QuAC": 0.121,
322
- "HellaSwag": -1.0,
323
- "OpenbookQA": -1.0,
324
  "TruthfulQA": 0.377,
325
- "MS MARCO (TREC)": -1.0,
326
  "CNN/DailyMail": 0.122,
327
  "XSUM": 0.09,
328
  "IMDB": 0.207,
@@ -515,12 +1067,12 @@
515
  "MMLU": 0.609,
516
  "BoolQ": 0.896,
517
  "NarrativeQA": 0.742,
518
- "NaturalQuestions (open-book)": -1.0,
519
  "QuAC": 0.473,
520
- "HellaSwag": -1.0,
521
- "OpenbookQA": -1.0,
522
  "TruthfulQA": 0.616,
523
- "MS MARCO (TREC)": -1.0,
524
  "CNN/DailyMail": 0.049,
525
  "XSUM": 0.149,
526
  "IMDB": 0.935,
@@ -539,10 +1091,10 @@
539
  "NarrativeQA": 0.086,
540
  "NaturalQuestions (open-book)": 0.477,
541
  "QuAC": 0.116,
542
- "HellaSwag": -1.0,
543
- "OpenbookQA": -1.0,
544
  "TruthfulQA": 0.133,
545
- "MS MARCO (TREC)": -1.0,
546
  "CNN/DailyMail": 0.043,
547
  "XSUM": 0.015,
548
  "IMDB": 0.379,
@@ -561,10 +1113,10 @@
561
  "NarrativeQA": 0.083,
562
  "NaturalQuestions (open-book)": 0.349,
563
  "QuAC": 0.144,
564
- "HellaSwag": -1.0,
565
- "OpenbookQA": -1.0,
566
  "TruthfulQA": 0.193,
567
- "MS MARCO (TREC)": -1.0,
568
  "CNN/DailyMail": 0.03,
569
  "XSUM": 0.058,
570
  "IMDB": 0.337,
@@ -583,12 +1135,12 @@
583
  "NarrativeQA": 0.691,
584
  "NaturalQuestions (open-book)": 0.686,
585
  "QuAC": 0.403,
586
- "HellaSwag": -1.0,
587
- "OpenbookQA": -1.0,
588
  "TruthfulQA": 0.385,
589
- "MS MARCO (TREC)": -1.0,
590
- "CNN/DailyMail": -1.0,
591
- "XSUM": -1.0,
592
  "IMDB": 0.762,
593
  "CivilComments": 0.645,
594
  "RAFT": 0.657
@@ -605,12 +1157,12 @@
605
  "NarrativeQA": 0.643,
606
  "NaturalQuestions (open-book)": 0.634,
607
  "QuAC": 0.392,
608
- "HellaSwag": -1.0,
609
- "OpenbookQA": -1.0,
610
  "TruthfulQA": 0.292,
611
- "MS MARCO (TREC)": -1.0,
612
- "CNN/DailyMail": -1.0,
613
- "XSUM": -1.0,
614
  "IMDB": 0.916,
615
  "CivilComments": 0.62,
616
  "RAFT": 0.693
@@ -627,12 +1179,12 @@
627
  "NarrativeQA": 0.711,
628
  "NaturalQuestions (open-book)": 0.614,
629
  "QuAC": 0.347,
630
- "HellaSwag": -1.0,
631
- "OpenbookQA": -1.0,
632
  "TruthfulQA": 0.324,
633
- "MS MARCO (TREC)": -1.0,
634
- "CNN/DailyMail": -1.0,
635
- "XSUM": -1.0,
636
  "IMDB": 0.928,
637
  "CivilComments": 0.6,
638
  "RAFT": 0.643
@@ -649,12 +1201,12 @@
649
  "NarrativeQA": 0.752,
650
  "NaturalQuestions (open-book)": 0.666,
651
  "QuAC": 0.39,
652
- "HellaSwag": -1.0,
653
- "OpenbookQA": -1.0,
654
  "TruthfulQA": 0.344,
655
- "MS MARCO (TREC)": -1.0,
656
- "CNN/DailyMail": -1.0,
657
- "XSUM": -1.0,
658
  "IMDB": 0.927,
659
  "CivilComments": 0.549,
660
  "RAFT": 0.752
@@ -671,12 +1223,12 @@
671
  "NarrativeQA": 0.755,
672
  "NaturalQuestions (open-book)": 0.672,
673
  "QuAC": 0.401,
674
- "HellaSwag": -1.0,
675
- "OpenbookQA": -1.0,
676
  "TruthfulQA": 0.508,
677
- "MS MARCO (TREC)": -1.0,
678
- "CNN/DailyMail": -1.0,
679
- "XSUM": -1.0,
680
  "IMDB": 0.962,
681
  "CivilComments": 0.655,
682
  "RAFT": 0.702
@@ -693,12 +1245,12 @@
693
  "NarrativeQA": 0.669,
694
  "NaturalQuestions (open-book)": 0.589,
695
  "QuAC": 0.338,
696
- "HellaSwag": -1.0,
697
- "OpenbookQA": -1.0,
698
  "TruthfulQA": 0.28,
699
- "MS MARCO (TREC)": -1.0,
700
- "CNN/DailyMail": -1.0,
701
- "XSUM": -1.0,
702
  "IMDB": 0.947,
703
  "CivilComments": 0.563,
704
  "RAFT": 0.573
@@ -759,12 +1311,12 @@
759
  "NarrativeQA": 0.744,
760
  "NaturalQuestions (open-book)": 0.637,
761
  "QuAC": 0.424,
762
- "HellaSwag": -1.0,
763
- "OpenbookQA": -1.0,
764
  "TruthfulQA": 0.33,
765
- "MS MARCO (TREC)": -1.0,
766
- "CNN/DailyMail": -1.0,
767
- "XSUM": -1.0,
768
  "IMDB": 0.962,
769
  "CivilComments": 0.588,
770
  "RAFT": 0.707
@@ -781,12 +1333,12 @@
781
  "NarrativeQA": 0.77,
782
  "NaturalQuestions (open-book)": 0.674,
783
  "QuAC": 0.484,
784
- "HellaSwag": -1.0,
785
- "OpenbookQA": -1.0,
786
  "TruthfulQA": 0.554,
787
- "MS MARCO (TREC)": -1.0,
788
- "CNN/DailyMail": -1.0,
789
- "XSUM": -1.0,
790
  "IMDB": 0.961,
791
  "CivilComments": 0.652,
792
  "RAFT": 0.727
@@ -803,12 +1355,12 @@
803
  "NarrativeQA": 0.691,
804
  "NaturalQuestions (open-book)": 0.611,
805
  "QuAC": 0.406,
806
- "HellaSwag": -1.0,
807
- "OpenbookQA": -1.0,
808
  "TruthfulQA": 0.272,
809
- "MS MARCO (TREC)": -1.0,
810
- "CNN/DailyMail": -1.0,
811
- "XSUM": -1.0,
812
  "IMDB": 0.907,
813
  "CivilComments": 0.562,
814
  "RAFT": 0.643
@@ -869,12 +1421,12 @@
869
  "NarrativeQA": 0.716,
870
  "NaturalQuestions (open-book)": 0.687,
871
  "QuAC": 0.423,
872
- "HellaSwag": -1.0,
873
- "OpenbookQA": -1.0,
874
  "TruthfulQA": 0.422,
875
- "MS MARCO (TREC)": -1.0,
876
- "CNN/DailyMail": -1.0,
877
- "XSUM": -1.0,
878
  "IMDB": 0.962,
879
  "CivilComments": 0.624,
880
  "RAFT": 0.707
@@ -891,12 +1443,12 @@
891
  "NarrativeQA": 0.732,
892
  "NaturalQuestions (open-book)": 0.673,
893
  "QuAC": 0.393,
894
- "HellaSwag": -1.0,
895
- "OpenbookQA": -1.0,
896
  "TruthfulQA": 0.231,
897
- "MS MARCO (TREC)": -1.0,
898
- "CNN/DailyMail": -1.0,
899
- "XSUM": -1.0,
900
  "IMDB": 0.959,
901
  "CivilComments": 0.599,
902
  "RAFT": 0.723
@@ -913,12 +1465,12 @@
913
  "NarrativeQA": 0.733,
914
  "NaturalQuestions (open-book)": 0.697,
915
  "QuAC": 0.327,
916
- "HellaSwag": -1.0,
917
- "OpenbookQA": -1.0,
918
  "TruthfulQA": 0.234,
919
- "MS MARCO (TREC)": -1.0,
920
- "CNN/DailyMail": -1.0,
921
- "XSUM": -1.0,
922
  "IMDB": 0.956,
923
  "CivilComments": 0.573,
924
  "RAFT": 0.68
@@ -1067,12 +1619,12 @@
1067
  "NarrativeQA": 0.663,
1068
  "NaturalQuestions (open-book)": 0.624,
1069
  "QuAC": 0.512,
1070
- "HellaSwag": -1.0,
1071
- "OpenbookQA": -1.0,
1072
  "TruthfulQA": 0.609,
1073
- "MS MARCO (TREC)": -1.0,
1074
- "CNN/DailyMail": -1.0,
1075
- "XSUM": -1.0,
1076
  "IMDB": 0.899,
1077
  "CivilComments": 0.674,
1078
  "RAFT": 0.768
@@ -1089,12 +1641,12 @@
1089
  "NarrativeQA": 0.625,
1090
  "NaturalQuestions (open-book)": 0.675,
1091
  "QuAC": 0.485,
1092
- "HellaSwag": -1.0,
1093
- "OpenbookQA": -1.0,
1094
  "TruthfulQA": 0.339,
1095
- "MS MARCO (TREC)": -1.0,
1096
- "CNN/DailyMail": -1.0,
1097
- "XSUM": -1.0,
1098
  "IMDB": 0.943,
1099
  "CivilComments": 0.696,
1100
  "RAFT": 0.748
@@ -1221,12 +1773,12 @@
1221
  "NarrativeQA": 0.396,
1222
  "NaturalQuestions (open-book)": 0.592,
1223
  "QuAC": 0.27,
1224
- "HellaSwag": -1.0,
1225
- "OpenbookQA": -1.0,
1226
  "TruthfulQA": 0.243,
1227
- "MS MARCO (TREC)": -1.0,
1228
- "CNN/DailyMail": -1.0,
1229
- "XSUM": -1.0,
1230
  "IMDB": 0.738,
1231
  "CivilComments": 0.566,
1232
  "RAFT": 0.486
@@ -1243,12 +1795,12 @@
1243
  "NarrativeQA": 0.625,
1244
  "NaturalQuestions (open-book)": 0.666,
1245
  "QuAC": 0.371,
1246
- "HellaSwag": -1.0,
1247
- "OpenbookQA": -1.0,
1248
  "TruthfulQA": 0.384,
1249
- "MS MARCO (TREC)": -1.0,
1250
- "CNN/DailyMail": -1.0,
1251
- "XSUM": -1.0,
1252
  "IMDB": 0.959,
1253
  "CivilComments": 0.603,
1254
  "RAFT": 0.586
@@ -1265,12 +1817,12 @@
1265
  "NarrativeQA": 0.476,
1266
  "NaturalQuestions (open-book)": 0.449,
1267
  "QuAC": 0.311,
1268
- "HellaSwag": -1.0,
1269
- "OpenbookQA": -1.0,
1270
  "TruthfulQA": 0.213,
1271
- "MS MARCO (TREC)": -1.0,
1272
- "CNN/DailyMail": -1.0,
1273
- "XSUM": -1.0,
1274
  "IMDB": 0.852,
1275
  "CivilComments": 0.511,
1276
  "RAFT": 0.523
@@ -1287,12 +1839,12 @@
1287
  "NarrativeQA": 0.673,
1288
  "NaturalQuestions (open-book)": 0.675,
1289
  "QuAC": 0.307,
1290
- "HellaSwag": -1.0,
1291
- "OpenbookQA": -1.0,
1292
  "TruthfulQA": 0.353,
1293
- "MS MARCO (TREC)": -1.0,
1294
- "CNN/DailyMail": -1.0,
1295
- "XSUM": -1.0,
1296
  "IMDB": 0.959,
1297
  "CivilComments": 0.552,
1298
  "RAFT": 0.661
@@ -1309,12 +1861,12 @@
1309
  "NarrativeQA": 0.621,
1310
  "NaturalQuestions (open-book)": 0.579,
1311
  "QuAC": 0.332,
1312
- "HellaSwag": -1.0,
1313
- "OpenbookQA": -1.0,
1314
  "TruthfulQA": 0.234,
1315
- "MS MARCO (TREC)": -1.0,
1316
- "CNN/DailyMail": -1.0,
1317
- "XSUM": -1.0,
1318
  "IMDB": 0.836,
1319
  "CivilComments": 0.514,
1320
  "RAFT": 0.602
@@ -1331,12 +1883,12 @@
1331
  "NarrativeQA": 0.617,
1332
  "NaturalQuestions (open-book)": 0.586,
1333
  "QuAC": 0.336,
1334
- "HellaSwag": -1.0,
1335
- "OpenbookQA": -1.0,
1336
  "TruthfulQA": 0.205,
1337
- "MS MARCO (TREC)": -1.0,
1338
- "CNN/DailyMail": -1.0,
1339
- "XSUM": -1.0,
1340
  "IMDB": 0.752,
1341
  "CivilComments": 0.547,
1342
  "RAFT": 0.648
@@ -1353,12 +1905,12 @@
1353
  "NarrativeQA": 0.555,
1354
  "NaturalQuestions (open-book)": 0.52,
1355
  "QuAC": 0.309,
1356
- "HellaSwag": -1.0,
1357
- "OpenbookQA": -1.0,
1358
  "TruthfulQA": 0.277,
1359
- "MS MARCO (TREC)": -1.0,
1360
- "CNN/DailyMail": -1.0,
1361
- "XSUM": -1.0,
1362
  "IMDB": 0.907,
1363
  "CivilComments": 0.549,
1364
  "RAFT": 0.502
@@ -1375,12 +1927,12 @@
1375
  "NarrativeQA": 0.638,
1376
  "NaturalQuestions (open-book)": 0.659,
1377
  "QuAC": 0.26,
1378
- "HellaSwag": -1.0,
1379
- "OpenbookQA": -1.0,
1380
  "TruthfulQA": 0.243,
1381
- "MS MARCO (TREC)": -1.0,
1382
- "CNN/DailyMail": -1.0,
1383
- "XSUM": -1.0,
1384
  "IMDB": 0.927,
1385
  "CivilComments": 0.664,
1386
  "RAFT": 0.695
@@ -1397,12 +1949,12 @@
1397
  "NarrativeQA": 0.638,
1398
  "NaturalQuestions (open-book)": 0.637,
1399
  "QuAC": 0.259,
1400
- "HellaSwag": -1.0,
1401
- "OpenbookQA": -1.0,
1402
  "TruthfulQA": 0.208,
1403
- "MS MARCO (TREC)": -1.0,
1404
- "CNN/DailyMail": -1.0,
1405
- "XSUM": -1.0,
1406
  "IMDB": 0.894,
1407
  "CivilComments": 0.549,
1408
  "RAFT": 0.661
@@ -1419,10 +1971,10 @@
1419
  "NarrativeQA": 0.496,
1420
  "NaturalQuestions (open-book)": 0.682,
1421
  "QuAC": 0.433,
1422
- "HellaSwag": -1.0,
1423
- "OpenbookQA": -1.0,
1424
  "TruthfulQA": 0.185,
1425
- "MS MARCO (TREC)": -1.0,
1426
  "CNN/DailyMail": 0.152,
1427
  "XSUM": 0.104,
1428
  "IMDB": 0.94,
@@ -1441,10 +1993,10 @@
1441
  "NarrativeQA": 0.252,
1442
  "NaturalQuestions (open-book)": 0.227,
1443
  "QuAC": 0.162,
1444
- "HellaSwag": -1.0,
1445
- "OpenbookQA": -1.0,
1446
  "TruthfulQA": 0.202,
1447
- "MS MARCO (TREC)": -1.0,
1448
  "CNN/DailyMail": 0.017,
1449
  "XSUM": 0.021,
1450
  "IMDB": 0.836,
@@ -1463,10 +2015,10 @@
1463
  "NarrativeQA": 0.706,
1464
  "NaturalQuestions (open-book)": 0.642,
1465
  "QuAC": 0.272,
1466
- "HellaSwag": -1.0,
1467
- "OpenbookQA": -1.0,
1468
  "TruthfulQA": 0.218,
1469
- "MS MARCO (TREC)": -1.0,
1470
  "CNN/DailyMail": 0.154,
1471
  "XSUM": 0.132,
1472
  "IMDB": 0.955,
@@ -1475,4 +2027,4 @@
1475
  }
1476
  }
1477
  ]
1478
- }
 
1
  {
2
+ "benchmark_cards": {
3
+ "BoolQ": {
4
+ "benchmark_details": {
5
+ "name": "BoolQ",
6
+ "overview": "BoolQ is a benchmark that measures a model's ability to answer naturally occurring yes/no questions, framed as a reading comprehension task. The questions are generated in unprompted and unconstrained settings, often querying complex, non-factoid information and requiring difficult entailment-like inference. The dataset consists of a single task: answering yes/no questions given a supporting passage.",
7
+ "data_type": "text",
8
+ "domains": [
9
+ "natural language understanding",
10
+ "reading comprehension",
11
+ "natural language inference"
12
+ ],
13
+ "languages": [
14
+ "English"
15
+ ],
16
+ "similar_benchmarks": [
17
+ "MultiNLI",
18
+ "SNLI",
19
+ "QNLI",
20
+ "SQuAD 2.0",
21
+ "Natural Questions (NQ)",
22
+ "QQP",
23
+ "MS MARCO",
24
+ "RACE",
25
+ "bAbI stories"
26
+ ],
27
+ "resources": [
28
+ "https://arxiv.org/abs/1905.10044",
29
+ "https://huggingface.co/datasets/google/boolq",
30
+ "https://goo.gl/boolq",
31
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
32
+ ]
33
+ },
34
+ "purpose_and_intended_users": {
35
+ "goal": "To test models on their ability to answer naturally occurring yes/no questions, which are challenging and require complex inferential abilities beyond surface-level reasoning.",
36
+ "audience": [
37
+ "Researchers in natural language understanding and reading comprehension"
38
+ ],
39
+ "tasks": [
40
+ "Yes/no question answering",
41
+ "Text-pair classification"
42
+ ],
43
+ "limitations": "Annotation involved some errors and ambiguous cases. The use of singly-annotated examples is a trade-off for dataset size. Potential concerns about annotation artifacts are acknowledged.",
44
+ "out_of_scope_uses": "The paper does not explicitly state what the benchmark is not designed for."
45
+ },
46
+ "data": {
47
+ "source": "The data consists of naturally occurring yes/no questions authored by people who were not prompted to write specific question types and did not know the answers. The passages are excerpts from sources like Wikipedia.",
48
+ "size": "15,942 examples total, with 9,427 in the train split and 3,270 in the validation split. The dataset size category is between 10,000 and 100,000 examples.",
49
+ "format": "parquet",
50
+ "annotation": "Questions were answered by human annotators. A quality check on a subset showed the main annotation process achieved 90% accuracy against a gold-standard set labeled by three authors. The training, development, and test sets use singly-annotated examples."
51
+ },
52
+ "methodology": {
53
+ "methods": [
54
+ "Models are evaluated by fine-tuning on the BoolQ training set, potentially after transfer learning from other datasets or unsupervised pre-training. Zero-shot or direct use of pre-trained models without fine-tuning did not outperform the majority baseline.",
55
+ "The task requires providing a yes/no (boolean) answer to a question based on a given passage."
56
+ ],
57
+ "metrics": [
58
+ "Accuracy"
59
+ ],
60
+ "calculation": "The overall score is the accuracy percentage on the test set.",
61
+ "interpretation": "Higher accuracy indicates better performance. Human accuracy is 90%, and the majority baseline is approximately 62%.",
62
+ "baseline_results": "Paper baselines: Majority baseline: 62.17% dev, 62.31% test; Recurrent model baseline: 69.6%; Best model (BERT large pre-trained on MultiNLI then fine-tuned on BoolQ): 80.4% accuracy; Human accuracy: 90%. EEE results: Anthropic-LM v4-s3 52B: 81.5%.",
63
+ "validation": "Quality assurance involved author-led gold-standard annotation on a subset, showing 90% agreement. The development set was used for model selection, such as choosing the best model from five seeds based on its performance."
64
+ },
65
+ "ethical_and_legal_considerations": {
66
+ "privacy_and_anonymity": "Not specified",
67
+ "data_licensing": "cc-by-sa-3.0",
68
+ "consent_procedures": "Not specified",
69
+ "compliance_with_regulations": "Not specified"
70
+ },
71
+ "possible_risks": [
72
+ {
73
+ "category": "Over- or under-reliance",
74
+ "description": [
75
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
76
+ ],
77
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
78
+ },
79
+ {
80
+ "category": "Unrepresentative data",
81
+ "description": [
82
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
83
+ ],
84
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
85
+ },
86
+ {
87
+ "category": "Uncertain data provenance",
88
+ "description": [
89
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
90
+ ],
91
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
92
+ },
93
+ {
94
+ "category": "Data bias",
95
+ "description": [
96
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
97
+ ],
98
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
99
+ },
100
+ {
101
+ "category": "Lack of data transparency",
102
+ "description": [
103
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
104
+ ],
105
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
106
+ }
107
+ ],
108
+ "flagged_fields": {},
109
+ "missing_fields": [
110
+ "ethical_and_legal_considerations.privacy_and_anonymity",
111
+ "ethical_and_legal_considerations.consent_procedures",
112
+ "ethical_and_legal_considerations.compliance_with_regulations"
113
+ ],
114
+ "card_info": {
115
+ "created_at": "2026-03-17T15:08:51.830946",
116
+ "llm": "deepseek-ai/DeepSeek-V3.2"
117
+ }
118
+ },
119
+ "CNN/DailyMail": {
120
+ "benchmark_details": {
121
+ "name": "CNN/DailyMail",
122
+ "overview": "CNN/DailyMail is a benchmark for evaluating abstractive and extractive summarization models using news articles. It contains over 300,000 unique articles written by journalists from CNN and the Daily Mail. The dataset was originally created for machine reading and question answering, but later versions were restructured specifically for summarization tasks.",
123
+ "data_type": "text",
124
+ "domains": [
125
+ "summarization",
126
+ "journalism",
127
+ "news media"
128
+ ],
129
+ "languages": [
130
+ "English"
131
+ ],
132
+ "similar_benchmarks": "No facts provided about similar benchmarks.",
133
+ "resources": [
134
+ "https://huggingface.co/datasets/abisee/cnn_dailymail",
135
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
136
+ ]
137
+ },
138
+ "purpose_and_intended_users": {
139
+ "goal": "To help develop models that can summarize long paragraphs of text into one or two sentences, aiding in the efficient presentation of information from large quantities of text.",
140
+ "audience": [
141
+ "NLP researchers",
142
+ "Summarization model developers"
143
+ ],
144
+ "tasks": [
145
+ "Summarization"
146
+ ],
147
+ "limitations": "News articles often place important information in the first third, which may affect summarization. A manual study found 25% of samples in an earlier version were difficult for humans due to ambiguity and coreference errors. Also, machine-generated summaries may differ in truth values from the original articles.",
148
+ "out_of_scope_uses": "No facts provided about out-of-scope uses."
149
+ },
150
+ "data": {
151
+ "source": "The dataset consists of news articles and highlight sentences written by journalists at CNN and the Daily Mail. The CNN articles were collected from April 2007 to April 2015, and the Daily Mail articles from June 2010 to April 2015, sourced from archives on the Wayback Machine.",
152
+ "size": "Over 300,000 unique articles, with 287,113 training examples, 13,368 validation examples, and 11,490 test examples.",
153
+ "format": "parquet",
154
+ "annotation": "The dataset does not contain additional annotations. The highlights are the original summaries written by the article authors and are used as the target for summarization."
155
+ },
156
+ "methodology": {
157
+ "methods": [
158
+ "Models generate a summary for a given news article, which is then compared to the author-written highlights."
159
+ ],
160
+ "metrics": [
161
+ "ROUGE-2"
162
+ ],
163
+ "calculation": "The ROUGE-2 score measures the overlap of bigrams between the generated summary and the reference highlights.",
164
+ "interpretation": "Higher scores indicate better performance, as they reflect greater overlap with the reference summaries.",
165
+ "baseline_results": "Paper baseline (Zhong et al., 2020): ROUGE-1 score of 44.41 for an extractive summarization model. Evaluation suite result (Anthropic-LM v4-s3 52B): ROUGE-2 score of 0.154.",
166
+ "validation": "No facts provided about validation procedures."
167
+ },
168
+ "ethical_and_legal_considerations": {
169
+ "privacy_and_anonymity": "The dataset (version 3.0.0) is not anonymized, meaning individuals' names are present in the text.",
170
+ "data_licensing": "Apache License 2.0",
171
+ "consent_procedures": "Not specified",
172
+ "compliance_with_regulations": "Not specified"
173
+ },
174
+ "possible_risks": [
175
+ {
176
+ "category": "Over- or under-reliance",
177
+ "description": [
178
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
179
+ ],
180
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
181
+ },
182
+ {
183
+ "category": "Unrepresentative data",
184
+ "description": [
185
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
186
+ ],
187
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
188
+ },
189
+ {
190
+ "category": "Data bias",
191
+ "description": [
192
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
193
+ ],
194
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
195
+ },
196
+ {
197
+ "category": "Data contamination",
198
+ "description": [
199
+ "Data contamination occurs when incorrect data is used for training. For example, data that is not aligned with model's purpose or data that is already set aside for other development tasks such as testing and evaluation."
200
+ ],
201
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-contamination.html"
202
+ },
203
+ {
204
+ "category": "Lack of data transparency",
205
+ "description": [
206
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
207
+ ],
208
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
209
+ }
210
+ ],
211
+ "flagged_fields": {},
212
+ "missing_fields": [
213
+ "ethical_and_legal_considerations.consent_procedures",
214
+ "ethical_and_legal_considerations.compliance_with_regulations"
215
+ ],
216
+ "card_info": {
217
+ "created_at": "2026-03-17T15:15:47.316103",
218
+ "llm": "deepseek-ai/DeepSeek-V3.2"
219
+ }
220
+ },
221
+ "CivilComments": {
222
+ "benchmark_details": {
223
+ "name": "CivilComments",
224
+ "overview": "CivilComments is a benchmark designed to measure unintended identity-based bias in toxicity classification models. It uses a large, real-world dataset of online comments from the Civil Comments platform, extended with crowd-sourced annotations for toxicity and demographic identity references. This provides a nuanced evaluation of bias beyond synthetic datasets.",
225
+ "data_type": "tabular, text",
226
+ "domains": [
227
+ "machine learning fairness",
228
+ "bias measurement",
229
+ "toxic comment classification",
230
+ "text classification"
231
+ ],
232
+ "languages": [
233
+ "English"
234
+ ],
235
+ "similar_benchmarks": "The paper does not name other specific benchmark datasets, only referencing prior work using synthetic test sets.",
236
+ "resources": [
237
+ "https://arxiv.org/abs/1903.04561",
238
+ "https://huggingface.co/datasets/google/civil_comments",
239
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
240
+ ]
241
+ },
242
+ "purpose_and_intended_users": {
243
+ "goal": "To evaluate unintended identity-based bias in toxicity classification models using real data and nuanced metrics.",
244
+ "audience": [
245
+ "Machine learning researchers and practitioners working on fairness, bias measurement, and mitigation, particularly in toxic comment classification."
246
+ ],
247
+ "tasks": [
248
+ "Binary toxicity classification (toxic vs. non-toxic)",
249
+ "Analysis of performance across identity subgroups"
250
+ ],
251
+ "limitations": "The labeled set of identities is not comprehensive and does not provide universal coverage, representing a balance between coverage, annotator accuracy, and example count. The real-world data is potentially noisier than synthetic alternatives.",
252
+ "out_of_scope_uses": [
253
+ "Developing effective strategies for choosing optimal thresholds to minimize bias"
254
+ ]
255
+ },
256
+ "data": {
257
+ "source": "The data consists of online comments sourced from the Civil Comments platform, a commenting plugin for independent English-language news sites. The comments were publicly posted between 2015 and 2017.",
258
+ "size": "The dataset contains approximately 1.8 million comments for training, with separate validation and test sets of approximately 97,320 examples each. All comments were labeled for toxicity, and a subset of 450,000 comments was additionally labeled for identity references.",
259
+ "format": "parquet",
260
+ "annotation": "Labeling was performed by crowd raters. Toxicity labels were applied using guidelines consistent with the Perspective API. For the identity-labeled subset, raters were shown comments and selected referenced identities (e.g., genders, races, ethnicities) from a provided list. Some comments for identity labeling were pre-selected by models to increase the frequency of identity content."
261
+ },
262
+ "methodology": {
263
+ "methods": [
264
+ "Models are evaluated by applying a suite of bias metrics to their predictions on the test set. The original paper demonstrates this using publicly accessible toxicity classifiers on the dataset."
265
+ ],
266
+ "metrics": [
267
+ "Subgroup AUC",
268
+ "BPSN AUC",
269
+ "BNSP AUC",
270
+ "Negative Average Equality Gap (AEG)",
271
+ "Positive Average Equality Gap (AEG)"
272
+ ],
273
+ "calculation": "The evaluation calculates five metrics for each identity subgroup to provide a multi-faceted view of bias. There is no single aggregated overall score.",
274
+ "interpretation": "For the AUC metrics (Subgroup, BPSN, BNSP), higher values indicate better separability (fewer mis-orderings). For the Average Equality Gaps (Negative and Positive), lower values indicate better separability (more similar score distributions).",
275
+ "baseline_results": "Paper baselines: Results for TOXICITY@1 and TOXICITY@6 from the Perspective API are reported, showing their Subgroup AUC, BPSN AUC, BNSP AUC, Negative AEG, and Positive AEG on a synthetic dataset for the lowest performing 20 subgroups. They are also compared on short comments within the human-labeled dataset for specific identities. EEE results: Anthropic-LM v4-s3 52B scored 0.6100 on the CivilComments metric.",
276
+ "validation": "The evaluation assumes the human-provided labels are reliable. The identity labeling set was designed to balance coverage, crowd rater accuracy, and ensure sufficient examples per identity for meaningful results."
277
+ },
278
+ "ethical_and_legal_considerations": {
279
+ "privacy_and_anonymity": "The paper does not discuss how personally identifiable information (PII) in the online comments was handled or if data was anonymized.",
280
+ "data_licensing": "Creative Commons Zero v1.0 Universal",
281
+ "consent_procedures": "The paper does not describe compensation for crowdworkers or the specific platform used for annotation.",
282
+ "compliance_with_regulations": "The paper does not mention IRB approval, GDPR compliance, or any other ethical review process."
283
+ },
284
+ "possible_risks": [
285
+ {
286
+ "category": "Unrepresentative data",
287
+ "description": [
288
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
289
+ ],
290
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
291
+ },
292
+ {
293
+ "category": "Uncertain data provenance",
294
+ "description": [
295
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
296
+ ],
297
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
298
+ },
299
+ {
300
+ "category": "Data bias",
301
+ "description": [
302
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
303
+ ],
304
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
305
+ },
306
+ {
307
+ "category": "Lack of data transparency",
308
+ "description": [
309
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
310
+ ],
311
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
312
+ },
313
+ {
314
+ "category": "Output bias",
315
+ "description": [
316
+ "Generated content might unfairly represent certain groups or individuals."
317
+ ],
318
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/output-bias.html"
319
+ }
320
+ ],
321
+ "flagged_fields": {},
322
+ "missing_fields": [],
323
+ "card_info": {
324
+ "created_at": "2026-03-17T12:38:43.250822",
325
+ "llm": "deepseek-ai/DeepSeek-V3.2"
326
+ }
327
+ },
328
+ "HellaSwag": {
329
+ "benchmark_details": {
330
+ "name": "HellaSwag",
331
+ "overview": "HellaSwag is a benchmark designed to measure commonsense natural language inference by testing a model's ability to select the most plausible follow-up event from four multiple-choice options. It is adversarially constructed to be challenging for state-of-the-art models, using a method called Adversarial Filtering to create difficult wrong answers that are obvious to humans but often misclassified by models.",
332
+ "data_type": "text",
333
+ "domains": [
334
+ "commonsense reasoning",
335
+ "natural language inference"
336
+ ],
337
+ "languages": [
338
+ "English"
339
+ ],
340
+ "similar_benchmarks": [
341
+ "SWAG",
342
+ "SNLI"
343
+ ],
344
+ "resources": [
345
+ "https://rowanzellers.com/hellaswag",
346
+ "https://arxiv.org/abs/1905.07830",
347
+ "https://huggingface.co/datasets/Rowan/hellaswag",
348
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
349
+ ]
350
+ },
351
+ "purpose_and_intended_users": {
352
+ "goal": "To create a challenge dataset that reveals the difficulty of commonsense inference for state-of-the-art models, demonstrating their lack of robustness and reliance on dataset biases rather than genuine reasoning. It aims to evaluate a model's ability to select the most plausible continuation of a given event description.",
353
+ "audience": [
354
+ "NLP researchers"
355
+ ],
356
+ "tasks": [
357
+ "Four-way multiple-choice selection for event continuation",
358
+ "Commonsense inference"
359
+ ],
360
+ "limitations": "The adversarial filtering process used to create the dataset, while effective at making it difficult for models, may also select examples where the ground truth answer is not the one preferred by human annotators, necessitating manual filtering to retain the best examples.",
361
+ "out_of_scope_uses": [
362
+ "Not specified"
363
+ ]
364
+ },
365
+ "data": {
366
+ "source": "Contexts are sourced from WikiHow instructional articles and ActivityNet video descriptions. Incorrect answer choices are generated by machines and then adversarially filtered.",
367
+ "size": "The dataset contains 70,000 examples in total, with 5,001 in-domain validation examples and 5,000 zero-shot validation examples. The training set comprises 39,905 examples.",
368
+ "format": "Parquet",
369
+ "annotation": "Human crowd workers on Amazon Mechanical Turk validated the endings. They were presented with a context and six endings (one true, five machine-generated) and rated their plausibility. The process involved iterative filtering and replacement of unrealistic endings. Worker quality was ensured via an autograded test and fair pay. A gold standard check by three authors on a random sample showed 90% agreement with crowd annotations."
370
+ },
371
+ "methodology": {
372
+ "methods": [
373
+ "Models are evaluated via fine-tuning on the dataset.",
374
+ "The benchmark also includes zero-shot evaluation on held-out categories."
375
+ ],
376
+ "metrics": [
377
+ "HellaSwag accuracy"
378
+ ],
379
+ "calculation": "The overall score is the accuracy percentage on the full validation or test sets. Performance is also broken down by subsets, such as in-domain versus zero-shot and by data source.",
380
+ "interpretation": "Higher scores indicate better performance. Human performance is over 95%, which is considered strong. Model performance below 50% is reported, indicating a struggle, with a gap of over 45% from human performance on in-domain data.",
381
+ "baseline_results": "Paper baselines: BERT-Large achieves 47.3% accuracy overall. ESIM + ELMo gets 33.3% accuracy. A BERT-Base model with a frozen encoder and an added LSTM performs 4.3% worse than fine-tuned BERT-Base. Evaluation suite results: Anthropic-LM v4-s3 52B achieves 0.807 (80.7%) accuracy.",
382
+ "validation": "Human validation involved giving five crowd workers the same multiple-choice task and combining their answers via majority vote to establish a human performance baseline. The adversarial filtering process used iterative human ratings to ensure wrong answers were implausible."
383
+ },
384
+ "ethical_and_legal_considerations": {
385
+ "privacy_and_anonymity": "Not specified",
386
+ "data_licensing": "Not specified",
387
+ "consent_procedures": "Crowdworkers on Amazon Mechanical Turk participated voluntarily and were compensated, with pay described as fair. A qualification task was used to filter workers, and those who consistently preferred generated endings over real ones were disqualified.",
388
+ "compliance_with_regulations": "Not specified"
389
+ },
390
+ "possible_risks": [
391
+ {
392
+ "category": "Over- or under-reliance",
393
+ "description": [
394
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
395
+ ],
396
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
397
+ },
398
+ {
399
+ "category": "Unrepresentative data",
400
+ "description": [
401
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
402
+ ],
403
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
404
+ },
405
+ {
406
+ "category": "Data bias",
407
+ "description": [
408
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
409
+ ],
410
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
411
+ },
412
+ {
413
+ "category": "Lack of data transparency",
414
+ "description": [
415
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
416
+ ],
417
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
418
+ },
419
+ {
420
+ "category": "Improper usage",
421
+ "description": [
422
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
423
+ ],
424
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
425
+ }
426
+ ],
427
+ "flagged_fields": {
428
+ "baseline_results": "[Possible Hallucination], no supporting evidence found in source material"
429
+ },
430
+ "missing_fields": [
431
+ "purpose_and_intended_users.out_of_scope_uses",
432
+ "ethical_and_legal_considerations.privacy_and_anonymity",
433
+ "ethical_and_legal_considerations.data_licensing",
434
+ "ethical_and_legal_considerations.compliance_with_regulations"
435
+ ],
436
+ "card_info": {
437
+ "created_at": "2026-03-17T15:47:07.561060",
438
+ "llm": "deepseek-ai/DeepSeek-V3.2"
439
+ }
440
+ },
441
+ "QuAC": {
442
+ "benchmark_details": {
443
+ "name": "QuAC",
444
+ "overview": "QuAC (Question Answering in Context) is a benchmark that measures a model's ability to answer questions within an information-seeking dialogue. It contains 14,000 dialogues comprising 100,000 question-answer pairs. The dataset is distinctive because questions are often open-ended, context-dependent, unanswerable, or only meaningful within the dialog flow, presenting challenges not found in standard machine comprehension datasets.",
445
+ "data_type": "text",
446
+ "domains": [
447
+ "question answering",
448
+ "dialogue modeling",
449
+ "text generation"
450
+ ],
451
+ "languages": [
452
+ "English"
453
+ ],
454
+ "similar_benchmarks": [
455
+ "SQuAD"
456
+ ],
457
+ "resources": [
458
+ "http://quac.ai",
459
+ "https://arxiv.org/abs/1808.07036",
460
+ "https://huggingface.co/datasets/allenai/quac",
461
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
462
+ ]
463
+ },
464
+ "purpose_and_intended_users": {
465
+ "goal": "To enable models to learn from and participate in information-seeking dialog, handling context-dependent, elliptical, and sometimes unanswerable questions.",
466
+ "audience": [
467
+ "Not specified"
468
+ ],
469
+ "tasks": [
470
+ "Extractive question answering",
471
+ "Text generation",
472
+ "Fill mask"
473
+ ],
474
+ "limitations": "Some questions have lower quality annotations; the dataset filters out the noisiest ~10% of annotations where human F1 is below 40. Questions can be open-ended, unanswerable, or only meaningful within the dialog context, posing inherent challenges.",
475
+ "out_of_scope_uses": [
476
+ "Not specified"
477
+ ]
478
+ },
479
+ "data": {
480
+ "source": "The data is crowdsourced via an interactive dialog between two crowd workers: one acting as a student asking questions to learn about a hidden Wikipedia text, and the other acting as a teacher who answers using short excerpts from that text. The source data comes from Wikipedia.",
481
+ "size": "The dataset contains 98,407 question-answer pairs from 13,594 dialogs, based on 8,854 unique sections from 3,611 unique Wikipedia articles. The training set has 83,568 questions (11,567 dialogs), the validation set has 7,354 questions (1,000 dialogs), and the test set has 7,353 questions (1,002 dialogs). The dataset size is between 10,000 and 100,000 examples.",
482
+ "format": "Each dialog is a sequence of question-answer pairs centered around a Wikipedia section. The teacher's response includes a text span, a 'yes/no' indication, a 'no answer' indication, and an encouragement for follow-up questions.",
483
+ "annotation": "Questions are answered by a teacher selecting short excerpts (spans) from the Wikipedia text. The training set has one reference answer per question, while the validation and test sets each have five reference answers per question to improve evaluation reliability. For evaluation, questions with a human F1 score lower than 40 are not used, as manual inspection revealed lower quality below this threshold."
484
+ },
485
+ "methodology": {
486
+ "methods": [
487
+ "Models predict a text span to answer a question about a Wikipedia section, given a dialog history of previous questions and answers.",
488
+ "The evaluation uses a reading comprehension architecture extended to model dialog context."
489
+ ],
490
+ "metrics": [
491
+ "Word-level F1"
492
+ ],
493
+ "calculation": "Precision and recall are computed over overlapping words after removing stopwords. For 'no answer' questions, F1 is 1 if correctly predicted and 0 otherwise. The maximum F1 among all references is computed for each question.",
494
+ "interpretation": "Higher F1 scores indicate better performance. The best model underperforms humans by 20 F1, indicating significant room for improvement.",
495
+ "baseline_results": "Paper baselines: The best model underperforms humans by 20 F1, but specific model names and scores are not provided. EEE results: Anthropic-LM v4-s3 52B achieves an F1 score of 0.431.",
496
+ "validation": "Quality assurance includes using multiple references for development and test questions, filtering out questions with low human F1 scores, and manual inspection of low-quality annotations."
497
+ },
498
+ "ethical_and_legal_considerations": {
499
+ "privacy_and_anonymity": "Not specified",
500
+ "data_licensing": "MIT License",
501
+ "consent_procedures": "Dialogs were created by two crowd workers, but the specific compensation or platform details are not provided in the paper.",
502
+ "compliance_with_regulations": "Not specified"
503
+ },
504
+ "possible_risks": [
505
+ {
506
+ "category": "Over- or under-reliance",
507
+ "description": [
508
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
509
+ ],
510
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
511
+ },
512
+ {
513
+ "category": "Unrepresentative data",
514
+ "description": [
515
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
516
+ ],
517
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
518
+ },
519
+ {
520
+ "category": "Uncertain data provenance",
521
+ "description": [
522
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
523
+ ],
524
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
525
+ },
526
+ {
527
+ "category": "Data bias",
528
+ "description": [
529
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
530
+ ],
531
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
532
+ },
533
+ {
534
+ "category": "Lack of data transparency",
535
+ "description": [
536
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
537
+ ],
538
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
539
+ }
540
+ ],
541
+ "flagged_fields": {},
542
+ "missing_fields": [
543
+ "purpose_and_intended_users.audience",
544
+ "purpose_and_intended_users.out_of_scope_uses",
545
+ "ethical_and_legal_considerations.privacy_and_anonymity",
546
+ "ethical_and_legal_considerations.compliance_with_regulations"
547
+ ],
548
+ "card_info": {
549
+ "created_at": "2026-03-17T13:45:24.009083",
550
+ "llm": "deepseek-ai/DeepSeek-V3.2"
551
+ }
552
+ }
553
+ },
554
  "models": [
555
  {
556
  "model_id": "Anthropic-LM-v4-s3-52B",
 
566
  "HellaSwag": 0.807,
567
  "OpenbookQA": 0.558,
568
  "TruthfulQA": 0.368,
569
+ "MS MARCO (TREC)": -1,
570
  "CNN/DailyMail": 0.154,
571
  "XSUM": 0.134,
572
  "IMDB": 0.934,
 
585
  "NarrativeQA": 0.596,
586
  "NaturalQuestions (open-book)": 0.581,
587
  "QuAC": 0.313,
588
+ "HellaSwag": -1,
589
+ "OpenbookQA": -1,
590
  "TruthfulQA": 0.177,
591
+ "MS MARCO (TREC)": -1,
592
+ "CNN/DailyMail": -1,
593
+ "XSUM": -1,
594
  "IMDB": 0.931,
595
  "CivilComments": 0.531,
596
  "RAFT": 0.514
 
607
  "NarrativeQA": 0.528,
608
  "NaturalQuestions (open-book)": 0.539,
609
  "QuAC": 0.296,
610
+ "HellaSwag": -1,
611
+ "OpenbookQA": -1,
612
  "TruthfulQA": 0.213,
613
+ "MS MARCO (TREC)": -1,
614
+ "CNN/DailyMail": -1,
615
+ "XSUM": -1,
616
  "IMDB": 0.928,
617
  "CivilComments": 0.511,
618
  "RAFT": 0.502
 
758
  "Mean win rate": 0.553,
759
  "MMLU": 0.339,
760
  "BoolQ": 0.742,
761
+ "NarrativeQA": -1,
762
  "NaturalQuestions (open-book)": 0.589,
763
+ "QuAC": -1,
764
  "HellaSwag": 0.729,
765
  "OpenbookQA": 0.53,
766
  "TruthfulQA": 0.245,
 
783
  "NarrativeQA": 0.605,
784
  "NaturalQuestions (open-book)": 0.568,
785
  "QuAC": 0.334,
786
+ "HellaSwag": -1,
787
+ "OpenbookQA": -1,
788
  "TruthfulQA": 0.182,
789
+ "MS MARCO (TREC)": -1,
790
  "CNN/DailyMail": 0.11,
791
  "XSUM": 0.105,
792
  "IMDB": 0.939,
 
805
  "NarrativeQA": 0.665,
806
  "NaturalQuestions (open-book)": 0.609,
807
  "QuAC": 0.349,
808
+ "HellaSwag": -1,
809
+ "OpenbookQA": -1,
810
  "TruthfulQA": 0.221,
811
+ "MS MARCO (TREC)": -1,
812
  "CNN/DailyMail": 0.139,
813
  "XSUM": 0.124,
814
  "IMDB": 0.947,
 
827
  "NarrativeQA": 0.711,
828
  "NaturalQuestions (open-book)": 0.649,
829
  "QuAC": 0.37,
830
+ "HellaSwag": -1,
831
+ "OpenbookQA": -1,
832
  "TruthfulQA": 0.222,
833
+ "MS MARCO (TREC)": -1,
834
  "CNN/DailyMail": 0.15,
835
  "XSUM": 0.136,
836
  "IMDB": 0.959,
 
867
  "scores": {
868
  "Mean win rate": 0.197,
869
  "MMLU": 0.407,
870
+ "BoolQ": 0,
871
  "NarrativeQA": 0.151,
872
  "NaturalQuestions (open-book)": 0.19,
873
  "QuAC": 0.121,
874
+ "HellaSwag": -1,
875
+ "OpenbookQA": -1,
876
  "TruthfulQA": 0.377,
877
+ "MS MARCO (TREC)": -1,
878
  "CNN/DailyMail": 0.122,
879
  "XSUM": 0.09,
880
  "IMDB": 0.207,
 
1067
  "MMLU": 0.609,
1068
  "BoolQ": 0.896,
1069
  "NarrativeQA": 0.742,
1070
+ "NaturalQuestions (open-book)": -1,
1071
  "QuAC": 0.473,
1072
+ "HellaSwag": -1,
1073
+ "OpenbookQA": -1,
1074
  "TruthfulQA": 0.616,
1075
+ "MS MARCO (TREC)": -1,
1076
  "CNN/DailyMail": 0.049,
1077
  "XSUM": 0.149,
1078
  "IMDB": 0.935,
 
1091
  "NarrativeQA": 0.086,
1092
  "NaturalQuestions (open-book)": 0.477,
1093
  "QuAC": 0.116,
1094
+ "HellaSwag": -1,
1095
+ "OpenbookQA": -1,
1096
  "TruthfulQA": 0.133,
1097
+ "MS MARCO (TREC)": -1,
1098
  "CNN/DailyMail": 0.043,
1099
  "XSUM": 0.015,
1100
  "IMDB": 0.379,
 
1113
  "NarrativeQA": 0.083,
1114
  "NaturalQuestions (open-book)": 0.349,
1115
  "QuAC": 0.144,
1116
+ "HellaSwag": -1,
1117
+ "OpenbookQA": -1,
1118
  "TruthfulQA": 0.193,
1119
+ "MS MARCO (TREC)": -1,
1120
  "CNN/DailyMail": 0.03,
1121
  "XSUM": 0.058,
1122
  "IMDB": 0.337,
 
1135
  "NarrativeQA": 0.691,
1136
  "NaturalQuestions (open-book)": 0.686,
1137
  "QuAC": 0.403,
1138
+ "HellaSwag": -1,
1139
+ "OpenbookQA": -1,
1140
  "TruthfulQA": 0.385,
1141
+ "MS MARCO (TREC)": -1,
1142
+ "CNN/DailyMail": -1,
1143
+ "XSUM": -1,
1144
  "IMDB": 0.762,
1145
  "CivilComments": 0.645,
1146
  "RAFT": 0.657
 
1157
  "NarrativeQA": 0.643,
1158
  "NaturalQuestions (open-book)": 0.634,
1159
  "QuAC": 0.392,
1160
+ "HellaSwag": -1,
1161
+ "OpenbookQA": -1,
1162
  "TruthfulQA": 0.292,
1163
+ "MS MARCO (TREC)": -1,
1164
+ "CNN/DailyMail": -1,
1165
+ "XSUM": -1,
1166
  "IMDB": 0.916,
1167
  "CivilComments": 0.62,
1168
  "RAFT": 0.693
 
1179
  "NarrativeQA": 0.711,
1180
  "NaturalQuestions (open-book)": 0.614,
1181
  "QuAC": 0.347,
1182
+ "HellaSwag": -1,
1183
+ "OpenbookQA": -1,
1184
  "TruthfulQA": 0.324,
1185
+ "MS MARCO (TREC)": -1,
1186
+ "CNN/DailyMail": -1,
1187
+ "XSUM": -1,
1188
  "IMDB": 0.928,
1189
  "CivilComments": 0.6,
1190
  "RAFT": 0.643
 
1201
  "NarrativeQA": 0.752,
1202
  "NaturalQuestions (open-book)": 0.666,
1203
  "QuAC": 0.39,
1204
+ "HellaSwag": -1,
1205
+ "OpenbookQA": -1,
1206
  "TruthfulQA": 0.344,
1207
+ "MS MARCO (TREC)": -1,
1208
+ "CNN/DailyMail": -1,
1209
+ "XSUM": -1,
1210
  "IMDB": 0.927,
1211
  "CivilComments": 0.549,
1212
  "RAFT": 0.752
 
1223
  "NarrativeQA": 0.755,
1224
  "NaturalQuestions (open-book)": 0.672,
1225
  "QuAC": 0.401,
1226
+ "HellaSwag": -1,
1227
+ "OpenbookQA": -1,
1228
  "TruthfulQA": 0.508,
1229
+ "MS MARCO (TREC)": -1,
1230
+ "CNN/DailyMail": -1,
1231
+ "XSUM": -1,
1232
  "IMDB": 0.962,
1233
  "CivilComments": 0.655,
1234
  "RAFT": 0.702
 
1245
  "NarrativeQA": 0.669,
1246
  "NaturalQuestions (open-book)": 0.589,
1247
  "QuAC": 0.338,
1248
+ "HellaSwag": -1,
1249
+ "OpenbookQA": -1,
1250
  "TruthfulQA": 0.28,
1251
+ "MS MARCO (TREC)": -1,
1252
+ "CNN/DailyMail": -1,
1253
+ "XSUM": -1,
1254
  "IMDB": 0.947,
1255
  "CivilComments": 0.563,
1256
  "RAFT": 0.573
 
1311
  "NarrativeQA": 0.744,
1312
  "NaturalQuestions (open-book)": 0.637,
1313
  "QuAC": 0.424,
1314
+ "HellaSwag": -1,
1315
+ "OpenbookQA": -1,
1316
  "TruthfulQA": 0.33,
1317
+ "MS MARCO (TREC)": -1,
1318
+ "CNN/DailyMail": -1,
1319
+ "XSUM": -1,
1320
  "IMDB": 0.962,
1321
  "CivilComments": 0.588,
1322
  "RAFT": 0.707
 
1333
  "NarrativeQA": 0.77,
1334
  "NaturalQuestions (open-book)": 0.674,
1335
  "QuAC": 0.484,
1336
+ "HellaSwag": -1,
1337
+ "OpenbookQA": -1,
1338
  "TruthfulQA": 0.554,
1339
+ "MS MARCO (TREC)": -1,
1340
+ "CNN/DailyMail": -1,
1341
+ "XSUM": -1,
1342
  "IMDB": 0.961,
1343
  "CivilComments": 0.652,
1344
  "RAFT": 0.727
 
1355
  "NarrativeQA": 0.691,
1356
  "NaturalQuestions (open-book)": 0.611,
1357
  "QuAC": 0.406,
1358
+ "HellaSwag": -1,
1359
+ "OpenbookQA": -1,
1360
  "TruthfulQA": 0.272,
1361
+ "MS MARCO (TREC)": -1,
1362
+ "CNN/DailyMail": -1,
1363
+ "XSUM": -1,
1364
  "IMDB": 0.907,
1365
  "CivilComments": 0.562,
1366
  "RAFT": 0.643
 
1421
  "NarrativeQA": 0.716,
1422
  "NaturalQuestions (open-book)": 0.687,
1423
  "QuAC": 0.423,
1424
+ "HellaSwag": -1,
1425
+ "OpenbookQA": -1,
1426
  "TruthfulQA": 0.422,
1427
+ "MS MARCO (TREC)": -1,
1428
+ "CNN/DailyMail": -1,
1429
+ "XSUM": -1,
1430
  "IMDB": 0.962,
1431
  "CivilComments": 0.624,
1432
  "RAFT": 0.707
 
1443
  "NarrativeQA": 0.732,
1444
  "NaturalQuestions (open-book)": 0.673,
1445
  "QuAC": 0.393,
1446
+ "HellaSwag": -1,
1447
+ "OpenbookQA": -1,
1448
  "TruthfulQA": 0.231,
1449
+ "MS MARCO (TREC)": -1,
1450
+ "CNN/DailyMail": -1,
1451
+ "XSUM": -1,
1452
  "IMDB": 0.959,
1453
  "CivilComments": 0.599,
1454
  "RAFT": 0.723
 
1465
  "NarrativeQA": 0.733,
1466
  "NaturalQuestions (open-book)": 0.697,
1467
  "QuAC": 0.327,
1468
+ "HellaSwag": -1,
1469
+ "OpenbookQA": -1,
1470
  "TruthfulQA": 0.234,
1471
+ "MS MARCO (TREC)": -1,
1472
+ "CNN/DailyMail": -1,
1473
+ "XSUM": -1,
1474
  "IMDB": 0.956,
1475
  "CivilComments": 0.573,
1476
  "RAFT": 0.68
 
1619
  "NarrativeQA": 0.663,
1620
  "NaturalQuestions (open-book)": 0.624,
1621
  "QuAC": 0.512,
1622
+ "HellaSwag": -1,
1623
+ "OpenbookQA": -1,
1624
  "TruthfulQA": 0.609,
1625
+ "MS MARCO (TREC)": -1,
1626
+ "CNN/DailyMail": -1,
1627
+ "XSUM": -1,
1628
  "IMDB": 0.899,
1629
  "CivilComments": 0.674,
1630
  "RAFT": 0.768
 
1641
  "NarrativeQA": 0.625,
1642
  "NaturalQuestions (open-book)": 0.675,
1643
  "QuAC": 0.485,
1644
+ "HellaSwag": -1,
1645
+ "OpenbookQA": -1,
1646
  "TruthfulQA": 0.339,
1647
+ "MS MARCO (TREC)": -1,
1648
+ "CNN/DailyMail": -1,
1649
+ "XSUM": -1,
1650
  "IMDB": 0.943,
1651
  "CivilComments": 0.696,
1652
  "RAFT": 0.748
 
1773
  "NarrativeQA": 0.396,
1774
  "NaturalQuestions (open-book)": 0.592,
1775
  "QuAC": 0.27,
1776
+ "HellaSwag": -1,
1777
+ "OpenbookQA": -1,
1778
  "TruthfulQA": 0.243,
1779
+ "MS MARCO (TREC)": -1,
1780
+ "CNN/DailyMail": -1,
1781
+ "XSUM": -1,
1782
  "IMDB": 0.738,
1783
  "CivilComments": 0.566,
1784
  "RAFT": 0.486
 
1795
  "NarrativeQA": 0.625,
1796
  "NaturalQuestions (open-book)": 0.666,
1797
  "QuAC": 0.371,
1798
+ "HellaSwag": -1,
1799
+ "OpenbookQA": -1,
1800
  "TruthfulQA": 0.384,
1801
+ "MS MARCO (TREC)": -1,
1802
+ "CNN/DailyMail": -1,
1803
+ "XSUM": -1,
1804
  "IMDB": 0.959,
1805
  "CivilComments": 0.603,
1806
  "RAFT": 0.586
 
1817
  "NarrativeQA": 0.476,
1818
  "NaturalQuestions (open-book)": 0.449,
1819
  "QuAC": 0.311,
1820
+ "HellaSwag": -1,
1821
+ "OpenbookQA": -1,
1822
  "TruthfulQA": 0.213,
1823
+ "MS MARCO (TREC)": -1,
1824
+ "CNN/DailyMail": -1,
1825
+ "XSUM": -1,
1826
  "IMDB": 0.852,
1827
  "CivilComments": 0.511,
1828
  "RAFT": 0.523
 
1839
  "NarrativeQA": 0.673,
1840
  "NaturalQuestions (open-book)": 0.675,
1841
  "QuAC": 0.307,
1842
+ "HellaSwag": -1,
1843
+ "OpenbookQA": -1,
1844
  "TruthfulQA": 0.353,
1845
+ "MS MARCO (TREC)": -1,
1846
+ "CNN/DailyMail": -1,
1847
+ "XSUM": -1,
1848
  "IMDB": 0.959,
1849
  "CivilComments": 0.552,
1850
  "RAFT": 0.661
 
1861
  "NarrativeQA": 0.621,
1862
  "NaturalQuestions (open-book)": 0.579,
1863
  "QuAC": 0.332,
1864
+ "HellaSwag": -1,
1865
+ "OpenbookQA": -1,
1866
  "TruthfulQA": 0.234,
1867
+ "MS MARCO (TREC)": -1,
1868
+ "CNN/DailyMail": -1,
1869
+ "XSUM": -1,
1870
  "IMDB": 0.836,
1871
  "CivilComments": 0.514,
1872
  "RAFT": 0.602
 
1883
  "NarrativeQA": 0.617,
1884
  "NaturalQuestions (open-book)": 0.586,
1885
  "QuAC": 0.336,
1886
+ "HellaSwag": -1,
1887
+ "OpenbookQA": -1,
1888
  "TruthfulQA": 0.205,
1889
+ "MS MARCO (TREC)": -1,
1890
+ "CNN/DailyMail": -1,
1891
+ "XSUM": -1,
1892
  "IMDB": 0.752,
1893
  "CivilComments": 0.547,
1894
  "RAFT": 0.648
 
1905
  "NarrativeQA": 0.555,
1906
  "NaturalQuestions (open-book)": 0.52,
1907
  "QuAC": 0.309,
1908
+ "HellaSwag": -1,
1909
+ "OpenbookQA": -1,
1910
  "TruthfulQA": 0.277,
1911
+ "MS MARCO (TREC)": -1,
1912
+ "CNN/DailyMail": -1,
1913
+ "XSUM": -1,
1914
  "IMDB": 0.907,
1915
  "CivilComments": 0.549,
1916
  "RAFT": 0.502
 
1927
  "NarrativeQA": 0.638,
1928
  "NaturalQuestions (open-book)": 0.659,
1929
  "QuAC": 0.26,
1930
+ "HellaSwag": -1,
1931
+ "OpenbookQA": -1,
1932
  "TruthfulQA": 0.243,
1933
+ "MS MARCO (TREC)": -1,
1934
+ "CNN/DailyMail": -1,
1935
+ "XSUM": -1,
1936
  "IMDB": 0.927,
1937
  "CivilComments": 0.664,
1938
  "RAFT": 0.695
 
1949
  "NarrativeQA": 0.638,
1950
  "NaturalQuestions (open-book)": 0.637,
1951
  "QuAC": 0.259,
1952
+ "HellaSwag": -1,
1953
+ "OpenbookQA": -1,
1954
  "TruthfulQA": 0.208,
1955
+ "MS MARCO (TREC)": -1,
1956
+ "CNN/DailyMail": -1,
1957
+ "XSUM": -1,
1958
  "IMDB": 0.894,
1959
  "CivilComments": 0.549,
1960
  "RAFT": 0.661
 
1971
  "NarrativeQA": 0.496,
1972
  "NaturalQuestions (open-book)": 0.682,
1973
  "QuAC": 0.433,
1974
+ "HellaSwag": -1,
1975
+ "OpenbookQA": -1,
1976
  "TruthfulQA": 0.185,
1977
+ "MS MARCO (TREC)": -1,
1978
  "CNN/DailyMail": 0.152,
1979
  "XSUM": 0.104,
1980
  "IMDB": 0.94,
 
1993
  "NarrativeQA": 0.252,
1994
  "NaturalQuestions (open-book)": 0.227,
1995
  "QuAC": 0.162,
1996
+ "HellaSwag": -1,
1997
+ "OpenbookQA": -1,
1998
  "TruthfulQA": 0.202,
1999
+ "MS MARCO (TREC)": -1,
2000
  "CNN/DailyMail": 0.017,
2001
  "XSUM": 0.021,
2002
  "IMDB": 0.836,
 
2015
  "NarrativeQA": 0.706,
2016
  "NaturalQuestions (open-book)": 0.642,
2017
  "QuAC": 0.272,
2018
+ "HellaSwag": -1,
2019
+ "OpenbookQA": -1,
2020
  "TruthfulQA": 0.218,
2021
+ "MS MARCO (TREC)": -1,
2022
  "CNN/DailyMail": 0.154,
2023
  "XSUM": 0.132,
2024
  "IMDB": 0.955,
 
2027
  }
2028
  }
2029
  ]
2030
+ }
data/benchmarks/helm_lite.json CHANGED
@@ -1,4 +1,346 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "models": [
3
  {
4
  "model_id": "01-ai/yi-34b",
@@ -980,7 +1322,7 @@
980
  "OpenbookQA": 0.912,
981
  "MMLU": 0.659,
982
  "MATH": 0.703,
983
- "GSM8K": -1.0,
984
  "LegalBench": 0.584,
985
  "MedQA": 0.672,
986
  "WMT 2014": 0.154
@@ -1548,4 +1890,4 @@
1548
  }
1549
  }
1550
  ]
1551
- }
 
1
  {
2
+ "benchmark_cards": {
3
+ "GSM8K": {
4
+ "benchmark_details": {
5
+ "name": "GSM8K",
6
+ "overview": "GSM8K is a benchmark that measures the ability of language models to perform multi-step mathematical reasoning. It consists of 8.5K high-quality, linguistically diverse grade school math word problems. The problems are distinctive because they require 2 to 8 steps to solve using basic arithmetic, and even the largest transformer models struggle to achieve high test performance on them. Solutions are provided in natural language with step-by-step reasoning.",
7
+ "data_type": "text",
8
+ "domains": [
9
+ "grade school mathematics",
10
+ "math word problems"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "Not specified"
17
+ ],
18
+ "resources": [
19
+ "https://arxiv.org/abs/2110.14168",
20
+ "https://huggingface.co/datasets/openai/gsm8k",
21
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
22
+ ]
23
+ },
24
+ "purpose_and_intended_users": {
25
+ "goal": "To diagnose the failures of current language models in robust multi-step mathematical reasoning and to support research, particularly in methods like training verifiers to judge solution correctness. It also aims to shed light on the properties of large language models' reasoning processes.",
26
+ "audience": [
27
+ "Researchers working on language model capabilities and mathematical reasoning"
28
+ ],
29
+ "tasks": [
30
+ "Solving grade school math word problems",
31
+ "Text generation for question answering"
32
+ ],
33
+ "limitations": "Even the largest models struggle with high test performance on this dataset, and autoregressive models have no mechanism to correct their own errors during solution generation.",
34
+ "out_of_scope_uses": [
35
+ "Not specified"
36
+ ]
37
+ },
38
+ "data": {
39
+ "source": "The dataset was created by hiring freelance contractors via Upwork and then scaled using the NLP data labeling platform Surge AI. Problems and solutions were written by these contractors.",
40
+ "size": "8.5K (8,500) problems, with a size category of 10K<n<100K. The training set contains 7,473 examples and the test set contains 1,319 examples.",
41
+ "format": "parquet. The data is structured with a 'Problem:' field followed by a 'Solution:' field, where the solution includes step-by-step reasoning with intermediate calculations in special tags (e.g., `<<4*2=8>>`) and ends with a 'Final Answer:'.",
42
+ "annotation": "Contractors wrote the problems and solutions. For verification, different workers re-solved all problems to check agreement with the original solutions; problematic problems were either repaired or discarded. The annotators were from Surge AI."
43
+ },
44
+ "methodology": {
45
+ "methods": [
46
+ "Models are evaluated by generating step-by-step solutions to math word problems. The dataset provides two answer formats: a standard step-by-step solution and a solution structured with Socratic sub-questions.",
47
+ "The paper proposes a verification method where a separate verifier model is trained to judge the correctness of generated solutions. At test time, multiple candidate solutions are generated, and the one ranked highest by the verifier is selected."
48
+ ],
49
+ "metrics": [
50
+ "GSM8K"
51
+ ],
52
+ "calculation": "The GSM8K metric is a continuous score where higher values are better. It is described as 'EM on GSM8K', indicating it measures exact match accuracy.",
53
+ "interpretation": "Higher scores indicate better performance. The score is not bounded, but typical model performance ranges from low to high, with the highest reported score being 75.2.",
54
+ "baseline_results": "Paper baselines: The paper notes that even the largest transformer models fail to achieve high test performance, but does not report specific scores. EEE results: Llama 3.1 8B Instruct scored 75.2, and Yi 34B scored 0.648 on GSM8K.",
55
+ "validation": "The paper provides empirical evidence that the verification method scales more effectively with data than a finetuning baseline and remains effective even with a verifier much smaller than the generator."
56
+ },
57
+ "ethical_and_legal_considerations": {
58
+ "privacy_and_anonymity": "Not specified",
59
+ "data_licensing": "MIT License",
60
+ "consent_procedures": "Not specified",
61
+ "compliance_with_regulations": "Not specified"
62
+ },
63
+ "possible_risks": [
64
+ {
65
+ "category": "Over- or under-reliance",
66
+ "description": [
67
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
68
+ ],
69
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
70
+ },
71
+ {
72
+ "category": "Data bias",
73
+ "description": [
74
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
75
+ ],
76
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
77
+ },
78
+ {
79
+ "category": "Reproducibility",
80
+ "description": [
81
+ "Replicating agent behavior or output can be impacted by changes or updates made to external services and tools. This impact is increased if the agent is built with generative AI."
82
+ ],
83
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/reproducibility-agentic.html"
84
+ },
85
+ {
86
+ "category": "Incomplete advice",
87
+ "description": [
88
+ "When a model provides advice without having enough information, resulting in possible harm if the advice is followed."
89
+ ],
90
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/incomplete-advice.html"
91
+ },
92
+ {
93
+ "category": "Improper usage",
94
+ "description": [
95
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
96
+ ],
97
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
98
+ }
99
+ ],
100
+ "flagged_fields": {},
101
+ "missing_fields": [
102
+ "benchmark_details.similar_benchmarks",
103
+ "purpose_and_intended_users.out_of_scope_uses",
104
+ "ethical_and_legal_considerations.privacy_and_anonymity",
105
+ "ethical_and_legal_considerations.consent_procedures",
106
+ "ethical_and_legal_considerations.compliance_with_regulations"
107
+ ],
108
+ "card_info": {
109
+ "created_at": "2026-03-17T15:37:16.459776",
110
+ "llm": "deepseek-ai/DeepSeek-V3.2"
111
+ }
112
+ },
113
+ "LegalBench": {
114
+ "benchmark_details": {
115
+ "name": "LEGALBENCH",
116
+ "overview": "LEGALBENCH is a benchmark designed to measure the legal reasoning capabilities of large language models. It comprises 162 tasks collaboratively constructed and hand-crafted by legal professionals, covering six distinct types of legal reasoning.",
117
+ "data_type": "text",
118
+ "domains": [
119
+ "legal",
120
+ "law",
121
+ "finance"
122
+ ],
123
+ "languages": [
124
+ "English"
125
+ ],
126
+ "similar_benchmarks": [
127
+ "GLUE",
128
+ "HELM",
129
+ "BigBench",
130
+ "RAFT"
131
+ ],
132
+ "resources": [
133
+ "https://arxiv.org/abs/2308.11462",
134
+ "https://huggingface.co/datasets/nguha/legalbench",
135
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
136
+ ]
137
+ },
138
+ "purpose_and_intended_users": {
139
+ "goal": "To enable greater study of what types of legal reasoning large language models (LLMs) can perform.",
140
+ "audience": [
141
+ "Practitioners (to integrate LLMs into workflows)",
142
+ "Legal academics",
143
+ "Computer scientists"
144
+ ],
145
+ "tasks": [
146
+ "Text classification",
147
+ "Question answering",
148
+ "Text generation",
149
+ "Rule-application tasks"
150
+ ],
151
+ "limitations": "The tasks do not generalize to all legal reasoning tasks or all types of legal documents, offering only a preliminary understanding of LLM performance.",
152
+ "out_of_scope_uses": [
153
+ "Predicting the legality of real-world events",
154
+ "Predicting the outcome of lawsuits",
155
+ "Providing legal advice"
156
+ ]
157
+ },
158
+ "data": {
159
+ "source": "Data is drawn from three categories: existing publicly available datasets and corpora (some reformatted), datasets previously created by legal professionals but not released, and tasks developed specifically for LegalBench. The tasks originate from 36 distinct corpora.",
160
+ "size": "The benchmark comprises 162 tasks. The distribution of tasks by sample count is: 28 tasks have 50-100 samples, 97 have 100-500 samples, 29 have 500-2000 samples, and 8 have 2000+ samples. The overall dataset falls into the size category of 10,000 to 100,000 examples.",
161
+ "format": "Examples are presented in a structured format with fields such as 'Task name', 'Question', 'Options', and 'Answer'.",
162
+ "annotation": "Annotation procedures are task-dependent. For certain tasks, each data point was manually validated by a law-trained expert. Detailed annotation methodology for each task is documented in a separate section of the paper."
163
+ },
164
+ "methodology": {
165
+ "methods": [
166
+ "Models are evaluated in a few-shot setting. Train splits consist of a small random sample of between 2 to 8 instances to capture a true few-shot learning scenario.",
167
+ "For rule-application tasks, a law-trained expert manually validates each model generation."
168
+ ],
169
+ "metrics": [
170
+ "LegalBench",
171
+ "Correctness",
172
+ "Analysis"
173
+ ],
174
+ "calculation": "The primary benchmark metric is Exact Match (EM) on LegalBench. For rule-application tasks, two separate metrics are computed: 'correctness' (the proportion of generations without errors) and 'analysis'.",
175
+ "interpretation": "Higher scores on the LegalBench metric indicate better performance. The metric is continuous and lower scores are not better.",
176
+ "baseline_results": "The original paper evaluated 20 LLMs from 11 different families but did not provide specific scores. In a separate evaluation suite, the Yi 34B model achieved a score of 0.618.",
177
+ "validation": "For rule-application tasks, a law-trained expert manually validated each model generation. For datasets reused or adapted from other sources, the original data sheets document any redactions or missing data."
178
+ },
179
+ "ethical_and_legal_considerations": {
180
+ "privacy_and_anonymity": "For tasks that reuse or adapt existing datasets, the benchmark refers to the original data sheets for details on any data redactions or missing information.",
181
+ "data_licensing": "other",
182
+ "consent_procedures": "Not specified.",
183
+ "compliance_with_regulations": "The benchmark includes a section for each task intended to provide information relevant to ethical review processes, but specific details are not provided in the available facts."
184
+ },
185
+ "possible_risks": [
186
+ {
187
+ "category": "Over- or under-reliance",
188
+ "description": [
189
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
190
+ ],
191
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
192
+ },
193
+ {
194
+ "category": "Unrepresentative data",
195
+ "description": [
196
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
197
+ ],
198
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
199
+ },
200
+ {
201
+ "category": "Data bias",
202
+ "description": [
203
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
204
+ ],
205
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
206
+ },
207
+ {
208
+ "category": "Lack of data transparency",
209
+ "description": [
210
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
211
+ ],
212
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
213
+ },
214
+ {
215
+ "category": "Improper usage",
216
+ "description": [
217
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
218
+ ],
219
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
220
+ }
221
+ ],
222
+ "flagged_fields": {},
223
+ "missing_fields": [
224
+ "ethical_and_legal_considerations.consent_procedures"
225
+ ],
226
+ "card_info": {
227
+ "created_at": "2026-03-17T12:59:10.203815",
228
+ "llm": "deepseek-ai/DeepSeek-V3.2"
229
+ }
230
+ },
231
+ "MedQA": {
232
+ "benchmark_details": {
233
+ "name": "MEDQA",
234
+ "overview": "MEDQA is a free-form multiple-choice open-domain question answering (OpenQA) benchmark designed to measure a model's ability to solve medical problems. It is distinctive as the first such dataset sourced from professional medical board exams, covering multiple languages and presenting a challenging real-world scenario.",
235
+ "data_type": "text",
236
+ "domains": [
237
+ "medical knowledge",
238
+ "professional medical exams"
239
+ ],
240
+ "languages": [
241
+ "English"
242
+ ],
243
+ "similar_benchmarks": [
244
+ "ARC",
245
+ "OpenBookQA"
246
+ ],
247
+ "resources": [
248
+ "https://github.com/jind11/MedQA",
249
+ "https://arxiv.org/abs/2009.13081",
250
+ "https://huggingface.co/datasets/GBaker/MedQA-USMLE-4-options",
251
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
252
+ ]
253
+ },
254
+ "purpose_and_intended_users": {
255
+ "goal": "To present a challenging open-domain question answering dataset to promote the development of stronger models capable of handling sophisticated real-world medical scenarios, specifically evaluating performance on medical knowledge as tested in professional exams.",
256
+ "audience": [
257
+ "The natural language processing (NLP) community"
258
+ ],
259
+ "tasks": [
260
+ "Free-form multiple-choice question answering",
261
+ "Open-domain question answering"
262
+ ],
263
+ "limitations": "Even the best current methods achieve relatively low accuracy (36.7% to 70.1% across languages), indicating the benchmark's difficulty and the limitations of existing models.",
264
+ "out_of_scope_uses": [
265
+ "Not specified"
266
+ ]
267
+ },
268
+ "data": {
269
+ "source": "The data is collected from professional medical board exams.",
270
+ "size": "The dataset contains 12,723 questions in English, 34,251 in simplified Chinese, and 14,123 in traditional Chinese. The total number of examples falls within the 10K to 100K range.",
271
+ "format": "JSON",
272
+ "annotation": "The answer labels are the correct answers from the professional exams. No additional annotation process is described."
273
+ },
274
+ "methodology": {
275
+ "methods": [
276
+ "The benchmark uses a sequential combination of a document retriever and a machine comprehension model. It includes both rule-based and neural methods.",
277
+ "The evaluation is a standard question-answering task, though the specific learning setting (e.g., zero-shot, few-shot, fine-tuning) is not explicitly defined."
278
+ ],
279
+ "metrics": [
280
+ "Accuracy"
281
+ ],
282
+ "calculation": "The overall score is the accuracy on the test set.",
283
+ "interpretation": "Higher accuracy indicates better performance. The best reported accuracies are 36.7% for English, 42.0% for traditional Chinese, and 70.1% for simplified Chinese questions.",
284
+ "baseline_results": "Original paper baselines: The best method reported achieves 36.7% accuracy on English, 42.0% on traditional Chinese, and 70.1% on simplified Chinese questions. Model names are not specified. EEE results: Yi 34B achieves a score of 0.656 (65.6%).",
285
+ "validation": "Not specified"
286
+ },
287
+ "ethical_and_legal_considerations": {
288
+ "privacy_and_anonymity": "Not specified",
289
+ "data_licensing": "Creative Commons Attribution 4.0",
290
+ "consent_procedures": "Not specified",
291
+ "compliance_with_regulations": "Not specified"
292
+ },
293
+ "possible_risks": [
294
+ {
295
+ "category": "Over- or under-reliance",
296
+ "description": [
297
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
298
+ ],
299
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
300
+ },
301
+ {
302
+ "category": "Unrepresentative data",
303
+ "description": [
304
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
305
+ ],
306
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
307
+ },
308
+ {
309
+ "category": "Uncertain data provenance",
310
+ "description": [
311
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
312
+ ],
313
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
314
+ },
315
+ {
316
+ "category": "Data bias",
317
+ "description": [
318
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
319
+ ],
320
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
321
+ },
322
+ {
323
+ "category": "Lack of data transparency",
324
+ "description": [
325
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
326
+ ],
327
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
328
+ }
329
+ ],
330
+ "flagged_fields": {},
331
+ "missing_fields": [
332
+ "purpose_and_intended_users.out_of_scope_uses",
333
+ "methodology.validation",
334
+ "ethical_and_legal_considerations.privacy_and_anonymity",
335
+ "ethical_and_legal_considerations.consent_procedures",
336
+ "ethical_and_legal_considerations.compliance_with_regulations"
337
+ ],
338
+ "card_info": {
339
+ "created_at": "2026-03-17T13:23:29.822123",
340
+ "llm": "deepseek-ai/DeepSeek-V3.2"
341
+ }
342
+ }
343
+ },
344
  "models": [
345
  {
346
  "model_id": "01-ai/yi-34b",
 
1322
  "OpenbookQA": 0.912,
1323
  "MMLU": 0.659,
1324
  "MATH": 0.703,
1325
+ "GSM8K": -1,
1326
  "LegalBench": 0.584,
1327
  "MedQA": 0.672,
1328
  "WMT 2014": 0.154
 
1890
  }
1891
  }
1892
  ]
1893
+ }
data/benchmarks/helm_mmlu.json CHANGED
@@ -1,4 +1,117 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "models": [
3
  {
4
  "model_id": "01-ai/yi-34b",
@@ -427,7 +540,7 @@
427
  "Sociology": 0.846,
428
  "Virology": 0.524,
429
  "World Religions": 0.825,
430
- "Mean win rate": 1.0
431
  }
432
  },
433
  {
@@ -3398,4 +3511,4 @@
3398
  }
3399
  }
3400
  ]
3401
- }
 
1
  {
2
+ "benchmark_cards": {
3
+ "MMLU All Subjects": {
4
+ "benchmark_details": {
5
+ "name": "Measuring Massive Multitask Language Understanding (MMLU)",
6
+ "overview": "MMLU is a multiple-choice question-answering benchmark that measures a text model's multitask accuracy across 57 distinct tasks. It is designed to test a wide range of knowledge and problem-solving abilities, covering diverse academic and professional subjects from elementary to advanced levels.",
7
+ "data_type": "text",
8
+ "domains": [
9
+ "STEM",
10
+ "humanities",
11
+ "social sciences"
12
+ ],
13
+ "languages": [
14
+ "English"
15
+ ],
16
+ "similar_benchmarks": [
17
+ "GLUE",
18
+ "SuperGLUE"
19
+ ],
20
+ "resources": [
21
+ "https://arxiv.org/abs/2009.03300",
22
+ "https://huggingface.co/datasets/cais/mmlu",
23
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json",
24
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
25
+ ]
26
+ },
27
+ "purpose_and_intended_users": {
28
+ "goal": "To bridge the gap between the wide-ranging knowledge models acquire during pretraining and existing evaluation measures by assessing models across a diverse set of academic and professional subjects.",
29
+ "audience": [
30
+ "Researchers analyzing model capabilities and identifying shortcomings"
31
+ ],
32
+ "tasks": [
33
+ "Multiple-choice question answering"
34
+ ],
35
+ "limitations": "Models exhibit lopsided performance, frequently do not know when they are wrong, and have near-random accuracy on some socially important subjects like morality and law.",
36
+ "out_of_scope_uses": [
37
+ "Not specified"
38
+ ]
39
+ },
40
+ "data": {
41
+ "source": "The dataset is an original source with expert-generated questions.",
42
+ "size": "The dataset contains over 100,000 examples, with a test split of 14,042 examples, a validation split of 1,531 examples, a dev split of 285 examples, and an auxiliary training split of 99,842 examples.",
43
+ "format": "parquet",
44
+ "annotation": "The dataset has no additional annotations; each question provides the correct answer as a class label (A, B, C, or D)."
45
+ },
46
+ "methodology": {
47
+ "methods": [
48
+ "Models are evaluated exclusively in zero-shot and few-shot settings to measure knowledge acquired during pretraining."
49
+ ],
50
+ "metrics": [
51
+ "MMLU (accuracy)"
52
+ ],
53
+ "calculation": "The overall score is an average accuracy across the 57 tasks.",
54
+ "interpretation": "Higher scores indicate better performance. Near random-chance accuracy indicates weak performance. The very largest GPT-3 model improved over random chance by almost 20 percentage points on average, but models still need substantial improvements to reach expert-level accuracy.",
55
+ "baseline_results": "Paper baselines: Most recent models have near random-chance accuracy. The very largest GPT-3 model improved over random chance by almost 20 percentage points on average. EEE results: Yi 34B scored 0.6500, Anthropic-LM v4-s3 52B scored 0.4810. The mean score across 2 evaluated models is 0.5655.",
56
+ "validation": "Not specified"
57
+ },
58
+ "ethical_and_legal_considerations": {
59
+ "privacy_and_anonymity": "Not specified",
60
+ "data_licensing": "MIT License",
61
+ "consent_procedures": "Not specified",
62
+ "compliance_with_regulations": "Not specified"
63
+ },
64
+ "possible_risks": [
65
+ {
66
+ "category": "Over- or under-reliance",
67
+ "description": [
68
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
69
+ ],
70
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
71
+ },
72
+ {
73
+ "category": "Unrepresentative data",
74
+ "description": [
75
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
76
+ ],
77
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
78
+ },
79
+ {
80
+ "category": "Data bias",
81
+ "description": [
82
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
83
+ ],
84
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
85
+ },
86
+ {
87
+ "category": "Lack of data transparency",
88
+ "description": [
89
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
90
+ ],
91
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
92
+ },
93
+ {
94
+ "category": "Improper usage",
95
+ "description": [
96
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
97
+ ],
98
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
99
+ }
100
+ ],
101
+ "flagged_fields": {},
102
+ "missing_fields": [
103
+ "purpose_and_intended_users.out_of_scope_uses",
104
+ "methodology.validation",
105
+ "ethical_and_legal_considerations.privacy_and_anonymity",
106
+ "ethical_and_legal_considerations.consent_procedures",
107
+ "ethical_and_legal_considerations.compliance_with_regulations"
108
+ ],
109
+ "card_info": {
110
+ "created_at": "2026-03-17T13:14:49.605975",
111
+ "llm": "deepseek-ai/DeepSeek-V3.2"
112
+ }
113
+ }
114
+ },
115
  "models": [
116
  {
117
  "model_id": "01-ai/yi-34b",
 
540
  "Sociology": 0.846,
541
  "Virology": 0.524,
542
  "World Religions": 0.825,
543
+ "Mean win rate": 1
544
  }
545
  },
546
  {
 
3511
  }
3512
  }
3513
  ]
3514
+ }
data/benchmarks/hfopenllm_v2.json CHANGED
@@ -1,4 +1,588 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "models": [
3
  {
4
  "model_id": "0-hero/Matter-0.2-7B-DPO",
@@ -839,7 +1423,7 @@
839
  "scores": {
840
  "IFEval": 0.1467,
841
  "BBH": 0.2704,
842
- "MATH Level 5": 0.0,
843
  "GPQA": 0.2525,
844
  "MUSR": 0.3605,
845
  "MMLU-PRO": 0.1123
@@ -878,7 +1462,7 @@
878
  "scores": {
879
  "IFEval": 0.1467,
880
  "BBH": 0.2704,
881
- "MATH Level 5": 0.0,
882
  "GPQA": 0.2525,
883
  "MUSR": 0.3605,
884
  "MMLU-PRO": 0.1123
@@ -1138,7 +1722,7 @@
1138
  "scores": {
1139
  "IFEval": 0.1374,
1140
  "BBH": 0.2834,
1141
- "MATH Level 5": 0.0,
1142
  "GPQA": 0.2458,
1143
  "MUSR": 0.3552,
1144
  "MMLU-PRO": 0.1117
@@ -1671,7 +2255,7 @@
1671
  "scores": {
1672
  "IFEval": 0.1751,
1673
  "BBH": 0.293,
1674
- "MATH Level 5": 0.0,
1675
  "GPQA": 0.2374,
1676
  "MUSR": 0.3499,
1677
  "MMLU-PRO": 0.1112
@@ -1775,7 +2359,7 @@
1775
  "scores": {
1776
  "IFEval": 0.2049,
1777
  "BBH": 0.2912,
1778
- "MATH Level 5": 0.0,
1779
  "GPQA": 0.2592,
1780
  "MUSR": 0.3575,
1781
  "MMLU-PRO": 0.1168
@@ -3998,7 +4582,7 @@
3998
  "scores": {
3999
  "IFEval": 0.2497,
4000
  "BBH": 0.2817,
4001
- "MATH Level 5": 0.0,
4002
  "GPQA": 0.2441,
4003
  "MUSR": 0.3578,
4004
  "MMLU-PRO": 0.1085
@@ -4011,7 +4595,7 @@
4011
  "scores": {
4012
  "IFEval": 0.1507,
4013
  "BBH": 0.293,
4014
- "MATH Level 5": 0.0,
4015
  "GPQA": 0.2534,
4016
  "MUSR": 0.3565,
4017
  "MMLU-PRO": 0.1125
@@ -5233,7 +5817,7 @@
5233
  "scores": {
5234
  "IFEval": 0.1778,
5235
  "BBH": 0.287,
5236
- "MATH Level 5": 0.0,
5237
  "GPQA": 0.2475,
5238
  "MUSR": 0.3447,
5239
  "MMLU-PRO": 0.111
@@ -7846,7 +8430,7 @@
7846
  "scores": {
7847
  "IFEval": 0.1592,
7848
  "BBH": 0.2906,
7849
- "MATH Level 5": 0.0,
7850
  "GPQA": 0.2492,
7851
  "MUSR": 0.3286,
7852
  "MMLU-PRO": 0.1111
@@ -8574,7 +9158,7 @@
8574
  "scores": {
8575
  "IFEval": 0.7628,
8576
  "BBH": 0.5098,
8577
- "MATH Level 5": 0.0,
8578
  "GPQA": 0.2802,
8579
  "MUSR": 0.4579,
8580
  "MMLU-PRO": 0.4033
@@ -8730,7 +9314,7 @@
8730
  "scores": {
8731
  "IFEval": 0.288,
8732
  "BBH": 0.5154,
8733
- "MATH Level 5": 0.0,
8734
  "GPQA": 0.3247,
8735
  "MUSR": 0.408,
8736
  "MMLU-PRO": 0.3817
@@ -8899,7 +9483,7 @@
8899
  "scores": {
8900
  "IFEval": 0.1869,
8901
  "BBH": 0.2913,
8902
- "MATH Level 5": 0.0,
8903
  "GPQA": 0.2601,
8904
  "MUSR": 0.3738,
8905
  "MMLU-PRO": 0.1123
@@ -8938,7 +9522,7 @@
8938
  "scores": {
8939
  "IFEval": 0.1575,
8940
  "BBH": 0.4196,
8941
- "MATH Level 5": 0.0,
8942
  "GPQA": 0.2936,
8943
  "MUSR": 0.3116,
8944
  "MMLU-PRO": 0.19
@@ -9224,7 +9808,7 @@
9224
  "scores": {
9225
  "IFEval": 0.1697,
9226
  "BBH": 0.2877,
9227
- "MATH Level 5": 0.0,
9228
  "GPQA": 0.2492,
9229
  "MUSR": 0.3751,
9230
  "MMLU-PRO": 0.1101
@@ -9235,9 +9819,9 @@
9235
  "name": "BgGPT-Gemma-2-27B-IT-v1.0",
9236
  "developer": "INSAIT-Institute",
9237
  "scores": {
9238
- "IFEval": 0.0,
9239
  "BBH": 0.2912,
9240
- "MATH Level 5": 0.0,
9241
  "GPQA": 0.2601,
9242
  "MUSR": 0.3575,
9243
  "MMLU-PRO": 0.1167
@@ -9354,7 +9938,7 @@
9354
  "scores": {
9355
  "IFEval": 0.1409,
9356
  "BBH": 0.2791,
9357
- "MATH Level 5": 0.0,
9358
  "GPQA": 0.2441,
9359
  "MUSR": 0.3738,
9360
  "MMLU-PRO": 0.1109
@@ -12617,7 +13201,7 @@
12617
  "scores": {
12618
  "IFEval": 0.1351,
12619
  "BBH": 0.2828,
12620
- "MATH Level 5": 0.0,
12621
  "GPQA": 0.2559,
12622
  "MUSR": 0.3526,
12623
  "MMLU-PRO": 0.1128
@@ -12630,7 +13214,7 @@
12630
  "scores": {
12631
  "IFEval": 0.1354,
12632
  "BBH": 0.2811,
12633
- "MATH Level 5": 0.0,
12634
  "GPQA": 0.2643,
12635
  "MUSR": 0.3579,
12636
  "MMLU-PRO": 0.1105
@@ -12643,7 +13227,7 @@
12643
  "scores": {
12644
  "IFEval": 0.1354,
12645
  "BBH": 0.2827,
12646
- "MATH Level 5": 0.0,
12647
  "GPQA": 0.2609,
12648
  "MUSR": 0.3619,
12649
  "MMLU-PRO": 0.1094
@@ -12708,7 +13292,7 @@
12708
  "scores": {
12709
  "IFEval": 0.1395,
12710
  "BBH": 0.2779,
12711
- "MATH Level 5": 0.0,
12712
  "GPQA": 0.2483,
12713
  "MUSR": 0.3447,
12714
  "MMLU-PRO": 0.1115
@@ -13683,7 +14267,7 @@
13683
  "scores": {
13684
  "IFEval": 0.1153,
13685
  "BBH": 0.2868,
13686
- "MATH Level 5": 0.0,
13687
  "GPQA": 0.2458,
13688
  "MUSR": 0.3698,
13689
  "MMLU-PRO": 0.1108
@@ -15410,9 +15994,9 @@
15410
  "name": "naps-gemma-2-27b-v-0.1.0",
15411
  "developer": "NAPS-ai",
15412
  "scores": {
15413
- "IFEval": 0.0,
15414
  "BBH": 0.2912,
15415
- "MATH Level 5": 0.0,
15416
  "GPQA": 0.2601,
15417
  "MUSR": 0.3575,
15418
  "MMLU-PRO": 0.1168
@@ -15423,9 +16007,9 @@
15423
  "name": "naps-gemma-2-27b-v0.1.0",
15424
  "developer": "NAPS-ai",
15425
  "scores": {
15426
- "IFEval": 0.0,
15427
  "BBH": 0.2912,
15428
- "MATH Level 5": 0.0,
15429
  "GPQA": 0.2601,
15430
  "MUSR": 0.3575,
15431
  "MMLU-PRO": 0.1168
@@ -15490,7 +16074,7 @@
15490
  "scores": {
15491
  "IFEval": 0.1845,
15492
  "BBH": 0.3041,
15493
- "MATH Level 5": 0.0,
15494
  "GPQA": 0.2391,
15495
  "MUSR": 0.3486,
15496
  "MMLU-PRO": 0.1099
@@ -15516,7 +16100,7 @@
15516
  "scores": {
15517
  "IFEval": 0.1881,
15518
  "BBH": 0.2178,
15519
- "MATH Level 5": 0.0,
15520
  "GPQA": 0.2064,
15521
  "MUSR": 0.3538,
15522
  "MMLU-PRO": 0.1163
@@ -16335,7 +16919,7 @@
16335
  "scores": {
16336
  "IFEval": 0.1808,
16337
  "BBH": 0.2815,
16338
- "MATH Level 5": 0.0,
16339
  "GPQA": 0.2559,
16340
  "MUSR": 0.375,
16341
  "MMLU-PRO": 0.1143
@@ -16348,7 +16932,7 @@
16348
  "scores": {
16349
  "IFEval": 0.1749,
16350
  "BBH": 0.2602,
16351
- "MATH Level 5": 0.0,
16352
  "GPQA": 0.2458,
16353
  "MUSR": 0.338,
16354
  "MMLU-PRO": 0.1125
@@ -17089,7 +17673,7 @@
17089
  "scores": {
17090
  "IFEval": 0.0257,
17091
  "BBH": 0.292,
17092
- "MATH Level 5": 0.0,
17093
  "GPQA": 0.25,
17094
  "MUSR": 0.3511,
17095
  "MMLU-PRO": 0.1162
@@ -17128,7 +17712,7 @@
17128
  "scores": {
17129
  "IFEval": 0.203,
17130
  "BBH": 0.2936,
17131
- "MATH Level 5": 0.0,
17132
  "GPQA": 0.2576,
17133
  "MUSR": 0.3619,
17134
  "MMLU-PRO": 0.1111
@@ -17193,7 +17777,7 @@
17193
  "scores": {
17194
  "IFEval": 0.2254,
17195
  "BBH": 0.275,
17196
- "MATH Level 5": 0.0,
17197
  "GPQA": 0.2576,
17198
  "MUSR": 0.3762,
17199
  "MMLU-PRO": 0.1123
@@ -17219,7 +17803,7 @@
17219
  "scores": {
17220
  "IFEval": 0.0233,
17221
  "BBH": 0.3092,
17222
- "MATH Level 5": 0.0,
17223
  "GPQA": 0.2601,
17224
  "MUSR": 0.3314,
17225
  "MMLU-PRO": 0.1138
@@ -18129,7 +18713,7 @@
18129
  "scores": {
18130
  "IFEval": 0.1757,
18131
  "BBH": 0.274,
18132
- "MATH Level 5": 0.0,
18133
  "GPQA": 0.25,
18134
  "MUSR": 0.3753,
18135
  "MMLU-PRO": 0.112
@@ -18140,7 +18724,7 @@
18140
  "name": "INTELLECT-1-Instruct",
18141
  "developer": "PrimeIntellect",
18142
  "scores": {
18143
- "IFEval": 0.0,
18144
  "BBH": 0.287,
18145
  "MATH Level 5": 0.0227,
18146
  "GPQA": 0.2483,
@@ -18155,7 +18739,7 @@
18155
  "scores": {
18156
  "IFEval": 0.2282,
18157
  "BBH": 0.2877,
18158
- "MATH Level 5": 0.0,
18159
  "GPQA": 0.2601,
18160
  "MUSR": 0.3484,
18161
  "MMLU-PRO": 0.1123
@@ -19455,7 +20039,7 @@
19455
  "scores": {
19456
  "IFEval": 0.3071,
19457
  "BBH": 0.3341,
19458
- "MATH Level 5": 0.0,
19459
  "GPQA": 0.2576,
19460
  "MUSR": 0.3329,
19461
  "MMLU-PRO": 0.1697
@@ -19819,7 +20403,7 @@
19819
  "scores": {
19820
  "IFEval": 0.1897,
19821
  "BBH": 0.2876,
19822
- "MATH Level 5": 0.0,
19823
  "GPQA": 0.2492,
19824
  "MUSR": 0.3948,
19825
  "MMLU-PRO": 0.1078
@@ -19975,7 +20559,7 @@
19975
  "scores": {
19976
  "IFEval": 0.0932,
19977
  "BBH": 0.2977,
19978
- "MATH Level 5": 0.0,
19979
  "GPQA": 0.2475,
19980
  "MUSR": 0.3941,
19981
  "MMLU-PRO": 0.1157
@@ -19988,7 +20572,7 @@
19988
  "scores": {
19989
  "IFEval": 0.0858,
19990
  "BBH": 0.2929,
19991
- "MATH Level 5": 0.0,
19992
  "GPQA": 0.2483,
19993
  "MUSR": 0.3981,
19994
  "MMLU-PRO": 0.1285
@@ -20742,7 +21326,7 @@
20742
  "scores": {
20743
  "IFEval": 0.1545,
20744
  "BBH": 0.2945,
20745
- "MATH Level 5": 0.0,
20746
  "GPQA": 0.2391,
20747
  "MUSR": 0.3711,
20748
  "MMLU-PRO": 0.116
@@ -20794,7 +21378,7 @@
20794
  "scores": {
20795
  "IFEval": 0.1809,
20796
  "BBH": 0.2881,
20797
- "MATH Level 5": 0.0,
20798
  "GPQA": 0.2433,
20799
  "MUSR": 0.3872,
20800
  "MMLU-PRO": 0.109
@@ -22211,7 +22795,7 @@
22211
  "scores": {
22212
  "IFEval": 0.208,
22213
  "BBH": 0.292,
22214
- "MATH Level 5": 0.0,
22215
  "GPQA": 0.2601,
22216
  "MUSR": 0.3499,
22217
  "MMLU-PRO": 0.1167
@@ -22224,7 +22808,7 @@
22224
  "scores": {
22225
  "IFEval": 0.1407,
22226
  "BBH": 0.2769,
22227
- "MATH Level 5": 0.0,
22228
  "GPQA": 0.2634,
22229
  "MUSR": 0.3218,
22230
  "MMLU-PRO": 0.1112
@@ -22250,7 +22834,7 @@
22250
  "scores": {
22251
  "IFEval": 0.0656,
22252
  "BBH": 0.3568,
22253
- "MATH Level 5": 0.0,
22254
  "GPQA": 0.2676,
22255
  "MUSR": 0.3805,
22256
  "MMLU-PRO": 0.1672
@@ -22302,7 +22886,7 @@
22302
  "scores": {
22303
  "IFEval": 0.1828,
22304
  "BBH": 0.2828,
22305
- "MATH Level 5": 0.0,
22306
  "GPQA": 0.229,
22307
  "MUSR": 0.31,
22308
  "MMLU-PRO": 0.1144
@@ -22315,7 +22899,7 @@
22315
  "scores": {
22316
  "IFEval": 0.1815,
22317
  "BBH": 0.2297,
22318
- "MATH Level 5": 0.0,
22319
  "GPQA": 0.2315,
22320
  "MUSR": 0.3445,
22321
  "MMLU-PRO": 0.116
@@ -23056,7 +23640,7 @@
23056
  "scores": {
23057
  "IFEval": 0.1426,
23058
  "BBH": 0.5528,
23059
- "MATH Level 5": 0.0,
23060
  "GPQA": 0.3163,
23061
  "MUSR": 0.4386,
23062
  "MMLU-PRO": 0.4145
@@ -23067,9 +23651,9 @@
23067
  "name": "glm-4-9b-chat",
23068
  "developer": "THUDM",
23069
  "scores": {
23070
- "IFEval": 0.0,
23071
  "BBH": 0.4736,
23072
- "MATH Level 5": 0.0,
23073
  "GPQA": 0.3138,
23074
  "MUSR": 0.3994,
23075
  "MMLU-PRO": 0.3167
@@ -23080,9 +23664,9 @@
23080
  "name": "glm-4-9b-chat-1m",
23081
  "developer": "THUDM",
23082
  "scores": {
23083
- "IFEval": 0.0,
23084
  "BBH": 0.418,
23085
- "MATH Level 5": 0.0,
23086
  "GPQA": 0.3037,
23087
  "MUSR": 0.3795,
23088
  "MMLU-PRO": 0.3163
@@ -23823,7 +24407,7 @@
23823
  "scores": {
23824
  "IFEval": 0.1751,
23825
  "BBH": 0.2643,
23826
- "MATH Level 5": 0.0,
23827
  "GPQA": 0.2106,
23828
  "MUSR": 0.3128,
23829
  "MMLU-PRO": 0.1173
@@ -24031,7 +24615,7 @@
24031
  "scores": {
24032
  "IFEval": 0.1879,
24033
  "BBH": 0.3017,
24034
- "MATH Level 5": 0.0,
24035
  "GPQA": 0.224,
24036
  "MUSR": 0.3684,
24037
  "MMLU-PRO": 0.1164
@@ -24148,7 +24732,7 @@
24148
  "scores": {
24149
  "IFEval": 0.1879,
24150
  "BBH": 0.4462,
24151
- "MATH Level 5": 0.0,
24152
  "GPQA": 0.281,
24153
  "MUSR": 0.3627,
24154
  "MMLU-PRO": 0.2318
@@ -25292,7 +25876,7 @@
25292
  "scores": {
25293
  "IFEval": 0.185,
25294
  "BBH": 0.2913,
25295
- "MATH Level 5": 0.0,
25296
  "GPQA": 0.2592,
25297
  "MUSR": 0.3497,
25298
  "MMLU-PRO": 0.1166
@@ -25435,7 +26019,7 @@
25435
  "scores": {
25436
  "IFEval": 0.1273,
25437
  "BBH": 0.2944,
25438
- "MATH Level 5": 0.0,
25439
  "GPQA": 0.2408,
25440
  "MUSR": 0.3368,
25441
  "MMLU-PRO": 0.1144
@@ -25838,7 +26422,7 @@
25838
  "scores": {
25839
  "IFEval": 0.1856,
25840
  "BBH": 0.291,
25841
- "MATH Level 5": 0.0,
25842
  "GPQA": 0.2643,
25843
  "MUSR": 0.3364,
25844
  "MMLU-PRO": 0.1091
@@ -25903,7 +26487,7 @@
25903
  "scores": {
25904
  "IFEval": 0.207,
25905
  "BBH": 0.3011,
25906
- "MATH Level 5": 0.0,
25907
  "GPQA": 0.2634,
25908
  "MUSR": 0.3219,
25909
  "MMLU-PRO": 0.111
@@ -25916,7 +26500,7 @@
25916
  "scores": {
25917
  "IFEval": 0.207,
25918
  "BBH": 0.3011,
25919
- "MATH Level 5": 0.0,
25920
  "GPQA": 0.2634,
25921
  "MUSR": 0.3219,
25922
  "MMLU-PRO": 0.111
@@ -25981,7 +26565,7 @@
25981
  "scores": {
25982
  "IFEval": 0.167,
25983
  "BBH": 0.2938,
25984
- "MATH Level 5": 0.0,
25985
  "GPQA": 0.2517,
25986
  "MUSR": 0.3541,
25987
  "MMLU-PRO": 0.1087
@@ -26046,7 +26630,7 @@
26046
  "scores": {
26047
  "IFEval": 0.1446,
26048
  "BBH": 0.2817,
26049
- "MATH Level 5": 0.0,
26050
  "GPQA": 0.2433,
26051
  "MUSR": 0.3697,
26052
  "MMLU-PRO": 0.1095
@@ -26592,7 +27176,7 @@
26592
  "scores": {
26593
  "IFEval": 0.1746,
26594
  "BBH": 0.3126,
26595
- "MATH Level 5": 0.0,
26596
  "GPQA": 0.245,
26597
  "MUSR": 0.4096,
26598
  "MMLU-PRO": 0.1087
@@ -26735,7 +27319,7 @@
26735
  "scores": {
26736
  "IFEval": 0.1748,
26737
  "BBH": 0.2883,
26738
- "MATH Level 5": 0.0,
26739
  "GPQA": 0.2592,
26740
  "MUSR": 0.3803,
26741
  "MMLU-PRO": 0.1129
@@ -26969,7 +27553,7 @@
26969
  "scores": {
26970
  "IFEval": 0.167,
26971
  "BBH": 0.295,
26972
- "MATH Level 5": 0.0,
26973
  "GPQA": 0.2567,
26974
  "MUSR": 0.3764,
26975
  "MMLU-PRO": 0.1082
@@ -27320,7 +27904,7 @@
27320
  "scores": {
27321
  "IFEval": 0.1815,
27322
  "BBH": 0.3242,
27323
- "MATH Level 5": 0.0,
27324
  "GPQA": 0.2945,
27325
  "MUSR": 0.3596,
27326
  "MMLU-PRO": 0.331
@@ -27372,7 +27956,7 @@
27372
  "scores": {
27373
  "IFEval": 0.1943,
27374
  "BBH": 0.6234,
27375
- "MATH Level 5": 0.0,
27376
  "GPQA": 0.3322,
27377
  "MUSR": 0.4267,
27378
  "MMLU-PRO": 0.4688
@@ -27593,7 +28177,7 @@
27593
  "scores": {
27594
  "IFEval": 0.1773,
27595
  "BBH": 0.2892,
27596
- "MATH Level 5": 0.0,
27597
  "GPQA": 0.2592,
27598
  "MUSR": 0.343,
27599
  "MMLU-PRO": 0.1169
@@ -27684,7 +28268,7 @@
27684
  "scores": {
27685
  "IFEval": 0.1706,
27686
  "BBH": 0.3607,
27687
- "MATH Level 5": 0.0,
27688
  "GPQA": 0.2911,
27689
  "MUSR": 0.3911,
27690
  "MMLU-PRO": 0.1723
@@ -27697,7 +28281,7 @@
27697
  "scores": {
27698
  "IFEval": 0.1645,
27699
  "BBH": 0.3597,
27700
- "MATH Level 5": 0.0,
27701
  "GPQA": 0.2852,
27702
  "MUSR": 0.4082,
27703
  "MMLU-PRO": 0.1647
@@ -27762,7 +28346,7 @@
27762
  "scores": {
27763
  "IFEval": 0.1884,
27764
  "BBH": 0.6129,
27765
- "MATH Level 5": 0.0,
27766
  "GPQA": 0.3196,
27767
  "MUSR": 0.4451,
27768
  "MMLU-PRO": 0.4589
@@ -27775,7 +28359,7 @@
27775
  "scores": {
27776
  "IFEval": 0.1758,
27777
  "BBH": 0.2757,
27778
- "MATH Level 5": 0.0,
27779
  "GPQA": 0.2357,
27780
  "MUSR": 0.3209,
27781
  "MMLU-PRO": 0.1114
@@ -27788,7 +28372,7 @@
27788
  "scores": {
27789
  "IFEval": 0.1913,
27790
  "BBH": 0.2942,
27791
- "MATH Level 5": 0.0,
27792
  "GPQA": 0.2601,
27793
  "MUSR": 0.362,
27794
  "MMLU-PRO": 0.1168
@@ -28048,7 +28632,7 @@
28048
  "scores": {
28049
  "IFEval": 0.1879,
28050
  "BBH": 0.2969,
28051
- "MATH Level 5": 0.0,
28052
  "GPQA": 0.2626,
28053
  "MUSR": 0.3633,
28054
  "MMLU-PRO": 0.1168
@@ -28074,7 +28658,7 @@
28074
  "scores": {
28075
  "IFEval": 0.1754,
28076
  "BBH": 0.2874,
28077
- "MATH Level 5": 0.0,
28078
  "GPQA": 0.2492,
28079
  "MUSR": 0.3524,
28080
  "MMLU-PRO": 0.1128
@@ -28113,7 +28697,7 @@
28113
  "scores": {
28114
  "IFEval": 0.1639,
28115
  "BBH": 0.2827,
28116
- "MATH Level 5": 0.0,
28117
  "GPQA": 0.2584,
28118
  "MUSR": 0.3857,
28119
  "MMLU-PRO": 0.1095
@@ -28126,7 +28710,7 @@
28126
  "scores": {
28127
  "IFEval": 0.2009,
28128
  "BBH": 0.3215,
28129
- "MATH Level 5": 0.0,
28130
  "GPQA": 0.2743,
28131
  "MUSR": 0.3843,
28132
  "MMLU-PRO": 0.108
@@ -28152,7 +28736,7 @@
28152
  "scores": {
28153
  "IFEval": 0.1697,
28154
  "BBH": 0.4063,
28155
- "MATH Level 5": 0.0,
28156
  "GPQA": 0.2827,
28157
  "MUSR": 0.3501,
28158
  "MMLU-PRO": 0.1981
@@ -28217,7 +28801,7 @@
28217
  "scores": {
28218
  "IFEval": 0.1921,
28219
  "BBH": 0.3252,
28220
- "MATH Level 5": 0.0,
28221
  "GPQA": 0.2374,
28222
  "MUSR": 0.375,
28223
  "MMLU-PRO": 0.1088
@@ -28230,7 +28814,7 @@
28230
  "scores": {
28231
  "IFEval": 0.1742,
28232
  "BBH": 0.3794,
28233
- "MATH Level 5": 0.0,
28234
  "GPQA": 0.3062,
28235
  "MUSR": 0.394,
28236
  "MMLU-PRO": 0.198
@@ -28943,9 +29527,9 @@
28943
  "name": "GRAG-NEMO-12B-ORPO-HESSIAN-AI",
28944
  "developer": "avemio",
28945
  "scores": {
28946
- "IFEval": 0.0,
28947
  "BBH": 0.2607,
28948
- "MATH Level 5": 0.0,
28949
  "GPQA": 0.2592,
28950
  "MUSR": 0.3447,
28951
  "MMLU-PRO": 0.1061
@@ -29634,7 +30218,7 @@
29634
  "scores": {
29635
  "IFEval": 0.1813,
29636
  "BBH": 0.336,
29637
- "MATH Level 5": 0.0,
29638
  "GPQA": 0.25,
29639
  "MUSR": 0.3497,
29640
  "MMLU-PRO": 0.1445
@@ -30076,7 +30660,7 @@
30076
  "scores": {
30077
  "IFEval": 0.1579,
30078
  "BBH": 0.2962,
30079
- "MATH Level 5": 0.0,
30080
  "GPQA": 0.2517,
30081
  "MUSR": 0.3846,
30082
  "MMLU-PRO": 0.1146
@@ -30856,7 +31440,7 @@
30856
  "scores": {
30857
  "IFEval": 0.1829,
30858
  "BBH": 0.2874,
30859
- "MATH Level 5": 0.0,
30860
  "GPQA": 0.2592,
30861
  "MUSR": 0.3674,
30862
  "MMLU-PRO": 0.11
@@ -31233,7 +31817,7 @@
31233
  "scores": {
31234
  "IFEval": 0.1123,
31235
  "BBH": 0.2875,
31236
- "MATH Level 5": 0.0,
31237
  "GPQA": 0.2466,
31238
  "MUSR": 0.3938,
31239
  "MMLU-PRO": 0.1135
@@ -31766,7 +32350,7 @@
31766
  "scores": {
31767
  "IFEval": 0.1706,
31768
  "BBH": 0.2947,
31769
- "MATH Level 5": 0.0,
31770
  "GPQA": 0.2601,
31771
  "MUSR": 0.3686,
31772
  "MMLU-PRO": 0.1167
@@ -31779,7 +32363,7 @@
31779
  "scores": {
31780
  "IFEval": 0.1916,
31781
  "BBH": 0.2977,
31782
- "MATH Level 5": 0.0,
31783
  "GPQA": 0.2685,
31784
  "MUSR": 0.3872,
31785
  "MMLU-PRO": 0.1132
@@ -32806,7 +33390,7 @@
32806
  "scores": {
32807
  "IFEval": 0.1715,
32808
  "BBH": 0.5463,
32809
- "MATH Level 5": 0.0,
32810
  "GPQA": 0.3406,
32811
  "MUSR": 0.3555,
32812
  "MMLU-PRO": 0.3947
@@ -33105,7 +33689,7 @@
33105
  "scores": {
33106
  "IFEval": 0.2019,
33107
  "BBH": 0.2868,
33108
- "MATH Level 5": 0.0,
33109
  "GPQA": 0.2601,
33110
  "MUSR": 0.3566,
33111
  "MMLU-PRO": 0.1065
@@ -33118,7 +33702,7 @@
33118
  "scores": {
33119
  "IFEval": 0.1979,
33120
  "BBH": 0.2698,
33121
- "MATH Level 5": 0.0,
33122
  "GPQA": 0.2466,
33123
  "MUSR": 0.3593,
33124
  "MMLU-PRO": 0.1041
@@ -33196,7 +33780,7 @@
33196
  "scores": {
33197
  "IFEval": 0.1752,
33198
  "BBH": 0.2906,
33199
- "MATH Level 5": 0.0,
33200
  "GPQA": 0.2399,
33201
  "MUSR": 0.3512,
33202
  "MMLU-PRO": 0.1126
@@ -33820,7 +34404,7 @@
33820
  "scores": {
33821
  "IFEval": 0.125,
33822
  "BBH": 0.2867,
33823
- "MATH Level 5": 0.0,
33824
  "GPQA": 0.2483,
33825
  "MUSR": 0.3487,
33826
  "MMLU-PRO": 0.1098
@@ -33833,7 +34417,7 @@
33833
  "scores": {
33834
  "IFEval": 0.1411,
33835
  "BBH": 0.2924,
33836
- "MATH Level 5": 0.0,
33837
  "GPQA": 0.2525,
33838
  "MUSR": 0.3541,
33839
  "MMLU-PRO": 0.1101
@@ -33885,7 +34469,7 @@
33885
  "scores": {
33886
  "IFEval": 0.1373,
33887
  "BBH": 0.2949,
33888
- "MATH Level 5": 0.0,
33889
  "GPQA": 0.2508,
33890
  "MUSR": 0.3698,
33891
  "MMLU-PRO": 0.1118
@@ -34782,7 +35366,7 @@
34782
  "scores": {
34783
  "IFEval": 0.1718,
34784
  "BBH": 0.2766,
34785
- "MATH Level 5": 0.0,
34786
  "GPQA": 0.2424,
34787
  "MUSR": 0.3857,
34788
  "MMLU-PRO": 0.1123
@@ -34795,7 +35379,7 @@
34795
  "scores": {
34796
  "IFEval": 0.196,
34797
  "BBH": 0.3047,
34798
- "MATH Level 5": 0.0,
34799
  "GPQA": 0.2643,
34800
  "MUSR": 0.3795,
34801
  "MMLU-PRO": 0.112
@@ -34808,7 +35392,7 @@
34808
  "scores": {
34809
  "IFEval": 0.2358,
34810
  "BBH": 0.2959,
34811
- "MATH Level 5": 0.0,
34812
  "GPQA": 0.2416,
34813
  "MUSR": 0.3689,
34814
  "MMLU-PRO": 0.1089
@@ -34873,7 +35457,7 @@
34873
  "scores": {
34874
  "IFEval": 0.1585,
34875
  "BBH": 0.2876,
34876
- "MATH Level 5": 0.0,
34877
  "GPQA": 0.25,
34878
  "MUSR": 0.3517,
34879
  "MMLU-PRO": 0.1098
@@ -35861,7 +36445,7 @@
35861
  "scores": {
35862
  "IFEval": 0.2049,
35863
  "BBH": 0.2912,
35864
- "MATH Level 5": 0.0,
35865
  "GPQA": 0.2601,
35866
  "MUSR": 0.3575,
35867
  "MMLU-PRO": 0.1167
@@ -37382,7 +37966,7 @@
37382
  "scores": {
37383
  "IFEval": 0.1028,
37384
  "BBH": 0.2941,
37385
- "MATH Level 5": 0.0,
37386
  "GPQA": 0.2567,
37387
  "MUSR": 0.3528,
37388
  "MMLU-PRO": 0.1141
@@ -37577,7 +38161,7 @@
37577
  "scores": {
37578
  "IFEval": 0.1572,
37579
  "BBH": 0.2863,
37580
- "MATH Level 5": 0.0,
37581
  "GPQA": 0.2592,
37582
  "MUSR": 0.3607,
37583
  "MMLU-PRO": 0.1169
@@ -40281,7 +40865,7 @@
40281
  "scores": {
40282
  "IFEval": 0.1416,
40283
  "BBH": 0.2989,
40284
- "MATH Level 5": 0.0,
40285
  "GPQA": 0.2525,
40286
  "MUSR": 0.3475,
40287
  "MMLU-PRO": 0.1094
@@ -40853,7 +41437,7 @@
40853
  "scores": {
40854
  "IFEval": 0.2145,
40855
  "BBH": 0.4283,
40856
- "MATH Level 5": 0.0,
40857
  "GPQA": 0.2961,
40858
  "MUSR": 0.4979,
40859
  "MMLU-PRO": 0.2414
@@ -41295,7 +41879,7 @@
41295
  "scores": {
41296
  "IFEval": 0.1778,
41297
  "BBH": 0.3056,
41298
- "MATH Level 5": 0.0,
41299
  "GPQA": 0.2517,
41300
  "MUSR": 0.3883,
41301
  "MMLU-PRO": 0.1126
@@ -41685,7 +42269,7 @@
41685
  "scores": {
41686
  "IFEval": 0.1564,
41687
  "BBH": 0.2894,
41688
- "MATH Level 5": 0.0,
41689
  "GPQA": 0.2626,
41690
  "MUSR": 0.3789,
41691
  "MMLU-PRO": 0.1169
@@ -42218,7 +42802,7 @@
42218
  "scores": {
42219
  "IFEval": 0.0705,
42220
  "BBH": 0.3449,
42221
- "MATH Level 5": 0.0,
42222
  "GPQA": 0.2668,
42223
  "MUSR": 0.3631,
42224
  "MMLU-PRO": 0.1679
@@ -42595,7 +43179,7 @@
42595
  "scores": {
42596
  "IFEval": 0.2018,
42597
  "BBH": 0.3282,
42598
- "MATH Level 5": 0.0,
42599
  "GPQA": 0.2643,
42600
  "MUSR": 0.4123,
42601
  "MMLU-PRO": 0.1472
@@ -42972,7 +43556,7 @@
42972
  "scores": {
42973
  "IFEval": 0.166,
42974
  "BBH": 0.3068,
42975
- "MATH Level 5": 0.0,
42976
  "GPQA": 0.2542,
42977
  "MUSR": 0.3538,
42978
  "MMLU-PRO": 0.108
@@ -42998,7 +43582,7 @@
42998
  "scores": {
42999
  "IFEval": 0.1504,
43000
  "BBH": 0.295,
43001
- "MATH Level 5": 0.0,
43002
  "GPQA": 0.2609,
43003
  "MUSR": 0.4031,
43004
  "MMLU-PRO": 0.1126
@@ -43011,7 +43595,7 @@
43011
  "scores": {
43012
  "IFEval": 0.1597,
43013
  "BBH": 0.31,
43014
- "MATH Level 5": 0.0,
43015
  "GPQA": 0.2567,
43016
  "MUSR": 0.4017,
43017
  "MMLU-PRO": 0.1157
@@ -43908,7 +44492,7 @@
43908
  "scores": {
43909
  "IFEval": 0.1479,
43910
  "BBH": 0.3014,
43911
- "MATH Level 5": 0.0,
43912
  "GPQA": 0.2542,
43913
  "MUSR": 0.4287,
43914
  "MMLU-PRO": 0.1119
@@ -44870,7 +45454,7 @@
44870
  "scores": {
44871
  "IFEval": 0.2273,
44872
  "BBH": 0.2865,
44873
- "MATH Level 5": 0.0,
44874
  "GPQA": 0.2492,
44875
  "MUSR": 0.3445,
44876
  "MMLU-PRO": 0.1168
@@ -45754,7 +46338,7 @@
45754
  "scores": {
45755
  "IFEval": 0.2049,
45756
  "BBH": 0.2912,
45757
- "MATH Level 5": 0.0,
45758
  "GPQA": 0.2601,
45759
  "MUSR": 0.3575,
45760
  "MMLU-PRO": 0.1167
@@ -46443,7 +47027,7 @@
46443
  "scores": {
46444
  "IFEval": 0.1564,
46445
  "BBH": 0.292,
46446
- "MATH Level 5": 0.0,
46447
  "GPQA": 0.2601,
46448
  "MUSR": 0.3792,
46449
  "MMLU-PRO": 0.11
@@ -47132,7 +47716,7 @@
47132
  "scores": {
47133
  "IFEval": 0.1413,
47134
  "BBH": 0.2717,
47135
- "MATH Level 5": 0.0,
47136
  "GPQA": 0.2341,
47137
  "MUSR": 0.3351,
47138
  "MMLU-PRO": 0.1179
@@ -47158,7 +47742,7 @@
47158
  "scores": {
47159
  "IFEval": 0.1494,
47160
  "BBH": 0.2423,
47161
- "MATH Level 5": 0.0,
47162
  "GPQA": 0.2458,
47163
  "MUSR": 0.358,
47164
  "MMLU-PRO": 0.1139
@@ -47509,7 +48093,7 @@
47509
  "scores": {
47510
  "IFEval": 0.1763,
47511
  "BBH": 0.3011,
47512
- "MATH Level 5": 0.0,
47513
  "GPQA": 0.2399,
47514
  "MUSR": 0.342,
47515
  "MMLU-PRO": 0.1066
@@ -47665,7 +48249,7 @@
47665
  "scores": {
47666
  "IFEval": 0.2049,
47667
  "BBH": 0.2912,
47668
- "MATH Level 5": 0.0,
47669
  "GPQA": 0.2601,
47670
  "MUSR": 0.3575,
47671
  "MMLU-PRO": 0.1167
@@ -48679,7 +49263,7 @@
48679
  "scores": {
48680
  "IFEval": 0.1492,
48681
  "BBH": 0.313,
48682
- "MATH Level 5": 0.0,
48683
  "GPQA": 0.2601,
48684
  "MUSR": 0.3911,
48685
  "MMLU-PRO": 0.1147
@@ -50421,7 +51005,7 @@
50421
  "scores": {
50422
  "IFEval": 0.1397,
50423
  "BBH": 0.2824,
50424
- "MATH Level 5": 0.0,
50425
  "GPQA": 0.276,
50426
  "MUSR": 0.3724,
50427
  "MMLU-PRO": 0.1123
@@ -51266,7 +51850,7 @@
51266
  "scores": {
51267
  "IFEval": 0.3681,
51268
  "BBH": 0.4726,
51269
- "MATH Level 5": 0.0,
51270
  "GPQA": 0.2743,
51271
  "MUSR": 0.3524,
51272
  "MMLU-PRO": 0.2247
@@ -52007,7 +52591,7 @@
52007
  "scores": {
52008
  "IFEval": 0.1872,
52009
  "BBH": 0.302,
52010
- "MATH Level 5": 0.0,
52011
  "GPQA": 0.2768,
52012
  "MUSR": 0.3682,
52013
  "MMLU-PRO": 0.1095
@@ -53801,7 +54385,7 @@
53801
  "scores": {
53802
  "IFEval": 0.2318,
53803
  "BBH": 0.2823,
53804
- "MATH Level 5": 0.0,
53805
  "GPQA": 0.2534,
53806
  "MUSR": 0.3485,
53807
  "MMLU-PRO": 0.1094
@@ -54048,7 +54632,7 @@
54048
  "scores": {
54049
  "IFEval": 0.1943,
54050
  "BBH": 0.2951,
54051
- "MATH Level 5": 0.0,
54052
  "GPQA": 0.2576,
54053
  "MUSR": 0.3796,
54054
  "MMLU-PRO": 0.1166
@@ -54113,7 +54697,7 @@
54113
  "scores": {
54114
  "IFEval": 0.0787,
54115
  "BBH": 0.2919,
54116
- "MATH Level 5": 0.0,
54117
  "GPQA": 0.2643,
54118
  "MUSR": 0.4138,
54119
  "MMLU-PRO": 0.1172
@@ -54178,7 +54762,7 @@
54178
  "scores": {
54179
  "IFEval": 0.1197,
54180
  "BBH": 0.3002,
54181
- "MATH Level 5": 0.0,
54182
  "GPQA": 0.2525,
54183
  "MUSR": 0.3581,
54184
  "MMLU-PRO": 0.1129
@@ -54282,7 +54866,7 @@
54282
  "scores": {
54283
  "IFEval": 0.1869,
54284
  "BBH": 0.6048,
54285
- "MATH Level 5": 0.0,
54286
  "GPQA": 0.2701,
54287
  "MUSR": 0.3843,
54288
  "MMLU-PRO": 0.4382
@@ -58247,7 +58831,7 @@
58247
  "scores": {
58248
  "IFEval": 0.1555,
58249
  "BBH": 0.283,
58250
- "MATH Level 5": 0.0,
58251
  "GPQA": 0.2416,
58252
  "MUSR": 0.367,
58253
  "MMLU-PRO": 0.109
@@ -58260,7 +58844,7 @@
58260
  "scores": {
58261
  "IFEval": 0.1555,
58262
  "BBH": 0.283,
58263
- "MATH Level 5": 0.0,
58264
  "GPQA": 0.2416,
58265
  "MUSR": 0.367,
58266
  "MMLU-PRO": 0.109
@@ -58410,4 +58994,4 @@
58410
  }
58411
  }
58412
  ]
58413
- }
 
1
  {
2
+ "benchmark_cards": {
3
+ "IFEval": {
4
+ "benchmark_details": {
5
+ "name": "Instruction-Following Eval (IFEval)",
6
+ "overview": "IFEval is a benchmark that measures the ability of large language models to follow natural language instructions. It focuses specifically on 'verifiable instructions'—instructions that can be objectively checked, such as word count requirements or keyword mentions. It is distinctive for providing a straightforward, reproducible, and automatic evaluation that avoids the subjectivity of human judgment and the bias of model-based assessment.",
7
+ "data_type": "text",
8
+ "domains": [
9
+ "instruction following"
10
+ ],
11
+ "languages": [
12
+ "English"
13
+ ],
14
+ "similar_benchmarks": [
15
+ "Not specified"
16
+ ],
17
+ "resources": [
18
+ "https://github.com/google-research/google-research/tree/master/instruction_following_eval",
19
+ "https://arxiv.org/abs/2311.07911",
20
+ "https://huggingface.co/datasets/google/IFEval",
21
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
22
+ ]
23
+ },
24
+ "purpose_and_intended_users": {
25
+ "goal": "To provide a standardized, objective, and reproducible method for evaluating the instruction-following capability of large language models.",
26
+ "audience": [
27
+ "Researchers evaluating large language models"
28
+ ],
29
+ "tasks": [
30
+ "Text generation",
31
+ "Following verifiable instructions (e.g., word counts, formatting rules, keyword mentions)"
32
+ ],
33
+ "limitations": "The benchmark is limited to verifiable instructions and does not support multi-modal use cases, such as generating images. The current implementation is acknowledged to have room for improvement.",
34
+ "out_of_scope_uses": [
35
+ "Evaluating subjective or ambiguous instructions (e.g., 'write with a funny tone')"
36
+ ]
37
+ },
38
+ "data": {
39
+ "source": "The data consists of constructed prompts, as described in the research paper. The specific source material for the prompt content is not specified.",
40
+ "size": "Approximately 500 prompts, with a train split containing 541 prompts. No information is provided about development or test splits.",
41
+ "format": "JSON",
42
+ "annotation": "The prompts contain verifiable instructions, meaning compliance can be checked automatically via predefined rules (e.g., word counting). No human annotation process is described."
43
+ },
44
+ "methodology": {
45
+ "methods": [
46
+ "Automatic and objective verification of whether the model's output follows the verifiable instructions in the prompt.",
47
+ "Zero-shot evaluation setup."
48
+ ],
49
+ "metrics": [
50
+ "IFEval"
51
+ ],
52
+ "calculation": "Not specified",
53
+ "interpretation": "Higher scores indicate better performance.",
54
+ "baseline_results": "Paper baseline: Results for two widely available LLMs are reported, but specific model names and scores are not provided. EEE results: OLMo 2 32B Instruct March 2025 scored 0.7800; YiSM-blossom5.1-34B-SLERP scored 0.5033. Mean score across 2 models is 0.6417.",
55
+ "validation": "Quality assurance relies on the objective verifiability of the instructions. No additional validation procedures are described."
56
+ },
57
+ "ethical_and_legal_considerations": {
58
+ "privacy_and_anonymity": "Not specified",
59
+ "data_licensing": "Apache License 2.0",
60
+ "consent_procedures": "Not specified",
61
+ "compliance_with_regulations": "Not specified"
62
+ },
63
+ "possible_risks": [
64
+ {
65
+ "category": "Over- or under-reliance",
66
+ "description": [
67
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
68
+ ],
69
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
70
+ },
71
+ {
72
+ "category": "Unrepresentative data",
73
+ "description": [
74
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
75
+ ],
76
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
77
+ },
78
+ {
79
+ "category": "Lack of data transparency",
80
+ "description": [
81
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
82
+ ],
83
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
84
+ },
85
+ {
86
+ "category": "Reproducibility",
87
+ "description": [
88
+ "Replicating agent behavior or output can be impacted by changes or updates made to external services and tools. This impact is increased if the agent is built with generative AI."
89
+ ],
90
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/reproducibility-agentic.html"
91
+ },
92
+ {
93
+ "category": "Improper usage",
94
+ "description": [
95
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
96
+ ],
97
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
98
+ }
99
+ ],
100
+ "flagged_fields": {},
101
+ "missing_fields": [
102
+ "benchmark_details.similar_benchmarks",
103
+ "methodology.calculation",
104
+ "ethical_and_legal_considerations.privacy_and_anonymity",
105
+ "ethical_and_legal_considerations.consent_procedures",
106
+ "ethical_and_legal_considerations.compliance_with_regulations"
107
+ ],
108
+ "card_info": {
109
+ "created_at": "2026-03-17T15:55:54.431294",
110
+ "llm": "deepseek-ai/DeepSeek-V3.2"
111
+ }
112
+ },
113
+ "GPQA": {
114
+ "benchmark_details": {
115
+ "name": "GPQA",
116
+ "overview": "GPQA (Graduate-Level Google-Proof Q&A Benchmark) is a text-based benchmark that measures the ability to answer extremely difficult, expert-level multiple-choice questions. It contains 448 questions designed to be 'Google-proof,' meaning they are hard to solve even with unrestricted web access. Its distinctiveness lies in its high difficulty for both highly skilled non-experts and state-of-the-art AI, making it suitable for scalable oversight experiments.",
117
+ "data_type": "tabular, text",
118
+ "domains": [
119
+ "biology",
120
+ "physics",
121
+ "chemistry",
122
+ "open domain qa",
123
+ "open book qa",
124
+ "multiple choice qa"
125
+ ],
126
+ "languages": [
127
+ "English"
128
+ ],
129
+ "similar_benchmarks": [
130
+ "DROP",
131
+ "Massive Multitask Language Understanding (MMLU)"
132
+ ],
133
+ "resources": [
134
+ "https://arxiv.org/abs/2311.12022",
135
+ "https://huggingface.co/datasets/Idavidrein/gpqa",
136
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
137
+ ]
138
+ },
139
+ "purpose_and_intended_users": {
140
+ "goal": "To create a testbed for scalable oversight, enabling the study of methods for humans to reliably supervise and extract truthful information from AI systems on questions that are very difficult for non-experts to answer or verify. It can also be used for general large language model capabilities benchmarking.",
141
+ "audience": [
142
+ "Researchers studying scalable oversight and AI alignment",
143
+ "Researchers interested in supervising AI systems that may surpass human capabilities in specialized domains"
144
+ ],
145
+ "tasks": [
146
+ "Multiple-choice question answering",
147
+ "Question answering",
148
+ "Text generation"
149
+ ],
150
+ "limitations": "The dataset is small, with 448 examples in the main set. There is a need for scalable oversight methods to overcome existing cognitive or ethical biases supervisors might have.",
151
+ "out_of_scope_uses": [
152
+ "Tasks where non-experts can easily find the answer using web search, as the questions are intended to be 'Google-proof'"
153
+ ]
154
+ },
155
+ "data": {
156
+ "source": "The questions were written and validated by domain experts with or pursuing PhDs in biology, physics, and chemistry, using an annotation pipeline where experts wrote questions and explanations and received detailed feedback from other experts.",
157
+ "size": "The main set contains 448 multiple-choice questions, with an extended set of 546 questions also mentioned. The dataset falls within the 1K<n<10K size category. The paper does not specify train, development, or test splits.",
158
+ "format": "The data is provided in CSV format and consists of multiple-choice questions, each with four answer choices, explanations, and references.",
159
+ "annotation": "Domain experts wrote the questions and explanations. Other expert validators provided feedback and 4-point difficulty ratings. Quality was assessed by comparing a sample to author-created 'gold-standard' labels, achieving 90% accuracy. Validation also involved experts from outside a question's domain attempting them with web access, which confirmed the questions' difficulty through low accuracy scores."
160
+ },
161
+ "methodology": {
162
+ "methods": [
163
+ "Models are evaluated in both closed-book (no runtime access to external information) and open-book (with access to an internet search tool) settings.",
164
+ "Prompting methods include zero-shot, few-shot, zero-shot chain-of-thought, and few-shot chain-of-thought."
165
+ ],
166
+ "metrics": [
167
+ "Accuracy (percentage of correct answers)"
168
+ ],
169
+ "calculation": "The overall score is the accuracy across the question set. Results are reported separately for the main set, extended set, and a 'Diamond Set'.",
170
+ "interpretation": "Higher accuracy indicates better performance. Expert human performance is benchmarked at 65% overall accuracy (or 74% when discounting clear mistakes). Non-expert human performance is 34%.",
171
+ "baseline_results": "PAPER baselines: On the main set, GPT-4 with few-shot chain-of-thought achieved 39.7% accuracy; GPT-4 with search achieved 41.0%; GPT-3.5-turbo-16k (zero-shot) achieved 29.8%; Llama-2-70B-chat (few-shot chain-of-thought) achieved 29.1%. Human expert accuracy was 65%, and non-expert accuracy was 34%. EEE results: YiSM-blossom5.1-34B-SLERP achieved 0.3557; OLMo 2 32B Instruct March 2025 achieved 0.2870.",
172
+ "validation": "Quality assurance involved expert validation and feedback. Gold-standard labels were created for a sample of 110 questions, achieving 90% annotator agreement. Expert validators also rated question difficulty."
173
+ },
174
+ "ethical_and_legal_considerations": {
175
+ "privacy_and_anonymity": "The dataset includes a canary string to aid in filtering it from training data, and distribution requires users to agree not to reveal examples in plain text or images online to prevent data leakage. No specific anonymization of the question content is described.",
176
+ "data_licensing": "Creative Commons Attribution 4.0",
177
+ "consent_procedures": "Non-expert validators were compensated with large bonuses for effort. The use of contractors is mentioned, but the specific platform and detailed compensation procedures for experts are not specified.",
178
+ "compliance_with_regulations": "No information is provided regarding IRB approval, GDPR compliance, or other ethical review."
179
+ },
180
+ "possible_risks": [
181
+ {
182
+ "category": "Over- or under-reliance",
183
+ "description": [
184
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
185
+ ],
186
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
187
+ },
188
+ {
189
+ "category": "Unrepresentative data",
190
+ "description": [
191
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
192
+ ],
193
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
194
+ },
195
+ {
196
+ "category": "Data bias",
197
+ "description": [
198
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
199
+ ],
200
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
201
+ },
202
+ {
203
+ "category": "Lack of data transparency",
204
+ "description": [
205
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
206
+ ],
207
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
208
+ },
209
+ {
210
+ "category": "Improper usage",
211
+ "description": [
212
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
213
+ ],
214
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
215
+ }
216
+ ],
217
+ "flagged_fields": {
218
+ "methodology.metrics": "[Factuality Score: 0.09], low factual alignment with source material",
219
+ "methodology.calculation": "[Possible Hallucination], no supporting evidence found in source material",
220
+ "methodology.baseline_results": "[Possible Hallucination], no supporting evidence found in source material",
221
+ "methodology.validation": "[Possible Hallucination], no supporting evidence found in source material"
222
+ },
223
+ "missing_fields": [],
224
+ "card_info": {
225
+ "created_at": "2026-03-17T15:27:14.197081",
226
+ "llm": "deepseek-ai/DeepSeek-V3.2"
227
+ }
228
+ },
229
+ "MATH Level 5": {
230
+ "benchmark_details": {
231
+ "name": "MATH Level 5",
232
+ "overview": "MATH Level 5 is a benchmark that measures the mathematical problem-solving ability of machine learning models using challenging competition-level mathematics problems. It contains 12,500 problems, each with a full step-by-step solution, and is specifically focused on the hardest difficulty level (Level 5) within the dataset. Problems are presented in text, with diagrams for subjects like geometry specified using the Asymptote language.",
233
+ "data_type": "text",
234
+ "domains": [
235
+ "mathematics",
236
+ "explanation generation"
237
+ ],
238
+ "languages": [
239
+ "English"
240
+ ],
241
+ "similar_benchmarks": [
242
+ "DeepMind Mathematics Dataset",
243
+ "Metamath Theorem Proving"
244
+ ],
245
+ "resources": [
246
+ "https://arxiv.org/abs/2103.03874",
247
+ "https://huggingface.co/datasets/DigitalLearningGmbH/MATH-lighteval"
248
+ ]
249
+ },
250
+ "purpose_and_intended_users": {
251
+ "goal": "To measure the mathematical problem-solving ability of machine learning models, specifically evaluating their capacity to analyze problems, select appropriate heuristics, and chain them together to produce a final answer. The benchmark also aims to teach models to generate step-by-step derivations and explanations.",
252
+ "audience": [
253
+ "Machine learning researchers"
254
+ ],
255
+ "tasks": [
256
+ "Mathematical problem solving",
257
+ "Step-by-step solution generation",
258
+ "Final answer generation"
259
+ ],
260
+ "limitations": "Accuracy on the benchmark remains relatively low even with large Transformer models, and scaling model size alone appears impractical for achieving strong mathematical reasoning based on current trends, indicating it is a very challenging benchmark.",
261
+ "out_of_scope_uses": [
262
+ "Not specified"
263
+ ]
264
+ },
265
+ "data": {
266
+ "source": "The data is sourced from high school mathematics competitions, including the AMC 10, AMC 12, and AIME.",
267
+ "size": "The full dataset contains 12,500 problems, with 7,500 for training and 5,000 for testing. The exact number of examples for the 'Level 5' subset is not specified.",
268
+ "format": "The data is stored in Parquet format. Each problem includes a full step-by-step solution in LaTeX and natural language, and the final answer is a unique normalized sequence.",
269
+ "annotation": "Problems are expert-generated, but the specific annotation process and quality control measures are not detailed."
270
+ },
271
+ "methodology": {
272
+ "methods": [
273
+ "Models are evaluated by generating a final answer for a given problem. The solution must contain the final answer enclosed in a `\\boxed{}` tag."
274
+ ],
275
+ "metrics": [
276
+ "MATH Level 5"
277
+ ],
278
+ "calculation": "The metric is an Exact Match score on MATH Level 5. The score is continuous, and higher values indicate better performance.",
279
+ "interpretation": "Higher scores indicate better performance. The score is continuous, and lower values are not better.",
280
+ "baseline_results": "Paper baselines: Not specified. Evaluation suite results: YiSM-blossom5.1-34B-SLERP achieved a score of 0.2153.",
281
+ "validation": "Not specified"
282
+ },
283
+ "ethical_and_legal_considerations": {
284
+ "privacy_and_anonymity": "Not specified",
285
+ "data_licensing": "MIT License",
286
+ "consent_procedures": "Not specified",
287
+ "compliance_with_regulations": "Not specified"
288
+ },
289
+ "possible_risks": [
290
+ {
291
+ "category": "Over- or under-reliance",
292
+ "description": [
293
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
294
+ ],
295
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
296
+ },
297
+ {
298
+ "category": "Unrepresentative data",
299
+ "description": [
300
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
301
+ ],
302
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
303
+ },
304
+ {
305
+ "category": "Data bias",
306
+ "description": [
307
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
308
+ ],
309
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
310
+ },
311
+ {
312
+ "category": "Lack of data transparency",
313
+ "description": [
314
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation. "
315
+ ],
316
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
317
+ },
318
+ {
319
+ "category": "Improper usage",
320
+ "description": [
321
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
322
+ ],
323
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
324
+ }
325
+ ],
326
+ "flagged_fields": {},
327
+ "missing_fields": [
328
+ "purpose_and_intended_users.out_of_scope_uses",
329
+ "methodology.validation",
330
+ "ethical_and_legal_considerations.privacy_and_anonymity",
331
+ "ethical_and_legal_considerations.consent_procedures",
332
+ "ethical_and_legal_considerations.compliance_with_regulations"
333
+ ],
334
+ "card_info": {
335
+ "created_at": "2026-03-17T16:09:19.958535",
336
+ "llm": "deepseek-ai/DeepSeek-V3.2"
337
+ }
338
+ },
339
+ "MMLU-PRO": {
340
+ "benchmark_details": {
341
+ "name": "MMLU-Pro",
342
+ "overview": "MMLU-Pro is an enhanced version of the Massive Multitask Language Understanding benchmark designed to be more challenging and robust. It measures multi-task language understanding and reasoning capabilities by integrating more reasoning-focused questions, expanding answer choices from four to ten, and eliminating trivial or noisy questions found in its predecessor. It covers a broad range of subjects.",
343
+ "data_type": "tabular, text",
344
+ "domains": [
345
+ "STEM",
346
+ "humanities",
347
+ "social sciences",
348
+ "math",
349
+ "physics",
350
+ "chemistry",
351
+ "law",
352
+ "engineering",
353
+ "economics",
354
+ "health",
355
+ "psychology",
356
+ "business",
357
+ "biology",
358
+ "philosophy",
359
+ "computer science",
360
+ "history"
361
+ ],
362
+ "languages": [
363
+ "English"
364
+ ],
365
+ "similar_benchmarks": [
366
+ "MMLU"
367
+ ],
368
+ "resources": [
369
+ "https://arxiv.org/abs/2406.01574",
370
+ "https://huggingface.co/datasets/TIGER-Lab/MMLU-Pro",
371
+ "https://huggingface.co/spaces/TIGER-Lab/MMLU-Pro",
372
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
373
+ ]
374
+ },
375
+ "purpose_and_intended_users": {
376
+ "goal": "To provide a more challenging and discriminative benchmark for tracking progress in language model capabilities, testing deeper cognitive processes and reasoning as models plateau on existing benchmarks.",
377
+ "audience": [
378
+ "Researchers evaluating large language models"
379
+ ],
380
+ "tasks": [
381
+ "Multiple-choice question answering across a broad range of subjects"
382
+ ],
383
+ "limitations": "The dataset contains some mistakes and formatting inconsistencies, which the maintainers are correcting based on expert feedback.",
384
+ "out_of_scope_uses": [
385
+ "Not specified"
386
+ ]
387
+ },
388
+ "data": {
389
+ "source": "The dataset is an enhanced version of MMLU, integrating more challenging questions from multiple sources. These include original MMLU questions (with trivial or ambiguous ones removed), hand-picked high-quality STEM problems from the internet, human-annotated questions requiring theorems from TheoremQA, and science questions from college exams via SciBench.",
390
+ "size": "The test split contains 12,032 examples, placing the dataset in the 10K to 100K size category. The total file size is 8,775,905 bytes.",
391
+ "format": "The data is stored in Parquet format and consists of multiple-choice questions, expanding the number of answer choices from four (as in MMLU) to ten.",
392
+ "annotation": "The annotation process involved expert review. Over ten experts scrutinized each question and its options to ensure challenge, comprehensiveness, accuracy, and fairness. Some answers were later corrected based on recommendations from specialists such as medical professionals."
393
+ },
394
+ "methodology": {
395
+ "methods": [
396
+ "Models are evaluated using multiple-choice question answering, typically with a 5-shot prompting setup, though some models use 0-shot.",
397
+ "Performance is tested using both direct answering and Chain-of-Thought (CoT) reasoning.",
398
+ "The benchmark tests performance under 24 different prompt styles."
399
+ ],
400
+ "metrics": [
401
+ "Accuracy (reported as a percentage or score)"
402
+ ],
403
+ "calculation": "The overall score is an average accuracy across subjects, but the specific calculation method is not detailed.",
404
+ "interpretation": "Higher scores indicate better performance. Performance on MMLU-Pro is significantly lower than on MMLU, indicating it is more challenging.",
405
+ "baseline_results": "PAPER baselines: GPT-4o achieves over 70% accuracy in Math and Physics subjects. Llama-3-70B-Instruct achieves an overall accuracy of 56.2%. Gemma-7B and Mistral-7B-v0.1 have lower performance (e.g., Mistral-7B-v0.1 scores just over 20% in Math and Physics). HF_README baselines: GPT-4o achieves an overall score of 0.7255 with CoT and 0.5346 with direct prompting. Other reported scores include Claude-3-Opus (0.6845), Claude-3-Sonnet (0.5511), Gemini 1.5 Flash (0.5912), and Llama-3-70B-Instruct (0.5620). EEE results: OLMo 2 32B Instruct March 2025 scored 0.4140.",
406
+ "validation": "The benchmark demonstrates greater stability under varying prompts, with sensitivity to prompt variations decreasing from 4-5% in MMLU to just 2% in MMLU-Pro."
407
+ },
408
+ "ethical_and_legal_considerations": {
409
+ "privacy_and_anonymity": "Not specified",
410
+ "data_licensing": "MIT License",
411
+ "consent_procedures": "Not specified",
412
+ "compliance_with_regulations": "Not specified"
413
+ },
414
+ "possible_risks": [
415
+ {
416
+ "category": "Over- or under-reliance",
417
+ "description": [
418
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
419
+ ],
420
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
421
+ },
422
+ {
423
+ "category": "Unrepresentative data",
424
+ "description": [
425
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
426
+ ],
427
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
428
+ },
429
+ {
430
+ "category": "Uncertain data provenance",
431
+ "description": [
432
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
433
+ ],
434
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
435
+ },
436
+ {
437
+ "category": "Data bias",
438
+ "description": [
439
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
440
+ ],
441
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
442
+ },
443
+ {
444
+ "category": "Improper usage",
445
+ "description": [
446
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
447
+ ],
448
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
449
+ }
450
+ ],
451
+ "flagged_fields": {},
452
+ "missing_fields": [
453
+ "purpose_and_intended_users.out_of_scope_uses",
454
+ "ethical_and_legal_considerations.privacy_and_anonymity",
455
+ "ethical_and_legal_considerations.consent_procedures",
456
+ "ethical_and_legal_considerations.compliance_with_regulations"
457
+ ],
458
+ "card_info": {
459
+ "created_at": "2026-03-17T16:20:31.763989",
460
+ "llm": "deepseek-ai/DeepSeek-V3.2"
461
+ }
462
+ },
463
+ "MUSR": {
464
+ "benchmark_details": {
465
+ "name": "MuSR",
466
+ "overview": "MuSR (Multistep Soft Reasoning) is a benchmark that measures the ability of language models to perform multistep soft reasoning based on natural language narratives. It combines sophisticated narratives with complex reasoning that requires commonsense knowledge and is not solvable by simple rule-based systems. The benchmark consists of three tasks: murder mysteries, object placements, and team allocations.",
467
+ "data_type": "text",
468
+ "domains": [
469
+ "reasoning",
470
+ "commonsense reasoning",
471
+ "planning"
472
+ ],
473
+ "languages": [
474
+ "English"
475
+ ],
476
+ "similar_benchmarks": [
477
+ "bAbI",
478
+ "BigTOM",
479
+ "ToMi",
480
+ "RuleTakers",
481
+ "ProntoQA",
482
+ "SocialIQA",
483
+ "StrategyQA"
484
+ ],
485
+ "resources": [
486
+ "https://github.com/Zayne-Sprague/MuSR",
487
+ "https://arxiv.org/abs/2310.16049",
488
+ "https://huggingface.co/datasets/TAUR-Lab/MuSR"
489
+ ]
490
+ },
491
+ "purpose_and_intended_users": {
492
+ "goal": "To evaluate and characterize the gaps in language models' abilities to perform robust, multistep reasoning in complex natural language settings, particularly testing the limits of techniques like chain-of-thought.",
493
+ "audience": [
494
+ "Researchers evaluating language models",
495
+ "Researchers evaluating neurosymbolic systems on reasoning capabilities"
496
+ ],
497
+ "tasks": [
498
+ "Question answering",
499
+ "Solving murder mysteries",
500
+ "Solving object placement problems",
501
+ "Solving team allocation problems"
502
+ ],
503
+ "limitations": "The benchmark instances are generated by GPT-4, which may lead to simple, poor-quality narratives with potential inconsistencies, though the paper argues they are valid test cases if the underlying information is faithfully preserved.",
504
+ "out_of_scope_uses": [
505
+ "Not specified"
506
+ ]
507
+ },
508
+ "data": {
509
+ "source": "The data is synthetically generated using a neurosymbolic synthetic-to-natural generation algorithm that employs GPT-4. The process begins with gold facts, constructs a reasoning tree, and iteratively generates a narrative.",
510
+ "size": "756 instances across three domains: 250 for Murder Mystery, 256 for Object Placements, and 250 for Team Allocations. The dataset is categorized as containing fewer than 1,000 examples (n<1K).",
511
+ "format": "CSV, containing free-text narratives (ranging from hundreds to roughly 1000 words in length) followed by a multiple-choice question.",
512
+ "annotation": "Answers are derived from the underlying gold facts used in generation. For validation, human annotators (7 total) solved instances using a chain-of-thought+ prompt, with instances triply-annotated (34-40 per domain). Human accuracy was very high, with the lowest average annotator score at 90% and majority vote accuracy between 94.1% and 100%."
513
+ },
514
+ "methodology": {
515
+ "methods": [
516
+ "Models are evaluated in zero-shot and single-shot (1-shot) settings.",
517
+ "Prompting strategies include single-shot prompting, chain-of-thought (CoT), and an engineered variant called CoT+.",
518
+ "Neurosymbolic algorithms like Program-Aided Language Models (PAL) and SymbolicTOM are also evaluated on compatible domains."
519
+ ],
520
+ "metrics": [
521
+ "MUSR (Accuracy)"
522
+ ],
523
+ "calculation": "Performance is measured as accuracy (percentage correct) for each of the three domains (MM, OP, TA) separately. The paper does not report a single aggregated score.",
524
+ "interpretation": "Higher accuracy indicates better performance. Human performance sets a high ceiling (ranging from 94.1% to 100% by majority vote), while random baselines are at or near chance (ranging from 24.6% to 50%).",
525
+ "baseline_results": "Paper baselines: Random baseline (MM: 50%, OP: 24.6%, TA: 33.3%), GPT-4 (80.4%, 60.9%, 68.4%), GPT-3.5 (61.6%, 46.9%, 40.4%), Llama2 70b Chat (48.8%, 42.2%, 44.8%), Llama2 7b Chat (50.8%, 29.3%, 36.8%), Vicuna 7b v1.5 (48.4%, 29.7%, 26.4%), Vicuna 13b v1.5 (50.8%, 34.4%, 32%), Vicuna 33b v1.3 (49.6%, 31.2%, 30%), Human Eval (94.1%, 95%, 100%). PAL results for Team Allocation outperform end-to-end models but are below human performance. EEE results: YiSM-blossom5.1-34B-SLERP achieved an accuracy of 0.4413.",
526
+ "validation": "The dataset is validated by measuring human annotator performance to ensure the narratives support the intended reasoning. Rule-based baselines (e.g., picking the suspect with the longest chapter) are used as sanity checks and perform near random chance, confirming the tasks are not trivially solvable."
527
+ },
528
+ "ethical_and_legal_considerations": {
529
+ "privacy_and_anonymity": "Not specified",
530
+ "data_licensing": "Creative Commons Attribution 4.0",
531
+ "consent_procedures": "Annotation was performed by three hired undergraduate students. No details on compensation or the hiring platform are provided.",
532
+ "compliance_with_regulations": "The research received support from NSF, DARPA, and the Air Force Research Laboratory. No mention of IRB approval or other specific regulatory compliance is made."
533
+ },
534
+ "possible_risks": [
535
+ {
536
+ "category": "Over- or under-reliance",
537
+ "description": [
538
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
539
+ ],
540
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
541
+ },
542
+ {
543
+ "category": "Unrepresentative data",
544
+ "description": [
545
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
546
+ ],
547
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
548
+ },
549
+ {
550
+ "category": "Data contamination",
551
+ "description": [
552
+ "Data contamination occurs when incorrect data is used for training. For example, data that is not aligned with model's purpose or data that is already set aside for other development tasks such as testing and evaluation."
553
+ ],
554
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-contamination.html"
555
+ },
556
+ {
557
+ "category": "Reproducibility",
558
+ "description": [
559
+ "Replicating agent behavior or output can be impacted by changes or updates made to external services and tools. This impact is increased if the agent is built with generative AI."
560
+ ],
561
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/reproducibility-agentic.html"
562
+ },
563
+ {
564
+ "category": "Improper usage",
565
+ "description": [
566
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
567
+ ],
568
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
569
+ }
570
+ ],
571
+ "flagged_fields": {
572
+ "methodology.calculation": "[Possible Hallucination], no supporting evidence found in source material",
573
+ "methodology.baseline_results": "[Possible Hallucination], no supporting evidence found in source material",
574
+ "methodology.validation": "[Factuality Score: 0.17], low factual alignment with source material"
575
+ },
576
+ "missing_fields": [
577
+ "purpose_and_intended_users.out_of_scope_uses",
578
+ "ethical_and_legal_considerations.privacy_and_anonymity"
579
+ ],
580
+ "card_info": {
581
+ "created_at": "2026-03-17T12:25:43.235734",
582
+ "llm": "deepseek-ai/DeepSeek-V3.2"
583
+ }
584
+ }
585
+ },
586
  "models": [
587
  {
588
  "model_id": "0-hero/Matter-0.2-7B-DPO",
 
1423
  "scores": {
1424
  "IFEval": 0.1467,
1425
  "BBH": 0.2704,
1426
+ "MATH Level 5": 0,
1427
  "GPQA": 0.2525,
1428
  "MUSR": 0.3605,
1429
  "MMLU-PRO": 0.1123
 
1462
  "scores": {
1463
  "IFEval": 0.1467,
1464
  "BBH": 0.2704,
1465
+ "MATH Level 5": 0,
1466
  "GPQA": 0.2525,
1467
  "MUSR": 0.3605,
1468
  "MMLU-PRO": 0.1123
 
1722
  "scores": {
1723
  "IFEval": 0.1374,
1724
  "BBH": 0.2834,
1725
+ "MATH Level 5": 0,
1726
  "GPQA": 0.2458,
1727
  "MUSR": 0.3552,
1728
  "MMLU-PRO": 0.1117
 
2255
  "scores": {
2256
  "IFEval": 0.1751,
2257
  "BBH": 0.293,
2258
+ "MATH Level 5": 0,
2259
  "GPQA": 0.2374,
2260
  "MUSR": 0.3499,
2261
  "MMLU-PRO": 0.1112
 
2359
  "scores": {
2360
  "IFEval": 0.2049,
2361
  "BBH": 0.2912,
2362
+ "MATH Level 5": 0,
2363
  "GPQA": 0.2592,
2364
  "MUSR": 0.3575,
2365
  "MMLU-PRO": 0.1168
 
4582
  "scores": {
4583
  "IFEval": 0.2497,
4584
  "BBH": 0.2817,
4585
+ "MATH Level 5": 0,
4586
  "GPQA": 0.2441,
4587
  "MUSR": 0.3578,
4588
  "MMLU-PRO": 0.1085
 
4595
  "scores": {
4596
  "IFEval": 0.1507,
4597
  "BBH": 0.293,
4598
+ "MATH Level 5": 0,
4599
  "GPQA": 0.2534,
4600
  "MUSR": 0.3565,
4601
  "MMLU-PRO": 0.1125
 
5817
  "scores": {
5818
  "IFEval": 0.1778,
5819
  "BBH": 0.287,
5820
+ "MATH Level 5": 0,
5821
  "GPQA": 0.2475,
5822
  "MUSR": 0.3447,
5823
  "MMLU-PRO": 0.111
 
8430
  "scores": {
8431
  "IFEval": 0.1592,
8432
  "BBH": 0.2906,
8433
+ "MATH Level 5": 0,
8434
  "GPQA": 0.2492,
8435
  "MUSR": 0.3286,
8436
  "MMLU-PRO": 0.1111
 
9158
  "scores": {
9159
  "IFEval": 0.7628,
9160
  "BBH": 0.5098,
9161
+ "MATH Level 5": 0,
9162
  "GPQA": 0.2802,
9163
  "MUSR": 0.4579,
9164
  "MMLU-PRO": 0.4033
 
9314
  "scores": {
9315
  "IFEval": 0.288,
9316
  "BBH": 0.5154,
9317
+ "MATH Level 5": 0,
9318
  "GPQA": 0.3247,
9319
  "MUSR": 0.408,
9320
  "MMLU-PRO": 0.3817
 
9483
  "scores": {
9484
  "IFEval": 0.1869,
9485
  "BBH": 0.2913,
9486
+ "MATH Level 5": 0,
9487
  "GPQA": 0.2601,
9488
  "MUSR": 0.3738,
9489
  "MMLU-PRO": 0.1123
 
9522
  "scores": {
9523
  "IFEval": 0.1575,
9524
  "BBH": 0.4196,
9525
+ "MATH Level 5": 0,
9526
  "GPQA": 0.2936,
9527
  "MUSR": 0.3116,
9528
  "MMLU-PRO": 0.19
 
9808
  "scores": {
9809
  "IFEval": 0.1697,
9810
  "BBH": 0.2877,
9811
+ "MATH Level 5": 0,
9812
  "GPQA": 0.2492,
9813
  "MUSR": 0.3751,
9814
  "MMLU-PRO": 0.1101
 
9819
  "name": "BgGPT-Gemma-2-27B-IT-v1.0",
9820
  "developer": "INSAIT-Institute",
9821
  "scores": {
9822
+ "IFEval": 0,
9823
  "BBH": 0.2912,
9824
+ "MATH Level 5": 0,
9825
  "GPQA": 0.2601,
9826
  "MUSR": 0.3575,
9827
  "MMLU-PRO": 0.1167
 
9938
  "scores": {
9939
  "IFEval": 0.1409,
9940
  "BBH": 0.2791,
9941
+ "MATH Level 5": 0,
9942
  "GPQA": 0.2441,
9943
  "MUSR": 0.3738,
9944
  "MMLU-PRO": 0.1109
 
13201
  "scores": {
13202
  "IFEval": 0.1351,
13203
  "BBH": 0.2828,
13204
+ "MATH Level 5": 0,
13205
  "GPQA": 0.2559,
13206
  "MUSR": 0.3526,
13207
  "MMLU-PRO": 0.1128
 
13214
  "scores": {
13215
  "IFEval": 0.1354,
13216
  "BBH": 0.2811,
13217
+ "MATH Level 5": 0,
13218
  "GPQA": 0.2643,
13219
  "MUSR": 0.3579,
13220
  "MMLU-PRO": 0.1105
 
13227
  "scores": {
13228
  "IFEval": 0.1354,
13229
  "BBH": 0.2827,
13230
+ "MATH Level 5": 0,
13231
  "GPQA": 0.2609,
13232
  "MUSR": 0.3619,
13233
  "MMLU-PRO": 0.1094
 
13292
  "scores": {
13293
  "IFEval": 0.1395,
13294
  "BBH": 0.2779,
13295
+ "MATH Level 5": 0,
13296
  "GPQA": 0.2483,
13297
  "MUSR": 0.3447,
13298
  "MMLU-PRO": 0.1115
 
14267
  "scores": {
14268
  "IFEval": 0.1153,
14269
  "BBH": 0.2868,
14270
+ "MATH Level 5": 0,
14271
  "GPQA": 0.2458,
14272
  "MUSR": 0.3698,
14273
  "MMLU-PRO": 0.1108
 
15994
  "name": "naps-gemma-2-27b-v-0.1.0",
15995
  "developer": "NAPS-ai",
15996
  "scores": {
15997
+ "IFEval": 0,
15998
  "BBH": 0.2912,
15999
+ "MATH Level 5": 0,
16000
  "GPQA": 0.2601,
16001
  "MUSR": 0.3575,
16002
  "MMLU-PRO": 0.1168
 
16007
  "name": "naps-gemma-2-27b-v0.1.0",
16008
  "developer": "NAPS-ai",
16009
  "scores": {
16010
+ "IFEval": 0,
16011
  "BBH": 0.2912,
16012
+ "MATH Level 5": 0,
16013
  "GPQA": 0.2601,
16014
  "MUSR": 0.3575,
16015
  "MMLU-PRO": 0.1168
 
16074
  "scores": {
16075
  "IFEval": 0.1845,
16076
  "BBH": 0.3041,
16077
+ "MATH Level 5": 0,
16078
  "GPQA": 0.2391,
16079
  "MUSR": 0.3486,
16080
  "MMLU-PRO": 0.1099
 
16100
  "scores": {
16101
  "IFEval": 0.1881,
16102
  "BBH": 0.2178,
16103
+ "MATH Level 5": 0,
16104
  "GPQA": 0.2064,
16105
  "MUSR": 0.3538,
16106
  "MMLU-PRO": 0.1163
 
16919
  "scores": {
16920
  "IFEval": 0.1808,
16921
  "BBH": 0.2815,
16922
+ "MATH Level 5": 0,
16923
  "GPQA": 0.2559,
16924
  "MUSR": 0.375,
16925
  "MMLU-PRO": 0.1143
 
16932
  "scores": {
16933
  "IFEval": 0.1749,
16934
  "BBH": 0.2602,
16935
+ "MATH Level 5": 0,
16936
  "GPQA": 0.2458,
16937
  "MUSR": 0.338,
16938
  "MMLU-PRO": 0.1125
 
17673
  "scores": {
17674
  "IFEval": 0.0257,
17675
  "BBH": 0.292,
17676
+ "MATH Level 5": 0,
17677
  "GPQA": 0.25,
17678
  "MUSR": 0.3511,
17679
  "MMLU-PRO": 0.1162
 
17712
  "scores": {
17713
  "IFEval": 0.203,
17714
  "BBH": 0.2936,
17715
+ "MATH Level 5": 0,
17716
  "GPQA": 0.2576,
17717
  "MUSR": 0.3619,
17718
  "MMLU-PRO": 0.1111
 
17777
  "scores": {
17778
  "IFEval": 0.2254,
17779
  "BBH": 0.275,
17780
+ "MATH Level 5": 0,
17781
  "GPQA": 0.2576,
17782
  "MUSR": 0.3762,
17783
  "MMLU-PRO": 0.1123
 
17803
  "scores": {
17804
  "IFEval": 0.0233,
17805
  "BBH": 0.3092,
17806
+ "MATH Level 5": 0,
17807
  "GPQA": 0.2601,
17808
  "MUSR": 0.3314,
17809
  "MMLU-PRO": 0.1138
 
18713
  "scores": {
18714
  "IFEval": 0.1757,
18715
  "BBH": 0.274,
18716
+ "MATH Level 5": 0,
18717
  "GPQA": 0.25,
18718
  "MUSR": 0.3753,
18719
  "MMLU-PRO": 0.112
 
18724
  "name": "INTELLECT-1-Instruct",
18725
  "developer": "PrimeIntellect",
18726
  "scores": {
18727
+ "IFEval": 0,
18728
  "BBH": 0.287,
18729
  "MATH Level 5": 0.0227,
18730
  "GPQA": 0.2483,
 
18739
  "scores": {
18740
  "IFEval": 0.2282,
18741
  "BBH": 0.2877,
18742
+ "MATH Level 5": 0,
18743
  "GPQA": 0.2601,
18744
  "MUSR": 0.3484,
18745
  "MMLU-PRO": 0.1123
 
20039
  "scores": {
20040
  "IFEval": 0.3071,
20041
  "BBH": 0.3341,
20042
+ "MATH Level 5": 0,
20043
  "GPQA": 0.2576,
20044
  "MUSR": 0.3329,
20045
  "MMLU-PRO": 0.1697
 
20403
  "scores": {
20404
  "IFEval": 0.1897,
20405
  "BBH": 0.2876,
20406
+ "MATH Level 5": 0,
20407
  "GPQA": 0.2492,
20408
  "MUSR": 0.3948,
20409
  "MMLU-PRO": 0.1078
 
20559
  "scores": {
20560
  "IFEval": 0.0932,
20561
  "BBH": 0.2977,
20562
+ "MATH Level 5": 0,
20563
  "GPQA": 0.2475,
20564
  "MUSR": 0.3941,
20565
  "MMLU-PRO": 0.1157
 
20572
  "scores": {
20573
  "IFEval": 0.0858,
20574
  "BBH": 0.2929,
20575
+ "MATH Level 5": 0,
20576
  "GPQA": 0.2483,
20577
  "MUSR": 0.3981,
20578
  "MMLU-PRO": 0.1285
 
21326
  "scores": {
21327
  "IFEval": 0.1545,
21328
  "BBH": 0.2945,
21329
+ "MATH Level 5": 0,
21330
  "GPQA": 0.2391,
21331
  "MUSR": 0.3711,
21332
  "MMLU-PRO": 0.116
 
21378
  "scores": {
21379
  "IFEval": 0.1809,
21380
  "BBH": 0.2881,
21381
+ "MATH Level 5": 0,
21382
  "GPQA": 0.2433,
21383
  "MUSR": 0.3872,
21384
  "MMLU-PRO": 0.109
 
22795
  "scores": {
22796
  "IFEval": 0.208,
22797
  "BBH": 0.292,
22798
+ "MATH Level 5": 0,
22799
  "GPQA": 0.2601,
22800
  "MUSR": 0.3499,
22801
  "MMLU-PRO": 0.1167
 
22808
  "scores": {
22809
  "IFEval": 0.1407,
22810
  "BBH": 0.2769,
22811
+ "MATH Level 5": 0,
22812
  "GPQA": 0.2634,
22813
  "MUSR": 0.3218,
22814
  "MMLU-PRO": 0.1112
 
22834
  "scores": {
22835
  "IFEval": 0.0656,
22836
  "BBH": 0.3568,
22837
+ "MATH Level 5": 0,
22838
  "GPQA": 0.2676,
22839
  "MUSR": 0.3805,
22840
  "MMLU-PRO": 0.1672
 
22886
  "scores": {
22887
  "IFEval": 0.1828,
22888
  "BBH": 0.2828,
22889
+ "MATH Level 5": 0,
22890
  "GPQA": 0.229,
22891
  "MUSR": 0.31,
22892
  "MMLU-PRO": 0.1144
 
22899
  "scores": {
22900
  "IFEval": 0.1815,
22901
  "BBH": 0.2297,
22902
+ "MATH Level 5": 0,
22903
  "GPQA": 0.2315,
22904
  "MUSR": 0.3445,
22905
  "MMLU-PRO": 0.116
 
23640
  "scores": {
23641
  "IFEval": 0.1426,
23642
  "BBH": 0.5528,
23643
+ "MATH Level 5": 0,
23644
  "GPQA": 0.3163,
23645
  "MUSR": 0.4386,
23646
  "MMLU-PRO": 0.4145
 
23651
  "name": "glm-4-9b-chat",
23652
  "developer": "THUDM",
23653
  "scores": {
23654
+ "IFEval": 0,
23655
  "BBH": 0.4736,
23656
+ "MATH Level 5": 0,
23657
  "GPQA": 0.3138,
23658
  "MUSR": 0.3994,
23659
  "MMLU-PRO": 0.3167
 
23664
  "name": "glm-4-9b-chat-1m",
23665
  "developer": "THUDM",
23666
  "scores": {
23667
+ "IFEval": 0,
23668
  "BBH": 0.418,
23669
+ "MATH Level 5": 0,
23670
  "GPQA": 0.3037,
23671
  "MUSR": 0.3795,
23672
  "MMLU-PRO": 0.3163
 
24407
  "scores": {
24408
  "IFEval": 0.1751,
24409
  "BBH": 0.2643,
24410
+ "MATH Level 5": 0,
24411
  "GPQA": 0.2106,
24412
  "MUSR": 0.3128,
24413
  "MMLU-PRO": 0.1173
 
24615
  "scores": {
24616
  "IFEval": 0.1879,
24617
  "BBH": 0.3017,
24618
+ "MATH Level 5": 0,
24619
  "GPQA": 0.224,
24620
  "MUSR": 0.3684,
24621
  "MMLU-PRO": 0.1164
 
24732
  "scores": {
24733
  "IFEval": 0.1879,
24734
  "BBH": 0.4462,
24735
+ "MATH Level 5": 0,
24736
  "GPQA": 0.281,
24737
  "MUSR": 0.3627,
24738
  "MMLU-PRO": 0.2318
 
25876
  "scores": {
25877
  "IFEval": 0.185,
25878
  "BBH": 0.2913,
25879
+ "MATH Level 5": 0,
25880
  "GPQA": 0.2592,
25881
  "MUSR": 0.3497,
25882
  "MMLU-PRO": 0.1166
 
26019
  "scores": {
26020
  "IFEval": 0.1273,
26021
  "BBH": 0.2944,
26022
+ "MATH Level 5": 0,
26023
  "GPQA": 0.2408,
26024
  "MUSR": 0.3368,
26025
  "MMLU-PRO": 0.1144
 
26422
  "scores": {
26423
  "IFEval": 0.1856,
26424
  "BBH": 0.291,
26425
+ "MATH Level 5": 0,
26426
  "GPQA": 0.2643,
26427
  "MUSR": 0.3364,
26428
  "MMLU-PRO": 0.1091
 
26487
  "scores": {
26488
  "IFEval": 0.207,
26489
  "BBH": 0.3011,
26490
+ "MATH Level 5": 0,
26491
  "GPQA": 0.2634,
26492
  "MUSR": 0.3219,
26493
  "MMLU-PRO": 0.111
 
26500
  "scores": {
26501
  "IFEval": 0.207,
26502
  "BBH": 0.3011,
26503
+ "MATH Level 5": 0,
26504
  "GPQA": 0.2634,
26505
  "MUSR": 0.3219,
26506
  "MMLU-PRO": 0.111
 
26565
  "scores": {
26566
  "IFEval": 0.167,
26567
  "BBH": 0.2938,
26568
+ "MATH Level 5": 0,
26569
  "GPQA": 0.2517,
26570
  "MUSR": 0.3541,
26571
  "MMLU-PRO": 0.1087
 
26630
  "scores": {
26631
  "IFEval": 0.1446,
26632
  "BBH": 0.2817,
26633
+ "MATH Level 5": 0,
26634
  "GPQA": 0.2433,
26635
  "MUSR": 0.3697,
26636
  "MMLU-PRO": 0.1095
 
27176
  "scores": {
27177
  "IFEval": 0.1746,
27178
  "BBH": 0.3126,
27179
+ "MATH Level 5": 0,
27180
  "GPQA": 0.245,
27181
  "MUSR": 0.4096,
27182
  "MMLU-PRO": 0.1087
 
27319
  "scores": {
27320
  "IFEval": 0.1748,
27321
  "BBH": 0.2883,
27322
+ "MATH Level 5": 0,
27323
  "GPQA": 0.2592,
27324
  "MUSR": 0.3803,
27325
  "MMLU-PRO": 0.1129
 
27553
  "scores": {
27554
  "IFEval": 0.167,
27555
  "BBH": 0.295,
27556
+ "MATH Level 5": 0,
27557
  "GPQA": 0.2567,
27558
  "MUSR": 0.3764,
27559
  "MMLU-PRO": 0.1082
 
27904
  "scores": {
27905
  "IFEval": 0.1815,
27906
  "BBH": 0.3242,
27907
+ "MATH Level 5": 0,
27908
  "GPQA": 0.2945,
27909
  "MUSR": 0.3596,
27910
  "MMLU-PRO": 0.331
 
27956
  "scores": {
27957
  "IFEval": 0.1943,
27958
  "BBH": 0.6234,
27959
+ "MATH Level 5": 0,
27960
  "GPQA": 0.3322,
27961
  "MUSR": 0.4267,
27962
  "MMLU-PRO": 0.4688
 
28177
  "scores": {
28178
  "IFEval": 0.1773,
28179
  "BBH": 0.2892,
28180
+ "MATH Level 5": 0,
28181
  "GPQA": 0.2592,
28182
  "MUSR": 0.343,
28183
  "MMLU-PRO": 0.1169
 
28268
  "scores": {
28269
  "IFEval": 0.1706,
28270
  "BBH": 0.3607,
28271
+ "MATH Level 5": 0,
28272
  "GPQA": 0.2911,
28273
  "MUSR": 0.3911,
28274
  "MMLU-PRO": 0.1723
 
28281
  "scores": {
28282
  "IFEval": 0.1645,
28283
  "BBH": 0.3597,
28284
+ "MATH Level 5": 0,
28285
  "GPQA": 0.2852,
28286
  "MUSR": 0.4082,
28287
  "MMLU-PRO": 0.1647
 
28346
  "scores": {
28347
  "IFEval": 0.1884,
28348
  "BBH": 0.6129,
28349
+ "MATH Level 5": 0,
28350
  "GPQA": 0.3196,
28351
  "MUSR": 0.4451,
28352
  "MMLU-PRO": 0.4589
 
28359
  "scores": {
28360
  "IFEval": 0.1758,
28361
  "BBH": 0.2757,
28362
+ "MATH Level 5": 0,
28363
  "GPQA": 0.2357,
28364
  "MUSR": 0.3209,
28365
  "MMLU-PRO": 0.1114
 
28372
  "scores": {
28373
  "IFEval": 0.1913,
28374
  "BBH": 0.2942,
28375
+ "MATH Level 5": 0,
28376
  "GPQA": 0.2601,
28377
  "MUSR": 0.362,
28378
  "MMLU-PRO": 0.1168
 
28632
  "scores": {
28633
  "IFEval": 0.1879,
28634
  "BBH": 0.2969,
28635
+ "MATH Level 5": 0,
28636
  "GPQA": 0.2626,
28637
  "MUSR": 0.3633,
28638
  "MMLU-PRO": 0.1168
 
28658
  "scores": {
28659
  "IFEval": 0.1754,
28660
  "BBH": 0.2874,
28661
+ "MATH Level 5": 0,
28662
  "GPQA": 0.2492,
28663
  "MUSR": 0.3524,
28664
  "MMLU-PRO": 0.1128
 
28697
  "scores": {
28698
  "IFEval": 0.1639,
28699
  "BBH": 0.2827,
28700
+ "MATH Level 5": 0,
28701
  "GPQA": 0.2584,
28702
  "MUSR": 0.3857,
28703
  "MMLU-PRO": 0.1095
 
28710
  "scores": {
28711
  "IFEval": 0.2009,
28712
  "BBH": 0.3215,
28713
+ "MATH Level 5": 0,
28714
  "GPQA": 0.2743,
28715
  "MUSR": 0.3843,
28716
  "MMLU-PRO": 0.108
 
28736
  "scores": {
28737
  "IFEval": 0.1697,
28738
  "BBH": 0.4063,
28739
+ "MATH Level 5": 0,
28740
  "GPQA": 0.2827,
28741
  "MUSR": 0.3501,
28742
  "MMLU-PRO": 0.1981
 
28801
  "scores": {
28802
  "IFEval": 0.1921,
28803
  "BBH": 0.3252,
28804
+ "MATH Level 5": 0,
28805
  "GPQA": 0.2374,
28806
  "MUSR": 0.375,
28807
  "MMLU-PRO": 0.1088
 
28814
  "scores": {
28815
  "IFEval": 0.1742,
28816
  "BBH": 0.3794,
28817
+ "MATH Level 5": 0,
28818
  "GPQA": 0.3062,
28819
  "MUSR": 0.394,
28820
  "MMLU-PRO": 0.198
 
29527
  "name": "GRAG-NEMO-12B-ORPO-HESSIAN-AI",
29528
  "developer": "avemio",
29529
  "scores": {
29530
+ "IFEval": 0,
29531
  "BBH": 0.2607,
29532
+ "MATH Level 5": 0,
29533
  "GPQA": 0.2592,
29534
  "MUSR": 0.3447,
29535
  "MMLU-PRO": 0.1061
 
30218
  "scores": {
30219
  "IFEval": 0.1813,
30220
  "BBH": 0.336,
30221
+ "MATH Level 5": 0,
30222
  "GPQA": 0.25,
30223
  "MUSR": 0.3497,
30224
  "MMLU-PRO": 0.1445
 
30660
  "scores": {
30661
  "IFEval": 0.1579,
30662
  "BBH": 0.2962,
30663
+ "MATH Level 5": 0,
30664
  "GPQA": 0.2517,
30665
  "MUSR": 0.3846,
30666
  "MMLU-PRO": 0.1146
 
31440
  "scores": {
31441
  "IFEval": 0.1829,
31442
  "BBH": 0.2874,
31443
+ "MATH Level 5": 0,
31444
  "GPQA": 0.2592,
31445
  "MUSR": 0.3674,
31446
  "MMLU-PRO": 0.11
 
31817
  "scores": {
31818
  "IFEval": 0.1123,
31819
  "BBH": 0.2875,
31820
+ "MATH Level 5": 0,
31821
  "GPQA": 0.2466,
31822
  "MUSR": 0.3938,
31823
  "MMLU-PRO": 0.1135
 
32350
  "scores": {
32351
  "IFEval": 0.1706,
32352
  "BBH": 0.2947,
32353
+ "MATH Level 5": 0,
32354
  "GPQA": 0.2601,
32355
  "MUSR": 0.3686,
32356
  "MMLU-PRO": 0.1167
 
32363
  "scores": {
32364
  "IFEval": 0.1916,
32365
  "BBH": 0.2977,
32366
+ "MATH Level 5": 0,
32367
  "GPQA": 0.2685,
32368
  "MUSR": 0.3872,
32369
  "MMLU-PRO": 0.1132
 
33390
  "scores": {
33391
  "IFEval": 0.1715,
33392
  "BBH": 0.5463,
33393
+ "MATH Level 5": 0,
33394
  "GPQA": 0.3406,
33395
  "MUSR": 0.3555,
33396
  "MMLU-PRO": 0.3947
 
33689
  "scores": {
33690
  "IFEval": 0.2019,
33691
  "BBH": 0.2868,
33692
+ "MATH Level 5": 0,
33693
  "GPQA": 0.2601,
33694
  "MUSR": 0.3566,
33695
  "MMLU-PRO": 0.1065
 
33702
  "scores": {
33703
  "IFEval": 0.1979,
33704
  "BBH": 0.2698,
33705
+ "MATH Level 5": 0,
33706
  "GPQA": 0.2466,
33707
  "MUSR": 0.3593,
33708
  "MMLU-PRO": 0.1041
 
33780
  "scores": {
33781
  "IFEval": 0.1752,
33782
  "BBH": 0.2906,
33783
+ "MATH Level 5": 0,
33784
  "GPQA": 0.2399,
33785
  "MUSR": 0.3512,
33786
  "MMLU-PRO": 0.1126
 
34404
  "scores": {
34405
  "IFEval": 0.125,
34406
  "BBH": 0.2867,
34407
+ "MATH Level 5": 0,
34408
  "GPQA": 0.2483,
34409
  "MUSR": 0.3487,
34410
  "MMLU-PRO": 0.1098
 
34417
  "scores": {
34418
  "IFEval": 0.1411,
34419
  "BBH": 0.2924,
34420
+ "MATH Level 5": 0,
34421
  "GPQA": 0.2525,
34422
  "MUSR": 0.3541,
34423
  "MMLU-PRO": 0.1101
 
34469
  "scores": {
34470
  "IFEval": 0.1373,
34471
  "BBH": 0.2949,
34472
+ "MATH Level 5": 0,
34473
  "GPQA": 0.2508,
34474
  "MUSR": 0.3698,
34475
  "MMLU-PRO": 0.1118
 
35366
  "scores": {
35367
  "IFEval": 0.1718,
35368
  "BBH": 0.2766,
35369
+ "MATH Level 5": 0,
35370
  "GPQA": 0.2424,
35371
  "MUSR": 0.3857,
35372
  "MMLU-PRO": 0.1123
 
35379
  "scores": {
35380
  "IFEval": 0.196,
35381
  "BBH": 0.3047,
35382
+ "MATH Level 5": 0,
35383
  "GPQA": 0.2643,
35384
  "MUSR": 0.3795,
35385
  "MMLU-PRO": 0.112
 
35392
  "scores": {
35393
  "IFEval": 0.2358,
35394
  "BBH": 0.2959,
35395
+ "MATH Level 5": 0,
35396
  "GPQA": 0.2416,
35397
  "MUSR": 0.3689,
35398
  "MMLU-PRO": 0.1089
 
35457
  "scores": {
35458
  "IFEval": 0.1585,
35459
  "BBH": 0.2876,
35460
+ "MATH Level 5": 0,
35461
  "GPQA": 0.25,
35462
  "MUSR": 0.3517,
35463
  "MMLU-PRO": 0.1098
 
36445
  "scores": {
36446
  "IFEval": 0.2049,
36447
  "BBH": 0.2912,
36448
+ "MATH Level 5": 0,
36449
  "GPQA": 0.2601,
36450
  "MUSR": 0.3575,
36451
  "MMLU-PRO": 0.1167
 
37966
  "scores": {
37967
  "IFEval": 0.1028,
37968
  "BBH": 0.2941,
37969
+ "MATH Level 5": 0,
37970
  "GPQA": 0.2567,
37971
  "MUSR": 0.3528,
37972
  "MMLU-PRO": 0.1141
 
38161
  "scores": {
38162
  "IFEval": 0.1572,
38163
  "BBH": 0.2863,
38164
+ "MATH Level 5": 0,
38165
  "GPQA": 0.2592,
38166
  "MUSR": 0.3607,
38167
  "MMLU-PRO": 0.1169
 
40865
  "scores": {
40866
  "IFEval": 0.1416,
40867
  "BBH": 0.2989,
40868
+ "MATH Level 5": 0,
40869
  "GPQA": 0.2525,
40870
  "MUSR": 0.3475,
40871
  "MMLU-PRO": 0.1094
 
41437
  "scores": {
41438
  "IFEval": 0.2145,
41439
  "BBH": 0.4283,
41440
+ "MATH Level 5": 0,
41441
  "GPQA": 0.2961,
41442
  "MUSR": 0.4979,
41443
  "MMLU-PRO": 0.2414
 
41879
  "scores": {
41880
  "IFEval": 0.1778,
41881
  "BBH": 0.3056,
41882
+ "MATH Level 5": 0,
41883
  "GPQA": 0.2517,
41884
  "MUSR": 0.3883,
41885
  "MMLU-PRO": 0.1126
 
42269
  "scores": {
42270
  "IFEval": 0.1564,
42271
  "BBH": 0.2894,
42272
+ "MATH Level 5": 0,
42273
  "GPQA": 0.2626,
42274
  "MUSR": 0.3789,
42275
  "MMLU-PRO": 0.1169
 
42802
  "scores": {
42803
  "IFEval": 0.0705,
42804
  "BBH": 0.3449,
42805
+ "MATH Level 5": 0,
42806
  "GPQA": 0.2668,
42807
  "MUSR": 0.3631,
42808
  "MMLU-PRO": 0.1679
 
43179
  "scores": {
43180
  "IFEval": 0.2018,
43181
  "BBH": 0.3282,
43182
+ "MATH Level 5": 0,
43183
  "GPQA": 0.2643,
43184
  "MUSR": 0.4123,
43185
  "MMLU-PRO": 0.1472
 
43556
  "scores": {
43557
  "IFEval": 0.166,
43558
  "BBH": 0.3068,
43559
+ "MATH Level 5": 0,
43560
  "GPQA": 0.2542,
43561
  "MUSR": 0.3538,
43562
  "MMLU-PRO": 0.108
 
43582
  "scores": {
43583
  "IFEval": 0.1504,
43584
  "BBH": 0.295,
43585
+ "MATH Level 5": 0,
43586
  "GPQA": 0.2609,
43587
  "MUSR": 0.4031,
43588
  "MMLU-PRO": 0.1126
 
43595
  "scores": {
43596
  "IFEval": 0.1597,
43597
  "BBH": 0.31,
43598
+ "MATH Level 5": 0,
43599
  "GPQA": 0.2567,
43600
  "MUSR": 0.4017,
43601
  "MMLU-PRO": 0.1157
 
44492
  "scores": {
44493
  "IFEval": 0.1479,
44494
  "BBH": 0.3014,
44495
+ "MATH Level 5": 0,
44496
  "GPQA": 0.2542,
44497
  "MUSR": 0.4287,
44498
  "MMLU-PRO": 0.1119
 
45454
  "scores": {
45455
  "IFEval": 0.2273,
45456
  "BBH": 0.2865,
45457
+ "MATH Level 5": 0,
45458
  "GPQA": 0.2492,
45459
  "MUSR": 0.3445,
45460
  "MMLU-PRO": 0.1168
 
46338
  "scores": {
46339
  "IFEval": 0.2049,
46340
  "BBH": 0.2912,
46341
+ "MATH Level 5": 0,
46342
  "GPQA": 0.2601,
46343
  "MUSR": 0.3575,
46344
  "MMLU-PRO": 0.1167
 
47027
  "scores": {
47028
  "IFEval": 0.1564,
47029
  "BBH": 0.292,
47030
+ "MATH Level 5": 0,
47031
  "GPQA": 0.2601,
47032
  "MUSR": 0.3792,
47033
  "MMLU-PRO": 0.11
 
47716
  "scores": {
47717
  "IFEval": 0.1413,
47718
  "BBH": 0.2717,
47719
+ "MATH Level 5": 0,
47720
  "GPQA": 0.2341,
47721
  "MUSR": 0.3351,
47722
  "MMLU-PRO": 0.1179
 
47742
  "scores": {
47743
  "IFEval": 0.1494,
47744
  "BBH": 0.2423,
47745
+ "MATH Level 5": 0,
47746
  "GPQA": 0.2458,
47747
  "MUSR": 0.358,
47748
  "MMLU-PRO": 0.1139
 
48093
  "scores": {
48094
  "IFEval": 0.1763,
48095
  "BBH": 0.3011,
48096
+ "MATH Level 5": 0,
48097
  "GPQA": 0.2399,
48098
  "MUSR": 0.342,
48099
  "MMLU-PRO": 0.1066
 
48249
  "scores": {
48250
  "IFEval": 0.2049,
48251
  "BBH": 0.2912,
48252
+ "MATH Level 5": 0,
48253
  "GPQA": 0.2601,
48254
  "MUSR": 0.3575,
48255
  "MMLU-PRO": 0.1167
 
49263
  "scores": {
49264
  "IFEval": 0.1492,
49265
  "BBH": 0.313,
49266
+ "MATH Level 5": 0,
49267
  "GPQA": 0.2601,
49268
  "MUSR": 0.3911,
49269
  "MMLU-PRO": 0.1147
 
51005
  "scores": {
51006
  "IFEval": 0.1397,
51007
  "BBH": 0.2824,
51008
+ "MATH Level 5": 0,
51009
  "GPQA": 0.276,
51010
  "MUSR": 0.3724,
51011
  "MMLU-PRO": 0.1123
 
51850
  "scores": {
51851
  "IFEval": 0.3681,
51852
  "BBH": 0.4726,
51853
+ "MATH Level 5": 0,
51854
  "GPQA": 0.2743,
51855
  "MUSR": 0.3524,
51856
  "MMLU-PRO": 0.2247
 
52591
  "scores": {
52592
  "IFEval": 0.1872,
52593
  "BBH": 0.302,
52594
+ "MATH Level 5": 0,
52595
  "GPQA": 0.2768,
52596
  "MUSR": 0.3682,
52597
  "MMLU-PRO": 0.1095
 
54385
  "scores": {
54386
  "IFEval": 0.2318,
54387
  "BBH": 0.2823,
54388
+ "MATH Level 5": 0,
54389
  "GPQA": 0.2534,
54390
  "MUSR": 0.3485,
54391
  "MMLU-PRO": 0.1094
 
54632
  "scores": {
54633
  "IFEval": 0.1943,
54634
  "BBH": 0.2951,
54635
+ "MATH Level 5": 0,
54636
  "GPQA": 0.2576,
54637
  "MUSR": 0.3796,
54638
  "MMLU-PRO": 0.1166
 
54697
  "scores": {
54698
  "IFEval": 0.0787,
54699
  "BBH": 0.2919,
54700
+ "MATH Level 5": 0,
54701
  "GPQA": 0.2643,
54702
  "MUSR": 0.4138,
54703
  "MMLU-PRO": 0.1172
 
54762
  "scores": {
54763
  "IFEval": 0.1197,
54764
  "BBH": 0.3002,
54765
+ "MATH Level 5": 0,
54766
  "GPQA": 0.2525,
54767
  "MUSR": 0.3581,
54768
  "MMLU-PRO": 0.1129
 
54866
  "scores": {
54867
  "IFEval": 0.1869,
54868
  "BBH": 0.6048,
54869
+ "MATH Level 5": 0,
54870
  "GPQA": 0.2701,
54871
  "MUSR": 0.3843,
54872
  "MMLU-PRO": 0.4382
 
58831
  "scores": {
58832
  "IFEval": 0.1555,
58833
  "BBH": 0.283,
58834
+ "MATH Level 5": 0,
58835
  "GPQA": 0.2416,
58836
  "MUSR": 0.367,
58837
  "MMLU-PRO": 0.109
 
58844
  "scores": {
58845
  "IFEval": 0.1555,
58846
  "BBH": 0.283,
58847
+ "MATH Level 5": 0,
58848
  "GPQA": 0.2416,
58849
  "MUSR": 0.367,
58850
  "MMLU-PRO": 0.109
 
58994
  }
58995
  }
58996
  ]
58997
+ }
data/survey/eval-schema-fields.json ADDED
@@ -0,0 +1,563 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id": "eee_eval:source_metadata.evaluator_relationship",
4
+ "source": "eee_eval",
5
+ "section": "source_metadata",
6
+ "field": "evaluator_relationship",
7
+ "schemaPath": "source_metadata.evaluator_relationship",
8
+ "fullPath": "eee_eval.source_metadata.evaluator_relationship",
9
+ "type": "string",
10
+ "description": "Relationship between the evaluator and the model developer (e.g., first-party, third-party, independent).",
11
+ "required": "required"
12
+ },
13
+ {
14
+ "id": "eee_eval:source_metadata.source_organization_name",
15
+ "source": "eee_eval",
16
+ "section": "source_metadata",
17
+ "field": "source_organization_name",
18
+ "schemaPath": "source_metadata.source_organization_name",
19
+ "fullPath": "eee_eval.source_metadata.source_organization_name",
20
+ "type": "string",
21
+ "description": "Name of the organization that produced or published the evaluation results.",
22
+ "required": "required"
23
+ },
24
+ {
25
+ "id": "eee_eval:source_metadata.source_url",
26
+ "source": "eee_eval",
27
+ "section": "source_metadata",
28
+ "field": "source_url",
29
+ "schemaPath": "source_metadata.source_url",
30
+ "fullPath": "eee_eval.source_metadata.source_url",
31
+ "type": "string",
32
+ "description": "URL pointing to the original source of the evaluation results.",
33
+ "required": "optional"
34
+ },
35
+ {
36
+ "id": "eee_eval:source_metadata.publication_date",
37
+ "source": "eee_eval",
38
+ "section": "source_metadata",
39
+ "field": "publication_date",
40
+ "schemaPath": "source_metadata.publication_date",
41
+ "fullPath": "eee_eval.source_metadata.publication_date",
42
+ "type": "string",
43
+ "description": "Date when the evaluation results were published or made publicly available.",
44
+ "required": "optional"
45
+ },
46
+ {
47
+ "id": "eee_eval:retrieved_timestamp",
48
+ "source": "eee_eval",
49
+ "section": "root",
50
+ "field": "retrieved_timestamp",
51
+ "schemaPath": "retrieved_timestamp",
52
+ "fullPath": "eee_eval.retrieved_timestamp",
53
+ "type": "string",
54
+ "description": "ISO 8601 timestamp indicating when the evaluation data was retrieved or ingested.",
55
+ "required": "required"
56
+ },
57
+ {
58
+ "id": "eee_eval:eval_library.name",
59
+ "source": "eee_eval",
60
+ "section": "eval_library",
61
+ "field": "name",
62
+ "schemaPath": "eval_library.name",
63
+ "fullPath": "eee_eval.eval_library.name",
64
+ "type": "string",
65
+ "description": "Name of the evaluation library or harness used to run the evaluation (e.g., lm-evaluation-harness, HELM).",
66
+ "required": "required"
67
+ },
68
+ {
69
+ "id": "eee_eval:eval_library.version",
70
+ "source": "eee_eval",
71
+ "section": "eval_library",
72
+ "field": "version",
73
+ "schemaPath": "eval_library.version",
74
+ "fullPath": "eee_eval.eval_library.version",
75
+ "type": "string",
76
+ "description": "Version string of the evaluation library used, enabling reproducibility checks.",
77
+ "required": "required"
78
+ },
79
+ {
80
+ "id": "eee_eval:eval_library.url",
81
+ "source": "eee_eval",
82
+ "section": "eval_library",
83
+ "field": "url",
84
+ "schemaPath": "eval_library.url",
85
+ "fullPath": "eee_eval.eval_library.url",
86
+ "type": "string",
87
+ "description": "Repository or documentation URL for the evaluation library.",
88
+ "required": "optional"
89
+ },
90
+ {
91
+ "id": "eee_eval:model_info.model_id",
92
+ "source": "eee_eval",
93
+ "section": "model_info",
94
+ "field": "model_id",
95
+ "schemaPath": "model_info.model_id",
96
+ "fullPath": "eee_eval.model_info.model_id",
97
+ "type": "string",
98
+ "description": "Unique identifier for the model being evaluated (e.g., HuggingFace model ID).",
99
+ "required": "required"
100
+ },
101
+ {
102
+ "id": "eee_eval:model_info.model_revision",
103
+ "source": "eee_eval",
104
+ "section": "model_info",
105
+ "field": "model_revision",
106
+ "schemaPath": "model_info.model_revision",
107
+ "fullPath": "eee_eval.model_info.model_revision",
108
+ "type": "string",
109
+ "description": "Git revision or checkpoint hash of the model weights used during evaluation.",
110
+ "required": "optional"
111
+ },
112
+ {
113
+ "id": "eee_eval:model_info.model_type",
114
+ "source": "eee_eval",
115
+ "section": "model_info",
116
+ "field": "model_type",
117
+ "schemaPath": "model_info.model_type",
118
+ "fullPath": "eee_eval.model_info.model_type",
119
+ "type": "string",
120
+ "description": "Type or architecture category of the model (e.g., decoder-only, encoder-decoder).",
121
+ "required": "optional"
122
+ },
123
+ {
124
+ "id": "eee_eval:evaluation_results.generation_config",
125
+ "source": "eee_eval",
126
+ "section": "evaluation_results",
127
+ "field": "generation_config",
128
+ "schemaPath": "evaluation_results.generation_config",
129
+ "fullPath": "eee_eval.evaluation_results.generation_config",
130
+ "type": "object",
131
+ "description": "Generation configuration used during evaluation, including temperature, top-p, max tokens, and other sampling parameters.",
132
+ "required": "required"
133
+ },
134
+ {
135
+ "id": "eee_eval:evaluation_results.scores",
136
+ "source": "eee_eval",
137
+ "section": "evaluation_results",
138
+ "field": "scores",
139
+ "schemaPath": "evaluation_results.scores",
140
+ "fullPath": "eee_eval.evaluation_results.scores",
141
+ "type": "object",
142
+ "description": "Aggregate scores across benchmarks, keyed by benchmark name.",
143
+ "required": "required"
144
+ },
145
+ {
146
+ "id": "eee_eval:evaluation_results.num_few_shot",
147
+ "source": "eee_eval",
148
+ "section": "evaluation_results",
149
+ "field": "num_few_shot",
150
+ "schemaPath": "evaluation_results.num_few_shot",
151
+ "fullPath": "eee_eval.evaluation_results.num_few_shot",
152
+ "type": "integer",
153
+ "description": "Number of few-shot examples provided in the prompt during evaluation.",
154
+ "required": "optional"
155
+ },
156
+ {
157
+ "id": "eee_eval:detailed_evaluation_results.file_path",
158
+ "source": "eee_eval",
159
+ "section": "detailed_evaluation_results",
160
+ "field": "file_path",
161
+ "schemaPath": "detailed_evaluation_results.file_path",
162
+ "fullPath": "eee_eval.detailed_evaluation_results.file_path",
163
+ "type": "string",
164
+ "description": "Path or URL to files containing per-sample evaluation results for detailed analysis.",
165
+ "required": "optional"
166
+ },
167
+ {
168
+ "id": "eee_eval:detailed_evaluation_results.format",
169
+ "source": "eee_eval",
170
+ "section": "detailed_evaluation_results",
171
+ "field": "format",
172
+ "schemaPath": "detailed_evaluation_results.format",
173
+ "fullPath": "eee_eval.detailed_evaluation_results.format",
174
+ "type": "string",
175
+ "description": "File format of the detailed evaluation results (e.g., jsonl, parquet, csv).",
176
+ "required": "optional"
177
+ },
178
+ {
179
+ "id": "eee_eval:hardware_info.gpu_type",
180
+ "source": "eee_eval",
181
+ "section": "hardware_info",
182
+ "field": "gpu_type",
183
+ "schemaPath": "hardware_info.gpu_type",
184
+ "fullPath": "eee_eval.hardware_info.gpu_type",
185
+ "type": "string",
186
+ "description": "Type and model of GPU hardware used during evaluation.",
187
+ "required": "optional"
188
+ },
189
+ {
190
+ "id": "eee_eval:hardware_info.num_gpus",
191
+ "source": "eee_eval",
192
+ "section": "hardware_info",
193
+ "field": "num_gpus",
194
+ "schemaPath": "hardware_info.num_gpus",
195
+ "fullPath": "eee_eval.hardware_info.num_gpus",
196
+ "type": "integer",
197
+ "description": "Number of GPUs used during evaluation.",
198
+ "required": "optional"
199
+ },
200
+ {
201
+ "id": "autobenchmarkcard:benchmark_details.overview",
202
+ "source": "autobenchmarkcard",
203
+ "section": "benchmark_details",
204
+ "field": "overview",
205
+ "schemaPath": "benchmark_details.overview",
206
+ "fullPath": "autobenchmarkcard.benchmark_details.overview",
207
+ "type": "string",
208
+ "description": "High-level summary of the benchmark, its purpose, and the capabilities it is designed to measure.",
209
+ "required": "required"
210
+ },
211
+ {
212
+ "id": "autobenchmarkcard:benchmark_details.name",
213
+ "source": "autobenchmarkcard",
214
+ "section": "benchmark_details",
215
+ "field": "name",
216
+ "schemaPath": "benchmark_details.name",
217
+ "fullPath": "autobenchmarkcard.benchmark_details.name",
218
+ "type": "string",
219
+ "description": "Official name of the benchmark.",
220
+ "required": "required"
221
+ },
222
+ {
223
+ "id": "autobenchmarkcard:benchmark_details.version",
224
+ "source": "autobenchmarkcard",
225
+ "section": "benchmark_details",
226
+ "field": "version",
227
+ "schemaPath": "benchmark_details.version",
228
+ "fullPath": "autobenchmarkcard.benchmark_details.version",
229
+ "type": "string",
230
+ "description": "Version of the benchmark dataset or task specification.",
231
+ "required": "required"
232
+ },
233
+ {
234
+ "id": "autobenchmarkcard:benchmark_details.release_date",
235
+ "source": "autobenchmarkcard",
236
+ "section": "benchmark_details",
237
+ "field": "release_date",
238
+ "schemaPath": "benchmark_details.release_date",
239
+ "fullPath": "autobenchmarkcard.benchmark_details.release_date",
240
+ "type": "string",
241
+ "description": "Date the benchmark was publicly released.",
242
+ "required": "optional"
243
+ },
244
+ {
245
+ "id": "autobenchmarkcard:benchmark_details.citation",
246
+ "source": "autobenchmarkcard",
247
+ "section": "benchmark_details",
248
+ "field": "citation",
249
+ "schemaPath": "benchmark_details.citation",
250
+ "fullPath": "autobenchmarkcard.benchmark_details.citation",
251
+ "type": "string",
252
+ "description": "BibTeX or APA citation for the benchmark paper or dataset.",
253
+ "required": "optional"
254
+ },
255
+ {
256
+ "id": "autobenchmarkcard:purpose_and_intended_users.intended_use",
257
+ "source": "autobenchmarkcard",
258
+ "section": "purpose_and_intended_users",
259
+ "field": "intended_use",
260
+ "schemaPath": "purpose_and_intended_users.intended_use",
261
+ "fullPath": "autobenchmarkcard.purpose_and_intended_users.intended_use",
262
+ "type": "string",
263
+ "description": "Description of the intended use cases and audiences for this benchmark.",
264
+ "required": "required"
265
+ },
266
+ {
267
+ "id": "autobenchmarkcard:purpose_and_intended_users.limitations",
268
+ "source": "autobenchmarkcard",
269
+ "section": "purpose_and_intended_users",
270
+ "field": "limitations",
271
+ "schemaPath": "purpose_and_intended_users.limitations",
272
+ "fullPath": "autobenchmarkcard.purpose_and_intended_users.limitations",
273
+ "type": "string",
274
+ "description": "Known limitations of the benchmark, including scope restrictions, population coverage gaps, or validity concerns.",
275
+ "required": "required"
276
+ },
277
+ {
278
+ "id": "autobenchmarkcard:purpose_and_intended_users.out_of_scope",
279
+ "source": "autobenchmarkcard",
280
+ "section": "purpose_and_intended_users",
281
+ "field": "out_of_scope",
282
+ "schemaPath": "purpose_and_intended_users.out_of_scope",
283
+ "fullPath": "autobenchmarkcard.purpose_and_intended_users.out_of_scope",
284
+ "type": "string",
285
+ "description": "Explicit description of use cases or capabilities the benchmark is not designed to evaluate.",
286
+ "required": "optional"
287
+ },
288
+ {
289
+ "id": "autobenchmarkcard:methodology.metrics",
290
+ "source": "autobenchmarkcard",
291
+ "section": "methodology",
292
+ "field": "metrics",
293
+ "schemaPath": "methodology.metrics",
294
+ "fullPath": "autobenchmarkcard.methodology.metrics",
295
+ "type": "array",
296
+ "description": "List of evaluation metrics used (e.g., accuracy, F1, BLEU), including their definitions and how they are computed.",
297
+ "required": "required"
298
+ },
299
+ {
300
+ "id": "autobenchmarkcard:methodology.validation",
301
+ "source": "autobenchmarkcard",
302
+ "section": "methodology",
303
+ "field": "validation",
304
+ "schemaPath": "methodology.validation",
305
+ "fullPath": "autobenchmarkcard.methodology.validation",
306
+ "type": "string",
307
+ "description": "Description of validation procedures used to ensure benchmark quality, including human review, pilot studies, or inter-annotator agreement.",
308
+ "required": "required"
309
+ },
310
+ {
311
+ "id": "autobenchmarkcard:methodology.interpretation",
312
+ "source": "autobenchmarkcard",
313
+ "section": "methodology",
314
+ "field": "interpretation",
315
+ "schemaPath": "methodology.interpretation",
316
+ "fullPath": "autobenchmarkcard.methodology.interpretation",
317
+ "type": "string",
318
+ "description": "Guidance on how to interpret benchmark scores, including what constitutes a meaningful difference and known confounds.",
319
+ "required": "required"
320
+ },
321
+ {
322
+ "id": "autobenchmarkcard:methodology.data_collection",
323
+ "source": "autobenchmarkcard",
324
+ "section": "methodology",
325
+ "field": "data_collection",
326
+ "schemaPath": "methodology.data_collection",
327
+ "fullPath": "autobenchmarkcard.methodology.data_collection",
328
+ "type": "string",
329
+ "description": "Description of how benchmark data was collected, curated, or generated.",
330
+ "required": "optional"
331
+ },
332
+ {
333
+ "id": "autobenchmarkcard:methodology.prompt_format",
334
+ "source": "autobenchmarkcard",
335
+ "section": "methodology",
336
+ "field": "prompt_format",
337
+ "schemaPath": "methodology.prompt_format",
338
+ "fullPath": "autobenchmarkcard.methodology.prompt_format",
339
+ "type": "string",
340
+ "description": "Specification of the prompt template or format used when querying models.",
341
+ "required": "optional"
342
+ },
343
+ {
344
+ "id": "autobenchmarkcard:ethical_and_legal_considerations.compliance_with_regulations",
345
+ "source": "autobenchmarkcard",
346
+ "section": "ethical_and_legal_considerations",
347
+ "field": "compliance_with_regulations",
348
+ "schemaPath": "ethical_and_legal_considerations.compliance_with_regulations",
349
+ "fullPath": "autobenchmarkcard.ethical_and_legal_considerations.compliance_with_regulations",
350
+ "type": "string",
351
+ "description": "Statement on compliance with relevant regulations or legal frameworks (e.g., GDPR, EU AI Act, NIST RMF).",
352
+ "required": "required"
353
+ },
354
+ {
355
+ "id": "autobenchmarkcard:ethical_and_legal_considerations.data_privacy",
356
+ "source": "autobenchmarkcard",
357
+ "section": "ethical_and_legal_considerations",
358
+ "field": "data_privacy",
359
+ "schemaPath": "ethical_and_legal_considerations.data_privacy",
360
+ "fullPath": "autobenchmarkcard.ethical_and_legal_considerations.data_privacy",
361
+ "type": "string",
362
+ "description": "Description of how personal data or sensitive information is handled in the benchmark.",
363
+ "required": "optional"
364
+ },
365
+ {
366
+ "id": "autobenchmarkcard:ethical_and_legal_considerations.consent",
367
+ "source": "autobenchmarkcard",
368
+ "section": "ethical_and_legal_considerations",
369
+ "field": "consent",
370
+ "schemaPath": "ethical_and_legal_considerations.consent",
371
+ "fullPath": "autobenchmarkcard.ethical_and_legal_considerations.consent",
372
+ "type": "string",
373
+ "description": "Information about consent obtained from data subjects or annotators.",
374
+ "required": "optional"
375
+ },
376
+ {
377
+ "id": "autobenchmarkcard:possible_risks.category",
378
+ "source": "autobenchmarkcard",
379
+ "section": "possible_risks",
380
+ "field": "category",
381
+ "schemaPath": "possible_risks.category",
382
+ "fullPath": "autobenchmarkcard.possible_risks.category",
383
+ "type": "array",
384
+ "description": "Categorized list of potential risks associated with misuse or misinterpretation of benchmark results (e.g., gaming, overfitting, contamination).",
385
+ "required": "required"
386
+ },
387
+ {
388
+ "id": "autobenchmarkcard:possible_risks.mitigation",
389
+ "source": "autobenchmarkcard",
390
+ "section": "possible_risks",
391
+ "field": "mitigation",
392
+ "schemaPath": "possible_risks.mitigation",
393
+ "fullPath": "autobenchmarkcard.possible_risks.mitigation",
394
+ "type": "string",
395
+ "description": "Recommended mitigations or safeguards to reduce identified risks.",
396
+ "required": "optional"
397
+ },
398
+ {
399
+ "id": "autobenchmarkcard:dataset_details.size",
400
+ "source": "autobenchmarkcard",
401
+ "section": "dataset_details",
402
+ "field": "size",
403
+ "schemaPath": "dataset_details.size",
404
+ "fullPath": "autobenchmarkcard.dataset_details.size",
405
+ "type": "integer",
406
+ "description": "Total number of examples or items in the benchmark dataset.",
407
+ "required": "optional"
408
+ },
409
+ {
410
+ "id": "autobenchmarkcard:dataset_details.languages",
411
+ "source": "autobenchmarkcard",
412
+ "section": "dataset_details",
413
+ "field": "languages",
414
+ "schemaPath": "dataset_details.languages",
415
+ "fullPath": "autobenchmarkcard.dataset_details.languages",
416
+ "type": "array",
417
+ "description": "Languages represented in the benchmark dataset (ISO 639-1 codes).",
418
+ "required": "optional"
419
+ },
420
+ {
421
+ "id": "autobenchmarkcard:dataset_details.domains",
422
+ "source": "autobenchmarkcard",
423
+ "section": "dataset_details",
424
+ "field": "domains",
425
+ "schemaPath": "dataset_details.domains",
426
+ "fullPath": "autobenchmarkcard.dataset_details.domains",
427
+ "type": "array",
428
+ "description": "Subject domains covered by the benchmark (e.g., medicine, law, mathematics, code).",
429
+ "required": "optional"
430
+ },
431
+ {
432
+ "id": "autobenchmarkcard:dataset_details.license",
433
+ "source": "autobenchmarkcard",
434
+ "section": "dataset_details",
435
+ "field": "license",
436
+ "schemaPath": "dataset_details.license",
437
+ "fullPath": "autobenchmarkcard.dataset_details.license",
438
+ "type": "string",
439
+ "description": "License under which the benchmark dataset is distributed.",
440
+ "required": "optional"
441
+ },
442
+ {
443
+ "id": "autobenchmarkcard:leaderboard_info.url",
444
+ "source": "autobenchmarkcard",
445
+ "section": "leaderboard_info",
446
+ "field": "url",
447
+ "schemaPath": "leaderboard_info.url",
448
+ "fullPath": "autobenchmarkcard.leaderboard_info.url",
449
+ "type": "string",
450
+ "description": "URL of the official leaderboard or results page for this benchmark.",
451
+ "required": "optional"
452
+ },
453
+ {
454
+ "id": "autobenchmarkcard:leaderboard_info.submission_requirements",
455
+ "source": "autobenchmarkcard",
456
+ "section": "leaderboard_info",
457
+ "field": "submission_requirements",
458
+ "schemaPath": "leaderboard_info.submission_requirements",
459
+ "fullPath": "autobenchmarkcard.leaderboard_info.submission_requirements",
460
+ "type": "string",
461
+ "description": "Requirements for submitting model results to the benchmark leaderboard.",
462
+ "required": "optional"
463
+ },
464
+ {
465
+ "id": "eee_instance_level_eval:instance_id",
466
+ "source": "eee_instance_level_eval",
467
+ "section": "root",
468
+ "field": "instance_id",
469
+ "schemaPath": "instance_id",
470
+ "fullPath": "eee_instance_level_eval.instance_id",
471
+ "type": "string",
472
+ "description": "Unique identifier for a single evaluation instance or example.",
473
+ "required": "required"
474
+ },
475
+ {
476
+ "id": "eee_instance_level_eval:model_output",
477
+ "source": "eee_instance_level_eval",
478
+ "section": "root",
479
+ "field": "model_output",
480
+ "schemaPath": "model_output",
481
+ "fullPath": "eee_instance_level_eval.model_output",
482
+ "type": "string",
483
+ "description": "Raw text output generated by the model for this instance.",
484
+ "required": "required"
485
+ },
486
+ {
487
+ "id": "eee_instance_level_eval:ground_truth",
488
+ "source": "eee_instance_level_eval",
489
+ "section": "root",
490
+ "field": "ground_truth",
491
+ "schemaPath": "ground_truth",
492
+ "fullPath": "eee_instance_level_eval.ground_truth",
493
+ "type": "string",
494
+ "description": "Reference answer or ground truth label for this instance.",
495
+ "required": "optional"
496
+ },
497
+ {
498
+ "id": "eee_instance_level_eval:score",
499
+ "source": "eee_instance_level_eval",
500
+ "section": "root",
501
+ "field": "score",
502
+ "schemaPath": "score",
503
+ "fullPath": "eee_instance_level_eval.score",
504
+ "type": "number",
505
+ "description": "Numeric score assigned to this instance by the evaluation metric.",
506
+ "required": "required"
507
+ },
508
+ {
509
+ "id": "eee_instance_level_eval:prompt",
510
+ "source": "eee_instance_level_eval",
511
+ "section": "root",
512
+ "field": "prompt",
513
+ "schemaPath": "prompt",
514
+ "fullPath": "eee_instance_level_eval.prompt",
515
+ "type": "string",
516
+ "description": "Full prompt text as presented to the model for this instance.",
517
+ "required": "optional"
518
+ },
519
+ {
520
+ "id": "eee_instance_level_eval:task_name",
521
+ "source": "eee_instance_level_eval",
522
+ "section": "root",
523
+ "field": "task_name",
524
+ "schemaPath": "task_name",
525
+ "fullPath": "eee_instance_level_eval.task_name",
526
+ "type": "string",
527
+ "description": "Name of the task or benchmark this instance belongs to.",
528
+ "required": "required"
529
+ },
530
+ {
531
+ "id": "eee_instance_level_eval:metadata.difficulty",
532
+ "source": "eee_instance_level_eval",
533
+ "section": "metadata",
534
+ "field": "difficulty",
535
+ "schemaPath": "metadata.difficulty",
536
+ "fullPath": "eee_instance_level_eval.metadata.difficulty",
537
+ "type": "string",
538
+ "description": "Difficulty level or category of this instance (e.g., easy, medium, hard).",
539
+ "required": "optional"
540
+ },
541
+ {
542
+ "id": "eee_instance_level_eval:metadata.subject",
543
+ "source": "eee_instance_level_eval",
544
+ "section": "metadata",
545
+ "field": "subject",
546
+ "schemaPath": "metadata.subject",
547
+ "fullPath": "eee_instance_level_eval.metadata.subject",
548
+ "type": "string",
549
+ "description": "Subject or topic area of this instance.",
550
+ "required": "optional"
551
+ },
552
+ {
553
+ "id": "eee_instance_level_eval:metadata.source_dataset",
554
+ "source": "eee_instance_level_eval",
555
+ "section": "metadata",
556
+ "field": "source_dataset",
557
+ "schemaPath": "metadata.source_dataset",
558
+ "fullPath": "eee_instance_level_eval.metadata.source_dataset",
559
+ "type": "string",
560
+ "description": "Original dataset this instance was sourced from.",
561
+ "required": "optional"
562
+ }
563
+ ]
lib/benchmark-metadata-utils.ts ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Shared benchmark name normalization utilities.
3
+ * This file has NO "server-only" restriction so it can be imported from client components.
4
+ */
5
+
6
+ /**
7
+ * Normalize a benchmark name to a stable lookup key.
8
+ * Strips composite prefixes like "hfopenllm_v2/", lowercases, collapses whitespace.
9
+ */
10
+ export function normalizeBenchmarkKey(name: string): string {
11
+ return name
12
+ .replace(/^[a-z0-9_]+ ?\//i, "") // strip "hfopenllm_v2/" etc.
13
+ .toLowerCase()
14
+ .replace(/[_]+/g, " ")
15
+ .replace(/\s+/g, " ")
16
+ .trim()
17
+ }
18
+
19
+ /**
20
+ * Build multiple candidate lookup keys for a benchmark name.
21
+ */
22
+ export function candidateBenchmarkKeys(name: string): string[] {
23
+ const base = normalizeBenchmarkKey(name)
24
+ return Array.from(
25
+ new Set([
26
+ base,
27
+ base.replace(/-/g, " "),
28
+ base.replace(/ /g, "-"),
29
+ base.replace(/[^a-z0-9]/g, ""),
30
+ ])
31
+ )
32
+ }
33
+
34
+ /**
35
+ * Given a record of BenchmarkCards and a benchmark name, find the matching card.
36
+ */
37
+ export function lookupBenchmarkCard<T>(
38
+ cards: Record<string, T>,
39
+ benchmarkName: string
40
+ ): T | undefined {
41
+ for (const key of candidateBenchmarkKeys(benchmarkName)) {
42
+ if (cards[key]) return cards[key]
43
+ }
44
+ // Fuzzy: check if any card key starts with or contains the name
45
+ const base = normalizeBenchmarkKey(benchmarkName)
46
+ for (const [cardKey, card] of Object.entries(cards)) {
47
+ if (cardKey.includes(base) || base.includes(cardKey)) return card
48
+ }
49
+ return undefined
50
+ }
lib/benchmark-metadata.ts ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import "server-only"
2
+
3
+ import { promises as fs, type Dirent } from "fs"
4
+ import path from "path"
5
+
6
+ import type { BenchmarkCard } from "@/lib/benchmark-schema"
7
+ import { normalizeBenchmarkKey, candidateBenchmarkKeys as candidateKeys } from "@/lib/benchmark-metadata-utils"
8
+
9
+ export { normalizeBenchmarkKey }
10
+
11
+ interface IndexedBenchmarkDetailFile {
12
+ benchmark_cards?: Record<string, BenchmarkCard>
13
+ }
14
+
15
+ function getBenchmarkDataDirectory() {
16
+ return path.join(process.cwd(), "data", "benchmarks")
17
+ }
18
+
19
+ async function readEmbeddedBenchmarkCards(): Promise<Map<string, BenchmarkCard>> {
20
+ const dir = getBenchmarkDataDirectory()
21
+ const map = new Map<string, BenchmarkCard>()
22
+
23
+ let entries: Dirent[]
24
+ try {
25
+ entries = await fs.readdir(dir, { withFileTypes: true })
26
+ } catch {
27
+ return map
28
+ }
29
+
30
+ const jsonFiles = entries.filter((entry) => entry.isFile() && entry.name.endsWith(".json"))
31
+
32
+ await Promise.all(
33
+ jsonFiles.map(async (entry) => {
34
+ try {
35
+ const raw = await fs.readFile(path.join(dir, entry.name), "utf8")
36
+ const parsed = JSON.parse(raw) as IndexedBenchmarkDetailFile
37
+ const embeddedCards = parsed.benchmark_cards
38
+
39
+ if (!embeddedCards || typeof embeddedCards !== "object") {
40
+ return
41
+ }
42
+
43
+ for (const [metricName, card] of Object.entries(embeddedCards)) {
44
+ if (!card?.benchmark_details?.name) {
45
+ continue
46
+ }
47
+
48
+ for (const key of candidateKeys(metricName)) {
49
+ if (!map.has(key)) map.set(key, card)
50
+ }
51
+
52
+ for (const key of candidateKeys(card.benchmark_details.name)) {
53
+ if (!map.has(key)) map.set(key, card)
54
+ }
55
+ }
56
+ } catch (err) {
57
+ console.warn(`benchmark-metadata: failed to load embedded cards from ${entry.name}:`, err)
58
+ }
59
+ })
60
+ )
61
+
62
+ return map
63
+ }
64
+
65
+ let cachedMapPromise: Promise<Map<string, BenchmarkCard>> | null = null
66
+
67
+ function getMap(): Promise<Map<string, BenchmarkCard>> {
68
+ if (process.env.NODE_ENV === "production") {
69
+ if (!cachedMapPromise) cachedMapPromise = readEmbeddedBenchmarkCards()
70
+ return cachedMapPromise
71
+ }
72
+ return readEmbeddedBenchmarkCards()
73
+ }
74
+
75
+ /** Look up a BenchmarkCard by any commonly-used benchmark name. Returns null if not found. */
76
+ export async function getBenchmarkCard(benchmarkName: string): Promise<BenchmarkCard | null> {
77
+ const map = await getMap()
78
+ for (const key of candidateKeys(benchmarkName)) {
79
+ const card = map.get(key)
80
+ if (card) return card
81
+ }
82
+ return null
83
+ }
84
+
85
+ /** Returns all loaded BenchmarkCards keyed by their normalised canonical name. */
86
+ export async function getAllBenchmarkCards(): Promise<Record<string, BenchmarkCard>> {
87
+ const map = await getMap()
88
+ // Deduplicate: only emit one entry per card (by canonical name)
89
+ const seen = new Set<BenchmarkCard>()
90
+ const result: Record<string, BenchmarkCard> = {}
91
+ for (const [key, card] of map) {
92
+ if (!seen.has(card)) {
93
+ seen.add(card)
94
+ result[normalizeBenchmarkKey(card.benchmark_details.name)] = card
95
+ }
96
+ }
97
+ return result
98
+ }
lib/benchmark-schema.ts CHANGED
@@ -167,12 +167,36 @@ export const EVALUATION_CATEGORIES = [
167
 
168
  export type CategoryType = typeof EVALUATION_CATEGORIES[number]
169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  /**
171
  * Helper to determine category from benchmark name
172
  */
173
  export function inferCategoryFromBenchmark(benchmarkName: string): CategoryType {
174
  const name = benchmarkName.toLowerCase()
175
-
176
  // Category mappings
177
  if (name.includes('advglue') || name.includes('jailbreak') || name.includes('attack') || name.includes('adversarial') || name.includes('red-team')) {
178
  return 'Adversarial'
@@ -180,7 +204,9 @@ export function inferCategoryFromBenchmark(benchmarkName: string): CategoryType
180
  if (name.includes('fairness') || name.includes('bias') || name.includes('stereo') || name.includes('bbq') || name.includes('celeb') || name.includes('winobias')) {
181
  return 'Fairness'
182
  }
183
- if (name.includes('safety') || name.includes('harmful') || name.includes('toxic') || name.includes('truthful') || name.includes('unsafe')) {
 
 
184
  return 'Safety'
185
  }
186
  if (name.includes('leakage') || name.includes('contamination')) {
@@ -207,10 +233,10 @@ export function inferCategoryFromBenchmark(benchmarkName: string): CategoryType
207
  if (name.includes('retrain') || name.includes('forgetting')) {
208
  return 'Retrainability'
209
  }
210
- if (name.includes('meta') || name.includes('few-shot') || name.includes('learning')) {
211
  return 'Meta-Learning'
212
  }
213
- if (name.includes('mt-bench') || name.includes('quality') || name.includes('human') || name.includes('fact') || name.includes('hallucination')) {
214
  return 'Core Quality Dimensions'
215
  }
216
 
@@ -314,3 +340,67 @@ export interface EvaluationCardData {
314
  inference_engine?: string
315
  inference_platform?: string
316
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
 
168
  export type CategoryType = typeof EVALUATION_CATEGORIES[number]
169
 
170
+ /**
171
+ * Returns Tailwind badge classes for a given category
172
+ */
173
+ export function getCategoryColor(category: CategoryType): string {
174
+ switch (category) {
175
+ case 'Safety':
176
+ return 'bg-rose-100 text-rose-800 border-rose-200 dark:bg-rose-950/40 dark:text-rose-200'
177
+ case 'Fairness':
178
+ return 'bg-amber-100 text-amber-800 border-amber-200 dark:bg-amber-950/40 dark:text-amber-200'
179
+ case 'Adversarial':
180
+ return 'bg-orange-100 text-orange-800 border-orange-200 dark:bg-orange-950/40 dark:text-orange-200'
181
+ case 'Privacy':
182
+ return 'bg-violet-100 text-violet-800 border-violet-200 dark:bg-violet-950/40 dark:text-violet-200'
183
+ case 'Robustness':
184
+ return 'bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200'
185
+ case 'Leakage/Contamination':
186
+ return 'bg-red-100 text-red-800 border-red-200 dark:bg-red-950/40 dark:text-red-200'
187
+ case 'Core Performance':
188
+ return 'bg-sky-100 text-sky-800 border-sky-200 dark:bg-sky-950/40 dark:text-sky-200'
189
+ default:
190
+ return 'bg-muted text-muted-foreground border-border'
191
+ }
192
+ }
193
+
194
  /**
195
  * Helper to determine category from benchmark name
196
  */
197
  export function inferCategoryFromBenchmark(benchmarkName: string): CategoryType {
198
  const name = benchmarkName.toLowerCase()
199
+
200
  // Category mappings
201
  if (name.includes('advglue') || name.includes('jailbreak') || name.includes('attack') || name.includes('adversarial') || name.includes('red-team')) {
202
  return 'Adversarial'
 
204
  if (name.includes('fairness') || name.includes('bias') || name.includes('stereo') || name.includes('bbq') || name.includes('celeb') || name.includes('winobias')) {
205
  return 'Fairness'
206
  }
207
+ // CivilComments is a toxicity/bias classification benchmark Safety
208
+ if (name.includes('safety') || name.includes('harmful') || name.includes('toxic') || name.includes('truthful') || name.includes('unsafe')
209
+ || name === 'civilcomments' || name.includes('civil_comments') || name.includes('civil comments')) {
210
  return 'Safety'
211
  }
212
  if (name.includes('leakage') || name.includes('contamination')) {
 
233
  if (name.includes('retrain') || name.includes('forgetting')) {
234
  return 'Retrainability'
235
  }
236
+ if (name.includes('meta-learning') || name.includes('meta learning') || name.includes('metalearning') || name.includes('few-shot') || name.includes('in-context')) {
237
  return 'Meta-Learning'
238
  }
239
+ if (name.includes('mt-bench') || name.includes('quality') || name.includes('humaneval') || name.includes('hallucination') || name.includes('factuality') || name.includes('factscore')) {
240
  return 'Core Quality Dimensions'
241
  }
242
 
 
340
  inference_engine?: string
341
  inference_platform?: string
342
  }
343
+
344
+ // ── Benchmark Card types (from metadata/benchmark_card_*.json) ────────────────
345
+
346
+ export interface BenchmarkCardDetails {
347
+ name: string
348
+ overview: string
349
+ data_type: string
350
+ domains: string[]
351
+ languages: string[]
352
+ similar_benchmarks: string[] | string
353
+ resources: string[]
354
+ }
355
+
356
+ export interface BenchmarkCardPurpose {
357
+ goal: string
358
+ audience: string[] | string
359
+ tasks: string[]
360
+ limitations: string
361
+ out_of_scope_uses: string[] | string
362
+ }
363
+
364
+ export interface BenchmarkCardData {
365
+ source: string
366
+ size: string
367
+ format: string
368
+ annotation: string
369
+ }
370
+
371
+ export interface BenchmarkCardMethodology {
372
+ methods: string[]
373
+ metrics: string[]
374
+ calculation: string
375
+ interpretation: string
376
+ baseline_results: string
377
+ validation: string
378
+ }
379
+
380
+ export interface BenchmarkCardEthical {
381
+ privacy_and_anonymity: string
382
+ data_licensing: string
383
+ consent_procedures: string
384
+ compliance_with_regulations: string
385
+ }
386
+
387
+ export interface BenchmarkCardRisk {
388
+ category: string
389
+ description: string[]
390
+ url: string
391
+ }
392
+
393
+ export interface BenchmarkCard {
394
+ benchmark_details: BenchmarkCardDetails
395
+ purpose_and_intended_users: BenchmarkCardPurpose
396
+ data: BenchmarkCardData
397
+ methodology: BenchmarkCardMethodology
398
+ ethical_and_legal_considerations: BenchmarkCardEthical
399
+ possible_risks: BenchmarkCardRisk[]
400
+ flagged_fields: Record<string, string>
401
+ missing_fields: string[]
402
+ card_info: {
403
+ created_at: string
404
+ llm: string
405
+ }
406
+ }
lib/dashboard-data-client.ts CHANGED
@@ -1,5 +1,6 @@
1
  import type { BenchmarkEvaluationCardData } from "@/components/benchmark-evaluation-card"
2
  import type {
 
3
  BenchmarkEvalListItem,
4
  BenchmarkEvalSummary,
5
  ModelEvaluationSummary,
@@ -83,3 +84,7 @@ export function fetchDeveloperSummary(developerId: string) {
83
  `/api/developer-summary?id=${encodeURIComponent(developerId)}`
84
  )
85
  }
 
 
 
 
 
1
  import type { BenchmarkEvaluationCardData } from "@/components/benchmark-evaluation-card"
2
  import type {
3
+ BenchmarkCard,
4
  BenchmarkEvalListItem,
5
  BenchmarkEvalSummary,
6
  ModelEvaluationSummary,
 
84
  `/api/developer-summary?id=${encodeURIComponent(developerId)}`
85
  )
86
  }
87
+
88
+ export function fetchBenchmarkMetadata() {
89
+ return fetchJson<Record<string, BenchmarkCard>>("/api/benchmark-metadata")
90
+ }
lib/eval-processing.ts CHANGED
@@ -3,6 +3,7 @@
3
  */
4
 
5
  import type {
 
6
  BenchmarkEvaluation,
7
  EvaluationCardData,
8
  CategoryType,
@@ -16,6 +17,8 @@ import type {
16
  import type { ModelEvaluationSummary } from './benchmark-schema'
17
  import type { ModelSummaryCore } from './benchmark-schema'
18
  import { inferCategoryFromBenchmark, EVALUATION_CATEGORIES } from './benchmark-schema'
 
 
19
  import { getCanonicalModelIdentity, getModelFamilyRouteId } from './model-family'
20
 
21
  export type { ModelEvaluationSummary }
@@ -111,6 +114,18 @@ export interface ModelResultForBenchmark {
111
  source_metadata: SourceMetadata
112
  source_data: BenchmarkEvaluation['source_data']
113
  result: EvaluationResult
 
 
 
 
 
 
 
 
 
 
 
 
114
  }
115
 
116
  export interface BenchmarkEvalSummary {
@@ -135,6 +150,16 @@ export interface BenchmarkEvalSummary {
135
  avg_score: number
136
  /** avg_score normalised to 0-1 using metric_config.min/max_score */
137
  avg_score_norm: number
 
 
 
 
 
 
 
 
 
 
138
  }
139
 
140
  export type BenchmarkEvalListItem = Omit<BenchmarkEvalSummary, "model_results">
 
3
  */
4
 
5
  import type {
6
+ BenchmarkCard,
7
  BenchmarkEvaluation,
8
  EvaluationCardData,
9
  CategoryType,
 
17
  import type { ModelEvaluationSummary } from './benchmark-schema'
18
  import type { ModelSummaryCore } from './benchmark-schema'
19
  import { inferCategoryFromBenchmark, EVALUATION_CATEGORIES } from './benchmark-schema'
20
+
21
+ export type { BenchmarkCard }
22
  import { getCanonicalModelIdentity, getModelFamilyRouteId } from './model-family'
23
 
24
  export type { ModelEvaluationSummary }
 
114
  source_metadata: SourceMetadata
115
  source_data: BenchmarkEvaluation['source_data']
116
  result: EvaluationResult
117
+ aggregate_components?: Array<{
118
+ evaluation_id: string
119
+ composite_benchmark_key: string
120
+ composite_benchmark_name: string
121
+ score: number
122
+ normalized_score: number
123
+ evaluation_timestamp: string
124
+ source_name?: string
125
+ source_type: SourceMetadata["source_type"]
126
+ source_organization_name: string
127
+ evaluator_relationship: SourceMetadata["evaluator_relationship"]
128
+ }>
129
  }
130
 
131
  export interface BenchmarkEvalSummary {
 
150
  avg_score: number
151
  /** avg_score normalised to 0-1 using metric_config.min/max_score */
152
  avg_score_norm: number
153
+ /** Rich benchmark card from the metadata/ folder, when available */
154
+ benchmark_card?: BenchmarkCard
155
+ is_aggregated?: boolean
156
+ aggregate_sources?: Array<{
157
+ evaluation_id: string
158
+ composite_benchmark_key: string
159
+ composite_benchmark_name: string
160
+ models_count: number
161
+ avg_score_norm: number
162
+ }>
163
  }
164
 
165
  export type BenchmarkEvalListItem = Omit<BenchmarkEvalSummary, "model_results">
lib/model-data.ts CHANGED
@@ -4,6 +4,7 @@ import { promises as fs } from "fs"
4
  import path from "path"
5
 
6
  import type {
 
7
  BenchmarkEvaluation,
8
  EvalLibrary,
9
  EvaluationResult,
@@ -15,8 +16,11 @@ import type {
15
  SourceMetadata,
16
  } from "@/lib/benchmark-schema"
17
  import { inferCategoryFromBenchmark } from "@/lib/benchmark-schema"
 
18
  import {
19
  type BenchmarkEvalListItem,
 
 
20
  createEvaluationCard,
21
  createModelFamilySummary,
22
  groupEvaluationsByBenchmark,
@@ -25,6 +29,7 @@ import {
25
  toBenchmarkEvalListItem,
26
  } from "@/lib/eval-processing"
27
  import { getCanonicalModelIdentity, getModelFamilyRouteId, normalizeModelInfo } from "@/lib/model-family"
 
28
 
29
  interface RawModelFile {
30
  model_info: ModelInfo
@@ -48,6 +53,86 @@ interface RawEvaluationResult
48
  evaluation_timestamp?: string
49
  }
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  interface IndexedModelSummary {
52
  id: string
53
  name: string
@@ -62,6 +147,7 @@ interface IndexedBenchmarkEntry {
62
  }
63
 
64
  interface IndexedBenchmarkDetail {
 
65
  models: Array<{
66
  model_id: string
67
  name: string
@@ -254,6 +340,223 @@ function slugifyEvalId(value: string) {
254
  return value.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_|_$/g, "")
255
  }
256
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  function inferMetricConfig(scores: number[], benchmark: string, metric: string): MetricConfig {
258
  const finiteScores = scores.filter((score) => Number.isFinite(score))
259
  const maxScore = finiteScores.length > 0 ? Math.max(...finiteScores) : 1
@@ -343,6 +646,7 @@ async function buildEvalListDataFromBenchmarkIndexes(): Promise<{
343
  worst_model: null,
344
  avg_score: avgScore,
345
  avg_score_norm: range > 0 ? (avgScore - minScore) / range : 0,
 
346
  })
347
  }
348
  }
@@ -420,7 +724,7 @@ async function loadEvaluationsForModelId(modelId: string) {
420
  continue
421
  }
422
 
423
- return raw.evaluations.map((evaluation) =>
424
  normalizeEvaluation(raw.model_info, evaluation)
425
  )
426
  }
@@ -591,7 +895,7 @@ async function readAllEvaluationsFromDataDirectory(): Promise<BenchmarkEvaluatio
591
  return []
592
  }
593
 
594
- return raw.evaluations.map((evaluation) =>
595
  normalizeEvaluation(raw.model_info, evaluation)
596
  )
597
  } catch (error) {
@@ -630,6 +934,7 @@ export async function getModelCards() {
630
 
631
  export async function getEvalListData() {
632
  const indexed = await buildEvalListDataFromBenchmarkIndexes()
 
633
  if (indexed) {
634
  return indexed
635
  }
@@ -638,10 +943,16 @@ export async function getEvalListData() {
638
  const summaries = Object.values(groupEvaluationsByBenchmark(evaluations))
639
  const totalModels = Object.keys(groupEvaluationsByModelFamily(evaluations)).length
640
 
641
- return {
642
- evals: summaries.map(toBenchmarkEvalListItem),
643
- totalModels,
644
- }
 
 
 
 
 
 
645
  }
646
 
647
  export async function getEvalList() {
@@ -758,10 +1069,10 @@ export async function getDeveloperSummaryById(routeId: string) {
758
  benchmark_scores: Object.fromEntries(
759
  items.flatMap((evaluation) =>
760
  evaluation.evaluation_results
761
- .map((result) => {
762
  const score = result.score_details?.score
763
  if (!Number.isFinite(score)) {
764
- return null
765
  }
766
 
767
  const benchmarkName =
@@ -769,9 +1080,8 @@ export async function getDeveloperSummaryById(routeId: string) {
769
  ? result.source_data.dataset_name
770
  : evaluation.benchmark ?? result.evaluation_name
771
 
772
- return [[`${benchmarkName}/${result.evaluation_name}`, score]] as const
773
  })
774
- .filter((entry): entry is readonly [string, number][] => entry !== null)
775
  ),
776
  ),
777
  }))
@@ -839,6 +1149,23 @@ export async function getModelSummaryById(modelId: string) {
839
  export async function getEvalSummaryById(evalId: string) {
840
  const evaluations = await loadAllEvaluationsFromDataDirectory()
841
  const grouped = groupEvaluationsByBenchmark(evaluations)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
842
 
843
- return Object.values(grouped).find((summary) => summary.evaluation_id === evalId) ?? null
844
  }
 
4
  import path from "path"
5
 
6
  import type {
7
+ BenchmarkCard,
8
  BenchmarkEvaluation,
9
  EvalLibrary,
10
  EvaluationResult,
 
16
  SourceMetadata,
17
  } from "@/lib/benchmark-schema"
18
  import { inferCategoryFromBenchmark } from "@/lib/benchmark-schema"
19
+ import { lookupBenchmarkCard } from "@/lib/benchmark-metadata-utils"
20
  import {
21
  type BenchmarkEvalListItem,
22
+ type BenchmarkEvalSummary,
23
+ type ModelResultForBenchmark,
24
  createEvaluationCard,
25
  createModelFamilySummary,
26
  groupEvaluationsByBenchmark,
 
29
  toBenchmarkEvalListItem,
30
  } from "@/lib/eval-processing"
31
  import { getCanonicalModelIdentity, getModelFamilyRouteId, normalizeModelInfo } from "@/lib/model-family"
32
+ import { getBenchmarkCard, normalizeBenchmarkKey } from "@/lib/benchmark-metadata"
33
 
34
  interface RawModelFile {
35
  model_info: ModelInfo
 
53
  evaluation_timestamp?: string
54
  }
55
 
56
+ function getSourceDataSignature(sourceData?: string[] | SourceData) {
57
+ if (!sourceData) {
58
+ return ""
59
+ }
60
+
61
+ if (Array.isArray(sourceData)) {
62
+ return sourceData.join("|")
63
+ }
64
+
65
+ return [
66
+ sourceData.dataset_name,
67
+ sourceData.source_type,
68
+ sourceData.hf_repo,
69
+ sourceData.external_link,
70
+ ]
71
+ .filter(Boolean)
72
+ .join("|")
73
+ }
74
+
75
+ function getRawEvaluationResultKey(result: RawEvaluationResult) {
76
+ return [result.evaluation_name.trim().toLowerCase(), getSourceDataSignature(result.source_data)].join("::")
77
+ }
78
+
79
+ function mergeRawEvaluationResults(results: RawEvaluationResult[]) {
80
+ const merged = new Map<string, RawEvaluationResult>()
81
+
82
+ for (const result of results) {
83
+ merged.set(getRawEvaluationResultKey(result), result)
84
+ }
85
+
86
+ return Array.from(merged.values())
87
+ }
88
+
89
+ function getRawEvaluationKey(evaluation: RawEvaluation) {
90
+ return [
91
+ evaluation.evaluation_id,
92
+ evaluation.retrieved_timestamp,
93
+ evaluation.benchmark,
94
+ evaluation.source_metadata.source_name,
95
+ evaluation.source_metadata.source_type,
96
+ evaluation.source_metadata.source_organization_name,
97
+ evaluation.source_metadata.evaluator_relationship,
98
+ ]
99
+ .filter(Boolean)
100
+ .join("::")
101
+ }
102
+
103
+ function dedupeRawEvaluations(evaluations: RawEvaluation[]) {
104
+ const merged = new Map<string, RawEvaluation>()
105
+
106
+ for (const evaluation of evaluations) {
107
+ const key = getRawEvaluationKey(evaluation)
108
+ const existing = merged.get(key)
109
+
110
+ if (!existing) {
111
+ merged.set(key, {
112
+ ...evaluation,
113
+ evaluation_results: mergeRawEvaluationResults(evaluation.evaluation_results),
114
+ })
115
+ continue
116
+ }
117
+
118
+ merged.set(key, {
119
+ ...existing,
120
+ ...evaluation,
121
+ source_data: evaluation.source_data ?? existing.source_data,
122
+ eval_library: evaluation.eval_library ?? existing.eval_library,
123
+ detailed_evaluation_results:
124
+ evaluation.detailed_evaluation_results ?? existing.detailed_evaluation_results,
125
+ generation_config: evaluation.generation_config ?? existing.generation_config,
126
+ evaluation_results: mergeRawEvaluationResults([
127
+ ...existing.evaluation_results,
128
+ ...evaluation.evaluation_results,
129
+ ]),
130
+ })
131
+ }
132
+
133
+ return Array.from(merged.values())
134
+ }
135
+
136
  interface IndexedModelSummary {
137
  id: string
138
  name: string
 
147
  }
148
 
149
  interface IndexedBenchmarkDetail {
150
+ benchmark_cards?: Record<string, BenchmarkCard>
151
  models: Array<{
152
  model_id: string
153
  name: string
 
340
  return value.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_|_$/g, "")
341
  }
342
 
343
+ function getAggregateEvalId(value: string) {
344
+ return `aggregate__${slugifyEvalId(value)}`
345
+ }
346
+
347
+ function normalizeEvalTimestamp(value: string) {
348
+ const numericTimestamp = Number(value)
349
+ return !Number.isNaN(numericTimestamp) && !value.includes("-")
350
+ ? numericTimestamp * 1000
351
+ : new Date(value).getTime()
352
+ }
353
+
354
+ function normalizeSummaryScore(summary: BenchmarkEvalSummary, score: number) {
355
+ const maxScore = summary.metric_config.max_score ?? 1
356
+ const minScore = summary.metric_config.min_score ?? 0
357
+ const range = maxScore - minScore
358
+ return range > 0 ? (score - minScore) / range : score
359
+ }
360
+
361
+ async function attachBenchmarkCardToSummary(summary: BenchmarkEvalSummary): Promise<BenchmarkEvalSummary> {
362
+ if (summary.benchmark_card) {
363
+ return summary
364
+ }
365
+
366
+ const cardCandidates = [
367
+ summary.evaluation_name,
368
+ summary.composite_benchmark_name,
369
+ summary.composite_benchmark_key,
370
+ ]
371
+
372
+ for (const candidate of cardCandidates) {
373
+ const card = await getBenchmarkCard(candidate)
374
+ if (card) {
375
+ return { ...summary, benchmark_card: card }
376
+ }
377
+ }
378
+
379
+ return summary
380
+ }
381
+
382
+ function aggregateBenchmarkSummaries(
383
+ summaries: BenchmarkEvalSummary[],
384
+ aggregationKey: string
385
+ ): BenchmarkEvalSummary | null {
386
+ if (summaries.length === 0) {
387
+ return null
388
+ }
389
+
390
+ const first = summaries[0]
391
+ const card = first.benchmark_card
392
+ const aggregateSources = Array.from(
393
+ new Map(
394
+ summaries.map((summary) => [
395
+ summary.evaluation_id,
396
+ {
397
+ evaluation_id: summary.evaluation_id,
398
+ composite_benchmark_key: summary.composite_benchmark_key,
399
+ composite_benchmark_name: summary.composite_benchmark_name,
400
+ models_count: summary.models_count,
401
+ avg_score_norm: summary.avg_score_norm,
402
+ },
403
+ ])
404
+ ).values()
405
+ ).sort((a, b) => a.composite_benchmark_name.localeCompare(b.composite_benchmark_name))
406
+
407
+ const modelBuckets = new Map<
408
+ string,
409
+ {
410
+ model_info: ModelResultForBenchmark["model_info"]
411
+ components: Array<{
412
+ summary: BenchmarkEvalSummary
413
+ modelResult: ModelResultForBenchmark
414
+ }>
415
+ }
416
+ >()
417
+
418
+ for (const summary of summaries) {
419
+ for (const modelResult of summary.model_results) {
420
+ const existing = modelBuckets.get(modelResult.model_info.id) ?? {
421
+ model_info: modelResult.model_info,
422
+ components: [],
423
+ }
424
+ existing.components.push({ summary, modelResult })
425
+ modelBuckets.set(modelResult.model_info.id, existing)
426
+ }
427
+ }
428
+
429
+ const aggregateMetricConfig = {
430
+ ...first.metric_config,
431
+ evaluation_description:
432
+ aggregateSources.length > 1
433
+ ? `Average normalized score across ${aggregateSources
434
+ .map((source) => source.composite_benchmark_name)
435
+ .join(", ")}`
436
+ : first.metric_config.evaluation_description,
437
+ min_score: 0,
438
+ max_score: 1,
439
+ unit: "normalized average",
440
+ } as const
441
+
442
+ const aggregatedModelResults: ModelResultForBenchmark[] = Array.from(modelBuckets.values()).map(
443
+ ({ model_info, components }) => {
444
+ const normalizedScores = components.map(({ summary, modelResult }) =>
445
+ normalizeSummaryScore(summary, modelResult.score)
446
+ )
447
+ const avgNormalizedScore =
448
+ normalizedScores.reduce((sum, score) => sum + score, 0) / normalizedScores.length
449
+
450
+ const latestComponent = [...components].sort(
451
+ (a, b) =>
452
+ normalizeEvalTimestamp(b.modelResult.evaluation_timestamp) -
453
+ normalizeEvalTimestamp(a.modelResult.evaluation_timestamp)
454
+ )[0]
455
+
456
+ const aggregateComponents = components
457
+ .map(({ summary, modelResult }) => ({
458
+ evaluation_id: summary.evaluation_id,
459
+ composite_benchmark_key: summary.composite_benchmark_key,
460
+ composite_benchmark_name: summary.composite_benchmark_name,
461
+ score: modelResult.score,
462
+ normalized_score: normalizeSummaryScore(summary, modelResult.score),
463
+ evaluation_timestamp: modelResult.evaluation_timestamp,
464
+ source_name: modelResult.source_metadata.source_name,
465
+ source_type: modelResult.source_metadata.source_type,
466
+ source_organization_name: modelResult.source_metadata.source_organization_name,
467
+ evaluator_relationship: modelResult.source_metadata.evaluator_relationship,
468
+ }))
469
+ .sort((a, b) => a.composite_benchmark_name.localeCompare(b.composite_benchmark_name))
470
+
471
+ return {
472
+ model_info,
473
+ score: avgNormalizedScore,
474
+ score_details: {
475
+ score: avgNormalizedScore,
476
+ sample_size: components.reduce(
477
+ (sum, { modelResult }) => sum + (modelResult.score_details.sample_size ?? 0),
478
+ 0
479
+ ) || undefined,
480
+ },
481
+ evaluation_timestamp: latestComponent.modelResult.evaluation_timestamp,
482
+ source_metadata: latestComponent.modelResult.source_metadata,
483
+ source_data: latestComponent.modelResult.source_data,
484
+ result: {
485
+ ...latestComponent.modelResult.result,
486
+ evaluation_name: card?.benchmark_details?.name ?? first.evaluation_name,
487
+ metric_config: aggregateMetricConfig,
488
+ score_details: {
489
+ score: avgNormalizedScore,
490
+ },
491
+ },
492
+ aggregate_components: aggregateComponents,
493
+ }
494
+ }
495
+ )
496
+
497
+ const lowerIsBetter = first.metric_config.lower_is_better
498
+ aggregatedModelResults.sort((a, b) => (lowerIsBetter ? a.score - b.score : b.score - a.score))
499
+
500
+ const avgScore =
501
+ aggregatedModelResults.reduce((sum, modelResult) => sum + modelResult.score, 0) /
502
+ aggregatedModelResults.length
503
+
504
+ const evaluatorNames = Array.from(
505
+ new Set(summaries.flatMap((summary) => summary.evaluator_names))
506
+ ).sort((a, b) => a.localeCompare(b))
507
+
508
+ const sourceTypes = Array.from(
509
+ new Set(summaries.flatMap((summary) => summary.source_types))
510
+ ).sort((a, b) => a.localeCompare(b))
511
+
512
+ const totalUnderlyingResults = summaries.reduce((sum, summary) => sum + summary.model_results.length, 0)
513
+ const totalThirdPartyResults = summaries.reduce(
514
+ (sum, summary) => sum + summary.model_results.filter((result) => result.source_metadata.evaluator_relationship === "third_party").length,
515
+ 0
516
+ )
517
+
518
+ return {
519
+ evaluation_name: card?.benchmark_details?.name ?? first.evaluation_name,
520
+ evaluation_id: getAggregateEvalId(aggregationKey),
521
+ composite_benchmark_key:
522
+ aggregateSources.length === 1 ? aggregateSources[0].composite_benchmark_key : "multiple",
523
+ composite_benchmark_name:
524
+ aggregateSources.length === 1
525
+ ? aggregateSources[0].composite_benchmark_name
526
+ : `${aggregateSources.length} composite benchmarks`,
527
+ category: first.category,
528
+ metric_config: aggregateMetricConfig,
529
+ factsheet: first.factsheet,
530
+ model_results: aggregatedModelResults,
531
+ models_count: aggregatedModelResults.length,
532
+ evaluator_names: evaluatorNames,
533
+ source_types: sourceTypes,
534
+ latest_source_name:
535
+ aggregateSources.length === 1 ? aggregateSources[0].composite_benchmark_name : "Multiple sources",
536
+ third_party_ratio: totalUnderlyingResults > 0 ? totalThirdPartyResults / totalUnderlyingResults : 0,
537
+ missing_generation_config_count: summaries.reduce(
538
+ (sum, summary) => sum + summary.missing_generation_config_count,
539
+ 0
540
+ ),
541
+ best_model:
542
+ aggregatedModelResults.length > 0
543
+ ? { name: aggregatedModelResults[0].model_info.name, score: aggregatedModelResults[0].score }
544
+ : null,
545
+ worst_model:
546
+ aggregatedModelResults.length > 0
547
+ ? {
548
+ name: aggregatedModelResults[aggregatedModelResults.length - 1].model_info.name,
549
+ score: aggregatedModelResults[aggregatedModelResults.length - 1].score,
550
+ }
551
+ : null,
552
+ avg_score: avgScore,
553
+ avg_score_norm: avgScore,
554
+ benchmark_card: card,
555
+ is_aggregated: true,
556
+ aggregate_sources: aggregateSources,
557
+ }
558
+ }
559
+
560
  function inferMetricConfig(scores: number[], benchmark: string, metric: string): MetricConfig {
561
  const finiteScores = scores.filter((score) => Number.isFinite(score))
562
  const maxScore = finiteScores.length > 0 ? Math.max(...finiteScores) : 1
 
646
  worst_model: null,
647
  avg_score: avgScore,
648
  avg_score_norm: range > 0 ? (avgScore - minScore) / range : 0,
649
+ benchmark_card: lookupBenchmarkCard(detail.benchmark_cards ?? {}, metric),
650
  })
651
  }
652
  }
 
724
  continue
725
  }
726
 
727
+ return dedupeRawEvaluations(raw.evaluations).map((evaluation) =>
728
  normalizeEvaluation(raw.model_info, evaluation)
729
  )
730
  }
 
895
  return []
896
  }
897
 
898
+ return dedupeRawEvaluations(raw.evaluations).map((evaluation) =>
899
  normalizeEvaluation(raw.model_info, evaluation)
900
  )
901
  } catch (error) {
 
934
 
935
  export async function getEvalListData() {
936
  const indexed = await buildEvalListDataFromBenchmarkIndexes()
937
+
938
  if (indexed) {
939
  return indexed
940
  }
 
943
  const summaries = Object.values(groupEvaluationsByBenchmark(evaluations))
944
  const totalModels = Object.keys(groupEvaluationsByModelFamily(evaluations)).length
945
 
946
+ // Attach benchmark_card to each summary
947
+ const evalsWithCards = await Promise.all(
948
+ summaries.map(async (summary) => {
949
+ const card = await getBenchmarkCard(summary.composite_benchmark_key)
950
+ const listItem = toBenchmarkEvalListItem(summary)
951
+ return card ? { ...listItem, benchmark_card: card } : listItem
952
+ })
953
+ )
954
+
955
+ return { evals: evalsWithCards, totalModels }
956
  }
957
 
958
  export async function getEvalList() {
 
1069
  benchmark_scores: Object.fromEntries(
1070
  items.flatMap((evaluation) =>
1071
  evaluation.evaluation_results
1072
+ .flatMap((result) => {
1073
  const score = result.score_details?.score
1074
  if (!Number.isFinite(score)) {
1075
+ return []
1076
  }
1077
 
1078
  const benchmarkName =
 
1080
  ? result.source_data.dataset_name
1081
  : evaluation.benchmark ?? result.evaluation_name
1082
 
1083
+ return [[`${benchmarkName}/${result.evaluation_name}`, score] as const]
1084
  })
 
1085
  ),
1086
  ),
1087
  }))
 
1149
  export async function getEvalSummaryById(evalId: string) {
1150
  const evaluations = await loadAllEvaluationsFromDataDirectory()
1151
  const grouped = groupEvaluationsByBenchmark(evaluations)
1152
+ const summariesWithCards = await Promise.all(
1153
+ Object.values(grouped).map((summary) => attachBenchmarkCardToSummary(summary))
1154
+ )
1155
+
1156
+ if (evalId.startsWith("aggregate__")) {
1157
+ const aggregateKey = evalId.replace(/^aggregate__/, "")
1158
+ const aggregateMembers = summariesWithCards.filter((summary) => {
1159
+ const cardName = summary.benchmark_card?.benchmark_details?.name
1160
+ return cardName ? slugifyEvalId(normalizeBenchmarkKey(cardName)) === aggregateKey : false
1161
+ })
1162
+
1163
+ return aggregateBenchmarkSummaries(aggregateMembers, aggregateKey)
1164
+ }
1165
+
1166
+ const summary = summariesWithCards.find((item) => item.evaluation_id === evalId) ?? null
1167
+
1168
+ if (!summary) return null
1169
 
1170
+ return summary
1171
  }
metadata/benchmark_card_BoolQ.json ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "BoolQ",
5
+ "overview": "BoolQ is a benchmark that measures a model's ability to answer naturally occurring yes/no questions, framed as a reading comprehension task. The questions are generated in unprompted and unconstrained settings, often querying complex, non-factoid information and requiring difficult entailment-like inference. The dataset consists of a single task: answering yes/no questions given a supporting passage.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "natural language understanding",
9
+ "reading comprehension",
10
+ "natural language inference"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "MultiNLI",
17
+ "SNLI",
18
+ "QNLI",
19
+ "SQuAD 2.0",
20
+ "Natural Questions (NQ)",
21
+ "QQP",
22
+ "MS MARCO",
23
+ "RACE",
24
+ "bAbI stories"
25
+ ],
26
+ "resources": [
27
+ "https://arxiv.org/abs/1905.10044",
28
+ "https://huggingface.co/datasets/google/boolq",
29
+ "https://goo.gl/boolq",
30
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
31
+ ]
32
+ },
33
+ "purpose_and_intended_users": {
34
+ "goal": "To test models on their ability to answer naturally occurring yes/no questions, which are challenging and require complex inferential abilities beyond surface-level reasoning.",
35
+ "audience": [
36
+ "Researchers in natural language understanding and reading comprehension"
37
+ ],
38
+ "tasks": [
39
+ "Yes/no question answering",
40
+ "Text-pair classification"
41
+ ],
42
+ "limitations": "Annotation involved some errors and ambiguous cases. The use of singly-annotated examples is a trade-off for dataset size. Potential concerns about annotation artifacts are acknowledged.",
43
+ "out_of_scope_uses": "The paper does not explicitly state what the benchmark is not designed for."
44
+ },
45
+ "data": {
46
+ "source": "The data consists of naturally occurring yes/no questions authored by people who were not prompted to write specific question types and did not know the answers. The passages are excerpts from sources like Wikipedia.",
47
+ "size": "15,942 examples total, with 9,427 in the train split and 3,270 in the validation split. The dataset size category is between 10,000 and 100,000 examples.",
48
+ "format": "parquet",
49
+ "annotation": "Questions were answered by human annotators. A quality check on a subset showed the main annotation process achieved 90% accuracy against a gold-standard set labeled by three authors. The training, development, and test sets use singly-annotated examples."
50
+ },
51
+ "methodology": {
52
+ "methods": [
53
+ "Models are evaluated by fine-tuning on the BoolQ training set, potentially after transfer learning from other datasets or unsupervised pre-training. Zero-shot or direct use of pre-trained models without fine-tuning did not outperform the majority baseline.",
54
+ "The task requires providing a yes/no (boolean) answer to a question based on a given passage."
55
+ ],
56
+ "metrics": [
57
+ "Accuracy"
58
+ ],
59
+ "calculation": "The overall score is the accuracy percentage on the test set.",
60
+ "interpretation": "Higher accuracy indicates better performance. Human accuracy is 90%, and the majority baseline is approximately 62%.",
61
+ "baseline_results": "Paper baselines: Majority baseline: 62.17% dev, 62.31% test; Recurrent model baseline: 69.6%; Best model (BERT large pre-trained on MultiNLI then fine-tuned on BoolQ): 80.4% accuracy; Human accuracy: 90%. EEE results: Anthropic-LM v4-s3 52B: 81.5%.",
62
+ "validation": "Quality assurance involved author-led gold-standard annotation on a subset, showing 90% agreement. The development set was used for model selection, such as choosing the best model from five seeds based on its performance."
63
+ },
64
+ "ethical_and_legal_considerations": {
65
+ "privacy_and_anonymity": "Not specified",
66
+ "data_licensing": "cc-by-sa-3.0",
67
+ "consent_procedures": "Not specified",
68
+ "compliance_with_regulations": "Not specified"
69
+ },
70
+ "possible_risks": [
71
+ {
72
+ "category": "Over- or under-reliance",
73
+ "description": [
74
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
75
+ ],
76
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
77
+ },
78
+ {
79
+ "category": "Unrepresentative data",
80
+ "description": [
81
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
82
+ ],
83
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
84
+ },
85
+ {
86
+ "category": "Uncertain data provenance",
87
+ "description": [
88
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
89
+ ],
90
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
91
+ },
92
+ {
93
+ "category": "Data bias",
94
+ "description": [
95
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
96
+ ],
97
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
98
+ },
99
+ {
100
+ "category": "Lack of data transparency",
101
+ "description": [
102
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
103
+ ],
104
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
105
+ }
106
+ ],
107
+ "flagged_fields": {},
108
+ "missing_fields": [
109
+ "ethical_and_legal_considerations.privacy_and_anonymity",
110
+ "ethical_and_legal_considerations.consent_procedures",
111
+ "ethical_and_legal_considerations.compliance_with_regulations"
112
+ ],
113
+ "card_info": {
114
+ "created_at": "2026-03-17T15:08:51.830946",
115
+ "llm": "deepseek-ai/DeepSeek-V3.2"
116
+ }
117
+ }
118
+ }
metadata/benchmark_card_CNN_DailyMail.json ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "CNN/DailyMail",
5
+ "overview": "CNN/DailyMail is a benchmark for evaluating abstractive and extractive summarization models using news articles. It contains over 300,000 unique articles written by journalists from CNN and the Daily Mail. The dataset was originally created for machine reading and question answering, but later versions were restructured specifically for summarization tasks.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "summarization",
9
+ "journalism",
10
+ "news media"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": "No facts provided about similar benchmarks.",
16
+ "resources": [
17
+ "https://huggingface.co/datasets/abisee/cnn_dailymail",
18
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
19
+ ]
20
+ },
21
+ "purpose_and_intended_users": {
22
+ "goal": "To help develop models that can summarize long paragraphs of text into one or two sentences, aiding in the efficient presentation of information from large quantities of text.",
23
+ "audience": [
24
+ "NLP researchers",
25
+ "Summarization model developers"
26
+ ],
27
+ "tasks": [
28
+ "Summarization"
29
+ ],
30
+ "limitations": "News articles often place important information in the first third, which may affect summarization. A manual study found 25% of samples in an earlier version were difficult for humans due to ambiguity and coreference errors. Also, machine-generated summaries may differ in truth values from the original articles.",
31
+ "out_of_scope_uses": "No facts provided about out-of-scope uses."
32
+ },
33
+ "data": {
34
+ "source": "The dataset consists of news articles and highlight sentences written by journalists at CNN and the Daily Mail. The CNN articles were collected from April 2007 to April 2015, and the Daily Mail articles from June 2010 to April 2015, sourced from archives on the Wayback Machine.",
35
+ "size": "Over 300,000 unique articles, with 287,113 training examples, 13,368 validation examples, and 11,490 test examples.",
36
+ "format": "parquet",
37
+ "annotation": "The dataset does not contain additional annotations. The highlights are the original summaries written by the article authors and are used as the target for summarization."
38
+ },
39
+ "methodology": {
40
+ "methods": [
41
+ "Models generate a summary for a given news article, which is then compared to the author-written highlights."
42
+ ],
43
+ "metrics": [
44
+ "ROUGE-2"
45
+ ],
46
+ "calculation": "The ROUGE-2 score measures the overlap of bigrams between the generated summary and the reference highlights.",
47
+ "interpretation": "Higher scores indicate better performance, as they reflect greater overlap with the reference summaries.",
48
+ "baseline_results": "Paper baseline (Zhong et al., 2020): ROUGE-1 score of 44.41 for an extractive summarization model. Evaluation suite result (Anthropic-LM v4-s3 52B): ROUGE-2 score of 0.154.",
49
+ "validation": "No facts provided about validation procedures."
50
+ },
51
+ "ethical_and_legal_considerations": {
52
+ "privacy_and_anonymity": "The dataset (version 3.0.0) is not anonymized, meaning individuals' names are present in the text.",
53
+ "data_licensing": "Apache License 2.0",
54
+ "consent_procedures": "Not specified",
55
+ "compliance_with_regulations": "Not specified"
56
+ },
57
+ "possible_risks": [
58
+ {
59
+ "category": "Over- or under-reliance",
60
+ "description": [
61
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
62
+ ],
63
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
64
+ },
65
+ {
66
+ "category": "Unrepresentative data",
67
+ "description": [
68
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
69
+ ],
70
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
71
+ },
72
+ {
73
+ "category": "Data bias",
74
+ "description": [
75
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
76
+ ],
77
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
78
+ },
79
+ {
80
+ "category": "Data contamination",
81
+ "description": [
82
+ "Data contamination occurs when incorrect data is used for training. For example, data that is not aligned with model's purpose or data that is already set aside for other development tasks such as testing and evaluation."
83
+ ],
84
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-contamination.html"
85
+ },
86
+ {
87
+ "category": "Lack of data transparency",
88
+ "description": [
89
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
90
+ ],
91
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
92
+ }
93
+ ],
94
+ "flagged_fields": {},
95
+ "missing_fields": [
96
+ "ethical_and_legal_considerations.consent_procedures",
97
+ "ethical_and_legal_considerations.compliance_with_regulations"
98
+ ],
99
+ "card_info": {
100
+ "created_at": "2026-03-17T15:15:47.316103",
101
+ "llm": "deepseek-ai/DeepSeek-V3.2"
102
+ }
103
+ }
104
+ }
metadata/benchmark_card_CivilComments.json ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "CivilComments",
5
+ "overview": "CivilComments is a benchmark designed to measure unintended identity-based bias in toxicity classification models. It uses a large, real-world dataset of online comments from the Civil Comments platform, extended with crowd-sourced annotations for toxicity and demographic identity references. This provides a nuanced evaluation of bias beyond synthetic datasets.",
6
+ "data_type": "tabular, text",
7
+ "domains": [
8
+ "machine learning fairness",
9
+ "bias measurement",
10
+ "toxic comment classification",
11
+ "text classification"
12
+ ],
13
+ "languages": [
14
+ "English"
15
+ ],
16
+ "similar_benchmarks": "The paper does not name other specific benchmark datasets, only referencing prior work using synthetic test sets.",
17
+ "resources": [
18
+ "https://arxiv.org/abs/1903.04561",
19
+ "https://huggingface.co/datasets/google/civil_comments",
20
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
21
+ ]
22
+ },
23
+ "purpose_and_intended_users": {
24
+ "goal": "To evaluate unintended identity-based bias in toxicity classification models using real data and nuanced metrics.",
25
+ "audience": [
26
+ "Machine learning researchers and practitioners working on fairness, bias measurement, and mitigation, particularly in toxic comment classification."
27
+ ],
28
+ "tasks": [
29
+ "Binary toxicity classification (toxic vs. non-toxic)",
30
+ "Analysis of performance across identity subgroups"
31
+ ],
32
+ "limitations": "The labeled set of identities is not comprehensive and does not provide universal coverage, representing a balance between coverage, annotator accuracy, and example count. The real-world data is potentially noisier than synthetic alternatives.",
33
+ "out_of_scope_uses": [
34
+ "Developing effective strategies for choosing optimal thresholds to minimize bias"
35
+ ]
36
+ },
37
+ "data": {
38
+ "source": "The data consists of online comments sourced from the Civil Comments platform, a commenting plugin for independent English-language news sites. The comments were publicly posted between 2015 and 2017.",
39
+ "size": "The dataset contains approximately 1.8 million comments for training, with separate validation and test sets of approximately 97,320 examples each. All comments were labeled for toxicity, and a subset of 450,000 comments was additionally labeled for identity references.",
40
+ "format": "parquet",
41
+ "annotation": "Labeling was performed by crowd raters. Toxicity labels were applied using guidelines consistent with the Perspective API. For the identity-labeled subset, raters were shown comments and selected referenced identities (e.g., genders, races, ethnicities) from a provided list. Some comments for identity labeling were pre-selected by models to increase the frequency of identity content."
42
+ },
43
+ "methodology": {
44
+ "methods": [
45
+ "Models are evaluated by applying a suite of bias metrics to their predictions on the test set. The original paper demonstrates this using publicly accessible toxicity classifiers on the dataset."
46
+ ],
47
+ "metrics": [
48
+ "Subgroup AUC",
49
+ "BPSN AUC",
50
+ "BNSP AUC",
51
+ "Negative Average Equality Gap (AEG)",
52
+ "Positive Average Equality Gap (AEG)"
53
+ ],
54
+ "calculation": "The evaluation calculates five metrics for each identity subgroup to provide a multi-faceted view of bias. There is no single aggregated overall score.",
55
+ "interpretation": "For the AUC metrics (Subgroup, BPSN, BNSP), higher values indicate better separability (fewer mis-orderings). For the Average Equality Gaps (Negative and Positive), lower values indicate better separability (more similar score distributions).",
56
+ "baseline_results": "Paper baselines: Results for TOXICITY@1 and TOXICITY@6 from the Perspective API are reported, showing their Subgroup AUC, BPSN AUC, BNSP AUC, Negative AEG, and Positive AEG on a synthetic dataset for the lowest performing 20 subgroups. They are also compared on short comments within the human-labeled dataset for specific identities. EEE results: Anthropic-LM v4-s3 52B scored 0.6100 on the CivilComments metric.",
57
+ "validation": "The evaluation assumes the human-provided labels are reliable. The identity labeling set was designed to balance coverage, crowd rater accuracy, and ensure sufficient examples per identity for meaningful results."
58
+ },
59
+ "ethical_and_legal_considerations": {
60
+ "privacy_and_anonymity": "The paper does not discuss how personally identifiable information (PII) in the online comments was handled or if data was anonymized.",
61
+ "data_licensing": "Creative Commons Zero v1.0 Universal",
62
+ "consent_procedures": "The paper does not describe compensation for crowdworkers or the specific platform used for annotation.",
63
+ "compliance_with_regulations": "The paper does not mention IRB approval, GDPR compliance, or any other ethical review process."
64
+ },
65
+ "possible_risks": [
66
+ {
67
+ "category": "Unrepresentative data",
68
+ "description": [
69
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
70
+ ],
71
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
72
+ },
73
+ {
74
+ "category": "Uncertain data provenance",
75
+ "description": [
76
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
77
+ ],
78
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
79
+ },
80
+ {
81
+ "category": "Data bias",
82
+ "description": [
83
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
84
+ ],
85
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
86
+ },
87
+ {
88
+ "category": "Lack of data transparency",
89
+ "description": [
90
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
91
+ ],
92
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
93
+ },
94
+ {
95
+ "category": "Output bias",
96
+ "description": [
97
+ "Generated content might unfairly represent certain groups or individuals."
98
+ ],
99
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/output-bias.html"
100
+ }
101
+ ],
102
+ "flagged_fields": {},
103
+ "missing_fields": [],
104
+ "card_info": {
105
+ "created_at": "2026-03-17T12:38:43.250822",
106
+ "llm": "deepseek-ai/DeepSeek-V3.2"
107
+ }
108
+ }
109
+ }
metadata/benchmark_card_GPQA.json ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "GPQA",
5
+ "overview": "GPQA (Graduate-Level Google-Proof Q&A Benchmark) is a text-based benchmark that measures the ability to answer extremely difficult, expert-level multiple-choice questions. It contains 448 questions designed to be 'Google-proof,' meaning they are hard to solve even with unrestricted web access. Its distinctiveness lies in its high difficulty for both highly skilled non-experts and state-of-the-art AI, making it suitable for scalable oversight experiments.",
6
+ "data_type": "tabular, text",
7
+ "domains": [
8
+ "biology",
9
+ "physics",
10
+ "chemistry",
11
+ "open domain qa",
12
+ "open book qa",
13
+ "multiple choice qa"
14
+ ],
15
+ "languages": [
16
+ "English"
17
+ ],
18
+ "similar_benchmarks": [
19
+ "DROP",
20
+ "Massive Multitask Language Understanding (MMLU)"
21
+ ],
22
+ "resources": [
23
+ "https://arxiv.org/abs/2311.12022",
24
+ "https://huggingface.co/datasets/Idavidrein/gpqa",
25
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
26
+ ]
27
+ },
28
+ "purpose_and_intended_users": {
29
+ "goal": "To create a testbed for scalable oversight, enabling the study of methods for humans to reliably supervise and extract truthful information from AI systems on questions that are very difficult for non-experts to answer or verify. It can also be used for general large language model capabilities benchmarking.",
30
+ "audience": [
31
+ "Researchers studying scalable oversight and AI alignment",
32
+ "Researchers interested in supervising AI systems that may surpass human capabilities in specialized domains"
33
+ ],
34
+ "tasks": [
35
+ "Multiple-choice question answering",
36
+ "Question answering",
37
+ "Text generation"
38
+ ],
39
+ "limitations": "The dataset is small, with 448 examples in the main set. There is a need for scalable oversight methods to overcome existing cognitive or ethical biases supervisors might have.",
40
+ "out_of_scope_uses": [
41
+ "Tasks where non-experts can easily find the answer using web search, as the questions are intended to be 'Google-proof'"
42
+ ]
43
+ },
44
+ "data": {
45
+ "source": "The questions were written and validated by domain experts with or pursuing PhDs in biology, physics, and chemistry, using an annotation pipeline where experts wrote questions and explanations and received detailed feedback from other experts.",
46
+ "size": "The main set contains 448 multiple-choice questions, with an extended set of 546 questions also mentioned. The dataset falls within the 1K<n<10K size category. The paper does not specify train, development, or test splits.",
47
+ "format": "The data is provided in CSV format and consists of multiple-choice questions, each with four answer choices, explanations, and references.",
48
+ "annotation": "Domain experts wrote the questions and explanations. Other expert validators provided feedback and 4-point difficulty ratings. Quality was assessed by comparing a sample to author-created 'gold-standard' labels, achieving 90% accuracy. Validation also involved experts from outside a question's domain attempting them with web access, which confirmed the questions' difficulty through low accuracy scores."
49
+ },
50
+ "methodology": {
51
+ "methods": [
52
+ "Models are evaluated in both closed-book (no runtime access to external information) and open-book (with access to an internet search tool) settings.",
53
+ "Prompting methods include zero-shot, few-shot, zero-shot chain-of-thought, and few-shot chain-of-thought."
54
+ ],
55
+ "metrics": [
56
+ "Accuracy (percentage of correct answers)"
57
+ ],
58
+ "calculation": "The overall score is the accuracy across the question set. Results are reported separately for the main set, extended set, and a 'Diamond Set'.",
59
+ "interpretation": "Higher accuracy indicates better performance. Expert human performance is benchmarked at 65% overall accuracy (or 74% when discounting clear mistakes). Non-expert human performance is 34%.",
60
+ "baseline_results": "PAPER baselines: On the main set, GPT-4 with few-shot chain-of-thought achieved 39.7% accuracy; GPT-4 with search achieved 41.0%; GPT-3.5-turbo-16k (zero-shot) achieved 29.8%; Llama-2-70B-chat (few-shot chain-of-thought) achieved 29.1%. Human expert accuracy was 65%, and non-expert accuracy was 34%. EEE results: YiSM-blossom5.1-34B-SLERP achieved 0.3557; OLMo 2 32B Instruct March 2025 achieved 0.2870.",
61
+ "validation": "Quality assurance involved expert validation and feedback. Gold-standard labels were created for a sample of 110 questions, achieving 90% annotator agreement. Expert validators also rated question difficulty."
62
+ },
63
+ "ethical_and_legal_considerations": {
64
+ "privacy_and_anonymity": "The dataset includes a canary string to aid in filtering it from training data, and distribution requires users to agree not to reveal examples in plain text or images online to prevent data leakage. No specific anonymization of the question content is described.",
65
+ "data_licensing": "Creative Commons Attribution 4.0",
66
+ "consent_procedures": "Non-expert validators were compensated with large bonuses for effort. The use of contractors is mentioned, but the specific platform and detailed compensation procedures for experts are not specified.",
67
+ "compliance_with_regulations": "No information is provided regarding IRB approval, GDPR compliance, or other ethical review."
68
+ },
69
+ "possible_risks": [
70
+ {
71
+ "category": "Over- or under-reliance",
72
+ "description": [
73
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
74
+ ],
75
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
76
+ },
77
+ {
78
+ "category": "Unrepresentative data",
79
+ "description": [
80
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
81
+ ],
82
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
83
+ },
84
+ {
85
+ "category": "Data bias",
86
+ "description": [
87
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
88
+ ],
89
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
90
+ },
91
+ {
92
+ "category": "Lack of data transparency",
93
+ "description": [
94
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
95
+ ],
96
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
97
+ },
98
+ {
99
+ "category": "Improper usage",
100
+ "description": [
101
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
102
+ ],
103
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
104
+ }
105
+ ],
106
+ "flagged_fields": {
107
+ "methodology.metrics": "[Factuality Score: 0.09], low factual alignment with source material",
108
+ "methodology.calculation": "[Possible Hallucination], no supporting evidence found in source material",
109
+ "methodology.baseline_results": "[Possible Hallucination], no supporting evidence found in source material",
110
+ "methodology.validation": "[Possible Hallucination], no supporting evidence found in source material"
111
+ },
112
+ "missing_fields": [],
113
+ "card_info": {
114
+ "created_at": "2026-03-17T15:27:14.197081",
115
+ "llm": "deepseek-ai/DeepSeek-V3.2"
116
+ }
117
+ }
118
+ }
metadata/benchmark_card_GSM8K.json ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "GSM8K",
5
+ "overview": "GSM8K is a benchmark that measures the ability of language models to perform multi-step mathematical reasoning. It consists of 8.5K high-quality, linguistically diverse grade school math word problems. The problems are distinctive because they require 2 to 8 steps to solve using basic arithmetic, and even the largest transformer models struggle to achieve high test performance on them. Solutions are provided in natural language with step-by-step reasoning.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "grade school mathematics",
9
+ "math word problems"
10
+ ],
11
+ "languages": [
12
+ "English"
13
+ ],
14
+ "similar_benchmarks": [
15
+ "Not specified"
16
+ ],
17
+ "resources": [
18
+ "https://arxiv.org/abs/2110.14168",
19
+ "https://huggingface.co/datasets/openai/gsm8k",
20
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
21
+ ]
22
+ },
23
+ "purpose_and_intended_users": {
24
+ "goal": "To diagnose the failures of current language models in robust multi-step mathematical reasoning and to support research, particularly in methods like training verifiers to judge solution correctness. It also aims to shed light on the properties of large language models' reasoning processes.",
25
+ "audience": [
26
+ "Researchers working on language model capabilities and mathematical reasoning"
27
+ ],
28
+ "tasks": [
29
+ "Solving grade school math word problems",
30
+ "Text generation for question answering"
31
+ ],
32
+ "limitations": "Even the largest models struggle with high test performance on this dataset, and autoregressive models have no mechanism to correct their own errors during solution generation.",
33
+ "out_of_scope_uses": [
34
+ "Not specified"
35
+ ]
36
+ },
37
+ "data": {
38
+ "source": "The dataset was created by hiring freelance contractors via Upwork and then scaled using the NLP data labeling platform Surge AI. Problems and solutions were written by these contractors.",
39
+ "size": "8.5K (8,500) problems, with a size category of 10K<n<100K. The training set contains 7,473 examples and the test set contains 1,319 examples.",
40
+ "format": "parquet. The data is structured with a 'Problem:' field followed by a 'Solution:' field, where the solution includes step-by-step reasoning with intermediate calculations in special tags (e.g., `<<4*2=8>>`) and ends with a 'Final Answer:'.",
41
+ "annotation": "Contractors wrote the problems and solutions. For verification, different workers re-solved all problems to check agreement with the original solutions; problematic problems were either repaired or discarded. The annotators were from Surge AI."
42
+ },
43
+ "methodology": {
44
+ "methods": [
45
+ "Models are evaluated by generating step-by-step solutions to math word problems. The dataset provides two answer formats: a standard step-by-step solution and a solution structured with Socratic sub-questions.",
46
+ "The paper proposes a verification method where a separate verifier model is trained to judge the correctness of generated solutions. At test time, multiple candidate solutions are generated, and the one ranked highest by the verifier is selected."
47
+ ],
48
+ "metrics": [
49
+ "GSM8K"
50
+ ],
51
+ "calculation": "The GSM8K metric is a continuous score where higher values are better. It is described as 'EM on GSM8K', indicating it measures exact match accuracy.",
52
+ "interpretation": "Higher scores indicate better performance. The score is not bounded, but typical model performance ranges from low to high, with the highest reported score being 75.2.",
53
+ "baseline_results": "Paper baselines: The paper notes that even the largest transformer models fail to achieve high test performance, but does not report specific scores. EEE results: Llama 3.1 8B Instruct scored 75.2, and Yi 34B scored 0.648 on GSM8K.",
54
+ "validation": "The paper provides empirical evidence that the verification method scales more effectively with data than a finetuning baseline and remains effective even with a verifier much smaller than the generator."
55
+ },
56
+ "ethical_and_legal_considerations": {
57
+ "privacy_and_anonymity": "Not specified",
58
+ "data_licensing": "MIT License",
59
+ "consent_procedures": "Not specified",
60
+ "compliance_with_regulations": "Not specified"
61
+ },
62
+ "possible_risks": [
63
+ {
64
+ "category": "Over- or under-reliance",
65
+ "description": [
66
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
67
+ ],
68
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
69
+ },
70
+ {
71
+ "category": "Data bias",
72
+ "description": [
73
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
74
+ ],
75
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
76
+ },
77
+ {
78
+ "category": "Reproducibility",
79
+ "description": [
80
+ "Replicating agent behavior or output can be impacted by changes or updates made to external services and tools. This impact is increased if the agent is built with generative AI."
81
+ ],
82
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/reproducibility-agentic.html"
83
+ },
84
+ {
85
+ "category": "Incomplete advice",
86
+ "description": [
87
+ "When a model provides advice without having enough information, resulting in possible harm if the advice is followed."
88
+ ],
89
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/incomplete-advice.html"
90
+ },
91
+ {
92
+ "category": "Improper usage",
93
+ "description": [
94
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
95
+ ],
96
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
97
+ }
98
+ ],
99
+ "flagged_fields": {},
100
+ "missing_fields": [
101
+ "benchmark_details.similar_benchmarks",
102
+ "purpose_and_intended_users.out_of_scope_uses",
103
+ "ethical_and_legal_considerations.privacy_and_anonymity",
104
+ "ethical_and_legal_considerations.consent_procedures",
105
+ "ethical_and_legal_considerations.compliance_with_regulations"
106
+ ],
107
+ "card_info": {
108
+ "created_at": "2026-03-17T15:37:16.459776",
109
+ "llm": "deepseek-ai/DeepSeek-V3.2"
110
+ }
111
+ }
112
+ }
metadata/benchmark_card_HellaSwag.json ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "HellaSwag",
5
+ "overview": "HellaSwag is a benchmark designed to measure commonsense natural language inference by testing a model's ability to select the most plausible follow-up event from four multiple-choice options. It is adversarially constructed to be challenging for state-of-the-art models, using a method called Adversarial Filtering to create difficult wrong answers that are obvious to humans but often misclassified by models.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "commonsense reasoning",
9
+ "natural language inference"
10
+ ],
11
+ "languages": [
12
+ "English"
13
+ ],
14
+ "similar_benchmarks": [
15
+ "SWAG",
16
+ "SNLI"
17
+ ],
18
+ "resources": [
19
+ "https://rowanzellers.com/hellaswag",
20
+ "https://arxiv.org/abs/1905.07830",
21
+ "https://huggingface.co/datasets/Rowan/hellaswag",
22
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
23
+ ]
24
+ },
25
+ "purpose_and_intended_users": {
26
+ "goal": "To create a challenge dataset that reveals the difficulty of commonsense inference for state-of-the-art models, demonstrating their lack of robustness and reliance on dataset biases rather than genuine reasoning. It aims to evaluate a model's ability to select the most plausible continuation of a given event description.",
27
+ "audience": [
28
+ "NLP researchers"
29
+ ],
30
+ "tasks": [
31
+ "Four-way multiple-choice selection for event continuation",
32
+ "Commonsense inference"
33
+ ],
34
+ "limitations": "The adversarial filtering process used to create the dataset, while effective at making it difficult for models, may also select examples where the ground truth answer is not the one preferred by human annotators, necessitating manual filtering to retain the best examples.",
35
+ "out_of_scope_uses": [
36
+ "Not specified"
37
+ ]
38
+ },
39
+ "data": {
40
+ "source": "Contexts are sourced from WikiHow instructional articles and ActivityNet video descriptions. Incorrect answer choices are generated by machines and then adversarially filtered.",
41
+ "size": "The dataset contains 70,000 examples in total, with 5,001 in-domain validation examples and 5,000 zero-shot validation examples. The training set comprises 39,905 examples.",
42
+ "format": "Parquet",
43
+ "annotation": "Human crowd workers on Amazon Mechanical Turk validated the endings. They were presented with a context and six endings (one true, five machine-generated) and rated their plausibility. The process involved iterative filtering and replacement of unrealistic endings. Worker quality was ensured via an autograded test and fair pay. A gold standard check by three authors on a random sample showed 90% agreement with crowd annotations."
44
+ },
45
+ "methodology": {
46
+ "methods": [
47
+ "Models are evaluated via fine-tuning on the dataset.",
48
+ "The benchmark also includes zero-shot evaluation on held-out categories."
49
+ ],
50
+ "metrics": [
51
+ "HellaSwag accuracy"
52
+ ],
53
+ "calculation": "The overall score is the accuracy percentage on the full validation or test sets. Performance is also broken down by subsets, such as in-domain versus zero-shot and by data source.",
54
+ "interpretation": "Higher scores indicate better performance. Human performance is over 95%, which is considered strong. Model performance below 50% is reported, indicating a struggle, with a gap of over 45% from human performance on in-domain data.",
55
+ "baseline_results": "Paper baselines: BERT-Large achieves 47.3% accuracy overall. ESIM + ELMo gets 33.3% accuracy. A BERT-Base model with a frozen encoder and an added LSTM performs 4.3% worse than fine-tuned BERT-Base. Evaluation suite results: Anthropic-LM v4-s3 52B achieves 0.807 (80.7%) accuracy.",
56
+ "validation": "Human validation involved giving five crowd workers the same multiple-choice task and combining their answers via majority vote to establish a human performance baseline. The adversarial filtering process used iterative human ratings to ensure wrong answers were implausible."
57
+ },
58
+ "ethical_and_legal_considerations": {
59
+ "privacy_and_anonymity": "Not specified",
60
+ "data_licensing": "Not specified",
61
+ "consent_procedures": "Crowdworkers on Amazon Mechanical Turk participated voluntarily and were compensated, with pay described as fair. A qualification task was used to filter workers, and those who consistently preferred generated endings over real ones were disqualified.",
62
+ "compliance_with_regulations": "Not specified"
63
+ },
64
+ "possible_risks": [
65
+ {
66
+ "category": "Over- or under-reliance",
67
+ "description": [
68
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
69
+ ],
70
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
71
+ },
72
+ {
73
+ "category": "Unrepresentative data",
74
+ "description": [
75
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
76
+ ],
77
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
78
+ },
79
+ {
80
+ "category": "Data bias",
81
+ "description": [
82
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
83
+ ],
84
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
85
+ },
86
+ {
87
+ "category": "Lack of data transparency",
88
+ "description": [
89
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
90
+ ],
91
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
92
+ },
93
+ {
94
+ "category": "Improper usage",
95
+ "description": [
96
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
97
+ ],
98
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
99
+ }
100
+ ],
101
+ "flagged_fields": {
102
+ "baseline_results": "[Possible Hallucination], no supporting evidence found in source material"
103
+ },
104
+ "missing_fields": [
105
+ "purpose_and_intended_users.out_of_scope_uses",
106
+ "ethical_and_legal_considerations.privacy_and_anonymity",
107
+ "ethical_and_legal_considerations.data_licensing",
108
+ "ethical_and_legal_considerations.compliance_with_regulations"
109
+ ],
110
+ "card_info": {
111
+ "created_at": "2026-03-17T15:47:07.561060",
112
+ "llm": "deepseek-ai/DeepSeek-V3.2"
113
+ }
114
+ }
115
+ }
metadata/benchmark_card_IFEval.json ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "Instruction-Following Eval (IFEval)",
5
+ "overview": "IFEval is a benchmark that measures the ability of large language models to follow natural language instructions. It focuses specifically on 'verifiable instructions'\u2014instructions that can be objectively checked, such as word count requirements or keyword mentions. It is distinctive for providing a straightforward, reproducible, and automatic evaluation that avoids the subjectivity of human judgment and the bias of model-based assessment.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "instruction following"
9
+ ],
10
+ "languages": [
11
+ "English"
12
+ ],
13
+ "similar_benchmarks": [
14
+ "Not specified"
15
+ ],
16
+ "resources": [
17
+ "https://github.com/google-research/google-research/tree/master/instruction_following_eval",
18
+ "https://arxiv.org/abs/2311.07911",
19
+ "https://huggingface.co/datasets/google/IFEval",
20
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
21
+ ]
22
+ },
23
+ "purpose_and_intended_users": {
24
+ "goal": "To provide a standardized, objective, and reproducible method for evaluating the instruction-following capability of large language models.",
25
+ "audience": [
26
+ "Researchers evaluating large language models"
27
+ ],
28
+ "tasks": [
29
+ "Text generation",
30
+ "Following verifiable instructions (e.g., word counts, formatting rules, keyword mentions)"
31
+ ],
32
+ "limitations": "The benchmark is limited to verifiable instructions and does not support multi-modal use cases, such as generating images. The current implementation is acknowledged to have room for improvement.",
33
+ "out_of_scope_uses": [
34
+ "Evaluating subjective or ambiguous instructions (e.g., 'write with a funny tone')"
35
+ ]
36
+ },
37
+ "data": {
38
+ "source": "The data consists of constructed prompts, as described in the research paper. The specific source material for the prompt content is not specified.",
39
+ "size": "Approximately 500 prompts, with a train split containing 541 prompts. No information is provided about development or test splits.",
40
+ "format": "JSON",
41
+ "annotation": "The prompts contain verifiable instructions, meaning compliance can be checked automatically via predefined rules (e.g., word counting). No human annotation process is described."
42
+ },
43
+ "methodology": {
44
+ "methods": [
45
+ "Automatic and objective verification of whether the model's output follows the verifiable instructions in the prompt.",
46
+ "Zero-shot evaluation setup."
47
+ ],
48
+ "metrics": [
49
+ "IFEval"
50
+ ],
51
+ "calculation": "Not specified",
52
+ "interpretation": "Higher scores indicate better performance.",
53
+ "baseline_results": "Paper baseline: Results for two widely available LLMs are reported, but specific model names and scores are not provided. EEE results: OLMo 2 32B Instruct March 2025 scored 0.7800; YiSM-blossom5.1-34B-SLERP scored 0.5033. Mean score across 2 models is 0.6417.",
54
+ "validation": "Quality assurance relies on the objective verifiability of the instructions. No additional validation procedures are described."
55
+ },
56
+ "ethical_and_legal_considerations": {
57
+ "privacy_and_anonymity": "Not specified",
58
+ "data_licensing": "Apache License 2.0",
59
+ "consent_procedures": "Not specified",
60
+ "compliance_with_regulations": "Not specified"
61
+ },
62
+ "possible_risks": [
63
+ {
64
+ "category": "Over- or under-reliance",
65
+ "description": [
66
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
67
+ ],
68
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
69
+ },
70
+ {
71
+ "category": "Unrepresentative data",
72
+ "description": [
73
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
74
+ ],
75
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
76
+ },
77
+ {
78
+ "category": "Lack of data transparency",
79
+ "description": [
80
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
81
+ ],
82
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
83
+ },
84
+ {
85
+ "category": "Reproducibility",
86
+ "description": [
87
+ "Replicating agent behavior or output can be impacted by changes or updates made to external services and tools. This impact is increased if the agent is built with generative AI."
88
+ ],
89
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/reproducibility-agentic.html"
90
+ },
91
+ {
92
+ "category": "Improper usage",
93
+ "description": [
94
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
95
+ ],
96
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
97
+ }
98
+ ],
99
+ "flagged_fields": {},
100
+ "missing_fields": [
101
+ "benchmark_details.similar_benchmarks",
102
+ "methodology.calculation",
103
+ "ethical_and_legal_considerations.privacy_and_anonymity",
104
+ "ethical_and_legal_considerations.consent_procedures",
105
+ "ethical_and_legal_considerations.compliance_with_regulations"
106
+ ],
107
+ "card_info": {
108
+ "created_at": "2026-03-17T15:55:54.431294",
109
+ "llm": "deepseek-ai/DeepSeek-V3.2"
110
+ }
111
+ }
112
+ }
metadata/benchmark_card_LegalBench.json ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "LEGALBENCH",
5
+ "overview": "LEGALBENCH is a benchmark designed to measure the legal reasoning capabilities of large language models. It comprises 162 tasks collaboratively constructed and hand-crafted by legal professionals, covering six distinct types of legal reasoning.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "legal",
9
+ "law",
10
+ "finance"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "GLUE",
17
+ "HELM",
18
+ "BigBench",
19
+ "RAFT"
20
+ ],
21
+ "resources": [
22
+ "https://arxiv.org/abs/2308.11462",
23
+ "https://huggingface.co/datasets/nguha/legalbench",
24
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
25
+ ]
26
+ },
27
+ "purpose_and_intended_users": {
28
+ "goal": "To enable greater study of what types of legal reasoning large language models (LLMs) can perform.",
29
+ "audience": [
30
+ "Practitioners (to integrate LLMs into workflows)",
31
+ "Legal academics",
32
+ "Computer scientists"
33
+ ],
34
+ "tasks": [
35
+ "Text classification",
36
+ "Question answering",
37
+ "Text generation",
38
+ "Rule-application tasks"
39
+ ],
40
+ "limitations": "The tasks do not generalize to all legal reasoning tasks or all types of legal documents, offering only a preliminary understanding of LLM performance.",
41
+ "out_of_scope_uses": [
42
+ "Predicting the legality of real-world events",
43
+ "Predicting the outcome of lawsuits",
44
+ "Providing legal advice"
45
+ ]
46
+ },
47
+ "data": {
48
+ "source": "Data is drawn from three categories: existing publicly available datasets and corpora (some reformatted), datasets previously created by legal professionals but not released, and tasks developed specifically for LegalBench. The tasks originate from 36 distinct corpora.",
49
+ "size": "The benchmark comprises 162 tasks. The distribution of tasks by sample count is: 28 tasks have 50-100 samples, 97 have 100-500 samples, 29 have 500-2000 samples, and 8 have 2000+ samples. The overall dataset falls into the size category of 10,000 to 100,000 examples.",
50
+ "format": "Examples are presented in a structured format with fields such as 'Task name', 'Question', 'Options', and 'Answer'.",
51
+ "annotation": "Annotation procedures are task-dependent. For certain tasks, each data point was manually validated by a law-trained expert. Detailed annotation methodology for each task is documented in a separate section of the paper."
52
+ },
53
+ "methodology": {
54
+ "methods": [
55
+ "Models are evaluated in a few-shot setting. Train splits consist of a small random sample of between 2 to 8 instances to capture a true few-shot learning scenario.",
56
+ "For rule-application tasks, a law-trained expert manually validates each model generation."
57
+ ],
58
+ "metrics": [
59
+ "LegalBench",
60
+ "Correctness",
61
+ "Analysis"
62
+ ],
63
+ "calculation": "The primary benchmark metric is Exact Match (EM) on LegalBench. For rule-application tasks, two separate metrics are computed: 'correctness' (the proportion of generations without errors) and 'analysis'.",
64
+ "interpretation": "Higher scores on the LegalBench metric indicate better performance. The metric is continuous and lower scores are not better.",
65
+ "baseline_results": "The original paper evaluated 20 LLMs from 11 different families but did not provide specific scores. In a separate evaluation suite, the Yi 34B model achieved a score of 0.618.",
66
+ "validation": "For rule-application tasks, a law-trained expert manually validated each model generation. For datasets reused or adapted from other sources, the original data sheets document any redactions or missing data."
67
+ },
68
+ "ethical_and_legal_considerations": {
69
+ "privacy_and_anonymity": "For tasks that reuse or adapt existing datasets, the benchmark refers to the original data sheets for details on any data redactions or missing information.",
70
+ "data_licensing": "other",
71
+ "consent_procedures": "Not specified.",
72
+ "compliance_with_regulations": "The benchmark includes a section for each task intended to provide information relevant to ethical review processes, but specific details are not provided in the available facts."
73
+ },
74
+ "possible_risks": [
75
+ {
76
+ "category": "Over- or under-reliance",
77
+ "description": [
78
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
79
+ ],
80
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
81
+ },
82
+ {
83
+ "category": "Unrepresentative data",
84
+ "description": [
85
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
86
+ ],
87
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
88
+ },
89
+ {
90
+ "category": "Data bias",
91
+ "description": [
92
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
93
+ ],
94
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
95
+ },
96
+ {
97
+ "category": "Lack of data transparency",
98
+ "description": [
99
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
100
+ ],
101
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
102
+ },
103
+ {
104
+ "category": "Improper usage",
105
+ "description": [
106
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
107
+ ],
108
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
109
+ }
110
+ ],
111
+ "flagged_fields": {},
112
+ "missing_fields": [
113
+ "ethical_and_legal_considerations.consent_procedures"
114
+ ],
115
+ "card_info": {
116
+ "created_at": "2026-03-17T12:59:10.203815",
117
+ "llm": "deepseek-ai/DeepSeek-V3.2"
118
+ }
119
+ }
120
+ }
metadata/benchmark_card_MATH_Level_5.json ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "MATH Level 5",
5
+ "overview": "MATH Level 5 is a benchmark that measures the mathematical problem-solving ability of machine learning models using challenging competition-level mathematics problems. It contains 12,500 problems, each with a full step-by-step solution, and is specifically focused on the hardest difficulty level (Level 5) within the dataset. Problems are presented in text, with diagrams for subjects like geometry specified using the Asymptote language.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "mathematics",
9
+ "explanation generation"
10
+ ],
11
+ "languages": [
12
+ "English"
13
+ ],
14
+ "similar_benchmarks": [
15
+ "DeepMind Mathematics Dataset",
16
+ "Metamath Theorem Proving"
17
+ ],
18
+ "resources": [
19
+ "https://arxiv.org/abs/2103.03874",
20
+ "https://huggingface.co/datasets/DigitalLearningGmbH/MATH-lighteval"
21
+ ]
22
+ },
23
+ "purpose_and_intended_users": {
24
+ "goal": "To measure the mathematical problem-solving ability of machine learning models, specifically evaluating their capacity to analyze problems, select appropriate heuristics, and chain them together to produce a final answer. The benchmark also aims to teach models to generate step-by-step derivations and explanations.",
25
+ "audience": [
26
+ "Machine learning researchers"
27
+ ],
28
+ "tasks": [
29
+ "Mathematical problem solving",
30
+ "Step-by-step solution generation",
31
+ "Final answer generation"
32
+ ],
33
+ "limitations": "Accuracy on the benchmark remains relatively low even with large Transformer models, and scaling model size alone appears impractical for achieving strong mathematical reasoning based on current trends, indicating it is a very challenging benchmark.",
34
+ "out_of_scope_uses": [
35
+ "Not specified"
36
+ ]
37
+ },
38
+ "data": {
39
+ "source": "The data is sourced from high school mathematics competitions, including the AMC 10, AMC 12, and AIME.",
40
+ "size": "The full dataset contains 12,500 problems, with 7,500 for training and 5,000 for testing. The exact number of examples for the 'Level 5' subset is not specified.",
41
+ "format": "The data is stored in Parquet format. Each problem includes a full step-by-step solution in LaTeX and natural language, and the final answer is a unique normalized sequence.",
42
+ "annotation": "Problems are expert-generated, but the specific annotation process and quality control measures are not detailed."
43
+ },
44
+ "methodology": {
45
+ "methods": [
46
+ "Models are evaluated by generating a final answer for a given problem. The solution must contain the final answer enclosed in a `\\boxed{}` tag."
47
+ ],
48
+ "metrics": [
49
+ "MATH Level 5"
50
+ ],
51
+ "calculation": "The metric is an Exact Match score on MATH Level 5. The score is continuous, and higher values indicate better performance.",
52
+ "interpretation": "Higher scores indicate better performance. The score is continuous, and lower values are not better.",
53
+ "baseline_results": "Paper baselines: Not specified. Evaluation suite results: YiSM-blossom5.1-34B-SLERP achieved a score of 0.2153.",
54
+ "validation": "Not specified"
55
+ },
56
+ "ethical_and_legal_considerations": {
57
+ "privacy_and_anonymity": "Not specified",
58
+ "data_licensing": "MIT License",
59
+ "consent_procedures": "Not specified",
60
+ "compliance_with_regulations": "Not specified"
61
+ },
62
+ "possible_risks": [
63
+ {
64
+ "category": "Over- or under-reliance",
65
+ "description": [
66
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
67
+ ],
68
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
69
+ },
70
+ {
71
+ "category": "Unrepresentative data",
72
+ "description": [
73
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
74
+ ],
75
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
76
+ },
77
+ {
78
+ "category": "Data bias",
79
+ "description": [
80
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
81
+ ],
82
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
83
+ },
84
+ {
85
+ "category": "Lack of data transparency",
86
+ "description": [
87
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
88
+ ],
89
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
90
+ },
91
+ {
92
+ "category": "Improper usage",
93
+ "description": [
94
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
95
+ ],
96
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
97
+ }
98
+ ],
99
+ "flagged_fields": {},
100
+ "missing_fields": [
101
+ "purpose_and_intended_users.out_of_scope_uses",
102
+ "methodology.validation",
103
+ "ethical_and_legal_considerations.privacy_and_anonymity",
104
+ "ethical_and_legal_considerations.consent_procedures",
105
+ "ethical_and_legal_considerations.compliance_with_regulations"
106
+ ],
107
+ "card_info": {
108
+ "created_at": "2026-03-17T16:09:19.958535",
109
+ "llm": "deepseek-ai/DeepSeek-V3.2"
110
+ }
111
+ }
112
+ }
metadata/benchmark_card_MMLU-Pro.json ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "MMLU-Pro",
5
+ "overview": "MMLU-Pro is an enhanced version of the Massive Multitask Language Understanding benchmark designed to be more challenging and robust. It measures multi-task language understanding and reasoning capabilities by integrating more reasoning-focused questions, expanding answer choices from four to ten, and eliminating trivial or noisy questions found in its predecessor. It covers a broad range of subjects.",
6
+ "data_type": "tabular, text",
7
+ "domains": [
8
+ "STEM",
9
+ "humanities",
10
+ "social sciences",
11
+ "math",
12
+ "physics",
13
+ "chemistry",
14
+ "law",
15
+ "engineering",
16
+ "economics",
17
+ "health",
18
+ "psychology",
19
+ "business",
20
+ "biology",
21
+ "philosophy",
22
+ "computer science",
23
+ "history"
24
+ ],
25
+ "languages": [
26
+ "English"
27
+ ],
28
+ "similar_benchmarks": [
29
+ "MMLU"
30
+ ],
31
+ "resources": [
32
+ "https://arxiv.org/abs/2406.01574",
33
+ "https://huggingface.co/datasets/TIGER-Lab/MMLU-Pro",
34
+ "https://huggingface.co/spaces/TIGER-Lab/MMLU-Pro",
35
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
36
+ ]
37
+ },
38
+ "purpose_and_intended_users": {
39
+ "goal": "To provide a more challenging and discriminative benchmark for tracking progress in language model capabilities, testing deeper cognitive processes and reasoning as models plateau on existing benchmarks.",
40
+ "audience": [
41
+ "Researchers evaluating large language models"
42
+ ],
43
+ "tasks": [
44
+ "Multiple-choice question answering across a broad range of subjects"
45
+ ],
46
+ "limitations": "The dataset contains some mistakes and formatting inconsistencies, which the maintainers are correcting based on expert feedback.",
47
+ "out_of_scope_uses": [
48
+ "Not specified"
49
+ ]
50
+ },
51
+ "data": {
52
+ "source": "The dataset is an enhanced version of MMLU, integrating more challenging questions from multiple sources. These include original MMLU questions (with trivial or ambiguous ones removed), hand-picked high-quality STEM problems from the internet, human-annotated questions requiring theorems from TheoremQA, and science questions from college exams via SciBench.",
53
+ "size": "The test split contains 12,032 examples, placing the dataset in the 10K to 100K size category. The total file size is 8,775,905 bytes.",
54
+ "format": "The data is stored in Parquet format and consists of multiple-choice questions, expanding the number of answer choices from four (as in MMLU) to ten.",
55
+ "annotation": "The annotation process involved expert review. Over ten experts scrutinized each question and its options to ensure challenge, comprehensiveness, accuracy, and fairness. Some answers were later corrected based on recommendations from specialists such as medical professionals."
56
+ },
57
+ "methodology": {
58
+ "methods": [
59
+ "Models are evaluated using multiple-choice question answering, typically with a 5-shot prompting setup, though some models use 0-shot.",
60
+ "Performance is tested using both direct answering and Chain-of-Thought (CoT) reasoning.",
61
+ "The benchmark tests performance under 24 different prompt styles."
62
+ ],
63
+ "metrics": [
64
+ "Accuracy (reported as a percentage or score)"
65
+ ],
66
+ "calculation": "The overall score is an average accuracy across subjects, but the specific calculation method is not detailed.",
67
+ "interpretation": "Higher scores indicate better performance. Performance on MMLU-Pro is significantly lower than on MMLU, indicating it is more challenging.",
68
+ "baseline_results": "PAPER baselines: GPT-4o achieves over 70% accuracy in Math and Physics subjects. Llama-3-70B-Instruct achieves an overall accuracy of 56.2%. Gemma-7B and Mistral-7B-v0.1 have lower performance (e.g., Mistral-7B-v0.1 scores just over 20% in Math and Physics). HF_README baselines: GPT-4o achieves an overall score of 0.7255 with CoT and 0.5346 with direct prompting. Other reported scores include Claude-3-Opus (0.6845), Claude-3-Sonnet (0.5511), Gemini 1.5 Flash (0.5912), and Llama-3-70B-Instruct (0.5620). EEE results: OLMo 2 32B Instruct March 2025 scored 0.4140.",
69
+ "validation": "The benchmark demonstrates greater stability under varying prompts, with sensitivity to prompt variations decreasing from 4-5% in MMLU to just 2% in MMLU-Pro."
70
+ },
71
+ "ethical_and_legal_considerations": {
72
+ "privacy_and_anonymity": "Not specified",
73
+ "data_licensing": "MIT License",
74
+ "consent_procedures": "Not specified",
75
+ "compliance_with_regulations": "Not specified"
76
+ },
77
+ "possible_risks": [
78
+ {
79
+ "category": "Over- or under-reliance",
80
+ "description": [
81
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
82
+ ],
83
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
84
+ },
85
+ {
86
+ "category": "Unrepresentative data",
87
+ "description": [
88
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
89
+ ],
90
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
91
+ },
92
+ {
93
+ "category": "Uncertain data provenance",
94
+ "description": [
95
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
96
+ ],
97
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
98
+ },
99
+ {
100
+ "category": "Data bias",
101
+ "description": [
102
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
103
+ ],
104
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
105
+ },
106
+ {
107
+ "category": "Improper usage",
108
+ "description": [
109
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
110
+ ],
111
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
112
+ }
113
+ ],
114
+ "flagged_fields": {},
115
+ "missing_fields": [
116
+ "purpose_and_intended_users.out_of_scope_uses",
117
+ "ethical_and_legal_considerations.privacy_and_anonymity",
118
+ "ethical_and_legal_considerations.consent_procedures",
119
+ "ethical_and_legal_considerations.compliance_with_regulations"
120
+ ],
121
+ "card_info": {
122
+ "created_at": "2026-03-17T16:20:31.763989",
123
+ "llm": "deepseek-ai/DeepSeek-V3.2"
124
+ }
125
+ }
126
+ }
metadata/benchmark_card_MMLU.json ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "Measuring Massive Multitask Language Understanding (MMLU)",
5
+ "overview": "MMLU is a multiple-choice question-answering benchmark that measures a text model's multitask accuracy across 57 distinct tasks. It is designed to test a wide range of knowledge and problem-solving abilities, covering diverse academic and professional subjects from elementary to advanced levels.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "STEM",
9
+ "humanities",
10
+ "social sciences"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "GLUE",
17
+ "SuperGLUE"
18
+ ],
19
+ "resources": [
20
+ "https://arxiv.org/abs/2009.03300",
21
+ "https://huggingface.co/datasets/cais/mmlu",
22
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json",
23
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
24
+ ]
25
+ },
26
+ "purpose_and_intended_users": {
27
+ "goal": "To bridge the gap between the wide-ranging knowledge models acquire during pretraining and existing evaluation measures by assessing models across a diverse set of academic and professional subjects.",
28
+ "audience": [
29
+ "Researchers analyzing model capabilities and identifying shortcomings"
30
+ ],
31
+ "tasks": [
32
+ "Multiple-choice question answering"
33
+ ],
34
+ "limitations": "Models exhibit lopsided performance, frequently do not know when they are wrong, and have near-random accuracy on some socially important subjects like morality and law.",
35
+ "out_of_scope_uses": [
36
+ "Not specified"
37
+ ]
38
+ },
39
+ "data": {
40
+ "source": "The dataset is an original source with expert-generated questions.",
41
+ "size": "The dataset contains over 100,000 examples, with a test split of 14,042 examples, a validation split of 1,531 examples, a dev split of 285 examples, and an auxiliary training split of 99,842 examples.",
42
+ "format": "parquet",
43
+ "annotation": "The dataset has no additional annotations; each question provides the correct answer as a class label (A, B, C, or D)."
44
+ },
45
+ "methodology": {
46
+ "methods": [
47
+ "Models are evaluated exclusively in zero-shot and few-shot settings to measure knowledge acquired during pretraining."
48
+ ],
49
+ "metrics": [
50
+ "MMLU (accuracy)"
51
+ ],
52
+ "calculation": "The overall score is an average accuracy across the 57 tasks.",
53
+ "interpretation": "Higher scores indicate better performance. Near random-chance accuracy indicates weak performance. The very largest GPT-3 model improved over random chance by almost 20 percentage points on average, but models still need substantial improvements to reach expert-level accuracy.",
54
+ "baseline_results": "Paper baselines: Most recent models have near random-chance accuracy. The very largest GPT-3 model improved over random chance by almost 20 percentage points on average. EEE results: Yi 34B scored 0.6500, Anthropic-LM v4-s3 52B scored 0.4810. The mean score across 2 evaluated models is 0.5655.",
55
+ "validation": "Not specified"
56
+ },
57
+ "ethical_and_legal_considerations": {
58
+ "privacy_and_anonymity": "Not specified",
59
+ "data_licensing": "MIT License",
60
+ "consent_procedures": "Not specified",
61
+ "compliance_with_regulations": "Not specified"
62
+ },
63
+ "possible_risks": [
64
+ {
65
+ "category": "Over- or under-reliance",
66
+ "description": [
67
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
68
+ ],
69
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
70
+ },
71
+ {
72
+ "category": "Unrepresentative data",
73
+ "description": [
74
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
75
+ ],
76
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
77
+ },
78
+ {
79
+ "category": "Data bias",
80
+ "description": [
81
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
82
+ ],
83
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
84
+ },
85
+ {
86
+ "category": "Lack of data transparency",
87
+ "description": [
88
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
89
+ ],
90
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
91
+ },
92
+ {
93
+ "category": "Improper usage",
94
+ "description": [
95
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
96
+ ],
97
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
98
+ }
99
+ ],
100
+ "flagged_fields": {},
101
+ "missing_fields": [
102
+ "purpose_and_intended_users.out_of_scope_uses",
103
+ "methodology.validation",
104
+ "ethical_and_legal_considerations.privacy_and_anonymity",
105
+ "ethical_and_legal_considerations.consent_procedures",
106
+ "ethical_and_legal_considerations.compliance_with_regulations"
107
+ ],
108
+ "card_info": {
109
+ "created_at": "2026-03-17T13:14:49.605975",
110
+ "llm": "deepseek-ai/DeepSeek-V3.2"
111
+ }
112
+ }
113
+ }
metadata/benchmark_card_MUSR.json ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "MuSR",
5
+ "overview": "MuSR (Multistep Soft Reasoning) is a benchmark that measures the ability of language models to perform multistep soft reasoning based on natural language narratives. It combines sophisticated narratives with complex reasoning that requires commonsense knowledge and is not solvable by simple rule-based systems. The benchmark consists of three tasks: murder mysteries, object placements, and team allocations.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "reasoning",
9
+ "commonsense reasoning",
10
+ "planning"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "bAbI",
17
+ "BigTOM",
18
+ "ToMi",
19
+ "RuleTakers",
20
+ "ProntoQA",
21
+ "SocialIQA",
22
+ "StrategyQA"
23
+ ],
24
+ "resources": [
25
+ "https://github.com/Zayne-Sprague/MuSR",
26
+ "https://arxiv.org/abs/2310.16049",
27
+ "https://huggingface.co/datasets/TAUR-Lab/MuSR"
28
+ ]
29
+ },
30
+ "purpose_and_intended_users": {
31
+ "goal": "To evaluate and characterize the gaps in language models' abilities to perform robust, multistep reasoning in complex natural language settings, particularly testing the limits of techniques like chain-of-thought.",
32
+ "audience": [
33
+ "Researchers evaluating language models",
34
+ "Researchers evaluating neurosymbolic systems on reasoning capabilities"
35
+ ],
36
+ "tasks": [
37
+ "Question answering",
38
+ "Solving murder mysteries",
39
+ "Solving object placement problems",
40
+ "Solving team allocation problems"
41
+ ],
42
+ "limitations": "The benchmark instances are generated by GPT-4, which may lead to simple, poor-quality narratives with potential inconsistencies, though the paper argues they are valid test cases if the underlying information is faithfully preserved.",
43
+ "out_of_scope_uses": [
44
+ "Not specified"
45
+ ]
46
+ },
47
+ "data": {
48
+ "source": "The data is synthetically generated using a neurosymbolic synthetic-to-natural generation algorithm that employs GPT-4. The process begins with gold facts, constructs a reasoning tree, and iteratively generates a narrative.",
49
+ "size": "756 instances across three domains: 250 for Murder Mystery, 256 for Object Placements, and 250 for Team Allocations. The dataset is categorized as containing fewer than 1,000 examples (n<1K).",
50
+ "format": "CSV, containing free-text narratives (ranging from hundreds to roughly 1000 words in length) followed by a multiple-choice question.",
51
+ "annotation": "Answers are derived from the underlying gold facts used in generation. For validation, human annotators (7 total) solved instances using a chain-of-thought+ prompt, with instances triply-annotated (34-40 per domain). Human accuracy was very high, with the lowest average annotator score at 90% and majority vote accuracy between 94.1% and 100%."
52
+ },
53
+ "methodology": {
54
+ "methods": [
55
+ "Models are evaluated in zero-shot and single-shot (1-shot) settings.",
56
+ "Prompting strategies include single-shot prompting, chain-of-thought (CoT), and an engineered variant called CoT+.",
57
+ "Neurosymbolic algorithms like Program-Aided Language Models (PAL) and SymbolicTOM are also evaluated on compatible domains."
58
+ ],
59
+ "metrics": [
60
+ "MUSR (Accuracy)"
61
+ ],
62
+ "calculation": "Performance is measured as accuracy (percentage correct) for each of the three domains (MM, OP, TA) separately. The paper does not report a single aggregated score.",
63
+ "interpretation": "Higher accuracy indicates better performance. Human performance sets a high ceiling (ranging from 94.1% to 100% by majority vote), while random baselines are at or near chance (ranging from 24.6% to 50%).",
64
+ "baseline_results": "Paper baselines: Random baseline (MM: 50%, OP: 24.6%, TA: 33.3%), GPT-4 (80.4%, 60.9%, 68.4%), GPT-3.5 (61.6%, 46.9%, 40.4%), Llama2 70b Chat (48.8%, 42.2%, 44.8%), Llama2 7b Chat (50.8%, 29.3%, 36.8%), Vicuna 7b v1.5 (48.4%, 29.7%, 26.4%), Vicuna 13b v1.5 (50.8%, 34.4%, 32%), Vicuna 33b v1.3 (49.6%, 31.2%, 30%), Human Eval (94.1%, 95%, 100%). PAL results for Team Allocation outperform end-to-end models but are below human performance. EEE results: YiSM-blossom5.1-34B-SLERP achieved an accuracy of 0.4413.",
65
+ "validation": "The dataset is validated by measuring human annotator performance to ensure the narratives support the intended reasoning. Rule-based baselines (e.g., picking the suspect with the longest chapter) are used as sanity checks and perform near random chance, confirming the tasks are not trivially solvable."
66
+ },
67
+ "ethical_and_legal_considerations": {
68
+ "privacy_and_anonymity": "Not specified",
69
+ "data_licensing": "Creative Commons Attribution 4.0",
70
+ "consent_procedures": "Annotation was performed by three hired undergraduate students. No details on compensation or the hiring platform are provided.",
71
+ "compliance_with_regulations": "The research received support from NSF, DARPA, and the Air Force Research Laboratory. No mention of IRB approval or other specific regulatory compliance is made."
72
+ },
73
+ "possible_risks": [
74
+ {
75
+ "category": "Over- or under-reliance",
76
+ "description": [
77
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
78
+ ],
79
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
80
+ },
81
+ {
82
+ "category": "Unrepresentative data",
83
+ "description": [
84
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
85
+ ],
86
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
87
+ },
88
+ {
89
+ "category": "Data contamination",
90
+ "description": [
91
+ "Data contamination occurs when incorrect data is used for training. For example, data that is not aligned with model's purpose or data that is already set aside for other development tasks such as testing and evaluation."
92
+ ],
93
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-contamination.html"
94
+ },
95
+ {
96
+ "category": "Reproducibility",
97
+ "description": [
98
+ "Replicating agent behavior or output can be impacted by changes or updates made to external services and tools. This impact is increased if the agent is built with generative AI."
99
+ ],
100
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/reproducibility-agentic.html"
101
+ },
102
+ {
103
+ "category": "Improper usage",
104
+ "description": [
105
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
106
+ ],
107
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
108
+ }
109
+ ],
110
+ "flagged_fields": {
111
+ "methodology.calculation": "[Possible Hallucination], no supporting evidence found in source material",
112
+ "methodology.baseline_results": "[Possible Hallucination], no supporting evidence found in source material",
113
+ "methodology.validation": "[Factuality Score: 0.17], low factual alignment with source material"
114
+ },
115
+ "missing_fields": [
116
+ "purpose_and_intended_users.out_of_scope_uses",
117
+ "ethical_and_legal_considerations.privacy_and_anonymity"
118
+ ],
119
+ "card_info": {
120
+ "created_at": "2026-03-17T12:25:43.235734",
121
+ "llm": "deepseek-ai/DeepSeek-V3.2"
122
+ }
123
+ }
124
+ }
metadata/benchmark_card_MedQA.json ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "MEDQA",
5
+ "overview": "MEDQA is a free-form multiple-choice open-domain question answering (OpenQA) benchmark designed to measure a model's ability to solve medical problems. It is distinctive as the first such dataset sourced from professional medical board exams, covering multiple languages and presenting a challenging real-world scenario.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "medical knowledge",
9
+ "professional medical exams"
10
+ ],
11
+ "languages": [
12
+ "English"
13
+ ],
14
+ "similar_benchmarks": [
15
+ "ARC",
16
+ "OpenBookQA"
17
+ ],
18
+ "resources": [
19
+ "https://github.com/jind11/MedQA",
20
+ "https://arxiv.org/abs/2009.13081",
21
+ "https://huggingface.co/datasets/GBaker/MedQA-USMLE-4-options",
22
+ "https://storage.googleapis.com/crfm-helm-public/lite/benchmark_output/releases/v1.13.0/groups/core_scenarios.json"
23
+ ]
24
+ },
25
+ "purpose_and_intended_users": {
26
+ "goal": "To present a challenging open-domain question answering dataset to promote the development of stronger models capable of handling sophisticated real-world medical scenarios, specifically evaluating performance on medical knowledge as tested in professional exams.",
27
+ "audience": [
28
+ "The natural language processing (NLP) community"
29
+ ],
30
+ "tasks": [
31
+ "Free-form multiple-choice question answering",
32
+ "Open-domain question answering"
33
+ ],
34
+ "limitations": "Even the best current methods achieve relatively low accuracy (36.7% to 70.1% across languages), indicating the benchmark's difficulty and the limitations of existing models.",
35
+ "out_of_scope_uses": [
36
+ "Not specified"
37
+ ]
38
+ },
39
+ "data": {
40
+ "source": "The data is collected from professional medical board exams.",
41
+ "size": "The dataset contains 12,723 questions in English, 34,251 in simplified Chinese, and 14,123 in traditional Chinese. The total number of examples falls within the 10K to 100K range.",
42
+ "format": "JSON",
43
+ "annotation": "The answer labels are the correct answers from the professional exams. No additional annotation process is described."
44
+ },
45
+ "methodology": {
46
+ "methods": [
47
+ "The benchmark uses a sequential combination of a document retriever and a machine comprehension model. It includes both rule-based and neural methods.",
48
+ "The evaluation is a standard question-answering task, though the specific learning setting (e.g., zero-shot, few-shot, fine-tuning) is not explicitly defined."
49
+ ],
50
+ "metrics": [
51
+ "Accuracy"
52
+ ],
53
+ "calculation": "The overall score is the accuracy on the test set.",
54
+ "interpretation": "Higher accuracy indicates better performance. The best reported accuracies are 36.7% for English, 42.0% for traditional Chinese, and 70.1% for simplified Chinese questions.",
55
+ "baseline_results": "Original paper baselines: The best method reported achieves 36.7% accuracy on English, 42.0% on traditional Chinese, and 70.1% on simplified Chinese questions. Model names are not specified. EEE results: Yi 34B achieves a score of 0.656 (65.6%).",
56
+ "validation": "Not specified"
57
+ },
58
+ "ethical_and_legal_considerations": {
59
+ "privacy_and_anonymity": "Not specified",
60
+ "data_licensing": "Creative Commons Attribution 4.0",
61
+ "consent_procedures": "Not specified",
62
+ "compliance_with_regulations": "Not specified"
63
+ },
64
+ "possible_risks": [
65
+ {
66
+ "category": "Over- or under-reliance",
67
+ "description": [
68
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
69
+ ],
70
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
71
+ },
72
+ {
73
+ "category": "Unrepresentative data",
74
+ "description": [
75
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
76
+ ],
77
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
78
+ },
79
+ {
80
+ "category": "Uncertain data provenance",
81
+ "description": [
82
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
83
+ ],
84
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
85
+ },
86
+ {
87
+ "category": "Data bias",
88
+ "description": [
89
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
90
+ ],
91
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
92
+ },
93
+ {
94
+ "category": "Lack of data transparency",
95
+ "description": [
96
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
97
+ ],
98
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
99
+ }
100
+ ],
101
+ "flagged_fields": {},
102
+ "missing_fields": [
103
+ "purpose_and_intended_users.out_of_scope_uses",
104
+ "methodology.validation",
105
+ "ethical_and_legal_considerations.privacy_and_anonymity",
106
+ "ethical_and_legal_considerations.consent_procedures",
107
+ "ethical_and_legal_considerations.compliance_with_regulations"
108
+ ],
109
+ "card_info": {
110
+ "created_at": "2026-03-17T13:23:29.822123",
111
+ "llm": "deepseek-ai/DeepSeek-V3.2"
112
+ }
113
+ }
114
+ }
metadata/benchmark_card_Omni-MATH.json ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "Omni-MATH",
5
+ "overview": "Omni-MATH is a benchmark designed to measure the mathematical reasoning capabilities of large language models at the Olympiad competition level. It comprises 4,428 challenging problems, categorized into over 33 sub-domains and more than 10 distinct difficulty levels. It was created because existing mathematical benchmarks are nearing saturation and are inadequate for assessing models on truly difficult tasks.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "math",
9
+ "olympiads"
10
+ ],
11
+ "languages": [
12
+ "English"
13
+ ],
14
+ "similar_benchmarks": [
15
+ "GSM8K",
16
+ "MATH"
17
+ ],
18
+ "resources": [
19
+ "https://arxiv.org/abs/2410.07985",
20
+ "https://huggingface.co/datasets/KbsdJames/Omni-MATH",
21
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
22
+ ]
23
+ },
24
+ "purpose_and_intended_users": {
25
+ "goal": "To provide a challenging benchmark for assessing and advancing the mathematical reasoning capabilities of large language models at the Olympiad and competition level, as existing benchmarks have become less challenging. It enables a nuanced analysis of performance across various mathematical disciplines and complexity levels.",
26
+ "audience": [
27
+ "Researchers evaluating large language models"
28
+ ],
29
+ "tasks": [
30
+ "Solving Olympiad-level mathematical problems",
31
+ "Solving competition-level mathematical problems",
32
+ "Rule-based evaluation on a filtered subset of problems (Omni-MATH-Rule)"
33
+ ],
34
+ "limitations": "Some problems are not suitable for reliable rule-based evaluation, leading to a filtered 'testable' set and an 'untestable' set.",
35
+ "out_of_scope_uses": [
36
+ "Not specified"
37
+ ]
38
+ },
39
+ "data": {
40
+ "source": "The data is sourced from contest pages, the AoPS Wiki, and the AoPS Forum. Initial raw counts from these sources were filtered to create the final dataset.",
41
+ "size": "4,428 problems. A subset of 2,821 problems (Omni-MATH-Rule) is suitable for rule-based evaluation, and a separate subset of 100 samples was used for meta-evaluation.",
42
+ "format": "JSON",
43
+ "annotation": "Problems underwent rigorous human annotation by a team including PhD and Master's students. Each problem was reviewed by two annotators for cross-validation, achieving high agreement rates."
44
+ },
45
+ "methodology": {
46
+ "methods": [
47
+ "Models are evaluated by generating solutions to the mathematical problems.",
48
+ "Evaluation is conducted using both model-based judgment (e.g., GPT-4o or the open-source Omni-Judge) and rule-based evaluation for a specific subset of problems (Omni-MATH-Rule)."
49
+ ],
50
+ "metrics": [
51
+ "Accuracy (Acc)"
52
+ ],
53
+ "calculation": "The overall score is the accuracy percentage, calculated as the number of correct solutions divided by the total number of problems.",
54
+ "interpretation": "Higher accuracy indicates stronger performance. The benchmark is considered challenging, as even advanced models achieve only moderate accuracy.",
55
+ "baseline_results": "Paper baselines (accuracy on full Omni-MATH / Omni-MATH-Rule subset): o1-mini (60.54% / 62.2%), o1-preview (52.55% / 51.7%), qwen2.5-MATH-72b-Instruct (36.20% / 35.7%), qwen2.5-MATH-7b-Instruct (33.22% / 32.3%), GPT-4o (30.49% / 29.2%), NuminaMATH-72b-cot (28.45% / 27.1%), DeepseekMATH-7b-RL (16.12% / 14.9%). EEE results: OLMo 2 32B Instruct March 2025 scored 0.161 (16.1%).",
56
+ "validation": "For the Omni-MATH-Rule subset, two PhD students annotated problems to determine suitability for rule-based evaluation, achieving 98% cross-validation accuracy. A meta-evaluation compared model-generated judgments against human gold-standard annotations on a 100-sample subset to assess reliability."
57
+ },
58
+ "ethical_and_legal_considerations": {
59
+ "privacy_and_anonymity": "Not specified",
60
+ "data_licensing": "Apache License 2.0",
61
+ "consent_procedures": "Not specified",
62
+ "compliance_with_regulations": "Not specified"
63
+ },
64
+ "possible_risks": [
65
+ {
66
+ "category": "Over- or under-reliance",
67
+ "description": [
68
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
69
+ ],
70
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
71
+ },
72
+ {
73
+ "category": "Unrepresentative data",
74
+ "description": [
75
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
76
+ ],
77
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
78
+ },
79
+ {
80
+ "category": "Data bias",
81
+ "description": [
82
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
83
+ ],
84
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
85
+ },
86
+ {
87
+ "category": "Lack of data transparency",
88
+ "description": [
89
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
90
+ ],
91
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
92
+ },
93
+ {
94
+ "category": "Improper usage",
95
+ "description": [
96
+ "Improper usage occurs when a model is used for a purpose that it was not originally designed for."
97
+ ],
98
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/improper-usage.html"
99
+ }
100
+ ],
101
+ "flagged_fields": {},
102
+ "missing_fields": [
103
+ "purpose_and_intended_users.out_of_scope_uses",
104
+ "ethical_and_legal_considerations.privacy_and_anonymity",
105
+ "ethical_and_legal_considerations.consent_procedures",
106
+ "ethical_and_legal_considerations.compliance_with_regulations"
107
+ ],
108
+ "card_info": {
109
+ "created_at": "2026-03-17T13:34:44.331592",
110
+ "llm": "deepseek-ai/DeepSeek-V3.2"
111
+ }
112
+ }
113
+ }
metadata/benchmark_card_QuAC.json ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "QuAC",
5
+ "overview": "QuAC (Question Answering in Context) is a benchmark that measures a model's ability to answer questions within an information-seeking dialogue. It contains 14,000 dialogues comprising 100,000 question-answer pairs. The dataset is distinctive because questions are often open-ended, context-dependent, unanswerable, or only meaningful within the dialog flow, presenting challenges not found in standard machine comprehension datasets.",
6
+ "data_type": "text",
7
+ "domains": [
8
+ "question answering",
9
+ "dialogue modeling",
10
+ "text generation"
11
+ ],
12
+ "languages": [
13
+ "English"
14
+ ],
15
+ "similar_benchmarks": [
16
+ "SQuAD"
17
+ ],
18
+ "resources": [
19
+ "http://quac.ai",
20
+ "https://arxiv.org/abs/1808.07036",
21
+ "https://huggingface.co/datasets/allenai/quac",
22
+ "https://storage.googleapis.com/crfm-helm-public/benchmark_output/releases/v0.4.0/groups/core_scenarios.json"
23
+ ]
24
+ },
25
+ "purpose_and_intended_users": {
26
+ "goal": "To enable models to learn from and participate in information-seeking dialog, handling context-dependent, elliptical, and sometimes unanswerable questions.",
27
+ "audience": [
28
+ "Not specified"
29
+ ],
30
+ "tasks": [
31
+ "Extractive question answering",
32
+ "Text generation",
33
+ "Fill mask"
34
+ ],
35
+ "limitations": "Some questions have lower quality annotations; the dataset filters out the noisiest ~10% of annotations where human F1 is below 40. Questions can be open-ended, unanswerable, or only meaningful within the dialog context, posing inherent challenges.",
36
+ "out_of_scope_uses": [
37
+ "Not specified"
38
+ ]
39
+ },
40
+ "data": {
41
+ "source": "The data is crowdsourced via an interactive dialog between two crowd workers: one acting as a student asking questions to learn about a hidden Wikipedia text, and the other acting as a teacher who answers using short excerpts from that text. The source data comes from Wikipedia.",
42
+ "size": "The dataset contains 98,407 question-answer pairs from 13,594 dialogs, based on 8,854 unique sections from 3,611 unique Wikipedia articles. The training set has 83,568 questions (11,567 dialogs), the validation set has 7,354 questions (1,000 dialogs), and the test set has 7,353 questions (1,002 dialogs). The dataset size is between 10,000 and 100,000 examples.",
43
+ "format": "Each dialog is a sequence of question-answer pairs centered around a Wikipedia section. The teacher's response includes a text span, a 'yes/no' indication, a 'no answer' indication, and an encouragement for follow-up questions.",
44
+ "annotation": "Questions are answered by a teacher selecting short excerpts (spans) from the Wikipedia text. The training set has one reference answer per question, while the validation and test sets each have five reference answers per question to improve evaluation reliability. For evaluation, questions with a human F1 score lower than 40 are not used, as manual inspection revealed lower quality below this threshold."
45
+ },
46
+ "methodology": {
47
+ "methods": [
48
+ "Models predict a text span to answer a question about a Wikipedia section, given a dialog history of previous questions and answers.",
49
+ "The evaluation uses a reading comprehension architecture extended to model dialog context."
50
+ ],
51
+ "metrics": [
52
+ "Word-level F1"
53
+ ],
54
+ "calculation": "Precision and recall are computed over overlapping words after removing stopwords. For 'no answer' questions, F1 is 1 if correctly predicted and 0 otherwise. The maximum F1 among all references is computed for each question.",
55
+ "interpretation": "Higher F1 scores indicate better performance. The best model underperforms humans by 20 F1, indicating significant room for improvement.",
56
+ "baseline_results": "Paper baselines: The best model underperforms humans by 20 F1, but specific model names and scores are not provided. EEE results: Anthropic-LM v4-s3 52B achieves an F1 score of 0.431.",
57
+ "validation": "Quality assurance includes using multiple references for development and test questions, filtering out questions with low human F1 scores, and manual inspection of low-quality annotations."
58
+ },
59
+ "ethical_and_legal_considerations": {
60
+ "privacy_and_anonymity": "Not specified",
61
+ "data_licensing": "MIT License",
62
+ "consent_procedures": "Dialogs were created by two crowd workers, but the specific compensation or platform details are not provided in the paper.",
63
+ "compliance_with_regulations": "Not specified"
64
+ },
65
+ "possible_risks": [
66
+ {
67
+ "category": "Over- or under-reliance",
68
+ "description": [
69
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
70
+ ],
71
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
72
+ },
73
+ {
74
+ "category": "Unrepresentative data",
75
+ "description": [
76
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
77
+ ],
78
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
79
+ },
80
+ {
81
+ "category": "Uncertain data provenance",
82
+ "description": [
83
+ "Data provenance refers to the traceability of data (including synthetic data), which includes its ownership, origin, transformations, and generation. Proving that the data is the same as the original source with correct usage terms is difficult without standardized methods for verifying data sources or generation."
84
+ ],
85
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-provenance.html"
86
+ },
87
+ {
88
+ "category": "Data bias",
89
+ "description": [
90
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
91
+ ],
92
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
93
+ },
94
+ {
95
+ "category": "Lack of data transparency",
96
+ "description": [
97
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
98
+ ],
99
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
100
+ }
101
+ ],
102
+ "flagged_fields": {},
103
+ "missing_fields": [
104
+ "purpose_and_intended_users.audience",
105
+ "purpose_and_intended_users.out_of_scope_uses",
106
+ "ethical_and_legal_considerations.privacy_and_anonymity",
107
+ "ethical_and_legal_considerations.compliance_with_regulations"
108
+ ],
109
+ "card_info": {
110
+ "created_at": "2026-03-17T13:45:24.009083",
111
+ "llm": "deepseek-ai/DeepSeek-V3.2"
112
+ }
113
+ }
114
+ }
metadata/benchmark_card_WildBench.json ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "benchmark_card": {
3
+ "benchmark_details": {
4
+ "name": "WildBench",
5
+ "overview": "WildBench is a benchmark that measures the performance of large language models on challenging, open-ended tasks derived from real-world user queries. It consists of 1,024 tasks selected from human-chatbot conversation logs. Its distinctive features include using a natural distribution of real user queries and employing automated evaluation with two novel metrics, WB-Reward and WB-Score, which utilize task-specific checklists and structured explanations.",
6
+ "data_type": "tabular, text",
7
+ "domains": [
8
+ "Info Seeking",
9
+ "Math & Data",
10
+ "Reasoning & Planning",
11
+ "Creative Tasks"
12
+ ],
13
+ "languages": [
14
+ "English"
15
+ ],
16
+ "similar_benchmarks": [
17
+ "AlpacaEval",
18
+ "ArenaHard",
19
+ "MT-bench",
20
+ "Chatbot Arena"
21
+ ],
22
+ "resources": [
23
+ "https://arxiv.org/abs/2406.04770",
24
+ "https://huggingface.co/datasets/allenai/WildBench",
25
+ "https://huggingface.co/spaces/allenai/WildBench",
26
+ "https://storage.googleapis.com/crfm-helm-public/capabilities/benchmark_output/releases/v1.15.0/groups/core_scenarios.json"
27
+ ]
28
+ },
29
+ "purpose_and_intended_users": {
30
+ "goal": "To provide a realistic, automated, and cost-effective evaluation framework for large language models that reflects their capabilities on challenging, real-world user tasks. It aims to be contamination-resilient and dynamically updated.",
31
+ "audience": [
32
+ "Researchers and practitioners evaluating large language models"
33
+ ],
34
+ "tasks": [
35
+ "Open-ended text generation in response to diverse user queries"
36
+ ],
37
+ "limitations": "The benchmark acknowledges a common issue in LLM-as-a-judge evaluations: bias towards longer outputs. It introduces a length-penalty method to mitigate this.",
38
+ "out_of_scope_uses": [
39
+ "Not specified"
40
+ ]
41
+ },
42
+ "data": {
43
+ "source": "The data is derived from real user-chatbot conversation logs collected by the AI2 WildChat project. Over one million logs were filtered to create the benchmark.",
44
+ "size": "The benchmark contains 1,024 tasks. A separate 'v2-hard' configuration contains 256 examples. The dataset falls into the size category of 1K to 10K examples.",
45
+ "format": "The data is stored in Parquet format.",
46
+ "annotation": "Human annotation was used for quality control. GPT-4-Turbo assisted by summarizing query intents to help human reviewers filter out nonsensical tasks. Human reviewers manually assessed tasks to ensure they were challenging, diverse, and that associated checklist questions were clear. The final set of tasks was retained after this process. Each example includes fine-grained annotations such as task types and checklists for evaluating response quality."
47
+ },
48
+ "methodology": {
49
+ "methods": [
50
+ "Models are evaluated automatically using LLM-as-a-judge, with GPT-4-turbo as the evaluator. The evaluation is not fine-tuning-based and appears to be zero-shot or prompted.",
51
+ "The evaluation uses length-penalized pairwise comparisons and individual scoring to prevent bias towards longer outputs."
52
+ ],
53
+ "metrics": [
54
+ "WB-Reward (for pairwise comparisons)",
55
+ "WB-Score (for individual scoring)",
56
+ "WB-Elo (for leaderboard ranking, merging WB-Reward and WB-Score)"
57
+ ],
58
+ "calculation": "WB-Reward compares a test model against three baseline models of varying performance, producing outcomes of 'much better', 'slightly better', 'tie', 'slightly worse', or 'much worse'. A length penalty converts 'slightly better/worse' to 'tie' if the winner's response is excessively longer. WB-Score evaluates individual model outputs. WB-Elo merges the pairwise comparisons from WB-Reward and WB-Score to perform Elo rating updates.",
59
+ "interpretation": "Higher scores on WB-Reward and WB-Score indicate better performance. Strong performance is validated by a high correlation with human-voted Elo ratings from Chatbot Arena, with WB-Reward achieving a Pearson correlation of 0.98 and WB-Score reaching 0.95.",
60
+ "baseline_results": "Paper baselines: The paper reports results for 40 LLMs but does not list specific scores. It notes that using Haiku as a baseline yields the best correlation with human ratings. EEE results: OLMo 2 32B Instruct March 2025 scored 0.7340 on WildBench.",
61
+ "validation": "The evaluation metrics are validated by their strong correlation with human-voted Elo ratings from Chatbot Arena on hard tasks. Checklist questions used in the evaluation were manually verified for clarity and relevance."
62
+ },
63
+ "ethical_and_legal_considerations": {
64
+ "privacy_and_anonymity": "Not specified",
65
+ "data_licensing": "The dataset is made available under a CC BY license, intended for research and educational use in accordance with AI2's Responsible Use Guidelines.",
66
+ "consent_procedures": "Not specified",
67
+ "compliance_with_regulations": "Not specified"
68
+ },
69
+ "possible_risks": [
70
+ {
71
+ "category": "Over- or under-reliance",
72
+ "description": [
73
+ "In AI-assisted decision-making tasks, reliance measures how much a person trusts (and potentially acts on) a model's output. Over-reliance occurs when a person puts too much trust in a model, accepting a model's output when the model's output is likely incorrect. Under-reliance is the opposite, where the person doesn't trust the model but should."
74
+ ],
75
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/over-or-under-reliance.html"
76
+ },
77
+ {
78
+ "category": "Unrepresentative data",
79
+ "description": [
80
+ "Unrepresentative data occurs when the training or fine-tuning data is not sufficiently representative of the underlying population or does not measure the phenomenon of interest. Synthetic data might not fully capture the complexity and nuances of real-world data. Causes include possible limitations in the seed data quality, biases in generation methods, or inadequate domain knowledge. Thus, AI models might struggle to generalize effectively to real-world scenarios."
81
+ ],
82
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/unrepresentative-data.html"
83
+ },
84
+ {
85
+ "category": "Data bias",
86
+ "description": [
87
+ "Historical and societal biases might be present in data that are used to train and fine-tune models. Biases can also be inherited from seed data or exacerbated by synthetic data generation methods."
88
+ ],
89
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-bias.html"
90
+ },
91
+ {
92
+ "category": "Data contamination",
93
+ "description": [
94
+ "Data contamination occurs when incorrect data is used for training. For example, data that is not aligned with model's purpose or data that is already set aside for other development tasks such as testing and evaluation."
95
+ ],
96
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/data-contamination.html"
97
+ },
98
+ {
99
+ "category": "Lack of data transparency",
100
+ "description": [
101
+ "Lack of data transparency might be due to insufficient documentation of training or tuning dataset details, including synthetic data generation.\u00a0"
102
+ ],
103
+ "url": "https://www.ibm.com/docs/en/watsonx/saas?topic=SSYOK8/wsj/ai-risk-atlas/lack-of-data-transparency.html"
104
+ }
105
+ ],
106
+ "flagged_fields": {},
107
+ "missing_fields": [
108
+ "purpose_and_intended_users.out_of_scope_uses",
109
+ "ethical_and_legal_considerations.privacy_and_anonymity",
110
+ "ethical_and_legal_considerations.consent_procedures",
111
+ "ethical_and_legal_considerations.compliance_with_regulations"
112
+ ],
113
+ "card_info": {
114
+ "created_at": "2026-03-17T13:56:24.159440",
115
+ "llm": "deepseek-ai/DeepSeek-V3.2"
116
+ }
117
+ }
118
+ }