kirby44 commited on
Commit
c189142
·
verified ·
1 Parent(s): cb839ca

Hub index, coverage matrix, config-check reports, and a Professional-runs log viewer

Browse files
.gitattributes CHANGED
@@ -33,3 +33,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ viewer/logs/professional__deepseek-v4-pro__2026-07-25-cached.eval filter=lfs diff=lfs merge=lfs -text
37
+ viewer/logs/professional__deepseek-v4-pro__2026-08-06.eval filter=lfs diff=lfs merge=lfs -text
38
+ viewer/logs/professional__gpt-5.5__2026-07-24.eval filter=lfs diff=lfs merge=lfs -text
39
+ viewer/logs/professional__medgemma-27b__2026-07-24.eval filter=lfs diff=lfs merge=lfs -text
40
+ viewer/logs/professional__medgemma-4b__2026-07-25.eval filter=lfs diff=lfs merge=lfs -text
41
+ viewer/logs/professional__opus-4.7__2026-07-24.eval filter=lfs diff=lfs merge=lfs -text
42
+ viewer/logs/professional__plamo-3.0-prime__2026-07-24.eval filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,10 +1,70 @@
1
  ---
2
- title: Healthbench Eval Logs
3
- emoji: 💻
4
- colorFrom: green
5
  colorTo: red
6
  sdk: static
7
  pinned: false
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: HealthBench Eval Logs
3
+ emoji: 🩺
4
+ colorFrom: gray
5
  colorTo: red
6
  sdk: static
7
  pinned: false
8
+ short_description: 68 Inspect eval logs, 6 models, 8 HealthBench variants
9
  ---
10
 
11
+ # HealthBench eval logs
12
+
13
+ Every HealthBench run we have, as Inspect `.eval` logs, in one browsable place.
14
+
15
+ **6 models** GPT-5.5, Claude Opus 4.7, DeepSeek-V4-Pro, PLaMo-3.0-Prime, MedGemma-27B-text-it, MedGemma-4B-it
16
+ **8 benches** HealthBench full / consensus / hard, and Professional plus its four use-case slices (consult, writing, research, red-teaming)
17
+ **68 logs**, 2.3 GB, runs dated 2026-07-09 to 2026-08-06
18
+
19
+ ## Layout
20
+
21
+ | Path | What it is |
22
+ |---|---|
23
+ | `index.html` | Start here. Every log in a filterable table with direct download links. |
24
+ | `viewer/` | The Inspect log viewer, all 68 logs loaded. Click into samples and judge verdicts. |
25
+ | `viewer/logs/*.eval` | The raw logs. Named `<bench>__<model>__<date>.eval`. |
26
+ | `matrix.html` | Model x bench coverage matrix: what is complete, what is off-config, what is missing. |
27
+ | `config-check-v2.html` | Do our numbers reproduce OpenAI's published results? |
28
+ | `config-check-v1.html` | Earlier pass, superseded by v2, kept for history. |
29
+ | `data/log_mapping.csv` | Maps each renamed log back to its original space and filename. |
30
+ | `data/MANIFEST.csv` | Per-run header dump: judge, epochs, token counts, package versions. |
31
+ | `data/headers_raw.json` | The same, unflattened. |
32
+ | `data/INDEX.md` | Short version of the traps list. |
33
+
34
+ ## Reading a log directly
35
+
36
+ ```python
37
+ from inspect_ai.log import read_eval_log
38
+
39
+ log = read_eval_log("professional__gpt-5.5__2026-07-24.eval")
40
+ print(log.eval.model, log.results.scores[0].metrics["mean"].value)
41
+ ```
42
+
43
+ Or fetch one without cloning the whole Space:
44
+
45
+ ```
46
+ https://huggingface.co/spaces/kirby44/healthbench-eval-logs/resolve/main/viewer/logs/<filename>.eval
47
+ ```
48
+
49
+ ## Four things that will bite you
50
+
51
+ 1. **The judge is not constant.** `gpt-4o-mini` on hard and consensus, `gpt-4.1` on full and the
52
+ Aug-05 MedGemma re-runs, `gpt-5.4` on all Professional. Swapping the judge moves a score by up to
53
+ 14 points, and not always in the same direction. Only compare runs that share a judge.
54
+ 2. **Professional epochs are inconsistent.** 8 for most models, 1 for DeepSeek.
55
+ 3. **In-log subset metrics are wrong.** `use_case_*_score`, `specialty_*_score`,
56
+ `difficulty_*_score` and `source_slice_*_score` discard the length adjustment and clip each
57
+ sample to [0,1] before averaging. Errors reach +32 points, always upward. Use the standalone
58
+ `professional-*` logs for the use-case slices; re-aggregate the other axes from per-sample scores.
59
+ 4. **`cache=true` on every run.** A `-replay` or `-cached` suffix in the filename means responses
60
+ came from Inspect's cache. An empty `stats.model_usage` is a replay, not a run.
61
+
62
+ The pipeline itself is validated: the Professional physician baseline lands at 43.9 against OpenAI's
63
+ published 43.7.
64
+
65
+ ## Provenance
66
+
67
+ Runs executed by Ajay (`ajay-citadel`) between 2026-07-09 and 2026-08-06, originally published as ten
68
+ separate Spaces. This Space consolidates them into one viewer, renames the logs so the config is
69
+ legible from the filename, and adds the provenance classification the raw logs do not carry. The logs
70
+ are byte-identical to the originals; `data/log_mapping.csv` maps every file back to its source.
config-check-v1.html ADDED
@@ -0,0 +1,699 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <link rel="icon" href="favicon.svg">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>HealthBench config check: our four spaces vs OpenAI's published numbers</title>
8
+ <style>
9
+ :root{
10
+ --ivory:#FAF9F5; --slate:#141413; --gray-700:#3D3D3A; --gray-500:#87867F;
11
+ --gray-300:#D1CFC5; --gray-150:#F0EEE6; --clay:#D97757; --oat:#E3DACC;
12
+ --olive:#788C5D;
13
+ }
14
+ *{box-sizing:border-box}
15
+ html{scroll-behavior:smooth}
16
+ body{
17
+ margin:0; background:var(--ivory); color:var(--gray-700);
18
+ font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
19
+ font-size:15px; line-height:1.65; padding:56px 24px 120px;
20
+ }
21
+ .page{max-width:1100px; margin:0 auto; display:grid;
22
+ grid-template-columns:200px minmax(0,1fr); gap:48px}
23
+ h1,h2,h3,dt{font-family:ui-serif,Georgia,"Times New Roman",serif; font-weight:500; color:var(--slate)}
24
+ h1{font-size:32px; line-height:1.2; margin:0}
25
+ h2{font-size:22px; margin:40px 0 12px; scroll-margin-top:24px}
26
+ h3{font-size:17px; margin:26px 0 8px}
27
+ p{max-width:680px}
28
+ a{color:inherit}
29
+ code{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace; font-size:13px}
30
+ .eyebrow{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
31
+ text-transform:uppercase; letter-spacing:.08em; font-size:11px; color:var(--gray-500); margin:0 0 14px}
32
+ .dateline{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace; font-size:11px; color:var(--gray-500); margin-top:10px}
33
+ header{margin-bottom:8px}
34
+ nav{position:sticky; top:32px; align-self:start; font-size:13px}
35
+ nav .navlinks{display:flex; flex-direction:column; border-left:2px solid var(--gray-300)}
36
+ nav a{display:block; padding:5px 0 5px 14px; margin-left:-2px;
37
+ border-left:2px solid transparent; color:var(--gray-700); text-decoration:none}
38
+ nav a:hover{border-left-color:var(--slate); color:var(--slate)}
39
+ nav a.l2{padding-left:26px; font-size:12px; color:var(--gray-500)}
40
+ nav .files{margin-top:22px}
41
+ nav .files .lbl{font-family:ui-monospace,Menlo,monospace; font-size:10px; text-transform:uppercase;
42
+ letter-spacing:.08em; color:var(--gray-500); margin-bottom:6px}
43
+ nav .files code{display:block; font-size:11px; color:var(--gray-500); word-break:break-all; margin-bottom:4px}
44
+ table{border-collapse:collapse; width:100%; max-width:860px; margin:14px 0; font-size:13.5px}
45
+ th,td{text-align:left; padding:8px 12px; border-bottom:1px solid var(--gray-300)}
46
+ th{font-family:ui-monospace,Menlo,monospace; font-size:11px; text-transform:uppercase;
47
+ letter-spacing:.05em; color:var(--gray-500); font-weight:600; border-bottom:1.5px solid var(--gray-300)}
48
+ td.num{font-family:ui-monospace,Menlo,monospace; text-align:right}
49
+ tr.ours{background:rgba(217,119,87,.09)}
50
+ tr.ours td{font-weight:600; color:var(--slate)}
51
+ tr.human td{color:var(--gray-500); font-style:italic}
52
+ .tag{font-family:ui-monospace,Menlo,monospace; font-size:10px; padding:1px 6px; border-radius:4px;
53
+ border:1px solid var(--gray-300); color:var(--gray-500); white-space:nowrap}
54
+ .tag.same{border-color:var(--olive); color:var(--olive)}
55
+ .tag.diff{border-color:var(--clay); color:var(--clay)}
56
+ .callout{border:1.5px solid var(--oat); background:rgba(227,218,204,.35); border-radius:10px;
57
+ padding:16px 18px; margin:20px 0; max-width:800px; display:flex; gap:14px}
58
+ .callout .star{color:var(--clay); font-size:18px; line-height:1.4}
59
+ .callout .ct{font-size:14px}
60
+ .callout .ct b{color:var(--slate)}
61
+ details{background:#fff; border:1px solid var(--gray-300); border-radius:10px; margin:10px 0; max-width:860px}
62
+ summary{cursor:pointer; padding:12px 16px; font-family:ui-serif,Georgia,serif; font-size:15px;
63
+ color:var(--slate); list-style:none; display:flex; align-items:center; gap:10px}
64
+ summary::-webkit-details-marker{display:none}
65
+ summary::before{content:"\25B8"; color:var(--clay); transition:transform .15s; font-size:13px}
66
+ details[open] summary::before{transform:rotate(90deg)}
67
+ summary .where{margin-left:auto; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:var(--gray-500)}
68
+ details .body{padding:2px 16px 14px; font-size:14px}
69
+ details .body p{margin:8px 0}
70
+ details .body pre{background:var(--gray-150); border-radius:6px; padding:12px 14px; overflow-x:auto;
71
+ font-family:ui-monospace,Menlo,monospace; font-size:12px; line-height:1.5; margin:10px 0}
72
+ .hl{color:var(--clay)}
73
+ .ok{color:var(--olive); font-weight:600}
74
+ .warn{color:var(--clay); font-weight:600}
75
+ .bad{color:#B0533A; font-weight:600}
76
+ .muted{color:var(--gray-500)}
77
+ .note{font-size:12.5px; color:var(--gray-500); max-width:800px}
78
+ .ladder{display:grid; grid-template-columns:repeat(auto-fill,minmax(184px,1fr)); gap:7px; max-width:800px; margin:14px 0}
79
+ .chip{font-family:ui-monospace,Menlo,monospace; font-size:10.5px; border:1px solid var(--gray-300);
80
+ border-radius:6px; padding:6px 9px; color:var(--gray-500)}
81
+ .chip.hit{border-color:var(--olive); background:rgba(120,140,93,.10); color:var(--slate); font-weight:600}
82
+ .chip.miss{border-color:var(--clay); background:rgba(217,119,87,.08); color:var(--slate); font-weight:600}
83
+ .ladder-legend{font-family:ui-monospace,Menlo,monospace; font-size:10.5px; color:var(--gray-500); margin-top:6px}
84
+ .cmp-chart{width:100%; max-width:760px; height:auto; margin:10px 0 4px; font-family:system-ui}
85
+ .tc-ax{font-size:11px; fill:var(--gray-500); font-family:ui-monospace,Menlo,monospace}
86
+ .tc-ml{font-size:11px; fill:var(--slate); font-family:ui-monospace,Menlo,monospace}
87
+ .tc-lg{font-size:11px; fill:var(--gray-700)}
88
+ .tc-val{font-size:10px; fill:var(--slate); font-family:ui-monospace,Menlo,monospace}
89
+ .tc-dl{font-size:10.5px; font-family:ui-monospace,Menlo,monospace; font-weight:600}
90
+ @media (max-width:920px){
91
+ .page{grid-template-columns:1fr}
92
+ nav{display:none}
93
+ }
94
+ </style>
95
+
96
+ <style id="hbnav-css">
97
+ .hbnav{position:sticky;top:0;z-index:50;display:flex;flex-wrap:wrap;align-items:center;gap:4px;
98
+ padding:8px 16px;margin:-56px -24px 40px;background:rgba(250,249,245,.94);
99
+ backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid #D1CFC5;
100
+ font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-size:11.5px}
101
+ .hbnav .home{color:#87867F;margin-right:6px;text-decoration:none}
102
+ .hbnav .home:hover{color:#141413}
103
+ .hbnav a.pill{color:#3D3D3A;text-decoration:none;padding:3px 9px;border:1px solid #D1CFC5;border-radius:6px}
104
+ .hbnav a.pill:hover{border-color:#D97757;color:#141413}
105
+ .hbnav a.pill.here{background:#141413;border-color:#141413;color:#FAF9F5}
106
+ .hbnav .sp{flex:1}
107
+ @media(max-width:640px){.hbnav{margin:-56px -24px 28px}}
108
+ </style>
109
+ </head>
110
+ <body>
111
+ <div class="hbnav"><a class="home" href="index.html">&#8592; HealthBench logs</a><a class="pill" href="matrix.html">Coverage matrix</a><a class="pill" href="config-check-v2.html">Config check v2</a><a class="pill here" href="config-check-v1.html">Config check v1</a><span class="sp"></span><a class="pill" href="viewer/index.html">Log viewer &rarr;</a></div>
112
+ <div class="page">
113
+ <nav>
114
+ <div class="navlinks">
115
+ <a href="#summary">Summary</a>
116
+ <a href="#anchor">The anchor check</a>
117
+ <a href="#baseline" class="l2">Physician baseline</a>
118
+ <a href="#config">Config matrix</a>
119
+ <a href="#judge">Issue 1: judge model</a>
120
+ <a href="#effort">Issue 2: reasoning effort</a>
121
+ <a href="#headline">Issue 3: headline metric</a>
122
+ <a href="#subscores">Issue 4: subscore clipping</a>
123
+ <a href="#floored">Issue 5: floored zeros</a>
124
+ <a href="#hygiene">Run hygiene</a>
125
+ <a href="#fixes">What to change</a>
126
+ <a href="#full">Full results</a>
127
+ <a href="#method">How this was checked</a>
128
+ </div>
129
+ <div class="files">
130
+ <div class="lbl">Run artifacts</div>
131
+ <code>hb-spaces/hs-non-professional/logs/</code>
132
+ <code>hb-spaces/hs-hard/logs/</code>
133
+ <code>hb-spaces/hs-consensus/logs/</code>
134
+ <code>hb-spaces/hs-prof-subsets/logs/</code>
135
+ <div class="lbl" style="margin-top:14px">Reference</div>
136
+ <code>arXiv:2505.08775 (HealthBench)</code>
137
+ <code>arXiv:2604.27470 (Professional)</code>
138
+ <code>GPT-5.6 system card, Table 6</code>
139
+ <code>openai/simple-evals</code>
140
+ </div>
141
+ </nav>
142
+
143
+ <main>
144
+ <header>
145
+ <p class="eyebrow">HealthBench &middot; config sanity check</p>
146
+ <h1>HealthBench config check: our four spaces vs OpenAI's published numbers</h1>
147
+ <div class="dateline">Created 2026-07-27</div>
148
+ </header>
149
+
150
+ <section id="summary">
151
+ <p>
152
+ We have a real anchor for this check: OpenAI's GPT-5.6 system card publishes <b>gpt-5.5 scores for all four
153
+ HealthBench variants</b>, and gpt-5.5 is one of the models we ran. Lining our numbers up against theirs
154
+ gives a per-variant verdict rather than a guess.
155
+ </p>
156
+ <p>
157
+ The result splits cleanly. <b>The two spaces where we used the correct grader reproduce OpenAI within a
158
+ point.</b> The full HealthBench run lands at <b>55.8</b> against their <b>56.5</b>, and our HealthBench
159
+ Professional physician baseline lands at <b>43.87</b> against their published <b>43.7</b>. That is close
160
+ enough to say the dataset, prompting, rubric scoring, length adjustment and aggregation are all wired up
161
+ right.
162
+ </p>
163
+ <p>
164
+ <b>The two spaces where we used the wrong grader are badly off.</b> HealthBench Hard is <b>5.5 points low</b>
165
+ and HealthBench Consensus is <b>13.6 points low</b>. Both were graded by <code>gpt-4o-mini</code> instead of
166
+ GPT-4.1, not by choice but because the <code>inspect_evals</code> task wrappers for those two variants do not
167
+ expose a <code>judge_model</code> argument and silently fall back to the package default. Consensus is the
168
+ loudest signal: every frontier model in OpenAI's table sits in a 94 to 96 band, and ours sits at 82.
169
+ </p>
170
+ <p>
171
+ A separate, smaller gap shows up on the inference side. Our gpt-5.5 Professional score is <b>4 points below</b>
172
+ OpenAI's, even though the grader is correct there. The physician baseline matching to 0.2 points rules out
173
+ the grading pipeline, which points the finger at <b>reasoning effort</b>: we pass none, while OpenAI evaluates
174
+ "at the highest reasoning effort option available via each model's API." Claude was run with extended thinking
175
+ off entirely.
176
+ </p>
177
+
178
+ <div class="callout">
179
+ <span class="star">&#9733;</span>
180
+ <span class="ct"><b>The one-line verdict.</b> The scoring machinery is correct and provably so. The
181
+ configuration around it is not: two variants use a mini-tier grader, no run sets reasoning effort, and three
182
+ of the four spaces show the unadjusted score as the headline where OpenAI shows the length-adjusted one.
183
+ None of this requires re-implementing anything, only re-running with four flags set.</span>
184
+ </div>
185
+ </section>
186
+
187
+ <section id="anchor">
188
+ <h2>The anchor check</h2>
189
+ <p>
190
+ All numbers are the <b>length-adjusted score on the 0 to 100 scale</b>, which is what OpenAI reports as the
191
+ primary metric. Their figures come from the GPT-5.6 system card Table 6, given as
192
+ <code>length-adjusted (unadjusted, mean chars)</code>. Ours are recomputed from the downloaded
193
+ <code>.eval</code> logs.
194
+ </p>
195
+
196
+ <svg viewBox="0 0 760 430" xmlns="http://www.w3.org/2000/svg" class="cmp-chart" role="img"
197
+ aria-label="gpt-5.5 length-adjusted scores, OpenAI published versus our runs, across five checks">
198
+ <line x1="60" y1="40" x2="60" y2="340" stroke="#141413" stroke-width="1"/>
199
+ <line x1="60" y1="340" x2="740" y2="340" stroke="#141413" stroke-width="1"/>
200
+ <line x1="60" y1="280" x2="740" y2="280" stroke="#F0EEE6" stroke-width="1"/>
201
+ <line x1="60" y1="220" x2="740" y2="220" stroke="#F0EEE6" stroke-width="1"/>
202
+ <line x1="60" y1="160" x2="740" y2="160" stroke="#F0EEE6" stroke-width="1"/>
203
+ <line x1="60" y1="100" x2="740" y2="100" stroke="#F0EEE6" stroke-width="1"/>
204
+ <line x1="60" y1="40" x2="740" y2="40" stroke="#F0EEE6" stroke-width="1"/>
205
+ <text x="52" y="343.5" text-anchor="end" class="tc-ax">0</text>
206
+ <text x="52" y="283.5" text-anchor="end" class="tc-ax">20</text>
207
+ <text x="52" y="223.5" text-anchor="end" class="tc-ax">40</text>
208
+ <text x="52" y="163.5" text-anchor="end" class="tc-ax">60</text>
209
+ <text x="52" y="103.5" text-anchor="end" class="tc-ax">80</text>
210
+ <text x="52" y="43.5" text-anchor="end" class="tc-ax">100</text>
211
+
212
+ <!-- group 0: physician baseline -->
213
+ <rect x="88" y="208.9" width="40" height="131.1" fill="#87867F"/>
214
+ <rect x="132" y="208.4" width="40" height="131.6" fill="#D97757"/>
215
+ <text x="108" y="203" text-anchor="middle" class="tc-val">43.7</text>
216
+ <text x="152" y="203" text-anchor="middle" class="tc-val">43.9</text>
217
+ <text x="130" y="358" text-anchor="middle" class="tc-ml">Physician</text>
218
+ <text x="130" y="372" text-anchor="middle" class="tc-ml">baseline</text>
219
+ <text x="130" y="390" text-anchor="middle" class="tc-dl" fill="#788C5D">+0.2</text>
220
+
221
+ <!-- group 1: professional -->
222
+ <rect x="224" y="184.6" width="40" height="155.4" fill="#87867F"/>
223
+ <rect x="268" y="196.6" width="40" height="143.4" fill="#D97757"/>
224
+ <text x="244" y="178.6" text-anchor="middle" class="tc-val">51.8</text>
225
+ <text x="288" y="190.6" text-anchor="middle" class="tc-val">47.8</text>
226
+ <text x="266" y="358" text-anchor="middle" class="tc-ml">Professional</text>
227
+ <text x="266" y="372" text-anchor="middle" class="tc-ax">grader ok</text>
228
+ <text x="266" y="390" text-anchor="middle" class="tc-dl" fill="#D97757">&minus;4.0</text>
229
+
230
+ <!-- group 2: healthbench full -->
231
+ <rect x="360" y="170.5" width="40" height="169.5" fill="#87867F"/>
232
+ <rect x="404" y="172.5" width="40" height="167.5" fill="#D97757"/>
233
+ <text x="380" y="164.5" text-anchor="middle" class="tc-val">56.5</text>
234
+ <text x="424" y="166.5" text-anchor="middle" class="tc-val">55.8</text>
235
+ <text x="402" y="358" text-anchor="middle" class="tc-ml">HealthBench</text>
236
+ <text x="402" y="372" text-anchor="middle" class="tc-ax">grader ok</text>
237
+ <text x="402" y="390" text-anchor="middle" class="tc-dl" fill="#788C5D">&minus;0.7</text>
238
+
239
+ <!-- group 3: hard -->
240
+ <rect x="496" y="245.5" width="40" height="94.5" fill="#87867F"/>
241
+ <rect x="540" y="261.9" width="40" height="78.1" fill="#D97757"/>
242
+ <text x="516" y="239.5" text-anchor="middle" class="tc-val">31.5</text>
243
+ <text x="560" y="255.9" text-anchor="middle" class="tc-val">26.0</text>
244
+ <text x="538" y="358" text-anchor="middle" class="tc-ml">Hard</text>
245
+ <text x="538" y="372" text-anchor="middle" class="tc-ax">wrong grader</text>
246
+ <text x="538" y="390" text-anchor="middle" class="tc-dl" fill="#B0533A">&minus;5.5</text>
247
+
248
+ <!-- group 4: consensus -->
249
+ <rect x="632" y="53.2" width="40" height="286.8" fill="#87867F"/>
250
+ <rect x="676" y="93.9" width="40" height="246.1" fill="#D97757"/>
251
+ <text x="652" y="47.2" text-anchor="middle" class="tc-val">95.6</text>
252
+ <text x="696" y="87.9" text-anchor="middle" class="tc-val">82.0</text>
253
+ <text x="674" y="358" text-anchor="middle" class="tc-ml">Consensus</text>
254
+ <text x="674" y="372" text-anchor="middle" class="tc-ax">wrong grader</text>
255
+ <text x="674" y="390" text-anchor="middle" class="tc-dl" fill="#B0533A">&minus;13.6</text>
256
+
257
+ <rect x="60" y="408" width="12" height="12" fill="#87867F"/>
258
+ <text x="78" y="418" class="tc-lg">OpenAI published</text>
259
+ <rect x="200" y="408" width="12" height="12" fill="#D97757"/>
260
+ <text x="218" y="418" class="tc-lg">our run</text>
261
+ <text x="320" y="418" class="tc-ax">gpt-5.5, length-adjusted score (0 to 100)</text>
262
+ </svg>
263
+
264
+ <table>
265
+ <thead><tr><th>Check</th><th>Grader used</th><th class="num">OpenAI adj</th><th class="num">ours adj</th><th class="num">&Delta;</th><th class="num">OpenAI raw</th><th class="num">ours raw</th><th class="num">OpenAI chars</th><th class="num">ours chars</th></tr></thead>
266
+ <tbody>
267
+ <tr><td>Physician baseline (Prof)</td><td><span class="tag same">gpt-5.4 low</span></td><td class="num">43.7</td><td class="num">43.87</td><td class="num" style="color:#788C5D">+0.2</td><td class="num muted">n/a</td><td class="num">44.29</td><td class="num muted">n/a</td><td class="num muted">n/a</td></tr>
268
+ <tr><td>HealthBench (full)</td><td><span class="tag same">gpt-4.1</span></td><td class="num">56.5</td><td class="num">55.83</td><td class="num" style="color:#788C5D">&minus;0.7</td><td class="num">58.4</td><td class="num">56.87</td><td class="num">2313</td><td class="num">2175</td></tr>
269
+ <tr><td>HealthBench Professional</td><td><span class="tag same">gpt-5.4 low</span></td><td class="num">51.8</td><td class="num">47.81</td><td class="num" style="color:#D97757">&minus;4.0</td><td class="num">57.2</td><td class="num muted">n/a</td><td class="num">3818</td><td class="num">3748</td></tr>
270
+ <tr><td>HealthBench Hard</td><td><span class="tag diff">gpt-4o-mini</span></td><td class="num">31.5</td><td class="num">26.03</td><td class="num" style="color:#B0533A">&minus;5.5</td><td class="num">33.8</td><td class="num">27.27</td><td class="num">2289</td><td class="num">2158</td></tr>
271
+ <tr><td>HealthBench Consensus</td><td><span class="tag diff">gpt-4o-mini</span></td><td class="num">95.6</td><td class="num">82.02</td><td class="num" style="color:#B0533A">&minus;13.6</td><td class="num">95.7</td><td class="num">82.08</td><td class="num">2259</td><td class="num">2143</td></tr>
272
+ </tbody>
273
+ </table>
274
+ <p class="note">
275
+ Our Professional overall is a sample-weighted mean of the three use-case subsets (consult 236, writing 142,
276
+ research 147, total 525), since we ran them as separate tasks rather than one benchmark. Red teaming is a
277
+ cross-cutting slice of those same 525 examples, not a fourth use case, so it is excluded from the weighting.
278
+ </p>
279
+ <p>
280
+ Two things worth noticing beyond the scores. First, <b>mean response lengths track closely</b> (2175 vs 2313,
281
+ 2158 vs 2289, 2143 vs 2259, 3748 vs 3818), consistently about 5% shorter but never structurally different.
282
+ Since length is the one output property that would move if our prompting or harness diverged, this is good
283
+ evidence the request side is faithful. Second, the two <span class="tag same">correct grader</span> rows and
284
+ the two <span class="tag diff">wrong grader</span> rows separate perfectly, which is what makes the diagnosis
285
+ confident rather than speculative.
286
+ </p>
287
+
288
+ <h3 id="baseline">The physician baseline is the cleanest check we have</h3>
289
+ <p>
290
+ HealthBench Professional ships a set of <b>525 physician-written responses</b>. Scoring them involves no model
291
+ inference at all: the responses are fixed text, and the only moving part is the grader plus the aggregation.
292
+ So if our number matches OpenAI's, the entire scoring half of the pipeline is verified, and any remaining
293
+ discrepancy on real models has to live on the inference side.
294
+ </p>
295
+ <table>
296
+ <thead><tr><th>Physician baseline</th><th class="num">OpenAI published</th><th class="num">ours (recomputed)</th><th class="num">&Delta;</th></tr></thead>
297
+ <tbody>
298
+ <tr class="ours"><td>Overall</td><td class="num">43.7</td><td class="num">43.87</td><td class="num">+0.17</td></tr>
299
+ <tr><td>Care consult</td><td class="num">42.7</td><td class="num">42.54</td><td class="num">&minus;0.16</td></tr>
300
+ <tr><td>Writing and documentation</td><td class="num">32.1</td><td class="num">32.91</td><td class="num">+0.81</td></tr>
301
+ <tr><td>Medical research</td><td class="num">56.3</td><td class="num">56.60</td><td class="num">+0.30</td></tr>
302
+ </tbody>
303
+ </table>
304
+ <p class="note">
305
+ Every cell is within a point. Note that the per-use-case rows here are <b>recomputed from per-sample scores</b>,
306
+ not read off the log's own subset metrics, which are inflated for a reason covered in
307
+ <a href="#subscores">issue 4</a>.
308
+ </p>
309
+ <div class="callout">
310
+ <span class="star">&#9733;</span>
311
+ <span class="ct"><b>This is the finding that makes the rest interpretable.</b> Because the judge-only path
312
+ reproduces OpenAI to 0.2 points, the 4-point Professional gap on gpt-5.5 cannot be blamed on the grader,
313
+ the rubric, the length adjustment, or the aggregation. It is an inference-side difference, and reasoning
314
+ effort is the only inference-side knob that differs.</span>
315
+ </div>
316
+ </section>
317
+
318
+ <section id="config">
319
+ <h2>Config matrix</h2>
320
+ <p>What we set against what OpenAI's reference implementation sets, per variant.</p>
321
+ <table>
322
+ <thead><tr><th>Setting</th><th>OpenAI reference</th><th>hs-non-professional</th><th>hs-hard</th><th>hs-consensus</th><th>hs-prof-subsets</th></tr></thead>
323
+ <tbody>
324
+ <tr><td>Grader model</td><td>gpt-4.1 / gpt-5.4 low</td><td><span class="tag same">gpt-4.1</span></td><td><span class="tag diff">gpt-4o-mini</span></td><td><span class="tag diff">gpt-4o-mini</span></td><td><span class="tag same">gpt-5.4 low</span></td></tr>
325
+ <tr><td>Grader system msg</td><td>"You are a helpful assistant."</td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td></tr>
326
+ <tr><td>Length adj. center</td><td>2000 chars</td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td></tr>
327
+ <tr><td>Length adj. penalty</td><td>2.99 / 3.92 / 0.20 / 1.47</td><td><span class="tag same">0.0299</span></td><td><span class="tag same">0.0392</span></td><td><span class="tag same">0.002</span></td><td><span class="tag same">0.0147</span></td></tr>
328
+ <tr><td>Per-sample clipping</td><td>none (mean is clipped)</td><td><span class="tag same">none</span></td><td><span class="tag same">none</span></td><td><span class="tag same">none</span></td><td><span class="tag diff">subscores clipped</span></td></tr>
329
+ <tr><td>Dataset size</td><td>5000 / 1000 / 3671 / 525</td><td><span class="tag same">5000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">3671</span></td><td><span class="tag same">525</span></td></tr>
330
+ <tr><td>Samples per example</td><td>1 (main), 8 (Prof)</td><td><span class="tag same">1</span></td><td><span class="tag same">1</span></td><td><span class="tag same">1</span></td><td><span class="tag same">8</span> <span class="tag diff">1 for deepseek</span></td></tr>
331
+ <tr><td>Reasoning effort</td><td>highest available</td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td></tr>
332
+ <tr><td>Headline metric</td><td>length-adjusted</td><td><span class="tag diff">unadjusted</span></td><td><span class="tag diff">unadjusted</span></td><td><span class="tag diff">unadjusted</span></td><td><span class="tag same">length-adjusted</span></td></tr>
333
+ <tr><td>Bootstrap resamples</td><td>1000</td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td></tr>
334
+ </tbody>
335
+ </table>
336
+ <p class="note">
337
+ The length adjustment is worth calling out as correct-by-verification, not just correct-by-declaration: we
338
+ confirmed the arithmetic per sample against
339
+ <code>score &minus; penalty &times; ((len &minus; center) / 500)</code>, OpenAI's
340
+ <code>calculate_length_adjusted_score</code>. On one Hard sample: raw 0.6102, completion 13,776 chars, giving
341
+ 0.6102 &minus; 0.0392 &times; 23.552 = &minus;0.3131, which is exactly the stored value.
342
+ </p>
343
+ </section>
344
+
345
+ <section id="judge">
346
+ <h2>Issue 1: Hard and Consensus were graded by gpt-4o-mini</h2>
347
+ <p>
348
+ This is the largest error and it was not a deliberate choice. The <code>inspect_evals</code> task wrappers for
349
+ these two variants accept only the length-adjustment arguments and pass nothing else through, so
350
+ <code>judge_model</code> silently keeps the package default of <code>openai/gpt-4o-mini</code>:
351
+ </p>
352
+ <details>
353
+ <summary>The wrapper that drops the judge argument <span class="where">inspect_evals/healthbench/healthbench.py</span></summary>
354
+ <div class="body">
355
+ <pre>def healthbench(
356
+ ...
357
+ judge_model: str | Model = "openai/gpt-4o-mini", <span class="muted"># package default</span>
358
+ ...
359
+ )
360
+
361
+ @task
362
+ def healthbench_hard(
363
+ length_adjustment_center: float | None = None,
364
+ length_adjustment_penalty_per_500_chars: float | None = None,
365
+ ) -&gt; Task:
366
+ return healthbench( <span class="muted"># judge_model never forwarded</span>
367
+ subset="hard",
368
+ length_adjustment_center=length_adjustment_center,
369
+ length_adjustment_penalty_per_500_chars=length_adjustment_penalty_per_500_chars,
370
+ )</pre>
371
+ <p>Our <code>hs-non-professional</code> run passed <code>judge_model: "openai/gpt-4.1"</code> explicitly and got
372
+ it. The Hard and Consensus runs declared no judge at all in <code>task_args</code>, and inspecting the model
373
+ events in the logs confirms every grading call went to <code>gpt-4o-mini-2024-07-18</code>.</p>
374
+ </div>
375
+ </details>
376
+ <p>
377
+ OpenAI never grades any variant with a mini-tier model. In <code>simple_evals.py</code> the same
378
+ <code>healthbench_grading_sampler</code> is handed to <code>healthbench</code>, <code>healthbench_hard</code>
379
+ and <code>healthbench_consensus</code> alike, so all three get GPT-4.1, or all three get GPT-5.4 low when the
380
+ <code>--healthbench-use-gpt-5-4-low-grader</code> flag is set.
381
+ </p>
382
+ <p>
383
+ The HealthBench paper measured what a weaker grader costs. Its meta-evaluation ranks candidate graders by
384
+ agreement with physicians (Macro-F1): <b>GPT-4.1 0.709</b>, o4-mini 0.692, o3 0.681, GPT-4.1 mini 0.661,
385
+ GPT-4.1 nano 0.580, and calls the smaller variants "substantially worse". <code>gpt-4o-mini</code> is not in
386
+ that table but sits below GPT-4.1 mini in capability, so 0.661 is the optimistic bound.
387
+ </p>
388
+ <div class="callout">
389
+ <span class="star">&#9733;</span>
390
+ <span class="ct"><b>Consensus is the smoking gun.</b> OpenAI's Consensus scores are 94 to 96 for every model
391
+ from gpt-5 through gpt-5.6, because the subset is deliberately low-noise and near-saturated. Our whole
392
+ Consensus space sits between <b>71 and 82</b>. That is not our models underperforming, that is the grader
393
+ failing to recognise criteria that a stronger grader marks as met.</span>
394
+ </div>
395
+ </section>
396
+
397
+ <section id="effort">
398
+ <h2>Issue 2: reasoning effort is never set, and the models diverge because of it</h2>
399
+ <p>
400
+ The HealthBench Professional paper states that models are "evaluated at the highest reasoning effort option
401
+ available via each model's API (e.g., xhigh for GPT-5.4)", and measures a <b>5.6 to 7.3 point</b> gain moving
402
+ from low to xhigh. None of our runs pass a reasoning effort, so each provider's default applies, and the
403
+ defaults are not comparable to each other:
404
+ </p>
405
+ <table>
406
+ <thead><tr><th>Model (HealthBench Hard, 1000 samples)</th><th class="num">frac. with reasoning</th><th class="num">mean reasoning tokens</th><th>generate config sent</th></tr></thead>
407
+ <tbody>
408
+ <tr><td>openai/gpt-5.5</td><td class="num">0.97</td><td class="num">291</td><td><code>{cache: true}</code></td></tr>
409
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">0.86</td><td class="num">489</td><td><code>{cache: true}</code></td></tr>
410
+ <tr class="ours"><td>anthropic/claude-opus-4-7</td><td class="num">0.00</td><td class="num">0</td><td><code>{cache: true, max_tokens: 32000}</code></td></tr>
411
+ <tr><td>plamo-3.0-prime</td><td class="num">0.00</td><td class="num">0</td><td><code>{cache: true}</code></td></tr>
412
+ <tr><td>medgemma-4b / 27b</td><td class="num">0.00</td><td class="num">0</td><td><code>{cache: true}</code></td></tr>
413
+ </tbody>
414
+ </table>
415
+ <p>
416
+ Claude ran with <b>extended thinking off on every sample of every log</b>, while gpt-5.5 and DeepSeek reasoned
417
+ by default. Whatever the intended comparison was, this is not it: the reasoning models get their default
418
+ budget and Claude gets none. Claude is the most disadvantaged model in the set for a reason that has nothing
419
+ to do with Claude.
420
+ </p>
421
+ <p>
422
+ This also explains the one gap the grader cannot account for. On Professional, where our grader is correct and
423
+ the physician baseline matches to 0.2 points, gpt-5.5 still lands 4 points low. A default-effort versus
424
+ highest-effort difference of that size is consistent with the 5.6 to 7.3 point low-to-xhigh delta OpenAI
425
+ reports.
426
+ </p>
427
+ </section>
428
+
429
+ <section id="headline">
430
+ <h2>Issue 3: three spaces show the unadjusted score as the headline</h2>
431
+ <p>
432
+ OpenAI reports "length-adjusted score (unadjusted, mean response length in characters)", so the adjusted
433
+ number is the primary one. In our <code>listing.json</code> the <code>primary_metric</code> for
434
+ <code>hs-non-professional</code>, <code>hs-hard</code> and <code>hs-consensus</code> is the
435
+ <b>unadjusted</b> <code>bootstrap_score</code>. Only <code>hs-prof-subsets</code> carries
436
+ <code>use_length_adjusted: true</code>.
437
+ </p>
438
+ <p>
439
+ This is not cosmetic. Length adjustment reorders the Hard leaderboard almost completely, because our models
440
+ differ enormously in verbosity:
441
+ </p>
442
+ <table>
443
+ <thead><tr><th>Model</th><th class="num">mean chars</th><th class="num">raw</th><th class="num">length-adj</th><th class="num">shift</th><th class="num">rank raw</th><th class="num">rank adj</th></tr></thead>
444
+ <tbody>
445
+ <tr><td>anthropic/claude-opus-4-7</td><td class="num">1849</td><td class="num">26.61</td><td class="num">27.80</td><td class="num" style="color:#788C5D">+1.2</td><td class="num">2</td><td class="num">1</td></tr>
446
+ <tr><td>openai/gpt-5.5</td><td class="num">2158</td><td class="num">27.27</td><td class="num">26.03</td><td class="num">&minus;1.2</td><td class="num">1</td><td class="num">2</td></tr>
447
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">3408</td><td class="num">24.84</td><td class="num">13.80</td><td class="num" style="color:#B0533A">&minus;11.0</td><td class="num">3</td><td class="num">3</td></tr>
448
+ <tr><td>plamo-3.0-prime</td><td class="num">2997</td><td class="num">17.43</td><td class="num">9.61</td><td class="num" style="color:#B0533A">&minus;7.8</td><td class="num">5</td><td class="num">4</td></tr>
449
+ <tr><td>vllm/medgemma-27b</td><td class="num">4073</td><td class="num">21.09</td><td class="num">4.83</td><td class="num" style="color:#B0533A">&minus;16.3</td><td class="num">4</td><td class="num">5</td></tr>
450
+ <tr><td>vllm/medgemma-4b</td><td class="num">3192</td><td class="num">10.60</td><td class="num">1.26</td><td class="num" style="color:#B0533A">&minus;9.3</td><td class="num">6</td><td class="num">6</td></tr>
451
+ </tbody>
452
+ </table>
453
+ <p class="note">
454
+ Claude gains because it is the only model averaging under the 2000-character centre. medgemma-27b loses 16
455
+ points. Anyone reading the space's default metric is reading a different ranking from the one OpenAI's
456
+ methodology produces.
457
+ </p>
458
+ </section>
459
+
460
+ <section id="subscores">
461
+ <h2>Issue 4: the Professional per-use-case subscores are inflated</h2>
462
+ <p>
463
+ The custom <code>healthbench_professional.py</code> emits <code>use_case_*_score</code>,
464
+ <code>type_*_score</code> and <code>difficulty_*_score</code> metrics alongside the headline. <b>These do not
465
+ use the same aggregation as the headline and should not be quoted.</b> They are consistent with per-sample
466
+ clipping to [0, 1] before averaging, where OpenAI clips only the final mean.
467
+ </p>
468
+ <p>
469
+ The physician baseline makes the error measurable, because OpenAI publishes the ground truth for exactly these
470
+ three cells:
471
+ </p>
472
+ <table>
473
+ <thead><tr><th>Physician baseline by use case</th><th class="num">OpenAI</th><th class="num">recomputed correctly</th><th class="num">as reported in our log</th><th class="num">inflation</th></tr></thead>
474
+ <tbody>
475
+ <tr><td>Care consult</td><td class="num">42.7</td><td class="num">42.54</td><td class="num" style="color:#B0533A">48.4</td><td class="num">+5.9</td></tr>
476
+ <tr><td>Writing and documentation</td><td class="num">32.1</td><td class="num">32.91</td><td class="num" style="color:#B0533A">44.9</td><td class="num">+12.0</td></tr>
477
+ <tr><td>Medical research</td><td class="num">56.3</td><td class="num">56.60</td><td class="num" style="color:#B0533A">59.0</td><td class="num">+2.4</td></tr>
478
+ </tbody>
479
+ </table>
480
+ <details>
481
+ <summary>The arithmetic that identifies the cause <span class="where">525 examples &times; 8 epochs = 4200</span></summary>
482
+ <div class="body">
483
+ <pre>overall mean raw = 44.29 <span class="muted"># matches reported 44.29</span>
484
+ overall mean adj = 43.87 <span class="muted"># matches reported 43.87, and OpenAI's 43.7</span>
485
+ overall mean adj, clipped per-sample= 49.71
486
+ frac. of samples with adj &lt; 0 = 0.164
487
+
488
+ by use case n mean_adj clipped_per_sample
489
+ consult 1888 42.54 48.09
490
+ research 1176 56.60 57.47
491
+ writing 1136 32.91 44.39</pre>
492
+ <p>16.4% of physician responses score below zero once the length penalty applies, mostly short writing-task
493
+ answers that trip negative rubric criteria. Clipping those to zero before averaging is what lifts writing from
494
+ 32.9 to roughly 44. The residual of about 0.3 between the clipped figures and the reported ones is bootstrap
495
+ resampling noise; the mechanism is the clipping.</p>
496
+ </div>
497
+ </details>
498
+ <p>
499
+ The headline <code>bootstrap_score</code> is unaffected and remains correct. Only the subset breakdowns are
500
+ wrong, which matters because the by-use-case split is the most quoted view of Professional results.
501
+ </p>
502
+ </section>
503
+
504
+ <section id="floored">
505
+ <h2>Issue 5: five Professional scores are floored at zero</h2>
506
+ <p>
507
+ OpenAI clips the aggregate mean to [0, 1], and our implementation follows suit, so this is faithful behaviour
508
+ rather than a bug. But it means five reported numbers are all displayed as <code>0.00</code> while their true
509
+ values differ by 7 points, which hides real ranking information:
510
+ </p>
511
+ <table>
512
+ <thead><tr><th>Model</th><th>Subset</th><th class="num">reported</th><th class="num">true unclipped mean</th></tr></thead>
513
+ <tbody>
514
+ <tr><td>plamo-3.0-prime</td><td>red teaming</td><td class="num">0.00</td><td class="num">&minus;11.82</td></tr>
515
+ <tr><td>openrouter/deepseek-v4-pro</td><td>red teaming (ep 1)</td><td class="num">0.00</td><td class="num">&minus;8.29</td></tr>
516
+ <tr><td>openrouter/deepseek-v4-pro</td><td>red teaming (ep 8)</td><td class="num">0.00</td><td class="num">&minus;6.87</td></tr>
517
+ <tr><td>vllm/medgemma-27b</td><td>red teaming</td><td class="num">0.00</td><td class="num">&minus;6.80</td></tr>
518
+ <tr><td>plamo-3.0-prime</td><td>writing</td><td class="num">0.00</td><td class="num">&minus;4.31</td></tr>
519
+ </tbody>
520
+ </table>
521
+ <p class="note">
522
+ Worth reporting the unclipped value alongside the clipped one for these, or at least noting that a zero means
523
+ "at or below zero" rather than "scored nothing".
524
+ </p>
525
+ </section>
526
+
527
+ <section id="hygiene">
528
+ <h2>Run hygiene</h2>
529
+ <details>
530
+ <summary>DeepSeek's Professional runs are under-sampled, and its consult run is the only one <span class="where">hs-prof-subsets</span></summary>
531
+ <div class="body">
532
+ <p>Every model ran <code>epochs=8</code>, matching the paper's "8 samples per example". The 2026-07-25 DeepSeek
533
+ batch ran <code>epochs=1</code>. For <code>writing</code>, <code>research</code>, <code>red_teaming</code> and
534
+ <code>physician_baseline</code> both variants exist in <code>listing.json</code>, so the viewer shows duplicate
535
+ conflicting entries. For <code>consult</code> the epochs=1 run is the <b>only</b> DeepSeek run, so it sits in
536
+ the same chart as everyone else at one eighth the sampling.</p>
537
+ <p>The good news is the two variants agree closely where both exist (research 51.85 vs 52.91, writing 5.16 vs
538
+ 4.95, red teaming floored in both), so the practical distortion is small. It is still worth deleting the
539
+ epochs=1 logs and re-running consult at 8.</p>
540
+ </div>
541
+ </details>
542
+ <details>
543
+ <summary>medgemma-4b is missing four of five Professional subsets <span class="where">hs-prof-subsets</span></summary>
544
+ <div class="body">
545
+ <p>Only <code>consult</code> exists (score 8.19). Writing, research, red teaming and physician baseline were
546
+ never run, so medgemma-4b has no Professional overall and cannot appear in a like-for-like comparison.</p>
547
+ </div>
548
+ </details>
549
+ <details>
550
+ <summary>Response caching is on and demonstrably active <span class="where">plan: generate(cache=true)</span></summary>
551
+ <div class="body">
552
+ <p>Four of the five physician-baseline runs report byte-identical scores of 0.44291, which only happens if the
553
+ grader responses came from cache. Inspect's cache key includes the epoch by default
554
+ (<code>CachePolicy.per_epoch = True</code>), so the 8 epochs are not collapsing into one, which was the real
555
+ risk. The remaining caveat is that a re-run inside the one-week TTL is not an independent sample, so a repeat
556
+ run cannot be used as a variance estimate.</p>
557
+ </div>
558
+ </details>
559
+ <details>
560
+ <summary>Two different inspect_evals versions inside the same space <span class="where">0.14.3 vs 0.16.0</span></summary>
561
+ <div class="body">
562
+ <p>The frontier-model runs (July 15 to 16) used <code>inspect_evals 0.14.3</code> with
563
+ <code>inspect_ai 0.3.246</code>; the medgemma runs (July 24) used <code>0.16.0</code> with
564
+ <code>0.3.249</code>. Same space, same chart, different scorer code. Worth confirming the healthbench scorer
565
+ did not change across those releases before comparing medgemma against the frontier models.</p>
566
+ </div>
567
+ </details>
568
+ <details>
569
+ <summary>Outlier generations and empty completions <span class="where">hs-hard</span></summary>
570
+ <div class="body">
571
+ <p>All runs completed with zero sample errors. Two small things: medgemma-4b produced one 110,722-character
572
+ response on Hard, which carries a length penalty of &minus;8.5 on its own and moves the 1000-sample mean by
573
+ about 0.9 points; and claude-opus-4-7 returned 7 empty completions on Hard, each scored zero. Neither is
574
+ fatal, both are worth a spot check.</p>
575
+ </div>
576
+ </details>
577
+ </section>
578
+
579
+ <section id="fixes">
580
+ <h2>What to change</h2>
581
+ <div class="ladder">
582
+ <div class="chip miss">judge: gpt-4.1 or gpt-5.4-low on hard</div>
583
+ <div class="chip miss">judge: gpt-4.1 or gpt-5.4-low on consensus</div>
584
+ <div class="chip miss">reasoning effort: highest, all models</div>
585
+ <div class="chip miss">claude: enable extended thinking</div>
586
+ <div class="chip miss">headline: length-adjusted, 3 spaces</div>
587
+ <div class="chip miss">prof subscores: drop per-sample clip</div>
588
+ <div class="chip miss">deepseek consult: re-run at epochs 8</div>
589
+ <div class="chip miss">medgemma-4b: run 4 missing subsets</div>
590
+ <div class="chip hit">length adjustment constants</div>
591
+ <div class="chip hit">dataset sizes and splits</div>
592
+ <div class="chip hit">grader system message and temp</div>
593
+ <div class="chip hit">bootstrap and mean clipping</div>
594
+ <div class="chip hit">epochs 8 on Professional</div>
595
+ <div class="chip hit">prompting and harness (length match)</div>
596
+ </div>
597
+ <div class="ladder-legend">clay = needs changing &nbsp;&middot;&nbsp; olive = verified correct, leave alone</div>
598
+
599
+ <p>Concretely, for the two broken variants, stop using the wrapper tasks and call the parent task instead:</p>
600
+ <details>
601
+ <summary>Getting a real judge into Hard and Consensus <span class="where">the wrapper cannot do it</span></summary>
602
+ <div class="body">
603
+ <pre><span class="muted"># broken: judge_model silently defaults to gpt-4o-mini</span>
604
+ inspect eval inspect_evals/healthbench_hard \
605
+ -T length_adjustment_center=2000 \
606
+ -T length_adjustment_penalty_per_500_chars=0.0392
607
+
608
+ <span class="muted"># works: call healthbench() directly with subset=</span>
609
+ inspect eval inspect_evals/healthbench \
610
+ -T subset=hard \
611
+ -T judge_model=<span class="hl">openai/gpt-4.1</span> \
612
+ -T length_adjustment_center=2000 \
613
+ -T length_adjustment_penalty_per_500_chars=0.0392</pre>
614
+ <p>Worth considering GPT-5.4 at low reasoning for all four variants instead. The Professional paper notes the
615
+ external implementation now has "an option to use settings matching our internal implementation (e.g., GPT-5.4
616
+ at low reasoning effort as a grader)" and that OpenAI intends to keep reporting from the internal one. Using it
617
+ everywhere would both fix the deviation and make our four spaces internally comparable for the first time.</p>
618
+ </div>
619
+ </details>
620
+ <p class="note">
621
+ Re-running with the correct grader and highest reasoning effort should move Hard up by roughly 5 points and
622
+ Consensus up by roughly 13 toward the published band. If it does not, that is the signal something else is
623
+ wrong. If it does, the config is settled.
624
+ </p>
625
+ </section>
626
+
627
+ <section id="full">
628
+ <h2>Full results</h2>
629
+ <h3>Main variants, all six models</h3>
630
+ <table>
631
+ <thead><tr><th>Model</th><th class="num">full raw</th><th class="num">full adj</th><th class="num">hard raw</th><th class="num">hard adj</th><th class="num">cons. raw</th><th class="num">cons. adj</th></tr></thead>
632
+ <tbody>
633
+ <tr class="ours"><td>openai/gpt-5.5</td><td class="num">56.87</td><td class="num">55.83</td><td class="num">27.27</td><td class="num">26.03</td><td class="num">82.08</td><td class="num">82.02</td></tr>
634
+ <tr class="ours"><td>anthropic/claude-opus-4-7</td><td class="num">53.44</td><td class="num">54.31</td><td class="num">26.61</td><td class="num">27.80</td><td class="num">80.17</td><td class="num">80.23</td></tr>
635
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">51.37</td><td class="num">41.73</td><td class="num">24.84</td><td class="num">13.80</td><td class="num">79.10</td><td class="num">78.46</td></tr>
636
+ <tr><td>vllm/medgemma-27b-text-it</td><td class="num">47.20</td><td class="num">33.21</td><td class="num">21.09</td><td class="num">4.83</td><td class="num">77.58</td><td class="num">76.61</td></tr>
637
+ <tr><td>openai-api/plamo-3.0-prime</td><td class="num">39.42</td><td class="num">32.43</td><td class="num">17.43</td><td class="num">9.61</td><td class="num">75.25</td><td class="num">74.78</td></tr>
638
+ <tr><td>vllm/medgemma-4b-it</td><td class="num">26.97</td><td class="num">18.32</td><td class="num">10.60</td><td class="num">1.26</td><td class="num">71.37</td><td class="num">70.77</td></tr>
639
+ <tr class="human"><td>OpenAI published, gpt-5.5</td><td class="num">58.4</td><td class="num">56.5</td><td class="num">33.8</td><td class="num">31.5</td><td class="num">95.7</td><td class="num">95.6</td></tr>
640
+ </tbody>
641
+ </table>
642
+ <p class="note">
643
+ Judge: gpt-4.1 for full, gpt-4o-mini for hard and consensus. Epochs 1 throughout. All runs completed with zero
644
+ errors. Only the full column is grader-comparable to the published row.
645
+ </p>
646
+
647
+ <h3>Professional subsets, length-adjusted</h3>
648
+ <table>
649
+ <thead><tr><th>Model</th><th class="num">consult</th><th class="num">writing</th><th class="num">research</th><th class="num">red team</th><th class="num">weighted overall</th></tr></thead>
650
+ <tbody>
651
+ <tr class="ours"><td>anthropic/claude-opus-4-7</td><td class="num">47.04</td><td class="num">36.15</td><td class="num">61.07</td><td class="num">26.74</td><td class="num">48.02</td></tr>
652
+ <tr class="ours"><td>openai/gpt-5.5</td><td class="num">48.64</td><td class="num">35.96</td><td class="num">57.92</td><td class="num">28.19</td><td class="num">47.81</td></tr>
653
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">25.59</td><td class="num">4.95</td><td class="num">52.91</td><td class="num">&minus;6.87</td><td class="num">27.66</td></tr>
654
+ <tr><td>vllm/medgemma-27b-text-it</td><td class="num">17.78</td><td class="num">9.13</td><td class="num">34.40</td><td class="num">&minus;6.80</td><td class="num">20.09</td></tr>
655
+ <tr><td>openai-api/plamo-3.0-prime</td><td class="num">15.36</td><td class="num">&minus;4.31</td><td class="num">28.58</td><td class="num">&minus;11.82</td><td class="num">13.74</td></tr>
656
+ <tr><td>vllm/medgemma-4b-it</td><td class="num">8.19</td><td class="num muted">not run</td><td class="num muted">not run</td><td class="num muted">not run</td><td class="num muted">n/a</td></tr>
657
+ <tr class="human"><td>Physician baseline (ours)</td><td class="num">42.54</td><td class="num">32.91</td><td class="num">56.60</td><td class="num muted">n/a</td><td class="num">43.87</td></tr>
658
+ <tr class="human"><td>Physician baseline (OpenAI)</td><td class="num">42.7</td><td class="num">32.1</td><td class="num">56.3</td><td class="num muted">n/a</td><td class="num">43.7</td></tr>
659
+ <tr class="human"><td>OpenAI published, gpt-5.5</td><td class="num muted">n/a</td><td class="num muted">n/a</td><td class="num muted">n/a</td><td class="num muted">n/a</td><td class="num">51.8</td></tr>
660
+ </tbody>
661
+ </table>
662
+ <p class="note">
663
+ Red teaming values are shown unclipped so the ordering is visible; the logs report these as 0.00. DeepSeek's
664
+ consult figure comes from its epochs=1 run, the rest from epochs=8. Weighted overall uses consult 236, writing
665
+ 142, research 147. Only gpt-5.5 and claude-opus-4-7 beat the physician baseline overall, and both do so
666
+ narrowly.
667
+ </p>
668
+ </section>
669
+
670
+ <section id="method">
671
+ <h2>How this was checked</h2>
672
+ <p>
673
+ The four HuggingFace spaces were cloned and their <code>.eval</code> logs pulled as real LFS blobs (the plain
674
+ clone yields 133-byte pointers). Headers gave the declared config; per-sample model events gave the config
675
+ actually sent, including which model served every grading call; per-sample scores were re-aggregated
676
+ independently to confirm the reported metrics and to recompute the subset breakdowns.
677
+ </p>
678
+ <table>
679
+ <thead><tr><th>Space</th><th class="num">logs</th><th class="num">size</th><th>task</th><th class="num">samples/run</th></tr></thead>
680
+ <tbody>
681
+ <tr><td>hs-non-professional</td><td class="num">6</td><td class="num">573 MB</td><td><code>inspect_evals/healthbench</code></td><td class="num">5000</td></tr>
682
+ <tr><td>hs-hard</td><td class="num">6</td><td class="num">113 MB</td><td><code>inspect_evals/healthbench_hard</code></td><td class="num">1000</td></tr>
683
+ <tr><td>hs-consensus</td><td class="num">6</td><td class="num">256 MB</td><td><code>inspect_evals/healthbench_consensus</code></td><td class="num">3671</td></tr>
684
+ <tr><td>hs-prof-subsets</td><td class="num">30</td><td class="num">714 MB</td><td><code>healthbench_professional_*</code></td><td class="num">525</td></tr>
685
+ </tbody>
686
+ </table>
687
+ <p class="note">
688
+ Local copies at <code>/Users/kazuki/Sandbox/hb-spaces/</code>. The <code>hs-original</code> space was excluded,
689
+ its link is broken. Reference sources: HealthBench (<a href="https://arxiv.org/abs/2505.08775">arXiv:2505.08775</a>),
690
+ HealthBench Professional (<a href="https://arxiv.org/abs/2604.27470">arXiv:2604.27470</a>), the
691
+ <a href="https://deploymentsafety.openai.com/gpt-5-6-preview/healthbench">GPT-5.6 Preview system card</a> Table 6,
692
+ and <a href="https://github.com/openai/simple-evals">openai/simple-evals</a>.
693
+ </p>
694
+ </section>
695
+
696
+ </main>
697
+ </div>
698
+ </body>
699
+ </html>
config-check-v2.html ADDED
@@ -0,0 +1,870 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <link rel="icon" href="favicon.svg">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>HealthBench config check v2: our spaces vs OpenAI's published numbers</title>
8
+ <style>
9
+ :root{
10
+ --ivory:#FAF9F5; --slate:#141413; --gray-700:#3D3D3A; --gray-500:#87867F;
11
+ --gray-300:#D1CFC5; --gray-150:#F0EEE6; --clay:#D97757; --oat:#E3DACC;
12
+ --olive:#788C5D;
13
+ }
14
+ *{box-sizing:border-box}
15
+ html{scroll-behavior:smooth}
16
+ body{
17
+ margin:0; background:var(--ivory); color:var(--gray-700);
18
+ font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
19
+ font-size:15px; line-height:1.65; padding:56px 24px 120px;
20
+ }
21
+ .page{max-width:1100px; margin:0 auto; display:grid;
22
+ grid-template-columns:200px minmax(0,1fr); gap:48px}
23
+ h1,h2,h3,dt{font-family:ui-serif,Georgia,"Times New Roman",serif; font-weight:500; color:var(--slate)}
24
+ h1{font-size:32px; line-height:1.2; margin:0}
25
+ h2{font-size:22px; margin:40px 0 12px; scroll-margin-top:24px}
26
+ h3{font-size:17px; margin:26px 0 8px}
27
+ p{max-width:680px}
28
+ a{color:inherit}
29
+ code{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace; font-size:13px}
30
+ .eyebrow{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
31
+ text-transform:uppercase; letter-spacing:.08em; font-size:11px; color:var(--gray-500); margin:0 0 14px}
32
+ .dateline{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace; font-size:11px; color:var(--gray-500); margin-top:10px}
33
+ header{margin-bottom:8px}
34
+ nav{position:sticky; top:32px; align-self:start; font-size:13px}
35
+ nav .navlinks{display:flex; flex-direction:column; border-left:2px solid var(--gray-300)}
36
+ nav a{display:block; padding:5px 0 5px 14px; margin-left:-2px;
37
+ border-left:2px solid transparent; color:var(--gray-700); text-decoration:none}
38
+ nav a:hover{border-left-color:var(--slate); color:var(--slate)}
39
+ nav a.l2{padding-left:26px; font-size:12px; color:var(--gray-500)}
40
+ nav .files{margin-top:22px}
41
+ nav .files .lbl{font-family:ui-monospace,Menlo,monospace; font-size:10px; text-transform:uppercase;
42
+ letter-spacing:.08em; color:var(--gray-500); margin-bottom:6px}
43
+ nav .files code{display:block; font-size:11px; color:var(--gray-500); word-break:break-all; margin-bottom:4px}
44
+ table{border-collapse:collapse; width:100%; max-width:860px; margin:14px 0; font-size:13.5px}
45
+ th,td{text-align:left; padding:8px 12px; border-bottom:1px solid var(--gray-300)}
46
+ th{font-family:ui-monospace,Menlo,monospace; font-size:11px; text-transform:uppercase;
47
+ letter-spacing:.05em; color:var(--gray-500); font-weight:600; border-bottom:1.5px solid var(--gray-300)}
48
+ td.num{font-family:ui-monospace,Menlo,monospace; text-align:right}
49
+ tr.ours{background:rgba(217,119,87,.09)}
50
+ tr.ours td{font-weight:600; color:var(--slate)}
51
+ tr.human td{color:var(--gray-500); font-style:italic}
52
+ .tag{font-family:ui-monospace,Menlo,monospace; font-size:10px; padding:1px 6px; border-radius:4px;
53
+ border:1px solid var(--gray-300); color:var(--gray-500); white-space:nowrap}
54
+ .tag.same{border-color:var(--olive); color:var(--olive)}
55
+ .tag.diff{border-color:var(--clay); color:var(--clay)}
56
+ .callout{border:1.5px solid var(--oat); background:rgba(227,218,204,.35); border-radius:10px;
57
+ padding:16px 18px; margin:20px 0; max-width:800px; display:flex; gap:14px}
58
+ .callout .star{color:var(--clay); font-size:18px; line-height:1.4}
59
+ .callout .ct{font-size:14px}
60
+ .callout .ct b{color:var(--slate)}
61
+ details{background:#fff; border:1px solid var(--gray-300); border-radius:10px; margin:10px 0; max-width:860px}
62
+ summary{cursor:pointer; padding:12px 16px; font-family:ui-serif,Georgia,serif; font-size:15px;
63
+ color:var(--slate); list-style:none; display:flex; align-items:center; gap:10px}
64
+ summary::-webkit-details-marker{display:none}
65
+ summary::before{content:"\25B8"; color:var(--clay); transition:transform .15s; font-size:13px}
66
+ details[open] summary::before{transform:rotate(90deg)}
67
+ summary .where{margin-left:auto; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:var(--gray-500)}
68
+ details .body{padding:2px 16px 14px; font-size:14px}
69
+ details .body p{margin:8px 0}
70
+ details .body pre{background:var(--gray-150); border-radius:6px; padding:12px 14px; overflow-x:auto;
71
+ font-family:ui-monospace,Menlo,monospace; font-size:12px; line-height:1.5; margin:10px 0}
72
+ .hl{color:var(--clay)}
73
+ .ok{color:var(--olive); font-weight:600}
74
+ .warn{color:var(--clay); font-weight:600}
75
+ .bad{color:#B0533A; font-weight:600}
76
+ .muted{color:var(--gray-500)}
77
+ .note{font-size:12.5px; color:var(--gray-500); max-width:800px}
78
+ .ladder{display:grid; grid-template-columns:repeat(auto-fill,minmax(184px,1fr)); gap:7px; max-width:800px; margin:14px 0}
79
+ .chip{font-family:ui-monospace,Menlo,monospace; font-size:10.5px; border:1px solid var(--gray-300);
80
+ border-radius:6px; padding:6px 9px; color:var(--gray-500)}
81
+ .chip.hit{border-color:var(--olive); background:rgba(120,140,93,.10); color:var(--slate); font-weight:600}
82
+ .chip.miss{border-color:var(--clay); background:rgba(217,119,87,.08); color:var(--slate); font-weight:600}
83
+ .chip.done{border-color:var(--olive); background:rgba(120,140,93,.10); color:var(--slate); font-weight:600;
84
+ text-decoration:line-through; text-decoration-color:var(--gray-500)}
85
+ .chip.part{border-color:var(--gray-500); background:rgba(135,134,127,.10); color:var(--slate); font-weight:600}
86
+ tr.new td{background:rgba(120,140,93,.10)}
87
+ .vtag{font-family:ui-monospace,Menlo,monospace; font-size:10px; padding:1px 6px; border-radius:4px;
88
+ border:1px solid var(--olive); color:var(--olive); white-space:nowrap; margin-left:6px}
89
+ .ladder-legend{font-family:ui-monospace,Menlo,monospace; font-size:10.5px; color:var(--gray-500); margin-top:6px}
90
+ .cmp-chart{width:100%; max-width:760px; height:auto; margin:10px 0 4px; font-family:system-ui}
91
+ .tc-ax{font-size:11px; fill:var(--gray-500); font-family:ui-monospace,Menlo,monospace}
92
+ .tc-ml{font-size:11px; fill:var(--slate); font-family:ui-monospace,Menlo,monospace}
93
+ .tc-lg{font-size:11px; fill:var(--gray-700)}
94
+ .tc-val{font-size:10px; fill:var(--slate); font-family:ui-monospace,Menlo,monospace}
95
+ .tc-dl{font-size:10.5px; font-family:ui-monospace,Menlo,monospace; font-weight:600}
96
+ @media (max-width:920px){
97
+ .page{grid-template-columns:1fr}
98
+ nav{display:none}
99
+ }
100
+ </style>
101
+
102
+ <style id="hbnav-css">
103
+ .hbnav{position:sticky;top:0;z-index:50;display:flex;flex-wrap:wrap;align-items:center;gap:4px;
104
+ padding:8px 16px;margin:-56px -24px 40px;background:rgba(250,249,245,.94);
105
+ backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid #D1CFC5;
106
+ font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-size:11.5px}
107
+ .hbnav .home{color:#87867F;margin-right:6px;text-decoration:none}
108
+ .hbnav .home:hover{color:#141413}
109
+ .hbnav a.pill{color:#3D3D3A;text-decoration:none;padding:3px 9px;border:1px solid #D1CFC5;border-radius:6px}
110
+ .hbnav a.pill:hover{border-color:#D97757;color:#141413}
111
+ .hbnav a.pill.here{background:#141413;border-color:#141413;color:#FAF9F5}
112
+ .hbnav .sp{flex:1}
113
+ @media(max-width:640px){.hbnav{margin:-56px -24px 28px}}
114
+ </style>
115
+ </head>
116
+ <body>
117
+ <div class="hbnav"><a class="home" href="index.html">&#8592; HealthBench logs</a><a class="pill" href="matrix.html">Coverage matrix</a><a class="pill here" href="config-check-v2.html">Config check v2</a><a class="pill" href="config-check-v1.html">Config check v1</a><span class="sp"></span><a class="pill" href="viewer/index.html">Log viewer &rarr;</a></div>
118
+ <div class="page">
119
+ <nav>
120
+ <div class="navlinks">
121
+ <a href="#summary">Summary</a>
122
+ <a href="#v2">v2: DeepSeek re-run</a>
123
+ <a href="#v2-verdict" class="l2">What it fixed</a>
124
+ <a href="#anchor">The anchor check</a>
125
+ <a href="#baseline" class="l2">Physician baseline</a>
126
+ <a href="#config">Config matrix</a>
127
+ <a href="#judge">Issue 1: judge model</a>
128
+ <a href="#effort">Issue 2: reasoning effort</a>
129
+ <a href="#headline">Issue 3: headline metric</a>
130
+ <a href="#subscores">Issue 4: subscore clipping</a>
131
+ <a href="#floored">Issue 5: floored zeros</a>
132
+ <a href="#hygiene">Run hygiene</a>
133
+ <a href="#fixes">What to change</a>
134
+ <a href="#full">Full results</a>
135
+ <a href="#method">How this was checked</a>
136
+ </div>
137
+ <div class="files">
138
+ <div class="lbl">Run artifacts</div>
139
+ <code>hb-spaces/hs-non-professional/logs/</code>
140
+ <code>hb-spaces/hs-hard/logs/</code>
141
+ <code>hb-spaces/hs-consensus/logs/</code>
142
+ <code>hb-spaces/hs-prof-subsets/logs/</code>
143
+ <code>hb-spaces/healthbench-professional-deepseek-v4-pro/logs/</code>
144
+ <div class="lbl" style="margin-top:14px">Reference</div>
145
+ <code>arXiv:2505.08775 (HealthBench)</code>
146
+ <code>arXiv:2604.27470 (Professional)</code>
147
+ <code>GPT-5.6 system card, Table 6</code>
148
+ <code>openai/simple-evals</code>
149
+ </div>
150
+ </nav>
151
+
152
+ <main>
153
+ <header>
154
+ <p class="eyebrow">HealthBench &middot; config sanity check &middot; v2</p>
155
+ <h1>HealthBench config check: our spaces vs OpenAI's published numbers</h1>
156
+ <div class="dateline">Created 2026-07-27 &nbsp;&middot;&nbsp; v2 2026-08-06 (DeepSeek Professional re-run folded in)</div>
157
+ </header>
158
+
159
+ <section id="summary">
160
+ <div class="callout">
161
+ <span class="star">&#9733;</span>
162
+ <span class="ct"><b>What is new in v2 (2026-08-06).</b> One re-run has landed since v1: DeepSeek v4 Pro on
163
+ HealthBench Professional, published as its own space. It is folded in below. Two things change as a result.
164
+ DeepSeek's Professional overall moves from <b>27.66 to 30.99</b>, because its old consult figure turned out
165
+ to be a cache replay rather than a real run. And <a href="#subscores">issue 4</a> is now diagnosed exactly:
166
+ the inflated per-use-case subscores are not clipped versions of the length-adjusted score, they discard the
167
+ length adjustment altogether. Nothing else in v1 changes. The two flags that matter most for comparability
168
+ &mdash; <b>eight samples per example</b> and <b>reasoning effort</b> &mdash; are still unset everywhere,
169
+ including in the re-run.</span>
170
+ </div>
171
+ <p>
172
+ We have a real anchor for this check: OpenAI's GPT-5.6 system card publishes <b>gpt-5.5 scores for all four
173
+ HealthBench variants</b>, and gpt-5.5 is one of the models we ran. Lining our numbers up against theirs
174
+ gives a per-variant verdict rather than a guess.
175
+ </p>
176
+ <p>
177
+ The result splits cleanly. <b>The two spaces where we used the correct grader reproduce OpenAI within a
178
+ point.</b> The full HealthBench run lands at <b>55.8</b> against their <b>56.5</b>, and our HealthBench
179
+ Professional physician baseline lands at <b>43.87</b> against their published <b>43.7</b>. That is close
180
+ enough to say the dataset, prompting, rubric scoring, length adjustment and aggregation are all wired up
181
+ right.
182
+ </p>
183
+ <p>
184
+ <b>The two spaces where we used the wrong grader are badly off.</b> HealthBench Hard is <b>5.5 points low</b>
185
+ and HealthBench Consensus is <b>13.6 points low</b>. Both were graded by <code>gpt-4o-mini</code> instead of
186
+ GPT-4.1, not by choice but because the <code>inspect_evals</code> task wrappers for those two variants do not
187
+ expose a <code>judge_model</code> argument and silently fall back to the package default. Consensus is the
188
+ loudest signal: every frontier model in OpenAI's table sits in a 94 to 96 band, and ours sits at 82.
189
+ </p>
190
+ <p>
191
+ A separate, smaller gap shows up on the inference side. Our gpt-5.5 Professional score is <b>4 points below</b>
192
+ OpenAI's, even though the grader is correct there. The physician baseline matching to 0.2 points rules out
193
+ the grading pipeline, which points the finger at <b>reasoning effort</b>: we pass none, while OpenAI evaluates
194
+ "at the highest reasoning effort option available via each model's API." Claude was run with extended thinking
195
+ off entirely.
196
+ </p>
197
+
198
+ <div class="callout">
199
+ <span class="star">&#9733;</span>
200
+ <span class="ct"><b>The one-line verdict.</b> The scoring machinery is correct and provably so. The
201
+ configuration around it is not: two variants use a mini-tier grader, no run sets reasoning effort, and three
202
+ of the four spaces show the unadjusted score as the headline where OpenAI shows the length-adjusted one.
203
+ None of this requires re-implementing anything, only re-running with four flags set.</span>
204
+ </div>
205
+ </section>
206
+
207
+ <section id="v2">
208
+ <h2>v2 update: the DeepSeek Professional re-run</h2>
209
+ <p>
210
+ Ajay re-ran HealthBench Professional for DeepSeek on 2026-08-06 and published it as its own space,
211
+ <code>ajay-citadel/healthbench-professional-deepseek-v4-pro</code>. It is the first run that addresses
212
+ anything on the <a href="#fixes">what to change</a> list, so this version of the report folds it in and
213
+ corrects the numbers it supersedes. Everything else in v1 stands unchanged.
214
+ </p>
215
+ <p>
216
+ The re-run is a <b>single combined task over all 525 examples</b> rather than five separate subset tasks,
217
+ which is what OpenAI's reference implementation does. That removes the manual sample-weighting v1 had to
218
+ apply, and it gives DeepSeek a genuine <code>consult</code> run for the first time.
219
+ </p>
220
+
221
+ <table>
222
+ <thead><tr><th>DeepSeek v4 Pro, Professional</th><th class="num">v1 (hs-prof-subsets)</th><th class="num">v2 (re-run)</th><th class="num">&Delta;</th><th>note</th></tr></thead>
223
+ <tbody>
224
+ <tr class="new"><td><b>Overall, length-adjusted</b></td><td class="num">27.66</td><td class="num">30.99</td><td class="num" style="color:#788C5D">+3.3</td><td class="note">v1 was stitched from subsets; v2 is native</td></tr>
225
+ <tr><td>Overall, unadjusted</td><td class="num muted">n/a</td><td class="num">37.81</td><td class="num muted">&mdash;</td><td class="note">not computable from v1 subsets</td></tr>
226
+ <tr><td>Care consult</td><td class="num">25.59</td><td class="num">31.83</td><td class="num" style="color:#788C5D">+6.2</td><td class="note">v1 figure was a cache replay, see below</td></tr>
227
+ <tr><td>Writing and documentation</td><td class="num">4.95</td><td class="num">6.70</td><td class="num">+1.8</td><td class="note">agrees within sampling noise</td></tr>
228
+ <tr><td>Medical research</td><td class="num">52.91</td><td class="num">53.10</td><td class="num">+0.2</td><td class="note">agrees</td></tr>
229
+ <tr><td>Red teaming (unclipped)</td><td class="num">&minus;6.87</td><td class="num">&minus;5.19</td><td class="num">+1.7</td><td class="note">still floored to 0.00 in the log</td></tr>
230
+ <tr><td>Mean response length (chars)</td><td class="num muted">3069&ndash;5665</td><td class="num">4320</td><td class="num muted">&mdash;</td><td class="note">vs 3818 for gpt-5.5 in OpenAI's table</td></tr>
231
+ </tbody>
232
+ </table>
233
+ <p class="note">
234
+ The v1 sample-weighted arithmetic checks out against the native number: (236&times;31.83 + 142&times;6.70 +
235
+ 147&times;53.10) / 525 = 30.99, exactly the re-run's own <code>bootstrap_score</code>. So the stitching method
236
+ v1 used was sound; the 3.3-point move comes entirely from the consult subset being re-generated rather than
237
+ replayed. DeepSeek does not change rank &mdash; it stays third behind claude-opus-4-7 (48.02) and gpt-5.5 (47.81).
238
+ </p>
239
+
240
+ <h3 id="v2-verdict">What the re-run fixed, and what it did not</h3>
241
+ <table>
242
+ <thead><tr><th>v1 finding</th><th>status in the re-run</th><th>evidence</th></tr></thead>
243
+ <tbody>
244
+ <tr><td>DeepSeek consult had no real epochs&ge;1 run of its own</td><td><span class="tag same">fixed</span></td><td class="note">967k output tokens billed to deepseek; the v1 epochs=1 logs report zero model usage</td></tr>
245
+ <tr><td>Duplicate, conflicting DeepSeek entries in <code>listing.json</code></td><td><span class="tag same">fixed</span></td><td class="note">one log, one task, its own space</td></tr>
246
+ <tr><td>Grader config implicit (relied on the package default)</td><td><span class="tag same">fixed</span></td><td class="note"><code>judge_model: openai/gpt-5.4</code>, <code>judge_reasoning_effort: low</code> now explicit in <code>task_args</code></td></tr>
247
+ <tr><td>Headline metric should be length-adjusted</td><td><span class="tag same">already ok</span></td><td class="note"><code>use_length_adjusted: true</code> on the primary metric</td></tr>
248
+ <tr><td><b>Samples per example should be 8</b></td><td><span class="tag diff">not fixed</span></td><td class="note"><code>epochs: 1</code>. Bootstrap std is 2.8 points on a 31-point score</td></tr>
249
+ <tr><td><b>Reasoning effort should be the highest available</b></td><td><span class="tag diff">not fixed</span></td><td class="note">generate config is <code>{cache: true}</code>; 69.7% of samples reasoned, at DeepSeek's own default</td></tr>
250
+ <tr><td><b>Per-use-case subscores are inflated</b></td><td><span class="tag diff">not fixed</span></td><td class="note">reproduced exactly, and the mechanism is now pinned &mdash; see <a href="#subscores">issue 4</a></td></tr>
251
+ </tbody>
252
+ </table>
253
+
254
+ <div class="callout">
255
+ <span class="star">&#9733;</span>
256
+ <span class="ct"><b>Verdict on the re-run: clean, and it moves the number, but it is not yet the paper's
257
+ configuration.</b> The grading half is exactly OpenAI's internal reference &mdash; gpt-5.4-2026-03-05 at low
258
+ reasoning effort, temperature 0, "You are a helpful assistant." &mdash; and every score in the log
259
+ re-aggregates to the reported value from per-sample data. The inference half still runs one sample per
260
+ example instead of eight and passes no reasoning effort, so the two headline items from
261
+ <a href="#effort">issue 2</a> and the Professional row of <a href="#config">the config matrix</a> remain
262
+ open for DeepSeek exactly as they do for every other model.</span>
263
+ </div>
264
+
265
+ <details>
266
+ <summary>Sanity checks run against the new log <span class="where">525 samples, 0 errors</span></summary>
267
+ <div class="body">
268
+ <pre>reported bootstrap_score 0.3099 <span class="muted"># length-adjusted</span>
269
+ recomputed mean(adjusted) 0.3099 <span class="muted"># match</span>
270
+ recomputed mean(unadjusted) 0.3781 <span class="muted"># matches the log's own mean metric</span>
271
+ bootstrap 1000x, own resample 0.3104 +/- 0.0283 <span class="muted"># log: 0.3099 +/- 0.0279</span>
272
+ criteria_met_rate 0.5921 <span class="muted"># match; 1135 criteria over 525 samples</span>
273
+
274
+ length adjustment: adj = raw - 0.0147 * ((chars - 2000) / 500)
275
+ mismatches over 525 samples 0 <span class="muted"># arithmetic verified per sample</span>
276
+
277
+ served model deepseek/deepseek-v4-pro <span class="muted"># matches requested, no silent substitution</span>
278
+ judge served gpt-5.4-2026-03-05 <span class="muted"># 1135 calls, one per rubric criterion</span>
279
+ judge config {system_message: "You are a helpful assistant.", temperature: 0.0,
280
+ reasoning_effort: "low"} <span class="muted"># matches OpenAI's internal reference</span>
281
+ candidate config {cache: true} <span class="muted"># no reasoning effort passed</span>
282
+
283
+ rubric coverage 1135 graded / 1135 in dataset metadata <span class="muted"># no criteria dropped</span>
284
+ unique prompt ids 525 / 525
285
+ empty completions 0
286
+ mean chars 4320 median 4053 p99 11620 max 17982
287
+ frac. samples with length-adjusted score &lt; 0 0.303</pre>
288
+ <p>The one number worth watching is that last line: 30% of DeepSeek's Professional responses score below zero
289
+ once the length penalty applies, against 16.4% for the physician baseline. DeepSeek averages 4320 characters
290
+ where the penalty centre is 2000, so it is paying about 6.8 points of pure verbosity tax. That is a real
291
+ property of the model under this metric, not a config error, but it does mean DeepSeek's Professional score is
292
+ unusually sensitive to the length-adjustment constant.</p>
293
+ </div>
294
+ </details>
295
+ </section>
296
+
297
+ <section id="anchor">
298
+ <h2>The anchor check</h2>
299
+ <p>
300
+ All numbers are the <b>length-adjusted score on the 0 to 100 scale</b>, which is what OpenAI reports as the
301
+ primary metric. Their figures come from the GPT-5.6 system card Table 6, given as
302
+ <code>length-adjusted (unadjusted, mean chars)</code>. Ours are recomputed from the downloaded
303
+ <code>.eval</code> logs.
304
+ </p>
305
+
306
+ <svg viewBox="0 0 760 430" xmlns="http://www.w3.org/2000/svg" class="cmp-chart" role="img"
307
+ aria-label="gpt-5.5 length-adjusted scores, OpenAI published versus our runs, across five checks">
308
+ <line x1="60" y1="40" x2="60" y2="340" stroke="#141413" stroke-width="1"/>
309
+ <line x1="60" y1="340" x2="740" y2="340" stroke="#141413" stroke-width="1"/>
310
+ <line x1="60" y1="280" x2="740" y2="280" stroke="#F0EEE6" stroke-width="1"/>
311
+ <line x1="60" y1="220" x2="740" y2="220" stroke="#F0EEE6" stroke-width="1"/>
312
+ <line x1="60" y1="160" x2="740" y2="160" stroke="#F0EEE6" stroke-width="1"/>
313
+ <line x1="60" y1="100" x2="740" y2="100" stroke="#F0EEE6" stroke-width="1"/>
314
+ <line x1="60" y1="40" x2="740" y2="40" stroke="#F0EEE6" stroke-width="1"/>
315
+ <text x="52" y="343.5" text-anchor="end" class="tc-ax">0</text>
316
+ <text x="52" y="283.5" text-anchor="end" class="tc-ax">20</text>
317
+ <text x="52" y="223.5" text-anchor="end" class="tc-ax">40</text>
318
+ <text x="52" y="163.5" text-anchor="end" class="tc-ax">60</text>
319
+ <text x="52" y="103.5" text-anchor="end" class="tc-ax">80</text>
320
+ <text x="52" y="43.5" text-anchor="end" class="tc-ax">100</text>
321
+
322
+ <!-- group 0: physician baseline -->
323
+ <rect x="88" y="208.9" width="40" height="131.1" fill="#87867F"/>
324
+ <rect x="132" y="208.4" width="40" height="131.6" fill="#D97757"/>
325
+ <text x="108" y="203" text-anchor="middle" class="tc-val">43.7</text>
326
+ <text x="152" y="203" text-anchor="middle" class="tc-val">43.9</text>
327
+ <text x="130" y="358" text-anchor="middle" class="tc-ml">Physician</text>
328
+ <text x="130" y="372" text-anchor="middle" class="tc-ml">baseline</text>
329
+ <text x="130" y="390" text-anchor="middle" class="tc-dl" fill="#788C5D">+0.2</text>
330
+
331
+ <!-- group 1: professional -->
332
+ <rect x="224" y="184.6" width="40" height="155.4" fill="#87867F"/>
333
+ <rect x="268" y="196.6" width="40" height="143.4" fill="#D97757"/>
334
+ <text x="244" y="178.6" text-anchor="middle" class="tc-val">51.8</text>
335
+ <text x="288" y="190.6" text-anchor="middle" class="tc-val">47.8</text>
336
+ <text x="266" y="358" text-anchor="middle" class="tc-ml">Professional</text>
337
+ <text x="266" y="372" text-anchor="middle" class="tc-ax">grader ok</text>
338
+ <text x="266" y="390" text-anchor="middle" class="tc-dl" fill="#D97757">&minus;4.0</text>
339
+
340
+ <!-- group 2: healthbench full -->
341
+ <rect x="360" y="170.5" width="40" height="169.5" fill="#87867F"/>
342
+ <rect x="404" y="172.5" width="40" height="167.5" fill="#D97757"/>
343
+ <text x="380" y="164.5" text-anchor="middle" class="tc-val">56.5</text>
344
+ <text x="424" y="166.5" text-anchor="middle" class="tc-val">55.8</text>
345
+ <text x="402" y="358" text-anchor="middle" class="tc-ml">HealthBench</text>
346
+ <text x="402" y="372" text-anchor="middle" class="tc-ax">grader ok</text>
347
+ <text x="402" y="390" text-anchor="middle" class="tc-dl" fill="#788C5D">&minus;0.7</text>
348
+
349
+ <!-- group 3: hard -->
350
+ <rect x="496" y="245.5" width="40" height="94.5" fill="#87867F"/>
351
+ <rect x="540" y="261.9" width="40" height="78.1" fill="#D97757"/>
352
+ <text x="516" y="239.5" text-anchor="middle" class="tc-val">31.5</text>
353
+ <text x="560" y="255.9" text-anchor="middle" class="tc-val">26.0</text>
354
+ <text x="538" y="358" text-anchor="middle" class="tc-ml">Hard</text>
355
+ <text x="538" y="372" text-anchor="middle" class="tc-ax">wrong grader</text>
356
+ <text x="538" y="390" text-anchor="middle" class="tc-dl" fill="#B0533A">&minus;5.5</text>
357
+
358
+ <!-- group 4: consensus -->
359
+ <rect x="632" y="53.2" width="40" height="286.8" fill="#87867F"/>
360
+ <rect x="676" y="93.9" width="40" height="246.1" fill="#D97757"/>
361
+ <text x="652" y="47.2" text-anchor="middle" class="tc-val">95.6</text>
362
+ <text x="696" y="87.9" text-anchor="middle" class="tc-val">82.0</text>
363
+ <text x="674" y="358" text-anchor="middle" class="tc-ml">Consensus</text>
364
+ <text x="674" y="372" text-anchor="middle" class="tc-ax">wrong grader</text>
365
+ <text x="674" y="390" text-anchor="middle" class="tc-dl" fill="#B0533A">&minus;13.6</text>
366
+
367
+ <rect x="60" y="408" width="12" height="12" fill="#87867F"/>
368
+ <text x="78" y="418" class="tc-lg">OpenAI published</text>
369
+ <rect x="200" y="408" width="12" height="12" fill="#D97757"/>
370
+ <text x="218" y="418" class="tc-lg">our run</text>
371
+ <text x="320" y="418" class="tc-ax">gpt-5.5, length-adjusted score (0 to 100)</text>
372
+ </svg>
373
+
374
+ <table>
375
+ <thead><tr><th>Check</th><th>Grader used</th><th class="num">OpenAI adj</th><th class="num">ours adj</th><th class="num">&Delta;</th><th class="num">OpenAI raw</th><th class="num">ours raw</th><th class="num">OpenAI chars</th><th class="num">ours chars</th></tr></thead>
376
+ <tbody>
377
+ <tr><td>Physician baseline (Prof)</td><td><span class="tag same">gpt-5.4 low</span></td><td class="num">43.7</td><td class="num">43.87</td><td class="num" style="color:#788C5D">+0.2</td><td class="num muted">n/a</td><td class="num">44.29</td><td class="num muted">n/a</td><td class="num muted">n/a</td></tr>
378
+ <tr><td>HealthBench (full)</td><td><span class="tag same">gpt-4.1</span></td><td class="num">56.5</td><td class="num">55.83</td><td class="num" style="color:#788C5D">&minus;0.7</td><td class="num">58.4</td><td class="num">56.87</td><td class="num">2313</td><td class="num">2175</td></tr>
379
+ <tr><td>HealthBench Professional</td><td><span class="tag same">gpt-5.4 low</span></td><td class="num">51.8</td><td class="num">47.81</td><td class="num" style="color:#D97757">&minus;4.0</td><td class="num">57.2</td><td class="num muted">n/a</td><td class="num">3818</td><td class="num">3748</td></tr>
380
+ <tr><td>HealthBench Hard</td><td><span class="tag diff">gpt-4o-mini</span></td><td class="num">31.5</td><td class="num">26.03</td><td class="num" style="color:#B0533A">&minus;5.5</td><td class="num">33.8</td><td class="num">27.27</td><td class="num">2289</td><td class="num">2158</td></tr>
381
+ <tr><td>HealthBench Consensus</td><td><span class="tag diff">gpt-4o-mini</span></td><td class="num">95.6</td><td class="num">82.02</td><td class="num" style="color:#B0533A">&minus;13.6</td><td class="num">95.7</td><td class="num">82.08</td><td class="num">2259</td><td class="num">2143</td></tr>
382
+ </tbody>
383
+ </table>
384
+ <p class="note">
385
+ Our Professional overall is a sample-weighted mean of the three use-case subsets (consult 236, writing 142,
386
+ research 147, total 525), since we ran them as separate tasks rather than one benchmark. Red teaming is a
387
+ cross-cutting slice of those same 525 examples, not a fourth use case, so it is excluded from the weighting.
388
+ </p>
389
+ <p>
390
+ Two things worth noticing beyond the scores. First, <b>mean response lengths track closely</b> (2175 vs 2313,
391
+ 2158 vs 2289, 2143 vs 2259, 3748 vs 3818), consistently about 5% shorter but never structurally different.
392
+ Since length is the one output property that would move if our prompting or harness diverged, this is good
393
+ evidence the request side is faithful. Second, the two <span class="tag same">correct grader</span> rows and
394
+ the two <span class="tag diff">wrong grader</span> rows separate perfectly, which is what makes the diagnosis
395
+ confident rather than speculative.
396
+ </p>
397
+
398
+ <h3 id="baseline">The physician baseline is the cleanest check we have</h3>
399
+ <p>
400
+ HealthBench Professional ships a set of <b>525 physician-written responses</b>. Scoring them involves no model
401
+ inference at all: the responses are fixed text, and the only moving part is the grader plus the aggregation.
402
+ So if our number matches OpenAI's, the entire scoring half of the pipeline is verified, and any remaining
403
+ discrepancy on real models has to live on the inference side.
404
+ </p>
405
+ <table>
406
+ <thead><tr><th>Physician baseline</th><th class="num">OpenAI published</th><th class="num">ours (recomputed)</th><th class="num">&Delta;</th></tr></thead>
407
+ <tbody>
408
+ <tr class="ours"><td>Overall</td><td class="num">43.7</td><td class="num">43.87</td><td class="num">+0.17</td></tr>
409
+ <tr><td>Care consult</td><td class="num">42.7</td><td class="num">42.54</td><td class="num">&minus;0.16</td></tr>
410
+ <tr><td>Writing and documentation</td><td class="num">32.1</td><td class="num">32.91</td><td class="num">+0.81</td></tr>
411
+ <tr><td>Medical research</td><td class="num">56.3</td><td class="num">56.60</td><td class="num">+0.30</td></tr>
412
+ </tbody>
413
+ </table>
414
+ <p class="note">
415
+ Every cell is within a point. Note that the per-use-case rows here are <b>recomputed from per-sample scores</b>,
416
+ not read off the log's own subset metrics, which are inflated for a reason covered in
417
+ <a href="#subscores">issue 4</a>.
418
+ </p>
419
+ <div class="callout">
420
+ <span class="star">&#9733;</span>
421
+ <span class="ct"><b>This is the finding that makes the rest interpretable.</b> Because the judge-only path
422
+ reproduces OpenAI to 0.2 points, the 4-point Professional gap on gpt-5.5 cannot be blamed on the grader,
423
+ the rubric, the length adjustment, or the aggregation. It is an inference-side difference, and reasoning
424
+ effort is the only inference-side knob that differs.</span>
425
+ </div>
426
+ </section>
427
+
428
+ <section id="config">
429
+ <h2>Config matrix</h2>
430
+ <p>What we set against what OpenAI's reference implementation sets, per variant.</p>
431
+ <table>
432
+ <thead><tr><th>Setting</th><th>OpenAI reference</th><th>hs-non-professional</th><th>hs-hard</th><th>hs-consensus</th><th>hs-prof-subsets</th><th>ds-v4-pro re-run <span class="vtag">v2</span></th></tr></thead>
433
+ <tbody>
434
+ <tr><td>Grader model</td><td>gpt-4.1 / gpt-5.4 low</td><td><span class="tag same">gpt-4.1</span></td><td><span class="tag diff">gpt-4o-mini</span></td><td><span class="tag diff">gpt-4o-mini</span></td><td><span class="tag same">gpt-5.4 low</span></td><td><span class="tag same">gpt-5.4 low</span></td></tr>
435
+ <tr><td>Grader system msg</td><td>"You are a helpful assistant."</td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td><td><span class="tag same">same</span></td></tr>
436
+ <tr><td>Length adj. center</td><td>2000 chars</td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td><td><span class="tag same">2000</span></td></tr>
437
+ <tr><td>Length adj. penalty</td><td>2.99 / 3.92 / 0.20 / 1.47</td><td><span class="tag same">0.0299</span></td><td><span class="tag same">0.0392</span></td><td><span class="tag same">0.002</span></td><td><span class="tag same">0.0147</span></td><td><span class="tag same">0.0147</span></td></tr>
438
+ <tr><td>Per-sample clipping</td><td>none (mean is clipped)</td><td><span class="tag same">none</span></td><td><span class="tag same">none</span></td><td><span class="tag same">none</span></td><td><span class="tag diff">subscores clipped</span></td><td><span class="tag diff">subscores clipped</span></td></tr>
439
+ <tr><td>Dataset size</td><td>5000 / 1000 / 3671 / 525</td><td><span class="tag same">5000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">3671</span></td><td><span class="tag same">525</span></td><td><span class="tag same">525</span></td></tr>
440
+ <tr><td>Samples per example</td><td>1 (main), 8 (Prof)</td><td><span class="tag same">1</span></td><td><span class="tag same">1</span></td><td><span class="tag same">1</span></td><td><span class="tag same">8</span> <span class="tag diff">1 for deepseek</span></td><td><span class="tag diff">1</span></td></tr>
441
+ <tr><td>Reasoning effort</td><td>highest available</td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td><td><span class="tag diff">unset</span></td></tr>
442
+ <tr><td>Headline metric</td><td>length-adjusted</td><td><span class="tag diff">unadjusted</span></td><td><span class="tag diff">unadjusted</span></td><td><span class="tag diff">unadjusted</span></td><td><span class="tag same">length-adjusted</span></td><td><span class="tag same">length-adjusted</span></td></tr>
443
+ <tr><td>Task shape</td><td>one benchmark</td><td><span class="tag same">one task</span></td><td><span class="tag same">one task</span></td><td><span class="tag same">one task</span></td><td><span class="tag diff">5 subset tasks</span></td><td><span class="tag same">one task</span></td></tr>
444
+ <tr><td>Bootstrap resamples</td><td>1000</td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td><td><span class="tag same">1000</span></td></tr>
445
+ </tbody>
446
+ </table>
447
+ <p class="note">
448
+ <span class="ok">v2:</span> the re-run column is DeepSeek only. It closes the task-shape and explicit-grader
449
+ gaps and leaves the two that matter most for score comparability &mdash; <b>samples per example</b> and
450
+ <b>reasoning effort</b> &mdash; exactly where they were.
451
+ </p>
452
+ <p class="note">
453
+ The length adjustment is worth calling out as correct-by-verification, not just correct-by-declaration: we
454
+ confirmed the arithmetic per sample against
455
+ <code>score &minus; penalty &times; ((len &minus; center) / 500)</code>, OpenAI's
456
+ <code>calculate_length_adjusted_score</code>. On one Hard sample: raw 0.6102, completion 13,776 chars, giving
457
+ 0.6102 &minus; 0.0392 &times; 23.552 = &minus;0.3131, which is exactly the stored value.
458
+ </p>
459
+ </section>
460
+
461
+ <section id="judge">
462
+ <h2>Issue 1: Hard and Consensus were graded by gpt-4o-mini</h2>
463
+ <p>
464
+ This is the largest error and it was not a deliberate choice. The <code>inspect_evals</code> task wrappers for
465
+ these two variants accept only the length-adjustment arguments and pass nothing else through, so
466
+ <code>judge_model</code> silently keeps the package default of <code>openai/gpt-4o-mini</code>:
467
+ </p>
468
+ <details>
469
+ <summary>The wrapper that drops the judge argument <span class="where">inspect_evals/healthbench/healthbench.py</span></summary>
470
+ <div class="body">
471
+ <pre>def healthbench(
472
+ ...
473
+ judge_model: str | Model = "openai/gpt-4o-mini", <span class="muted"># package default</span>
474
+ ...
475
+ )
476
+
477
+ @task
478
+ def healthbench_hard(
479
+ length_adjustment_center: float | None = None,
480
+ length_adjustment_penalty_per_500_chars: float | None = None,
481
+ ) -&gt; Task:
482
+ return healthbench( <span class="muted"># judge_model never forwarded</span>
483
+ subset="hard",
484
+ length_adjustment_center=length_adjustment_center,
485
+ length_adjustment_penalty_per_500_chars=length_adjustment_penalty_per_500_chars,
486
+ )</pre>
487
+ <p>Our <code>hs-non-professional</code> run passed <code>judge_model: "openai/gpt-4.1"</code> explicitly and got
488
+ it. The Hard and Consensus runs declared no judge at all in <code>task_args</code>, and inspecting the model
489
+ events in the logs confirms every grading call went to <code>gpt-4o-mini-2024-07-18</code>.</p>
490
+ </div>
491
+ </details>
492
+ <p>
493
+ OpenAI never grades any variant with a mini-tier model. In <code>simple_evals.py</code> the same
494
+ <code>healthbench_grading_sampler</code> is handed to <code>healthbench</code>, <code>healthbench_hard</code>
495
+ and <code>healthbench_consensus</code> alike, so all three get GPT-4.1, or all three get GPT-5.4 low when the
496
+ <code>--healthbench-use-gpt-5-4-low-grader</code> flag is set.
497
+ </p>
498
+ <p>
499
+ The HealthBench paper measured what a weaker grader costs. Its meta-evaluation ranks candidate graders by
500
+ agreement with physicians (Macro-F1): <b>GPT-4.1 0.709</b>, o4-mini 0.692, o3 0.681, GPT-4.1 mini 0.661,
501
+ GPT-4.1 nano 0.580, and calls the smaller variants "substantially worse". <code>gpt-4o-mini</code> is not in
502
+ that table but sits below GPT-4.1 mini in capability, so 0.661 is the optimistic bound.
503
+ </p>
504
+ <div class="callout">
505
+ <span class="star">&#9733;</span>
506
+ <span class="ct"><b>Consensus is the smoking gun.</b> OpenAI's Consensus scores are 94 to 96 for every model
507
+ from gpt-5 through gpt-5.6, because the subset is deliberately low-noise and near-saturated. Our whole
508
+ Consensus space sits between <b>71 and 82</b>. That is not our models underperforming, that is the grader
509
+ failing to recognise criteria that a stronger grader marks as met.</span>
510
+ </div>
511
+ </section>
512
+
513
+ <section id="effort">
514
+ <h2>Issue 2: reasoning effort is never set, and the models diverge because of it</h2>
515
+ <p>
516
+ The HealthBench Professional paper states that models are "evaluated at the highest reasoning effort option
517
+ available via each model's API (e.g., xhigh for GPT-5.4)", and measures a <b>5.6 to 7.3 point</b> gain moving
518
+ from low to xhigh. None of our runs pass a reasoning effort, so each provider's default applies, and the
519
+ defaults are not comparable to each other:
520
+ </p>
521
+ <table>
522
+ <thead><tr><th>Model (HealthBench Hard, 1000 samples)</th><th class="num">frac. with reasoning</th><th class="num">mean reasoning tokens</th><th>generate config sent</th></tr></thead>
523
+ <tbody>
524
+ <tr><td>openai/gpt-5.5</td><td class="num">0.97</td><td class="num">291</td><td><code>{cache: true}</code></td></tr>
525
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">0.86</td><td class="num">489</td><td><code>{cache: true}</code></td></tr>
526
+ <tr class="ours"><td>anthropic/claude-opus-4-7</td><td class="num">0.00</td><td class="num">0</td><td><code>{cache: true, max_tokens: 32000}</code></td></tr>
527
+ <tr><td>plamo-3.0-prime</td><td class="num">0.00</td><td class="num">0</td><td><code>{cache: true}</code></td></tr>
528
+ <tr><td>medgemma-4b / 27b</td><td class="num">0.00</td><td class="num">0</td><td><code>{cache: true}</code></td></tr>
529
+ </tbody>
530
+ </table>
531
+ <p>
532
+ Claude ran with <b>extended thinking off on every sample of every log</b>, while gpt-5.5 and DeepSeek reasoned
533
+ by default. Whatever the intended comparison was, this is not it: the reasoning models get their default
534
+ budget and Claude gets none. Claude is the most disadvantaged model in the set for a reason that has nothing
535
+ to do with Claude.
536
+ </p>
537
+ <p>
538
+ This also explains the one gap the grader cannot account for. On Professional, where our grader is correct and
539
+ the physician baseline matches to 0.2 points, gpt-5.5 still lands 4 points low. A default-effort versus
540
+ highest-effort difference of that size is consistent with the 5.6 to 7.3 point low-to-xhigh delta OpenAI
541
+ reports.
542
+ </p>
543
+ </section>
544
+
545
+ <section id="headline">
546
+ <h2>Issue 3: three spaces show the unadjusted score as the headline</h2>
547
+ <p>
548
+ OpenAI reports "length-adjusted score (unadjusted, mean response length in characters)", so the adjusted
549
+ number is the primary one. In our <code>listing.json</code> the <code>primary_metric</code> for
550
+ <code>hs-non-professional</code>, <code>hs-hard</code> and <code>hs-consensus</code> is the
551
+ <b>unadjusted</b> <code>bootstrap_score</code>. Only <code>hs-prof-subsets</code> carries
552
+ <code>use_length_adjusted: true</code>.
553
+ </p>
554
+ <p>
555
+ This is not cosmetic. Length adjustment reorders the Hard leaderboard almost completely, because our models
556
+ differ enormously in verbosity:
557
+ </p>
558
+ <table>
559
+ <thead><tr><th>Model</th><th class="num">mean chars</th><th class="num">raw</th><th class="num">length-adj</th><th class="num">shift</th><th class="num">rank raw</th><th class="num">rank adj</th></tr></thead>
560
+ <tbody>
561
+ <tr><td>anthropic/claude-opus-4-7</td><td class="num">1849</td><td class="num">26.61</td><td class="num">27.80</td><td class="num" style="color:#788C5D">+1.2</td><td class="num">2</td><td class="num">1</td></tr>
562
+ <tr><td>openai/gpt-5.5</td><td class="num">2158</td><td class="num">27.27</td><td class="num">26.03</td><td class="num">&minus;1.2</td><td class="num">1</td><td class="num">2</td></tr>
563
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">3408</td><td class="num">24.84</td><td class="num">13.80</td><td class="num" style="color:#B0533A">&minus;11.0</td><td class="num">3</td><td class="num">3</td></tr>
564
+ <tr><td>plamo-3.0-prime</td><td class="num">2997</td><td class="num">17.43</td><td class="num">9.61</td><td class="num" style="color:#B0533A">&minus;7.8</td><td class="num">5</td><td class="num">4</td></tr>
565
+ <tr><td>vllm/medgemma-27b</td><td class="num">4073</td><td class="num">21.09</td><td class="num">4.83</td><td class="num" style="color:#B0533A">&minus;16.3</td><td class="num">4</td><td class="num">5</td></tr>
566
+ <tr><td>vllm/medgemma-4b</td><td class="num">3192</td><td class="num">10.60</td><td class="num">1.26</td><td class="num" style="color:#B0533A">&minus;9.3</td><td class="num">6</td><td class="num">6</td></tr>
567
+ </tbody>
568
+ </table>
569
+ <p class="note">
570
+ Claude gains because it is the only model averaging under the 2000-character centre. medgemma-27b loses 16
571
+ points. Anyone reading the space's default metric is reading a different ranking from the one OpenAI's
572
+ methodology produces.
573
+ </p>
574
+ </section>
575
+
576
+ <section id="subscores">
577
+ <h2>Issue 4: the Professional per-use-case subscores are inflated</h2>
578
+ <p>
579
+ The custom <code>healthbench_professional.py</code> emits <code>use_case_*_score</code>,
580
+ <code>type_*_score</code> and <code>difficulty_*_score</code> metrics alongside the headline. <b>These do not
581
+ use the same aggregation as the headline and should not be quoted.</b>
582
+ </p>
583
+ <div class="callout">
584
+ <span class="star">&#9733;</span>
585
+ <span class="ct"><b>v2 correction: the mechanism is now pinned exactly, and it is worse than v1 said.</b>
586
+ v1 described these subscores as "consistent with per-sample clipping" of the length-adjusted score, with a
587
+ residual attributed to bootstrap noise. The DeepSeek re-run separates the two candidate formulas cleanly,
588
+ because DeepSeek is verbose enough that adjusted and unadjusted scores diverge sharply. Every one of the ten
589
+ subset metrics in that log reproduces to six decimal places as
590
+ <code>mean(clip(<b>unadjusted</b> score, 0, 1))</code>. So the subscores are not a clipped version of the
591
+ headline metric &mdash; <b>they ignore the length adjustment entirely</b>, despite the run declaring
592
+ <code>use_length_adjusted: true</code>, and then clip per sample on top. Both errors push the same way.</span>
593
+ </div>
594
+ <table>
595
+ <thead><tr><th>DeepSeek re-run, by slice</th><th class="num">as reported in the log</th><th class="num">mean(clip(raw))</th><th class="num">mean(clip(adj))</th><th class="num">correct (mean adj)</th><th class="num">inflation</th></tr></thead>
596
+ <tbody>
597
+ <tr><td>Care consult</td><td class="num" style="color:#B0533A">46.05</td><td class="num">46.05</td><td class="num muted">42.70</td><td class="num">31.83</td><td class="num">+14.2</td></tr>
598
+ <tr><td>Writing and documentation</td><td class="num" style="color:#B0533A">35.43</td><td class="num">35.43</td><td class="num muted">32.42</td><td class="num">6.70</td><td class="num">+28.7</td></tr>
599
+ <tr><td>Medical research</td><td class="num" style="color:#B0533A">66.60</td><td class="num">66.60</td><td class="num muted">57.00</td><td class="num">53.10</td><td class="num">+13.5</td></tr>
600
+ <tr class="new"><td>Red teaming</td><td class="num" style="color:#B0533A">24.94</td><td class="num">24.94</td><td class="num muted">23.98</td><td class="num">&minus;5.19</td><td class="num">+30.1</td></tr>
601
+ <tr><td>Difficult</td><td class="num" style="color:#B0533A">28.67</td><td class="num">28.67</td><td class="num muted">27.38</td><td class="num">3.51</td><td class="num">+25.2</td></tr>
602
+ <tr><td>Typical</td><td class="num" style="color:#B0533A">70.23</td><td class="num">70.23</td><td class="num muted">61.30</td><td class="num">59.86</td><td class="num">+10.4</td></tr>
603
+ </tbody>
604
+ </table>
605
+ <p class="note">
606
+ The <code>mean(clip(raw))</code> column matches the reported column exactly, to six decimals, on all ten subset
607
+ metrics the log emits &mdash; there is no bootstrap noise in these numbers at all. Red teaming is the clearest
608
+ illustration of the damage: the log presents it as <b>24.94</b> when the correctly aggregated value is
609
+ <b>&minus;5.19</b>, a 30-point swing that flips the slice from mediocre to negative.
610
+ </p>
611
+ <p>
612
+ The same error was present in the v1 spaces; it was simply harder to characterise there, because the
613
+ physician-baseline responses are short enough that the adjusted and unadjusted scores nearly coincide.
614
+ </p>
615
+ <p>
616
+ The physician baseline makes the error measurable, because OpenAI publishes the ground truth for exactly these
617
+ three cells:
618
+ </p>
619
+ <table>
620
+ <thead><tr><th>Physician baseline by use case</th><th class="num">OpenAI</th><th class="num">recomputed correctly</th><th class="num">as reported in our log</th><th class="num">inflation</th></tr></thead>
621
+ <tbody>
622
+ <tr><td>Care consult</td><td class="num">42.7</td><td class="num">42.54</td><td class="num" style="color:#B0533A">48.4</td><td class="num">+5.9</td></tr>
623
+ <tr><td>Writing and documentation</td><td class="num">32.1</td><td class="num">32.91</td><td class="num" style="color:#B0533A">44.9</td><td class="num">+12.0</td></tr>
624
+ <tr><td>Medical research</td><td class="num">56.3</td><td class="num">56.60</td><td class="num" style="color:#B0533A">59.0</td><td class="num">+2.4</td></tr>
625
+ </tbody>
626
+ </table>
627
+ <details>
628
+ <summary>The arithmetic that identifies the cause <span class="where">525 examples &times; 8 epochs = 4200</span></summary>
629
+ <div class="body">
630
+ <pre>overall mean raw = 44.29 <span class="muted"># matches reported 44.29</span>
631
+ overall mean adj = 43.87 <span class="muted"># matches reported 43.87, and OpenAI's 43.7</span>
632
+ overall mean adj, clipped per-sample= 49.71
633
+ frac. of samples with adj &lt; 0 = 0.164
634
+
635
+ by use case n mean_adj clipped_per_sample
636
+ consult 1888 42.54 48.09
637
+ research 1176 56.60 57.47
638
+ writing 1136 32.91 44.39</pre>
639
+ <p>16.4% of physician responses score below zero once the length penalty applies, mostly short writing-task
640
+ answers that trip negative rubric criteria. Clipping those to zero before averaging is what lifts writing from
641
+ 32.9 to roughly 44. <span class="ok">v2:</span> on the physician baseline the clipped-raw and clipped-adjusted
642
+ columns are within 0.002 of each other, which is why v1 could not tell them apart and read the ~0.3 residual as
643
+ bootstrap noise. The DeepSeek re-run resolves it: the formula is clipped <b>raw</b>.</p>
644
+ </div>
645
+ </details>
646
+ <p>
647
+ The headline <code>bootstrap_score</code> is unaffected and remains correct. Only the subset breakdowns are
648
+ wrong, which matters because the by-use-case split is the most quoted view of Professional results.
649
+ </p>
650
+ </section>
651
+
652
+ <section id="floored">
653
+ <h2>Issue 5: five Professional scores are floored at zero</h2>
654
+ <p>
655
+ OpenAI clips the aggregate mean to [0, 1], and our implementation follows suit, so this is faithful behaviour
656
+ rather than a bug. But it means five reported numbers are all displayed as <code>0.00</code> while their true
657
+ values differ by 7 points, which hides real ranking information:
658
+ </p>
659
+ <table>
660
+ <thead><tr><th>Model</th><th>Subset</th><th class="num">reported</th><th class="num">true unclipped mean</th></tr></thead>
661
+ <tbody>
662
+ <tr><td>plamo-3.0-prime</td><td>red teaming</td><td class="num">0.00</td><td class="num">&minus;11.82</td></tr>
663
+ <tr><td>openrouter/deepseek-v4-pro</td><td>red teaming (ep 1)</td><td class="num">0.00</td><td class="num">&minus;8.29</td></tr>
664
+ <tr><td>openrouter/deepseek-v4-pro</td><td>red teaming (ep 8)</td><td class="num">0.00</td><td class="num">&minus;6.87</td></tr>
665
+ <tr><td>vllm/medgemma-27b</td><td>red teaming</td><td class="num">0.00</td><td class="num">&minus;6.80</td></tr>
666
+ <tr><td>plamo-3.0-prime</td><td>writing</td><td class="num">0.00</td><td class="num">&minus;4.31</td></tr>
667
+ </tbody>
668
+ </table>
669
+ <p class="note">
670
+ Worth reporting the unclipped value alongside the clipped one for these, or at least noting that a zero means
671
+ "at or below zero" rather than "scored nothing".
672
+ </p>
673
+ </section>
674
+
675
+ <section id="hygiene">
676
+ <h2>Run hygiene</h2>
677
+ <details>
678
+ <summary>DeepSeek's Professional runs are under-sampled, and its consult run is the only one <span class="where">hs-prof-subsets &middot; superseded in v2</span></summary>
679
+ <div class="body">
680
+ <p>Every model ran <code>epochs=8</code>, matching the paper's "8 samples per example". The 2026-07-25 DeepSeek
681
+ batch ran <code>epochs=1</code>. For <code>writing</code>, <code>research</code>, <code>red_teaming</code> and
682
+ <code>physician_baseline</code> both variants exist in <code>listing.json</code>, so the viewer shows duplicate
683
+ conflicting entries. For <code>consult</code> the epochs=1 run is the <b>only</b> DeepSeek run, so it sits in
684
+ the same chart as everyone else at one eighth the sampling.</p>
685
+ <p>The good news is the two variants agree closely where both exist (research 51.85 vs 52.91, writing 5.16 vs
686
+ 4.95, red teaming floored in both), so the practical distortion is small. It is still worth deleting the
687
+ epochs=1 logs and re-running consult at 8.</p>
688
+ <p><span class="ok">v2 update, and one thing v1 got wrong.</span> The 2026-07-25 epochs=1 batch was worse than
689
+ under-sampled: <b>it made no model calls at all</b>. Every one of those five logs reports an empty
690
+ <code>model_usage</code>, meaning both the candidate generations and the grader responses were served from
691
+ Inspect's response cache. They are cache replays of an earlier run, not independent runs, which is why they
692
+ completed in seconds. v1 read the close agreement between the epochs=1 and epochs=8 variants as reassuring;
693
+ it was tautological. The <a href="#v2">2026-08-06 re-run</a> is a genuine run &mdash; 967k output tokens
694
+ billed to DeepSeek, 476 cached input tokens &mdash; and it moves consult from 25.59 to 31.83. The
695
+ duplicate-entry and no-real-consult-run problems are resolved. <b>Epochs is still 1</b>, so the
696
+ under-sampling itself is not.</p>
697
+ </div>
698
+ </details>
699
+ <details>
700
+ <summary>medgemma-4b is missing four of five Professional subsets <span class="where">hs-prof-subsets</span></summary>
701
+ <div class="body">
702
+ <p>Only <code>consult</code> exists (score 8.19). Writing, research, red teaming and physician baseline were
703
+ never run, so medgemma-4b has no Professional overall and cannot appear in a like-for-like comparison.</p>
704
+ </div>
705
+ </details>
706
+ <details>
707
+ <summary>Response caching is on and demonstrably active <span class="where">plan: generate(cache=true)</span></summary>
708
+ <div class="body">
709
+ <p>Four of the five physician-baseline runs report byte-identical scores of 0.44291, which only happens if the
710
+ grader responses came from cache. Inspect's cache key includes the epoch by default
711
+ (<code>CachePolicy.per_epoch = True</code>), so the 8 epochs are not collapsing into one, which was the real
712
+ risk. The remaining caveat is that a re-run inside the one-week TTL is not an independent sample, so a repeat
713
+ run cannot be used as a variance estimate.</p>
714
+ </div>
715
+ </details>
716
+ <details>
717
+ <summary>Two different inspect_evals versions inside the same space <span class="where">0.14.3 vs 0.16.0</span></summary>
718
+ <div class="body">
719
+ <p>The frontier-model runs (July 15 to 16) used <code>inspect_evals 0.14.3</code> with
720
+ <code>inspect_ai 0.3.246</code>; the medgemma runs (July 24) used <code>0.16.0</code> with
721
+ <code>0.3.249</code>. Same space, same chart, different scorer code. Worth confirming the healthbench scorer
722
+ did not change across those releases before comparing medgemma against the frontier models.</p>
723
+ </div>
724
+ </details>
725
+ <details>
726
+ <summary>Outlier generations and empty completions <span class="where">hs-hard</span></summary>
727
+ <div class="body">
728
+ <p>All runs completed with zero sample errors. Two small things: medgemma-4b produced one 110,722-character
729
+ response on Hard, which carries a length penalty of &minus;8.5 on its own and moves the 1000-sample mean by
730
+ about 0.9 points; and claude-opus-4-7 returned 7 empty completions on Hard, each scored zero. Neither is
731
+ fatal, both are worth a spot check.</p>
732
+ </div>
733
+ </details>
734
+ </section>
735
+
736
+ <section id="fixes">
737
+ <h2>What to change</h2>
738
+ <div class="ladder">
739
+ <div class="chip miss">judge: gpt-4.1 or gpt-5.4-low on hard</div>
740
+ <div class="chip miss">judge: gpt-4.1 or gpt-5.4-low on consensus</div>
741
+ <div class="chip miss">reasoning effort: highest, all models</div>
742
+ <div class="chip miss">claude: enable extended thinking</div>
743
+ <div class="chip miss">headline: length-adjusted, 3 spaces</div>
744
+ <div class="chip miss">prof subscores: use adj score, no clip</div>
745
+ <div class="chip part">deepseek consult: real run &#10003;, epochs 8 &#10007;</div>
746
+ <div class="chip miss">medgemma-4b: run 4 missing subsets</div>
747
+ <div class="chip done">deepseek: duplicate listing entries</div>
748
+ <div class="chip done">prof: one task, not 5 subset tasks</div>
749
+ <div class="chip hit">length adjustment constants</div>
750
+ <div class="chip hit">dataset sizes and splits</div>
751
+ <div class="chip hit">grader system message and temp</div>
752
+ <div class="chip hit">bootstrap and mean clipping</div>
753
+ <div class="chip hit">epochs 8 on Professional</div>
754
+ <div class="chip hit">prompting and harness (length match)</div>
755
+ </div>
756
+ <div class="ladder-legend">clay = needs changing &nbsp;&middot;&nbsp; olive = verified correct, leave alone &nbsp;&middot;&nbsp;
757
+ struck through = fixed by the v2 re-run &nbsp;&middot;&nbsp; grey = partly fixed</div>
758
+
759
+ <p>Concretely, for the two broken variants, stop using the wrapper tasks and call the parent task instead:</p>
760
+ <details>
761
+ <summary>Getting a real judge into Hard and Consensus <span class="where">the wrapper cannot do it</span></summary>
762
+ <div class="body">
763
+ <pre><span class="muted"># broken: judge_model silently defaults to gpt-4o-mini</span>
764
+ inspect eval inspect_evals/healthbench_hard \
765
+ -T length_adjustment_center=2000 \
766
+ -T length_adjustment_penalty_per_500_chars=0.0392
767
+
768
+ <span class="muted"># works: call healthbench() directly with subset=</span>
769
+ inspect eval inspect_evals/healthbench \
770
+ -T subset=hard \
771
+ -T judge_model=<span class="hl">openai/gpt-4.1</span> \
772
+ -T length_adjustment_center=2000 \
773
+ -T length_adjustment_penalty_per_500_chars=0.0392</pre>
774
+ <p>Worth considering GPT-5.4 at low reasoning for all four variants instead. The Professional paper notes the
775
+ external implementation now has "an option to use settings matching our internal implementation (e.g., GPT-5.4
776
+ at low reasoning effort as a grader)" and that OpenAI intends to keep reporting from the internal one. Using it
777
+ everywhere would both fix the deviation and make our four spaces internally comparable for the first time.</p>
778
+ </div>
779
+ </details>
780
+ <p class="note">
781
+ Re-running with the correct grader and highest reasoning effort should move Hard up by roughly 5 points and
782
+ Consensus up by roughly 13 toward the published band. If it does not, that is the signal something else is
783
+ wrong. If it does, the config is settled.
784
+ </p>
785
+ </section>
786
+
787
+ <section id="full">
788
+ <h2>Full results</h2>
789
+ <h3>Main variants, all six models</h3>
790
+ <table>
791
+ <thead><tr><th>Model</th><th class="num">full raw</th><th class="num">full adj</th><th class="num">hard raw</th><th class="num">hard adj</th><th class="num">cons. raw</th><th class="num">cons. adj</th></tr></thead>
792
+ <tbody>
793
+ <tr class="ours"><td>openai/gpt-5.5</td><td class="num">56.87</td><td class="num">55.83</td><td class="num">27.27</td><td class="num">26.03</td><td class="num">82.08</td><td class="num">82.02</td></tr>
794
+ <tr class="ours"><td>anthropic/claude-opus-4-7</td><td class="num">53.44</td><td class="num">54.31</td><td class="num">26.61</td><td class="num">27.80</td><td class="num">80.17</td><td class="num">80.23</td></tr>
795
+ <tr><td>openrouter/deepseek-v4-pro</td><td class="num">51.37</td><td class="num">41.73</td><td class="num">24.84</td><td class="num">13.80</td><td class="num">79.10</td><td class="num">78.46</td></tr>
796
+ <tr><td>vllm/medgemma-27b-text-it</td><td class="num">47.20</td><td class="num">33.21</td><td class="num">21.09</td><td class="num">4.83</td><td class="num">77.58</td><td class="num">76.61</td></tr>
797
+ <tr><td>openai-api/plamo-3.0-prime</td><td class="num">39.42</td><td class="num">32.43</td><td class="num">17.43</td><td class="num">9.61</td><td class="num">75.25</td><td class="num">74.78</td></tr>
798
+ <tr><td>vllm/medgemma-4b-it</td><td class="num">26.97</td><td class="num">18.32</td><td class="num">10.60</td><td class="num">1.26</td><td class="num">71.37</td><td class="num">70.77</td></tr>
799
+ <tr class="human"><td>OpenAI published, gpt-5.5</td><td class="num">58.4</td><td class="num">56.5</td><td class="num">33.8</td><td class="num">31.5</td><td class="num">95.7</td><td class="num">95.6</td></tr>
800
+ </tbody>
801
+ </table>
802
+ <p class="note">
803
+ Judge: gpt-4.1 for full, gpt-4o-mini for hard and consensus. Epochs 1 throughout. All runs completed with zero
804
+ errors. Only the full column is grader-comparable to the published row.
805
+ </p>
806
+
807
+ <h3>Professional subsets, length-adjusted</h3>
808
+ <table>
809
+ <thead><tr><th>Model</th><th class="num">consult</th><th class="num">writing</th><th class="num">research</th><th class="num">red team</th><th class="num">weighted overall</th></tr></thead>
810
+ <tbody>
811
+ <tr class="ours"><td>anthropic/claude-opus-4-7</td><td class="num">47.04</td><td class="num">36.15</td><td class="num">61.07</td><td class="num">26.74</td><td class="num">48.02</td></tr>
812
+ <tr class="ours"><td>openai/gpt-5.5</td><td class="num">48.64</td><td class="num">35.96</td><td class="num">57.92</td><td class="num">28.19</td><td class="num">47.81</td></tr>
813
+ <tr class="new"><td>openrouter/deepseek-v4-pro <span class="vtag">v2 re-run</span></td><td class="num">31.83</td><td class="num">6.70</td><td class="num">53.10</td><td class="num">&minus;5.19</td><td class="num">30.99</td></tr>
814
+ <tr><td class="muted">openrouter/deepseek-v4-pro <span class="note">(v1, superseded)</span></td><td class="num muted">25.59</td><td class="num muted">4.95</td><td class="num muted">52.91</td><td class="num muted">&minus;6.87</td><td class="num muted">27.66</td></tr>
815
+ <tr><td>vllm/medgemma-27b-text-it</td><td class="num">17.78</td><td class="num">9.13</td><td class="num">34.40</td><td class="num">&minus;6.80</td><td class="num">20.09</td></tr>
816
+ <tr><td>openai-api/plamo-3.0-prime</td><td class="num">15.36</td><td class="num">&minus;4.31</td><td class="num">28.58</td><td class="num">&minus;11.82</td><td class="num">13.74</td></tr>
817
+ <tr><td>vllm/medgemma-4b-it</td><td class="num">8.19</td><td class="num muted">not run</td><td class="num muted">not run</td><td class="num muted">not run</td><td class="num muted">n/a</td></tr>
818
+ <tr class="human"><td>Physician baseline (ours)</td><td class="num">42.54</td><td class="num">32.91</td><td class="num">56.60</td><td class="num muted">n/a</td><td class="num">43.87</td></tr>
819
+ <tr class="human"><td>Physician baseline (OpenAI)</td><td class="num">42.7</td><td class="num">32.1</td><td class="num">56.3</td><td class="num muted">n/a</td><td class="num">43.7</td></tr>
820
+ <tr class="human"><td>OpenAI published, gpt-5.5</td><td class="num muted">n/a</td><td class="num muted">n/a</td><td class="num muted">n/a</td><td class="num muted">n/a</td><td class="num">51.8</td></tr>
821
+ </tbody>
822
+ </table>
823
+ <p class="note">
824
+ Red teaming values are shown unclipped so the ordering is visible; the logs report these as 0.00. Weighted
825
+ overall uses consult 236, writing 142, research 147. Only gpt-5.5 and claude-opus-4-7 beat the physician
826
+ baseline overall, and both do so narrowly.
827
+ </p>
828
+ <p class="note">
829
+ <span class="ok">v2:</span> the DeepSeek row now comes from the 2026-08-06 single-task re-run, whose 30.99 is a
830
+ native overall rather than a weighted stitch. Its subset figures are recomputed from per-sample data, not read
831
+ off the log's own subset metrics, which are inflated &mdash; see <a href="#subscores">issue 4</a>. The
832
+ superseded v1 row is kept for traceability: its consult and writing figures came from the 2026-07-25 cache
833
+ replay, and its research and red-teaming figures from the 2026-07-24 epochs=8 runs. Every other model's row is
834
+ still epochs=8 and unchanged, so DeepSeek is the only single-sample row in this table.
835
+ </p>
836
+ </section>
837
+
838
+ <section id="method">
839
+ <h2>How this was checked</h2>
840
+ <p>
841
+ The four HuggingFace spaces were cloned and their <code>.eval</code> logs pulled as real LFS blobs (the plain
842
+ clone yields 133-byte pointers). Headers gave the declared config; per-sample model events gave the config
843
+ actually sent, including which model served every grading call; per-sample scores were re-aggregated
844
+ independently to confirm the reported metrics and to recompute the subset breakdowns.
845
+ </p>
846
+ <table>
847
+ <thead><tr><th>Space</th><th class="num">logs</th><th class="num">size</th><th>task</th><th class="num">samples/run</th></tr></thead>
848
+ <tbody>
849
+ <tr><td>hs-non-professional</td><td class="num">6</td><td class="num">573 MB</td><td><code>inspect_evals/healthbench</code></td><td class="num">5000</td></tr>
850
+ <tr><td>hs-hard</td><td class="num">6</td><td class="num">113 MB</td><td><code>inspect_evals/healthbench_hard</code></td><td class="num">1000</td></tr>
851
+ <tr><td>hs-consensus</td><td class="num">6</td><td class="num">256 MB</td><td><code>inspect_evals/healthbench_consensus</code></td><td class="num">3671</td></tr>
852
+ <tr><td>hs-prof-subsets</td><td class="num">30</td><td class="num">714 MB</td><td><code>healthbench_professional_*</code></td><td class="num">525</td></tr>
853
+ <tr class="new"><td>healthbench-professional-deepseek-v4-pro <span class="vtag">v2</span></td><td class="num">1</td><td class="num">10 MB</td><td><code>healthbench_professional</code></td><td class="num">525</td></tr>
854
+ </tbody>
855
+ </table>
856
+ <p class="note">
857
+ Local copies at <code>/Users/kazuki/Sandbox/hb-spaces/</code>. The <code>hs-original</code> space was excluded,
858
+ its link is broken. The v2 space's <code>.eval</code> was fetched over the HuggingFace
859
+ <code>resolve/main</code> endpoint rather than <code>git lfs pull</code>, since git-lfs is not installed on
860
+ this machine; the file is a valid zstd-compressed Inspect log and reads cleanly. Reference sources: HealthBench (<a href="https://arxiv.org/abs/2505.08775">arXiv:2505.08775</a>),
861
+ HealthBench Professional (<a href="https://arxiv.org/abs/2604.27470">arXiv:2604.27470</a>), the
862
+ <a href="https://deploymentsafety.openai.com/gpt-5-6-preview/healthbench">GPT-5.6 Preview system card</a> Table 6,
863
+ and <a href="https://github.com/openai/simple-evals">openai/simple-evals</a>.
864
+ </p>
865
+ </section>
866
+
867
+ </main>
868
+ </div>
869
+ </body>
870
+ </html>
data/INDEX.md ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ajay's HealthBench HF Spaces — local mirror
2
+
3
+ Mirror of every HealthBench-related space under `huggingface.co/ajay-citadel`.
4
+ Inventory taken 2026-08-07. Per-run detail: `MANIFEST.csv` (68 runs), raw headers: `headers_raw.json`.
5
+
6
+ Space URL pattern: `https://huggingface.co/spaces/ajay-citadel/<dir>`
7
+ Log URL pattern: `.../resolve/main/logs/<file>.eval`
8
+
9
+ | dir | space | runs | date | what it is |
10
+ |---|---|---|---|---|
11
+ | `healthbench-v1` (symlink → `inspect_ai/sandbox/healthbench-v1`) | healthbench-v1 | 7 (2 ok, 4 err/cancelled) | 07-09 | first attempt, `gpt-4o-mini` judge, no length adjustment |
12
+ | `hs-non-professional` | hs-non-professional | 6 | 07-15..24 | HealthBench full (n=5000), `gpt-4.1` judge |
13
+ | `hs-consensus` | hs-consensus | 6 | 07-16..24 | HealthBench consensus (n=3671) |
14
+ | `hs-hard` | hs-hard | 6 | 07-16..24 | HealthBench hard (n=1000) |
15
+ | `hs-original` | hs-original | 6 | 07-24..25 | HealthBench **Professional** full (n=525, epochs=8) |
16
+ | `hs-prof-subsets` | hs-prof-subsets | 26 | 07-24..25 | Professional split by use-case + physician baseline |
17
+ | `medgemma-healthbench-hard` | medgemma-healthbench-hard | 2 | 08-05 | MedGemma hard re-run, `gpt-4.1` judge |
18
+ | `healthbench-hard-medgemma-v2` | healthbench-hard-medgemma-v2 | 2 | 08-05 | same as above via `vllm/` provider prefix (near-duplicate) |
19
+ | `healthbench-consensus-medgemma` | healthbench-consensus-medgemma | 2 | 08-05 | MedGemma consensus re-run, `gpt-4.1` judge |
20
+ | `healthbench-professional-deepseek-v4-pro` | healthbench-professional-deepseek-v4-pro | 1 | 08-06 | DeepSeek Professional, first genuinely fresh generation |
21
+
22
+ Empty shells on HF (README/index.html only, no logs — nothing to mirror):
23
+ `healthbench-profes`, `healthbench-prof-part1`.
24
+
25
+ Non-HealthBench spaces by the same author, **not** mirrored here:
26
+ `inspectevals`, `tevals`, `tmevals`, `medgemma_runs`, `igakuqaruns`, `igakuqaruns-v2`,
27
+ `igakuqa-medgemma`, `situational-awareness-v1`, `anzen1`, `anzen-kimi-k3-safety-audit`,
28
+ `pair-jbb-attacker-study-extended`.
29
+ (MedQA/IgakuQA sets are already local under `inspect_ai/sandbox/MedQA/` and `.../IgakuQA/`.)
30
+
31
+ ## Traps
32
+
33
+ 1. **Judge model is not constant across the set** — three judges are in play:
34
+ - `openai/gpt-4o-mini` (scorer default): `healthbench-v1` (07-09), all of `hs-hard`, all of `hs-consensus`
35
+ - `openai/gpt-4.1`: all of `hs-non-professional`, and the 08-05 MedGemma re-runs
36
+ - `openai/gpt-5.4`, `reasoning_effort=low`: every Professional run
37
+
38
+ Raw `healthbench_score` is judge-dependent and is *not* touched by the length-adjustment
39
+ args (`scorer.py:524` — it's `achieved/possible` points). So a raw-score delta between two
40
+ runs with different judges is a judge artifact. Measured, same model + same task code:
41
+
42
+ | | gpt-4o-mini | gpt-4.1 | Δ |
43
+ |---|---|---|---|
44
+ | healthbench full, GPT-5.5 | 0.4873 | 0.5687 | **+8.1** |
45
+ | healthbench full, Opus-4.7 | 0.4762 | 0.5344 | **+5.8** |
46
+ | consensus, MedGemma-27B | 0.7758 | 0.9105 | **+13.5** |
47
+ | consensus, MedGemma-4B | 0.7137 | 0.7583 | +4.5 |
48
+ | hard, MedGemma-27B | 0.2109 | 0.1415 | **−6.9** |
49
+ | hard, MedGemma-4B | 0.1060 | −0.0347 | **−14.1** |
50
+
51
+ gpt-4.1 is *more* generous on consensus and *harsher* on hard. Never mix judges in one table.
52
+ 2. **`cache=true` throughout.** Only 23 of 68 runs actually generated candidate responses.
53
+ 27 are full cache replays (zero candidate tokens), 7 more are "mostly cached"
54
+ (<200 candidate tokens/sample — e.g. `hs-hard` MedGemma-27B at 24 tok/sample, so its 0.2109
55
+ rests on cached completions from a run that was never published). Column `provenance`
56
+ in `MANIFEST.csv`; `stats.model_usage` is the underlying evidence.
57
+ 3. **Professional epochs are inconsistent**: 8 for GPT-5.5 / Opus-4-7 / PLaMo / MedGemma,
58
+ 1 for DeepSeek. Do not put those in the same table without saying so.
59
+ 4. **DeepSeek Professional has two conflicting numbers.** `hs-original` 07-25 = 0.3430 raw
60
+ (but 10 candidate tok/sample → a replay), `healthbench-professional-deepseek-v4-pro` 08-06
61
+ = 0.3781 raw (fresh, 1.26M tokens). Same nominal config. Use the 08-06 one; treat the
62
+ ~3.5-point gap as the reproducibility floor for a cached-vs-fresh comparison.
63
+ 5. **Professional subset metrics inside the log are wrong** (discard length adjustment, clip
64
+ per sample). Recompute from per-sample scores. See
65
+ `../config-check-v2.html`.
66
+ 6. **Physician baseline was judged once and replayed.** The identical 0.4429/0.4387 across
67
+ four models in `hs-prof-subsets` is one computation, not four. (0.4387 matches OpenAI's
68
+ published 43.7 — this is the anchor that says the harness is correct.)
69
+ 7. **Professional use-case subsets don't partition the set.** consult 236 + writing 142 +
70
+ research 147 + red-teaming 191 = 716 > 525 total, so samples carry multiple use-case tags.
71
+ The four subset scores cannot be weight-averaged back to the full-set score.
72
+ 8. **The subset matrix is incomplete.** MedGemma-4B has only `consult`; DeepSeek has no
73
+ epochs=8 `consult`. Don't render `hs-prof-subsets` as a full grid.
74
+ 9. `medgemma-healthbench-hard` and `healthbench-hard-medgemma-v2` are the same experiment run
75
+ twice 2h apart, differing only in provider prefix (`openai-api/vllm/...` vs `vllm/...`).
76
+ Score spread between them (0.1332 vs 0.1415) is vLLM sampling noise, ~0.8pt.
data/MANIFEST.csv ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ space,created,task,task_version,model,epochs,total_samples,status,judge_model,judge_reasoning_effort,len_adj_center,len_adj_penalty,raw_score,len_adj_score,candidate_tokens,cand_tok_per_sample,judge_tokens,provenance,inspect_ai,inspect_evals,task_file,file
2
+ healthbench-v1,2026-07-09T08:07:45,inspect_evals/healthbench_hard,2,openai/gpt-5-nano,1,,error,,,,,,,0,,0,not-a-run,0.3.244,0.14.2,,2026-07-09T08-07-45-00-00_healthbench-hard_VLbsW5zXdzSbfgeNMziFZ2.eval
3
+ healthbench-v1,2026-07-09T08:10:01,inspect_evals/healthbench_hard,2,openai/gpt-5.5,1,,error,,,,,,,0,,0,not-a-run,0.3.244,0.14.2,,2026-07-09T08-10-01-00-00_healthbench-hard_jofngniV8jDhpdvbXSg9S4.eval
4
+ healthbench-v1,2026-07-09T08:11:34,inspect_evals/healthbench_hard,2,anthropic/claude-opus-4-7,1,,cancelled,,,,,,,46358,,0,not-a-run,0.3.244,0.14.2,,2026-07-09T08-11-34-00-00_healthbench-hard_CzHRcCD6CoJpUFoxxWadFn.eval
5
+ healthbench-v1,2026-07-09T09:03:02,inspect_evals/healthbench,2,openai/gpt-5.5,1,,error,openai/gpt-4o-mini,,,,,,0,,0,not-a-run,0.3.245,0.14.3,,2026-07-09T09-03-02-00-00_healthbench_EVLdZCZJQYG5EuWtS2TLsK.eval
6
+ healthbench-v1,2026-07-09T09:05:32,inspect_evals/healthbench,2,openai/gpt-5.5,1,,error,openai/gpt-4o-mini,,,,,,0,,0,not-a-run,0.3.245,0.14.3,,2026-07-09T09-05-32-00-00_healthbench_Aucfe2K5BgdpYrkukVNJcf.eval
7
+ healthbench-v1,2026-07-09T09:09:45,inspect_evals/healthbench,2,openai/gpt-5.5,1,5000,success,openai/gpt-4o-mini,,,,0.4873,,4699836,940.0,84688797,fresh,0.3.245,0.14.3,,2026-07-09T09-09-45-00-00_healthbench_gGjNAEJ4UezLEQvJPVi7Zi.eval
8
+ healthbench-v1,2026-07-09T10:33:03,inspect_evals/healthbench,2,anthropic/claude-opus-4-7,1,5000,success,openai/gpt-4o-mini,,,,0.4762,,4923085,984.6,80274748,fresh,0.3.245,0.14.3,,2026-07-09T10-33-03-00-00_healthbench_QeHrUjumcLfkEWL5T7HaUa.eval
9
+ hs-non-professional,2026-07-15T06:51:58,inspect_evals/healthbench,2,openai/gpt-5.5,1,5000,success,openai/gpt-4.1,,2000,0.0299,0.5687,0.5583,0,0.0,0,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-15T06-51-58-00-00_healthbench_WJDhL9LgZJKMGgYizSLYpL.eval
10
+ hs-non-professional,2026-07-15T07:01:24,inspect_evals/healthbench,2,anthropic/claude-opus-4-7,1,5000,success,openai/gpt-4.1,,2000,0.0299,0.5344,0.5431,0,0.0,0,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-15T07-01-24-00-00_healthbench_Hah9CRDdSrTz7K5EFgRWF8.eval
11
+ hs-non-professional,2026-07-16T04:29:43,inspect_evals/healthbench,2,openrouter/deepseek/deepseek-v4-pro,1,5000,success,openai/gpt-4.1,,2000,0.0299,0.5137,0.4173,7415173,1483.0,105583667,fresh,0.3.246,0.14.3,,2026-07-16T04-29-43-00-00_healthbench_jBnP8VSE7rSvrMpzRStQFK.eval
12
+ hs-non-professional,2026-07-16T05:23:21,inspect_evals/healthbench,2,openai-api/plamo/plamo-3.0-prime,1,5000,success,openai/gpt-4.1,,2000,0.0299,0.3942,0.3243,2449482,489.9,49156082,fresh,0.3.246,0.14.3,,2026-07-16T05-23-21-00-00_healthbench_iexipStaaxm8E5ni3Gg96Z.eval
13
+ hs-hard,2026-07-16T07:28:45,inspect_evals/healthbench_hard,2,openai/gpt-5.5,1,1000,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.0392,0.2727,0.2603,0,0.0,17512569,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T07-28-45-00-00_healthbench-hard_dxTyk6Wmosx3kJAp4iULs9.eval
14
+ hs-hard,2026-07-16T18:52:11,inspect_evals/healthbench_hard,2,anthropic/claude-opus-4-7,1,1000,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.0392,0.2661,0.278,0,0.0,16665282,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T18-52-11-00-00_healthbench-hard_Z9QDknMd4SukiAP7Q4FSPz.eval
15
+ hs-hard,2026-07-16T19:07:31,inspect_evals/healthbench_hard,2,openrouter/deepseek/deepseek-v4-pro,1,1000,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.0392,0.2484,0.138,0,0.0,21037790,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T19-07-31-00-00_healthbench-hard_SABwaQjc3Xon5iDMpWFQV3.eval
16
+ hs-hard,2026-07-16T19:23:40,inspect_evals/healthbench_hard,2,openai-api/plamo/plamo-3.0-prime,1,1000,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.0392,0.1743,0.0961,0,0.0,20067380,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T19-23-40-00-00_healthbench-hard_mEs7dJHDapQ4JVqHQtfTJc.eval
17
+ hs-consensus,2026-07-16T20:09:58,inspect_evals/healthbench_consensus,2,openai-api/plamo/plamo-3.0-prime,1,3671,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.002,0.7525,0.7478,0,0.0,12531224,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T20-09-58-00-00_healthbench-consensus_87a5hkWgWY5rrHyoygzDVx.eval
18
+ hs-consensus,2026-07-16T20:20:37,inspect_evals/healthbench_consensus,2,openai/gpt-5.5,1,3671,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.002,0.8208,0.8202,0,0.0,10709027,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T20-20-37-00-00_healthbench-consensus_gmfrK88PFGpuvRWqnk7uc5.eval
19
+ hs-consensus,2026-07-16T20:44:07,inspect_evals/healthbench_consensus,2,openrouter/deepseek/deepseek-v4-pro,1,3671,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.002,0.791,0.7846,0,0.0,13025085,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T20-44-07-00-00_healthbench-consensus_EbuNesZCwbaRVAqRedBwjP.eval
20
+ hs-consensus,2026-07-16T21:11:43,inspect_evals/healthbench_consensus,2,anthropic/claude-opus-4-7,1,3671,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.002,0.8017,0.8023,0,0.0,10263280,FULL CACHE REPLAY,0.3.246,0.14.3,,2026-07-16T21-11-43-00-00_healthbench-consensus_k2nEohAktRtjKfZ5BNGJSG.eval
21
+ hs-consensus,2026-07-24T09:07:55,inspect_evals/healthbench_consensus,2,vllm/google/medgemma-4b-it,1,3671,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.002,0.7137,0.7077,3440824,937.3,14762331,fresh,0.3.249,0.16.0,,2026-07-24T09-07-55-00-00_healthbench-consensus_QX6zAfF9oDZDAX4p6k6yb9.eval
22
+ hs-hard,2026-07-24T09:18:15,inspect_evals/healthbench_hard,2,vllm/google/medgemma-4b-it,1,1000,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.0392,0.106,0.0126,402479,402.5,17583141,fresh,0.3.249,0.16.0,,2026-07-24T09-18-15-00-00_healthbench-hard_WkGg4UV64qpccys2fbViHY.eval
23
+ hs-non-professional,2026-07-24T09:32:53,inspect_evals/healthbench,2,vllm/google/medgemma-4b-it,1,5000,success,openai/gpt-4.1,,2000,0.0299,0.2697,0.1832,877814,175.6,100167550,MOSTLY CACHED,0.3.249,0.16.0,,2026-07-24T09-32-53-00-00_healthbench_6Co8iMuXsKxGNrMeAkRbdp.eval
24
+ hs-consensus,2026-07-24T11:39:48,inspect_evals/healthbench_consensus,2,vllm/google/medgemma-27b-text-it,1,3671,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.002,0.7758,0.7661,4303064,1172.2,16607219,fresh,0.3.249,0.16.0,,2026-07-24T11-39-48-00-00_healthbench-consensus_7b4ZMKGYfFkgFNSJXJs53z.eval
25
+ hs-non-professional,2026-07-24T12:08:49,inspect_evals/healthbench,2,vllm/google/medgemma-27b-text-it,1,5000,success,openai/gpt-4.1,,2000,0.0299,0.472,0.3321,1556281,311.3,113164489,fresh,0.3.249,0.16.0,,2026-07-24T12-08-49-00-00_healthbench_cuBWJL4bbU32vR5cxHsjEC.eval
26
+ hs-hard,2026-07-24T14:36:42,inspect_evals/healthbench_hard,2,vllm/google/medgemma-27b-text-it,1,1000,success,"openai/gpt-4o-mini (default, inferred)",,2000,0.0392,0.2109,0.0483,24135,24.1,20040174,MOSTLY CACHED,0.3.249,0.16.0,,2026-07-24T14-36-42-00-00_healthbench-hard_BU7wDz79JMGuziKwJrRrpN.eval
27
+ hs-original,2026-07-24T15:57:49,healthbench_professional,0,openai/gpt-5.5,8,4200,success,openai/gpt-5.4,low,2000.0,0.0147,0.5295,0.4781,8994839,2141.6,21393751,fresh,0.3.246,,healthbench_professional.py,2026-07-24T15-57-49-00-00_healthbench-professional_7PZFsBJYTZRCdXZkJPfki7.eval
28
+ hs-prof-subsets,2026-07-24T16:36:59,healthbench_professional_consult,0,openai/gpt-5.5,8,1888,success,openai/gpt-5.4,low,,,0.51,0.4864,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T16-36-59-00-00_healthbench-professional-consult_D8Z93ZWFtkR4CDbDBLZvBT.eval
29
+ hs-prof-subsets,2026-07-24T16:37:37,healthbench_professional_writing,0,openai/gpt-5.5,8,1136,success,openai/gpt-5.4,low,,,0.4062,0.3596,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T16-37-37-00-00_healthbench-professional-writing_joZQNJ9ZAZidpUaSpEqyvS.eval
30
+ hs-prof-subsets,2026-07-24T16:37:58,healthbench_professional_research,0,openai/gpt-5.5,8,1176,success,openai/gpt-5.4,low,,,0.6799,0.5792,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T16-37-58-00-00_healthbench-professional-research_3Vd4jhz6oiMQTsC2Mhw849.eval
31
+ hs-prof-subsets,2026-07-24T16:38:22,healthbench_professional_red_teaming,0,openai/gpt-5.5,8,1528,success,openai/gpt-5.4,low,,,0.2992,0.2819,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T16-38-22-00-00_healthbench-professional-red-teaming_Xund3mwQvSqTJfxno7icGe.eval
32
+ hs-prof-subsets,2026-07-24T16:38:52,healthbench_professional_physician_baseline,0,openai/gpt-5.5,8,4200,success,openai/gpt-5.4,low,,,0.4429,0.4387,0,0.0,17204312,baseline(no model gen by design),0.3.246,,healthbench_professional.py,2026-07-24T16-38-52-00-00_healthbench-professional-physician-baseline_XADueRF5xwkSmDPWc4LtNf.eval
33
+ hs-original,2026-07-24T16:55:39,healthbench_professional,0,anthropic/claude-opus-4-7,8,4200,success,openai/gpt-5.4,low,2000.0,0.0147,0.5083,0.4803,9075443,2160.8,19817644,fresh,0.3.246,,healthbench_professional.py,2026-07-24T16-55-39-00-00_healthbench-professional_boiooCVNG7ZkBVsnEpKLNT.eval
34
+ hs-prof-subsets,2026-07-24T17:19:14,healthbench_professional_consult,0,anthropic/claude-opus-4-7,8,1888,success,openai/gpt-5.4,low,,,0.4906,0.4704,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T17-19-14-00-00_healthbench-professional-consult_hZgDXu6oT2MuZrn4L7msXN.eval
35
+ hs-prof-subsets,2026-07-24T17:19:42,healthbench_professional_writing,0,anthropic/claude-opus-4-7,8,1136,success,openai/gpt-5.4,low,,,0.3947,0.3615,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T17-19-42-00-00_healthbench-professional-writing_haJJesaYyVNeNRLHnAi8HD.eval
36
+ hs-prof-subsets,2026-07-24T17:19:59,healthbench_professional_research,0,anthropic/claude-opus-4-7,8,1176,success,openai/gpt-5.4,low,,,0.6464,0.6107,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T17-19-59-00-00_healthbench-professional-research_7RUfdNFLnH7EpAC92NeL7e.eval
37
+ hs-prof-subsets,2026-07-24T17:20:17,healthbench_professional_red_teaming,0,anthropic/claude-opus-4-7,8,1528,success,openai/gpt-5.4,low,,,0.2828,0.2674,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T17-20-17-00-00_healthbench-professional-red-teaming_DLPPa6kbs9VeKS6cfPDhdv.eval
38
+ hs-prof-subsets,2026-07-24T17:20:42,healthbench_professional_physician_baseline,0,anthropic/claude-opus-4-7,8,4200,success,openai/gpt-5.4,low,,,0.4429,0.4387,0,0.0,0,baseline(no model gen by design),0.3.246,,healthbench_professional.py,2026-07-24T17-20-42-00-00_healthbench-professional-physician-baseline_98adhjPPBGUtnnuJVmWXjn.eval
39
+ hs-original,2026-07-24T17:30:37,healthbench_professional,0,openai-api/plamo/plamo-3.0-prime,8,4200,success,openai/gpt-5.4,low,2000.0,0.0147,0.2078,0.1374,8130263,1935.8,23382174,fresh,0.3.246,,healthbench_professional.py,2026-07-24T17-30-37-00-00_healthbench-professional_c9RnXrEaoi4T33bvwXEA5h.eval
40
+ hs-prof-subsets,2026-07-24T19:33:04,healthbench_professional_consult,0,openai-api/plamo/plamo-3.0-prime,8,1888,success,openai/gpt-5.4,low,,,0.2184,0.1536,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T19-33-04-00-00_healthbench-professional-consult_dgWnf9y2uVjcWoDcyTm3Mm.eval
41
+ hs-prof-subsets,2026-07-24T19:33:35,healthbench_professional_writing,0,openai-api/plamo/plamo-3.0-prime,8,1136,success,openai/gpt-5.4,low,,,-0.0276,-0.0431,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T19-33-35-00-00_healthbench-professional-writing_eAmnviGLop8QfjxGLMp9Dz.eval
42
+ hs-prof-subsets,2026-07-24T19:33:52,healthbench_professional_research,0,openai-api/plamo/plamo-3.0-prime,8,1176,success,openai/gpt-5.4,low,,,0.4183,0.2858,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T19-33-52-00-00_healthbench-professional-research_WF5VpCWo3K285bwUiVdCUm.eval
43
+ hs-prof-subsets,2026-07-24T19:34:11,healthbench_professional_red_teaming,0,openai-api/plamo/plamo-3.0-prime,8,1528,success,openai/gpt-5.4,low,,,-0.0986,-0.1182,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-24T19-34-11-00-00_healthbench-professional-red-teaming_4db2cTWDv6VCVoFSFqWpmW.eval
44
+ hs-prof-subsets,2026-07-24T19:34:35,healthbench_professional_physician_baseline,0,openai-api/plamo/plamo-3.0-prime,8,4200,success,openai/gpt-5.4,low,,,0.4429,0.4387,0,0.0,0,baseline(no model gen by design),0.3.246,,healthbench_professional.py,2026-07-24T19-34-35-00-00_healthbench-professional-physician-baseline_S4NuFZgLXeK7RAgHpRKqTy.eval
45
+ hs-prof-subsets,2026-07-24T19:59:01,healthbench_professional_writing,0,openrouter/deepseek/deepseek-v4-pro,8,1136,success,openai/gpt-5.4,low,,,0.0954,0.0495,1479207,1302.1,3316215,fresh,0.3.246,,healthbench_professional.py,2026-07-24T19-59-01-00-00_healthbench-professional-writing_933975rUF6cdWKJECk44bJ.eval
46
+ hs-prof-subsets,2026-07-24T20:07:30,healthbench_professional_research,0,openrouter/deepseek/deepseek-v4-pro,8,1176,success,openai/gpt-5.4,low,,,0.6368,0.5291,2021029,1718.6,4316530,fresh,0.3.246,,healthbench_professional.py,2026-07-24T20-07-30-00-00_healthbench-professional-research_7gKGNrErBwsumd7oKKUcuN.eval
47
+ hs-prof-subsets,2026-07-24T20:18:24,healthbench_professional_red_teaming,0,openrouter/deepseek/deepseek-v4-pro,8,1528,success,openai/gpt-5.4,low,,,-0.0372,-0.0687,1062156,695.1,2312783,fresh,0.3.246,,healthbench_professional.py,2026-07-24T20-18-24-00-00_healthbench-professional-red-teaming_HmwUcZnfLNqmUkyZkHDTdJ.eval
48
+ hs-prof-subsets,2026-07-24T20:28:47,healthbench_professional_physician_baseline,0,openrouter/deepseek/deepseek-v4-pro,8,4200,success,openai/gpt-5.4,low,,,0.4429,0.4387,0,0.0,0,baseline(no model gen by design),0.3.246,,healthbench_professional.py,2026-07-24T20-28-47-00-00_healthbench-professional-physician-baseline_kjY8x2CXBcbHZUSHs55G7D.eval
49
+ hs-original,2026-07-24T22:44:03,healthbench_professional,0,vllm/google/medgemma-27b-text-it,8,4200,success,openai/gpt-5.4,low,2000.0,0.0147,0.3125,0.2003,8383935,1996.2,25383913,fresh,0.3.249,,healthbench_professional.py,2026-07-24T22-44-03-00-00_healthbench-professional_6AYXiEDgGuzNtAcyWPDGrR.eval
50
+ hs-prof-subsets,2026-07-24T23:41:11,healthbench_professional_consult,0,vllm/google/medgemma-27b-text-it,8,1888,success,openai/gpt-5.4,low,,,0.2851,0.1778,23572,12.5,61467,MOSTLY CACHED,0.3.249,,healthbench_professional.py,2026-07-24T23-41-11-00-00_healthbench-professional-consult_muhCA3DyeXvwNpDvn7gpN4.eval
51
+ hs-prof-subsets,2026-07-24T23:41:59,healthbench_professional_writing,0,vllm/google/medgemma-27b-text-it,8,1136,success,openai/gpt-5.4,low,,,0.1891,0.0913,5260,4.6,19696,MOSTLY CACHED,0.3.249,,healthbench_professional.py,2026-07-24T23-41-59-00-00_healthbench-professional-writing_CMBT9aSmchzcQFRpwZdCqR.eval
52
+ hs-prof-subsets,2026-07-24T23:42:33,healthbench_professional_research,0,vllm/google/medgemma-27b-text-it,8,1176,success,openai/gpt-5.4,low,,,0.4776,0.344,12406,10.5,45185,MOSTLY CACHED,0.3.249,,healthbench_professional.py,2026-07-24T23-42-33-00-00_healthbench-professional-research_RFx9qF5ZP369Kdi3CNQU6M.eval
53
+ hs-prof-subsets,2026-07-24T23:43:33,healthbench_professional_red_teaming,0,vllm/google/medgemma-27b-text-it,8,1528,success,openai/gpt-5.4,low,,,0.0145,-0.068,0,0.0,0,FULL CACHE REPLAY,0.3.249,,healthbench_professional.py,2026-07-24T23-43-33-00-00_healthbench-professional-red-teaming_ewG7cuk2vXaZpcauRLz7qR.eval
54
+ hs-prof-subsets,2026-07-24T23:44:07,healthbench_professional_physician_baseline,0,vllm/google/medgemma-27b-text-it,8,4200,success,openai/gpt-5.4,low,,,0.439,0.4348,0,0.0,17206029,baseline(no model gen by design),0.3.249,,healthbench_professional.py,2026-07-24T23-44-07-00-00_healthbench-professional-physician-baseline_cY3Z8sUNPRQTpSA3UHa77J.eval
55
+ hs-original,2026-07-25T00:26:29,healthbench_professional,0,vllm/google/medgemma-4b-it,8,4200,success,openai/gpt-5.4,low,2000.0,0.0147,0.1651,0.0904,7090153,1688.1,22550200,fresh,0.3.249,,healthbench_professional.py,2026-07-25T00-26-29-00-00_healthbench-professional_GEViyNR2PM2B2oUV94DzoK.eval
56
+ hs-prof-subsets,2026-07-25T00:59:37,healthbench_professional_consult,0,vllm/google/medgemma-4b-it,8,1888,success,openai/gpt-5.4,low,,,0.152,0.0819,21234,11.2,54391,MOSTLY CACHED,0.3.249,,healthbench_professional.py,2026-07-25T00-59-37-00-00_healthbench-professional-consult_ffSg7GfyxjArrdwu7fSrBa.eval
57
+ hs-original,2026-07-25T18:24:55,healthbench_professional,0,openrouter/deepseek/deepseek-v4-pro,1,525,success,openai/gpt-5.4,low,2000.0,0.0147,0.343,0.2742,5338,10.2,8795,MOSTLY CACHED,0.3.246,,healthbench_professional.py,2026-07-25T18-24-55-00-00_healthbench-professional_HaKmMaK4Q6JCLuX2RLCPnc.eval
58
+ hs-prof-subsets,2026-07-25T18:26:20,healthbench_professional_consult,0,openrouter/deepseek/deepseek-v4-pro,1,236,success,openai/gpt-5.4,low,,,0.3123,0.2559,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-25T18-26-20-00-00_healthbench-professional-consult_3DSH4qRFzYfb27rH9Z9RqP.eval
59
+ hs-prof-subsets,2026-07-25T18:26:25,healthbench_professional_writing,0,openrouter/deepseek/deepseek-v4-pro,1,142,success,openai/gpt-5.4,low,,,0.0973,0.0516,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-25T18-26-25-00-00_healthbench-professional-writing_2LJ8vJpJXUX2TbtokQzbxp.eval
60
+ hs-prof-subsets,2026-07-25T18:26:28,healthbench_professional_research,0,openrouter/deepseek/deepseek-v4-pro,1,147,success,openai/gpt-5.4,low,,,0.6298,0.5185,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-25T18-26-28-00-00_healthbench-professional-research_9Pb5iwuDu8dmuFzs5FnmBw.eval
61
+ hs-prof-subsets,2026-07-25T18:26:32,healthbench_professional_red_teaming,0,openrouter/deepseek/deepseek-v4-pro,1,191,success,openai/gpt-5.4,low,,,-0.0532,-0.0829,0,0.0,0,FULL CACHE REPLAY,0.3.246,,healthbench_professional.py,2026-07-25T18-26-32-00-00_healthbench-professional-red-teaming_e9hCTjjRXrNTnexAxrYM8x.eval
62
+ hs-prof-subsets,2026-07-25T18:26:35,healthbench_professional_physician_baseline,0,openrouter/deepseek/deepseek-v4-pro,1,525,success,openai/gpt-5.4,low,,,0.4331,0.4289,0,0.0,0,baseline(no model gen by design),0.3.246,,healthbench_professional.py,2026-07-25T18-26-35-00-00_healthbench-professional-physician-baseline_Njv8PLSvCJpAvUbPPMQqkx.eval
63
+ medgemma-healthbench-hard,2026-08-05T06:05:04,healthbench_hard,2,openai-api/vllm/google/medgemma-27b-text-it,1,1000,success,openai/gpt-4.1,,2000,0.0392,0.1332,-0.0442,1108556,1108.6,22501745,fresh,0.3.252,,inspect_evals/src/inspect_evals/healthbench/healthbench.py,2026-08-05T06-05-04-00-00_healthbench-hard_U2qKVPncnWPTbmLEfZfa4y.eval
64
+ medgemma-healthbench-hard,2026-08-05T07:09:21,healthbench_hard,2,openai-api/vllm/google/medgemma-4b-it,1,1000,success,openai/gpt-4.1,,2000,0.0392,-0.0312,-0.1641,918963,919.0,20096686,fresh,0.3.252,,inspect_evals/src/inspect_evals/healthbench/healthbench.py,2026-08-05T07-09-21-00-00_healthbench-hard_4bZEuQss4Bbee8KixwTS4o.eval
65
+ healthbench-hard-medgemma-v2,2026-08-05T07:54:55,healthbench_hard,2,vllm/google/medgemma-4b-it,1,1000,success,openai/gpt-4.1,,2000,0.0392,-0.0347,-0.1256,887308,887.3,19808558,fresh,0.3.252,,inspect_evals/src/inspect_evals/healthbench/healthbench.py,2026-08-05T07-54-55-00-00_healthbench-hard_MANxy36rpJhotpAvdwQiFk.eval
66
+ healthbench-hard-medgemma-v2,2026-08-05T08:07:41,healthbench_hard,2,vllm/google/medgemma-27b-text-it,1,1000,success,openai/gpt-4.1,,2000,0.0392,0.1415,-0.023,1130260,1130.3,22994024,fresh,0.3.252,,inspect_evals/src/inspect_evals/healthbench/healthbench.py,2026-08-05T08-07-41-00-00_healthbench-hard_D9KnFzsoQRE57vVsejUQnW.eval
67
+ healthbench-consensus-medgemma,2026-08-05T08:51:22,healthbench_consensus,2,vllm/google/medgemma-27b-text-it,1,3671,success,openai/gpt-4.1,,2000,0.002,0.9105,0.9007,3662191,997.6,14399926,fresh,0.3.252,,inspect_evals/src/inspect_evals/healthbench/healthbench.py,2026-08-05T08-51-22-00-00_healthbench-consensus_6a8D2h492in82NNQHCFgZw.eval
68
+ healthbench-consensus-medgemma,2026-08-05T10:32:09,healthbench_consensus,2,vllm/google/medgemma-4b-it,1,3671,success,openai/gpt-4.1,,2000,0.002,0.7583,0.7522,2959598,806.2,12979748,fresh,0.3.252,,inspect_evals/src/inspect_evals/healthbench/healthbench.py,2026-08-05T10-32-09-00-00_healthbench-consensus_6WXSuGaZvDNS5Zze6Jrm3h.eval
69
+ healthbench-professional-deepseek-v4-pro,2026-08-06T02:35:30,healthbench_professional,0,openrouter/deepseek/deepseek-v4-pro,1,525,success,openai/gpt-5.4,low,2000,0.0147,0.3781,0.3099,1258221,2396.6,2810449,fresh,0.3.252,,healthbench_professional.py,2026-08-06T02-35-30-00-00_healthbench-professional_bbeHCEMNSj6Q362BQHa7mS.eval
data/headers_raw.json ADDED
The diff for this file is too large to render. See raw diff
 
data/log_mapping.csv ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ filename,bench,model,date,epochs,samples,judge,provenance,status,raw_score,len_adj_score,source_space,source_file
2
+ hard__gpt-5-nano__2026-07-09-FAILED.eval,hard,gpt-5-nano,2026-07-09,1,,,not-a-run,error,,,healthbench-v1,2026-07-09T08-07-45-00-00_healthbench-hard_VLbsW5zXdzSbfgeNMziFZ2.eval
3
+ hard__gpt-5.5__2026-07-09-FAILED.eval,hard,gpt-5.5,2026-07-09,1,,,not-a-run,error,,,healthbench-v1,2026-07-09T08-10-01-00-00_healthbench-hard_jofngniV8jDhpdvbXSg9S4.eval
4
+ hard__opus-4.7__2026-07-09-FAILED.eval,hard,opus-4.7,2026-07-09,1,,,not-a-run,cancelled,,,healthbench-v1,2026-07-09T08-11-34-00-00_healthbench-hard_CzHRcCD6CoJpUFoxxWadFn.eval
5
+ full__gpt-5.5__2026-07-09-FAILED.eval,full,gpt-5.5,2026-07-09,1,,openai/gpt-4o-mini,not-a-run,error,,,healthbench-v1,2026-07-09T09-03-02-00-00_healthbench_EVLdZCZJQYG5EuWtS2TLsK.eval
6
+ full__gpt-5.5__2026-07-09-FAILED__0905.eval,full,gpt-5.5,2026-07-09,1,,openai/gpt-4o-mini,not-a-run,error,,,healthbench-v1,2026-07-09T09-05-32-00-00_healthbench_Aucfe2K5BgdpYrkukVNJcf.eval
7
+ full__gpt-5.5__2026-07-09.eval,full,gpt-5.5,2026-07-09,1,5000,openai/gpt-4o-mini,fresh,success,0.4873,,healthbench-v1,2026-07-09T09-09-45-00-00_healthbench_gGjNAEJ4UezLEQvJPVi7Zi.eval
8
+ full__opus-4.7__2026-07-09.eval,full,opus-4.7,2026-07-09,1,5000,openai/gpt-4o-mini,fresh,success,0.4762,,healthbench-v1,2026-07-09T10-33-03-00-00_healthbench_QeHrUjumcLfkEWL5T7HaUa.eval
9
+ full__gpt-5.5__2026-07-15-replay.eval,full,gpt-5.5,2026-07-15,1,5000,openai/gpt-4.1,FULL CACHE REPLAY,success,0.5687,0.5583,hs-non-professional,2026-07-15T06-51-58-00-00_healthbench_WJDhL9LgZJKMGgYizSLYpL.eval
10
+ full__opus-4.7__2026-07-15-replay.eval,full,opus-4.7,2026-07-15,1,5000,openai/gpt-4.1,FULL CACHE REPLAY,success,0.5344,0.5431,hs-non-professional,2026-07-15T07-01-24-00-00_healthbench_Hah9CRDdSrTz7K5EFgRWF8.eval
11
+ full__deepseek-v4-pro__2026-07-16.eval,full,deepseek-v4-pro,2026-07-16,1,5000,openai/gpt-4.1,fresh,success,0.5137,0.4173,hs-non-professional,2026-07-16T04-29-43-00-00_healthbench_jBnP8VSE7rSvrMpzRStQFK.eval
12
+ full__plamo-3.0-prime__2026-07-16.eval,full,plamo-3.0-prime,2026-07-16,1,5000,openai/gpt-4.1,fresh,success,0.3942,0.3243,hs-non-professional,2026-07-16T05-23-21-00-00_healthbench_iexipStaaxm8E5ni3Gg96Z.eval
13
+ hard__gpt-5.5__2026-07-16-replay.eval,hard,gpt-5.5,2026-07-16,1,1000,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.2727,0.2603,hs-hard,2026-07-16T07-28-45-00-00_healthbench-hard_dxTyk6Wmosx3kJAp4iULs9.eval
14
+ hard__opus-4.7__2026-07-16-replay.eval,hard,opus-4.7,2026-07-16,1,1000,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.2661,0.278,hs-hard,2026-07-16T18-52-11-00-00_healthbench-hard_Z9QDknMd4SukiAP7Q4FSPz.eval
15
+ hard__deepseek-v4-pro__2026-07-16-replay.eval,hard,deepseek-v4-pro,2026-07-16,1,1000,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.2484,0.138,hs-hard,2026-07-16T19-07-31-00-00_healthbench-hard_SABwaQjc3Xon5iDMpWFQV3.eval
16
+ hard__plamo-3.0-prime__2026-07-16-replay.eval,hard,plamo-3.0-prime,2026-07-16,1,1000,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.1743,0.0961,hs-hard,2026-07-16T19-23-40-00-00_healthbench-hard_mEs7dJHDapQ4JVqHQtfTJc.eval
17
+ consensus__plamo-3.0-prime__2026-07-16-replay.eval,consensus,plamo-3.0-prime,2026-07-16,1,3671,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.7525,0.7478,hs-consensus,2026-07-16T20-09-58-00-00_healthbench-consensus_87a5hkWgWY5rrHyoygzDVx.eval
18
+ consensus__gpt-5.5__2026-07-16-replay.eval,consensus,gpt-5.5,2026-07-16,1,3671,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.8208,0.8202,hs-consensus,2026-07-16T20-20-37-00-00_healthbench-consensus_gmfrK88PFGpuvRWqnk7uc5.eval
19
+ consensus__deepseek-v4-pro__2026-07-16-replay.eval,consensus,deepseek-v4-pro,2026-07-16,1,3671,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.791,0.7846,hs-consensus,2026-07-16T20-44-07-00-00_healthbench-consensus_EbuNesZCwbaRVAqRedBwjP.eval
20
+ consensus__opus-4.7__2026-07-16-replay.eval,consensus,opus-4.7,2026-07-16,1,3671,"openai/gpt-4o-mini (default, inferred)",FULL CACHE REPLAY,success,0.8017,0.8023,hs-consensus,2026-07-16T21-11-43-00-00_healthbench-consensus_k2nEohAktRtjKfZ5BNGJSG.eval
21
+ consensus__medgemma-4b__2026-07-24.eval,consensus,medgemma-4b,2026-07-24,1,3671,"openai/gpt-4o-mini (default, inferred)",fresh,success,0.7137,0.7077,hs-consensus,2026-07-24T09-07-55-00-00_healthbench-consensus_QX6zAfF9oDZDAX4p6k6yb9.eval
22
+ hard__medgemma-4b__2026-07-24.eval,hard,medgemma-4b,2026-07-24,1,1000,"openai/gpt-4o-mini (default, inferred)",fresh,success,0.106,0.0126,hs-hard,2026-07-24T09-18-15-00-00_healthbench-hard_WkGg4UV64qpccys2fbViHY.eval
23
+ full__medgemma-4b__2026-07-24-cached.eval,full,medgemma-4b,2026-07-24,1,5000,openai/gpt-4.1,MOSTLY CACHED,success,0.2697,0.1832,hs-non-professional,2026-07-24T09-32-53-00-00_healthbench_6Co8iMuXsKxGNrMeAkRbdp.eval
24
+ consensus__medgemma-27b__2026-07-24.eval,consensus,medgemma-27b,2026-07-24,1,3671,"openai/gpt-4o-mini (default, inferred)",fresh,success,0.7758,0.7661,hs-consensus,2026-07-24T11-39-48-00-00_healthbench-consensus_7b4ZMKGYfFkgFNSJXJs53z.eval
25
+ full__medgemma-27b__2026-07-24.eval,full,medgemma-27b,2026-07-24,1,5000,openai/gpt-4.1,fresh,success,0.472,0.3321,hs-non-professional,2026-07-24T12-08-49-00-00_healthbench_cuBWJL4bbU32vR5cxHsjEC.eval
26
+ hard__medgemma-27b__2026-07-24-cached.eval,hard,medgemma-27b,2026-07-24,1,1000,"openai/gpt-4o-mini (default, inferred)",MOSTLY CACHED,success,0.2109,0.0483,hs-hard,2026-07-24T14-36-42-00-00_healthbench-hard_BU7wDz79JMGuziKwJrRrpN.eval
27
+ professional__gpt-5.5__2026-07-24.eval,professional,gpt-5.5,2026-07-24,8,4200,openai/gpt-5.4,fresh,success,0.5295,0.4781,hs-original,2026-07-24T15-57-49-00-00_healthbench-professional_7PZFsBJYTZRCdXZkJPfki7.eval
28
+ professional-consult__gpt-5.5__2026-07-24-replay.eval,professional-consult,gpt-5.5,2026-07-24,8,1888,openai/gpt-5.4,FULL CACHE REPLAY,success,0.51,0.4864,hs-prof-subsets,2026-07-24T16-36-59-00-00_healthbench-professional-consult_D8Z93ZWFtkR4CDbDBLZvBT.eval
29
+ professional-writing__gpt-5.5__2026-07-24-replay.eval,professional-writing,gpt-5.5,2026-07-24,8,1136,openai/gpt-5.4,FULL CACHE REPLAY,success,0.4062,0.3596,hs-prof-subsets,2026-07-24T16-37-37-00-00_healthbench-professional-writing_joZQNJ9ZAZidpUaSpEqyvS.eval
30
+ professional-research__gpt-5.5__2026-07-24-replay.eval,professional-research,gpt-5.5,2026-07-24,8,1176,openai/gpt-5.4,FULL CACHE REPLAY,success,0.6799,0.5792,hs-prof-subsets,2026-07-24T16-37-58-00-00_healthbench-professional-research_3Vd4jhz6oiMQTsC2Mhw849.eval
31
+ professional-redteam__gpt-5.5__2026-07-24-replay.eval,professional-redteam,gpt-5.5,2026-07-24,8,1528,openai/gpt-5.4,FULL CACHE REPLAY,success,0.2992,0.2819,hs-prof-subsets,2026-07-24T16-38-22-00-00_healthbench-professional-red-teaming_Xund3mwQvSqTJfxno7icGe.eval
32
+ professional-baseline__gpt-5.5__2026-07-24.eval,professional-baseline,gpt-5.5,2026-07-24,8,4200,openai/gpt-5.4,baseline(no model gen by design),success,0.4429,0.4387,hs-prof-subsets,2026-07-24T16-38-52-00-00_healthbench-professional-physician-baseline_XADueRF5xwkSmDPWc4LtNf.eval
33
+ professional__opus-4.7__2026-07-24.eval,professional,opus-4.7,2026-07-24,8,4200,openai/gpt-5.4,fresh,success,0.5083,0.4803,hs-original,2026-07-24T16-55-39-00-00_healthbench-professional_boiooCVNG7ZkBVsnEpKLNT.eval
34
+ professional-consult__opus-4.7__2026-07-24-replay.eval,professional-consult,opus-4.7,2026-07-24,8,1888,openai/gpt-5.4,FULL CACHE REPLAY,success,0.4906,0.4704,hs-prof-subsets,2026-07-24T17-19-14-00-00_healthbench-professional-consult_hZgDXu6oT2MuZrn4L7msXN.eval
35
+ professional-writing__opus-4.7__2026-07-24-replay.eval,professional-writing,opus-4.7,2026-07-24,8,1136,openai/gpt-5.4,FULL CACHE REPLAY,success,0.3947,0.3615,hs-prof-subsets,2026-07-24T17-19-42-00-00_healthbench-professional-writing_haJJesaYyVNeNRLHnAi8HD.eval
36
+ professional-research__opus-4.7__2026-07-24-replay.eval,professional-research,opus-4.7,2026-07-24,8,1176,openai/gpt-5.4,FULL CACHE REPLAY,success,0.6464,0.6107,hs-prof-subsets,2026-07-24T17-19-59-00-00_healthbench-professional-research_7RUfdNFLnH7EpAC92NeL7e.eval
37
+ professional-redteam__opus-4.7__2026-07-24-replay.eval,professional-redteam,opus-4.7,2026-07-24,8,1528,openai/gpt-5.4,FULL CACHE REPLAY,success,0.2828,0.2674,hs-prof-subsets,2026-07-24T17-20-17-00-00_healthbench-professional-red-teaming_DLPPa6kbs9VeKS6cfPDhdv.eval
38
+ professional-baseline__opus-4.7__2026-07-24.eval,professional-baseline,opus-4.7,2026-07-24,8,4200,openai/gpt-5.4,baseline(no model gen by design),success,0.4429,0.4387,hs-prof-subsets,2026-07-24T17-20-42-00-00_healthbench-professional-physician-baseline_98adhjPPBGUtnnuJVmWXjn.eval
39
+ professional__plamo-3.0-prime__2026-07-24.eval,professional,plamo-3.0-prime,2026-07-24,8,4200,openai/gpt-5.4,fresh,success,0.2078,0.1374,hs-original,2026-07-24T17-30-37-00-00_healthbench-professional_c9RnXrEaoi4T33bvwXEA5h.eval
40
+ professional-consult__plamo-3.0-prime__2026-07-24-replay.eval,professional-consult,plamo-3.0-prime,2026-07-24,8,1888,openai/gpt-5.4,FULL CACHE REPLAY,success,0.2184,0.1536,hs-prof-subsets,2026-07-24T19-33-04-00-00_healthbench-professional-consult_dgWnf9y2uVjcWoDcyTm3Mm.eval
41
+ professional-writing__plamo-3.0-prime__2026-07-24-replay.eval,professional-writing,plamo-3.0-prime,2026-07-24,8,1136,openai/gpt-5.4,FULL CACHE REPLAY,success,-0.0276,-0.0431,hs-prof-subsets,2026-07-24T19-33-35-00-00_healthbench-professional-writing_eAmnviGLop8QfjxGLMp9Dz.eval
42
+ professional-research__plamo-3.0-prime__2026-07-24-replay.eval,professional-research,plamo-3.0-prime,2026-07-24,8,1176,openai/gpt-5.4,FULL CACHE REPLAY,success,0.4183,0.2858,hs-prof-subsets,2026-07-24T19-33-52-00-00_healthbench-professional-research_WF5VpCWo3K285bwUiVdCUm.eval
43
+ professional-redteam__plamo-3.0-prime__2026-07-24-replay.eval,professional-redteam,plamo-3.0-prime,2026-07-24,8,1528,openai/gpt-5.4,FULL CACHE REPLAY,success,-0.0986,-0.1182,hs-prof-subsets,2026-07-24T19-34-11-00-00_healthbench-professional-red-teaming_4db2cTWDv6VCVoFSFqWpmW.eval
44
+ professional-baseline__plamo-3.0-prime__2026-07-24.eval,professional-baseline,plamo-3.0-prime,2026-07-24,8,4200,openai/gpt-5.4,baseline(no model gen by design),success,0.4429,0.4387,hs-prof-subsets,2026-07-24T19-34-35-00-00_healthbench-professional-physician-baseline_S4NuFZgLXeK7RAgHpRKqTy.eval
45
+ professional-writing__deepseek-v4-pro__2026-07-24.eval,professional-writing,deepseek-v4-pro,2026-07-24,8,1136,openai/gpt-5.4,fresh,success,0.0954,0.0495,hs-prof-subsets,2026-07-24T19-59-01-00-00_healthbench-professional-writing_933975rUF6cdWKJECk44bJ.eval
46
+ professional-research__deepseek-v4-pro__2026-07-24.eval,professional-research,deepseek-v4-pro,2026-07-24,8,1176,openai/gpt-5.4,fresh,success,0.6368,0.5291,hs-prof-subsets,2026-07-24T20-07-30-00-00_healthbench-professional-research_7gKGNrErBwsumd7oKKUcuN.eval
47
+ professional-redteam__deepseek-v4-pro__2026-07-24.eval,professional-redteam,deepseek-v4-pro,2026-07-24,8,1528,openai/gpt-5.4,fresh,success,-0.0372,-0.0687,hs-prof-subsets,2026-07-24T20-18-24-00-00_healthbench-professional-red-teaming_HmwUcZnfLNqmUkyZkHDTdJ.eval
48
+ professional-baseline__deepseek-v4-pro__2026-07-24.eval,professional-baseline,deepseek-v4-pro,2026-07-24,8,4200,openai/gpt-5.4,baseline(no model gen by design),success,0.4429,0.4387,hs-prof-subsets,2026-07-24T20-28-47-00-00_healthbench-professional-physician-baseline_kjY8x2CXBcbHZUSHs55G7D.eval
49
+ professional__medgemma-27b__2026-07-24.eval,professional,medgemma-27b,2026-07-24,8,4200,openai/gpt-5.4,fresh,success,0.3125,0.2003,hs-original,2026-07-24T22-44-03-00-00_healthbench-professional_6AYXiEDgGuzNtAcyWPDGrR.eval
50
+ professional-consult__medgemma-27b__2026-07-24-cached.eval,professional-consult,medgemma-27b,2026-07-24,8,1888,openai/gpt-5.4,MOSTLY CACHED,success,0.2851,0.1778,hs-prof-subsets,2026-07-24T23-41-11-00-00_healthbench-professional-consult_muhCA3DyeXvwNpDvn7gpN4.eval
51
+ professional-writing__medgemma-27b__2026-07-24-cached.eval,professional-writing,medgemma-27b,2026-07-24,8,1136,openai/gpt-5.4,MOSTLY CACHED,success,0.1891,0.0913,hs-prof-subsets,2026-07-24T23-41-59-00-00_healthbench-professional-writing_CMBT9aSmchzcQFRpwZdCqR.eval
52
+ professional-research__medgemma-27b__2026-07-24-cached.eval,professional-research,medgemma-27b,2026-07-24,8,1176,openai/gpt-5.4,MOSTLY CACHED,success,0.4776,0.344,hs-prof-subsets,2026-07-24T23-42-33-00-00_healthbench-professional-research_RFx9qF5ZP369Kdi3CNQU6M.eval
53
+ professional-redteam__medgemma-27b__2026-07-24-replay.eval,professional-redteam,medgemma-27b,2026-07-24,8,1528,openai/gpt-5.4,FULL CACHE REPLAY,success,0.0145,-0.068,hs-prof-subsets,2026-07-24T23-43-33-00-00_healthbench-professional-red-teaming_ewG7cuk2vXaZpcauRLz7qR.eval
54
+ professional-baseline__medgemma-27b__2026-07-24.eval,professional-baseline,medgemma-27b,2026-07-24,8,4200,openai/gpt-5.4,baseline(no model gen by design),success,0.439,0.4348,hs-prof-subsets,2026-07-24T23-44-07-00-00_healthbench-professional-physician-baseline_cY3Z8sUNPRQTpSA3UHa77J.eval
55
+ professional__medgemma-4b__2026-07-25.eval,professional,medgemma-4b,2026-07-25,8,4200,openai/gpt-5.4,fresh,success,0.1651,0.0904,hs-original,2026-07-25T00-26-29-00-00_healthbench-professional_GEViyNR2PM2B2oUV94DzoK.eval
56
+ professional-consult__medgemma-4b__2026-07-25-cached.eval,professional-consult,medgemma-4b,2026-07-25,8,1888,openai/gpt-5.4,MOSTLY CACHED,success,0.152,0.0819,hs-prof-subsets,2026-07-25T00-59-37-00-00_healthbench-professional-consult_ffSg7GfyxjArrdwu7fSrBa.eval
57
+ professional__deepseek-v4-pro__2026-07-25-cached.eval,professional,deepseek-v4-pro,2026-07-25,1,525,openai/gpt-5.4,MOSTLY CACHED,success,0.343,0.2742,hs-original,2026-07-25T18-24-55-00-00_healthbench-professional_HaKmMaK4Q6JCLuX2RLCPnc.eval
58
+ professional-consult__deepseek-v4-pro__2026-07-25-replay.eval,professional-consult,deepseek-v4-pro,2026-07-25,1,236,openai/gpt-5.4,FULL CACHE REPLAY,success,0.3123,0.2559,hs-prof-subsets,2026-07-25T18-26-20-00-00_healthbench-professional-consult_3DSH4qRFzYfb27rH9Z9RqP.eval
59
+ professional-writing__deepseek-v4-pro__2026-07-25-replay.eval,professional-writing,deepseek-v4-pro,2026-07-25,1,142,openai/gpt-5.4,FULL CACHE REPLAY,success,0.0973,0.0516,hs-prof-subsets,2026-07-25T18-26-25-00-00_healthbench-professional-writing_2LJ8vJpJXUX2TbtokQzbxp.eval
60
+ professional-research__deepseek-v4-pro__2026-07-25-replay.eval,professional-research,deepseek-v4-pro,2026-07-25,1,147,openai/gpt-5.4,FULL CACHE REPLAY,success,0.6298,0.5185,hs-prof-subsets,2026-07-25T18-26-28-00-00_healthbench-professional-research_9Pb5iwuDu8dmuFzs5FnmBw.eval
61
+ professional-redteam__deepseek-v4-pro__2026-07-25-replay.eval,professional-redteam,deepseek-v4-pro,2026-07-25,1,191,openai/gpt-5.4,FULL CACHE REPLAY,success,-0.0532,-0.0829,hs-prof-subsets,2026-07-25T18-26-32-00-00_healthbench-professional-red-teaming_e9hCTjjRXrNTnexAxrYM8x.eval
62
+ professional-baseline__deepseek-v4-pro__2026-07-25.eval,professional-baseline,deepseek-v4-pro,2026-07-25,1,525,openai/gpt-5.4,baseline(no model gen by design),success,0.4331,0.4289,hs-prof-subsets,2026-07-25T18-26-35-00-00_healthbench-professional-physician-baseline_Njv8PLSvCJpAvUbPPMQqkx.eval
63
+ hard__medgemma-27b__2026-08-05.eval,hard,medgemma-27b,2026-08-05,1,1000,openai/gpt-4.1,fresh,success,0.1332,-0.0442,medgemma-healthbench-hard,2026-08-05T06-05-04-00-00_healthbench-hard_U2qKVPncnWPTbmLEfZfa4y.eval
64
+ hard__medgemma-4b__2026-08-05.eval,hard,medgemma-4b,2026-08-05,1,1000,openai/gpt-4.1,fresh,success,-0.0312,-0.1641,medgemma-healthbench-hard,2026-08-05T07-09-21-00-00_healthbench-hard_4bZEuQss4Bbee8KixwTS4o.eval
65
+ hard__medgemma-4b__2026-08-05__0754.eval,hard,medgemma-4b,2026-08-05,1,1000,openai/gpt-4.1,fresh,success,-0.0347,-0.1256,healthbench-hard-medgemma-v2,2026-08-05T07-54-55-00-00_healthbench-hard_MANxy36rpJhotpAvdwQiFk.eval
66
+ hard__medgemma-27b__2026-08-05__0807.eval,hard,medgemma-27b,2026-08-05,1,1000,openai/gpt-4.1,fresh,success,0.1415,-0.023,healthbench-hard-medgemma-v2,2026-08-05T08-07-41-00-00_healthbench-hard_D9KnFzsoQRE57vVsejUQnW.eval
67
+ consensus__medgemma-27b__2026-08-05.eval,consensus,medgemma-27b,2026-08-05,1,3671,openai/gpt-4.1,fresh,success,0.9105,0.9007,healthbench-consensus-medgemma,2026-08-05T08-51-22-00-00_healthbench-consensus_6a8D2h492in82NNQHCFgZw.eval
68
+ consensus__medgemma-4b__2026-08-05.eval,consensus,medgemma-4b,2026-08-05,1,3671,openai/gpt-4.1,fresh,success,0.7583,0.7522,healthbench-consensus-medgemma,2026-08-05T10-32-09-00-00_healthbench-consensus_6WXSuGaZvDNS5Zze6Jrm3h.eval
69
+ professional__deepseek-v4-pro__2026-08-06.eval,professional,deepseek-v4-pro,2026-08-06,1,525,openai/gpt-5.4,fresh,success,0.3781,0.3099,healthbench-professional-deepseek-v4-pro,2026-08-06T02-35-30-00-00_healthbench-professional_bbeHCEMNSj6Q362BQHa7mS.eval
favicon.svg ADDED
index.html CHANGED
@@ -1,19 +1,378 @@
1
  <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
  <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <link rel="icon" href="favicon.svg">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>HealthBench eval logs: 68 runs, 6 models, 8 benches</title>
8
+ <style>
9
+ :root{--ivory:#FAF9F5;--slate:#141413;--clay:#D97757;--oat:#E3DACC;--olive:#788C5D;
10
+ --gray-150:#F0EEE6;--gray-300:#D1CFC5;--gray-500:#87867F;--gray-700:#3D3D3A;
11
+ --serif:ui-serif,Georgia,"Times New Roman",serif;--sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
12
+ --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}
13
+ *{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}
14
+ body{background:var(--ivory);color:var(--gray-700);font-family:var(--sans);font-size:15px;line-height:1.65;
15
+ -webkit-font-smoothing:antialiased;padding:56px 24px 120px}
16
+ .page{max-width:1160px;margin:0 auto;display:grid;grid-template-columns:210px minmax(0,1fr);gap:44px}
17
+ @media(max-width:920px){.page{grid-template-columns:1fr}nav{display:none}}
18
+ nav{position:sticky;top:32px;align-self:start;font-size:13px}
19
+ nav .label{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--gray-500);margin-bottom:12px}
20
+ nav a{display:block;padding:5px 0 5px 12px;border-left:2px solid var(--gray-300);color:var(--gray-700);text-decoration:none}
21
+ nav a:hover{color:var(--slate);border-color:var(--slate)}
22
+ nav a.l2{padding-left:20px;font-size:12px;color:var(--gray-500)}
23
+ nav a .ct{font-family:var(--mono);font-size:10px;color:var(--gray-300)}
24
+ nav .files{margin-top:26px;border-top:1px solid var(--gray-300);padding-top:14px}
25
+ header{margin-bottom:12px}
26
+ .eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--gray-500);margin-bottom:10px}
27
+ h1{font-family:var(--serif);font-weight:500;font-size:32px;color:var(--slate);letter-spacing:-.01em;margin-bottom:14px}
28
+ .dateline{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--gray-500);margin-top:-4px}
29
+ h2{font-family:var(--serif);font-weight:500;font-size:22px;color:var(--slate);margin:40px 0 14px;scroll-margin-top:24px}
30
+ h3{font-family:var(--serif);font-weight:500;font-size:16px;color:var(--slate);margin:26px 0 2px;scroll-margin-top:24px}
31
+ h3 .cnt{font-family:var(--mono);font-size:11px;color:var(--gray-500);font-weight:400;margin-left:6px}
32
+ p{margin-bottom:12px;max-width:680px}
33
+ p.blurb{font-size:13px;color:var(--gray-500);margin-bottom:8px}
34
+ ul{margin:0 0 12px 22px;max-width:680px}li{margin-bottom:6px}
35
+ code{font-family:var(--mono);font-size:13px}
36
+ a{color:var(--slate);text-decoration:underline;text-decoration-color:var(--gray-300)}
37
+ a:hover{text-decoration-color:var(--clay)}
38
+ .cards{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:18px 0;max-width:760px}
39
+ @media(max-width:640px){.cards{grid-template-columns:1fr}}
40
+ .card{border:1.5px solid var(--gray-300);border-radius:10px;background:#fff;padding:16px 18px;text-decoration:none;display:block}
41
+ .card:hover{border-color:var(--clay)}
42
+ .card .k{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--gray-500);margin-bottom:6px}
43
+ .card .t{font-family:var(--serif);font-size:18px;color:var(--slate);margin-bottom:6px}
44
+ .card .b{font-size:13px;color:var(--gray-700)}
45
+ .callout{display:flex;gap:12px;border:1.5px solid var(--oat);background:rgba(227,218,204,.35);border-radius:10px;
46
+ padding:14px 16px;margin:18px 0;font-size:14px;max-width:760px}
47
+ .callout .ico{color:var(--clay);font-weight:600}
48
+ .callout p{margin-bottom:6px}.callout p:last-child{margin-bottom:0}
49
+ .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:16px 0;max-width:600px}
50
+ @media(max-width:640px){.stats{grid-template-columns:repeat(2,1fr)}}
51
+ .stat{border:1px solid var(--gray-300);border-radius:8px;background:#fff;padding:10px 12px}
52
+ .stat .v{font-family:var(--serif);font-size:22px;color:var(--slate);line-height:1.2}
53
+ .stat .l{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--gray-500)}
54
+ #filter{font-family:var(--mono);font-size:13px;padding:9px 12px;border:1.5px solid var(--gray-300);border-radius:8px;
55
+ background:#fff;width:100%;max-width:420px;color:var(--slate)}
56
+ #filter:focus{outline:none;border-color:var(--clay)}
57
+ .fcount{font-family:var(--mono);font-size:11px;color:var(--gray-500);margin-top:6px}
58
+ table.logs{border-collapse:collapse;width:100%;max-width:900px;margin:6px 0 4px;font-size:13px;
59
+ border:1.5px solid var(--gray-300);border-radius:8px;background:#fff}
60
+ table.logs th,table.logs td{padding:6px 9px;border-bottom:1px solid var(--gray-300);text-align:left;white-space:nowrap}
61
+ table.logs thead th{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;
62
+ color:var(--gray-500);background:var(--gray-150)}
63
+ table.logs th.n,table.logs td.n{text-align:right;font-variant-numeric:tabular-nums}
64
+ table.logs tbody tr:last-child td{border-bottom:none}
65
+ table.logs td.m{font-weight:500;color:var(--slate)}
66
+ table.logs td.d,table.logs td.j,table.logs td.n{font-family:var(--mono);font-size:12px}
67
+ table.logs td.f a{font-family:var(--mono);font-size:11.5px;color:var(--clay);text-decoration:none;
68
+ border:1px solid var(--gray-300);border-radius:5px;padding:2px 7px}
69
+ table.logs td.f a:hover{border-color:var(--clay);background:rgba(217,119,87,.08)}
70
+ .tag{font-family:var(--mono);font-size:10px;padding:2px 6px;border-radius:4px;border:1px solid var(--gray-300);color:var(--gray-500)}
71
+ .t-ok{border-color:var(--olive);color:#5d6e47;background:rgba(120,140,93,.1)}
72
+ .t-warn{border-color:var(--clay);color:#b0533a;background:rgba(217,119,87,.1)}
73
+ .t-bad{border-color:#B0533A;color:#B0533A;background:rgba(176,83,58,.14)}
74
+ .t-neutral{background:var(--gray-150)}
75
+ .inf{color:var(--clay);font-size:10px}
76
+ table.plain{border-collapse:collapse;width:100%;max-width:760px;margin:14px 0;font-size:14px}
77
+ table.plain th,table.plain td{padding:8px 12px;border-bottom:1px solid var(--gray-300);text-align:left;vertical-align:top}
78
+ table.plain th{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--gray-500);
79
+ font-weight:600;border-bottom:1.5px solid var(--gray-300)}
80
+ .legend{font-family:var(--mono);font-size:11px;color:var(--gray-500);margin:10px 0 0;max-width:900px;line-height:1.9}
81
+ </style>
82
+ </head>
83
+ <body>
84
+ <div class="page">
85
+ <nav>
86
+ <div class="label">On this page</div>
87
+ <a href="#start">Start here</a>
88
+ <a href="#logs">All 68 logs</a>
89
+ <a href="#full" class="l2">HealthBench full <span class="ct">10</span></a>
90
+ <a href="#consensus" class="l2">HealthBench consensus <span class="ct">8</span></a>
91
+ <a href="#hard" class="l2">HealthBench hard <span class="ct">13</span></a>
92
+ <a href="#professional" class="l2">HealthBench Professional <span class="ct">7</span></a>
93
+ <a href="#professional-consult" class="l2">Professional: consult <span class="ct">6</span></a>
94
+ <a href="#professional-writing" class="l2">Professional: writing <span class="ct">6</span></a>
95
+ <a href="#professional-research" class="l2">Professional: research <span class="ct">6</span></a>
96
+ <a href="#professional-redteam" class="l2">Professional: red-teaming <span class="ct">6</span></a>
97
+ <a href="#professional-baseline" class="l2">Professional: physician baseline <span class="ct">6</span></a>
98
+ <a href="#reports">Analysis</a>
99
+ <a href="#trust">Before you quote a number</a>
100
+ <a href="#how">How this was assembled</a>
101
+ <div class="files">
102
+ <div class="label">Data files</div>
103
+ <a href="data/log_mapping.csv">log_mapping.csv</a>
104
+ <a href="data/MANIFEST.csv">MANIFEST.csv</a>
105
+ <a href="data/INDEX.md">INDEX.md</a>
106
+ </div>
107
+ </nav>
108
+
109
+ <main>
110
+ <header>
111
+ <div class="eyebrow">HealthBench &middot; Inspect eval logs</div>
112
+ <h1>HealthBench eval logs: 68 runs, 6 models, 8 benches</h1>
113
+ <div class="dateline">Created 2026-08-07</div>
114
+ </header>
115
+
116
+ <h2 id="start">Start here</h2>
117
+
118
+ <p>Every HealthBench run we have, as Inspect <code>.eval</code> logs, in one place. Six models
119
+ (GPT-5.5, Claude Opus 4.7, DeepSeek-V4-Pro, PLaMo-3.0-Prime, MedGemma-27B, MedGemma-4B) across
120
+ HealthBench full, consensus, hard, and Professional with its four use-case slices.</p>
121
+
122
+ <div class="stats">
123
+ <div class="stat"><div class="v">68</div><div class="l">eval logs</div></div>
124
+ <div class="stat"><div class="v">2.3 GB</div><div class="l">total size</div></div>
125
+ <div class="stat"><div class="v">23</div><div class="l">fresh runs</div></div>
126
+ <div class="stat"><div class="v">34</div><div class="l">cache replays</div></div>
127
+ </div>
128
+
129
+ <div class="cards">
130
+ <a class="card" href="viewer/index.html">
131
+ <div class="k">browse in-browser</div>
132
+ <div class="t">Open the log viewer &rarr;</div>
133
+ <div class="b">The Inspect viewer, loaded with the 7 Professional whole-set runs (Spaces cap out at 1 GB, so the full 2.1 GB set lives in the dataset). Click any run to read
134
+ individual samples, the model's answer, and every rubric verdict the judge made.</div>
135
+ </a>
136
+ <a class="card" href="matrix.html">
137
+ <div class="k">what exists, what does not</div>
138
+ <div class="t">Coverage matrix &rarr;</div>
139
+ <div class="b">Model &times; bench grid: which cells are complete, which are off-config, and
140
+ the 5 runs still missing. Read this before comparing any two numbers.</div>
141
+ </a>
142
+ </div>
143
+
144
+ <p>To pull a single log straight down, use the <code>.eval</code> button in the tables below, or
145
+ fetch it directly:</p>
146
+
147
+ <table class="plain">
148
+ <tbody>
149
+ <tr><td><code>huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/&lt;bench&gt;__&lt;model&gt;__&lt;date&gt;.eval</code></td></tr>
150
+ </tbody>
151
+ </table>
152
+
153
+ <p>Filenames carry the config, so <code>professional__gpt-5.5__2026-07-24.eval</code> needs no
154
+ lookup. A <code>-replay</code> or <code>-cached</code> suffix means the model responses came from
155
+ Inspect's cache rather than a fresh generation; <code>-FAILED</code> means the run errored and is
156
+ kept only for provenance.</p>
157
+
158
+ <h2 id="logs">All 68 logs</h2>
159
+
160
+ <p>Scores are &times;100. <code>raw</code> is the HealthBench score, <code>adj</code> is the
161
+ length-adjusted one. Grouped by bench, sorted by model.</p>
162
+
163
+ <input id="filter" type="search" placeholder="filter: try &quot;professional medgemma&quot; or &quot;replay&quot;" autocomplete="off">
164
+ <div class="fcount" id="fcount">68 logs</div>
165
+
166
+ <h3 id="full">HealthBench full <span class="cnt">10 logs</span></h3>
167
+ <p class="blurb">5000 samples, the whole open-ended set</p>
168
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
169
+ <tr data-s="gpt-5.5 full 2026-07-09 openai/gpt-4o-mini not-a-run"><td class="m">gpt-5.5</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">&mdash;</td><td class="j">openai/gpt-4o-mini</td><td class="n">&mdash;</td><td class="n">&mdash;</td><td><span class="tag t-bad">failed</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__gpt-5.5__2026-07-09-FAILED.eval" download>.eval</a></td></tr>
170
+ <tr data-s="gpt-5.5 full 2026-07-09 openai/gpt-4o-mini not-a-run"><td class="m">gpt-5.5</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">&mdash;</td><td class="j">openai/gpt-4o-mini</td><td class="n">&mdash;</td><td class="n">&mdash;</td><td><span class="tag t-bad">failed</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__gpt-5.5__2026-07-09-FAILED__0905.eval" download>.eval</a></td></tr>
171
+ <tr data-s="gpt-5.5 full 2026-07-09 openai/gpt-4o-mini fresh"><td class="m">gpt-5.5</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">5000</td><td class="j">openai/gpt-4o-mini</td><td class="n">48.7</td><td class="n">&mdash;</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__gpt-5.5__2026-07-09.eval" download>.eval</a></td></tr>
172
+ <tr data-s="gpt-5.5 full 2026-07-15 gpt-4.1 full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-15</td><td class="n">1</td><td class="n">5000</td><td class="j">gpt-4.1</td><td class="n">56.9</td><td class="n">55.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__gpt-5.5__2026-07-15-replay.eval" download>.eval</a></td></tr>
173
+ <tr data-s="opus-4.7 full 2026-07-09 openai/gpt-4o-mini fresh"><td class="m">opus-4.7</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">5000</td><td class="j">openai/gpt-4o-mini</td><td class="n">47.6</td><td class="n">&mdash;</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__opus-4.7__2026-07-09.eval" download>.eval</a></td></tr>
174
+ <tr data-s="opus-4.7 full 2026-07-15 gpt-4.1 full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-15</td><td class="n">1</td><td class="n">5000</td><td class="j">gpt-4.1</td><td class="n">53.4</td><td class="n">54.3</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__opus-4.7__2026-07-15-replay.eval" download>.eval</a></td></tr>
175
+ <tr data-s="deepseek-v4-pro full 2026-07-16 gpt-4.1 fresh"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">5000</td><td class="j">gpt-4.1</td><td class="n">51.4</td><td class="n">41.7</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__deepseek-v4-pro__2026-07-16.eval" download>.eval</a></td></tr>
176
+ <tr data-s="plamo-3.0-prime full 2026-07-16 gpt-4.1 fresh"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">5000</td><td class="j">gpt-4.1</td><td class="n">39.4</td><td class="n">32.4</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__plamo-3.0-prime__2026-07-16.eval" download>.eval</a></td></tr>
177
+ <tr data-s="medgemma-27b full 2026-07-24 gpt-4.1 fresh"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">1</td><td class="n">5000</td><td class="j">gpt-4.1</td><td class="n">47.2</td><td class="n">33.2</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__medgemma-27b__2026-07-24.eval" download>.eval</a></td></tr>
178
+ <tr data-s="medgemma-4b full 2026-07-24 gpt-4.1 mostly cached"><td class="m">medgemma-4b</td><td class="d">2026-07-24</td><td class="n">1</td><td class="n">5000</td><td class="j">gpt-4.1</td><td class="n">27.0</td><td class="n">18.3</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/full__medgemma-4b__2026-07-24-cached.eval" download>.eval</a></td></tr>
179
+ </tbody></table>
180
+ <h3 id="consensus">HealthBench consensus <span class="cnt">8 logs</span></h3>
181
+ <p class="blurb">3671 samples, criteria physicians agreed on</p>
182
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
183
+ <tr data-s="gpt-5.5 consensus 2026-07-16 gpt-4o-mini full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">82.1</td><td class="n">82.0</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__gpt-5.5__2026-07-16-replay.eval" download>.eval</a></td></tr>
184
+ <tr data-s="opus-4.7 consensus 2026-07-16 gpt-4o-mini full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">80.2</td><td class="n">80.2</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__opus-4.7__2026-07-16-replay.eval" download>.eval</a></td></tr>
185
+ <tr data-s="deepseek-v4-pro consensus 2026-07-16 gpt-4o-mini full cache replay"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">79.1</td><td class="n">78.5</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__deepseek-v4-pro__2026-07-16-replay.eval" download>.eval</a></td></tr>
186
+ <tr data-s="plamo-3.0-prime consensus 2026-07-16 gpt-4o-mini full cache replay"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">75.2</td><td class="n">74.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__plamo-3.0-prime__2026-07-16-replay.eval" download>.eval</a></td></tr>
187
+ <tr data-s="medgemma-27b consensus 2026-07-24 gpt-4o-mini fresh"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">77.6</td><td class="n">76.6</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__medgemma-27b__2026-07-24.eval" download>.eval</a></td></tr>
188
+ <tr data-s="medgemma-27b consensus 2026-08-05 gpt-4.1 fresh"><td class="m">medgemma-27b</td><td class="d">2026-08-05</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4.1</td><td class="n">91.0</td><td class="n">90.1</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__medgemma-27b__2026-08-05.eval" download>.eval</a></td></tr>
189
+ <tr data-s="medgemma-4b consensus 2026-07-24 gpt-4o-mini fresh"><td class="m">medgemma-4b</td><td class="d">2026-07-24</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">71.4</td><td class="n">70.8</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__medgemma-4b__2026-07-24.eval" download>.eval</a></td></tr>
190
+ <tr data-s="medgemma-4b consensus 2026-08-05 gpt-4.1 fresh"><td class="m">medgemma-4b</td><td class="d">2026-08-05</td><td class="n">1</td><td class="n">3671</td><td class="j">gpt-4.1</td><td class="n">75.8</td><td class="n">75.2</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/consensus__medgemma-4b__2026-08-05.eval" download>.eval</a></td></tr>
191
+ </tbody></table>
192
+ <h3 id="hard">HealthBench hard <span class="cnt">13 logs</span></h3>
193
+ <p class="blurb">1000 samples, the hardest slice</p>
194
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
195
+ <tr data-s="gpt-5.5 hard 2026-07-09 &amp;mdash; not-a-run"><td class="m">gpt-5.5</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">&mdash;</td><td class="j">&mdash;</td><td class="n">&mdash;</td><td class="n">&mdash;</td><td><span class="tag t-bad">failed</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__gpt-5.5__2026-07-09-FAILED.eval" download>.eval</a></td></tr>
196
+ <tr data-s="gpt-5.5 hard 2026-07-16 gpt-4o-mini full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">27.3</td><td class="n">26.0</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__gpt-5.5__2026-07-16-replay.eval" download>.eval</a></td></tr>
197
+ <tr data-s="opus-4.7 hard 2026-07-09 &amp;mdash; not-a-run"><td class="m">opus-4.7</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">&mdash;</td><td class="j">&mdash;</td><td class="n">&mdash;</td><td class="n">&mdash;</td><td><span class="tag t-bad">failed</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__opus-4.7__2026-07-09-FAILED.eval" download>.eval</a></td></tr>
198
+ <tr data-s="opus-4.7 hard 2026-07-16 gpt-4o-mini full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">26.6</td><td class="n">27.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__opus-4.7__2026-07-16-replay.eval" download>.eval</a></td></tr>
199
+ <tr data-s="deepseek-v4-pro hard 2026-07-16 gpt-4o-mini full cache replay"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">24.8</td><td class="n">13.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__deepseek-v4-pro__2026-07-16-replay.eval" download>.eval</a></td></tr>
200
+ <tr data-s="plamo-3.0-prime hard 2026-07-16 gpt-4o-mini full cache replay"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-16</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">17.4</td><td class="n">9.6</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__plamo-3.0-prime__2026-07-16-replay.eval" download>.eval</a></td></tr>
201
+ <tr data-s="medgemma-27b hard 2026-07-24 gpt-4o-mini mostly cached"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">21.1</td><td class="n">4.8</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__medgemma-27b__2026-07-24-cached.eval" download>.eval</a></td></tr>
202
+ <tr data-s="medgemma-27b hard 2026-08-05 gpt-4.1 fresh"><td class="m">medgemma-27b</td><td class="d">2026-08-05</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4.1</td><td class="n">13.3</td><td class="n">-4.4</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__medgemma-27b__2026-08-05.eval" download>.eval</a></td></tr>
203
+ <tr data-s="medgemma-27b hard 2026-08-05 gpt-4.1 fresh"><td class="m">medgemma-27b</td><td class="d">2026-08-05</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4.1</td><td class="n">14.1</td><td class="n">-2.3</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__medgemma-27b__2026-08-05__0807.eval" download>.eval</a></td></tr>
204
+ <tr data-s="medgemma-4b hard 2026-07-24 gpt-4o-mini fresh"><td class="m">medgemma-4b</td><td class="d">2026-07-24</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4o-mini <span class="inf">?</span></td><td class="n">10.6</td><td class="n">1.3</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__medgemma-4b__2026-07-24.eval" download>.eval</a></td></tr>
205
+ <tr data-s="medgemma-4b hard 2026-08-05 gpt-4.1 fresh"><td class="m">medgemma-4b</td><td class="d">2026-08-05</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4.1</td><td class="n">-3.1</td><td class="n">-16.4</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__medgemma-4b__2026-08-05.eval" download>.eval</a></td></tr>
206
+ <tr data-s="medgemma-4b hard 2026-08-05 gpt-4.1 fresh"><td class="m">medgemma-4b</td><td class="d">2026-08-05</td><td class="n">1</td><td class="n">1000</td><td class="j">gpt-4.1</td><td class="n">-3.5</td><td class="n">-12.6</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__medgemma-4b__2026-08-05__0754.eval" download>.eval</a></td></tr>
207
+ <tr data-s="gpt-5-nano hard 2026-07-09 &amp;mdash; not-a-run"><td class="m">gpt-5-nano</td><td class="d">2026-07-09</td><td class="n">1</td><td class="n">&mdash;</td><td class="j">&mdash;</td><td class="n">&mdash;</td><td class="n">&mdash;</td><td><span class="tag t-bad">failed</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/hard__gpt-5-nano__2026-07-09-FAILED.eval" download>.eval</a></td></tr>
208
+ </tbody></table>
209
+ <h3 id="professional">HealthBench Professional <span class="cnt">7 logs</span></h3>
210
+ <p class="blurb">525 samples, physician-written, has a human baseline</p>
211
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
212
+ <tr data-s="gpt-5.5 professional 2026-07-24 gpt-5.4 fresh"><td class="m">gpt-5.5</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">52.9</td><td class="n">47.8</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__gpt-5.5__2026-07-24.eval" download>.eval</a></td></tr>
213
+ <tr data-s="opus-4.7 professional 2026-07-24 gpt-5.4 fresh"><td class="m">opus-4.7</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">50.8</td><td class="n">48.0</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__opus-4.7__2026-07-24.eval" download>.eval</a></td></tr>
214
+ <tr data-s="deepseek-v4-pro professional 2026-07-25 gpt-5.4 mostly cached"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-25</td><td class="n">1</td><td class="n">525</td><td class="j">gpt-5.4</td><td class="n">34.3</td><td class="n">27.4</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__deepseek-v4-pro__2026-07-25-cached.eval" download>.eval</a></td></tr>
215
+ <tr data-s="deepseek-v4-pro professional 2026-08-06 gpt-5.4 fresh"><td class="m">deepseek-v4-pro</td><td class="d">2026-08-06</td><td class="n">1</td><td class="n">525</td><td class="j">gpt-5.4</td><td class="n">37.8</td><td class="n">31.0</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__deepseek-v4-pro__2026-08-06.eval" download>.eval</a></td></tr>
216
+ <tr data-s="plamo-3.0-prime professional 2026-07-24 gpt-5.4 fresh"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">20.8</td><td class="n">13.7</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__plamo-3.0-prime__2026-07-24.eval" download>.eval</a></td></tr>
217
+ <tr data-s="medgemma-27b professional 2026-07-24 gpt-5.4 fresh"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">31.2</td><td class="n">20.0</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__medgemma-27b__2026-07-24.eval" download>.eval</a></td></tr>
218
+ <tr data-s="medgemma-4b professional 2026-07-25 gpt-5.4 fresh"><td class="m">medgemma-4b</td><td class="d">2026-07-25</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">16.5</td><td class="n">9.0</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional__medgemma-4b__2026-07-25.eval" download>.eval</a></td></tr>
219
+ </tbody></table>
220
+ <h3 id="professional-consult">Professional: consult <span class="cnt">6 logs</span></h3>
221
+ <p class="blurb">236 samples</p>
222
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
223
+ <tr data-s="gpt-5.5 professional-consult 2026-07-24 gpt-5.4 full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1888</td><td class="j">gpt-5.4</td><td class="n">51.0</td><td class="n">48.6</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-consult__gpt-5.5__2026-07-24-replay.eval" download>.eval</a></td></tr>
224
+ <tr data-s="opus-4.7 professional-consult 2026-07-24 gpt-5.4 full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1888</td><td class="j">gpt-5.4</td><td class="n">49.1</td><td class="n">47.0</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-consult__opus-4.7__2026-07-24-replay.eval" download>.eval</a></td></tr>
225
+ <tr data-s="deepseek-v4-pro professional-consult 2026-07-25 gpt-5.4 full cache replay"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-25</td><td class="n">1</td><td class="n">236</td><td class="j">gpt-5.4</td><td class="n">31.2</td><td class="n">25.6</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-consult__deepseek-v4-pro__2026-07-25-replay.eval" download>.eval</a></td></tr>
226
+ <tr data-s="plamo-3.0-prime professional-consult 2026-07-24 gpt-5.4 full cache replay"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1888</td><td class="j">gpt-5.4</td><td class="n">21.8</td><td class="n">15.4</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-consult__plamo-3.0-prime__2026-07-24-replay.eval" download>.eval</a></td></tr>
227
+ <tr data-s="medgemma-27b professional-consult 2026-07-24 gpt-5.4 mostly cached"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1888</td><td class="j">gpt-5.4</td><td class="n">28.5</td><td class="n">17.8</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-consult__medgemma-27b__2026-07-24-cached.eval" download>.eval</a></td></tr>
228
+ <tr data-s="medgemma-4b professional-consult 2026-07-25 gpt-5.4 mostly cached"><td class="m">medgemma-4b</td><td class="d">2026-07-25</td><td class="n">8</td><td class="n">1888</td><td class="j">gpt-5.4</td><td class="n">15.2</td><td class="n">8.2</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-consult__medgemma-4b__2026-07-25-cached.eval" download>.eval</a></td></tr>
229
+ </tbody></table>
230
+ <h3 id="professional-writing">Professional: writing <span class="cnt">6 logs</span></h3>
231
+ <p class="blurb">142 samples</p>
232
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
233
+ <tr data-s="gpt-5.5 professional-writing 2026-07-24 gpt-5.4 full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1136</td><td class="j">gpt-5.4</td><td class="n">40.6</td><td class="n">36.0</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-writing__gpt-5.5__2026-07-24-replay.eval" download>.eval</a></td></tr>
234
+ <tr data-s="opus-4.7 professional-writing 2026-07-24 gpt-5.4 full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1136</td><td class="j">gpt-5.4</td><td class="n">39.5</td><td class="n">36.1</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-writing__opus-4.7__2026-07-24-replay.eval" download>.eval</a></td></tr>
235
+ <tr data-s="deepseek-v4-pro professional-writing 2026-07-24 gpt-5.4 fresh"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1136</td><td class="j">gpt-5.4</td><td class="n">9.5</td><td class="n">5.0</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-writing__deepseek-v4-pro__2026-07-24.eval" download>.eval</a></td></tr>
236
+ <tr data-s="deepseek-v4-pro professional-writing 2026-07-25 gpt-5.4 full cache replay"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-25</td><td class="n">1</td><td class="n">142</td><td class="j">gpt-5.4</td><td class="n">9.7</td><td class="n">5.2</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-writing__deepseek-v4-pro__2026-07-25-replay.eval" download>.eval</a></td></tr>
237
+ <tr data-s="plamo-3.0-prime professional-writing 2026-07-24 gpt-5.4 full cache replay"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1136</td><td class="j">gpt-5.4</td><td class="n">-2.8</td><td class="n">-4.3</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-writing__plamo-3.0-prime__2026-07-24-replay.eval" download>.eval</a></td></tr>
238
+ <tr data-s="medgemma-27b professional-writing 2026-07-24 gpt-5.4 mostly cached"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1136</td><td class="j">gpt-5.4</td><td class="n">18.9</td><td class="n">9.1</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-writing__medgemma-27b__2026-07-24-cached.eval" download>.eval</a></td></tr>
239
+ </tbody></table>
240
+ <h3 id="professional-research">Professional: research <span class="cnt">6 logs</span></h3>
241
+ <p class="blurb">147 samples</p>
242
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
243
+ <tr data-s="gpt-5.5 professional-research 2026-07-24 gpt-5.4 full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1176</td><td class="j">gpt-5.4</td><td class="n">68.0</td><td class="n">57.9</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-research__gpt-5.5__2026-07-24-replay.eval" download>.eval</a></td></tr>
244
+ <tr data-s="opus-4.7 professional-research 2026-07-24 gpt-5.4 full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1176</td><td class="j">gpt-5.4</td><td class="n">64.6</td><td class="n">61.1</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-research__opus-4.7__2026-07-24-replay.eval" download>.eval</a></td></tr>
245
+ <tr data-s="deepseek-v4-pro professional-research 2026-07-24 gpt-5.4 fresh"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1176</td><td class="j">gpt-5.4</td><td class="n">63.7</td><td class="n">52.9</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-research__deepseek-v4-pro__2026-07-24.eval" download>.eval</a></td></tr>
246
+ <tr data-s="deepseek-v4-pro professional-research 2026-07-25 gpt-5.4 full cache replay"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-25</td><td class="n">1</td><td class="n">147</td><td class="j">gpt-5.4</td><td class="n">63.0</td><td class="n">51.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-research__deepseek-v4-pro__2026-07-25-replay.eval" download>.eval</a></td></tr>
247
+ <tr data-s="plamo-3.0-prime professional-research 2026-07-24 gpt-5.4 full cache replay"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1176</td><td class="j">gpt-5.4</td><td class="n">41.8</td><td class="n">28.6</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-research__plamo-3.0-prime__2026-07-24-replay.eval" download>.eval</a></td></tr>
248
+ <tr data-s="medgemma-27b professional-research 2026-07-24 gpt-5.4 mostly cached"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1176</td><td class="j">gpt-5.4</td><td class="n">47.8</td><td class="n">34.4</td><td><span class="tag t-warn">cached</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-research__medgemma-27b__2026-07-24-cached.eval" download>.eval</a></td></tr>
249
+ </tbody></table>
250
+ <h3 id="professional-redteam">Professional: red-teaming <span class="cnt">6 logs</span></h3>
251
+ <p class="blurb">191 samples</p>
252
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
253
+ <tr data-s="gpt-5.5 professional-redteam 2026-07-24 gpt-5.4 full cache replay"><td class="m">gpt-5.5</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1528</td><td class="j">gpt-5.4</td><td class="n">29.9</td><td class="n">28.2</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-redteam__gpt-5.5__2026-07-24-replay.eval" download>.eval</a></td></tr>
254
+ <tr data-s="opus-4.7 professional-redteam 2026-07-24 gpt-5.4 full cache replay"><td class="m">opus-4.7</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1528</td><td class="j">gpt-5.4</td><td class="n">28.3</td><td class="n">26.7</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-redteam__opus-4.7__2026-07-24-replay.eval" download>.eval</a></td></tr>
255
+ <tr data-s="deepseek-v4-pro professional-redteam 2026-07-24 gpt-5.4 fresh"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1528</td><td class="j">gpt-5.4</td><td class="n">-3.7</td><td class="n">-6.9</td><td><span class="tag t-ok">fresh</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-redteam__deepseek-v4-pro__2026-07-24.eval" download>.eval</a></td></tr>
256
+ <tr data-s="deepseek-v4-pro professional-redteam 2026-07-25 gpt-5.4 full cache replay"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-25</td><td class="n">1</td><td class="n">191</td><td class="j">gpt-5.4</td><td class="n">-5.3</td><td class="n">-8.3</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-redteam__deepseek-v4-pro__2026-07-25-replay.eval" download>.eval</a></td></tr>
257
+ <tr data-s="plamo-3.0-prime professional-redteam 2026-07-24 gpt-5.4 full cache replay"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1528</td><td class="j">gpt-5.4</td><td class="n">-9.9</td><td class="n">-11.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-redteam__plamo-3.0-prime__2026-07-24-replay.eval" download>.eval</a></td></tr>
258
+ <tr data-s="medgemma-27b professional-redteam 2026-07-24 gpt-5.4 full cache replay"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">1528</td><td class="j">gpt-5.4</td><td class="n">1.5</td><td class="n">-6.8</td><td><span class="tag t-warn">replay</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-redteam__medgemma-27b__2026-07-24-replay.eval" download>.eval</a></td></tr>
259
+ </tbody></table>
260
+ <h3 id="professional-baseline">Professional: physician baseline <span class="cnt">6 logs</span></h3>
261
+ <p class="blurb">the human reference, model-independent</p>
262
+ <table class="logs"><thead><tr><th>Model</th><th>Date</th><th class="n">ep</th><th class="n">n</th><th>Judge</th><th class="n">raw</th><th class="n">adj</th><th>Provenance</th><th>File</th></tr></thead><tbody>
263
+ <tr data-s="gpt-5.5 professional-baseline 2026-07-24 gpt-5.4 baseline(no model gen by design)"><td class="m">gpt-5.5</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">44.3</td><td class="n">43.9</td><td><span class="tag t-neutral">baseline</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-baseline__gpt-5.5__2026-07-24.eval" download>.eval</a></td></tr>
264
+ <tr data-s="opus-4.7 professional-baseline 2026-07-24 gpt-5.4 baseline(no model gen by design)"><td class="m">opus-4.7</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">44.3</td><td class="n">43.9</td><td><span class="tag t-neutral">baseline</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-baseline__opus-4.7__2026-07-24.eval" download>.eval</a></td></tr>
265
+ <tr data-s="deepseek-v4-pro professional-baseline 2026-07-24 gpt-5.4 baseline(no model gen by design)"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">44.3</td><td class="n">43.9</td><td><span class="tag t-neutral">baseline</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-baseline__deepseek-v4-pro__2026-07-24.eval" download>.eval</a></td></tr>
266
+ <tr data-s="deepseek-v4-pro professional-baseline 2026-07-25 gpt-5.4 baseline(no model gen by design)"><td class="m">deepseek-v4-pro</td><td class="d">2026-07-25</td><td class="n">1</td><td class="n">525</td><td class="j">gpt-5.4</td><td class="n">43.3</td><td class="n">42.9</td><td><span class="tag t-neutral">baseline</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-baseline__deepseek-v4-pro__2026-07-25.eval" download>.eval</a></td></tr>
267
+ <tr data-s="plamo-3.0-prime professional-baseline 2026-07-24 gpt-5.4 baseline(no model gen by design)"><td class="m">plamo-3.0-prime</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">44.3</td><td class="n">43.9</td><td><span class="tag t-neutral">baseline</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-baseline__plamo-3.0-prime__2026-07-24.eval" download>.eval</a></td></tr>
268
+ <tr data-s="medgemma-27b professional-baseline 2026-07-24 gpt-5.4 baseline(no model gen by design)"><td class="m">medgemma-27b</td><td class="d">2026-07-24</td><td class="n">8</td><td class="n">4200</td><td class="j">gpt-5.4</td><td class="n">43.9</td><td class="n">43.5</td><td><span class="tag t-neutral">baseline</span></td><td class="f"><a href="https://huggingface.co/datasets/kirby44/healthbench-eval-logs/resolve/main/logs/professional-baseline__medgemma-27b__2026-07-24.eval" download>.eval</a></td></tr>
269
+ </tbody></table>
270
+
271
+ <p class="legend">
272
+ <span class="tag t-ok">fresh</span> model responses generated in this run &nbsp;
273
+ <span class="tag t-warn">replay</span> every call served from cache &nbsp;
274
+ <span class="tag t-warn">cached</span> under 200 candidate tokens per sample &nbsp;
275
+ <span class="tag t-neutral">baseline</span> human responses, no generation by design &nbsp;
276
+ <span class="tag t-bad">failed</span> errored or cancelled<br>
277
+ <span class="inf">?</span> judge not recorded in <code>task_args</code>, inferred from the
278
+ scorer default and confirmed against <code>stats.model_usage</code>
279
+ </p>
280
+
281
+ <h2 id="reports">Analysis</h2>
282
+
283
+ <table class="plain">
284
+ <thead><tr><th>Document</th><th>What it answers</th></tr></thead>
285
+ <tbody>
286
+ <tr>
287
+ <td><a href="matrix.html">Coverage matrix</a></td>
288
+ <td>Which model ran which bench, which cells are comparable, and what is still missing.</td>
289
+ </tr>
290
+ <tr>
291
+ <td><a href="config-check-v2.html">Config check v2</a></td>
292
+ <td>Do our numbers reproduce OpenAI's published HealthBench results? Anchored on the
293
+ physician baseline (ours 43.9 against their 43.7).</td>
294
+ </tr>
295
+ <tr>
296
+ <td><a href="config-check-v1.html">Config check v1</a></td>
297
+ <td>The earlier pass over the first four spaces. Superseded by v2, kept for history.</td>
298
+ </tr>
299
+ </tbody>
300
+ </table>
301
+
302
+ <h2 id="trust">Before you quote a number</h2>
303
+
304
+ <p>Four things will bite you if you take a score straight out of a log.</p>
305
+
306
+ <table class="plain">
307
+ <thead><tr><th>Issue</th><th>What to do</th></tr></thead>
308
+ <tbody>
309
+ <tr>
310
+ <td><b>The judge is not constant.</b> Three graders are in play: <code>gpt-4o-mini</code>
311
+ (hard, consensus), <code>gpt-4.1</code> (full, and the Aug-05 MedGemma re-runs),
312
+ <code>gpt-5.4</code> (all Professional). Swapping the judge moves a score by up to 14
313
+ points, and not always in the same direction.</td>
314
+ <td>Only compare runs sharing a judge. The <code>Judge</code> column above is the check.</td>
315
+ </tr>
316
+ <tr>
317
+ <td><b>Professional epochs are inconsistent.</b> 8 epochs for most models, 1 for DeepSeek.</td>
318
+ <td>Check the <code>ep</code> column before putting two Professional rows side by side.</td>
319
+ </tr>
320
+ <tr>
321
+ <td><b>In-log subset metrics are wrong.</b> <code>use_case_*_score</code>,
322
+ <code>specialty_*_score</code>, <code>difficulty_*_score</code> and
323
+ <code>source_slice_*_score</code> drop the length adjustment and clip each sample to
324
+ [0,1] first. Errors run up to +32 points, always upward.</td>
325
+ <td>Use the standalone <code>professional-*</code> logs above for the four use-case
326
+ slices. For specialty and difficulty, re-aggregate from per-sample scores yourself.</td>
327
+ </tr>
328
+ <tr>
329
+ <td><b><code>cache=true</code> on every run.</b> 34 of 68 logs served some
330
+ or all calls from cache, so an empty <code>stats.model_usage</code> is a replay, not a run.</td>
331
+ <td>The <code>Provenance</code> column above already classifies this.</td>
332
+ </tr>
333
+ </tbody>
334
+ </table>
335
+
336
+ <div class="callout">
337
+ <span class="ico">&#9733;</span>
338
+ <div>
339
+ <p>The pipeline itself is validated: the physician baseline on Professional lands at
340
+ <b>43.9</b> against OpenAI's published <b>43.7</b>. Discrepancies in the model numbers are
341
+ config drift, not a broken harness.</p>
342
+ </div>
343
+ </div>
344
+
345
+ <h2 id="how">How this was assembled</h2>
346
+
347
+ <p>The runs were executed by Ajay between 2026-07-09 and 2026-08-06 and originally published as
348
+ ten separate HuggingFace Spaces under <code>ajay-citadel</code>. This Space consolidates all of
349
+ them into one viewer, renames the logs so the config is legible from the filename, and adds the
350
+ provenance classification that the raw logs do not carry.</p>
351
+
352
+ <p><code>data/log_mapping.csv</code> maps every renamed file back to its original space and
353
+ filename, so nothing here is a dead end. <code>data/MANIFEST.csv</code> is the full per-run
354
+ header dump: judge, epochs, token counts, package versions.
355
+ <code>data/INDEX.md</code> is the short version of the traps list.</p>
356
+
357
+ <p>The original spaces remain the upstream source. If a number here disagrees with one there,
358
+ the logs are byte-identical, so the difference is in which run you are reading, not in the data.</p>
359
+ </main>
360
+ </div>
361
+ <script>
362
+ const f=document.getElementById('filter'),rows=[...document.querySelectorAll('table.logs tbody tr')],
363
+ cnt=document.getElementById('fcount');
364
+ f.addEventListener('input',()=>{
365
+ const q=f.value.trim().toLowerCase().split(/\s+/).filter(Boolean);
366
+ let shown=0;
367
+ rows.forEach(r=>{const s=r.dataset.s,hit=q.every(t=>s.includes(t));r.style.display=hit?'':'none';if(hit)shown++;});
368
+ document.querySelectorAll('table.logs').forEach(t=>{
369
+ const any=[...t.querySelectorAll('tbody tr')].some(r=>r.style.display!=='none');
370
+ const h3=t.previousElementSibling.previousElementSibling;
371
+ t.style.display=any?'':'none';
372
+ if(h3&&h3.tagName==='H3'){h3.style.display=any?'':'none';t.previousElementSibling.style.display=any?'':'none';}
373
+ });
374
+ cnt.textContent=q.length?shown+' of '+rows.length+' logs match':rows.length+' logs';
375
+ });
376
+ </script>
377
+ </body>
378
  </html>
matrix.html ADDED
@@ -0,0 +1,583 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <link rel="icon" href="favicon.svg">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>HealthBench coverage: which model ran which bench</title>
8
+ <style>
9
+ :root {
10
+ --ivory: #FAF9F5;
11
+ --slate: #141413;
12
+ --clay: #D97757;
13
+ --oat: #E3DACC;
14
+ --olive: #788C5D;
15
+ --gray-150:#F0EEE6;
16
+ --gray-300:#D1CFC5;
17
+ --gray-500:#87867F;
18
+ --gray-700:#3D3D3A;
19
+ --serif: ui-serif, Georgia, "Times New Roman", serif;
20
+ --sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
21
+ --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
22
+ }
23
+ * { box-sizing: border-box; margin: 0; padding: 0; }
24
+ html { scroll-behavior: smooth; }
25
+ body {
26
+ background: var(--ivory);
27
+ color: var(--gray-700);
28
+ font-family: var(--sans);
29
+ font-size: 15px;
30
+ line-height: 1.65;
31
+ -webkit-font-smoothing: antialiased;
32
+ padding: 56px 24px 120px;
33
+ }
34
+ .page { max-width: 1160px; margin: 0 auto; display: grid; grid-template-columns: 200px minmax(0, 1fr); gap: 48px; }
35
+ @media (max-width: 920px) { .page { grid-template-columns: 1fr; } nav { display: none; } }
36
+
37
+ nav { position: sticky; top: 32px; align-self: start; font-size: 13px; }
38
+ nav .label { font-family: var(--mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gray-500); margin-bottom: 12px; }
39
+ nav a { display: block; padding: 5px 0 5px 12px; border-left: 2px solid var(--gray-300); color: var(--gray-700); text-decoration: none; }
40
+ nav a:hover { color: var(--slate); border-color: var(--slate); }
41
+ nav a.l2 { padding-left: 24px; font-size: 12.5px; color: var(--gray-500); }
42
+ nav .files { margin-top: 28px; border-top: 1px solid var(--gray-300); padding-top: 16px; }
43
+ nav .files a { text-decoration: none; }
44
+ nav .files code { display: block; font-family: var(--mono); font-size: 11px; color: var(--gray-500); padding: 3px 0; }
45
+
46
+ header { margin-bottom: 12px; }
47
+ .eyebrow { font-family: var(--mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--gray-500); margin-bottom: 10px; }
48
+ h1 { font-family: var(--serif); font-weight: 500; font-size: 32px; color: var(--slate); letter-spacing: -0.01em; margin-bottom: 14px; }
49
+ .dateline { font-family: var(--mono); font-size: 11px; letter-spacing: 0.04em; color: var(--gray-500); margin-top: -4px; }
50
+
51
+ h2 { font-family: var(--serif); font-weight: 500; font-size: 22px; color: var(--slate); margin: 40px 0 14px; scroll-margin-top: 24px; }
52
+ h3 { font-family: var(--serif); font-weight: 500; font-size: 17px; color: var(--slate); margin: 22px 0 8px; }
53
+ p { margin-bottom: 12px; max-width: 680px; }
54
+ ul, ol { margin: 0 0 12px 22px; max-width: 680px; }
55
+ li { margin-bottom: 6px; }
56
+ code { font-family: var(--mono); font-size: 13px; }
57
+ a { color: var(--slate); text-decoration: underline; text-decoration-color: var(--gray-300); }
58
+ a:hover { text-decoration-color: var(--clay); }
59
+
60
+ details { border: 1.5px solid var(--gray-300); border-radius: 10px; background: #fff; margin: 14px 0; overflow: hidden; }
61
+ summary { list-style: none; cursor: pointer; padding: 14px 16px; font-family: var(--serif); font-size: 16px; color: var(--slate); display: flex; align-items: baseline; gap: 10px; }
62
+ summary::-webkit-details-marker { display: none; }
63
+ summary::before { content: "\25B8"; color: var(--clay); font-family: var(--sans); font-size: 12px; transition: transform 120ms; }
64
+ details[open] summary::before { transform: rotate(90deg); }
65
+ summary .where { font-family: var(--mono); font-size: 11px; color: var(--gray-500); margin-left: auto; }
66
+ details .body { padding: 0 16px 16px; }
67
+ details .body p { font-size: 14px; }
68
+ details .body pre { background: var(--gray-150); padding: 12px 14px; border-radius: 6px; font-family: var(--mono); font-size: 12px; line-height: 1.55; overflow-x: auto; margin-top: 8px; }
69
+
70
+ .callout { display: flex; gap: 12px; border: 1.5px solid var(--oat); background: rgba(227,218,204,0.35); border-radius: 10px; padding: 14px 16px; margin: 18px 0; font-size: 14px; max-width: 760px; }
71
+ .callout .ico { color: var(--clay); font-weight: 600; }
72
+ .callout p { margin-bottom: 6px; }
73
+ .callout p:last-child { margin-bottom: 0; }
74
+
75
+ table { border-collapse: collapse; width: 100%; max-width: 760px; margin: 14px 0; font-size: 14px; }
76
+ th, td { padding: 8px 12px; border-bottom: 1px solid var(--gray-300); text-align: left; vertical-align: top; }
77
+ th { font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--gray-500); font-weight: 600; border-bottom: 1.5px solid var(--gray-300); }
78
+ td.num { text-align: right; font-variant-numeric: tabular-nums; }
79
+
80
+ /* the coverage matrix */
81
+ .mwrap { overflow-x: auto; margin: 16px 0 6px; border: 1.5px solid var(--gray-300); border-radius: 10px; background: #fff; }
82
+ table.matrix { max-width: none; width: 100%; margin: 0; font-size: 13px; }
83
+ table.matrix th, table.matrix td { border-bottom: 1px solid var(--gray-300); padding: 6px 7px; }
84
+ table.matrix thead th { background: var(--gray-150); text-align: right; font-size: 10px; letter-spacing: 0.02em; white-space: nowrap; }
85
+ table.matrix thead th.rowhead { text-align: left; }
86
+ table.matrix thead th .jd { display: block; font-family: var(--mono); font-size: 9px; letter-spacing: 0; text-transform: none; color: var(--gray-500); font-weight: 400; }
87
+ table.matrix tbody th { font-family: var(--sans); font-size: 12.5px; font-weight: 500; color: var(--slate); text-transform: none; letter-spacing: 0; white-space: nowrap; }
88
+ table.matrix td { text-align: right; font-family: var(--mono); font-variant-numeric: tabular-nums; font-size: 12px; white-space: nowrap; }
89
+ table.matrix tbody tr:last-child th, table.matrix tbody tr:last-child td { border-bottom: none; }
90
+ td.st-ok { background: rgba(120,140,93,0.11); color: var(--slate); }
91
+ td.st-off { background: rgba(217,119,87,0.13); color: var(--slate); }
92
+ td.st-gap { background: repeating-linear-gradient(135deg, transparent, transparent 4px, rgba(135,134,127,0.14) 4px, rgba(135,134,127,0.14) 5px); color: var(--gray-500); text-align: center; }
93
+ td .mk { color: var(--clay); font-size: 10px; vertical-align: super; }
94
+ td .mkc { color: var(--gray-500); font-size: 10px; vertical-align: super; }
95
+ tr.baseline th, tr.baseline td { background: var(--gray-150); color: var(--gray-500); font-style: normal; }
96
+ .mlegend { font-family: var(--mono); font-size: 11px; color: var(--gray-500); margin: 0 0 4px; max-width: none; line-height: 1.9; }
97
+ .sw { display: inline-block; width: 10px; height: 10px; border-radius: 2px; vertical-align: -1px; margin-right: 4px; }
98
+ .sw-ok { background: rgba(120,140,93,0.5); }
99
+ .sw-off { background: rgba(217,119,87,0.55); }
100
+ .sw-gap { background: repeating-linear-gradient(135deg, transparent, transparent 3px, rgba(135,134,127,0.5) 3px, rgba(135,134,127,0.5) 4px); border: 1px solid var(--gray-300); }
101
+
102
+ .ok { color: var(--olive); font-weight: 600; }
103
+ .warn { color: var(--clay); font-weight: 600; }
104
+ .bad { color: #B0533A; font-weight: 600; }
105
+
106
+ .ladder { display: grid; grid-template-columns: repeat(8, 1fr); gap: 6px; margin: 14px 0 4px; max-width: 760px; }
107
+ .ladder .chip { border: 1px solid var(--gray-300); border-radius: 6px; background: #fff; padding: 8px 0; text-align: center; font-family: var(--mono); font-size: 10.5px; color: var(--gray-500); }
108
+ .ladder .chip.hit { border-color: var(--olive); color: var(--slate); background: rgba(120,140,93,0.10); font-weight: 600; }
109
+ .ladder-legend { font-family: var(--mono); font-size: 11px; color: var(--gray-500); margin-top: 2px; }
110
+ @media (max-width: 720px) { .ladder { grid-template-columns: repeat(4, 1fr); } }
111
+
112
+ dl.faq { margin-top: 8px; }
113
+ dl.faq dt { font-family: var(--serif); font-size: 16px; color: var(--slate); margin-top: 18px; }
114
+ dl.faq dd { font-size: 14px; margin: 4px 0 0; max-width: 640px; }
115
+ </style>
116
+
117
+ <style id="hbnav-css">
118
+ .hbnav{position:sticky;top:0;z-index:50;display:flex;flex-wrap:wrap;align-items:center;gap:4px;
119
+ padding:8px 16px;margin:-56px -24px 40px;background:rgba(250,249,245,.94);
120
+ backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid #D1CFC5;
121
+ font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-size:11.5px}
122
+ .hbnav .home{color:#87867F;margin-right:6px;text-decoration:none}
123
+ .hbnav .home:hover{color:#141413}
124
+ .hbnav a.pill{color:#3D3D3A;text-decoration:none;padding:3px 9px;border:1px solid #D1CFC5;border-radius:6px}
125
+ .hbnav a.pill:hover{border-color:#D97757;color:#141413}
126
+ .hbnav a.pill.here{background:#141413;border-color:#141413;color:#FAF9F5}
127
+ .hbnav .sp{flex:1}
128
+ @media(max-width:640px){.hbnav{margin:-56px -24px 28px}}
129
+ </style>
130
+ </head>
131
+ <body>
132
+ <div class="hbnav"><a class="home" href="index.html">&#8592; HealthBench logs</a><a class="pill here" href="matrix.html">Coverage matrix</a><a class="pill" href="config-check-v2.html">Config check v2</a><a class="pill" href="config-check-v1.html">Config check v1</a><span class="sp"></span><a class="pill" href="viewer/index.html">Log viewer &rarr;</a></div>
133
+ <div class="page">
134
+
135
+ <nav>
136
+ <div class="label">On this page</div>
137
+ <a href="#picture">The coverage picture</a>
138
+ <a href="#matrix">Model &times; bench matrix</a>
139
+ <a href="#matrix" class="l2">Reading the cells</a>
140
+ <a href="#complete">What is already complete</a>
141
+ <a href="#todo">What to run next</a>
142
+ <a href="#todo" class="l2">5 required runs</a>
143
+ <a href="#todo" class="l2">The gpt-4.1 decision</a>
144
+ <a href="#axes">Slices with no clean data</a>
145
+ <a href="#why">Why cells disagree</a>
146
+ <a href="#noise">How big is a real gap</a>
147
+ <a href="#files">Where everything lives</a>
148
+ <a href="#faq">Questions</a>
149
+ <div class="files">
150
+ <div class="label">Run artifacts</div>
151
+ <a href="data/MANIFEST.csv"><code>data/MANIFEST.csv</code></a>
152
+ <a href="data/log_mapping.csv"><code>data/log_mapping.csv</code></a>
153
+ <a href="data/INDEX.md"><code>data/INDEX.md</code></a>
154
+ <a href="data/headers_raw.json"><code>data/headers_raw.json</code></a>
155
+ <a href="viewer/index.html"><code>viewer/logs/*.eval</code></a>
156
+ </div>
157
+ </nav>
158
+
159
+ <main>
160
+ <header>
161
+ <div class="eyebrow">HealthBench &middot; model coverage audit</div>
162
+ <h1>Which model ran which bench, and what is still missing</h1>
163
+ <div class="dateline">Created 2026-08-07</div>
164
+ </header>
165
+
166
+ <h2 id="picture">The coverage picture</h2>
167
+
168
+ <p><b>Nominally the matrix is nearly full: 45 of 48 model &times; bench cells have a run.
169
+ Usably, only 3 of the 8 benches have a complete, apples-to-apples set of all 6 models.</b>
170
+ The blockers are not missing runs, they are config drift: the grader model changes between
171
+ benches, and <code>epochs</code> changes between models on the same bench.</p>
172
+
173
+ <p>Six models were evaluated: GPT-5.5, Claude Opus 4.7, DeepSeek-V4-Pro, PLaMo-3.0-Prime,
174
+ MedGemma-27B-text-it and MedGemma-4B-it. Eight benches: HealthBench full, consensus and hard,
175
+ plus HealthBench Professional whole-set and its four use-case slices (consult, writing,
176
+ research, red-teaming). 68 logs across 10 HuggingFace spaces.</p>
177
+
178
+ <p>The good news for a comprehensive story: only <b>5 runs</b> are strictly required to close
179
+ every real gap, and 3 of those 5 are grader-only passes that reuse cached model responses, so
180
+ they are cheap. One further decision (what to do about a half-finished
181
+ <code>gpt-4.1</code> re-grade) is worth 8 more runs or a deletion, your call.</p>
182
+
183
+ <h2 id="matrix">Model &times; bench matrix</h2>
184
+
185
+ <p>Scores are the <b>length-adjusted</b> HealthBench score &times; 100, which is the headline
186
+ metric OpenAI reports. The last four columns are the Professional use-case slices. Each column
187
+ header carries its judge model (<code>4.1</code> = <code>openai/gpt-4.1</code>,
188
+ <code>4o-mini</code> = <code>openai/gpt-4o-mini</code>, <code>5.4</code> =
189
+ <code>openai/gpt-5.4</code>) and sample count: columns are internally consistent but
190
+ <b>not comparable to each other</b>.</p>
191
+
192
+ <div class="mwrap">
193
+ <table class="matrix">
194
+ <thead>
195
+ <tr>
196
+ <th class="rowhead">Model</th>
197
+ <th>full<span class="jd">4.1 &middot; 5000</span></th>
198
+ <th>consens.<span class="jd">4o-mini &middot; 3671</span></th>
199
+ <th>hard<span class="jd">4o-mini &middot; 1000</span></th>
200
+ <th>prof<span class="jd">5.4 &middot; 525</span></th>
201
+ <th>consult<span class="jd">5.4 &middot; 236</span></th>
202
+ <th>writing<span class="jd">5.4 &middot; 142</span></th>
203
+ <th>research<span class="jd">5.4 &middot; 147</span></th>
204
+ <th>red&#8209;team<span class="jd">5.4 &middot; 191</span></th>
205
+ </tr>
206
+ </thead>
207
+ <tbody>
208
+ <tr>
209
+ <th>GPT-5.5</th>
210
+ <td class="st-ok">55.8<span class="mkc">c</span></td>
211
+ <td class="st-ok">82.0<span class="mkc">c</span></td>
212
+ <td class="st-ok">26.0<span class="mkc">c</span></td>
213
+ <td class="st-ok">47.8</td>
214
+ <td class="st-ok">48.6<span class="mkc">c</span></td>
215
+ <td class="st-ok">36.0<span class="mkc">c</span></td>
216
+ <td class="st-ok">57.9<span class="mkc">c</span></td>
217
+ <td class="st-ok">28.2<span class="mkc">c</span></td>
218
+ </tr>
219
+ <tr>
220
+ <th>Opus 4.7</th>
221
+ <td class="st-ok">54.3<span class="mkc">c</span></td>
222
+ <td class="st-ok">80.2<span class="mkc">c</span></td>
223
+ <td class="st-ok">27.8<span class="mkc">c</span></td>
224
+ <td class="st-ok">48.0</td>
225
+ <td class="st-ok">47.0<span class="mkc">c</span></td>
226
+ <td class="st-ok">36.2<span class="mkc">c</span></td>
227
+ <td class="st-ok">61.1<span class="mkc">c</span></td>
228
+ <td class="st-ok">26.7<span class="mkc">c</span></td>
229
+ </tr>
230
+ <tr>
231
+ <th>DeepSeek-V4-Pro</th>
232
+ <td class="st-ok">41.7</td>
233
+ <td class="st-ok">78.5<span class="mkc">c</span></td>
234
+ <td class="st-ok">13.8<span class="mkc">c</span></td>
235
+ <td class="st-off">31.0<span class="mk">&#42;</span></td>
236
+ <td class="st-off">25.6<span class="mk">&#42;</span><span class="mkc">c</span></td>
237
+ <td class="st-ok">5.0</td>
238
+ <td class="st-ok">52.9</td>
239
+ <td class="st-ok">&minus;6.9</td>
240
+ </tr>
241
+ <tr>
242
+ <th>PLaMo 3.0 Prime</th>
243
+ <td class="st-ok">32.4</td>
244
+ <td class="st-ok">74.8<span class="mkc">c</span></td>
245
+ <td class="st-ok">9.6<span class="mkc">c</span></td>
246
+ <td class="st-ok">13.7</td>
247
+ <td class="st-ok">15.4<span class="mkc">c</span></td>
248
+ <td class="st-ok">&minus;4.3<span class="mkc">c</span></td>
249
+ <td class="st-ok">28.6<span class="mkc">c</span></td>
250
+ <td class="st-ok">&minus;11.8<span class="mkc">c</span></td>
251
+ </tr>
252
+ <tr>
253
+ <th>MedGemma 27B</th>
254
+ <td class="st-ok">33.2</td>
255
+ <td class="st-ok">76.6</td>
256
+ <td class="st-ok">4.8<span class="mkc">p</span></td>
257
+ <td class="st-ok">20.0</td>
258
+ <td class="st-ok">17.8<span class="mkc">p</span></td>
259
+ <td class="st-ok">9.1<span class="mkc">p</span></td>
260
+ <td class="st-ok">34.4<span class="mkc">p</span></td>
261
+ <td class="st-ok">&minus;6.8<span class="mkc">c</span></td>
262
+ </tr>
263
+ <tr>
264
+ <th>MedGemma 4B</th>
265
+ <td class="st-ok">18.3<span class="mkc">p</span></td>
266
+ <td class="st-ok">70.8</td>
267
+ <td class="st-ok">1.3</td>
268
+ <td class="st-ok">9.0</td>
269
+ <td class="st-ok">8.2<span class="mkc">p</span></td>
270
+ <td class="st-gap">GAP</td>
271
+ <td class="st-gap">GAP</td>
272
+ <td class="st-gap">GAP</td>
273
+ </tr>
274
+ <tr class="baseline">
275
+ <th>physician baseline</th>
276
+ <td class="st-gap">&mdash;</td>
277
+ <td class="st-gap">&mdash;</td>
278
+ <td class="st-gap">&mdash;</td>
279
+ <td>43.9</td>
280
+ <td class="st-gap">&mdash;</td>
281
+ <td class="st-gap">&mdash;</td>
282
+ <td class="st-gap">&mdash;</td>
283
+ <td class="st-gap">&mdash;</td>
284
+ </tr>
285
+ </tbody>
286
+ </table>
287
+ </div>
288
+ <p class="mlegend">
289
+ <span class="sw sw-ok"></span>in the comparable set for that column &nbsp;
290
+ <span class="sw sw-off"></span>present but off-config &nbsp;
291
+ <span class="sw sw-gap"></span>no run exists<br>
292
+ <span class="mk">&#42;</span> ran at <code>epochs=1</code> where the rest of the column ran <code>epochs=8</code>
293
+ &nbsp;&middot;&nbsp; <span class="mkc">c</span> score comes from a full cache replay (no model generation)
294
+ &nbsp;&middot;&nbsp; <span class="mkc">p</span> mostly cached (&lt;200 candidate tokens per sample)
295
+ </p>
296
+
297
+ <h3>Reading the cells</h3>
298
+
299
+ <p>The <code>c</code> and <code>p</code> markers matter less than they look. Caching a model's
300
+ <em>response</em> and re-grading it is legitimate reuse: the response does not depend on the
301
+ judge. What the markers tell you is that the number cannot be independently reproduced from
302
+ the published log alone, because the generation happened in some earlier run. 27 of 68 logs
303
+ are full replays; only 23 generated fresh candidate responses.</p>
304
+
305
+ <p>The <span class="warn">&#42;</span> marker is the one that breaks a table. DeepSeek's
306
+ Professional runs used <code>epochs=1</code> (525 samples) while every other model used
307
+ <code>epochs=8</code> (4200 samples). More epochs shrinks per-sample judge noise, so DeepSeek's
308
+ 31.0 carries visibly more error than GPT-5.5's 47.8 next to it.</p>
309
+
310
+ <h2 id="complete">What is already complete</h2>
311
+
312
+ <p>Three benches have all six models under one judge and one epoch setting. These you can
313
+ publish today without caveats beyond the usual judge disclosure.</p>
314
+
315
+ <div class="ladder">
316
+ <div class="chip hit">full 6/6</div>
317
+ <div class="chip hit">consensus 6/6</div>
318
+ <div class="chip hit">hard 6/6</div>
319
+ <div class="chip">prof 5/6</div>
320
+ <div class="chip">consult 5/6</div>
321
+ <div class="chip">writing 5/6</div>
322
+ <div class="chip">research 5/6</div>
323
+ <div class="chip">red-team 5/6</div>
324
+ </div>
325
+ <div class="ladder-legend">olive = complete 6-model comparable set &middot; outline = incomplete</div>
326
+
327
+ <p>Model rankings are stable across every bench, which is the reassuring part: GPT-5.5 and
328
+ Opus 4.7 lead and are within noise of each other, DeepSeek is third, then MedGemma-27B and
329
+ PLaMo trade places depending on the bench, and MedGemma-4B is last everywhere. Whatever you
330
+ fix in the gaps below is very unlikely to reorder the leaderboard.</p>
331
+
332
+ <div class="callout">
333
+ <span class="ico">&#9733;</span>
334
+ <div>
335
+ <p>The harness itself is validated. The physician baseline on Professional comes out at
336
+ <b>43.9</b> against OpenAI's published <b>43.7</b>. That is the anchor that says the
337
+ scoring pipeline is correct, so the gaps below are coverage problems, not correctness
338
+ problems.</p>
339
+ </div>
340
+ </div>
341
+
342
+ <h2 id="todo">What to run next</h2>
343
+
344
+ <h3>5 required runs</h3>
345
+
346
+ <p>These five close every genuine hole in the matrix. Ordered by how much they buy you.</p>
347
+
348
+ <details open>
349
+ <summary>1 &middot; DeepSeek-V4-Pro, Professional whole-set at <code>epochs=8</code> <span class="where">fixes the &#42; on prof</span></summary>
350
+ <div class="body">
351
+ <p>The only run here that needs fresh generation, so it is the expensive one:
352
+ roughly 1.3M candidate tokens &times; 8 epochs plus about 22M judge tokens, by analogy with
353
+ the other <code>epochs=8</code> Professional runs. Everything else in the column already
354
+ ran at 8 epochs, so this single run makes the Professional table uniform.</p>
355
+ <pre>inspect eval healthbench_professional.py \
356
+ --model openrouter/deepseek/deepseek-v4-pro \
357
+ --epochs 8 \
358
+ -T judge_model=openai/gpt-5.4 -T judge_reasoning_effort=low</pre>
359
+ </div>
360
+ </details>
361
+
362
+ <details>
363
+ <summary>2 &middot; DeepSeek-V4-Pro, <code>consult</code> slice at <code>epochs=8</code> <span class="where">fixes the &#42; on consult</span></summary>
364
+ <div class="body">
365
+ <p>Once run 1 is in the cache, this is a grader-only pass over the same responses. It is the
366
+ one slice DeepSeek never got at 8 epochs (writing, research and red-teaming already exist).</p>
367
+ </div>
368
+ </details>
369
+
370
+ <details>
371
+ <summary>3&ndash;5 &middot; MedGemma-4B, the three missing Professional slices <span class="where">writing, research, red-teaming</span></summary>
372
+ <div class="body">
373
+ <p>MedGemma-4B has <code>consult</code> but not the other three. Its <code>epochs=8</code>
374
+ whole-set Professional responses are already cached from the <code>hs-original</code> run on
375
+ 2026-07-25, so all three are grader-only passes. Cheapest wins in the list.</p>
376
+ <pre>for uc in writing research red_teaming; do
377
+ inspect eval healthbench_professional.py@healthbench_professional_$uc \
378
+ --model vllm/google/medgemma-4b-it --epochs 8 \
379
+ -T judge_model=openai/gpt-5.4 -T judge_reasoning_effort=low
380
+ done</pre>
381
+ </div>
382
+ </details>
383
+
384
+ <h3>The gpt-4.1 decision</h3>
385
+
386
+ <p>On 2026-08-05 the two MedGemma models were re-run on <code>hard</code> and
387
+ <code>consensus</code> with the judge switched from <code>gpt-4o-mini</code> to
388
+ <code>gpt-4.1</code>. Nothing else was re-run. That leaves a half-populated second column on
389
+ both benches: 2 of 6 models have a gpt-4.1 number, 6 of 6 have a gpt-4o-mini number.</p>
390
+
391
+ <p>Two clean options, and you should pick one explicitly rather than let both sit in the folder:</p>
392
+
393
+ <table>
394
+ <thead><tr><th>Option</th><th>Cost</th><th>Result</th></tr></thead>
395
+ <tbody>
396
+ <tr>
397
+ <td><b>Drop the Aug-05 runs</b> from the reported set, keep gpt-4o-mini for hard and consensus.</td>
398
+ <td>free</td>
399
+ <td>Consistent today. But <code>full</code> stays on gpt-4.1 while hard and consensus stay on gpt-4o-mini, so the three non-professional benches still use two judges.</td>
400
+ </tr>
401
+ <tr>
402
+ <td><b>Finish the gpt-4.1 column</b>: re-grade GPT-5.5, Opus 4.7, DeepSeek and PLaMo on hard and consensus.</td>
403
+ <td>8 grader-only runs, roughly 140M judge tokens</td>
404
+ <td>All three non-professional benches on gpt-4.1, matching <code>full</code>. This is the version worth publishing if the audience compares across benches.</td>
405
+ </tr>
406
+ </tbody>
407
+ </table>
408
+
409
+ <p>The candidate responses for all 8 of those are already cached from July, so option 2 needs no
410
+ model generation at all, only judge spend.</p>
411
+
412
+ <h2 id="axes">Slices with no clean data at all</h2>
413
+
414
+ <p>Beyond the four use-case slices, HealthBench Professional carries three more breakdown axes:
415
+ <b>difficulty</b> (2 levels), <b>source slice</b> (3), and <b>specialty</b> (36). None of these
416
+ has a usable number for any model, because they exist only as in-log metrics and those metrics
417
+ are computed wrongly.</p>
418
+
419
+ <p>The in-log subset metrics (<code>use_case_*_score</code>, <code>type_*_score</code>,
420
+ <code>difficulty_*_score</code>, <code>source_slice_*_score</code>, <code>specialty_*_score</code>)
421
+ discard the length adjustment and clip each sample to [0, 1] before averaging. Comparing them
422
+ against the standalone slice runs in <code>hs-prof-subsets</code> shows how far off that is:</p>
423
+
424
+ <table>
425
+ <thead>
426
+ <tr><th>Model &middot; slice</th><th class="num">in-log metric</th><th class="num">standalone run</th><th class="num">error</th></tr>
427
+ </thead>
428
+ <tbody>
429
+ <tr><td>PLaMo &middot; red-teaming</td><td class="num">16.88</td><td class="num">&minus;11.82</td><td class="num bad">+28.7</td></tr>
430
+ <tr><td>PLaMo &middot; writing</td><td class="num">19.77</td><td class="num">&minus;4.31</td><td class="num bad">+24.1</td></tr>
431
+ <tr><td>MedGemma-27B &middot; red-teaming</td><td class="num">25.29</td><td class="num">&minus;6.80</td><td class="num bad">+32.1</td></tr>
432
+ <tr><td>MedGemma-27B &middot; writing</td><td class="num">38.79</td><td class="num">9.13</td><td class="num bad">+29.7</td></tr>
433
+ <tr><td>GPT-5.5 &middot; red-teaming</td><td class="num">45.80</td><td class="num">28.19</td><td class="num bad">+17.6</td></tr>
434
+ <tr><td>GPT-5.5 &middot; consult</td><td class="num">60.58</td><td class="num">48.64</td><td class="num bad">+11.9</td></tr>
435
+ <tr><td>Opus 4.7 &middot; research</td><td class="num">67.39</td><td class="num">61.07</td><td class="num warn">+6.3</td></tr>
436
+ </tbody>
437
+ </table>
438
+
439
+ <p>Every error is positive, and the worst cases are the slices where models score near zero,
440
+ which is exactly where per-sample clipping does the most damage. The four use-case slices are
441
+ safe only because Ajay built <code>hs-prof-subsets</code> to recompute them as standalone task
442
+ runs. <b>Difficulty, source slice and specialty have no equivalent</b>, so if you need those
443
+ breakdowns they must be re-aggregated from per-sample scores, or run as standalone filtered
444
+ tasks the way the use-case slices were.</p>
445
+
446
+ <div class="callout">
447
+ <span class="ico">&#9733;</span>
448
+ <div>
449
+ <p>Practical rule: never quote a <code>_scorer/&lt;axis&gt;_score</code> value out of a
450
+ Professional log. Use <code>hs-prof-subsets</code> for the four use-case slices, and
451
+ recompute anything else yourself.</p>
452
+ </div>
453
+ </div>
454
+
455
+ <h2 id="why">Why cells disagree</h2>
456
+
457
+ <p>Three sources of drift, in descending order of how much they move a number.</p>
458
+
459
+ <details>
460
+ <summary>Judge model, worth up to 14 points <span class="where">3 judges across the set</span></summary>
461
+ <div class="body">
462
+ <p>Raw <code>healthbench_score</code> is just achieved points over possible points
463
+ (<code>scorer.py:524</code>), so it is fully determined by the judge's rubric verdicts and is
464
+ untouched by the length-adjustment arguments. That makes these clean single-variable
465
+ comparisons: same model, same task code, judge swapped.</p>
466
+ <pre> gpt-4o-mini gpt-4.1 delta
467
+ consensus, MedGemma-27B 0.7758 0.9105 +13.5
468
+ full, GPT-5.5 0.4873 0.5687 +8.1
469
+ full, Opus-4.7 0.4762 0.5344 +5.8
470
+ consensus, MedGemma-4B 0.7137 0.7583 +4.5
471
+ hard, MedGemma-27B 0.2109 0.1415 -6.9
472
+ hard, MedGemma-4B 0.1060 -0.0347 -14.1</pre>
473
+ <p>gpt-4.1 is <em>more</em> generous than gpt-4o-mini on consensus and <em>harsher</em> on
474
+ hard, so you cannot even predict the direction of the shift, let alone correct for it. Three
475
+ judges are in play across the set: gpt-4o-mini (healthbench-v1, all of hs-hard, all of
476
+ hs-consensus), gpt-4.1 (all of hs-non-professional, plus the Aug-05 re-runs), and gpt-5.4 at
477
+ <code>reasoning_effort=low</code> for every Professional run.</p>
478
+ </div>
479
+ </details>
480
+
481
+ <details>
482
+ <summary>Epochs, worth a couple of points of extra noise <span class="where">8 vs 1 on Professional</span></summary>
483
+ <div class="body">
484
+ <p>Professional ran at <code>epochs=8</code> for five models and <code>epochs=1</code> for
485
+ DeepSeek. Every other bench ran at <code>epochs=1</code> for everyone, so no repeat-epoch
486
+ variance estimate exists for full, consensus or hard at all.</p>
487
+ </div>
488
+ </details>
489
+
490
+ <details>
491
+ <summary>Cache reuse, worth about 3.5 points on one measured pair <span class="where">cache=true everywhere</span></summary>
492
+ <div class="body">
493
+ <p>DeepSeek has two Professional runs with identical nominal config. The 2026-07-25 one in
494
+ <code>hs-original</code> spent 10 candidate tokens per sample (a replay) and scored 34.30 raw;
495
+ the 2026-08-06 one in <code>healthbench-professional-deepseek-v4-pro</code> generated 1.26M
496
+ tokens fresh and scored 37.81 raw. Use the fresh one. The 3.5-point gap is about 1.5 standard
497
+ errors, so it is plausibly just resampling, but it is the only direct measurement of
498
+ cached-versus-fresh drift in the whole set.</p>
499
+ </div>
500
+ </details>
501
+
502
+ <h2 id="noise">How big does a gap have to be to matter</h2>
503
+
504
+ <p>Bootstrap standard errors from the logs, so you can tell a real difference from resampling
505
+ noise before commissioning a re-run:</p>
506
+
507
+ <table>
508
+ <thead><tr><th>Bench</th><th class="num">n</th><th class="num">std error</th><th>reads as</th></tr></thead>
509
+ <tbody>
510
+ <tr><td>full</td><td class="num">5000</td><td class="num">0.005</td><td>differences under 1 point are noise</td></tr>
511
+ <tr><td>consensus</td><td class="num">3671</td><td class="num">0.005</td><td>same</td></tr>
512
+ <tr><td>hard</td><td class="num">1000</td><td class="num">0.010</td><td>differences under 2 points are noise</td></tr>
513
+ <tr><td>professional</td><td class="num">525</td><td class="num">0.023</td><td>differences under 4.5 points are noise</td></tr>
514
+ </tbody>
515
+ </table>
516
+
517
+ <p>This is why GPT-5.5 at 47.8 and Opus 4.7 at 48.0 on Professional should be reported as tied,
518
+ and why the judge-swap effects above (up to 14 points) are unambiguously real rather than noise.</p>
519
+
520
+ <p>One footnote: the Aug-05 MedGemma-4B <code>hard</code> runs report a standard error of exactly
521
+ <code>0.0</code>. That is a clipping artifact, not precision. The bootstrap clamps the mean to
522
+ [0, 1], and since that run's mean is negative every resample clamps to 0, collapsing the spread.
523
+ Treat the std error as unknown for any run with a negative mean.</p>
524
+
525
+ <h2 id="files">Where everything lives</h2>
526
+
527
+ <p>All ten HealthBench spaces are mirrored locally, 68 logs. <code>healthbench-v1</code> is a
528
+ symlink into the inspect_ai sandbox where it already lived.</p>
529
+
530
+ <table>
531
+ <thead><tr><th>Directory</th><th class="num">runs</th><th>Contents</th></tr></thead>
532
+ <tbody>
533
+ <tr><td><code>healthbench-v1</code></td><td class="num">7</td><td>first attempt, 2 usable, gpt-4o-mini judge, no length adjustment</td></tr>
534
+ <tr><td><code>hs-non-professional</code></td><td class="num">6</td><td>the <code>full</code> column</td></tr>
535
+ <tr><td><code>hs-consensus</code></td><td class="num">6</td><td>the <code>consensus</code> column</td></tr>
536
+ <tr><td><code>hs-hard</code></td><td class="num">6</td><td>the <code>hard</code> column</td></tr>
537
+ <tr><td><code>hs-original</code></td><td class="num">6</td><td>the <code>professional</code> column</td></tr>
538
+ <tr><td><code>hs-prof-subsets</code></td><td class="num">26</td><td>the four use-case slices plus physician baseline</td></tr>
539
+ <tr><td><code>medgemma-healthbench-hard</code></td><td class="num">2</td><td>Aug-05 gpt-4.1 re-grade, hard</td></tr>
540
+ <tr><td><code>healthbench-hard-medgemma-v2</code></td><td class="num">2</td><td>same experiment, different provider prefix</td></tr>
541
+ <tr><td><code>healthbench-consensus-medgemma</code></td><td class="num">2</td><td>Aug-05 gpt-4.1 re-grade, consensus</td></tr>
542
+ <tr><td><code>healthbench-professional-deepseek-v4-pro</code></td><td class="num">1</td><td>the fresh DeepSeek Professional run</td></tr>
543
+ </tbody>
544
+ </table>
545
+
546
+ <p>Per-run detail with judge, epochs, token counts and a provenance classification is in
547
+ <code>hb-spaces/MANIFEST.csv</code>, one row per log. <code>hb-spaces/INDEX.md</code> carries the
548
+ trap list. On HuggingFace, <code>healthbench-profes</code> and
549
+ <code>healthbench-prof-part1</code> exist but hold no logs, so there is nothing to mirror.</p>
550
+
551
+ <h2 id="faq">Questions this raises</h2>
552
+
553
+ <dl class="faq">
554
+ <dt>If I only have budget for one thing, what is it?</dt>
555
+ <dd>The DeepSeek Professional <code>epochs=8</code> run. It is the single cell that breaks the
556
+ Professional table, and Professional is the bench with the physician baseline, so it is the one
557
+ you would actually put in front of someone.</dd>
558
+
559
+ <dt>Can I merge the four use-case slices back into a whole-set Professional score?</dt>
560
+ <dd>No. 236 + 142 + 147 + 191 = 716 against 525 total samples, so samples carry multiple
561
+ use-case tags and the slices overlap. Use the whole-set run for the headline and the slices
562
+ only as breakdowns.</dd>
563
+
564
+ <dt>Are the two MedGemma hard spaces duplicates?</dt>
565
+ <dd>Effectively yes. <code>medgemma-healthbench-hard</code> and
566
+ <code>healthbench-hard-medgemma-v2</code> are the same experiment run two hours apart, differing
567
+ only in whether the model was addressed as <code>openai-api/vllm/google/&hellip;</code> or
568
+ <code>vllm/google/&hellip;</code>. The 0.8-point spread between them is vLLM sampling noise, which
569
+ incidentally gives you a free repeatability estimate for the local models.</dd>
570
+
571
+ <dt>Was gpt-5-nano ever evaluated?</dt>
572
+ <dd>One attempt on 2026-07-09, which died on a 401. It is not part of the model set.</dd>
573
+
574
+ <dt>Why do so many runs show zero token usage?</dt>
575
+ <dd><code>cache=true</code> was set on every run, and Inspect does not count cache hits toward
576
+ <code>stats.model_usage</code>. An empty <code>model_usage</code> means every call was served
577
+ from cache, which is the fastest way to spot a replay masquerading as a re-run.</dd>
578
+ </dl>
579
+
580
+ </main>
581
+ </div>
582
+ </body>
583
+ </html>
robots.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ User-agent: *
2
+ Disallow: /
viewer/assets/chunk-DfAF0w94.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //#region ../../node_modules/.pnpm/mathxyjax3@0.8.3/node_modules/mathxyjax3/dist/chunk-DfAF0w94.js
2
+ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), s = (e, i, o, s) => {
3
+ if (i && typeof i == `object` || typeof i == `function`) for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, {
4
+ get: ((e) => i[e]).bind(null, d),
5
+ enumerable: !(s = n(i, d)) || s.enumerable
6
+ });
7
+ return e;
8
+ }, c = (n, r, a) => (a = n == null ? {} : e(i(n)), s(r || !n || !n.__esModule ? t(a, `default`, {
9
+ value: n,
10
+ enumerable: !0
11
+ }) : a, n)), l = (e) => (t) => c(t.default, e);
12
+ //#endregion
13
+ export { o as n, l as t };
14
+
15
+ //# sourceMappingURL=chunk-DfAF0w94.js.map
viewer/assets/favicon.svg ADDED
viewer/assets/index.css ADDED
The diff for this file is too large to render. See raw diff
 
viewer/assets/index.js ADDED
The diff for this file is too large to render. See raw diff
 
viewer/assets/lib-CBtriEt5.js ADDED
@@ -0,0 +1,3317 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { n as o$1 } from "./chunk-DfAF0w94.js";
2
+ //#region ../../node_modules/.pnpm/mathxyjax3@0.8.3/node_modules/mathxyjax3/dist/lib-CBtriEt5.js
3
+ var t = o$1(((exports) => {
4
+ function t(e, t, n) {
5
+ if (n === void 0 && (n = Array.prototype), e && typeof n.find == `function`) return n.find.call(e, t);
6
+ for (var r = 0; r < e.length; r++) if (Object.prototype.hasOwnProperty.call(e, r)) {
7
+ var i = e[r];
8
+ if (t.call(void 0, i, r, e)) return i;
9
+ }
10
+ }
11
+ function n(e, t) {
12
+ return t === void 0 && (t = Object), t && typeof t.freeze == `function` ? t.freeze(e) : e;
13
+ }
14
+ function r(e, t) {
15
+ if (typeof e != `object` || !e) throw TypeError(`target is not an object`);
16
+ for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
17
+ return e;
18
+ }
19
+ var i = n({
20
+ HTML: `text/html`,
21
+ isHTML: function(e) {
22
+ return e === i.HTML;
23
+ },
24
+ XML_APPLICATION: `application/xml`,
25
+ XML_TEXT: `text/xml`,
26
+ XML_XHTML_APPLICATION: `application/xhtml+xml`,
27
+ XML_SVG_IMAGE: `image/svg+xml`
28
+ }), a = n({
29
+ HTML: `http://www.w3.org/1999/xhtml`,
30
+ isHTML: function(e) {
31
+ return e === a.HTML;
32
+ },
33
+ SVG: `http://www.w3.org/2000/svg`,
34
+ XML: `http://www.w3.org/XML/1998/namespace`,
35
+ XMLNS: `http://www.w3.org/2000/xmlns/`
36
+ });
37
+ exports.assign = r, exports.find = t, exports.freeze = n, exports.MIME_TYPE = i, exports.NAMESPACE = a;
38
+ })), n = o$1(((exports) => {
39
+ var n = t(), r = n.find, i = n.NAMESPACE;
40
+ function a(e) {
41
+ return e !== ``;
42
+ }
43
+ function o(e) {
44
+ return e ? e.split(/[\t\n\f\r ]+/).filter(a) : [];
45
+ }
46
+ function s(e, t) {
47
+ return e.hasOwnProperty(t) || (e[t] = !0), e;
48
+ }
49
+ function c(e) {
50
+ if (!e) return [];
51
+ var t = o(e);
52
+ return Object.keys(t.reduce(s, {}));
53
+ }
54
+ function l(e) {
55
+ return function(t) {
56
+ return e && e.indexOf(t) !== -1;
57
+ };
58
+ }
59
+ function u(e, t) {
60
+ for (var n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);
61
+ }
62
+ function d(e, t) {
63
+ var n = e.prototype;
64
+ if (!(n instanceof t)) {
65
+ function r() {}
66
+ r.prototype = t.prototype, r = new r(), u(n, r), e.prototype = n = r;
67
+ }
68
+ n.constructor != e && (typeof e != `function` && console.error(`unknown Class:` + e), n.constructor = e);
69
+ }
70
+ var f = {}, p = f.ELEMENT_NODE = 1, m = f.ATTRIBUTE_NODE = 2, h = f.TEXT_NODE = 3, g = f.CDATA_SECTION_NODE = 4, _ = f.ENTITY_REFERENCE_NODE = 5, v = f.ENTITY_NODE = 6, y = f.PROCESSING_INSTRUCTION_NODE = 7, b = f.COMMENT_NODE = 8, x = f.DOCUMENT_NODE = 9, S = f.DOCUMENT_TYPE_NODE = 10, C = f.DOCUMENT_FRAGMENT_NODE = 11, w = f.NOTATION_NODE = 12, T = {}, E = {};
71
+ T.INDEX_SIZE_ERR = (E[1] = `Index size error`, 1), T.DOMSTRING_SIZE_ERR = (E[2] = `DOMString size error`, 2);
72
+ var D = T.HIERARCHY_REQUEST_ERR = (E[3] = `Hierarchy request error`, 3);
73
+ T.WRONG_DOCUMENT_ERR = (E[4] = `Wrong document`, 4), T.INVALID_CHARACTER_ERR = (E[5] = `Invalid character`, 5), T.NO_DATA_ALLOWED_ERR = (E[6] = `No data allowed`, 6), T.NO_MODIFICATION_ALLOWED_ERR = (E[7] = `No modification allowed`, 7);
74
+ var O = T.NOT_FOUND_ERR = (E[8] = `Not found`, 8);
75
+ T.NOT_SUPPORTED_ERR = (E[9] = `Not supported`, 9);
76
+ var k = T.INUSE_ATTRIBUTE_ERR = (E[10] = `Attribute in use`, 10);
77
+ T.INVALID_STATE_ERR = (E[11] = `Invalid state`, 11), T.SYNTAX_ERR = (E[12] = `Syntax error`, 12), T.INVALID_MODIFICATION_ERR = (E[13] = `Invalid modification`, 13), T.NAMESPACE_ERR = (E[14] = `Invalid namespace`, 14), T.INVALID_ACCESS_ERR = (E[15] = `Invalid access`, 15);
78
+ function A(e, t) {
79
+ if (t instanceof Error) var n = t;
80
+ else n = this, Error.call(this, E[e]), this.message = E[e], Error.captureStackTrace && Error.captureStackTrace(this, A);
81
+ return n.code = e, t && (this.message = this.message + `: ` + t), n;
82
+ }
83
+ A.prototype = Error.prototype, u(T, A);
84
+ function j() {}
85
+ j.prototype = {
86
+ length: 0,
87
+ item: function(e) {
88
+ return e >= 0 && e < this.length ? this[e] : null;
89
+ },
90
+ toString: function(e, t) {
91
+ for (var n = [], r = 0; r < this.length; r++) $(this[r], n, e, t);
92
+ return n.join(``);
93
+ },
94
+ filter: function(e) {
95
+ return Array.prototype.filter.call(this, e);
96
+ },
97
+ indexOf: function(e) {
98
+ return Array.prototype.indexOf.call(this, e);
99
+ }
100
+ };
101
+ function M(e, t) {
102
+ this._node = e, this._refresh = t, N(this);
103
+ }
104
+ function N(e) {
105
+ var t = e._node._inc || e._node.ownerDocument._inc;
106
+ if (e._inc !== t) {
107
+ var n = e._refresh(e._node);
108
+ if (Te(e, `length`, n.length), !e.$$length || n.length < e.$$length) for (var r = n.length; r in e; r++) Object.prototype.hasOwnProperty.call(e, r) && delete e[r];
109
+ u(n, e), e._inc = t;
110
+ }
111
+ }
112
+ M.prototype.item = function(e) {
113
+ return N(this), this[e] || null;
114
+ }, d(M, j);
115
+ function P() {}
116
+ function F(e, t) {
117
+ for (var n = e.length; n--;) if (e[n] === t) return n;
118
+ }
119
+ function I(e, t, n, r) {
120
+ if (r ? t[F(t, r)] = n : t[t.length++] = n, e) {
121
+ n.ownerElement = e;
122
+ var i = e.ownerDocument;
123
+ i && (r && te(i, e, r), ee(i, e, n));
124
+ }
125
+ }
126
+ function L(e, t, n) {
127
+ var r = F(t, n);
128
+ if (r >= 0) {
129
+ for (var i = t.length - 1; r < i;) t[r] = t[++r];
130
+ if (t.length = i, e) {
131
+ var a = e.ownerDocument;
132
+ a && (te(a, e, n), n.ownerElement = null);
133
+ }
134
+ } else throw new A(O, Error(e.tagName + `@` + n));
135
+ }
136
+ P.prototype = {
137
+ length: 0,
138
+ item: j.prototype.item,
139
+ getNamedItem: function(e) {
140
+ for (var t = this.length; t--;) {
141
+ var n = this[t];
142
+ if (n.nodeName == e) return n;
143
+ }
144
+ },
145
+ setNamedItem: function(e) {
146
+ var t = e.ownerElement;
147
+ if (t && t != this._ownerElement) throw new A(k);
148
+ var n = this.getNamedItem(e.nodeName);
149
+ return I(this._ownerElement, this, e, n), n;
150
+ },
151
+ setNamedItemNS: function(e) {
152
+ var t = e.ownerElement, n;
153
+ if (t && t != this._ownerElement) throw new A(k);
154
+ return n = this.getNamedItemNS(e.namespaceURI, e.localName), I(this._ownerElement, this, e, n), n;
155
+ },
156
+ removeNamedItem: function(e) {
157
+ var t = this.getNamedItem(e);
158
+ return L(this._ownerElement, this, t), t;
159
+ },
160
+ removeNamedItemNS: function(e, t) {
161
+ var n = this.getNamedItemNS(e, t);
162
+ return L(this._ownerElement, this, n), n;
163
+ },
164
+ getNamedItemNS: function(e, t) {
165
+ for (var n = this.length; n--;) {
166
+ var r = this[n];
167
+ if (r.localName == t && r.namespaceURI == e) return r;
168
+ }
169
+ return null;
170
+ }
171
+ };
172
+ function R() {}
173
+ R.prototype = {
174
+ hasFeature: function(e, t) {
175
+ return !0;
176
+ },
177
+ createDocument: function(e, t, n) {
178
+ var r = new H();
179
+ if (r.implementation = this, r.childNodes = new j(), r.doctype = n || null, n && r.appendChild(n), t) {
180
+ var i = r.createElementNS(e, t);
181
+ r.appendChild(i);
182
+ }
183
+ return r;
184
+ },
185
+ createDocumentType: function(e, t, n) {
186
+ var r = new Z();
187
+ return r.name = e, r.nodeName = e, r.publicId = t || ``, r.systemId = n || ``, r;
188
+ }
189
+ };
190
+ function z() {}
191
+ z.prototype = {
192
+ firstChild: null,
193
+ lastChild: null,
194
+ previousSibling: null,
195
+ nextSibling: null,
196
+ attributes: null,
197
+ parentNode: null,
198
+ childNodes: null,
199
+ ownerDocument: null,
200
+ nodeValue: null,
201
+ namespaceURI: null,
202
+ prefix: null,
203
+ localName: null,
204
+ insertBefore: function(e, t) {
205
+ return K(this, e, t);
206
+ },
207
+ replaceChild: function(e, t) {
208
+ K(this, e, t, ue), t && this.removeChild(t);
209
+ },
210
+ removeChild: function(e) {
211
+ return ne(this, e);
212
+ },
213
+ appendChild: function(e) {
214
+ return this.insertBefore(e, null);
215
+ },
216
+ hasChildNodes: function() {
217
+ return this.firstChild != null;
218
+ },
219
+ cloneNode: function(e) {
220
+ return we(this.ownerDocument || this, this, e);
221
+ },
222
+ normalize: function() {
223
+ for (var e = this.firstChild; e;) {
224
+ var t = e.nextSibling;
225
+ t && t.nodeType == h && e.nodeType == h ? (this.removeChild(t), e.appendData(t.data)) : (e.normalize(), e = t);
226
+ }
227
+ },
228
+ isSupported: function(e, t) {
229
+ return this.ownerDocument.implementation.hasFeature(e, t);
230
+ },
231
+ hasAttributes: function() {
232
+ return this.attributes.length > 0;
233
+ },
234
+ lookupPrefix: function(e) {
235
+ for (var t = this; t;) {
236
+ var n = t._nsMap;
237
+ if (n) {
238
+ for (var r in n) if (Object.prototype.hasOwnProperty.call(n, r) && n[r] === e) return r;
239
+ }
240
+ t = t.nodeType == m ? t.ownerDocument : t.parentNode;
241
+ }
242
+ return null;
243
+ },
244
+ lookupNamespaceURI: function(e) {
245
+ for (var t = this; t;) {
246
+ var n = t._nsMap;
247
+ if (n && Object.prototype.hasOwnProperty.call(n, e)) return n[e];
248
+ t = t.nodeType == m ? t.ownerDocument : t.parentNode;
249
+ }
250
+ return null;
251
+ },
252
+ isDefaultNamespace: function(e) {
253
+ return this.lookupPrefix(e) == null;
254
+ }
255
+ };
256
+ function B(e) {
257
+ return e == `<` && `&lt;` || e == `>` && `&gt;` || e == `&` && `&amp;` || e == `"` && `&quot;` || `&#` + e.charCodeAt() + `;`;
258
+ }
259
+ u(f, z), u(f, z.prototype);
260
+ function V(e, t) {
261
+ if (t(e)) return !0;
262
+ if (e = e.firstChild) do
263
+ if (V(e, t)) return !0;
264
+ while (e = e.nextSibling);
265
+ }
266
+ function H() {
267
+ this.ownerDocument = this;
268
+ }
269
+ function ee(e, t, n) {
270
+ e && e._inc++, n.namespaceURI === i.XMLNS && (t._nsMap[n.prefix ? n.localName : ``] = n.value);
271
+ }
272
+ function te(e, t, n, r) {
273
+ e && e._inc++, n.namespaceURI === i.XMLNS && delete t._nsMap[n.prefix ? n.localName : ``];
274
+ }
275
+ function U(e, t, n) {
276
+ if (e && e._inc) {
277
+ e._inc++;
278
+ var r = t.childNodes;
279
+ if (n) r[r.length++] = n;
280
+ else {
281
+ for (var i = t.firstChild, a = 0; i;) r[a++] = i, i = i.nextSibling;
282
+ r.length = a, delete r[r.length];
283
+ }
284
+ }
285
+ }
286
+ function ne(e, t) {
287
+ var n = t.previousSibling, r = t.nextSibling;
288
+ return n ? n.nextSibling = r : e.firstChild = r, r ? r.previousSibling = n : e.lastChild = n, t.parentNode = null, t.previousSibling = null, t.nextSibling = null, U(e.ownerDocument, e), t;
289
+ }
290
+ function re(e) {
291
+ return e && (e.nodeType === z.DOCUMENT_NODE || e.nodeType === z.DOCUMENT_FRAGMENT_NODE || e.nodeType === z.ELEMENT_NODE);
292
+ }
293
+ function ie(e) {
294
+ return e && (G(e) || ae(e) || W(e) || e.nodeType === z.DOCUMENT_FRAGMENT_NODE || e.nodeType === z.COMMENT_NODE || e.nodeType === z.PROCESSING_INSTRUCTION_NODE);
295
+ }
296
+ function W(e) {
297
+ return e && e.nodeType === z.DOCUMENT_TYPE_NODE;
298
+ }
299
+ function G(e) {
300
+ return e && e.nodeType === z.ELEMENT_NODE;
301
+ }
302
+ function ae(e) {
303
+ return e && e.nodeType === z.TEXT_NODE;
304
+ }
305
+ function oe(e, t) {
306
+ var n = e.childNodes || [];
307
+ if (r(n, G) || W(t)) return !1;
308
+ var i = r(n, W);
309
+ return !(t && i && n.indexOf(i) > n.indexOf(t));
310
+ }
311
+ function se(e, t) {
312
+ var n = e.childNodes || [];
313
+ function i(e) {
314
+ return G(e) && e !== t;
315
+ }
316
+ if (r(n, i)) return !1;
317
+ var a = r(n, W);
318
+ return !(t && a && n.indexOf(a) > n.indexOf(t));
319
+ }
320
+ function ce(e, t, n) {
321
+ if (!re(e)) throw new A(D, `Unexpected parent node type ` + e.nodeType);
322
+ if (n && n.parentNode !== e) throw new A(O, `child not in parent`);
323
+ if (!ie(t) || W(t) && e.nodeType !== z.DOCUMENT_NODE) throw new A(D, `Unexpected node type ` + t.nodeType + ` for parent node type ` + e.nodeType);
324
+ }
325
+ function le(e, t, n) {
326
+ var i = e.childNodes || [], a = t.childNodes || [];
327
+ if (t.nodeType === z.DOCUMENT_FRAGMENT_NODE) {
328
+ var o = a.filter(G);
329
+ if (o.length > 1 || r(a, ae)) throw new A(D, `More than one element or text in fragment`);
330
+ if (o.length === 1 && !oe(e, n)) throw new A(D, `Element in fragment can not be inserted before doctype`);
331
+ }
332
+ if (G(t) && !oe(e, n)) throw new A(D, `Only one element can be added and only after doctype`);
333
+ if (W(t)) {
334
+ if (r(i, W)) throw new A(D, `Only one doctype is allowed`);
335
+ var s = r(i, G);
336
+ if (n && i.indexOf(s) < i.indexOf(n)) throw new A(D, `Doctype can only be inserted before an element`);
337
+ if (!n && s) throw new A(D, `Doctype can not be appended since element is present`);
338
+ }
339
+ }
340
+ function ue(e, t, n) {
341
+ var i = e.childNodes || [], a = t.childNodes || [];
342
+ if (t.nodeType === z.DOCUMENT_FRAGMENT_NODE) {
343
+ var o = a.filter(G);
344
+ if (o.length > 1 || r(a, ae)) throw new A(D, `More than one element or text in fragment`);
345
+ if (o.length === 1 && !se(e, n)) throw new A(D, `Element in fragment can not be inserted before doctype`);
346
+ }
347
+ if (G(t) && !se(e, n)) throw new A(D, `Only one element can be added and only after doctype`);
348
+ if (W(t)) {
349
+ function e(e) {
350
+ return W(e) && e !== n;
351
+ }
352
+ if (r(i, e)) throw new A(D, `Only one doctype is allowed`);
353
+ var s = r(i, G);
354
+ if (n && i.indexOf(s) < i.indexOf(n)) throw new A(D, `Doctype can only be inserted before an element`);
355
+ }
356
+ }
357
+ function K(e, t, n, r) {
358
+ ce(e, t, n), e.nodeType === z.DOCUMENT_NODE && (r || le)(e, t, n);
359
+ var i = t.parentNode;
360
+ if (i && i.removeChild(t), t.nodeType === C) {
361
+ var a = t.firstChild;
362
+ if (a == null) return t;
363
+ var o = t.lastChild;
364
+ } else a = o = t;
365
+ var s = n ? n.previousSibling : e.lastChild;
366
+ a.previousSibling = s, o.nextSibling = n, s ? s.nextSibling = a : e.firstChild = a, n == null ? e.lastChild = o : n.previousSibling = o;
367
+ do {
368
+ a.parentNode = e;
369
+ var c = e.ownerDocument || e;
370
+ q(a, c);
371
+ } while (a !== o && (a = a.nextSibling));
372
+ return U(e.ownerDocument || e, e), t.nodeType == C && (t.firstChild = t.lastChild = null), t;
373
+ }
374
+ function q(e, t) {
375
+ if (e.ownerDocument !== t) {
376
+ if (e.ownerDocument = t, e.nodeType === p && e.attributes) for (var n = 0; n < e.attributes.length; n++) {
377
+ var r = e.attributes.item(n);
378
+ r && (r.ownerDocument = t);
379
+ }
380
+ for (var i = e.firstChild; i;) q(i, t), i = i.nextSibling;
381
+ }
382
+ }
383
+ function de(e, t) {
384
+ t.parentNode && t.parentNode.removeChild(t), t.parentNode = e, t.previousSibling = e.lastChild, t.nextSibling = null, t.previousSibling ? t.previousSibling.nextSibling = t : e.firstChild = t, e.lastChild = t, U(e.ownerDocument, e, t);
385
+ return q(t, e.ownerDocument || e), t;
386
+ }
387
+ H.prototype = {
388
+ nodeName: `#document`,
389
+ nodeType: x,
390
+ doctype: null,
391
+ documentElement: null,
392
+ _inc: 1,
393
+ insertBefore: function(e, t) {
394
+ if (e.nodeType == C) {
395
+ for (var n = e.firstChild; n;) {
396
+ var r = n.nextSibling;
397
+ this.insertBefore(n, t), n = r;
398
+ }
399
+ return e;
400
+ }
401
+ return K(this, e, t), q(e, this), this.documentElement === null && e.nodeType === p && (this.documentElement = e), e;
402
+ },
403
+ removeChild: function(e) {
404
+ return this.documentElement == e && (this.documentElement = null), ne(this, e);
405
+ },
406
+ replaceChild: function(e, t) {
407
+ K(this, e, t, ue), q(e, this), t && this.removeChild(t), G(e) && (this.documentElement = e);
408
+ },
409
+ importNode: function(e, t) {
410
+ return Ce(this, e, t);
411
+ },
412
+ getElementById: function(e) {
413
+ var t = null;
414
+ return V(this.documentElement, function(n) {
415
+ if (n.nodeType == p && n.getAttribute(`id`) == e) return t = n, !0;
416
+ }), t;
417
+ },
418
+ getElementsByClassName: function(e) {
419
+ var t = c(e);
420
+ return new M(this, function(n) {
421
+ var r = [];
422
+ return t.length > 0 && V(n.documentElement, function(i) {
423
+ if (i !== n && i.nodeType === p) {
424
+ var a = i.getAttribute(`class`);
425
+ if (a) {
426
+ var o = e === a;
427
+ if (!o) {
428
+ var s = c(a);
429
+ o = t.every(l(s));
430
+ }
431
+ o && r.push(i);
432
+ }
433
+ }
434
+ }), r;
435
+ });
436
+ },
437
+ createElement: function(e) {
438
+ var t = new J();
439
+ t.ownerDocument = this, t.nodeName = e, t.tagName = e, t.localName = e, t.childNodes = new j();
440
+ var n = t.attributes = new P();
441
+ return n._ownerElement = t, t;
442
+ },
443
+ createDocumentFragment: function() {
444
+ var e = new Q();
445
+ return e.ownerDocument = this, e.childNodes = new j(), e;
446
+ },
447
+ createTextNode: function(e) {
448
+ var t = new fe();
449
+ return t.ownerDocument = this, t.appendData(e), t;
450
+ },
451
+ createComment: function(e) {
452
+ var t = new pe();
453
+ return t.ownerDocument = this, t.appendData(e), t;
454
+ },
455
+ createCDATASection: function(e) {
456
+ var t = new me();
457
+ return t.ownerDocument = this, t.appendData(e), t;
458
+ },
459
+ createProcessingInstruction: function(e, t) {
460
+ var n = new ve();
461
+ return n.ownerDocument = this, n.tagName = n.nodeName = n.target = e, n.nodeValue = n.data = t, n;
462
+ },
463
+ createAttribute: function(e) {
464
+ var t = new Y();
465
+ return t.ownerDocument = this, t.name = e, t.nodeName = e, t.localName = e, t.specified = !0, t;
466
+ },
467
+ createEntityReference: function(e) {
468
+ var t = new _e();
469
+ return t.ownerDocument = this, t.nodeName = e, t;
470
+ },
471
+ createElementNS: function(e, t) {
472
+ var n = new J(), r = t.split(`:`), i = n.attributes = new P();
473
+ return n.childNodes = new j(), n.ownerDocument = this, n.nodeName = t, n.tagName = t, n.namespaceURI = e, r.length == 2 ? (n.prefix = r[0], n.localName = r[1]) : n.localName = t, i._ownerElement = n, n;
474
+ },
475
+ createAttributeNS: function(e, t) {
476
+ var n = new Y(), r = t.split(`:`);
477
+ return n.ownerDocument = this, n.nodeName = t, n.name = t, n.namespaceURI = e, n.specified = !0, r.length == 2 ? (n.prefix = r[0], n.localName = r[1]) : n.localName = t, n;
478
+ }
479
+ }, d(H, z);
480
+ function J() {
481
+ this._nsMap = {};
482
+ }
483
+ J.prototype = {
484
+ nodeType: p,
485
+ hasAttribute: function(e) {
486
+ return this.getAttributeNode(e) != null;
487
+ },
488
+ getAttribute: function(e) {
489
+ var t = this.getAttributeNode(e);
490
+ return t && t.value || ``;
491
+ },
492
+ getAttributeNode: function(e) {
493
+ return this.attributes.getNamedItem(e);
494
+ },
495
+ setAttribute: function(e, t) {
496
+ var n = this.ownerDocument.createAttribute(e);
497
+ n.value = n.nodeValue = `` + t, this.setAttributeNode(n);
498
+ },
499
+ removeAttribute: function(e) {
500
+ var t = this.getAttributeNode(e);
501
+ t && this.removeAttributeNode(t);
502
+ },
503
+ appendChild: function(e) {
504
+ return e.nodeType === C ? this.insertBefore(e, null) : de(this, e);
505
+ },
506
+ setAttributeNode: function(e) {
507
+ return this.attributes.setNamedItem(e);
508
+ },
509
+ setAttributeNodeNS: function(e) {
510
+ return this.attributes.setNamedItemNS(e);
511
+ },
512
+ removeAttributeNode: function(e) {
513
+ return this.attributes.removeNamedItem(e.nodeName);
514
+ },
515
+ removeAttributeNS: function(e, t) {
516
+ var n = this.getAttributeNodeNS(e, t);
517
+ n && this.removeAttributeNode(n);
518
+ },
519
+ hasAttributeNS: function(e, t) {
520
+ return this.getAttributeNodeNS(e, t) != null;
521
+ },
522
+ getAttributeNS: function(e, t) {
523
+ var n = this.getAttributeNodeNS(e, t);
524
+ return n && n.value || ``;
525
+ },
526
+ setAttributeNS: function(e, t, n) {
527
+ var r = this.ownerDocument.createAttributeNS(e, t);
528
+ r.value = r.nodeValue = `` + n, this.setAttributeNode(r);
529
+ },
530
+ getAttributeNodeNS: function(e, t) {
531
+ return this.attributes.getNamedItemNS(e, t);
532
+ },
533
+ getElementsByTagName: function(e) {
534
+ return new M(this, function(t) {
535
+ var n = [];
536
+ return V(t, function(r) {
537
+ r !== t && r.nodeType == p && (e === `*` || r.tagName == e) && n.push(r);
538
+ }), n;
539
+ });
540
+ },
541
+ getElementsByTagNameNS: function(e, t) {
542
+ return new M(this, function(n) {
543
+ var r = [];
544
+ return V(n, function(i) {
545
+ i !== n && i.nodeType === p && (e === `*` || i.namespaceURI === e) && (t === `*` || i.localName == t) && r.push(i);
546
+ }), r;
547
+ });
548
+ }
549
+ }, H.prototype.getElementsByTagName = J.prototype.getElementsByTagName, H.prototype.getElementsByTagNameNS = J.prototype.getElementsByTagNameNS, d(J, z);
550
+ function Y() {}
551
+ Y.prototype.nodeType = m, d(Y, z);
552
+ function X() {}
553
+ X.prototype = {
554
+ data: ``,
555
+ substringData: function(e, t) {
556
+ return this.data.substring(e, e + t);
557
+ },
558
+ appendData: function(e) {
559
+ e = this.data + e, this.nodeValue = this.data = e, this.length = e.length;
560
+ },
561
+ insertData: function(e, t) {
562
+ this.replaceData(e, 0, t);
563
+ },
564
+ appendChild: function(e) {
565
+ throw Error(E[D]);
566
+ },
567
+ deleteData: function(e, t) {
568
+ this.replaceData(e, t, ``);
569
+ },
570
+ replaceData: function(e, t, n) {
571
+ var r = this.data.substring(0, e), i = this.data.substring(e + t);
572
+ n = r + n + i, this.nodeValue = this.data = n, this.length = n.length;
573
+ }
574
+ }, d(X, z);
575
+ function fe() {}
576
+ fe.prototype = {
577
+ nodeName: `#text`,
578
+ nodeType: h,
579
+ splitText: function(e) {
580
+ var t = this.data, n = t.substring(e);
581
+ t = t.substring(0, e), this.data = this.nodeValue = t, this.length = t.length;
582
+ var r = this.ownerDocument.createTextNode(n);
583
+ return this.parentNode && this.parentNode.insertBefore(r, this.nextSibling), r;
584
+ }
585
+ }, d(fe, X);
586
+ function pe() {}
587
+ pe.prototype = {
588
+ nodeName: `#comment`,
589
+ nodeType: b
590
+ }, d(pe, X);
591
+ function me() {}
592
+ me.prototype = {
593
+ nodeName: `#cdata-section`,
594
+ nodeType: g
595
+ }, d(me, X);
596
+ function Z() {}
597
+ Z.prototype.nodeType = S, d(Z, z);
598
+ function he() {}
599
+ he.prototype.nodeType = w, d(he, z);
600
+ function ge() {}
601
+ ge.prototype.nodeType = v, d(ge, z);
602
+ function _e() {}
603
+ _e.prototype.nodeType = _, d(_e, z);
604
+ function Q() {}
605
+ Q.prototype.nodeName = `#document-fragment`, Q.prototype.nodeType = C, d(Q, z);
606
+ function ve() {}
607
+ ve.prototype.nodeType = y, d(ve, z);
608
+ function ye() {}
609
+ ye.prototype.serializeToString = function(e, t, n) {
610
+ return be.call(e, t, n);
611
+ }, z.prototype.toString = be;
612
+ function be(e, t) {
613
+ var n = [], r = this.nodeType == 9 && this.documentElement || this, i = r.prefix, a = r.namespaceURI;
614
+ if (a && i == null) {
615
+ var i = r.lookupPrefix(a);
616
+ if (i == null) var o = [{
617
+ namespace: a,
618
+ prefix: null
619
+ }];
620
+ }
621
+ return $(this, n, e, t, o), n.join(``);
622
+ }
623
+ function xe(e, t, n) {
624
+ var r = e.prefix || ``, a = e.namespaceURI;
625
+ if (!a || r === `xml` && a === i.XML || a === i.XMLNS) return !1;
626
+ for (var o = n.length; o--;) {
627
+ var s = n[o];
628
+ if (s.prefix === r) return s.namespace !== a;
629
+ }
630
+ return !0;
631
+ }
632
+ function Se(e, t, n) {
633
+ e.push(` `, t, `="`, n.replace(/[<>&"\t\n\r]/g, B), `"`);
634
+ }
635
+ function $(e, t, n, r, a) {
636
+ if (a ||= [], r) if (e = r(e), e) {
637
+ if (typeof e == `string`) {
638
+ t.push(e);
639
+ return;
640
+ }
641
+ } else return;
642
+ switch (e.nodeType) {
643
+ case p:
644
+ var o = e.attributes, s = o.length, c = e.firstChild, l = e.tagName;
645
+ n = i.isHTML(e.namespaceURI) || n;
646
+ var u = l;
647
+ if (!n && !e.prefix && e.namespaceURI) {
648
+ for (var d, f = 0; f < o.length; f++) if (o.item(f).name === `xmlns`) {
649
+ d = o.item(f).value;
650
+ break;
651
+ }
652
+ if (!d) for (var v = a.length - 1; v >= 0; v--) {
653
+ var w = a[v];
654
+ if (w.prefix === `` && w.namespace === e.namespaceURI) {
655
+ d = w.namespace;
656
+ break;
657
+ }
658
+ }
659
+ if (d !== e.namespaceURI) for (var v = a.length - 1; v >= 0; v--) {
660
+ var w = a[v];
661
+ if (w.namespace === e.namespaceURI) {
662
+ w.prefix && (u = w.prefix + `:` + l);
663
+ break;
664
+ }
665
+ }
666
+ }
667
+ t.push(`<`, u);
668
+ for (var T = 0; T < s; T++) {
669
+ var E = o.item(T);
670
+ E.prefix == `xmlns` ? a.push({
671
+ prefix: E.localName,
672
+ namespace: E.value
673
+ }) : E.nodeName == `xmlns` && a.push({
674
+ prefix: ``,
675
+ namespace: E.value
676
+ });
677
+ }
678
+ for (var T = 0; T < s; T++) {
679
+ var E = o.item(T);
680
+ if (xe(E, n, a)) {
681
+ var D = E.prefix || ``, O = E.namespaceURI;
682
+ Se(t, D ? `xmlns:` + D : `xmlns`, O), a.push({
683
+ prefix: D,
684
+ namespace: O
685
+ });
686
+ }
687
+ $(E, t, n, r, a);
688
+ }
689
+ if (l === u && xe(e, n, a)) {
690
+ var D = e.prefix || ``, O = e.namespaceURI;
691
+ Se(t, D ? `xmlns:` + D : `xmlns`, O), a.push({
692
+ prefix: D,
693
+ namespace: O
694
+ });
695
+ }
696
+ if (c || n && !/^(?:meta|link|img|br|hr|input)$/i.test(l)) {
697
+ if (t.push(`>`), n && /^script$/i.test(l)) for (; c;) c.data ? t.push(c.data) : $(c, t, n, r, a.slice()), c = c.nextSibling;
698
+ else for (; c;) $(c, t, n, r, a.slice()), c = c.nextSibling;
699
+ t.push(`</`, u, `>`);
700
+ } else t.push(`/>`);
701
+ return;
702
+ case x:
703
+ case C:
704
+ for (var c = e.firstChild; c;) $(c, t, n, r, a.slice()), c = c.nextSibling;
705
+ return;
706
+ case m: return Se(t, e.name, e.value);
707
+ case h: return t.push(e.data.replace(/[<&>]/g, B));
708
+ case g: return t.push(`<![CDATA[`, e.data, `]]>`);
709
+ case b: return t.push(`<!--`, e.data, `-->`);
710
+ case S:
711
+ var k = e.publicId, A = e.systemId;
712
+ if (t.push(`<!DOCTYPE `, e.name), k) t.push(` PUBLIC `, k), A && A != `.` && t.push(` `, A), t.push(`>`);
713
+ else if (A && A != `.`) t.push(` SYSTEM `, A, `>`);
714
+ else {
715
+ var j = e.internalSubset;
716
+ j && t.push(` [`, j, `]`), t.push(`>`);
717
+ }
718
+ return;
719
+ case y: return t.push(`<?`, e.target, ` `, e.data, `?>`);
720
+ case _: return t.push(`&`, e.nodeName, `;`);
721
+ default: t.push(`??`, e.nodeName);
722
+ }
723
+ }
724
+ function Ce(e, t, n) {
725
+ var r;
726
+ switch (t.nodeType) {
727
+ case p: r = t.cloneNode(!1), r.ownerDocument = e;
728
+ case C: break;
729
+ case m:
730
+ n = !0;
731
+ break;
732
+ }
733
+ if (r ||= t.cloneNode(!1), r.ownerDocument = e, r.parentNode = null, n) for (var i = t.firstChild; i;) r.appendChild(Ce(e, i, n)), i = i.nextSibling;
734
+ return r;
735
+ }
736
+ function we(e, t, n) {
737
+ var r = new t.constructor();
738
+ for (var i in t) if (Object.prototype.hasOwnProperty.call(t, i)) {
739
+ var a = t[i];
740
+ typeof a != `object` && a != r[i] && (r[i] = a);
741
+ }
742
+ switch (t.childNodes && (r.childNodes = new j()), r.ownerDocument = e, r.nodeType) {
743
+ case p:
744
+ var o = t.attributes, s = r.attributes = new P(), c = o.length;
745
+ s._ownerElement = r;
746
+ for (var l = 0; l < c; l++) r.setAttributeNode(we(e, o.item(l), !0));
747
+ break;
748
+ case m: n = !0;
749
+ }
750
+ if (n) for (var u = t.firstChild; u;) r.appendChild(we(e, u, n)), u = u.nextSibling;
751
+ return r;
752
+ }
753
+ function Te(e, t, n) {
754
+ e[t] = n;
755
+ }
756
+ try {
757
+ if (Object.defineProperty) {
758
+ Object.defineProperty(M.prototype, `length`, { get: function() {
759
+ return N(this), this.$$length;
760
+ } }), Object.defineProperty(z.prototype, `textContent`, {
761
+ get: function() {
762
+ return e(this);
763
+ },
764
+ set: function(e) {
765
+ switch (this.nodeType) {
766
+ case p:
767
+ case C:
768
+ for (; this.firstChild;) this.removeChild(this.firstChild);
769
+ (e || String(e)) && this.appendChild(this.ownerDocument.createTextNode(e));
770
+ break;
771
+ default: this.data = e, this.value = e, this.nodeValue = e;
772
+ }
773
+ }
774
+ });
775
+ function e(t) {
776
+ switch (t.nodeType) {
777
+ case p:
778
+ case C:
779
+ var n = [];
780
+ for (t = t.firstChild; t;) t.nodeType !== 7 && t.nodeType !== 8 && n.push(e(t)), t = t.nextSibling;
781
+ return n.join(``);
782
+ default: return t.nodeValue;
783
+ }
784
+ }
785
+ Te = function(e, t, n) {
786
+ e[`$$` + t] = n;
787
+ };
788
+ }
789
+ } catch {}
790
+ exports.DocumentType = Z, exports.DOMException = A, exports.DOMImplementation = R, exports.Element = J, exports.Node = z, exports.NodeList = j, exports.XMLSerializer = ye;
791
+ })), r = o$1(((exports) => {
792
+ var n = t().freeze;
793
+ exports.XML_ENTITIES = n({
794
+ amp: `&`,
795
+ apos: `'`,
796
+ gt: `>`,
797
+ lt: `<`,
798
+ quot: `"`
799
+ }), exports.HTML_ENTITIES = n({
800
+ Aacute: `Á`,
801
+ aacute: `á`,
802
+ Abreve: `Ă`,
803
+ abreve: `ă`,
804
+ ac: `∾`,
805
+ acd: `∿`,
806
+ acE: `∾̳`,
807
+ Acirc: `Â`,
808
+ acirc: `â`,
809
+ acute: `´`,
810
+ Acy: `А`,
811
+ acy: `а`,
812
+ AElig: `Æ`,
813
+ aelig: `æ`,
814
+ af: `⁡`,
815
+ Afr: `𝔄`,
816
+ afr: `𝔞`,
817
+ Agrave: `À`,
818
+ agrave: `à`,
819
+ alefsym: `ℵ`,
820
+ aleph: `ℵ`,
821
+ Alpha: `Α`,
822
+ alpha: `α`,
823
+ Amacr: `Ā`,
824
+ amacr: `ā`,
825
+ amalg: `⨿`,
826
+ AMP: `&`,
827
+ amp: `&`,
828
+ And: `⩓`,
829
+ and: `∧`,
830
+ andand: `⩕`,
831
+ andd: `⩜`,
832
+ andslope: `⩘`,
833
+ andv: `⩚`,
834
+ ang: `∠`,
835
+ ange: `⦤`,
836
+ angle: `∠`,
837
+ angmsd: `∡`,
838
+ angmsdaa: `⦨`,
839
+ angmsdab: `⦩`,
840
+ angmsdac: `⦪`,
841
+ angmsdad: `⦫`,
842
+ angmsdae: `⦬`,
843
+ angmsdaf: `⦭`,
844
+ angmsdag: `⦮`,
845
+ angmsdah: `⦯`,
846
+ angrt: `∟`,
847
+ angrtvb: `⊾`,
848
+ angrtvbd: `⦝`,
849
+ angsph: `∢`,
850
+ angst: `Å`,
851
+ angzarr: `⍼`,
852
+ Aogon: `Ą`,
853
+ aogon: `ą`,
854
+ Aopf: `𝔸`,
855
+ aopf: `𝕒`,
856
+ ap: `≈`,
857
+ apacir: `⩯`,
858
+ apE: `⩰`,
859
+ ape: `≊`,
860
+ apid: `≋`,
861
+ apos: `'`,
862
+ ApplyFunction: `⁡`,
863
+ approx: `≈`,
864
+ approxeq: `≊`,
865
+ Aring: `Å`,
866
+ aring: `å`,
867
+ Ascr: `𝒜`,
868
+ ascr: `𝒶`,
869
+ Assign: `≔`,
870
+ ast: `*`,
871
+ asymp: `≈`,
872
+ asympeq: `≍`,
873
+ Atilde: `Ã`,
874
+ atilde: `ã`,
875
+ Auml: `Ä`,
876
+ auml: `ä`,
877
+ awconint: `∳`,
878
+ awint: `⨑`,
879
+ backcong: `≌`,
880
+ backepsilon: `϶`,
881
+ backprime: `‵`,
882
+ backsim: `∽`,
883
+ backsimeq: `⋍`,
884
+ Backslash: `∖`,
885
+ Barv: `⫧`,
886
+ barvee: `⊽`,
887
+ Barwed: `⌆`,
888
+ barwed: `⌅`,
889
+ barwedge: `⌅`,
890
+ bbrk: `⎵`,
891
+ bbrktbrk: `⎶`,
892
+ bcong: `≌`,
893
+ Bcy: `Б`,
894
+ bcy: `б`,
895
+ bdquo: `„`,
896
+ becaus: `∵`,
897
+ Because: `∵`,
898
+ because: `∵`,
899
+ bemptyv: `⦰`,
900
+ bepsi: `϶`,
901
+ bernou: `ℬ`,
902
+ Bernoullis: `ℬ`,
903
+ Beta: `Β`,
904
+ beta: `β`,
905
+ beth: `ℶ`,
906
+ between: `≬`,
907
+ Bfr: `𝔅`,
908
+ bfr: `𝔟`,
909
+ bigcap: `⋂`,
910
+ bigcirc: `◯`,
911
+ bigcup: `⋃`,
912
+ bigodot: `⨀`,
913
+ bigoplus: `⨁`,
914
+ bigotimes: `⨂`,
915
+ bigsqcup: `⨆`,
916
+ bigstar: `★`,
917
+ bigtriangledown: `▽`,
918
+ bigtriangleup: `△`,
919
+ biguplus: `⨄`,
920
+ bigvee: `⋁`,
921
+ bigwedge: `⋀`,
922
+ bkarow: `⤍`,
923
+ blacklozenge: `⧫`,
924
+ blacksquare: `▪`,
925
+ blacktriangle: `▴`,
926
+ blacktriangledown: `▾`,
927
+ blacktriangleleft: `◂`,
928
+ blacktriangleright: `▸`,
929
+ blank: `␣`,
930
+ blk12: `▒`,
931
+ blk14: `░`,
932
+ blk34: `▓`,
933
+ block: `█`,
934
+ bne: `=⃥`,
935
+ bnequiv: `≡⃥`,
936
+ bNot: `⫭`,
937
+ bnot: `⌐`,
938
+ Bopf: `𝔹`,
939
+ bopf: `𝕓`,
940
+ bot: `⊥`,
941
+ bottom: `⊥`,
942
+ bowtie: `⋈`,
943
+ boxbox: `⧉`,
944
+ boxDL: `╗`,
945
+ boxDl: `╖`,
946
+ boxdL: `╕`,
947
+ boxdl: `┐`,
948
+ boxDR: `╔`,
949
+ boxDr: `╓`,
950
+ boxdR: `╒`,
951
+ boxdr: `┌`,
952
+ boxH: `═`,
953
+ boxh: `─`,
954
+ boxHD: `╦`,
955
+ boxHd: `╤`,
956
+ boxhD: `╥`,
957
+ boxhd: `┬`,
958
+ boxHU: `╩`,
959
+ boxHu: `╧`,
960
+ boxhU: `╨`,
961
+ boxhu: `┴`,
962
+ boxminus: `⊟`,
963
+ boxplus: `⊞`,
964
+ boxtimes: `⊠`,
965
+ boxUL: `╝`,
966
+ boxUl: `╜`,
967
+ boxuL: `╛`,
968
+ boxul: `┘`,
969
+ boxUR: `╚`,
970
+ boxUr: `╙`,
971
+ boxuR: `╘`,
972
+ boxur: `└`,
973
+ boxV: `║`,
974
+ boxv: `│`,
975
+ boxVH: `╬`,
976
+ boxVh: `╫`,
977
+ boxvH: `╪`,
978
+ boxvh: `┼`,
979
+ boxVL: `╣`,
980
+ boxVl: `╢`,
981
+ boxvL: `╡`,
982
+ boxvl: `┤`,
983
+ boxVR: `╠`,
984
+ boxVr: `╟`,
985
+ boxvR: `╞`,
986
+ boxvr: `├`,
987
+ bprime: `‵`,
988
+ Breve: `˘`,
989
+ breve: `˘`,
990
+ brvbar: `¦`,
991
+ Bscr: `ℬ`,
992
+ bscr: `𝒷`,
993
+ bsemi: `⁏`,
994
+ bsim: `∽`,
995
+ bsime: `⋍`,
996
+ bsol: `\\`,
997
+ bsolb: `⧅`,
998
+ bsolhsub: `⟈`,
999
+ bull: `•`,
1000
+ bullet: `•`,
1001
+ bump: `≎`,
1002
+ bumpE: `⪮`,
1003
+ bumpe: `≏`,
1004
+ Bumpeq: `≎`,
1005
+ bumpeq: `≏`,
1006
+ Cacute: `Ć`,
1007
+ cacute: `ć`,
1008
+ Cap: `⋒`,
1009
+ cap: `∩`,
1010
+ capand: `⩄`,
1011
+ capbrcup: `⩉`,
1012
+ capcap: `⩋`,
1013
+ capcup: `⩇`,
1014
+ capdot: `⩀`,
1015
+ CapitalDifferentialD: `ⅅ`,
1016
+ caps: `∩︀`,
1017
+ caret: `⁁`,
1018
+ caron: `ˇ`,
1019
+ Cayleys: `ℭ`,
1020
+ ccaps: `⩍`,
1021
+ Ccaron: `Č`,
1022
+ ccaron: `č`,
1023
+ Ccedil: `Ç`,
1024
+ ccedil: `ç`,
1025
+ Ccirc: `Ĉ`,
1026
+ ccirc: `ĉ`,
1027
+ Cconint: `∰`,
1028
+ ccups: `⩌`,
1029
+ ccupssm: `⩐`,
1030
+ Cdot: `Ċ`,
1031
+ cdot: `ċ`,
1032
+ cedil: `¸`,
1033
+ Cedilla: `¸`,
1034
+ cemptyv: `⦲`,
1035
+ cent: `¢`,
1036
+ CenterDot: `·`,
1037
+ centerdot: `·`,
1038
+ Cfr: `ℭ`,
1039
+ cfr: `𝔠`,
1040
+ CHcy: `Ч`,
1041
+ chcy: `ч`,
1042
+ check: `✓`,
1043
+ checkmark: `✓`,
1044
+ Chi: `Χ`,
1045
+ chi: `χ`,
1046
+ cir: `○`,
1047
+ circ: `ˆ`,
1048
+ circeq: `≗`,
1049
+ circlearrowleft: `↺`,
1050
+ circlearrowright: `↻`,
1051
+ circledast: `⊛`,
1052
+ circledcirc: `⊚`,
1053
+ circleddash: `⊝`,
1054
+ CircleDot: `⊙`,
1055
+ circledR: `®`,
1056
+ circledS: `Ⓢ`,
1057
+ CircleMinus: `⊖`,
1058
+ CirclePlus: `⊕`,
1059
+ CircleTimes: `⊗`,
1060
+ cirE: `⧃`,
1061
+ cire: `≗`,
1062
+ cirfnint: `⨐`,
1063
+ cirmid: `⫯`,
1064
+ cirscir: `⧂`,
1065
+ ClockwiseContourIntegral: `∲`,
1066
+ CloseCurlyDoubleQuote: `”`,
1067
+ CloseCurlyQuote: `’`,
1068
+ clubs: `♣`,
1069
+ clubsuit: `♣`,
1070
+ Colon: `∷`,
1071
+ colon: `:`,
1072
+ Colone: `⩴`,
1073
+ colone: `≔`,
1074
+ coloneq: `≔`,
1075
+ comma: `,`,
1076
+ commat: `@`,
1077
+ comp: `∁`,
1078
+ compfn: `∘`,
1079
+ complement: `∁`,
1080
+ complexes: `ℂ`,
1081
+ cong: `≅`,
1082
+ congdot: `⩭`,
1083
+ Congruent: `≡`,
1084
+ Conint: `∯`,
1085
+ conint: `∮`,
1086
+ ContourIntegral: `∮`,
1087
+ Copf: `ℂ`,
1088
+ copf: `𝕔`,
1089
+ coprod: `∐`,
1090
+ Coproduct: `∐`,
1091
+ COPY: `©`,
1092
+ copy: `©`,
1093
+ copysr: `℗`,
1094
+ CounterClockwiseContourIntegral: `∳`,
1095
+ crarr: `↵`,
1096
+ Cross: `⨯`,
1097
+ cross: `✗`,
1098
+ Cscr: `𝒞`,
1099
+ cscr: `𝒸`,
1100
+ csub: `⫏`,
1101
+ csube: `⫑`,
1102
+ csup: `⫐`,
1103
+ csupe: `⫒`,
1104
+ ctdot: `⋯`,
1105
+ cudarrl: `⤸`,
1106
+ cudarrr: `⤵`,
1107
+ cuepr: `⋞`,
1108
+ cuesc: `⋟`,
1109
+ cularr: `↶`,
1110
+ cularrp: `⤽`,
1111
+ Cup: `⋓`,
1112
+ cup: `∪`,
1113
+ cupbrcap: `⩈`,
1114
+ CupCap: `≍`,
1115
+ cupcap: `⩆`,
1116
+ cupcup: `⩊`,
1117
+ cupdot: `⊍`,
1118
+ cupor: `⩅`,
1119
+ cups: `∪︀`,
1120
+ curarr: `↷`,
1121
+ curarrm: `⤼`,
1122
+ curlyeqprec: `⋞`,
1123
+ curlyeqsucc: `⋟`,
1124
+ curlyvee: `⋎`,
1125
+ curlywedge: `⋏`,
1126
+ curren: `¤`,
1127
+ curvearrowleft: `↶`,
1128
+ curvearrowright: `↷`,
1129
+ cuvee: `⋎`,
1130
+ cuwed: `⋏`,
1131
+ cwconint: `∲`,
1132
+ cwint: `∱`,
1133
+ cylcty: `⌭`,
1134
+ Dagger: `‡`,
1135
+ dagger: `†`,
1136
+ daleth: `ℸ`,
1137
+ Darr: `↡`,
1138
+ dArr: `⇓`,
1139
+ darr: `↓`,
1140
+ dash: `‐`,
1141
+ Dashv: `⫤`,
1142
+ dashv: `⊣`,
1143
+ dbkarow: `⤏`,
1144
+ dblac: `˝`,
1145
+ Dcaron: `Ď`,
1146
+ dcaron: `ď`,
1147
+ Dcy: `Д`,
1148
+ dcy: `д`,
1149
+ DD: `ⅅ`,
1150
+ dd: `ⅆ`,
1151
+ ddagger: `‡`,
1152
+ ddarr: `⇊`,
1153
+ DDotrahd: `⤑`,
1154
+ ddotseq: `⩷`,
1155
+ deg: `°`,
1156
+ Del: `∇`,
1157
+ Delta: `Δ`,
1158
+ delta: `δ`,
1159
+ demptyv: `⦱`,
1160
+ dfisht: `⥿`,
1161
+ Dfr: `𝔇`,
1162
+ dfr: `𝔡`,
1163
+ dHar: `⥥`,
1164
+ dharl: `⇃`,
1165
+ dharr: `⇂`,
1166
+ DiacriticalAcute: `´`,
1167
+ DiacriticalDot: `˙`,
1168
+ DiacriticalDoubleAcute: `˝`,
1169
+ DiacriticalGrave: "`",
1170
+ DiacriticalTilde: `˜`,
1171
+ diam: `⋄`,
1172
+ Diamond: `⋄`,
1173
+ diamond: `⋄`,
1174
+ diamondsuit: `♦`,
1175
+ diams: `♦`,
1176
+ die: `¨`,
1177
+ DifferentialD: `ⅆ`,
1178
+ digamma: `ϝ`,
1179
+ disin: `⋲`,
1180
+ div: `÷`,
1181
+ divide: `÷`,
1182
+ divideontimes: `⋇`,
1183
+ divonx: `⋇`,
1184
+ DJcy: `Ђ`,
1185
+ djcy: `ђ`,
1186
+ dlcorn: `⌞`,
1187
+ dlcrop: `⌍`,
1188
+ dollar: `$`,
1189
+ Dopf: `𝔻`,
1190
+ dopf: `𝕕`,
1191
+ Dot: `¨`,
1192
+ dot: `˙`,
1193
+ DotDot: `⃜`,
1194
+ doteq: `≐`,
1195
+ doteqdot: `≑`,
1196
+ DotEqual: `≐`,
1197
+ dotminus: `∸`,
1198
+ dotplus: `∔`,
1199
+ dotsquare: `⊡`,
1200
+ doublebarwedge: `⌆`,
1201
+ DoubleContourIntegral: `∯`,
1202
+ DoubleDot: `¨`,
1203
+ DoubleDownArrow: `⇓`,
1204
+ DoubleLeftArrow: `⇐`,
1205
+ DoubleLeftRightArrow: `⇔`,
1206
+ DoubleLeftTee: `⫤`,
1207
+ DoubleLongLeftArrow: `⟸`,
1208
+ DoubleLongLeftRightArrow: `⟺`,
1209
+ DoubleLongRightArrow: `⟹`,
1210
+ DoubleRightArrow: `⇒`,
1211
+ DoubleRightTee: `⊨`,
1212
+ DoubleUpArrow: `⇑`,
1213
+ DoubleUpDownArrow: `⇕`,
1214
+ DoubleVerticalBar: `∥`,
1215
+ DownArrow: `↓`,
1216
+ Downarrow: `⇓`,
1217
+ downarrow: `↓`,
1218
+ DownArrowBar: `⤓`,
1219
+ DownArrowUpArrow: `⇵`,
1220
+ DownBreve: `̑`,
1221
+ downdownarrows: `⇊`,
1222
+ downharpoonleft: `⇃`,
1223
+ downharpoonright: `⇂`,
1224
+ DownLeftRightVector: `⥐`,
1225
+ DownLeftTeeVector: `⥞`,
1226
+ DownLeftVector: `↽`,
1227
+ DownLeftVectorBar: `⥖`,
1228
+ DownRightTeeVector: `⥟`,
1229
+ DownRightVector: `⇁`,
1230
+ DownRightVectorBar: `⥗`,
1231
+ DownTee: `⊤`,
1232
+ DownTeeArrow: `↧`,
1233
+ drbkarow: `⤐`,
1234
+ drcorn: `⌟`,
1235
+ drcrop: `⌌`,
1236
+ Dscr: `𝒟`,
1237
+ dscr: `𝒹`,
1238
+ DScy: `Ѕ`,
1239
+ dscy: `ѕ`,
1240
+ dsol: `⧶`,
1241
+ Dstrok: `Đ`,
1242
+ dstrok: `đ`,
1243
+ dtdot: `⋱`,
1244
+ dtri: `▿`,
1245
+ dtrif: `▾`,
1246
+ duarr: `⇵`,
1247
+ duhar: `⥯`,
1248
+ dwangle: `⦦`,
1249
+ DZcy: `Џ`,
1250
+ dzcy: `џ`,
1251
+ dzigrarr: `⟿`,
1252
+ Eacute: `É`,
1253
+ eacute: `é`,
1254
+ easter: `⩮`,
1255
+ Ecaron: `Ě`,
1256
+ ecaron: `ě`,
1257
+ ecir: `≖`,
1258
+ Ecirc: `Ê`,
1259
+ ecirc: `ê`,
1260
+ ecolon: `≕`,
1261
+ Ecy: `Э`,
1262
+ ecy: `э`,
1263
+ eDDot: `⩷`,
1264
+ Edot: `Ė`,
1265
+ eDot: `≑`,
1266
+ edot: `ė`,
1267
+ ee: `ⅇ`,
1268
+ efDot: `≒`,
1269
+ Efr: `𝔈`,
1270
+ efr: `𝔢`,
1271
+ eg: `⪚`,
1272
+ Egrave: `È`,
1273
+ egrave: `è`,
1274
+ egs: `⪖`,
1275
+ egsdot: `⪘`,
1276
+ el: `⪙`,
1277
+ Element: `∈`,
1278
+ elinters: `⏧`,
1279
+ ell: `ℓ`,
1280
+ els: `⪕`,
1281
+ elsdot: `⪗`,
1282
+ Emacr: `Ē`,
1283
+ emacr: `ē`,
1284
+ empty: `∅`,
1285
+ emptyset: `∅`,
1286
+ EmptySmallSquare: `◻`,
1287
+ emptyv: `∅`,
1288
+ EmptyVerySmallSquare: `▫`,
1289
+ emsp: ` `,
1290
+ emsp13: ` `,
1291
+ emsp14: ` `,
1292
+ ENG: `Ŋ`,
1293
+ eng: `ŋ`,
1294
+ ensp: ` `,
1295
+ Eogon: `Ę`,
1296
+ eogon: `ę`,
1297
+ Eopf: `𝔼`,
1298
+ eopf: `𝕖`,
1299
+ epar: `⋕`,
1300
+ eparsl: `⧣`,
1301
+ eplus: `⩱`,
1302
+ epsi: `ε`,
1303
+ Epsilon: `Ε`,
1304
+ epsilon: `ε`,
1305
+ epsiv: `ϵ`,
1306
+ eqcirc: `≖`,
1307
+ eqcolon: `≕`,
1308
+ eqsim: `≂`,
1309
+ eqslantgtr: `⪖`,
1310
+ eqslantless: `⪕`,
1311
+ Equal: `⩵`,
1312
+ equals: `=`,
1313
+ EqualTilde: `≂`,
1314
+ equest: `≟`,
1315
+ Equilibrium: `⇌`,
1316
+ equiv: `≡`,
1317
+ equivDD: `⩸`,
1318
+ eqvparsl: `⧥`,
1319
+ erarr: `⥱`,
1320
+ erDot: `≓`,
1321
+ Escr: `ℰ`,
1322
+ escr: `ℯ`,
1323
+ esdot: `≐`,
1324
+ Esim: `⩳`,
1325
+ esim: `≂`,
1326
+ Eta: `Η`,
1327
+ eta: `η`,
1328
+ ETH: `Ð`,
1329
+ eth: `ð`,
1330
+ Euml: `Ë`,
1331
+ euml: `ë`,
1332
+ euro: `€`,
1333
+ excl: `!`,
1334
+ exist: `∃`,
1335
+ Exists: `∃`,
1336
+ expectation: `ℰ`,
1337
+ ExponentialE: `ⅇ`,
1338
+ exponentiale: `ⅇ`,
1339
+ fallingdotseq: `≒`,
1340
+ Fcy: `Ф`,
1341
+ fcy: `ф`,
1342
+ female: `♀`,
1343
+ ffilig: `ffi`,
1344
+ fflig: `ff`,
1345
+ ffllig: `ffl`,
1346
+ Ffr: `𝔉`,
1347
+ ffr: `𝔣`,
1348
+ filig: `fi`,
1349
+ FilledSmallSquare: `◼`,
1350
+ FilledVerySmallSquare: `▪`,
1351
+ fjlig: `fj`,
1352
+ flat: `♭`,
1353
+ fllig: `fl`,
1354
+ fltns: `▱`,
1355
+ fnof: `ƒ`,
1356
+ Fopf: `𝔽`,
1357
+ fopf: `𝕗`,
1358
+ ForAll: `∀`,
1359
+ forall: `∀`,
1360
+ fork: `⋔`,
1361
+ forkv: `⫙`,
1362
+ Fouriertrf: `ℱ`,
1363
+ fpartint: `⨍`,
1364
+ frac12: `½`,
1365
+ frac13: `⅓`,
1366
+ frac14: `¼`,
1367
+ frac15: `⅕`,
1368
+ frac16: `⅙`,
1369
+ frac18: `⅛`,
1370
+ frac23: `⅔`,
1371
+ frac25: `⅖`,
1372
+ frac34: `¾`,
1373
+ frac35: `⅗`,
1374
+ frac38: `⅜`,
1375
+ frac45: `⅘`,
1376
+ frac56: `⅚`,
1377
+ frac58: `⅝`,
1378
+ frac78: `⅞`,
1379
+ frasl: `⁄`,
1380
+ frown: `⌢`,
1381
+ Fscr: `ℱ`,
1382
+ fscr: `𝒻`,
1383
+ gacute: `ǵ`,
1384
+ Gamma: `Γ`,
1385
+ gamma: `γ`,
1386
+ Gammad: `Ϝ`,
1387
+ gammad: `ϝ`,
1388
+ gap: `⪆`,
1389
+ Gbreve: `Ğ`,
1390
+ gbreve: `ğ`,
1391
+ Gcedil: `Ģ`,
1392
+ Gcirc: `Ĝ`,
1393
+ gcirc: `ĝ`,
1394
+ Gcy: `Г`,
1395
+ gcy: `г`,
1396
+ Gdot: `Ġ`,
1397
+ gdot: `ġ`,
1398
+ gE: `≧`,
1399
+ ge: `≥`,
1400
+ gEl: `⪌`,
1401
+ gel: `⋛`,
1402
+ geq: `≥`,
1403
+ geqq: `≧`,
1404
+ geqslant: `⩾`,
1405
+ ges: `⩾`,
1406
+ gescc: `⪩`,
1407
+ gesdot: `⪀`,
1408
+ gesdoto: `⪂`,
1409
+ gesdotol: `⪄`,
1410
+ gesl: `⋛︀`,
1411
+ gesles: `⪔`,
1412
+ Gfr: `𝔊`,
1413
+ gfr: `𝔤`,
1414
+ Gg: `⋙`,
1415
+ gg: `≫`,
1416
+ ggg: `⋙`,
1417
+ gimel: `ℷ`,
1418
+ GJcy: `Ѓ`,
1419
+ gjcy: `ѓ`,
1420
+ gl: `≷`,
1421
+ gla: `⪥`,
1422
+ glE: `⪒`,
1423
+ glj: `⪤`,
1424
+ gnap: `⪊`,
1425
+ gnapprox: `⪊`,
1426
+ gnE: `≩`,
1427
+ gne: `⪈`,
1428
+ gneq: `⪈`,
1429
+ gneqq: `≩`,
1430
+ gnsim: `⋧`,
1431
+ Gopf: `𝔾`,
1432
+ gopf: `𝕘`,
1433
+ grave: "`",
1434
+ GreaterEqual: `≥`,
1435
+ GreaterEqualLess: `⋛`,
1436
+ GreaterFullEqual: `≧`,
1437
+ GreaterGreater: `⪢`,
1438
+ GreaterLess: `≷`,
1439
+ GreaterSlantEqual: `⩾`,
1440
+ GreaterTilde: `≳`,
1441
+ Gscr: `𝒢`,
1442
+ gscr: `ℊ`,
1443
+ gsim: `≳`,
1444
+ gsime: `⪎`,
1445
+ gsiml: `⪐`,
1446
+ Gt: `≫`,
1447
+ GT: `>`,
1448
+ gt: `>`,
1449
+ gtcc: `⪧`,
1450
+ gtcir: `⩺`,
1451
+ gtdot: `⋗`,
1452
+ gtlPar: `⦕`,
1453
+ gtquest: `⩼`,
1454
+ gtrapprox: `⪆`,
1455
+ gtrarr: `⥸`,
1456
+ gtrdot: `⋗`,
1457
+ gtreqless: `⋛`,
1458
+ gtreqqless: `⪌`,
1459
+ gtrless: `≷`,
1460
+ gtrsim: `≳`,
1461
+ gvertneqq: `≩︀`,
1462
+ gvnE: `≩︀`,
1463
+ Hacek: `ˇ`,
1464
+ hairsp: ` `,
1465
+ half: `½`,
1466
+ hamilt: `ℋ`,
1467
+ HARDcy: `Ъ`,
1468
+ hardcy: `ъ`,
1469
+ hArr: `⇔`,
1470
+ harr: `↔`,
1471
+ harrcir: `⥈`,
1472
+ harrw: `↭`,
1473
+ Hat: `^`,
1474
+ hbar: `ℏ`,
1475
+ Hcirc: `Ĥ`,
1476
+ hcirc: `ĥ`,
1477
+ hearts: `♥`,
1478
+ heartsuit: `♥`,
1479
+ hellip: `…`,
1480
+ hercon: `⊹`,
1481
+ Hfr: `ℌ`,
1482
+ hfr: `𝔥`,
1483
+ HilbertSpace: `ℋ`,
1484
+ hksearow: `⤥`,
1485
+ hkswarow: `⤦`,
1486
+ hoarr: `⇿`,
1487
+ homtht: `∻`,
1488
+ hookleftarrow: `↩`,
1489
+ hookrightarrow: `↪`,
1490
+ Hopf: `ℍ`,
1491
+ hopf: `𝕙`,
1492
+ horbar: `―`,
1493
+ HorizontalLine: `─`,
1494
+ Hscr: `ℋ`,
1495
+ hscr: `𝒽`,
1496
+ hslash: `ℏ`,
1497
+ Hstrok: `Ħ`,
1498
+ hstrok: `ħ`,
1499
+ HumpDownHump: `≎`,
1500
+ HumpEqual: `≏`,
1501
+ hybull: `⁃`,
1502
+ hyphen: `‐`,
1503
+ Iacute: `Í`,
1504
+ iacute: `í`,
1505
+ ic: `⁣`,
1506
+ Icirc: `Î`,
1507
+ icirc: `î`,
1508
+ Icy: `И`,
1509
+ icy: `и`,
1510
+ Idot: `İ`,
1511
+ IEcy: `Е`,
1512
+ iecy: `е`,
1513
+ iexcl: `¡`,
1514
+ iff: `⇔`,
1515
+ Ifr: `ℑ`,
1516
+ ifr: `𝔦`,
1517
+ Igrave: `Ì`,
1518
+ igrave: `ì`,
1519
+ ii: `ⅈ`,
1520
+ iiiint: `⨌`,
1521
+ iiint: `∭`,
1522
+ iinfin: `⧜`,
1523
+ iiota: `℩`,
1524
+ IJlig: `IJ`,
1525
+ ijlig: `ij`,
1526
+ Im: `ℑ`,
1527
+ Imacr: `Ī`,
1528
+ imacr: `ī`,
1529
+ image: `ℑ`,
1530
+ ImaginaryI: `ⅈ`,
1531
+ imagline: `ℐ`,
1532
+ imagpart: `ℑ`,
1533
+ imath: `ı`,
1534
+ imof: `⊷`,
1535
+ imped: `Ƶ`,
1536
+ Implies: `⇒`,
1537
+ in: `∈`,
1538
+ incare: `℅`,
1539
+ infin: `∞`,
1540
+ infintie: `⧝`,
1541
+ inodot: `ı`,
1542
+ Int: `∬`,
1543
+ int: `∫`,
1544
+ intcal: `⊺`,
1545
+ integers: `ℤ`,
1546
+ Integral: `∫`,
1547
+ intercal: `⊺`,
1548
+ Intersection: `⋂`,
1549
+ intlarhk: `⨗`,
1550
+ intprod: `⨼`,
1551
+ InvisibleComma: `⁣`,
1552
+ InvisibleTimes: `⁢`,
1553
+ IOcy: `Ё`,
1554
+ iocy: `ё`,
1555
+ Iogon: `Į`,
1556
+ iogon: `į`,
1557
+ Iopf: `𝕀`,
1558
+ iopf: `𝕚`,
1559
+ Iota: `Ι`,
1560
+ iota: `ι`,
1561
+ iprod: `⨼`,
1562
+ iquest: `¿`,
1563
+ Iscr: `ℐ`,
1564
+ iscr: `𝒾`,
1565
+ isin: `∈`,
1566
+ isindot: `⋵`,
1567
+ isinE: `⋹`,
1568
+ isins: `⋴`,
1569
+ isinsv: `⋳`,
1570
+ isinv: `∈`,
1571
+ it: `⁢`,
1572
+ Itilde: `Ĩ`,
1573
+ itilde: `ĩ`,
1574
+ Iukcy: `І`,
1575
+ iukcy: `і`,
1576
+ Iuml: `Ï`,
1577
+ iuml: `ï`,
1578
+ Jcirc: `Ĵ`,
1579
+ jcirc: `ĵ`,
1580
+ Jcy: `Й`,
1581
+ jcy: `й`,
1582
+ Jfr: `𝔍`,
1583
+ jfr: `𝔧`,
1584
+ jmath: `ȷ`,
1585
+ Jopf: `𝕁`,
1586
+ jopf: `𝕛`,
1587
+ Jscr: `𝒥`,
1588
+ jscr: `𝒿`,
1589
+ Jsercy: `Ј`,
1590
+ jsercy: `ј`,
1591
+ Jukcy: `Є`,
1592
+ jukcy: `є`,
1593
+ Kappa: `Κ`,
1594
+ kappa: `κ`,
1595
+ kappav: `ϰ`,
1596
+ Kcedil: `Ķ`,
1597
+ kcedil: `ķ`,
1598
+ Kcy: `К`,
1599
+ kcy: `к`,
1600
+ Kfr: `𝔎`,
1601
+ kfr: `𝔨`,
1602
+ kgreen: `ĸ`,
1603
+ KHcy: `Х`,
1604
+ khcy: `х`,
1605
+ KJcy: `Ќ`,
1606
+ kjcy: `ќ`,
1607
+ Kopf: `𝕂`,
1608
+ kopf: `𝕜`,
1609
+ Kscr: `𝒦`,
1610
+ kscr: `𝓀`,
1611
+ lAarr: `⇚`,
1612
+ Lacute: `Ĺ`,
1613
+ lacute: `ĺ`,
1614
+ laemptyv: `⦴`,
1615
+ lagran: `ℒ`,
1616
+ Lambda: `Λ`,
1617
+ lambda: `λ`,
1618
+ Lang: `⟪`,
1619
+ lang: `⟨`,
1620
+ langd: `⦑`,
1621
+ langle: `⟨`,
1622
+ lap: `⪅`,
1623
+ Laplacetrf: `ℒ`,
1624
+ laquo: `«`,
1625
+ Larr: `↞`,
1626
+ lArr: `⇐`,
1627
+ larr: `←`,
1628
+ larrb: `⇤`,
1629
+ larrbfs: `⤟`,
1630
+ larrfs: `⤝`,
1631
+ larrhk: `↩`,
1632
+ larrlp: `↫`,
1633
+ larrpl: `⤹`,
1634
+ larrsim: `⥳`,
1635
+ larrtl: `↢`,
1636
+ lat: `⪫`,
1637
+ lAtail: `⤛`,
1638
+ latail: `⤙`,
1639
+ late: `⪭`,
1640
+ lates: `⪭︀`,
1641
+ lBarr: `⤎`,
1642
+ lbarr: `⤌`,
1643
+ lbbrk: `❲`,
1644
+ lbrace: `{`,
1645
+ lbrack: `[`,
1646
+ lbrke: `⦋`,
1647
+ lbrksld: `⦏`,
1648
+ lbrkslu: `⦍`,
1649
+ Lcaron: `Ľ`,
1650
+ lcaron: `ľ`,
1651
+ Lcedil: `Ļ`,
1652
+ lcedil: `ļ`,
1653
+ lceil: `⌈`,
1654
+ lcub: `{`,
1655
+ Lcy: `Л`,
1656
+ lcy: `л`,
1657
+ ldca: `⤶`,
1658
+ ldquo: `“`,
1659
+ ldquor: `„`,
1660
+ ldrdhar: `⥧`,
1661
+ ldrushar: `⥋`,
1662
+ ldsh: `↲`,
1663
+ lE: `≦`,
1664
+ le: `≤`,
1665
+ LeftAngleBracket: `⟨`,
1666
+ LeftArrow: `←`,
1667
+ Leftarrow: `⇐`,
1668
+ leftarrow: `←`,
1669
+ LeftArrowBar: `⇤`,
1670
+ LeftArrowRightArrow: `⇆`,
1671
+ leftarrowtail: `↢`,
1672
+ LeftCeiling: `⌈`,
1673
+ LeftDoubleBracket: `⟦`,
1674
+ LeftDownTeeVector: `⥡`,
1675
+ LeftDownVector: `⇃`,
1676
+ LeftDownVectorBar: `⥙`,
1677
+ LeftFloor: `⌊`,
1678
+ leftharpoondown: `↽`,
1679
+ leftharpoonup: `↼`,
1680
+ leftleftarrows: `⇇`,
1681
+ LeftRightArrow: `↔`,
1682
+ Leftrightarrow: `⇔`,
1683
+ leftrightarrow: `↔`,
1684
+ leftrightarrows: `⇆`,
1685
+ leftrightharpoons: `⇋`,
1686
+ leftrightsquigarrow: `↭`,
1687
+ LeftRightVector: `⥎`,
1688
+ LeftTee: `⊣`,
1689
+ LeftTeeArrow: `↤`,
1690
+ LeftTeeVector: `⥚`,
1691
+ leftthreetimes: `⋋`,
1692
+ LeftTriangle: `⊲`,
1693
+ LeftTriangleBar: `⧏`,
1694
+ LeftTriangleEqual: `⊴`,
1695
+ LeftUpDownVector: `⥑`,
1696
+ LeftUpTeeVector: `⥠`,
1697
+ LeftUpVector: `↿`,
1698
+ LeftUpVectorBar: `⥘`,
1699
+ LeftVector: `↼`,
1700
+ LeftVectorBar: `⥒`,
1701
+ lEg: `⪋`,
1702
+ leg: `⋚`,
1703
+ leq: `≤`,
1704
+ leqq: `≦`,
1705
+ leqslant: `⩽`,
1706
+ les: `⩽`,
1707
+ lescc: `⪨`,
1708
+ lesdot: `⩿`,
1709
+ lesdoto: `⪁`,
1710
+ lesdotor: `⪃`,
1711
+ lesg: `⋚︀`,
1712
+ lesges: `⪓`,
1713
+ lessapprox: `⪅`,
1714
+ lessdot: `⋖`,
1715
+ lesseqgtr: `⋚`,
1716
+ lesseqqgtr: `⪋`,
1717
+ LessEqualGreater: `⋚`,
1718
+ LessFullEqual: `≦`,
1719
+ LessGreater: `≶`,
1720
+ lessgtr: `≶`,
1721
+ LessLess: `⪡`,
1722
+ lesssim: `≲`,
1723
+ LessSlantEqual: `⩽`,
1724
+ LessTilde: `≲`,
1725
+ lfisht: `⥼`,
1726
+ lfloor: `⌊`,
1727
+ Lfr: `𝔏`,
1728
+ lfr: `𝔩`,
1729
+ lg: `≶`,
1730
+ lgE: `⪑`,
1731
+ lHar: `⥢`,
1732
+ lhard: `↽`,
1733
+ lharu: `↼`,
1734
+ lharul: `⥪`,
1735
+ lhblk: `▄`,
1736
+ LJcy: `Љ`,
1737
+ ljcy: `љ`,
1738
+ Ll: `⋘`,
1739
+ ll: `≪`,
1740
+ llarr: `⇇`,
1741
+ llcorner: `⌞`,
1742
+ Lleftarrow: `⇚`,
1743
+ llhard: `⥫`,
1744
+ lltri: `◺`,
1745
+ Lmidot: `Ŀ`,
1746
+ lmidot: `ŀ`,
1747
+ lmoust: `⎰`,
1748
+ lmoustache: `⎰`,
1749
+ lnap: `⪉`,
1750
+ lnapprox: `⪉`,
1751
+ lnE: `≨`,
1752
+ lne: `⪇`,
1753
+ lneq: `⪇`,
1754
+ lneqq: `≨`,
1755
+ lnsim: `⋦`,
1756
+ loang: `⟬`,
1757
+ loarr: `⇽`,
1758
+ lobrk: `⟦`,
1759
+ LongLeftArrow: `⟵`,
1760
+ Longleftarrow: `⟸`,
1761
+ longleftarrow: `⟵`,
1762
+ LongLeftRightArrow: `⟷`,
1763
+ Longleftrightarrow: `⟺`,
1764
+ longleftrightarrow: `⟷`,
1765
+ longmapsto: `⟼`,
1766
+ LongRightArrow: `⟶`,
1767
+ Longrightarrow: `⟹`,
1768
+ longrightarrow: `⟶`,
1769
+ looparrowleft: `↫`,
1770
+ looparrowright: `↬`,
1771
+ lopar: `⦅`,
1772
+ Lopf: `𝕃`,
1773
+ lopf: `𝕝`,
1774
+ loplus: `⨭`,
1775
+ lotimes: `⨴`,
1776
+ lowast: `∗`,
1777
+ lowbar: `_`,
1778
+ LowerLeftArrow: `↙`,
1779
+ LowerRightArrow: `↘`,
1780
+ loz: `◊`,
1781
+ lozenge: `◊`,
1782
+ lozf: `⧫`,
1783
+ lpar: `(`,
1784
+ lparlt: `⦓`,
1785
+ lrarr: `⇆`,
1786
+ lrcorner: `⌟`,
1787
+ lrhar: `⇋`,
1788
+ lrhard: `⥭`,
1789
+ lrm: `‎`,
1790
+ lrtri: `⊿`,
1791
+ lsaquo: `‹`,
1792
+ Lscr: `ℒ`,
1793
+ lscr: `𝓁`,
1794
+ Lsh: `↰`,
1795
+ lsh: `↰`,
1796
+ lsim: `≲`,
1797
+ lsime: `⪍`,
1798
+ lsimg: `⪏`,
1799
+ lsqb: `[`,
1800
+ lsquo: `‘`,
1801
+ lsquor: `‚`,
1802
+ Lstrok: `Ł`,
1803
+ lstrok: `ł`,
1804
+ Lt: `≪`,
1805
+ LT: `<`,
1806
+ lt: `<`,
1807
+ ltcc: `⪦`,
1808
+ ltcir: `⩹`,
1809
+ ltdot: `⋖`,
1810
+ lthree: `⋋`,
1811
+ ltimes: `⋉`,
1812
+ ltlarr: `⥶`,
1813
+ ltquest: `⩻`,
1814
+ ltri: `◃`,
1815
+ ltrie: `⊴`,
1816
+ ltrif: `◂`,
1817
+ ltrPar: `⦖`,
1818
+ lurdshar: `⥊`,
1819
+ luruhar: `⥦`,
1820
+ lvertneqq: `≨︀`,
1821
+ lvnE: `≨︀`,
1822
+ macr: `¯`,
1823
+ male: `♂`,
1824
+ malt: `✠`,
1825
+ maltese: `✠`,
1826
+ Map: `⤅`,
1827
+ map: `↦`,
1828
+ mapsto: `↦`,
1829
+ mapstodown: `↧`,
1830
+ mapstoleft: `↤`,
1831
+ mapstoup: `↥`,
1832
+ marker: `▮`,
1833
+ mcomma: `⨩`,
1834
+ Mcy: `М`,
1835
+ mcy: `м`,
1836
+ mdash: `—`,
1837
+ mDDot: `∺`,
1838
+ measuredangle: `∡`,
1839
+ MediumSpace: ` `,
1840
+ Mellintrf: `ℳ`,
1841
+ Mfr: `𝔐`,
1842
+ mfr: `𝔪`,
1843
+ mho: `℧`,
1844
+ micro: `µ`,
1845
+ mid: `∣`,
1846
+ midast: `*`,
1847
+ midcir: `⫰`,
1848
+ middot: `·`,
1849
+ minus: `−`,
1850
+ minusb: `⊟`,
1851
+ minusd: `∸`,
1852
+ minusdu: `⨪`,
1853
+ MinusPlus: `∓`,
1854
+ mlcp: `⫛`,
1855
+ mldr: `…`,
1856
+ mnplus: `∓`,
1857
+ models: `⊧`,
1858
+ Mopf: `𝕄`,
1859
+ mopf: `𝕞`,
1860
+ mp: `∓`,
1861
+ Mscr: `ℳ`,
1862
+ mscr: `𝓂`,
1863
+ mstpos: `∾`,
1864
+ Mu: `Μ`,
1865
+ mu: `μ`,
1866
+ multimap: `⊸`,
1867
+ mumap: `⊸`,
1868
+ nabla: `∇`,
1869
+ Nacute: `Ń`,
1870
+ nacute: `ń`,
1871
+ nang: `∠⃒`,
1872
+ nap: `≉`,
1873
+ napE: `⩰̸`,
1874
+ napid: `≋̸`,
1875
+ napos: `ʼn`,
1876
+ napprox: `≉`,
1877
+ natur: `♮`,
1878
+ natural: `♮`,
1879
+ naturals: `ℕ`,
1880
+ nbsp: `\xA0`,
1881
+ nbump: `≎̸`,
1882
+ nbumpe: `≏̸`,
1883
+ ncap: `⩃`,
1884
+ Ncaron: `Ň`,
1885
+ ncaron: `ň`,
1886
+ Ncedil: `Ņ`,
1887
+ ncedil: `ņ`,
1888
+ ncong: `≇`,
1889
+ ncongdot: `⩭̸`,
1890
+ ncup: `⩂`,
1891
+ Ncy: `Н`,
1892
+ ncy: `н`,
1893
+ ndash: `–`,
1894
+ ne: `≠`,
1895
+ nearhk: `⤤`,
1896
+ neArr: `⇗`,
1897
+ nearr: `↗`,
1898
+ nearrow: `↗`,
1899
+ nedot: `≐̸`,
1900
+ NegativeMediumSpace: `​`,
1901
+ NegativeThickSpace: `​`,
1902
+ NegativeThinSpace: `​`,
1903
+ NegativeVeryThinSpace: `​`,
1904
+ nequiv: `≢`,
1905
+ nesear: `⤨`,
1906
+ nesim: `≂̸`,
1907
+ NestedGreaterGreater: `≫`,
1908
+ NestedLessLess: `≪`,
1909
+ NewLine: `
1910
+ `,
1911
+ nexist: `∄`,
1912
+ nexists: `∄`,
1913
+ Nfr: `𝔑`,
1914
+ nfr: `𝔫`,
1915
+ ngE: `≧̸`,
1916
+ nge: `≱`,
1917
+ ngeq: `≱`,
1918
+ ngeqq: `≧̸`,
1919
+ ngeqslant: `⩾̸`,
1920
+ nges: `⩾̸`,
1921
+ nGg: `⋙̸`,
1922
+ ngsim: `≵`,
1923
+ nGt: `≫⃒`,
1924
+ ngt: `≯`,
1925
+ ngtr: `≯`,
1926
+ nGtv: `≫̸`,
1927
+ nhArr: `⇎`,
1928
+ nharr: `↮`,
1929
+ nhpar: `⫲`,
1930
+ ni: `∋`,
1931
+ nis: `⋼`,
1932
+ nisd: `⋺`,
1933
+ niv: `∋`,
1934
+ NJcy: `Њ`,
1935
+ njcy: `њ`,
1936
+ nlArr: `⇍`,
1937
+ nlarr: `↚`,
1938
+ nldr: `‥`,
1939
+ nlE: `≦̸`,
1940
+ nle: `≰`,
1941
+ nLeftarrow: `⇍`,
1942
+ nleftarrow: `↚`,
1943
+ nLeftrightarrow: `⇎`,
1944
+ nleftrightarrow: `↮`,
1945
+ nleq: `≰`,
1946
+ nleqq: `≦̸`,
1947
+ nleqslant: `⩽̸`,
1948
+ nles: `⩽̸`,
1949
+ nless: `≮`,
1950
+ nLl: `⋘̸`,
1951
+ nlsim: `≴`,
1952
+ nLt: `≪⃒`,
1953
+ nlt: `≮`,
1954
+ nltri: `⋪`,
1955
+ nltrie: `⋬`,
1956
+ nLtv: `≪̸`,
1957
+ nmid: `∤`,
1958
+ NoBreak: `⁠`,
1959
+ NonBreakingSpace: `\xA0`,
1960
+ Nopf: `ℕ`,
1961
+ nopf: `𝕟`,
1962
+ Not: `⫬`,
1963
+ not: `¬`,
1964
+ NotCongruent: `≢`,
1965
+ NotCupCap: `≭`,
1966
+ NotDoubleVerticalBar: `∦`,
1967
+ NotElement: `∉`,
1968
+ NotEqual: `≠`,
1969
+ NotEqualTilde: `≂̸`,
1970
+ NotExists: `∄`,
1971
+ NotGreater: `≯`,
1972
+ NotGreaterEqual: `≱`,
1973
+ NotGreaterFullEqual: `≧̸`,
1974
+ NotGreaterGreater: `≫̸`,
1975
+ NotGreaterLess: `≹`,
1976
+ NotGreaterSlantEqual: `⩾̸`,
1977
+ NotGreaterTilde: `≵`,
1978
+ NotHumpDownHump: `≎̸`,
1979
+ NotHumpEqual: `≏̸`,
1980
+ notin: `∉`,
1981
+ notindot: `⋵̸`,
1982
+ notinE: `⋹̸`,
1983
+ notinva: `∉`,
1984
+ notinvb: `⋷`,
1985
+ notinvc: `⋶`,
1986
+ NotLeftTriangle: `⋪`,
1987
+ NotLeftTriangleBar: `⧏̸`,
1988
+ NotLeftTriangleEqual: `⋬`,
1989
+ NotLess: `≮`,
1990
+ NotLessEqual: `≰`,
1991
+ NotLessGreater: `≸`,
1992
+ NotLessLess: `≪̸`,
1993
+ NotLessSlantEqual: `⩽̸`,
1994
+ NotLessTilde: `≴`,
1995
+ NotNestedGreaterGreater: `⪢̸`,
1996
+ NotNestedLessLess: `⪡̸`,
1997
+ notni: `∌`,
1998
+ notniva: `∌`,
1999
+ notnivb: `⋾`,
2000
+ notnivc: `⋽`,
2001
+ NotPrecedes: `⊀`,
2002
+ NotPrecedesEqual: `⪯̸`,
2003
+ NotPrecedesSlantEqual: `⋠`,
2004
+ NotReverseElement: `∌`,
2005
+ NotRightTriangle: `⋫`,
2006
+ NotRightTriangleBar: `⧐̸`,
2007
+ NotRightTriangleEqual: `⋭`,
2008
+ NotSquareSubset: `⊏̸`,
2009
+ NotSquareSubsetEqual: `⋢`,
2010
+ NotSquareSuperset: `⊐̸`,
2011
+ NotSquareSupersetEqual: `⋣`,
2012
+ NotSubset: `⊂⃒`,
2013
+ NotSubsetEqual: `⊈`,
2014
+ NotSucceeds: `⊁`,
2015
+ NotSucceedsEqual: `⪰̸`,
2016
+ NotSucceedsSlantEqual: `⋡`,
2017
+ NotSucceedsTilde: `≿̸`,
2018
+ NotSuperset: `⊃⃒`,
2019
+ NotSupersetEqual: `⊉`,
2020
+ NotTilde: `≁`,
2021
+ NotTildeEqual: `≄`,
2022
+ NotTildeFullEqual: `≇`,
2023
+ NotTildeTilde: `≉`,
2024
+ NotVerticalBar: `∤`,
2025
+ npar: `∦`,
2026
+ nparallel: `∦`,
2027
+ nparsl: `⫽⃥`,
2028
+ npart: `∂̸`,
2029
+ npolint: `⨔`,
2030
+ npr: `⊀`,
2031
+ nprcue: `⋠`,
2032
+ npre: `⪯̸`,
2033
+ nprec: `⊀`,
2034
+ npreceq: `⪯̸`,
2035
+ nrArr: `⇏`,
2036
+ nrarr: `↛`,
2037
+ nrarrc: `⤳̸`,
2038
+ nrarrw: `↝̸`,
2039
+ nRightarrow: `⇏`,
2040
+ nrightarrow: `↛`,
2041
+ nrtri: `⋫`,
2042
+ nrtrie: `⋭`,
2043
+ nsc: `⊁`,
2044
+ nsccue: `⋡`,
2045
+ nsce: `⪰̸`,
2046
+ Nscr: `𝒩`,
2047
+ nscr: `𝓃`,
2048
+ nshortmid: `∤`,
2049
+ nshortparallel: `∦`,
2050
+ nsim: `≁`,
2051
+ nsime: `≄`,
2052
+ nsimeq: `≄`,
2053
+ nsmid: `∤`,
2054
+ nspar: `∦`,
2055
+ nsqsube: `⋢`,
2056
+ nsqsupe: `⋣`,
2057
+ nsub: `⊄`,
2058
+ nsubE: `⫅̸`,
2059
+ nsube: `⊈`,
2060
+ nsubset: `⊂⃒`,
2061
+ nsubseteq: `⊈`,
2062
+ nsubseteqq: `⫅̸`,
2063
+ nsucc: `⊁`,
2064
+ nsucceq: `⪰̸`,
2065
+ nsup: `⊅`,
2066
+ nsupE: `⫆̸`,
2067
+ nsupe: `⊉`,
2068
+ nsupset: `⊃⃒`,
2069
+ nsupseteq: `⊉`,
2070
+ nsupseteqq: `⫆̸`,
2071
+ ntgl: `≹`,
2072
+ Ntilde: `Ñ`,
2073
+ ntilde: `ñ`,
2074
+ ntlg: `≸`,
2075
+ ntriangleleft: `⋪`,
2076
+ ntrianglelefteq: `⋬`,
2077
+ ntriangleright: `⋫`,
2078
+ ntrianglerighteq: `⋭`,
2079
+ Nu: `Ν`,
2080
+ nu: `ν`,
2081
+ num: `#`,
2082
+ numero: `№`,
2083
+ numsp: ` `,
2084
+ nvap: `≍⃒`,
2085
+ nVDash: `⊯`,
2086
+ nVdash: `⊮`,
2087
+ nvDash: `⊭`,
2088
+ nvdash: `⊬`,
2089
+ nvge: `≥⃒`,
2090
+ nvgt: `>⃒`,
2091
+ nvHarr: `⤄`,
2092
+ nvinfin: `⧞`,
2093
+ nvlArr: `⤂`,
2094
+ nvle: `≤⃒`,
2095
+ nvlt: `<⃒`,
2096
+ nvltrie: `⊴⃒`,
2097
+ nvrArr: `⤃`,
2098
+ nvrtrie: `⊵⃒`,
2099
+ nvsim: `∼⃒`,
2100
+ nwarhk: `⤣`,
2101
+ nwArr: `⇖`,
2102
+ nwarr: `↖`,
2103
+ nwarrow: `↖`,
2104
+ nwnear: `⤧`,
2105
+ Oacute: `Ó`,
2106
+ oacute: `ó`,
2107
+ oast: `⊛`,
2108
+ ocir: `⊚`,
2109
+ Ocirc: `Ô`,
2110
+ ocirc: `ô`,
2111
+ Ocy: `О`,
2112
+ ocy: `о`,
2113
+ odash: `⊝`,
2114
+ Odblac: `Ő`,
2115
+ odblac: `ő`,
2116
+ odiv: `⨸`,
2117
+ odot: `⊙`,
2118
+ odsold: `⦼`,
2119
+ OElig: `Œ`,
2120
+ oelig: `œ`,
2121
+ ofcir: `⦿`,
2122
+ Ofr: `𝔒`,
2123
+ ofr: `𝔬`,
2124
+ ogon: `˛`,
2125
+ Ograve: `Ò`,
2126
+ ograve: `ò`,
2127
+ ogt: `⧁`,
2128
+ ohbar: `⦵`,
2129
+ ohm: `Ω`,
2130
+ oint: `∮`,
2131
+ olarr: `↺`,
2132
+ olcir: `⦾`,
2133
+ olcross: `⦻`,
2134
+ oline: `‾`,
2135
+ olt: `⧀`,
2136
+ Omacr: `Ō`,
2137
+ omacr: `ō`,
2138
+ Omega: `Ω`,
2139
+ omega: `ω`,
2140
+ Omicron: `Ο`,
2141
+ omicron: `ο`,
2142
+ omid: `⦶`,
2143
+ ominus: `⊖`,
2144
+ Oopf: `𝕆`,
2145
+ oopf: `𝕠`,
2146
+ opar: `⦷`,
2147
+ OpenCurlyDoubleQuote: `“`,
2148
+ OpenCurlyQuote: `‘`,
2149
+ operp: `⦹`,
2150
+ oplus: `⊕`,
2151
+ Or: `⩔`,
2152
+ or: `∨`,
2153
+ orarr: `↻`,
2154
+ ord: `⩝`,
2155
+ order: `ℴ`,
2156
+ orderof: `ℴ`,
2157
+ ordf: `ª`,
2158
+ ordm: `º`,
2159
+ origof: `⊶`,
2160
+ oror: `⩖`,
2161
+ orslope: `⩗`,
2162
+ orv: `⩛`,
2163
+ oS: `Ⓢ`,
2164
+ Oscr: `𝒪`,
2165
+ oscr: `ℴ`,
2166
+ Oslash: `Ø`,
2167
+ oslash: `ø`,
2168
+ osol: `⊘`,
2169
+ Otilde: `Õ`,
2170
+ otilde: `õ`,
2171
+ Otimes: `⨷`,
2172
+ otimes: `⊗`,
2173
+ otimesas: `⨶`,
2174
+ Ouml: `Ö`,
2175
+ ouml: `ö`,
2176
+ ovbar: `⌽`,
2177
+ OverBar: `‾`,
2178
+ OverBrace: `⏞`,
2179
+ OverBracket: `⎴`,
2180
+ OverParenthesis: `⏜`,
2181
+ par: `∥`,
2182
+ para: `¶`,
2183
+ parallel: `∥`,
2184
+ parsim: `⫳`,
2185
+ parsl: `⫽`,
2186
+ part: `∂`,
2187
+ PartialD: `∂`,
2188
+ Pcy: `П`,
2189
+ pcy: `п`,
2190
+ percnt: `%`,
2191
+ period: `.`,
2192
+ permil: `‰`,
2193
+ perp: `⊥`,
2194
+ pertenk: `‱`,
2195
+ Pfr: `𝔓`,
2196
+ pfr: `𝔭`,
2197
+ Phi: `Φ`,
2198
+ phi: `φ`,
2199
+ phiv: `ϕ`,
2200
+ phmmat: `ℳ`,
2201
+ phone: `☎`,
2202
+ Pi: `Π`,
2203
+ pi: `π`,
2204
+ pitchfork: `⋔`,
2205
+ piv: `ϖ`,
2206
+ planck: `ℏ`,
2207
+ planckh: `ℎ`,
2208
+ plankv: `ℏ`,
2209
+ plus: `+`,
2210
+ plusacir: `⨣`,
2211
+ plusb: `⊞`,
2212
+ pluscir: `⨢`,
2213
+ plusdo: `∔`,
2214
+ plusdu: `⨥`,
2215
+ pluse: `⩲`,
2216
+ PlusMinus: `±`,
2217
+ plusmn: `±`,
2218
+ plussim: `⨦`,
2219
+ plustwo: `⨧`,
2220
+ pm: `±`,
2221
+ Poincareplane: `ℌ`,
2222
+ pointint: `⨕`,
2223
+ Popf: `ℙ`,
2224
+ popf: `𝕡`,
2225
+ pound: `£`,
2226
+ Pr: `⪻`,
2227
+ pr: `≺`,
2228
+ prap: `⪷`,
2229
+ prcue: `≼`,
2230
+ prE: `⪳`,
2231
+ pre: `⪯`,
2232
+ prec: `≺`,
2233
+ precapprox: `⪷`,
2234
+ preccurlyeq: `≼`,
2235
+ Precedes: `≺`,
2236
+ PrecedesEqual: `⪯`,
2237
+ PrecedesSlantEqual: `≼`,
2238
+ PrecedesTilde: `≾`,
2239
+ preceq: `⪯`,
2240
+ precnapprox: `⪹`,
2241
+ precneqq: `⪵`,
2242
+ precnsim: `⋨`,
2243
+ precsim: `≾`,
2244
+ Prime: `″`,
2245
+ prime: `′`,
2246
+ primes: `ℙ`,
2247
+ prnap: `⪹`,
2248
+ prnE: `⪵`,
2249
+ prnsim: `⋨`,
2250
+ prod: `∏`,
2251
+ Product: `∏`,
2252
+ profalar: `⌮`,
2253
+ profline: `⌒`,
2254
+ profsurf: `⌓`,
2255
+ prop: `∝`,
2256
+ Proportion: `∷`,
2257
+ Proportional: `∝`,
2258
+ propto: `∝`,
2259
+ prsim: `≾`,
2260
+ prurel: `⊰`,
2261
+ Pscr: `𝒫`,
2262
+ pscr: `𝓅`,
2263
+ Psi: `Ψ`,
2264
+ psi: `ψ`,
2265
+ puncsp: ` `,
2266
+ Qfr: `𝔔`,
2267
+ qfr: `𝔮`,
2268
+ qint: `⨌`,
2269
+ Qopf: `ℚ`,
2270
+ qopf: `𝕢`,
2271
+ qprime: `⁗`,
2272
+ Qscr: `𝒬`,
2273
+ qscr: `𝓆`,
2274
+ quaternions: `ℍ`,
2275
+ quatint: `⨖`,
2276
+ quest: `?`,
2277
+ questeq: `≟`,
2278
+ QUOT: `"`,
2279
+ quot: `"`,
2280
+ rAarr: `⇛`,
2281
+ race: `∽̱`,
2282
+ Racute: `Ŕ`,
2283
+ racute: `ŕ`,
2284
+ radic: `√`,
2285
+ raemptyv: `⦳`,
2286
+ Rang: `⟫`,
2287
+ rang: `⟩`,
2288
+ rangd: `⦒`,
2289
+ range: `⦥`,
2290
+ rangle: `⟩`,
2291
+ raquo: `»`,
2292
+ Rarr: `↠`,
2293
+ rArr: `⇒`,
2294
+ rarr: `→`,
2295
+ rarrap: `⥵`,
2296
+ rarrb: `⇥`,
2297
+ rarrbfs: `⤠`,
2298
+ rarrc: `⤳`,
2299
+ rarrfs: `⤞`,
2300
+ rarrhk: `↪`,
2301
+ rarrlp: `↬`,
2302
+ rarrpl: `⥅`,
2303
+ rarrsim: `⥴`,
2304
+ Rarrtl: `⤖`,
2305
+ rarrtl: `↣`,
2306
+ rarrw: `↝`,
2307
+ rAtail: `⤜`,
2308
+ ratail: `⤚`,
2309
+ ratio: `∶`,
2310
+ rationals: `ℚ`,
2311
+ RBarr: `⤐`,
2312
+ rBarr: `⤏`,
2313
+ rbarr: `⤍`,
2314
+ rbbrk: `❳`,
2315
+ rbrace: `}`,
2316
+ rbrack: `]`,
2317
+ rbrke: `⦌`,
2318
+ rbrksld: `⦎`,
2319
+ rbrkslu: `⦐`,
2320
+ Rcaron: `Ř`,
2321
+ rcaron: `ř`,
2322
+ Rcedil: `Ŗ`,
2323
+ rcedil: `ŗ`,
2324
+ rceil: `⌉`,
2325
+ rcub: `}`,
2326
+ Rcy: `Р`,
2327
+ rcy: `р`,
2328
+ rdca: `⤷`,
2329
+ rdldhar: `⥩`,
2330
+ rdquo: `”`,
2331
+ rdquor: `”`,
2332
+ rdsh: `↳`,
2333
+ Re: `ℜ`,
2334
+ real: `ℜ`,
2335
+ realine: `ℛ`,
2336
+ realpart: `ℜ`,
2337
+ reals: `ℝ`,
2338
+ rect: `▭`,
2339
+ REG: `®`,
2340
+ reg: `®`,
2341
+ ReverseElement: `∋`,
2342
+ ReverseEquilibrium: `⇋`,
2343
+ ReverseUpEquilibrium: `⥯`,
2344
+ rfisht: `⥽`,
2345
+ rfloor: `⌋`,
2346
+ Rfr: `ℜ`,
2347
+ rfr: `𝔯`,
2348
+ rHar: `⥤`,
2349
+ rhard: `⇁`,
2350
+ rharu: `⇀`,
2351
+ rharul: `⥬`,
2352
+ Rho: `Ρ`,
2353
+ rho: `ρ`,
2354
+ rhov: `ϱ`,
2355
+ RightAngleBracket: `⟩`,
2356
+ RightArrow: `→`,
2357
+ Rightarrow: `⇒`,
2358
+ rightarrow: `→`,
2359
+ RightArrowBar: `⇥`,
2360
+ RightArrowLeftArrow: `⇄`,
2361
+ rightarrowtail: `↣`,
2362
+ RightCeiling: `⌉`,
2363
+ RightDoubleBracket: `⟧`,
2364
+ RightDownTeeVector: `⥝`,
2365
+ RightDownVector: `⇂`,
2366
+ RightDownVectorBar: `⥕`,
2367
+ RightFloor: `⌋`,
2368
+ rightharpoondown: `⇁`,
2369
+ rightharpoonup: `⇀`,
2370
+ rightleftarrows: `⇄`,
2371
+ rightleftharpoons: `⇌`,
2372
+ rightrightarrows: `⇉`,
2373
+ rightsquigarrow: `↝`,
2374
+ RightTee: `⊢`,
2375
+ RightTeeArrow: `↦`,
2376
+ RightTeeVector: `⥛`,
2377
+ rightthreetimes: `⋌`,
2378
+ RightTriangle: `⊳`,
2379
+ RightTriangleBar: `⧐`,
2380
+ RightTriangleEqual: `⊵`,
2381
+ RightUpDownVector: `⥏`,
2382
+ RightUpTeeVector: `⥜`,
2383
+ RightUpVector: `↾`,
2384
+ RightUpVectorBar: `⥔`,
2385
+ RightVector: `⇀`,
2386
+ RightVectorBar: `⥓`,
2387
+ ring: `˚`,
2388
+ risingdotseq: `≓`,
2389
+ rlarr: `⇄`,
2390
+ rlhar: `⇌`,
2391
+ rlm: `‏`,
2392
+ rmoust: `⎱`,
2393
+ rmoustache: `⎱`,
2394
+ rnmid: `⫮`,
2395
+ roang: `⟭`,
2396
+ roarr: `⇾`,
2397
+ robrk: `⟧`,
2398
+ ropar: `⦆`,
2399
+ Ropf: `ℝ`,
2400
+ ropf: `𝕣`,
2401
+ roplus: `⨮`,
2402
+ rotimes: `⨵`,
2403
+ RoundImplies: `⥰`,
2404
+ rpar: `)`,
2405
+ rpargt: `⦔`,
2406
+ rppolint: `⨒`,
2407
+ rrarr: `⇉`,
2408
+ Rrightarrow: `⇛`,
2409
+ rsaquo: `›`,
2410
+ Rscr: `ℛ`,
2411
+ rscr: `𝓇`,
2412
+ Rsh: `↱`,
2413
+ rsh: `↱`,
2414
+ rsqb: `]`,
2415
+ rsquo: `’`,
2416
+ rsquor: `’`,
2417
+ rthree: `⋌`,
2418
+ rtimes: `⋊`,
2419
+ rtri: `▹`,
2420
+ rtrie: `⊵`,
2421
+ rtrif: `▸`,
2422
+ rtriltri: `⧎`,
2423
+ RuleDelayed: `⧴`,
2424
+ ruluhar: `⥨`,
2425
+ rx: `℞`,
2426
+ Sacute: `Ś`,
2427
+ sacute: `ś`,
2428
+ sbquo: `‚`,
2429
+ Sc: `⪼`,
2430
+ sc: `≻`,
2431
+ scap: `⪸`,
2432
+ Scaron: `Š`,
2433
+ scaron: `š`,
2434
+ sccue: `≽`,
2435
+ scE: `⪴`,
2436
+ sce: `⪰`,
2437
+ Scedil: `Ş`,
2438
+ scedil: `ş`,
2439
+ Scirc: `Ŝ`,
2440
+ scirc: `ŝ`,
2441
+ scnap: `⪺`,
2442
+ scnE: `⪶`,
2443
+ scnsim: `⋩`,
2444
+ scpolint: `⨓`,
2445
+ scsim: `≿`,
2446
+ Scy: `С`,
2447
+ scy: `с`,
2448
+ sdot: `⋅`,
2449
+ sdotb: `⊡`,
2450
+ sdote: `⩦`,
2451
+ searhk: `⤥`,
2452
+ seArr: `⇘`,
2453
+ searr: `↘`,
2454
+ searrow: `↘`,
2455
+ sect: `§`,
2456
+ semi: `;`,
2457
+ seswar: `⤩`,
2458
+ setminus: `∖`,
2459
+ setmn: `∖`,
2460
+ sext: `✶`,
2461
+ Sfr: `𝔖`,
2462
+ sfr: `𝔰`,
2463
+ sfrown: `⌢`,
2464
+ sharp: `♯`,
2465
+ SHCHcy: `Щ`,
2466
+ shchcy: `щ`,
2467
+ SHcy: `Ш`,
2468
+ shcy: `ш`,
2469
+ ShortDownArrow: `↓`,
2470
+ ShortLeftArrow: `←`,
2471
+ shortmid: `∣`,
2472
+ shortparallel: `∥`,
2473
+ ShortRightArrow: `→`,
2474
+ ShortUpArrow: `↑`,
2475
+ shy: `­`,
2476
+ Sigma: `Σ`,
2477
+ sigma: `σ`,
2478
+ sigmaf: `ς`,
2479
+ sigmav: `ς`,
2480
+ sim: `∼`,
2481
+ simdot: `⩪`,
2482
+ sime: `≃`,
2483
+ simeq: `≃`,
2484
+ simg: `⪞`,
2485
+ simgE: `⪠`,
2486
+ siml: `⪝`,
2487
+ simlE: `⪟`,
2488
+ simne: `≆`,
2489
+ simplus: `⨤`,
2490
+ simrarr: `⥲`,
2491
+ slarr: `←`,
2492
+ SmallCircle: `∘`,
2493
+ smallsetminus: `∖`,
2494
+ smashp: `⨳`,
2495
+ smeparsl: `⧤`,
2496
+ smid: `∣`,
2497
+ smile: `⌣`,
2498
+ smt: `⪪`,
2499
+ smte: `⪬`,
2500
+ smtes: `⪬︀`,
2501
+ SOFTcy: `Ь`,
2502
+ softcy: `ь`,
2503
+ sol: `/`,
2504
+ solb: `⧄`,
2505
+ solbar: `⌿`,
2506
+ Sopf: `𝕊`,
2507
+ sopf: `𝕤`,
2508
+ spades: `♠`,
2509
+ spadesuit: `♠`,
2510
+ spar: `∥`,
2511
+ sqcap: `⊓`,
2512
+ sqcaps: `⊓︀`,
2513
+ sqcup: `⊔`,
2514
+ sqcups: `⊔︀`,
2515
+ Sqrt: `√`,
2516
+ sqsub: `⊏`,
2517
+ sqsube: `⊑`,
2518
+ sqsubset: `⊏`,
2519
+ sqsubseteq: `⊑`,
2520
+ sqsup: `⊐`,
2521
+ sqsupe: `⊒`,
2522
+ sqsupset: `⊐`,
2523
+ sqsupseteq: `⊒`,
2524
+ squ: `□`,
2525
+ Square: `□`,
2526
+ square: `□`,
2527
+ SquareIntersection: `⊓`,
2528
+ SquareSubset: `⊏`,
2529
+ SquareSubsetEqual: `⊑`,
2530
+ SquareSuperset: `⊐`,
2531
+ SquareSupersetEqual: `⊒`,
2532
+ SquareUnion: `⊔`,
2533
+ squarf: `▪`,
2534
+ squf: `▪`,
2535
+ srarr: `→`,
2536
+ Sscr: `𝒮`,
2537
+ sscr: `𝓈`,
2538
+ ssetmn: `∖`,
2539
+ ssmile: `⌣`,
2540
+ sstarf: `⋆`,
2541
+ Star: `⋆`,
2542
+ star: `☆`,
2543
+ starf: `★`,
2544
+ straightepsilon: `ϵ`,
2545
+ straightphi: `ϕ`,
2546
+ strns: `¯`,
2547
+ Sub: `⋐`,
2548
+ sub: `⊂`,
2549
+ subdot: `⪽`,
2550
+ subE: `⫅`,
2551
+ sube: `⊆`,
2552
+ subedot: `⫃`,
2553
+ submult: `⫁`,
2554
+ subnE: `⫋`,
2555
+ subne: `⊊`,
2556
+ subplus: `⪿`,
2557
+ subrarr: `⥹`,
2558
+ Subset: `⋐`,
2559
+ subset: `⊂`,
2560
+ subseteq: `⊆`,
2561
+ subseteqq: `⫅`,
2562
+ SubsetEqual: `⊆`,
2563
+ subsetneq: `⊊`,
2564
+ subsetneqq: `⫋`,
2565
+ subsim: `⫇`,
2566
+ subsub: `⫕`,
2567
+ subsup: `⫓`,
2568
+ succ: `≻`,
2569
+ succapprox: `⪸`,
2570
+ succcurlyeq: `≽`,
2571
+ Succeeds: `≻`,
2572
+ SucceedsEqual: `⪰`,
2573
+ SucceedsSlantEqual: `≽`,
2574
+ SucceedsTilde: `≿`,
2575
+ succeq: `⪰`,
2576
+ succnapprox: `⪺`,
2577
+ succneqq: `⪶`,
2578
+ succnsim: `⋩`,
2579
+ succsim: `≿`,
2580
+ SuchThat: `∋`,
2581
+ Sum: `∑`,
2582
+ sum: `∑`,
2583
+ sung: `♪`,
2584
+ Sup: `⋑`,
2585
+ sup: `⊃`,
2586
+ sup1: `¹`,
2587
+ sup2: `²`,
2588
+ sup3: `³`,
2589
+ supdot: `⪾`,
2590
+ supdsub: `⫘`,
2591
+ supE: `⫆`,
2592
+ supe: `⊇`,
2593
+ supedot: `⫄`,
2594
+ Superset: `⊃`,
2595
+ SupersetEqual: `⊇`,
2596
+ suphsol: `⟉`,
2597
+ suphsub: `⫗`,
2598
+ suplarr: `⥻`,
2599
+ supmult: `⫂`,
2600
+ supnE: `⫌`,
2601
+ supne: `⊋`,
2602
+ supplus: `⫀`,
2603
+ Supset: `⋑`,
2604
+ supset: `⊃`,
2605
+ supseteq: `⊇`,
2606
+ supseteqq: `⫆`,
2607
+ supsetneq: `⊋`,
2608
+ supsetneqq: `⫌`,
2609
+ supsim: `⫈`,
2610
+ supsub: `⫔`,
2611
+ supsup: `⫖`,
2612
+ swarhk: `⤦`,
2613
+ swArr: `⇙`,
2614
+ swarr: `↙`,
2615
+ swarrow: `↙`,
2616
+ swnwar: `⤪`,
2617
+ szlig: `ß`,
2618
+ Tab: ` `,
2619
+ target: `⌖`,
2620
+ Tau: `Τ`,
2621
+ tau: `τ`,
2622
+ tbrk: `⎴`,
2623
+ Tcaron: `Ť`,
2624
+ tcaron: `ť`,
2625
+ Tcedil: `Ţ`,
2626
+ tcedil: `ţ`,
2627
+ Tcy: `Т`,
2628
+ tcy: `т`,
2629
+ tdot: `⃛`,
2630
+ telrec: `⌕`,
2631
+ Tfr: `𝔗`,
2632
+ tfr: `𝔱`,
2633
+ there4: `∴`,
2634
+ Therefore: `∴`,
2635
+ therefore: `∴`,
2636
+ Theta: `Θ`,
2637
+ theta: `θ`,
2638
+ thetasym: `ϑ`,
2639
+ thetav: `ϑ`,
2640
+ thickapprox: `≈`,
2641
+ thicksim: `∼`,
2642
+ ThickSpace: `  `,
2643
+ thinsp: ` `,
2644
+ ThinSpace: ` `,
2645
+ thkap: `≈`,
2646
+ thksim: `∼`,
2647
+ THORN: `Þ`,
2648
+ thorn: `þ`,
2649
+ Tilde: `∼`,
2650
+ tilde: `˜`,
2651
+ TildeEqual: `≃`,
2652
+ TildeFullEqual: `≅`,
2653
+ TildeTilde: `≈`,
2654
+ times: `×`,
2655
+ timesb: `⊠`,
2656
+ timesbar: `⨱`,
2657
+ timesd: `⨰`,
2658
+ tint: `∭`,
2659
+ toea: `⤨`,
2660
+ top: `⊤`,
2661
+ topbot: `⌶`,
2662
+ topcir: `⫱`,
2663
+ Topf: `𝕋`,
2664
+ topf: `𝕥`,
2665
+ topfork: `⫚`,
2666
+ tosa: `⤩`,
2667
+ tprime: `‴`,
2668
+ TRADE: `™`,
2669
+ trade: `™`,
2670
+ triangle: `▵`,
2671
+ triangledown: `▿`,
2672
+ triangleleft: `◃`,
2673
+ trianglelefteq: `⊴`,
2674
+ triangleq: `≜`,
2675
+ triangleright: `▹`,
2676
+ trianglerighteq: `⊵`,
2677
+ tridot: `◬`,
2678
+ trie: `≜`,
2679
+ triminus: `⨺`,
2680
+ TripleDot: `⃛`,
2681
+ triplus: `⨹`,
2682
+ trisb: `⧍`,
2683
+ tritime: `⨻`,
2684
+ trpezium: `⏢`,
2685
+ Tscr: `𝒯`,
2686
+ tscr: `𝓉`,
2687
+ TScy: `Ц`,
2688
+ tscy: `ц`,
2689
+ TSHcy: `Ћ`,
2690
+ tshcy: `ћ`,
2691
+ Tstrok: `Ŧ`,
2692
+ tstrok: `ŧ`,
2693
+ twixt: `≬`,
2694
+ twoheadleftarrow: `↞`,
2695
+ twoheadrightarrow: `↠`,
2696
+ Uacute: `Ú`,
2697
+ uacute: `ú`,
2698
+ Uarr: `↟`,
2699
+ uArr: `⇑`,
2700
+ uarr: `↑`,
2701
+ Uarrocir: `⥉`,
2702
+ Ubrcy: `Ў`,
2703
+ ubrcy: `ў`,
2704
+ Ubreve: `Ŭ`,
2705
+ ubreve: `ŭ`,
2706
+ Ucirc: `Û`,
2707
+ ucirc: `û`,
2708
+ Ucy: `У`,
2709
+ ucy: `у`,
2710
+ udarr: `⇅`,
2711
+ Udblac: `Ű`,
2712
+ udblac: `ű`,
2713
+ udhar: `⥮`,
2714
+ ufisht: `⥾`,
2715
+ Ufr: `𝔘`,
2716
+ ufr: `𝔲`,
2717
+ Ugrave: `Ù`,
2718
+ ugrave: `ù`,
2719
+ uHar: `⥣`,
2720
+ uharl: `↿`,
2721
+ uharr: `↾`,
2722
+ uhblk: `▀`,
2723
+ ulcorn: `⌜`,
2724
+ ulcorner: `⌜`,
2725
+ ulcrop: `⌏`,
2726
+ ultri: `◸`,
2727
+ Umacr: `Ū`,
2728
+ umacr: `ū`,
2729
+ uml: `¨`,
2730
+ UnderBar: `_`,
2731
+ UnderBrace: `⏟`,
2732
+ UnderBracket: `⎵`,
2733
+ UnderParenthesis: `⏝`,
2734
+ Union: `⋃`,
2735
+ UnionPlus: `⊎`,
2736
+ Uogon: `Ų`,
2737
+ uogon: `ų`,
2738
+ Uopf: `𝕌`,
2739
+ uopf: `𝕦`,
2740
+ UpArrow: `↑`,
2741
+ Uparrow: `⇑`,
2742
+ uparrow: `↑`,
2743
+ UpArrowBar: `⤒`,
2744
+ UpArrowDownArrow: `⇅`,
2745
+ UpDownArrow: `↕`,
2746
+ Updownarrow: `⇕`,
2747
+ updownarrow: `↕`,
2748
+ UpEquilibrium: `⥮`,
2749
+ upharpoonleft: `↿`,
2750
+ upharpoonright: `↾`,
2751
+ uplus: `⊎`,
2752
+ UpperLeftArrow: `↖`,
2753
+ UpperRightArrow: `↗`,
2754
+ Upsi: `ϒ`,
2755
+ upsi: `υ`,
2756
+ upsih: `ϒ`,
2757
+ Upsilon: `Υ`,
2758
+ upsilon: `υ`,
2759
+ UpTee: `⊥`,
2760
+ UpTeeArrow: `↥`,
2761
+ upuparrows: `⇈`,
2762
+ urcorn: `⌝`,
2763
+ urcorner: `⌝`,
2764
+ urcrop: `⌎`,
2765
+ Uring: `Ů`,
2766
+ uring: `ů`,
2767
+ urtri: `◹`,
2768
+ Uscr: `𝒰`,
2769
+ uscr: `𝓊`,
2770
+ utdot: `⋰`,
2771
+ Utilde: `Ũ`,
2772
+ utilde: `ũ`,
2773
+ utri: `▵`,
2774
+ utrif: `▴`,
2775
+ uuarr: `⇈`,
2776
+ Uuml: `Ü`,
2777
+ uuml: `ü`,
2778
+ uwangle: `⦧`,
2779
+ vangrt: `⦜`,
2780
+ varepsilon: `ϵ`,
2781
+ varkappa: `ϰ`,
2782
+ varnothing: `∅`,
2783
+ varphi: `ϕ`,
2784
+ varpi: `ϖ`,
2785
+ varpropto: `∝`,
2786
+ vArr: `⇕`,
2787
+ varr: `↕`,
2788
+ varrho: `ϱ`,
2789
+ varsigma: `ς`,
2790
+ varsubsetneq: `⊊︀`,
2791
+ varsubsetneqq: `⫋︀`,
2792
+ varsupsetneq: `⊋︀`,
2793
+ varsupsetneqq: `⫌︀`,
2794
+ vartheta: `ϑ`,
2795
+ vartriangleleft: `⊲`,
2796
+ vartriangleright: `⊳`,
2797
+ Vbar: `⫫`,
2798
+ vBar: `⫨`,
2799
+ vBarv: `⫩`,
2800
+ Vcy: `В`,
2801
+ vcy: `в`,
2802
+ VDash: `⊫`,
2803
+ Vdash: `⊩`,
2804
+ vDash: `⊨`,
2805
+ vdash: `⊢`,
2806
+ Vdashl: `⫦`,
2807
+ Vee: `⋁`,
2808
+ vee: `∨`,
2809
+ veebar: `⊻`,
2810
+ veeeq: `≚`,
2811
+ vellip: `⋮`,
2812
+ Verbar: `‖`,
2813
+ verbar: `|`,
2814
+ Vert: `‖`,
2815
+ vert: `|`,
2816
+ VerticalBar: `∣`,
2817
+ VerticalLine: `|`,
2818
+ VerticalSeparator: `❘`,
2819
+ VerticalTilde: `≀`,
2820
+ VeryThinSpace: ` `,
2821
+ Vfr: `𝔙`,
2822
+ vfr: `𝔳`,
2823
+ vltri: `⊲`,
2824
+ vnsub: `⊂⃒`,
2825
+ vnsup: `⊃⃒`,
2826
+ Vopf: `𝕍`,
2827
+ vopf: `𝕧`,
2828
+ vprop: `∝`,
2829
+ vrtri: `⊳`,
2830
+ Vscr: `𝒱`,
2831
+ vscr: `𝓋`,
2832
+ vsubnE: `⫋︀`,
2833
+ vsubne: `⊊︀`,
2834
+ vsupnE: `⫌︀`,
2835
+ vsupne: `⊋︀`,
2836
+ Vvdash: `⊪`,
2837
+ vzigzag: `⦚`,
2838
+ Wcirc: `Ŵ`,
2839
+ wcirc: `ŵ`,
2840
+ wedbar: `⩟`,
2841
+ Wedge: `⋀`,
2842
+ wedge: `∧`,
2843
+ wedgeq: `≙`,
2844
+ weierp: `℘`,
2845
+ Wfr: `𝔚`,
2846
+ wfr: `𝔴`,
2847
+ Wopf: `𝕎`,
2848
+ wopf: `𝕨`,
2849
+ wp: `℘`,
2850
+ wr: `≀`,
2851
+ wreath: `≀`,
2852
+ Wscr: `𝒲`,
2853
+ wscr: `𝓌`,
2854
+ xcap: `⋂`,
2855
+ xcirc: `◯`,
2856
+ xcup: `⋃`,
2857
+ xdtri: `▽`,
2858
+ Xfr: `𝔛`,
2859
+ xfr: `𝔵`,
2860
+ xhArr: `⟺`,
2861
+ xharr: `⟷`,
2862
+ Xi: `Ξ`,
2863
+ xi: `ξ`,
2864
+ xlArr: `⟸`,
2865
+ xlarr: `⟵`,
2866
+ xmap: `⟼`,
2867
+ xnis: `⋻`,
2868
+ xodot: `⨀`,
2869
+ Xopf: `𝕏`,
2870
+ xopf: `𝕩`,
2871
+ xoplus: `⨁`,
2872
+ xotime: `⨂`,
2873
+ xrArr: `⟹`,
2874
+ xrarr: `⟶`,
2875
+ Xscr: `𝒳`,
2876
+ xscr: `𝓍`,
2877
+ xsqcup: `⨆`,
2878
+ xuplus: `⨄`,
2879
+ xutri: `△`,
2880
+ xvee: `⋁`,
2881
+ xwedge: `⋀`,
2882
+ Yacute: `Ý`,
2883
+ yacute: `ý`,
2884
+ YAcy: `Я`,
2885
+ yacy: `я`,
2886
+ Ycirc: `Ŷ`,
2887
+ ycirc: `ŷ`,
2888
+ Ycy: `Ы`,
2889
+ ycy: `ы`,
2890
+ yen: `¥`,
2891
+ Yfr: `𝔜`,
2892
+ yfr: `𝔶`,
2893
+ YIcy: `Ї`,
2894
+ yicy: `ї`,
2895
+ Yopf: `𝕐`,
2896
+ yopf: `𝕪`,
2897
+ Yscr: `𝒴`,
2898
+ yscr: `𝓎`,
2899
+ YUcy: `Ю`,
2900
+ yucy: `ю`,
2901
+ Yuml: `Ÿ`,
2902
+ yuml: `ÿ`,
2903
+ Zacute: `Ź`,
2904
+ zacute: `ź`,
2905
+ Zcaron: `Ž`,
2906
+ zcaron: `ž`,
2907
+ Zcy: `З`,
2908
+ zcy: `з`,
2909
+ Zdot: `Ż`,
2910
+ zdot: `ż`,
2911
+ zeetrf: `ℨ`,
2912
+ ZeroWidthSpace: `​`,
2913
+ Zeta: `Ζ`,
2914
+ zeta: `ζ`,
2915
+ Zfr: `ℨ`,
2916
+ zfr: `𝔷`,
2917
+ ZHcy: `Ж`,
2918
+ zhcy: `ж`,
2919
+ zigrarr: `⇝`,
2920
+ Zopf: `ℤ`,
2921
+ zopf: `𝕫`,
2922
+ Zscr: `𝒵`,
2923
+ zscr: `𝓏`,
2924
+ zwj: `‍`,
2925
+ zwnj: `‌`
2926
+ }), exports.entityMap = exports.HTML_ENTITIES;
2927
+ })), i = o$1(((exports) => {
2928
+ var n = t().NAMESPACE, r = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, i = RegExp(`[\\-\\.0-9` + r.source.slice(1, -1) + `\\u00B7\\u0300-\\u036F\\u203F-\\u2040]`), a = RegExp(`^` + r.source + i.source + `*(?::` + r.source + i.source + `*)?$`), o = 0, s = 1, c = 2, l = 3, u = 4, d = 5, f = 6, p = 7;
2929
+ function m(e, t) {
2930
+ this.message = e, this.locator = t, Error.captureStackTrace && Error.captureStackTrace(this, m);
2931
+ }
2932
+ m.prototype = Error(), m.prototype.name = m.name;
2933
+ function h() {}
2934
+ h.prototype = { parse: function(e, t, n) {
2935
+ var r = this.domBuilder;
2936
+ r.startDocument(), S(t, t = {}), g(e, t, n, r, this.errorHandler), r.endDocument();
2937
+ } };
2938
+ function g(e, t, r, i, a) {
2939
+ function o(e) {
2940
+ if (e > 65535) {
2941
+ e -= 65536;
2942
+ var t = 55296 + (e >> 10), n = 56320 + (e & 1023);
2943
+ return String.fromCharCode(t, n);
2944
+ } else return String.fromCharCode(e);
2945
+ }
2946
+ function s(e) {
2947
+ var t = e.slice(1, -1);
2948
+ return Object.hasOwnProperty.call(r, t) ? r[t] : t.charAt(0) === `#` ? o(parseInt(t.substr(1).replace(`x`, `0x`))) : (a.error(`entity not found:` + e), e);
2949
+ }
2950
+ function c(t) {
2951
+ if (t > S) {
2952
+ var n = e.substring(S, t).replace(/&#?\w+;/g, s);
2953
+ p && l(S), i.characters(n, 0, t - S), S = t;
2954
+ }
2955
+ }
2956
+ function l(t, n) {
2957
+ for (; t >= d && (n = f.exec(e));) u = n.index, d = u + n[0].length, p.lineNumber++;
2958
+ p.columnNumber = t - u + 1;
2959
+ }
2960
+ for (var u = 0, d = 0, f = /.*(?:\r\n?|\n)|.*$/g, p = i.locator, h = [{ currentNSMap: t }], g = {}, S = 0;;) {
2961
+ try {
2962
+ var E = e.indexOf(`<`, S);
2963
+ if (E < 0) {
2964
+ if (!e.substr(S).match(/^\s*$/)) {
2965
+ var D = i.doc, O = D.createTextNode(e.substr(S));
2966
+ D.appendChild(O), i.currentElement = O;
2967
+ }
2968
+ return;
2969
+ }
2970
+ switch (E > S && c(E), e.charAt(E + 1)) {
2971
+ case `/`:
2972
+ var k = e.indexOf(`>`, E + 3), A = e.substring(E + 2, k).replace(/[ \t\n\r]+$/g, ``), j = h.pop();
2973
+ k < 0 ? (A = e.substring(E + 2).replace(/[\s<].*/, ``), a.error(`end tag name: ` + A + ` is not complete:` + j.tagName), k = E + 1 + A.length) : A.match(/\s</) && (A = A.replace(/[\s<].*/, ``), a.error(`end tag name: ` + A + ` maybe not complete`), k = E + 1 + A.length);
2974
+ var M = j.localNSMap, N = j.tagName == A;
2975
+ if (N || j.tagName && j.tagName.toLowerCase() == A.toLowerCase()) {
2976
+ if (i.endElement(j.uri, j.localName, A), M) for (var P in M) Object.prototype.hasOwnProperty.call(M, P) && i.endPrefixMapping(P);
2977
+ N || a.fatalError(`end tag name: ` + A + ` is not match the current start tagName:` + j.tagName);
2978
+ } else h.push(j);
2979
+ k++;
2980
+ break;
2981
+ case `?`:
2982
+ p && l(E), k = w(e, E, i);
2983
+ break;
2984
+ case `!`:
2985
+ p && l(E), k = C(e, E, i, a);
2986
+ break;
2987
+ default:
2988
+ p && l(E);
2989
+ var F = new T(), I = h[h.length - 1].currentNSMap, k = v(e, E, F, I, s, a), L = F.length;
2990
+ if (!F.closed && x(e, k, F.tagName, g) && (F.closed = !0, r.nbsp || a.warning(`unclosed xml attribute`)), p && L) {
2991
+ for (var R = _(p, {}), z = 0; z < L; z++) {
2992
+ var B = F[z];
2993
+ l(B.offset), B.locator = _(p, {});
2994
+ }
2995
+ i.locator = R, y(F, i, I) && h.push(F), i.locator = p;
2996
+ } else y(F, i, I) && h.push(F);
2997
+ n.isHTML(F.uri) && !F.closed ? k = b(e, k, F.tagName, s, i) : k++;
2998
+ }
2999
+ } catch (e) {
3000
+ if (e instanceof m) throw e;
3001
+ a.error(`element parse error: ` + e), k = -1;
3002
+ }
3003
+ k > S ? S = k : c(Math.max(E, S) + 1);
3004
+ }
3005
+ }
3006
+ function _(e, t) {
3007
+ return t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber, t;
3008
+ }
3009
+ function v(e, t, r, i, a, m) {
3010
+ function h(e, t, n) {
3011
+ r.attributeNames.hasOwnProperty(e) && m.fatalError(`Attribute ` + e + ` redefined`), r.addValue(e, t.replace(/[\t\n\r]/g, ` `).replace(/&#?\w+;/g, a), n);
3012
+ }
3013
+ for (var g, _, v = ++t, y = o;;) {
3014
+ var b = e.charAt(v);
3015
+ switch (b) {
3016
+ case `=`:
3017
+ if (y === s) g = e.slice(t, v), y = l;
3018
+ else if (y === c) y = l;
3019
+ else throw Error(`attribute equal must after attrName`);
3020
+ break;
3021
+ case `'`:
3022
+ case `"`:
3023
+ if (y === l || y === s) if (y === s && (m.warning(`attribute value must after "="`), g = e.slice(t, v)), t = v + 1, v = e.indexOf(b, t), v > 0) _ = e.slice(t, v), h(g, _, t - 1), y = d;
3024
+ else throw Error(`attribute value no end '` + b + `' match`);
3025
+ else if (y == u) _ = e.slice(t, v), h(g, _, t), m.warning(`attribute "` + g + `" missed start quot(` + b + `)!!`), t = v + 1, y = d;
3026
+ else throw Error(`attribute value must after "="`);
3027
+ break;
3028
+ case `/`:
3029
+ switch (y) {
3030
+ case o: r.setTagName(e.slice(t, v));
3031
+ case d:
3032
+ case f:
3033
+ case p: y = p, r.closed = !0;
3034
+ case u:
3035
+ case s: break;
3036
+ case c:
3037
+ r.closed = !0;
3038
+ break;
3039
+ default: throw Error(`attribute invalid close char('/')`);
3040
+ }
3041
+ break;
3042
+ case ``: return m.error(`unexpected end of input`), y == o && r.setTagName(e.slice(t, v)), v;
3043
+ case `>`:
3044
+ switch (y) {
3045
+ case o: r.setTagName(e.slice(t, v));
3046
+ case d:
3047
+ case f:
3048
+ case p: break;
3049
+ case u:
3050
+ case s: _ = e.slice(t, v), _.slice(-1) === `/` && (r.closed = !0, _ = _.slice(0, -1));
3051
+ case c:
3052
+ y === c && (_ = g), y == u ? (m.warning(`attribute "` + _ + `" missed quot(")!`), h(g, _, t)) : ((!n.isHTML(i[``]) || !_.match(/^(?:disabled|checked|selected)$/i)) && m.warning(`attribute "` + _ + `" missed value!! "` + _ + `" instead!!`), h(_, _, t));
3053
+ break;
3054
+ case l: throw Error(`attribute value missed!!`);
3055
+ }
3056
+ return v;
3057
+ case `€`: b = ` `;
3058
+ default: if (b <= ` `) switch (y) {
3059
+ case o:
3060
+ r.setTagName(e.slice(t, v)), y = f;
3061
+ break;
3062
+ case s:
3063
+ g = e.slice(t, v), y = c;
3064
+ break;
3065
+ case u:
3066
+ var _ = e.slice(t, v);
3067
+ m.warning(`attribute "` + _ + `" missed quot(")!!`), h(g, _, t);
3068
+ case d:
3069
+ y = f;
3070
+ break;
3071
+ }
3072
+ else switch (y) {
3073
+ case c:
3074
+ r.tagName, (!n.isHTML(i[``]) || !g.match(/^(?:disabled|checked|selected)$/i)) && m.warning(`attribute "` + g + `" missed value!! "` + g + `" instead2!!`), h(g, g, t), t = v, y = s;
3075
+ break;
3076
+ case d: m.warning(`attribute space is required"` + g + `"!!`);
3077
+ case f:
3078
+ y = s, t = v;
3079
+ break;
3080
+ case l:
3081
+ y = u, t = v;
3082
+ break;
3083
+ case p: throw Error(`elements closed character '/' and '>' must be connected to`);
3084
+ }
3085
+ }
3086
+ v++;
3087
+ }
3088
+ }
3089
+ function y(e, t, r) {
3090
+ for (var i = e.tagName, a = null, o = e.length; o--;) {
3091
+ var s = e[o], c = s.qName, l = s.value, u = c.indexOf(`:`);
3092
+ if (u > 0) var d = s.prefix = c.slice(0, u), f = c.slice(u + 1), p = d === `xmlns` && f;
3093
+ else f = c, d = null, p = c === `xmlns` && ``;
3094
+ s.localName = f, p !== !1 && (a ?? (a = {}, S(r, r = {})), r[p] = a[p] = l, s.uri = n.XMLNS, t.startPrefixMapping(p, l));
3095
+ }
3096
+ for (var o = e.length; o--;) {
3097
+ s = e[o];
3098
+ var d = s.prefix;
3099
+ d && (d === `xml` && (s.uri = n.XML), d !== `xmlns` && (s.uri = r[d || ``]));
3100
+ }
3101
+ var u = i.indexOf(`:`);
3102
+ u > 0 ? (d = e.prefix = i.slice(0, u), f = e.localName = i.slice(u + 1)) : (d = null, f = e.localName = i);
3103
+ var m = e.uri = r[d || ``];
3104
+ if (t.startElement(m, f, i, e), e.closed) {
3105
+ if (t.endElement(m, f, i), a) for (d in a) Object.prototype.hasOwnProperty.call(a, d) && t.endPrefixMapping(d);
3106
+ } else return e.currentNSMap = r, e.localNSMap = a, !0;
3107
+ }
3108
+ function b(e, t, n, r, i) {
3109
+ if (/^(?:script|textarea)$/i.test(n)) {
3110
+ var a = e.indexOf(`</` + n + `>`, t), o = e.substring(t + 1, a);
3111
+ if (/[&<]/.test(o)) return /^script$/i.test(n) ? (i.characters(o, 0, o.length), a) : (o = o.replace(/&#?\w+;/g, r), i.characters(o, 0, o.length), a);
3112
+ }
3113
+ return t + 1;
3114
+ }
3115
+ function x(e, t, n, r) {
3116
+ var i = r[n];
3117
+ return i ?? (i = e.lastIndexOf(`</` + n + `>`), i < t && (i = e.lastIndexOf(`</` + n)), r[n] = i), i < t;
3118
+ }
3119
+ function S(e, t) {
3120
+ for (var n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);
3121
+ }
3122
+ function C(e, t, n, r) {
3123
+ switch (e.charAt(t + 2)) {
3124
+ case `-`: if (e.charAt(t + 3) === `-`) {
3125
+ var i = e.indexOf(`-->`, t + 4);
3126
+ return i > t ? (n.comment(e, t + 4, i - t - 4), i + 3) : (r.error(`Unclosed comment`), -1);
3127
+ } else return -1;
3128
+ default:
3129
+ if (e.substr(t + 3, 6) == `CDATA[`) {
3130
+ var i = e.indexOf(`]]>`, t + 9);
3131
+ return n.startCDATA(), n.characters(e, t + 9, i - t - 9), n.endCDATA(), i + 3;
3132
+ }
3133
+ var a = E(e, t), o = a.length;
3134
+ if (o > 1 && /!doctype/i.test(a[0][0])) {
3135
+ var s = a[1][0], c = !1, l = !1;
3136
+ o > 3 && (/^public$/i.test(a[2][0]) ? (c = a[3][0], l = o > 4 && a[4][0]) : /^system$/i.test(a[2][0]) && (l = a[3][0]));
3137
+ var u = a[o - 1];
3138
+ return n.startDTD(s, c, l), n.endDTD(), u.index + u[0].length;
3139
+ }
3140
+ }
3141
+ return -1;
3142
+ }
3143
+ function w(e, t, n) {
3144
+ var r = e.indexOf(`?>`, t);
3145
+ if (r) {
3146
+ var i = e.substring(t, r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
3147
+ return i ? (i[0].length, n.processingInstruction(i[1], i[2]), r + 2) : -1;
3148
+ }
3149
+ return -1;
3150
+ }
3151
+ function T() {
3152
+ this.attributeNames = {};
3153
+ }
3154
+ T.prototype = {
3155
+ setTagName: function(e) {
3156
+ if (!a.test(e)) throw Error(`invalid tagName:` + e);
3157
+ this.tagName = e;
3158
+ },
3159
+ addValue: function(e, t, n) {
3160
+ if (!a.test(e)) throw Error(`invalid attribute:` + e);
3161
+ this.attributeNames[e] = this.length, this[this.length++] = {
3162
+ qName: e,
3163
+ value: t,
3164
+ offset: n
3165
+ };
3166
+ },
3167
+ length: 0,
3168
+ getLocalName: function(e) {
3169
+ return this[e].localName;
3170
+ },
3171
+ getLocator: function(e) {
3172
+ return this[e].locator;
3173
+ },
3174
+ getQName: function(e) {
3175
+ return this[e].qName;
3176
+ },
3177
+ getURI: function(e) {
3178
+ return this[e].uri;
3179
+ },
3180
+ getValue: function(e) {
3181
+ return this[e].value;
3182
+ }
3183
+ };
3184
+ function E(e, t) {
3185
+ var n, r = [], i = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
3186
+ for (i.lastIndex = t, i.exec(e); n = i.exec(e);) if (r.push(n), n[1]) return r;
3187
+ }
3188
+ exports.XMLReader = h, exports.ParseError = m;
3189
+ })), a = o$1(((exports) => {
3190
+ var a = t(), o = n(), s = r(), c = i(), l = o.DOMImplementation, u = a.NAMESPACE, d = c.ParseError, f = c.XMLReader;
3191
+ function p(e) {
3192
+ return e.replace(/\r[\n\u0085]/g, `
3193
+ `).replace(/[\r\u0085\u2028]/g, `
3194
+ `);
3195
+ }
3196
+ function m(e) {
3197
+ this.options = e || { locator: {} };
3198
+ }
3199
+ m.prototype.parseFromString = function(e, t) {
3200
+ var n = this.options, r = new f(), i = n.domBuilder || new g(), a = n.errorHandler, o = n.locator, c = n.xmlns || {}, l = /\/x?html?$/.test(t), d = l ? s.HTML_ENTITIES : s.XML_ENTITIES;
3201
+ o && i.setDocumentLocator(o), r.errorHandler = h(a, i, o), r.domBuilder = n.domBuilder || i, l && (c[``] = u.HTML), c.xml = c.xml || u.XML;
3202
+ var m = n.normalizeLineEndings || p;
3203
+ return e && typeof e == `string` ? r.parse(m(e), c, d) : r.errorHandler.error(`invalid doc source`), i.doc;
3204
+ };
3205
+ function h(e, t, n) {
3206
+ if (!e) {
3207
+ if (t instanceof g) return t;
3208
+ e = t;
3209
+ }
3210
+ var r = {}, i = e instanceof Function;
3211
+ n ||= {};
3212
+ function a(t) {
3213
+ var a = e[t];
3214
+ !a && i && (a = e.length == 2 ? function(n) {
3215
+ e(t, n);
3216
+ } : e), r[t] = a && function(e) {
3217
+ a(`[xmldom ` + t + `] ` + e + v(n));
3218
+ } || function() {};
3219
+ }
3220
+ return a(`warning`), a(`error`), a(`fatalError`), r;
3221
+ }
3222
+ function g() {
3223
+ this.cdata = !1;
3224
+ }
3225
+ function _(e, t) {
3226
+ t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber;
3227
+ }
3228
+ g.prototype = {
3229
+ startDocument: function() {
3230
+ this.doc = new l().createDocument(null, null, null), this.locator && (this.doc.documentURI = this.locator.systemId);
3231
+ },
3232
+ startElement: function(e, t, n, r) {
3233
+ var i = this.doc, a = i.createElementNS(e, n || t), o = r.length;
3234
+ b(this, a), this.currentElement = a, this.locator && _(this.locator, a);
3235
+ for (var s = 0; s < o; s++) {
3236
+ var e = r.getURI(s), c = r.getValue(s), n = r.getQName(s), l = i.createAttributeNS(e, n);
3237
+ this.locator && _(r.getLocator(s), l), l.value = l.nodeValue = c, a.setAttributeNode(l);
3238
+ }
3239
+ },
3240
+ endElement: function(e, t, n) {
3241
+ var r = this.currentElement;
3242
+ r.tagName, this.currentElement = r.parentNode;
3243
+ },
3244
+ startPrefixMapping: function(e, t) {},
3245
+ endPrefixMapping: function(e) {},
3246
+ processingInstruction: function(e, t) {
3247
+ var n = this.doc.createProcessingInstruction(e, t);
3248
+ this.locator && _(this.locator, n), b(this, n);
3249
+ },
3250
+ ignorableWhitespace: function(e, t, n) {},
3251
+ characters: function(e, t, n) {
3252
+ if (e = y.apply(this, arguments), e) {
3253
+ if (this.cdata) var r = this.doc.createCDATASection(e);
3254
+ else var r = this.doc.createTextNode(e);
3255
+ this.currentElement ? this.currentElement.appendChild(r) : /^\s*$/.test(e) && this.doc.appendChild(r), this.locator && _(this.locator, r);
3256
+ }
3257
+ },
3258
+ skippedEntity: function(e) {},
3259
+ endDocument: function() {
3260
+ this.doc.normalize();
3261
+ },
3262
+ setDocumentLocator: function(e) {
3263
+ (this.locator = e) && (e.lineNumber = 0);
3264
+ },
3265
+ comment: function(e, t, n) {
3266
+ e = y.apply(this, arguments);
3267
+ var r = this.doc.createComment(e);
3268
+ this.locator && _(this.locator, r), b(this, r);
3269
+ },
3270
+ startCDATA: function() {
3271
+ this.cdata = !0;
3272
+ },
3273
+ endCDATA: function() {
3274
+ this.cdata = !1;
3275
+ },
3276
+ startDTD: function(e, t, n) {
3277
+ var r = this.doc.implementation;
3278
+ if (r && r.createDocumentType) {
3279
+ var i = r.createDocumentType(e, t, n);
3280
+ this.locator && _(this.locator, i), b(this, i), this.doc.doctype = i;
3281
+ }
3282
+ },
3283
+ warning: function(e) {
3284
+ console.warn(`[xmldom warning] ` + e, v(this.locator));
3285
+ },
3286
+ error: function(e) {
3287
+ console.error(`[xmldom error] ` + e, v(this.locator));
3288
+ },
3289
+ fatalError: function(e) {
3290
+ throw new d(e, this.locator);
3291
+ }
3292
+ };
3293
+ function v(e) {
3294
+ if (e) return `
3295
+ @` + (e.systemId || ``) + `#[line:` + e.lineNumber + `,col:` + e.columnNumber + `]`;
3296
+ }
3297
+ function y(e, t, n) {
3298
+ return typeof e == `string` ? e.substr(t, n) : e.length >= t + n || t ? new java.lang.String(e, t, n) + `` : e;
3299
+ }
3300
+ `endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl`.replace(/\w+/g, function(e) {
3301
+ g.prototype[e] = function() {
3302
+ return null;
3303
+ };
3304
+ });
3305
+ function b(e, t) {
3306
+ e.currentElement ? e.currentElement.appendChild(t) : e.doc.appendChild(t);
3307
+ }
3308
+ exports.__DOMHandler = g, exports.normalizeLineEndings = p, exports.DOMParser = m;
3309
+ }));
3310
+ var lib_CBtriEt5_default = o$1(((exports) => {
3311
+ var t = n();
3312
+ exports.DOMImplementation = t.DOMImplementation, exports.XMLSerializer = t.XMLSerializer, exports.DOMParser = a().DOMParser;
3313
+ }))();
3314
+ //#endregion
3315
+ export { lib_CBtriEt5_default as default };
3316
+
3317
+ //# sourceMappingURL=lib-CBtriEt5.js.map
viewer/assets/liteDOM-Cp0aN3bP.js ADDED
@@ -0,0 +1,747 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //#region ../../node_modules/.pnpm/mathxyjax3@0.8.3/node_modules/mathxyjax3/dist/liteDOM-Cp0aN3bP.js
2
+ (function() {
3
+ var e, t, n, r, i, a, o, s, c, l = {
4
+ 244: function(e, t, n) {
5
+ var r, i = this && this.__extends || (r = function(e, t) {
6
+ return r = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t) {
7
+ e.__proto__ = t;
8
+ } || function(e, t) {
9
+ for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
10
+ }, r(e, t);
11
+ }, function(e, t) {
12
+ if (typeof t != `function` && t !== null) throw TypeError(`Class extends value ` + String(t) + ` is not a constructor or null`);
13
+ function n() {
14
+ this.constructor = e;
15
+ }
16
+ r(e, t), e.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());
17
+ }), a = this && this.__assign || function() {
18
+ return a = Object.assign || function(e) {
19
+ for (var t, n = 1, r = arguments.length; n < r; n++) for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
20
+ return e;
21
+ }, a.apply(this, arguments);
22
+ };
23
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.NodeMixin = t.NodeMixinOptions = void 0;
24
+ var o = n(77);
25
+ t.NodeMixinOptions = {
26
+ badCSS: !0,
27
+ badSizes: !0
28
+ }, t.NodeMixin = function(e, n) {
29
+ var r;
30
+ return n === void 0 && (n = {}), n = (0, o.userOptions)((0, o.defaultOptions)({}, t.NodeMixinOptions), n), r = function(e) {
31
+ function t() {
32
+ var t = [...arguments], n = e.call(this, t[0]) || this, r = n.constructor;
33
+ return n.options = (0, o.userOptions)((0, o.defaultOptions)({}, r.OPTIONS), t[1]), n;
34
+ }
35
+ return i(t, e), t.prototype.fontSize = function(t) {
36
+ return n.badCSS ? this.options.fontSize : e.prototype.fontSize.call(this, t);
37
+ }, t.prototype.fontFamily = function(t) {
38
+ return n.badCSS ? this.options.fontFamily : e.prototype.fontFamily.call(this, t);
39
+ }, t.prototype.nodeSize = function(r, i, a) {
40
+ if (i === void 0 && (i = 1), a === void 0 && (a = null), !n.badSizes) return e.prototype.nodeSize.call(this, r, i, a);
41
+ var o = this.textContent(r), s = Array.from(o.replace(t.cjkPattern, ``)).length;
42
+ return [(Array.from(o).length - s) * this.options.cjkCharWidth + s * this.options.unknownCharWidth, this.options.unknownCharHeight];
43
+ }, t.prototype.nodeBBox = function(t) {
44
+ return n.badSizes ? {
45
+ left: 0,
46
+ right: 0,
47
+ top: 0,
48
+ bottom: 0
49
+ } : e.prototype.nodeBBox.call(this, t);
50
+ }, t;
51
+ }(e), r.OPTIONS = a(a({}, n.badCSS ? {
52
+ fontSize: 16,
53
+ fontFamily: `Times`
54
+ } : {}), n.badSizes ? {
55
+ cjkCharWidth: 1,
56
+ unknownCharWidth: .6,
57
+ unknownCharHeight: .8
58
+ } : {}), r.cjkPattern = new RegExp([
59
+ `[`,
60
+ `ᄀ-ᅟ`,
61
+ `〈〉`,
62
+ `⺀-〾`,
63
+ `぀-㉇`,
64
+ `㉐-䶿`,
65
+ `一-꓆`,
66
+ `ꥠ-ꥼ`,
67
+ `가-힣`,
68
+ `豈-﫿`,
69
+ `︐-︙`,
70
+ `︰-﹫`,
71
+ `!-⦆¢-₩`,
72
+ `𛀀-𛀁`,
73
+ `🈀-🉑`,
74
+ `𠀀-𿿽`,
75
+ `]`
76
+ ].join(``), `gu`), r;
77
+ };
78
+ },
79
+ 877: function(e, t, n) {
80
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.LiteDocument = void 0;
81
+ var r = n(946);
82
+ t.LiteDocument = function() {
83
+ function e() {
84
+ this.root = new r.LiteElement(`html`, {}, [this.head = new r.LiteElement(`head`), this.body = new r.LiteElement(`body`)]), this.type = ``;
85
+ }
86
+ return Object.defineProperty(e.prototype, `kind`, {
87
+ get: function() {
88
+ return `#document`;
89
+ },
90
+ enumerable: !1,
91
+ configurable: !0
92
+ }), e;
93
+ }();
94
+ },
95
+ 946: function(e, t) {
96
+ var n = this && this.__assign || function() {
97
+ return n = Object.assign || function(e) {
98
+ for (var t, n = 1, r = arguments.length; n < r; n++) for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
99
+ return e;
100
+ }, n.apply(this, arguments);
101
+ }, r = this && this.__read || function(e, t) {
102
+ var n = typeof Symbol == `function` && e[Symbol.iterator];
103
+ if (!n) return e;
104
+ var r, i, a = n.call(e), o = [];
105
+ try {
106
+ for (; (t === void 0 || t-- > 0) && !(r = a.next()).done;) o.push(r.value);
107
+ } catch (e) {
108
+ i = { error: e };
109
+ } finally {
110
+ try {
111
+ r && !r.done && (n = a.return) && n.call(a);
112
+ } finally {
113
+ if (i) throw i.error;
114
+ }
115
+ }
116
+ return o;
117
+ }, i = this && this.__spreadArray || function(e, t, n) {
118
+ if (n || arguments.length === 2) for (var r, i = 0, a = t.length; i < a; i++) !r && i in t || (r ||= Array.prototype.slice.call(t, 0, i), r[i] = t[i]);
119
+ return e.concat(r || Array.prototype.slice.call(t));
120
+ }, a = this && this.__values || function(e) {
121
+ var t = typeof Symbol == `function` && Symbol.iterator, n = t && e[t], r = 0;
122
+ if (n) return n.call(e);
123
+ if (e && typeof e.length == `number`) return { next: function() {
124
+ return e && r >= e.length && (e = void 0), {
125
+ value: e && e[r++],
126
+ done: !e
127
+ };
128
+ } };
129
+ throw TypeError(t ? `Object is not iterable.` : `Symbol.iterator is not defined.`);
130
+ };
131
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.LiteElement = void 0, t.LiteElement = function(e, t, o) {
132
+ var s, c;
133
+ t === void 0 && (t = {}), o === void 0 && (o = []), this.kind = e, this.attributes = n({}, t), this.children = i([], r(o), !1);
134
+ try {
135
+ for (var l = a(this.children), u = l.next(); !u.done; u = l.next()) u.value.parent = this;
136
+ } catch (e) {
137
+ s = { error: e };
138
+ } finally {
139
+ try {
140
+ u && !u.done && (c = l.return) && c.call(l);
141
+ } finally {
142
+ if (s) throw s.error;
143
+ }
144
+ }
145
+ this.styles = null;
146
+ };
147
+ },
148
+ 6: function(e, t) {
149
+ var n = this && this.__read || function(e, t) {
150
+ var n = typeof Symbol == `function` && e[Symbol.iterator];
151
+ if (!n) return e;
152
+ var r, i, a = n.call(e), o = [];
153
+ try {
154
+ for (; (t === void 0 || t-- > 0) && !(r = a.next()).done;) o.push(r.value);
155
+ } catch (e) {
156
+ i = { error: e };
157
+ } finally {
158
+ try {
159
+ r && !r.done && (n = a.return) && n.call(a);
160
+ } finally {
161
+ if (i) throw i.error;
162
+ }
163
+ }
164
+ return o;
165
+ }, r = this && this.__spreadArray || function(e, t, n) {
166
+ if (n || arguments.length === 2) for (var r, i = 0, a = t.length; i < a; i++) !r && i in t || (r ||= Array.prototype.slice.call(t, 0, i), r[i] = t[i]);
167
+ return e.concat(r || Array.prototype.slice.call(t));
168
+ };
169
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.LiteList = void 0, t.LiteList = function() {
170
+ function e(e) {
171
+ this.nodes = [], this.nodes = r([], n(e), !1);
172
+ }
173
+ return e.prototype.append = function(e) {
174
+ this.nodes.push(e);
175
+ }, e.prototype[Symbol.iterator] = function() {
176
+ var e = 0;
177
+ return { next: function() {
178
+ return e === this.nodes.length ? {
179
+ value: null,
180
+ done: !0
181
+ } : {
182
+ value: this.nodes[e++],
183
+ done: !1
184
+ };
185
+ } };
186
+ }, e;
187
+ }();
188
+ },
189
+ 246: function(e, t, n) {
190
+ var r = this && this.__createBinding || (Object.create ? function(e, t, n, r) {
191
+ r === void 0 && (r = n);
192
+ var i = Object.getOwnPropertyDescriptor(t, n);
193
+ i && !(`get` in i ? !t.__esModule : i.writable || i.configurable) || (i = {
194
+ enumerable: !0,
195
+ get: function() {
196
+ return t[n];
197
+ }
198
+ }), Object.defineProperty(e, r, i);
199
+ } : function(e, t, n, r) {
200
+ r === void 0 && (r = n), e[r] = t[n];
201
+ }), i = this && this.__setModuleDefault || (Object.create ? function(e, t) {
202
+ Object.defineProperty(e, `default`, {
203
+ enumerable: !0,
204
+ value: t
205
+ });
206
+ } : function(e, t) {
207
+ e.default = t;
208
+ }), a = this && this.__importStar || function(e) {
209
+ if (e && e.__esModule) return e;
210
+ var t = {};
211
+ if (e != null) for (var n in e) n !== `default` && Object.prototype.hasOwnProperty.call(e, n) && r(t, e, n);
212
+ return i(t, e), t;
213
+ }, o = this && this.__read || function(e, t) {
214
+ var n = typeof Symbol == `function` && e[Symbol.iterator];
215
+ if (!n) return e;
216
+ var r, i, a = n.call(e), o = [];
217
+ try {
218
+ for (; (t === void 0 || t-- > 0) && !(r = a.next()).done;) o.push(r.value);
219
+ } catch (e) {
220
+ i = { error: e };
221
+ } finally {
222
+ try {
223
+ r && !r.done && (n = a.return) && n.call(a);
224
+ } finally {
225
+ if (i) throw i.error;
226
+ }
227
+ }
228
+ return o;
229
+ }, s = this && this.__values || function(e) {
230
+ var t = typeof Symbol == `function` && Symbol.iterator, n = t && e[t], r = 0;
231
+ if (n) return n.call(e);
232
+ if (e && typeof e.length == `number`) return { next: function() {
233
+ return e && r >= e.length && (e = void 0), {
234
+ value: e && e[r++],
235
+ done: !e
236
+ };
237
+ } };
238
+ throw TypeError(t ? `Object is not iterable.` : `Symbol.iterator is not defined.`);
239
+ };
240
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.LiteParser = t.PATTERNS = void 0;
241
+ var c, l = a(n(29)), u = n(946), d = n(735);
242
+ (function(e) {
243
+ e.TAGNAME = `[a-z][^\\s\\n>]*`, e.ATTNAME = `[a-z][^\\s\\n>=]*`, e.VALUE = `(?:'[^']*'|"[^"]*"|[^\\s\\n]+)`, e.VALUESPLIT = `(?:'([^']*)'|"([^"]*)"|([^\\s\\n]+))`, e.SPACE = `(?:\\s|\\n)+`, e.OPTIONALSPACE = `(?:\\s|\\n)*`, e.ATTRIBUTE = e.ATTNAME + `(?:` + e.OPTIONALSPACE + `=` + e.OPTIONALSPACE + e.VALUE + `)?`, e.ATTRIBUTESPLIT = `(` + e.ATTNAME + `)(?:` + e.OPTIONALSPACE + `=` + e.OPTIONALSPACE + e.VALUESPLIT + `)?`, e.TAG = `(<(?:` + e.TAGNAME + `(?:` + e.SPACE + e.ATTRIBUTE + `)*` + e.OPTIONALSPACE + `/?|/` + e.TAGNAME + `|!--[^]*?--|![^]*?)(?:>|$))`, e.tag = new RegExp(e.TAG, `i`), e.attr = new RegExp(e.ATTRIBUTE, `i`), e.attrsplit = new RegExp(e.ATTRIBUTESPLIT, `i`);
244
+ })(c = t.PATTERNS ||= {}), t.LiteParser = function() {
245
+ function e() {}
246
+ return e.prototype.parseFromString = function(e, t, n) {
247
+ t === void 0 && (t = `text/html`), n === void 0 && (n = null);
248
+ for (var r = n.createDocument(), i = n.body(r), a = e.replace(/<\?.*?\?>/g, ``).split(c.tag); a.length;) {
249
+ var o = a.shift(), s = a.shift();
250
+ o && this.addText(n, i, o), s && s.charAt(s.length - 1) === `>` && (s.charAt(1) === `!` ? this.addComment(n, i, s) : i = s.charAt(1) === `/` ? this.closeTag(n, i, s) : this.openTag(n, i, s, a));
251
+ }
252
+ return this.checkDocument(n, r), r;
253
+ }, e.prototype.addText = function(e, t, n) {
254
+ return n = l.translate(n), e.append(t, e.text(n));
255
+ }, e.prototype.addComment = function(e, t, n) {
256
+ return e.append(t, new d.LiteComment(n));
257
+ }, e.prototype.closeTag = function(e, t, n) {
258
+ for (var r = n.slice(2, n.length - 1).toLowerCase(); e.parent(t) && e.kind(t) !== r;) t = e.parent(t);
259
+ return e.parent(t);
260
+ }, e.prototype.openTag = function(e, t, n, r) {
261
+ var i = this.constructor.PCDATA, a = this.constructor.SELF_CLOSING, o = n.match(/<(.*?)[\s\n>\/]/)[1].toLowerCase(), s = e.node(o), l = n.replace(/^<.*?[\s\n>]/, ``).split(c.attrsplit);
262
+ return (l.pop().match(/>$/) || l.length < 5) && (this.addAttributes(e, s, l), e.append(t, s), a[o] || n.match(/\/>$/) || (i[o] ? this.handlePCDATA(e, s, o, r) : t = s)), t;
263
+ }, e.prototype.addAttributes = function(e, t, n) {
264
+ for (var r = this.constructor.CDATA_ATTR; n.length;) {
265
+ var i = o(n.splice(0, 5), 5), a = i[1], s = i[2], c = i[3], u = i[4], d = s || c || u || ``;
266
+ r[a] || (d = l.translate(d)), e.setAttribute(t, a, d);
267
+ }
268
+ }, e.prototype.handlePCDATA = function(e, t, n, r) {
269
+ for (var i = [], a = `</` + n + `>`, o = ``; r.length && o !== a;) i.push(o), i.push(r.shift()), o = r.shift();
270
+ e.append(t, e.text(i.join(``)));
271
+ }, e.prototype.checkDocument = function(e, t) {
272
+ var n, r, i, a, o = this.getOnlyChild(e, e.body(t));
273
+ if (o) {
274
+ try {
275
+ for (var c = s(e.childNodes(e.body(t))), l = c.next(); !l.done && (p = l.value) !== o; l = c.next()) p instanceof d.LiteComment && p.value.match(/^<!DOCTYPE/) && (t.type = p.value);
276
+ } catch (e) {
277
+ n = { error: e };
278
+ } finally {
279
+ try {
280
+ l && !l.done && (r = c.return) && r.call(c);
281
+ } finally {
282
+ if (n) throw n.error;
283
+ }
284
+ }
285
+ switch (e.kind(o)) {
286
+ case `html`:
287
+ try {
288
+ for (var u = s(o.children), f = u.next(); !f.done; f = u.next()) {
289
+ var p = f.value;
290
+ switch (e.kind(p)) {
291
+ case `head`:
292
+ t.head = p;
293
+ break;
294
+ case `body`: t.body = p;
295
+ }
296
+ }
297
+ } catch (e) {
298
+ i = { error: e };
299
+ } finally {
300
+ try {
301
+ f && !f.done && (a = u.return) && a.call(u);
302
+ } finally {
303
+ if (i) throw i.error;
304
+ }
305
+ }
306
+ t.root = o, e.remove(o), e.parent(t.body) !== o && e.append(o, t.body), e.parent(t.head) !== o && e.insert(t.head, t.body);
307
+ break;
308
+ case `head`:
309
+ t.head = e.replace(o, t.head);
310
+ break;
311
+ case `body`: t.body = e.replace(o, t.body);
312
+ }
313
+ }
314
+ }, e.prototype.getOnlyChild = function(e, t) {
315
+ var n, r, i = null;
316
+ try {
317
+ for (var a = s(e.childNodes(t)), o = a.next(); !o.done; o = a.next()) {
318
+ var c = o.value;
319
+ if (c instanceof u.LiteElement) {
320
+ if (i) return null;
321
+ i = c;
322
+ }
323
+ }
324
+ } catch (e) {
325
+ n = { error: e };
326
+ } finally {
327
+ try {
328
+ o && !o.done && (r = a.return) && r.call(a);
329
+ } finally {
330
+ if (n) throw n.error;
331
+ }
332
+ }
333
+ return i;
334
+ }, e.prototype.serialize = function(e, t, n) {
335
+ var r = this;
336
+ n === void 0 && (n = !1);
337
+ var i = this.constructor.SELF_CLOSING, a = this.constructor.CDATA_ATTR, o = e.kind(t), s = e.allAttributes(t).map((function(e) {
338
+ return e.name + `="` + (a[e.name] ? e.value : r.protectAttribute(e.value)) + `"`;
339
+ })).join(` `), c = this.serializeInner(e, t, n);
340
+ return `<` + o + (s ? ` ` + s : ``) + (n && !c || i[o] ? n ? `/>` : `>` : `>${c}</${o}>`);
341
+ }, e.prototype.serializeInner = function(e, t, n) {
342
+ var r = this;
343
+ return n === void 0 && (n = !1), this.constructor.PCDATA.hasOwnProperty(t.kind) ? e.childNodes(t).map((function(t) {
344
+ return e.value(t);
345
+ })).join(``) : e.childNodes(t).map((function(t) {
346
+ var i = e.kind(t);
347
+ return i === `#text` ? r.protectHTML(e.value(t)) : i === `#comment` ? t.value : r.serialize(e, t, n);
348
+ })).join(``);
349
+ }, e.prototype.protectAttribute = function(e) {
350
+ return typeof e != `string` && (e = String(e)), e.replace(/"/g, `&quot;`);
351
+ }, e.prototype.protectHTML = function(e) {
352
+ return e.replace(/&/g, `&amp;`).replace(/</g, `&lt;`).replace(/>/g, `&gt;`);
353
+ }, e.SELF_CLOSING = {
354
+ area: !0,
355
+ base: !0,
356
+ br: !0,
357
+ col: !0,
358
+ command: !0,
359
+ embed: !0,
360
+ hr: !0,
361
+ img: !0,
362
+ input: !0,
363
+ keygen: !0,
364
+ link: !0,
365
+ menuitem: !0,
366
+ meta: !0,
367
+ param: !0,
368
+ source: !0,
369
+ track: !0,
370
+ wbr: !0
371
+ }, e.PCDATA = {
372
+ option: !0,
373
+ textarea: !0,
374
+ fieldset: !0,
375
+ title: !0,
376
+ style: !0,
377
+ script: !0
378
+ }, e.CDATA_ATTR = {
379
+ style: !0,
380
+ datafld: !0,
381
+ datasrc: !0,
382
+ href: !0,
383
+ src: !0,
384
+ longdesc: !0,
385
+ usemap: !0,
386
+ cite: !0,
387
+ datetime: !0,
388
+ action: !0,
389
+ axis: !0,
390
+ profile: !0,
391
+ content: !0,
392
+ scheme: !0
393
+ }, e;
394
+ }();
395
+ },
396
+ 735: function(e, t) {
397
+ var n, r = this && this.__extends || (n = function(e, t) {
398
+ return n = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t) {
399
+ e.__proto__ = t;
400
+ } || function(e, t) {
401
+ for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
402
+ }, n(e, t);
403
+ }, function(e, t) {
404
+ if (typeof t != `function` && t !== null) throw TypeError(`Class extends value ` + String(t) + ` is not a constructor or null`);
405
+ function r() {
406
+ this.constructor = e;
407
+ }
408
+ n(e, t), e.prototype = t === null ? Object.create(t) : (r.prototype = t.prototype, new r());
409
+ });
410
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.LiteComment = t.LiteText = void 0;
411
+ var i = function() {
412
+ function e(e) {
413
+ e === void 0 && (e = ``), this.value = e;
414
+ }
415
+ return Object.defineProperty(e.prototype, `kind`, {
416
+ get: function() {
417
+ return `#text`;
418
+ },
419
+ enumerable: !1,
420
+ configurable: !0
421
+ }), e;
422
+ }();
423
+ t.LiteText = i, t.LiteComment = function(e) {
424
+ function t() {
425
+ return e !== null && e.apply(this, arguments) || this;
426
+ }
427
+ return r(t, e), Object.defineProperty(t.prototype, `kind`, {
428
+ get: function() {
429
+ return `#comment`;
430
+ },
431
+ enumerable: !1,
432
+ configurable: !0
433
+ }), t;
434
+ }(i);
435
+ },
436
+ 492: function(e, t, n) {
437
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.LiteWindow = void 0;
438
+ var r = n(946), i = n(877), a = n(6), o = n(246);
439
+ t.LiteWindow = function() {
440
+ this.DOMParser = o.LiteParser, this.NodeList = a.LiteList, this.HTMLCollection = a.LiteList, this.HTMLElement = r.LiteElement, this.DocumentFragment = a.LiteList, this.Document = i.LiteDocument, this.document = new i.LiteDocument();
441
+ };
442
+ },
443
+ 250: function(e, t, n) {
444
+ var r, i = this && this.__extends || (r = function(e, t) {
445
+ return r = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t) {
446
+ e.__proto__ = t;
447
+ } || function(e, t) {
448
+ for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
449
+ }, r(e, t);
450
+ }, function(e, t) {
451
+ if (typeof t != `function` && t !== null) throw TypeError(`Class extends value ` + String(t) + ` is not a constructor or null`);
452
+ function n() {
453
+ this.constructor = e;
454
+ }
455
+ r(e, t), e.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());
456
+ }), a = this && this.__assign || function() {
457
+ return a = Object.assign || function(e) {
458
+ for (var t, n = 1, r = arguments.length; n < r; n++) for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
459
+ return e;
460
+ }, a.apply(this, arguments);
461
+ }, o = this && this.__values || function(e) {
462
+ var t = typeof Symbol == `function` && Symbol.iterator, n = t && e[t], r = 0;
463
+ if (n) return n.call(e);
464
+ if (e && typeof e.length == `number`) return { next: function() {
465
+ return e && r >= e.length && (e = void 0), {
466
+ value: e && e[r++],
467
+ done: !e
468
+ };
469
+ } };
470
+ throw TypeError(t ? `Object is not iterable.` : `Symbol.iterator is not defined.`);
471
+ }, s = this && this.__read || function(e, t) {
472
+ var n = typeof Symbol == `function` && e[Symbol.iterator];
473
+ if (!n) return e;
474
+ var r, i, a = n.call(e), o = [];
475
+ try {
476
+ for (; (t === void 0 || t-- > 0) && !(r = a.next()).done;) o.push(r.value);
477
+ } catch (e) {
478
+ i = { error: e };
479
+ } finally {
480
+ try {
481
+ r && !r.done && (n = a.return) && n.call(a);
482
+ } finally {
483
+ if (i) throw i.error;
484
+ }
485
+ }
486
+ return o;
487
+ }, c = this && this.__spreadArray || function(e, t, n) {
488
+ if (n || arguments.length === 2) for (var r, i = 0, a = t.length; i < a; i++) !r && i in t || (r ||= Array.prototype.slice.call(t, 0, i), r[i] = t[i]);
489
+ return e.concat(r || Array.prototype.slice.call(t));
490
+ };
491
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.liteAdaptor = t.LiteAdaptor = t.LiteBase = void 0;
492
+ var l = n(857), u = n(244), d = n(877), f = n(946), p = n(735), m = n(492), h = n(246), g = n(878), _ = function(e) {
493
+ function t() {
494
+ var t = e.call(this) || this;
495
+ return t.parser = new h.LiteParser(), t.window = new m.LiteWindow(), t;
496
+ }
497
+ return i(t, e), t.prototype.parse = function(e, t) {
498
+ return this.parser.parseFromString(e, t, this);
499
+ }, t.prototype.create = function(e, t) {
500
+ return t === void 0 && (t = null), new f.LiteElement(e);
501
+ }, t.prototype.text = function(e) {
502
+ return new p.LiteText(e);
503
+ }, t.prototype.comment = function(e) {
504
+ return new p.LiteComment(e);
505
+ }, t.prototype.createDocument = function() {
506
+ return new d.LiteDocument();
507
+ }, t.prototype.head = function(e) {
508
+ return e.head;
509
+ }, t.prototype.body = function(e) {
510
+ return e.body;
511
+ }, t.prototype.root = function(e) {
512
+ return e.root;
513
+ }, t.prototype.doctype = function(e) {
514
+ return e.type;
515
+ }, t.prototype.tags = function(e, t, n) {
516
+ n === void 0 && (n = null);
517
+ var r = [], i = [];
518
+ if (n) return i;
519
+ for (var a = e; a;) {
520
+ var o = a.kind;
521
+ o !== `#text` && o !== `#comment` && (a = a, o === t && i.push(a), a.children.length && (r = a.children.concat(r))), a = r.shift();
522
+ }
523
+ return i;
524
+ }, t.prototype.elementById = function(e, t) {
525
+ for (var n = [], r = e; r;) {
526
+ if (r.kind !== `#text` && r.kind !== `#comment`) {
527
+ if ((r = r).attributes.id === t) return r;
528
+ r.children.length && (n = r.children.concat(n));
529
+ }
530
+ r = n.shift();
531
+ }
532
+ return null;
533
+ }, t.prototype.elementsByClass = function(e, t) {
534
+ for (var n = [], r = [], i = e; i;) i.kind !== `#text` && i.kind !== `#comment` && (((i = i).attributes.class || ``).trim().split(/ +/).includes(t) && r.push(i), i.children.length && (n = i.children.concat(n))), i = n.shift();
535
+ return r;
536
+ }, t.prototype.getElements = function(e, t) {
537
+ var n, r, i = [], a = this.body(t);
538
+ try {
539
+ for (var s = o(e), c = s.next(); !c.done; c = s.next()) {
540
+ var l = c.value;
541
+ if (typeof l == `string`) if (l.charAt(0) === `#`) {
542
+ var u = this.elementById(a, l.slice(1));
543
+ u && i.push(u);
544
+ } else l.charAt(0) === `.` ? i = i.concat(this.elementsByClass(a, l.slice(1))) : l.match(/^[-a-z][-a-z0-9]*$/i) && (i = i.concat(this.tags(a, l)));
545
+ else Array.isArray(l) ? i = i.concat(l) : l instanceof this.window.NodeList || l instanceof this.window.HTMLCollection ? i = i.concat(l.nodes) : i.push(l);
546
+ }
547
+ } catch (e) {
548
+ n = { error: e };
549
+ } finally {
550
+ try {
551
+ c && !c.done && (r = s.return) && r.call(s);
552
+ } finally {
553
+ if (n) throw n.error;
554
+ }
555
+ }
556
+ return i;
557
+ }, t.prototype.contains = function(e, t) {
558
+ for (; t && t !== e;) t = this.parent(t);
559
+ return !!t;
560
+ }, t.prototype.parent = function(e) {
561
+ return e.parent;
562
+ }, t.prototype.childIndex = function(e) {
563
+ return e.parent ? e.parent.children.findIndex((function(t) {
564
+ return t === e;
565
+ })) : -1;
566
+ }, t.prototype.append = function(e, t) {
567
+ return t.parent && this.remove(t), e.children.push(t), t.parent = e, t;
568
+ }, t.prototype.insert = function(e, t) {
569
+ if (e.parent && this.remove(e), t && t.parent) {
570
+ var n = this.childIndex(t);
571
+ t.parent.children.splice(n, 0, e), e.parent = t.parent;
572
+ }
573
+ }, t.prototype.remove = function(e) {
574
+ var t = this.childIndex(e);
575
+ return t >= 0 && e.parent.children.splice(t, 1), e.parent = null, e;
576
+ }, t.prototype.replace = function(e, t) {
577
+ var n = this.childIndex(t);
578
+ return n >= 0 && (t.parent.children[n] = e, e.parent = t.parent, t.parent = null), t;
579
+ }, t.prototype.clone = function(e) {
580
+ var t = this, n = new f.LiteElement(e.kind);
581
+ return n.attributes = a({}, e.attributes), n.children = e.children.map((function(e) {
582
+ if (e.kind === `#text`) return new p.LiteText(e.value);
583
+ if (e.kind === `#comment`) return new p.LiteComment(e.value);
584
+ var r = t.clone(e);
585
+ return r.parent = n, r;
586
+ })), n;
587
+ }, t.prototype.split = function(e, t) {
588
+ var n = new p.LiteText(e.value.slice(t));
589
+ return e.value = e.value.slice(0, t), e.parent.children.splice(this.childIndex(e) + 1, 0, n), n.parent = e.parent, n;
590
+ }, t.prototype.next = function(e) {
591
+ var t = e.parent;
592
+ if (!t) return null;
593
+ var n = this.childIndex(e) + 1;
594
+ return n >= 0 && n < t.children.length ? t.children[n] : null;
595
+ }, t.prototype.previous = function(e) {
596
+ var t = e.parent;
597
+ if (!t) return null;
598
+ var n = this.childIndex(e) - 1;
599
+ return n >= 0 ? t.children[n] : null;
600
+ }, t.prototype.firstChild = function(e) {
601
+ return e.children[0];
602
+ }, t.prototype.lastChild = function(e) {
603
+ return e.children[e.children.length - 1];
604
+ }, t.prototype.childNodes = function(e) {
605
+ return c([], s(e.children), !1);
606
+ }, t.prototype.childNode = function(e, t) {
607
+ return e.children[t];
608
+ }, t.prototype.kind = function(e) {
609
+ return e.kind;
610
+ }, t.prototype.value = function(e) {
611
+ return e.kind === `#text` ? e.value : e.kind === `#comment` ? e.value.replace(/^<!(--)?((?:.|\n)*)\1>$/, `$2`) : ``;
612
+ }, t.prototype.textContent = function(e) {
613
+ var t = this;
614
+ return e.children.reduce((function(e, n) {
615
+ return e + (n.kind === `#text` ? n.value : n.kind === `#comment` ? `` : t.textContent(n));
616
+ }), ``);
617
+ }, t.prototype.innerHTML = function(e) {
618
+ return this.parser.serializeInner(this, e);
619
+ }, t.prototype.outerHTML = function(e) {
620
+ return this.parser.serialize(this, e);
621
+ }, t.prototype.serializeXML = function(e) {
622
+ return this.parser.serialize(this, e, !0);
623
+ }, t.prototype.setAttribute = function(e, t, n, r) {
624
+ r === void 0 && (r = null), typeof n != `string` && (n = String(n)), r && (t = r.replace(/.*\//, ``) + `:` + t.replace(/^.*:/, ``)), e.attributes[t] = n, t === `style` && (e.styles = null);
625
+ }, t.prototype.getAttribute = function(e, t) {
626
+ return e.attributes[t];
627
+ }, t.prototype.removeAttribute = function(e, t) {
628
+ delete e.attributes[t];
629
+ }, t.prototype.hasAttribute = function(e, t) {
630
+ return e.attributes.hasOwnProperty(t);
631
+ }, t.prototype.allAttributes = function(e) {
632
+ var t, n, r = e.attributes, i = [];
633
+ try {
634
+ for (var a = o(Object.keys(r)), s = a.next(); !s.done; s = a.next()) {
635
+ var c = s.value;
636
+ i.push({
637
+ name: c,
638
+ value: r[c]
639
+ });
640
+ }
641
+ } catch (e) {
642
+ t = { error: e };
643
+ } finally {
644
+ try {
645
+ s && !s.done && (n = a.return) && n.call(a);
646
+ } finally {
647
+ if (t) throw t.error;
648
+ }
649
+ }
650
+ return i;
651
+ }, t.prototype.addClass = function(e, t) {
652
+ var n = (e.attributes.class || ``).split(/ /);
653
+ n.find((function(e) {
654
+ return e === t;
655
+ })) || (n.push(t), e.attributes.class = n.join(` `));
656
+ }, t.prototype.removeClass = function(e, t) {
657
+ var n = (e.attributes.class || ``).split(/ /), r = n.findIndex((function(e) {
658
+ return e === t;
659
+ }));
660
+ r >= 0 && (n.splice(r, 1), e.attributes.class = n.join(` `));
661
+ }, t.prototype.hasClass = function(e, t) {
662
+ return !!(e.attributes.class || ``).split(/ /).find((function(e) {
663
+ return e === t;
664
+ }));
665
+ }, t.prototype.setStyle = function(e, t, n) {
666
+ e.styles ||= new g.Styles(this.getAttribute(e, `style`)), e.styles.set(t, n), e.attributes.style = e.styles.cssText;
667
+ }, t.prototype.getStyle = function(e, t) {
668
+ if (!e.styles) {
669
+ var n = this.getAttribute(e, `style`);
670
+ if (!n) return ``;
671
+ e.styles = new g.Styles(n);
672
+ }
673
+ return e.styles.get(t);
674
+ }, t.prototype.allStyles = function(e) {
675
+ return this.getAttribute(e, `style`);
676
+ }, t.prototype.insertRules = function(e, t) {
677
+ e.children = [this.text(t.join(`
678
+
679
+ `) + `
680
+
681
+ ` + this.textContent(e))];
682
+ }, t.prototype.fontSize = function(e) {
683
+ return 0;
684
+ }, t.prototype.fontFamily = function(e) {
685
+ return ``;
686
+ }, t.prototype.nodeSize = function(e, t, n) {
687
+ return t === void 0 && (t = 1), n === void 0 && (n = null), [0, 0];
688
+ }, t.prototype.nodeBBox = function(e) {
689
+ return {
690
+ left: 0,
691
+ right: 0,
692
+ top: 0,
693
+ bottom: 0
694
+ };
695
+ }, t;
696
+ }(l.AbstractDOMAdaptor);
697
+ t.LiteBase = _;
698
+ var v = function(e) {
699
+ function t() {
700
+ return e !== null && e.apply(this, arguments) || this;
701
+ }
702
+ return i(t, e), t;
703
+ }((0, u.NodeMixin)(_));
704
+ t.LiteAdaptor = v, t.liteAdaptor = function(e) {
705
+ return e === void 0 && (e = null), new v(null, e);
706
+ };
707
+ },
708
+ 306: function(e, t) {
709
+ t.q = void 0, t.q = `3.2.2`;
710
+ },
711
+ 723: function(e, t) {
712
+ MathJax._.components.global.isObject, MathJax._.components.global.combineConfig, MathJax._.components.global.combineDefaults, t.r8 = MathJax._.components.global.combineWithMathJax, MathJax._.components.global.MathJax;
713
+ },
714
+ 857: function(e, t) {
715
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.AbstractDOMAdaptor = MathJax._.core.DOMAdaptor.AbstractDOMAdaptor;
716
+ },
717
+ 29: function(e, t) {
718
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.options = MathJax._.util.Entities.options, t.entities = MathJax._.util.Entities.entities, t.add = MathJax._.util.Entities.add, t.remove = MathJax._.util.Entities.remove, t.translate = MathJax._.util.Entities.translate, t.numeric = MathJax._.util.Entities.numeric;
719
+ },
720
+ 77: function(e, t) {
721
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.isObject = MathJax._.util.Options.isObject, t.APPEND = MathJax._.util.Options.APPEND, t.REMOVE = MathJax._.util.Options.REMOVE, t.OPTIONS = MathJax._.util.Options.OPTIONS, t.Expandable = MathJax._.util.Options.Expandable, t.expandable = MathJax._.util.Options.expandable, t.makeArray = MathJax._.util.Options.makeArray, t.keys = MathJax._.util.Options.keys, t.copy = MathJax._.util.Options.copy, t.insert = MathJax._.util.Options.insert, t.defaultOptions = MathJax._.util.Options.defaultOptions, t.userOptions = MathJax._.util.Options.userOptions, t.selectOptions = MathJax._.util.Options.selectOptions, t.selectOptionsFromKeys = MathJax._.util.Options.selectOptionsFromKeys, t.separateOptions = MathJax._.util.Options.separateOptions, t.lookup = MathJax._.util.Options.lookup;
722
+ },
723
+ 878: function(e, t) {
724
+ Object.defineProperty(t, `__esModule`, { value: !0 }), t.Styles = MathJax._.util.Styles.Styles;
725
+ }
726
+ }, u = {};
727
+ function d(e) {
728
+ var t = u[e];
729
+ if (t !== void 0) return t.exports;
730
+ var n = u[e] = { exports: {} };
731
+ return l[e].call(n.exports, n, n.exports, d), n.exports;
732
+ }
733
+ e = d(723), t = d(306), n = d(250), r = d(877), i = d(946), a = d(6), o = d(246), s = d(735), c = d(492), MathJax.loader && MathJax.loader.checkVersion(`adaptors/liteDOM`, t.q, `adaptors`), (0, e.r8)({ _: { adaptors: {
734
+ liteAdaptor: n,
735
+ lite: {
736
+ Document: r,
737
+ Element: i,
738
+ List: a,
739
+ Parser: o,
740
+ Text: s,
741
+ Window: c
742
+ }
743
+ } } }), MathJax.startup && (MathJax.startup.registerConstructor(`liteAdaptor`, n.liteAdaptor), MathJax.startup.useAdaptor(`liteAdaptor`, !0));
744
+ })();
745
+ //#endregion
746
+
747
+ //# sourceMappingURL=liteDOM-Cp0aN3bP.js.map
viewer/assets/tex-svg-full-BI3fonbT.js ADDED
The diff for this file is too large to render. See raw diff
 
viewer/assets/wgxpath.install-node-Csk64Aj9.js ADDED
@@ -0,0 +1,1100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { n as o } from "./chunk-DfAF0w94.js";
2
+ //#region ../../node_modules/.pnpm/mathxyjax3@0.8.3/node_modules/mathxyjax3/dist/wgxpath.install-node-Csk64Aj9.js
3
+ var e = globalThis;
4
+ var wgxpath_install_node_Csk64Aj9_default = o(((exports, n) => {
5
+ (function() {
6
+ var e = this;
7
+ function t(e) {
8
+ var t = typeof e;
9
+ if (t == `object`) if (e) {
10
+ if (e instanceof Array) return `array`;
11
+ if (e instanceof Object) return t;
12
+ var n = Object.prototype.toString.call(e);
13
+ if (n == `[object Window]`) return `object`;
14
+ if (n == `[object Array]` || typeof e.length == `number` && e.splice !== void 0 && e.propertyIsEnumerable !== void 0 && !e.propertyIsEnumerable(`splice`)) return `array`;
15
+ if (n == `[object Function]` || e.call !== void 0 && e.propertyIsEnumerable !== void 0 && !e.propertyIsEnumerable(`call`)) return `function`;
16
+ } else return `null`;
17
+ else if (t == `function` && e.call === void 0) return `object`;
18
+ return t;
19
+ }
20
+ function r(e) {
21
+ return typeof e == `string`;
22
+ }
23
+ function i(e, t, n) {
24
+ return e.call.apply(e.bind, arguments);
25
+ }
26
+ function a(e, t, n) {
27
+ if (!e) throw Error();
28
+ if (2 < arguments.length) {
29
+ var r = Array.prototype.slice.call(arguments, 2);
30
+ return function() {
31
+ var n = Array.prototype.slice.call(arguments);
32
+ return Array.prototype.unshift.apply(n, r), e.apply(t, n);
33
+ };
34
+ }
35
+ return function() {
36
+ return e.apply(t, arguments);
37
+ };
38
+ }
39
+ function o(e, t, n) {
40
+ return o = Function.prototype.bind && Function.prototype.bind.toString().indexOf(`native code`) != -1 ? i : a, o.apply(null, arguments);
41
+ }
42
+ function s(e, t) {
43
+ var n = Array.prototype.slice.call(arguments, 1);
44
+ return function() {
45
+ var t = n.slice();
46
+ return t.push.apply(t, arguments), e.apply(this, t);
47
+ };
48
+ }
49
+ function c(e) {
50
+ var t = D;
51
+ function n() {}
52
+ n.prototype = t.prototype, e.G = t.prototype, e.prototype = new n(), e.prototype.constructor = e, e.F = function(e, n, r) {
53
+ for (var i = Array(arguments.length - 2), a = 2; a < arguments.length; a++) i[a - 2] = arguments[a];
54
+ return t.prototype[n].apply(e, i);
55
+ };
56
+ }
57
+ var l = String.prototype.trim ? function(e) {
58
+ return e.trim();
59
+ } : function(e) {
60
+ return e.replace(/^[\s\xa0]+|[\s\xa0]+$/g, ``);
61
+ };
62
+ function u(e, t) {
63
+ return e.indexOf(t) != -1;
64
+ }
65
+ function ee(e, t) {
66
+ return e < t ? -1 : e > t ? 1 : 0;
67
+ }
68
+ var d = Array.prototype.indexOf ? function(e, t, n) {
69
+ return Array.prototype.indexOf.call(e, t, n);
70
+ } : function(e, t, n) {
71
+ if (n = n == null ? 0 : 0 > n ? Math.max(0, e.length + n) : n, r(e)) return r(t) && t.length == 1 ? e.indexOf(t, n) : -1;
72
+ for (; n < e.length; n++) if (n in e && e[n] === t) return n;
73
+ return -1;
74
+ }, f = Array.prototype.forEach ? function(e, t, n) {
75
+ Array.prototype.forEach.call(e, t, n);
76
+ } : function(e, t, n) {
77
+ for (var i = e.length, a = r(e) ? e.split(``) : e, o = 0; o < i; o++) o in a && t.call(n, a[o], o, e);
78
+ }, te = Array.prototype.filter ? function(e, t, n) {
79
+ return Array.prototype.filter.call(e, t, n);
80
+ } : function(e, t, n) {
81
+ for (var i = e.length, a = [], o = 0, s = r(e) ? e.split(``) : e, c = 0; c < i; c++) if (c in s) {
82
+ var l = s[c];
83
+ t.call(n, l, c, e) && (a[o++] = l);
84
+ }
85
+ return a;
86
+ }, p = Array.prototype.reduce ? function(e, t, n, r) {
87
+ return r && (t = o(t, r)), Array.prototype.reduce.call(e, t, n);
88
+ } : function(e, t, n, r) {
89
+ var i = n;
90
+ return f(e, function(n, a) {
91
+ i = t.call(r, i, n, a, e);
92
+ }), i;
93
+ }, ne = Array.prototype.some ? function(e, t, n) {
94
+ return Array.prototype.some.call(e, t, n);
95
+ } : function(e, t, n) {
96
+ for (var i = e.length, a = r(e) ? e.split(``) : e, o = 0; o < i; o++) if (o in a && t.call(n, a[o], o, e)) return !0;
97
+ return !1;
98
+ };
99
+ function re(e, t) {
100
+ var n;
101
+ a: {
102
+ n = e.length;
103
+ for (var i = r(e) ? e.split(``) : e, a = 0; a < n; a++) if (a in i && t.call(void 0, i[a], a, e)) {
104
+ n = a;
105
+ break a;
106
+ }
107
+ n = -1;
108
+ }
109
+ return 0 > n ? null : r(e) ? e.charAt(n) : e[n];
110
+ }
111
+ function ie(e) {
112
+ return Array.prototype.concat.apply(Array.prototype, arguments);
113
+ }
114
+ function ae(e, t, n) {
115
+ return 2 >= arguments.length ? Array.prototype.slice.call(e, t) : Array.prototype.slice.call(e, t, n);
116
+ }
117
+ var m;
118
+ a: {
119
+ var oe = e.navigator;
120
+ if (oe) {
121
+ var se = oe.userAgent;
122
+ if (se) {
123
+ m = se;
124
+ break a;
125
+ }
126
+ }
127
+ m = ``;
128
+ }
129
+ var ce = u(m, `Opera`) || u(m, `OPR`), h = u(m, `Trident`) || u(m, `MSIE`), le = u(m, `Edge`), ue = u(m, `Gecko`) && !(u(m.toLowerCase(), `webkit`) && !u(m, `Edge`)) && !(u(m, `Trident`) || u(m, `MSIE`)) && !u(m, `Edge`), de = u(m.toLowerCase(), `webkit`) && !u(m, `Edge`);
130
+ function fe() {
131
+ var t = e.document;
132
+ return t ? t.documentMode : void 0;
133
+ }
134
+ var g;
135
+ a: {
136
+ var pe = ``, me = function() {
137
+ var e = m;
138
+ if (ue) return /rv\:([^\);]+)(\)|;)/.exec(e);
139
+ if (le) return /Edge\/([\d\.]+)/.exec(e);
140
+ if (h) return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(e);
141
+ if (de) return /WebKit\/(\S+)/.exec(e);
142
+ if (ce) return /(?:Version)[ \/]?(\S+)/.exec(e);
143
+ }();
144
+ if (me && (pe = me ? me[1] : ``), h) {
145
+ var he = fe();
146
+ if (he != null && he > parseFloat(pe)) {
147
+ g = String(he);
148
+ break a;
149
+ }
150
+ }
151
+ g = pe;
152
+ }
153
+ var ge = {};
154
+ function _e(e) {
155
+ if (!ge[e]) {
156
+ for (var t = 0, n = l(String(g)).split(`.`), r = l(String(e)).split(`.`), i = Math.max(n.length, r.length), a = 0; t == 0 && a < i; a++) {
157
+ var o = n[a] || ``, s = r[a] || ``, c = /(\d*)(\D*)/g, u = /(\d*)(\D*)/g;
158
+ do {
159
+ var d = c.exec(o) || [
160
+ ``,
161
+ ``,
162
+ ``
163
+ ], f = u.exec(s) || [
164
+ ``,
165
+ ``,
166
+ ``
167
+ ];
168
+ if (d[0].length == 0 && f[0].length == 0) break;
169
+ t = ee(d[1].length == 0 ? 0 : parseInt(d[1], 10), f[1].length == 0 ? 0 : parseInt(f[1], 10)) || ee(d[2].length == 0, f[2].length == 0) || ee(d[2], f[2]);
170
+ } while (t == 0);
171
+ }
172
+ ge[e] = 0 <= t;
173
+ }
174
+ }
175
+ var ve = e.document, _ = ve && h ? fe() || (ve.compatMode == `CSS1Compat` ? parseInt(g, 10) : 5) : void 0, v = h && !(9 <= Number(_)), ye = h && !(8 <= Number(_));
176
+ function y(e, t, n, r) {
177
+ this.a = e, this.nodeName = n, this.nodeValue = r, this.nodeType = 2, this.parentNode = this.ownerElement = t;
178
+ }
179
+ function be(e, t) {
180
+ var n = ye && t.nodeName == `href` ? e.getAttribute(t.nodeName, 2) : t.nodeValue;
181
+ return new y(t, e, t.nodeName, n);
182
+ }
183
+ function b(e) {
184
+ var t = null, n = e.nodeType;
185
+ if (n == 1 && (t = e.textContent, t = t == null || t == null ? e.innerText : t, t = t == null || t == null ? `` : t), typeof t != `string`) if (v && e.nodeName.toLowerCase() == `title` && n == 1) t = e.text;
186
+ else if (n == 9 || n == 1) {
187
+ e = n == 9 ? e.documentElement : e.firstChild;
188
+ for (var n = 0, r = [], t = ``; e;) {
189
+ do
190
+ e.nodeType != 1 && (t += e.nodeValue), v && e.nodeName.toLowerCase() == `title` && (t += e.text), r[n++] = e;
191
+ while (e = e.firstChild);
192
+ for (; n && !(e = r[--n].nextSibling););
193
+ }
194
+ } else t = e.nodeValue;
195
+ return `` + t;
196
+ }
197
+ function x(e, t, n) {
198
+ if (t === null) return !0;
199
+ try {
200
+ if (!e.getAttribute) return !1;
201
+ } catch {
202
+ return !1;
203
+ }
204
+ return ye && t == `class` && (t = `className`), n == null ? !!e.getAttribute(t) : e.getAttribute(t, 2) == n;
205
+ }
206
+ function S(e, t, n, i, a) {
207
+ return (v ? xe : Se).call(null, e, t, r(n) ? n : null, r(i) ? i : null, a || new C());
208
+ }
209
+ function xe(e, t, n, r, i) {
210
+ if (e instanceof W || e.b == 8 || n && e.b === null) {
211
+ var a = t.all;
212
+ if (!a || (e = Ee(e), e != `*` && (a = t.getElementsByTagName(e), !a))) return i;
213
+ if (n) {
214
+ for (var o = [], s = 0; t = a[s++];) x(t, n, r) && o.push(t);
215
+ a = o;
216
+ }
217
+ for (s = 0; t = a[s++];) e == `*` && t.tagName == `!` || w(i, t);
218
+ return i;
219
+ }
220
+ return Te(e, t, n, r, i), i;
221
+ }
222
+ function Se(e, t, n, r, i) {
223
+ return t.getElementsByName && r && n == `name` && !h ? (t = t.getElementsByName(r), f(t, function(t) {
224
+ e.a(t) && w(i, t);
225
+ })) : t.getElementsByClassName && r && n == `class` ? (t = t.getElementsByClassName(r), f(t, function(t) {
226
+ t.className == r && e.a(t) && w(i, t);
227
+ })) : e instanceof z ? Te(e, t, n, r, i) : t.getElementsByTagName && (t = t.getElementsByTagName(e.f()), f(t, function(e) {
228
+ x(e, n, r) && w(i, e);
229
+ })), i;
230
+ }
231
+ function Ce(e, t, n, r, i) {
232
+ var a;
233
+ if ((e instanceof W || e.b == 8 || n && e.b === null) && (a = t.childNodes)) {
234
+ var o = Ee(e);
235
+ return o != `*` && (a = te(a, function(e) {
236
+ return e.tagName && e.tagName.toLowerCase() == o;
237
+ }), !a) ? i : (n && (a = te(a, function(e) {
238
+ return x(e, n, r);
239
+ })), f(a, function(e) {
240
+ o == `*` && (e.tagName == `!` || o == `*` && e.nodeType != 1) || w(i, e);
241
+ }), i);
242
+ }
243
+ return we(e, t, n, r, i);
244
+ }
245
+ function we(e, t, n, r, i) {
246
+ for (t = t.firstChild; t; t = t.nextSibling) x(t, n, r) && e.a(t) && w(i, t);
247
+ return i;
248
+ }
249
+ function Te(e, t, n, r, i) {
250
+ for (t = t.firstChild; t; t = t.nextSibling) x(t, n, r) && e.a(t) && w(i, t), Te(e, t, n, r, i);
251
+ }
252
+ function Ee(e) {
253
+ if (e instanceof z) {
254
+ if (e.b == 8) return `!`;
255
+ if (e.b === null) return `*`;
256
+ }
257
+ return e.f();
258
+ }
259
+ !ue && !h || h && 9 <= Number(_) || ue && _e(`1.9.1`), h && _e(`9`);
260
+ function De(e, t) {
261
+ if (!e || !t) return !1;
262
+ if (e.contains && t.nodeType == 1) return e == t || e.contains(t);
263
+ if (e.compareDocumentPosition !== void 0) return e == t || !!(e.compareDocumentPosition(t) & 16);
264
+ for (; t && e != t;) t = t.parentNode;
265
+ return t == e;
266
+ }
267
+ function Oe(t, n) {
268
+ if (t == n) return 0;
269
+ if (t.compareDocumentPosition) return t.compareDocumentPosition(n) & 2 ? 1 : -1;
270
+ if (h && !(9 <= Number(_))) {
271
+ if (t.nodeType == 9) return -1;
272
+ if (n.nodeType == 9) return 1;
273
+ }
274
+ if (`sourceIndex` in t || t.parentNode && `sourceIndex` in t.parentNode) {
275
+ var r = t.nodeType == 1, i = n.nodeType == 1;
276
+ if (r && i) return t.sourceIndex - n.sourceIndex;
277
+ var a = t.parentNode, o = n.parentNode;
278
+ return a == o ? Ae(t, n) : !r && De(a, n) ? -1 * ke(t, n) : !i && De(o, t) ? ke(n, t) : (r ? t.sourceIndex : a.sourceIndex) - (i ? n.sourceIndex : o.sourceIndex);
279
+ }
280
+ return i = t.nodeType == 9 ? t : t.ownerDocument || t.document, r = i.createRange(), r.selectNode(t), r.collapse(!0), i = i.createRange(), i.selectNode(n), i.collapse(!0), r.compareBoundaryPoints(e.Range.START_TO_END, i);
281
+ }
282
+ function ke(e, t) {
283
+ var n = e.parentNode;
284
+ if (n == t) return -1;
285
+ for (var r = t; r.parentNode != n;) r = r.parentNode;
286
+ return Ae(r, e);
287
+ }
288
+ function Ae(e, t) {
289
+ for (var n = t; n = n.previousSibling;) if (n == e) return -1;
290
+ return 1;
291
+ }
292
+ function C() {
293
+ this.b = this.a = null, this.l = 0;
294
+ }
295
+ function je(e) {
296
+ this.node = e, this.a = this.b = null;
297
+ }
298
+ function Me(e, t) {
299
+ if (!e.a) return t;
300
+ if (!t.a) return e;
301
+ for (var n = e.a, r = t.a, i = null, a = null, o = 0; n && r;) {
302
+ var a = n.node, s = r.node;
303
+ a == s || a instanceof y && s instanceof y && a.a == s.a ? (a = n, n = n.a, r = r.a) : 0 < Oe(n.node, r.node) ? (a = r, r = r.a) : (a = n, n = n.a), (a.b = i) ? i.a = a : e.a = a, i = a, o++;
304
+ }
305
+ for (a = n || r; a;) a.b = i, i = i.a = a, o++, a = a.a;
306
+ return e.b = i, e.l = o, e;
307
+ }
308
+ function Ne(e, t) {
309
+ var n = new je(t);
310
+ n.a = e.a, e.b ? e.a.b = n : e.a = e.b = n, e.a = n, e.l++;
311
+ }
312
+ function w(e, t) {
313
+ var n = new je(t);
314
+ n.b = e.b, e.a ? e.b.a = n : e.a = e.b = n, e.b = n, e.l++;
315
+ }
316
+ function Pe(e) {
317
+ return (e = e.a) ? e.node : null;
318
+ }
319
+ function Fe(e) {
320
+ return (e = Pe(e)) ? b(e) : ``;
321
+ }
322
+ function T(e, t) {
323
+ return new Ie(e, !!t);
324
+ }
325
+ function Ie(e, t) {
326
+ this.f = e, this.b = (this.c = t) ? e.b : e.a, this.a = null;
327
+ }
328
+ function E(e) {
329
+ var t = e.b;
330
+ if (t == null) return null;
331
+ var n = e.a = t;
332
+ return e.b = e.c ? t.b : t.a, n.node;
333
+ }
334
+ function D(e) {
335
+ this.i = e, this.b = this.g = !1, this.f = null;
336
+ }
337
+ function O(e) {
338
+ return `
339
+ ` + e.toString().split(`
340
+ `).join(`
341
+ `);
342
+ }
343
+ function Le(e, t) {
344
+ e.g = t;
345
+ }
346
+ function Re(e, t) {
347
+ e.b = t;
348
+ }
349
+ function k(e, t) {
350
+ var n = e.a(t);
351
+ return n instanceof C ? +Fe(n) : +n;
352
+ }
353
+ function A(e, t) {
354
+ var n = e.a(t);
355
+ return n instanceof C ? Fe(n) : `` + n;
356
+ }
357
+ function j(e, t) {
358
+ var n = e.a(t);
359
+ return n instanceof C ? !!n.l : !!n;
360
+ }
361
+ function M(e, t, n) {
362
+ D.call(this, e.i), this.c = e, this.h = t, this.o = n, this.g = t.g || n.g, this.b = t.b || n.b, this.c == Ve && (n.b || n.g || n.i == 4 || n.i == 0 || !t.f ? t.b || t.g || t.i == 4 || t.i == 0 || !n.f || (this.f = {
363
+ name: n.f.name,
364
+ s: t
365
+ }) : this.f = {
366
+ name: t.f.name,
367
+ s: n
368
+ });
369
+ }
370
+ c(M);
371
+ function N(e, t, n, r, i) {
372
+ t = t.a(r), n = n.a(r);
373
+ var a;
374
+ if (t instanceof C && n instanceof C) {
375
+ for (t = T(t), r = E(t); r; r = E(t)) for (i = T(n), a = E(i); a; a = E(i)) if (e(b(r), b(a))) return !0;
376
+ return !1;
377
+ }
378
+ if (t instanceof C || n instanceof C) {
379
+ t instanceof C ? (i = t, r = n) : (i = n, r = t), a = T(i);
380
+ for (var o = typeof r, s = E(a); s; s = E(a)) {
381
+ switch (o) {
382
+ case `number`:
383
+ s = +b(s);
384
+ break;
385
+ case `boolean`:
386
+ s = !!b(s);
387
+ break;
388
+ case `string`:
389
+ s = b(s);
390
+ break;
391
+ default: throw Error(`Illegal primitive type for comparison.`);
392
+ }
393
+ if (i == t && e(s, r) || i == n && e(r, s)) return !0;
394
+ }
395
+ return !1;
396
+ }
397
+ return i ? typeof t == `boolean` || typeof n == `boolean` ? e(!!t, !!n) : typeof t == `number` || typeof n == `number` ? e(+t, +n) : e(t, n) : e(+t, +n);
398
+ }
399
+ M.prototype.a = function(e) {
400
+ return this.c.m(this.h, this.o, e);
401
+ }, M.prototype.toString = function() {
402
+ var e = `Binary Expression: ` + this.c, e = e + O(this.h);
403
+ return e += O(this.o);
404
+ };
405
+ function ze(e, t, n, r) {
406
+ this.a = e, this.w = t, this.i = n, this.m = r;
407
+ }
408
+ ze.prototype.toString = function() {
409
+ return this.a;
410
+ };
411
+ var Be = {};
412
+ function P(e, t, n, r) {
413
+ if (Be.hasOwnProperty(e)) throw Error(`Binary operator already created: ` + e);
414
+ return e = new ze(e, t, n, r), Be[e.toString()] = e;
415
+ }
416
+ P(`div`, 6, 1, function(e, t, n) {
417
+ return k(e, n) / k(t, n);
418
+ }), P(`mod`, 6, 1, function(e, t, n) {
419
+ return k(e, n) % k(t, n);
420
+ }), P(`*`, 6, 1, function(e, t, n) {
421
+ return k(e, n) * k(t, n);
422
+ }), P(`+`, 5, 1, function(e, t, n) {
423
+ return k(e, n) + k(t, n);
424
+ }), P(`-`, 5, 1, function(e, t, n) {
425
+ return k(e, n) - k(t, n);
426
+ }), P(`<`, 4, 2, function(e, t, n) {
427
+ return N(function(e, t) {
428
+ return e < t;
429
+ }, e, t, n);
430
+ }), P(`>`, 4, 2, function(e, t, n) {
431
+ return N(function(e, t) {
432
+ return e > t;
433
+ }, e, t, n);
434
+ }), P(`<=`, 4, 2, function(e, t, n) {
435
+ return N(function(e, t) {
436
+ return e <= t;
437
+ }, e, t, n);
438
+ }), P(`>=`, 4, 2, function(e, t, n) {
439
+ return N(function(e, t) {
440
+ return e >= t;
441
+ }, e, t, n);
442
+ });
443
+ var Ve = P(`=`, 3, 2, function(e, t, n) {
444
+ return N(function(e, t) {
445
+ return e == t;
446
+ }, e, t, n, !0);
447
+ });
448
+ P(`!=`, 3, 2, function(e, t, n) {
449
+ return N(function(e, t) {
450
+ return e != t;
451
+ }, e, t, n, !0);
452
+ }), P(`and`, 2, 2, function(e, t, n) {
453
+ return j(e, n) && j(t, n);
454
+ }), P(`or`, 1, 2, function(e, t, n) {
455
+ return j(e, n) || j(t, n);
456
+ });
457
+ function F(e, t, n) {
458
+ this.a = e, this.b = t || 1, this.f = n || 1;
459
+ }
460
+ function I(e, t) {
461
+ if (t.a.length && e.i != 4) throw Error(`Primary expression must evaluate to nodeset if filter has predicate(s).`);
462
+ D.call(this, e.i), this.c = e, this.h = t, this.g = e.g, this.b = e.b;
463
+ }
464
+ c(I), I.prototype.a = function(e) {
465
+ return e = this.c.a(e), et(this.h, e);
466
+ }, I.prototype.toString = function() {
467
+ var e = `Filter:` + O(this.c);
468
+ return e += O(this.h);
469
+ };
470
+ function L(e, t) {
471
+ if (t.length < e.A) throw Error(`Function ` + e.j + ` expects at least` + e.A + ` arguments, ` + t.length + ` given`);
472
+ if (e.v !== null && t.length > e.v) throw Error(`Function ` + e.j + ` expects at most ` + e.v + ` arguments, ` + t.length + ` given`);
473
+ e.B && f(t, function(t, n) {
474
+ if (t.i != 4) throw Error(`Argument ` + n + ` to function ` + e.j + ` is not of type Nodeset: ` + t);
475
+ }), D.call(this, e.i), this.h = e, this.c = t, Le(this, e.g || ne(t, function(e) {
476
+ return e.g;
477
+ })), Re(this, e.D && !t.length || e.C && !!t.length || ne(t, function(e) {
478
+ return e.b;
479
+ }));
480
+ }
481
+ c(L), L.prototype.a = function(e) {
482
+ return this.h.m.apply(null, ie(e, this.c));
483
+ }, L.prototype.toString = function() {
484
+ var e = `Function: ` + this.h;
485
+ if (this.c.length) var t = p(this.c, function(e, t) {
486
+ return e + O(t);
487
+ }, `Arguments:`), e = e + O(t);
488
+ return e;
489
+ };
490
+ function He(e, t, n, r, i, a, o, s, c) {
491
+ this.j = e, this.i = t, this.g = n, this.D = r, this.C = i, this.m = a, this.A = o, this.v = s === void 0 ? o : s, this.B = !!c;
492
+ }
493
+ He.prototype.toString = function() {
494
+ return this.j;
495
+ };
496
+ var Ue = {};
497
+ function R(e, t, n, r, i, a, o, s) {
498
+ if (Ue.hasOwnProperty(e)) throw Error(`Function already created: ` + e + `.`);
499
+ Ue[e] = new He(e, t, n, r, !1, i, a, o, s);
500
+ }
501
+ R(`boolean`, 2, !1, !1, function(e, t) {
502
+ return j(t, e);
503
+ }, 1), R(`ceiling`, 1, !1, !1, function(e, t) {
504
+ return Math.ceil(k(t, e));
505
+ }, 1), R(`concat`, 3, !1, !1, function(e, t) {
506
+ return p(ae(arguments, 1), function(t, n) {
507
+ return t + A(n, e);
508
+ }, ``);
509
+ }, 2, null), R(`contains`, 2, !1, !1, function(e, t, n) {
510
+ return u(A(t, e), A(n, e));
511
+ }, 2), R(`count`, 1, !1, !1, function(e, t) {
512
+ return t.a(e).l;
513
+ }, 1, 1, !0), R(`false`, 2, !1, !1, function() {
514
+ return !1;
515
+ }, 0), R(`floor`, 1, !1, !1, function(e, t) {
516
+ return Math.floor(k(t, e));
517
+ }, 1), R(`id`, 4, !1, !1, function(e, t) {
518
+ function n(e) {
519
+ if (v) {
520
+ var t = i.all[e];
521
+ if (t) {
522
+ if (t.nodeType && e == t.id) return t;
523
+ if (t.length) return re(t, function(t) {
524
+ return e == t.id;
525
+ });
526
+ }
527
+ return null;
528
+ }
529
+ return i.getElementById(e);
530
+ }
531
+ var r = e.a, i = r.nodeType == 9 ? r : r.ownerDocument, r = A(t, e).split(/\s+/), a = [];
532
+ f(r, function(e) {
533
+ e = n(e), !e || 0 <= d(a, e) || a.push(e);
534
+ }), a.sort(Oe);
535
+ var o = new C();
536
+ return f(a, function(e) {
537
+ w(o, e);
538
+ }), o;
539
+ }, 1), R(`lang`, 2, !1, !1, function() {
540
+ return !1;
541
+ }, 1), R(`last`, 1, !0, !1, function(e) {
542
+ if (arguments.length != 1) throw Error(`Function last expects ()`);
543
+ return e.f;
544
+ }, 0), R(`local-name`, 3, !1, !0, function(e, t) {
545
+ var n = t ? Pe(t.a(e)) : e.a;
546
+ return n ? n.localName || n.nodeName.toLowerCase() : ``;
547
+ }, 0, 1, !0), R(`name`, 3, !1, !0, function(e, t) {
548
+ var n = t ? Pe(t.a(e)) : e.a;
549
+ return n ? n.nodeName.toLowerCase() : ``;
550
+ }, 0, 1, !0), R(`namespace-uri`, 3, !0, !1, function() {
551
+ return ``;
552
+ }, 0, 1, !0), R(`normalize-space`, 3, !1, !0, function(e, t) {
553
+ return (t ? A(t, e) : b(e.a)).replace(/[\s\xa0]+/g, ` `).replace(/^\s+|\s+$/g, ``);
554
+ }, 0, 1), R(`not`, 2, !1, !1, function(e, t) {
555
+ return !j(t, e);
556
+ }, 1), R(`number`, 1, !1, !0, function(e, t) {
557
+ return t ? k(t, e) : +b(e.a);
558
+ }, 0, 1), R(`position`, 1, !0, !1, function(e) {
559
+ return e.b;
560
+ }, 0), R(`round`, 1, !1, !1, function(e, t) {
561
+ return Math.round(k(t, e));
562
+ }, 1), R(`starts-with`, 2, !1, !1, function(e, t, n) {
563
+ return t = A(t, e), e = A(n, e), t.lastIndexOf(e, 0) == 0;
564
+ }, 2), R(`string`, 3, !1, !0, function(e, t) {
565
+ return t ? A(t, e) : b(e.a);
566
+ }, 0, 1), R(`string-length`, 1, !1, !0, function(e, t) {
567
+ return (t ? A(t, e) : b(e.a)).length;
568
+ }, 0, 1), R(`substring`, 3, !1, !1, function(e, t, n, r) {
569
+ if (n = k(n, e), isNaN(n) || n == Infinity || n == -Infinity || (r = r ? k(r, e) : Infinity, isNaN(r) || r === -Infinity)) return ``;
570
+ n = Math.round(n) - 1;
571
+ var i = Math.max(n, 0);
572
+ return e = A(t, e), r == Infinity ? e.substring(i) : e.substring(i, n + Math.round(r));
573
+ }, 2, 3), R(`substring-after`, 3, !1, !1, function(e, t, n) {
574
+ return t = A(t, e), e = A(n, e), n = t.indexOf(e), n == -1 ? `` : t.substring(n + e.length);
575
+ }, 2), R(`substring-before`, 3, !1, !1, function(e, t, n) {
576
+ return t = A(t, e), e = A(n, e), e = t.indexOf(e), e == -1 ? `` : t.substring(0, e);
577
+ }, 2), R(`sum`, 1, !1, !1, function(e, t) {
578
+ for (var n = T(t.a(e)), r = 0, i = E(n); i; i = E(n)) r += +b(i);
579
+ return r;
580
+ }, 1, 1, !0), R(`translate`, 3, !1, !1, function(e, t, n, r) {
581
+ t = A(t, e), n = A(n, e);
582
+ var i = A(r, e);
583
+ for (e = {}, r = 0; r < n.length; r++) {
584
+ var a = n.charAt(r);
585
+ a in e || (e[a] = i.charAt(r));
586
+ }
587
+ for (n = ``, r = 0; r < t.length; r++) a = t.charAt(r), n += a in e ? e[a] : a;
588
+ return n;
589
+ }, 3), R(`true`, 2, !1, !1, function() {
590
+ return !0;
591
+ }, 0);
592
+ function z(e, t) {
593
+ switch (this.h = e, this.c = t === void 0 ? null : t, this.b = null, e) {
594
+ case `comment`:
595
+ this.b = 8;
596
+ break;
597
+ case `text`:
598
+ this.b = 3;
599
+ break;
600
+ case `processing-instruction`:
601
+ this.b = 7;
602
+ break;
603
+ case `node`: break;
604
+ default: throw Error(`Unexpected argument`);
605
+ }
606
+ }
607
+ function We(e) {
608
+ return e == `comment` || e == `text` || e == `processing-instruction` || e == `node`;
609
+ }
610
+ z.prototype.a = function(e) {
611
+ return this.b === null || this.b == e.nodeType;
612
+ }, z.prototype.f = function() {
613
+ return this.h;
614
+ }, z.prototype.toString = function() {
615
+ var e = `Kind Test: ` + this.h;
616
+ return this.c === null || (e += O(this.c)), e;
617
+ };
618
+ function Ge(e) {
619
+ this.b = e, this.a = 0;
620
+ }
621
+ function Ke(e) {
622
+ e = e.match(qe);
623
+ for (var t = 0; t < e.length; t++) Je.test(e[t]) && e.splice(t, 1);
624
+ return new Ge(e);
625
+ }
626
+ var qe = /\$?(?:(?![0-9-\.])(?:\*|[\w-\.]+):)?(?![0-9-\.])(?:\*|[\w-\.]+)|\/\/|\.\.|::|\d+(?:\.\d*)?|\.\d+|"[^"]*"|'[^']*'|[!<>]=|\s+|./g, Je = /^\s/;
627
+ function B(e, t) {
628
+ return e.b[e.a + (t || 0)];
629
+ }
630
+ function V(e) {
631
+ return e.b[e.a++];
632
+ }
633
+ function H(e) {
634
+ return e.b.length <= e.a;
635
+ }
636
+ function U(e) {
637
+ D.call(this, 3), this.c = e.substring(1, e.length - 1);
638
+ }
639
+ c(U), U.prototype.a = function() {
640
+ return this.c;
641
+ }, U.prototype.toString = function() {
642
+ return `Literal: ` + this.c;
643
+ };
644
+ function W(e, t) {
645
+ this.j = e.toLowerCase();
646
+ var n = this.j == `*` ? `*` : `http://www.w3.org/1999/xhtml`;
647
+ this.c = t ? t.toLowerCase() : n;
648
+ }
649
+ W.prototype.a = function(e) {
650
+ var t = e.nodeType;
651
+ return t != 1 && t != 2 ? !1 : (t = e.localName === void 0 ? e.nodeName : e.localName, this.j != `*` && this.j != t.toLowerCase() ? !1 : this.c == `*` ? !0 : this.c == (e.namespaceURI ? e.namespaceURI.toLowerCase() : `http://www.w3.org/1999/xhtml`));
652
+ }, W.prototype.f = function() {
653
+ return this.j;
654
+ }, W.prototype.toString = function() {
655
+ return `Name Test: ` + (this.c == `http://www.w3.org/1999/xhtml` ? `` : this.c + `:`) + this.j;
656
+ };
657
+ function Ye(e, t) {
658
+ if (D.call(this, e.i), this.h = e, this.c = t, this.g = e.g, this.b = e.b, this.c.length == 1) {
659
+ var n = this.c[0];
660
+ n.u || n.c != rt || (n = n.o, n.f() != `*` && (this.f = {
661
+ name: n.f(),
662
+ s: null
663
+ }));
664
+ }
665
+ }
666
+ c(Ye);
667
+ function G() {
668
+ D.call(this, 4);
669
+ }
670
+ c(G), G.prototype.a = function(e) {
671
+ var t = new C();
672
+ return e = e.a, e.nodeType == 9 ? w(t, e) : w(t, e.ownerDocument), t;
673
+ }, G.prototype.toString = function() {
674
+ return `Root Helper Expression`;
675
+ };
676
+ function Xe() {
677
+ D.call(this, 4);
678
+ }
679
+ c(Xe), Xe.prototype.a = function(e) {
680
+ var t = new C();
681
+ return w(t, e.a), t;
682
+ }, Xe.prototype.toString = function() {
683
+ return `Context Helper Expression`;
684
+ };
685
+ function Ze(e) {
686
+ return e == `/` || e == `//`;
687
+ }
688
+ Ye.prototype.a = function(e) {
689
+ var t = this.h.a(e);
690
+ if (!(t instanceof C)) throw Error(`Filter expression must evaluate to nodeset.`);
691
+ e = this.c;
692
+ for (var n = 0, r = e.length; n < r && t.l; n++) {
693
+ var i = e[n], a = T(t, i.c.a), o;
694
+ if (i.g || i.c != ot) if (i.g || i.c != ct) for (o = E(a), t = i.a(new F(o)); (o = E(a)) != null;) o = i.a(new F(o)), t = Me(t, o);
695
+ else o = E(a), t = i.a(new F(o));
696
+ else {
697
+ for (o = E(a); (t = E(a)) && (!o.contains || o.contains(t)) && t.compareDocumentPosition(o) & 8; o = t);
698
+ t = i.a(new F(o));
699
+ }
700
+ }
701
+ return t;
702
+ }, Ye.prototype.toString = function() {
703
+ var e = `Path Expression:` + O(this.h);
704
+ if (this.c.length) {
705
+ var t = p(this.c, function(e, t) {
706
+ return e + O(t);
707
+ }, `Steps:`);
708
+ e += O(t);
709
+ }
710
+ return e;
711
+ };
712
+ function Qe(e) {
713
+ D.call(this, 4), this.c = e, Le(this, ne(this.c, function(e) {
714
+ return e.g;
715
+ })), Re(this, ne(this.c, function(e) {
716
+ return e.b;
717
+ }));
718
+ }
719
+ c(Qe), Qe.prototype.a = function(e) {
720
+ var t = new C();
721
+ return f(this.c, function(n) {
722
+ if (n = n.a(e), !(n instanceof C)) throw Error(`Path expression must evaluate to NodeSet.`);
723
+ t = Me(t, n);
724
+ }), t;
725
+ }, Qe.prototype.toString = function() {
726
+ return p(this.c, function(e, t) {
727
+ return e + O(t);
728
+ }, `Union Expression:`);
729
+ };
730
+ function $e(e, t) {
731
+ this.a = e, this.b = !!t;
732
+ }
733
+ function et(e, t, n) {
734
+ for (n ||= 0; n < e.a.length; n++) for (var r = e.a[n], i = T(t), a = t.l, o, s = 0; o = E(i); s++) {
735
+ var c = e.b ? a - s : s + 1;
736
+ if (o = r.a(new F(o, c, a)), typeof o == `number`) c = c == o;
737
+ else if (typeof o == `string` || typeof o == `boolean`) c = !!o;
738
+ else if (o instanceof C) c = 0 < o.l;
739
+ else throw Error(`Predicate.evaluate returned an unexpected type.`);
740
+ if (!c) {
741
+ c = i, o = c.f;
742
+ var l = c.a;
743
+ if (!l) throw Error(`Next must be called at least once before remove.`);
744
+ var u = l.b, l = l.a;
745
+ u ? u.a = l : o.a = l, l ? l.b = u : o.b = u, o.l--, c.a = null;
746
+ }
747
+ }
748
+ return t;
749
+ }
750
+ $e.prototype.toString = function() {
751
+ return p(this.a, function(e, t) {
752
+ return e + O(t);
753
+ }, `Predicates:`);
754
+ };
755
+ function K(e, t, n, r) {
756
+ D.call(this, 4), this.c = e, this.o = t, this.h = n || new $e([]), this.u = !!r, t = this.h, t = 0 < t.a.length ? t.a[0].f : null, e.b && t && (e = t.name, e = v ? e.toLowerCase() : e, this.f = {
757
+ name: e,
758
+ s: t.s
759
+ });
760
+ a: {
761
+ for (e = this.h, t = 0; t < e.a.length; t++) if (n = e.a[t], n.g || n.i == 1 || n.i == 0) {
762
+ e = !0;
763
+ break a;
764
+ }
765
+ e = !1;
766
+ }
767
+ this.g = e;
768
+ }
769
+ c(K), K.prototype.a = function(e) {
770
+ var t = e.a, n = null, n = this.f, r = null, i = null, a = 0;
771
+ if (n && (r = n.name, i = n.s ? A(n.s, e) : null, a = 1), this.u) if (this.g || this.c != it) if (e = T(new K(at, new z(`node`)).a(e)), t = E(e)) for (n = this.m(t, r, i, a); (t = E(e)) != null;) n = Me(n, this.m(t, r, i, a));
772
+ else n = new C();
773
+ else n = S(this.o, t, r, i), n = et(this.h, n, a);
774
+ else n = this.m(e.a, r, i, a);
775
+ return n;
776
+ }, K.prototype.m = function(e, t, n, r) {
777
+ return e = this.c.f(this.o, e, t, n), e = et(this.h, e, r);
778
+ }, K.prototype.toString = function() {
779
+ var e = `Step:` + O(`Operator: ` + (this.u ? `//` : `/`));
780
+ if (this.c.j && (e += O(`Axis: ` + this.c)), e += O(this.o), this.h.a.length) {
781
+ var t = p(this.h.a, function(e, t) {
782
+ return e + O(t);
783
+ }, `Predicates:`);
784
+ e += O(t);
785
+ }
786
+ return e;
787
+ };
788
+ function tt(e, t, n, r) {
789
+ this.j = e, this.f = t, this.a = n, this.b = r;
790
+ }
791
+ tt.prototype.toString = function() {
792
+ return this.j;
793
+ };
794
+ var nt = {};
795
+ function q(e, t, n, r) {
796
+ if (nt.hasOwnProperty(e)) throw Error(`Axis already created: ` + e);
797
+ return t = new tt(e, t, n, !!r), nt[e] = t;
798
+ }
799
+ q(`ancestor`, function(e, t) {
800
+ for (var n = new C(), r = t; r = r.parentNode;) e.a(r) && Ne(n, r);
801
+ return n;
802
+ }, !0), q(`ancestor-or-self`, function(e, t) {
803
+ var n = new C(), r = t;
804
+ do
805
+ e.a(r) && Ne(n, r);
806
+ while (r = r.parentNode);
807
+ return n;
808
+ }, !0);
809
+ var rt = q(`attribute`, function(e, t) {
810
+ var n = new C(), r = e.f();
811
+ if (r == `style` && v && t.style) return w(n, new y(t.style, t, `style`, t.style.cssText)), n;
812
+ var i = t.attributes;
813
+ if (i) if (e instanceof z && e.b === null || r == `*`) for (var r = 0, a; a = i[r]; r++) v ? a.nodeValue && w(n, be(t, a)) : w(n, a);
814
+ else (a = i.getNamedItem(r)) && (v ? a.nodeValue && w(n, be(t, a)) : w(n, a));
815
+ return n;
816
+ }, !1), it = q(`child`, function(e, t, n, i, a) {
817
+ return (v ? Ce : we).call(null, e, t, r(n) ? n : null, r(i) ? i : null, a || new C());
818
+ }, !1, !0);
819
+ q(`descendant`, S, !1, !0);
820
+ var at = q(`descendant-or-self`, function(e, t, n, r) {
821
+ var i = new C();
822
+ return x(t, n, r) && e.a(t) && w(i, t), S(e, t, n, r, i);
823
+ }, !1, !0), ot = q(`following`, function(e, t, n, r) {
824
+ var i = new C();
825
+ do
826
+ for (var a = t; a = a.nextSibling;) x(a, n, r) && e.a(a) && w(i, a), i = S(e, a, n, r, i);
827
+ while (t = t.parentNode);
828
+ return i;
829
+ }, !1, !0);
830
+ q(`following-sibling`, function(e, t) {
831
+ for (var n = new C(), r = t; r = r.nextSibling;) e.a(r) && w(n, r);
832
+ return n;
833
+ }, !1), q(`namespace`, function() {
834
+ return new C();
835
+ }, !1);
836
+ var st = q(`parent`, function(e, t) {
837
+ var n = new C();
838
+ if (t.nodeType == 9) return n;
839
+ if (t.nodeType == 2) return w(n, t.ownerElement), n;
840
+ var r = t.parentNode;
841
+ return e.a(r) && w(n, r), n;
842
+ }, !1), ct = q(`preceding`, function(e, t, n, r) {
843
+ var i = new C(), a = [];
844
+ do
845
+ a.unshift(t);
846
+ while (t = t.parentNode);
847
+ for (var o = 1, s = a.length; o < s; o++) {
848
+ var c = [];
849
+ for (t = a[o]; t = t.previousSibling;) c.unshift(t);
850
+ for (var l = 0, u = c.length; l < u; l++) t = c[l], x(t, n, r) && e.a(t) && w(i, t), i = S(e, t, n, r, i);
851
+ }
852
+ return i;
853
+ }, !0, !0);
854
+ q(`preceding-sibling`, function(e, t) {
855
+ for (var n = new C(), r = t; r = r.previousSibling;) e.a(r) && Ne(n, r);
856
+ return n;
857
+ }, !0);
858
+ var lt = q(`self`, function(e, t) {
859
+ var n = new C();
860
+ return e.a(t) && w(n, t), n;
861
+ }, !1);
862
+ function J(e) {
863
+ D.call(this, 1), this.c = e, this.g = e.g, this.b = e.b;
864
+ }
865
+ c(J), J.prototype.a = function(e) {
866
+ return -k(this.c, e);
867
+ }, J.prototype.toString = function() {
868
+ return `Unary Expression: -` + O(this.c);
869
+ };
870
+ function ut(e) {
871
+ D.call(this, 1), this.c = e;
872
+ }
873
+ c(ut), ut.prototype.a = function() {
874
+ return this.c;
875
+ }, ut.prototype.toString = function() {
876
+ return `Number: ` + this.c;
877
+ };
878
+ function dt(e, t) {
879
+ this.a = e, this.b = t;
880
+ }
881
+ function ft(e) {
882
+ for (var t, n = [];;) {
883
+ Y(e, `Missing right hand side of binary expression.`), t = yt(e);
884
+ var r = V(e.a);
885
+ if (!r) break;
886
+ var i = (r = Be[r] || null) && r.w;
887
+ if (!i) {
888
+ e.a.a--;
889
+ break;
890
+ }
891
+ for (; n.length && i <= n[n.length - 1].w;) t = new M(n.pop(), n.pop(), t);
892
+ n.push(t, r);
893
+ }
894
+ for (; n.length;) t = new M(n.pop(), n.pop(), t);
895
+ return t;
896
+ }
897
+ function Y(e, t) {
898
+ if (H(e.a)) throw Error(t);
899
+ }
900
+ function pt(e, t) {
901
+ var n = V(e.a);
902
+ if (n != t) throw Error(`Bad token, expected: ` + t + ` got: ` + n);
903
+ }
904
+ function mt(e) {
905
+ if (e = V(e.a), e != `)`) throw Error(`Bad token: ` + e);
906
+ }
907
+ function ht(e) {
908
+ if (e = V(e.a), 2 > e.length) throw Error(`Unclosed literal string`);
909
+ return new U(e);
910
+ }
911
+ function gt(e) {
912
+ var t, n = [], r;
913
+ if (Ze(B(e.a))) {
914
+ if (t = V(e.a), r = B(e.a), t == `/` && (H(e.a) || r != `.` && r != `..` && r != `@` && r != `*` && !/(?![0-9])[\w]/.test(r))) return new G();
915
+ r = new G(), Y(e, `Missing next location step.`), t = _t(e, t), n.push(t);
916
+ } else {
917
+ a: {
918
+ switch (t = B(e.a), r = t.charAt(0), r) {
919
+ case `$`: throw Error(`Variable reference not allowed in HTML XPath`);
920
+ case `(`:
921
+ V(e.a), t = ft(e), Y(e, `unclosed "("`), pt(e, `)`);
922
+ break;
923
+ case `"`:
924
+ case `'`:
925
+ t = ht(e);
926
+ break;
927
+ default: if (isNaN(+t)) if (!We(t) && /(?![0-9])[\w]/.test(r) && B(e.a, 1) == `(`) {
928
+ for (t = V(e.a), t = Ue[t] || null, V(e.a), r = []; B(e.a) != `)` && (Y(e, `Missing function argument list.`), r.push(ft(e)), B(e.a) == `,`);) V(e.a);
929
+ Y(e, `Unclosed function argument list.`), mt(e), t = new L(t, r);
930
+ } else {
931
+ t = null;
932
+ break a;
933
+ }
934
+ else t = new ut(+V(e.a));
935
+ }
936
+ B(e.a) == `[` && (r = new $e(vt(e)), t = new I(t, r));
937
+ }
938
+ if (t) if (Ze(B(e.a))) r = t;
939
+ else return t;
940
+ else t = _t(e, `/`), r = new Xe(), n.push(t);
941
+ }
942
+ for (; Ze(B(e.a));) t = V(e.a), Y(e, `Missing next location step.`), t = _t(e, t), n.push(t);
943
+ return new Ye(r, n);
944
+ }
945
+ function _t(e, t) {
946
+ var n, r, i;
947
+ if (t != `/` && t != `//`) throw Error(`Step op should be "/" or "//"`);
948
+ if (B(e.a) == `.`) return r = new K(lt, new z(`node`)), V(e.a), r;
949
+ if (B(e.a) == `..`) return r = new K(st, new z(`node`)), V(e.a), r;
950
+ var a;
951
+ if (B(e.a) == `@`) a = rt, V(e.a), Y(e, `Missing attribute name`);
952
+ else if (B(e.a, 1) == `::`) {
953
+ if (!/(?![0-9])[\w]/.test(B(e.a).charAt(0))) throw Error(`Bad token: ` + V(e.a));
954
+ if (n = V(e.a), a = nt[n] || null, !a) throw Error(`No axis with name: ` + n);
955
+ V(e.a), Y(e, `Missing node name`);
956
+ } else a = it;
957
+ if (n = B(e.a), /(?![0-9])[\w\*]/.test(n.charAt(0))) if (B(e.a, 1) == `(`) {
958
+ if (!We(n)) throw Error(`Invalid node type: ` + n);
959
+ if (n = V(e.a), !We(n)) throw Error(`Invalid type name: ` + n);
960
+ pt(e, `(`), Y(e, `Bad nodetype`), i = B(e.a).charAt(0);
961
+ var o = null;
962
+ (i == `"` || i == `'`) && (o = ht(e)), Y(e, `Bad nodetype`), mt(e), n = new z(n, o);
963
+ } else if (n = V(e.a), i = n.indexOf(`:`), i == -1) n = new W(n);
964
+ else {
965
+ var o = n.substring(0, i), s;
966
+ if (o == `*`) s = `*`;
967
+ else if (s = e.b(o), !s) throw Error(`Namespace prefix not declared: ` + o);
968
+ n = n.substr(i + 1), n = new W(n, s);
969
+ }
970
+ else throw Error(`Bad token: ` + V(e.a));
971
+ return i = new $e(vt(e), a.a), r || new K(a, n, i, t == `//`);
972
+ }
973
+ function vt(e) {
974
+ for (var t = []; B(e.a) == `[`;) {
975
+ V(e.a), Y(e, `Missing predicate expression.`);
976
+ var n = ft(e);
977
+ t.push(n), Y(e, `Unclosed predicate expression.`), pt(e, `]`);
978
+ }
979
+ return t;
980
+ }
981
+ function yt(e) {
982
+ if (B(e.a) == `-`) return V(e.a), new J(yt(e));
983
+ var t = gt(e);
984
+ if (B(e.a) != `|`) e = t;
985
+ else {
986
+ for (t = [t]; V(e.a) == `|`;) Y(e, `Missing next union location path.`), t.push(gt(e));
987
+ e.a.a--, e = new Qe(t);
988
+ }
989
+ return e;
990
+ }
991
+ function bt(e) {
992
+ switch (e.nodeType) {
993
+ case 1: return s(St, e);
994
+ case 9: return bt(e.documentElement);
995
+ case 11:
996
+ case 10:
997
+ case 6:
998
+ case 12: return xt;
999
+ default: return e.parentNode ? bt(e.parentNode) : xt;
1000
+ }
1001
+ }
1002
+ function xt() {
1003
+ return null;
1004
+ }
1005
+ function St(e, t) {
1006
+ if (e.prefix == t) return e.namespaceURI || `http://www.w3.org/1999/xhtml`;
1007
+ var n = e.getAttributeNode(`xmlns:` + t);
1008
+ return n && n.specified ? n.value || null : e.parentNode && e.parentNode.nodeType != 9 ? St(e.parentNode, t) : null;
1009
+ }
1010
+ function Ct(e, n) {
1011
+ if (!e.length) throw Error(`Empty XPath expression.`);
1012
+ var r = Ke(e);
1013
+ if (H(r)) throw Error(`Invalid XPath expression.`);
1014
+ n ? t(n) == `function` || (n = o(n.lookupNamespaceURI, n)) : n = function() {
1015
+ return null;
1016
+ };
1017
+ var i = ft(new dt(r, n));
1018
+ if (!H(r)) throw Error(`Bad token: ` + V(r));
1019
+ this.evaluate = function(e, t) {
1020
+ return new X(i.a(new F(e)), t);
1021
+ };
1022
+ }
1023
+ function X(e, t) {
1024
+ if (t == 0) if (e instanceof C) t = 4;
1025
+ else if (typeof e == `string`) t = 2;
1026
+ else if (typeof e == `number`) t = 1;
1027
+ else if (typeof e == `boolean`) t = 3;
1028
+ else throw Error(`Unexpected evaluation result.`);
1029
+ if (t != 2 && t != 1 && t != 3 && !(e instanceof C)) throw Error(`value could not be converted to the specified type`);
1030
+ this.resultType = t;
1031
+ var n;
1032
+ switch (t) {
1033
+ case 2:
1034
+ this.stringValue = e instanceof C ? Fe(e) : `` + e;
1035
+ break;
1036
+ case 1:
1037
+ this.numberValue = e instanceof C ? +Fe(e) : +e;
1038
+ break;
1039
+ case 3:
1040
+ this.booleanValue = e instanceof C ? 0 < e.l : !!e;
1041
+ break;
1042
+ case 4:
1043
+ case 5:
1044
+ case 6:
1045
+ case 7:
1046
+ var r = T(e);
1047
+ n = [];
1048
+ for (var i = E(r); i; i = E(r)) n.push(i instanceof y ? i.a : i);
1049
+ this.snapshotLength = e.l, this.invalidIteratorState = !1;
1050
+ break;
1051
+ case 8:
1052
+ case 9:
1053
+ r = Pe(e), this.singleNodeValue = r instanceof y ? r.a : r;
1054
+ break;
1055
+ default: throw Error(`Unknown XPathResult type.`);
1056
+ }
1057
+ var a = 0;
1058
+ this.iterateNext = function() {
1059
+ if (t != 4 && t != 5) throw Error(`iterateNext called with wrong result type`);
1060
+ return a >= n.length ? null : n[a++];
1061
+ }, this.snapshotItem = function(e) {
1062
+ if (t != 6 && t != 7) throw Error(`snapshotItem called with wrong result type`);
1063
+ return e >= n.length || 0 > e ? null : n[e];
1064
+ };
1065
+ }
1066
+ X.ANY_TYPE = 0, X.NUMBER_TYPE = 1, X.STRING_TYPE = 2, X.BOOLEAN_TYPE = 3, X.UNORDERED_NODE_ITERATOR_TYPE = 4, X.ORDERED_NODE_ITERATOR_TYPE = 5, X.UNORDERED_NODE_SNAPSHOT_TYPE = 6, X.ORDERED_NODE_SNAPSHOT_TYPE = 7, X.ANY_UNORDERED_NODE_TYPE = 8, X.FIRST_ORDERED_NODE_TYPE = 9;
1067
+ function wt(e) {
1068
+ this.lookupNamespaceURI = bt(e);
1069
+ }
1070
+ function Tt(t, n) {
1071
+ var r = t || e, i = r.Document && r.Document.prototype || r.document;
1072
+ (!i.evaluate || n) && (r.XPathResult = X, i.evaluate = function(e, t, n, r) {
1073
+ return new Ct(e, n).evaluate(t, r);
1074
+ }, i.createExpression = function(e, t) {
1075
+ return new Ct(e, t);
1076
+ }, i.createNSResolver = function(e) {
1077
+ return new wt(e);
1078
+ });
1079
+ }
1080
+ var Z = [`wgxpath`, `install`], Q = e;
1081
+ Z[0] in Q || !Q.execScript || Q.execScript(`var ` + Z[0]);
1082
+ for (var $; Z.length && ($ = Z.shift());) Z.length || Tt === void 0 ? Q = Q[$] ? Q[$] : Q[$] = {} : Q[$] = Tt;
1083
+ n.exports.install = Tt, n.exports.XPathResultType = {
1084
+ ANY_TYPE: 0,
1085
+ NUMBER_TYPE: 1,
1086
+ STRING_TYPE: 2,
1087
+ BOOLEAN_TYPE: 3,
1088
+ UNORDERED_NODE_ITERATOR_TYPE: 4,
1089
+ ORDERED_NODE_ITERATOR_TYPE: 5,
1090
+ UNORDERED_NODE_SNAPSHOT_TYPE: 6,
1091
+ ORDERED_NODE_SNAPSHOT_TYPE: 7,
1092
+ ANY_UNORDERED_NODE_TYPE: 8,
1093
+ FIRST_ORDERED_NODE_TYPE: 9
1094
+ };
1095
+ }).call(e);
1096
+ }))();
1097
+ //#endregion
1098
+ export { wgxpath_install_node_Csk64Aj9_default as default };
1099
+
1100
+ //# sourceMappingURL=wgxpath.install-node-Csk64Aj9.js.map
viewer/assets/xypic-DrMJn58R.js ADDED
The diff for this file is too large to render. See raw diff
 
viewer/index.html ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en" data-bs-theme="light">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="robots" content="noindex,noai,noimageai" />
7
+ <title>Inspect View</title>
8
+ <link rel="icon" href="./assets/favicon.svg" />
9
+
10
+ <script>
11
+ // Forward the theme (dark or light) onto the root html element
12
+ // this parameter will tend to appear when the view is hosted within
13
+ // an iframe (e.g. in vscode)
14
+ const urlParams = new URLSearchParams(window.location.search);
15
+ const theme = urlParams.get("inspectLogviewThemeCategory");
16
+ if (theme) {
17
+ document.documentElement.setAttribute("data-text-highlight", theme);
18
+ document.documentElement.setAttribute("data-bs-theme", theme);
19
+ }
20
+ </script>
21
+ <script type="module" crossorigin src="./assets/index.js"></script>
22
+ <link rel="modulepreload" crossorigin href="./assets/chunk-DfAF0w94.js">
23
+ <link rel="stylesheet" crossorigin href="./assets/index.css">
24
+ <script id="log_dir_context" type="application/json">{"log_dir": "logs", "abs_log_dir": "/private/tmp/claude-501/-Users-kazuki-Sandbox-inspect-ai/ab0df989-8a9a-4c91-a4c0-2c0cedb1d7c5/scratchpad/viewer_logs"}</script>
25
+ </head>
26
+
27
+ <body style="min-width: 450px">
28
+ <div id="app"></div>
29
+ </body>
30
+ </html>
viewer/logs/listing.json ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "professional__plamo-3.0-prime__2026-07-24.eval": {
3
+ "eval_id": "k64YYj5nDTfT9kUD3bKahd",
4
+ "run_id": "EHponHjnCM32Q5d362BH9w",
5
+ "task": "healthbench_professional",
6
+ "task_id": "c9RnXrEaoi4T33bvwXEA5h",
7
+ "task_version": 0,
8
+ "version": 2,
9
+ "status": "success",
10
+ "invalidated": false,
11
+ "model": "openai-api/plamo/plamo-3.0-prime",
12
+ "started_at": "2026-07-24T17:30:37+00:00",
13
+ "completed_at": "2026-07-24T19:33:03+00:00",
14
+ "primary_metric": {
15
+ "name": "bootstrap_score",
16
+ "value": 0.13741141621322153,
17
+ "params": {
18
+ "bootstrap_samples": 1000,
19
+ "include_subset_scores": true,
20
+ "use_length_adjusted": true
21
+ }
22
+ }
23
+ },
24
+ "professional__opus-4.7__2026-07-24.eval": {
25
+ "eval_id": "BhYeUGpXKSJ5dHbUcFdJx5",
26
+ "run_id": "BNTWRBnseQoUGrW7EyaRwM",
27
+ "task": "healthbench_professional",
28
+ "task_id": "boiooCVNG7ZkBVsnEpKLNT",
29
+ "task_version": 0,
30
+ "version": 2,
31
+ "status": "success",
32
+ "invalidated": false,
33
+ "model": "anthropic/claude-opus-4-7",
34
+ "started_at": "2026-07-24T16:55:39+00:00",
35
+ "completed_at": "2026-07-24T17:19:13+00:00",
36
+ "primary_metric": {
37
+ "name": "bootstrap_score",
38
+ "value": 0.48025673082765913,
39
+ "params": {
40
+ "bootstrap_samples": 1000,
41
+ "include_subset_scores": true,
42
+ "use_length_adjusted": true
43
+ }
44
+ }
45
+ },
46
+ "professional__medgemma-4b__2026-07-25.eval": {
47
+ "eval_id": "kUtRW2ke3GFDg3BRrbYrvM",
48
+ "run_id": "FZy2RDH3NjcGcWBrsecS8K",
49
+ "task": "healthbench_professional",
50
+ "task_id": "GEViyNR2PM2B2oUV94DzoK",
51
+ "task_version": 0,
52
+ "version": 2,
53
+ "status": "success",
54
+ "invalidated": false,
55
+ "model": "vllm/google/medgemma-4b-it",
56
+ "started_at": "2026-07-25T00:26:30+00:00",
57
+ "completed_at": "2026-07-25T00:59:32+00:00",
58
+ "primary_metric": {
59
+ "name": "bootstrap_score",
60
+ "value": 0.09043895510310991,
61
+ "params": {
62
+ "bootstrap_samples": 1000,
63
+ "include_subset_scores": true,
64
+ "use_length_adjusted": true
65
+ }
66
+ }
67
+ },
68
+ "professional__medgemma-27b__2026-07-24.eval": {
69
+ "eval_id": "XpapBWN9tR5ER6grCKwmN5",
70
+ "run_id": "Nn8wVHWeziJyqnBd7H8Asn",
71
+ "task": "healthbench_professional",
72
+ "task_id": "6AYXiEDgGuzNtAcyWPDGrR",
73
+ "task_version": 0,
74
+ "version": 2,
75
+ "status": "success",
76
+ "invalidated": false,
77
+ "model": "vllm/google/medgemma-27b-text-it",
78
+ "started_at": "2026-07-24T22:44:04+00:00",
79
+ "completed_at": "2026-07-24T23:41:10+00:00",
80
+ "primary_metric": {
81
+ "name": "bootstrap_score",
82
+ "value": 0.20033284146307836,
83
+ "params": {
84
+ "bootstrap_samples": 1000,
85
+ "include_subset_scores": true,
86
+ "use_length_adjusted": true
87
+ }
88
+ }
89
+ },
90
+ "professional__gpt-5.5__2026-07-24.eval": {
91
+ "eval_id": "SWcyzXw8Y3VsVVQwUpSeAb",
92
+ "run_id": "Gkv6ojN7Udvah9488wSq2C",
93
+ "task": "healthbench_professional",
94
+ "task_id": "7PZFsBJYTZRCdXZkJPfki7",
95
+ "task_version": 0,
96
+ "version": 2,
97
+ "status": "success",
98
+ "invalidated": false,
99
+ "model": "openai/gpt-5.5",
100
+ "started_at": "2026-07-24T15:57:49+00:00",
101
+ "completed_at": "2026-07-24T16:36:58+00:00",
102
+ "primary_metric": {
103
+ "name": "bootstrap_score",
104
+ "value": 0.4780994619989315,
105
+ "params": {
106
+ "bootstrap_samples": 1000,
107
+ "include_subset_scores": true,
108
+ "use_length_adjusted": true
109
+ }
110
+ }
111
+ },
112
+ "professional__deepseek-v4-pro__2026-08-06.eval": {
113
+ "eval_id": "Q2gPU5obAucokpSCRD3ZeZ",
114
+ "run_id": "gELgAgJAp8ke7xTUNmq67c",
115
+ "task": "healthbench_professional",
116
+ "task_id": "bbeHCEMNSj6Q362BQHa7mS",
117
+ "task_version": 0,
118
+ "version": 2,
119
+ "status": "success",
120
+ "invalidated": false,
121
+ "model": "openrouter/deepseek/deepseek-v4-pro",
122
+ "started_at": "2026-08-06T02:35:30+00:00",
123
+ "completed_at": "2026-08-06T02:43:03+00:00",
124
+ "primary_metric": {
125
+ "name": "bootstrap_score",
126
+ "value": 0.3098940879765182,
127
+ "params": {
128
+ "bootstrap_samples": 1000,
129
+ "include_subset_scores": true,
130
+ "use_length_adjusted": true
131
+ }
132
+ }
133
+ },
134
+ "professional__deepseek-v4-pro__2026-07-25-cached.eval": {
135
+ "eval_id": "F2gkQfhgLkdQFG5WaWRBAH",
136
+ "run_id": "WFLtsEyBfk5c2veQfv8RVV",
137
+ "task": "healthbench_professional",
138
+ "task_id": "HaKmMaK4Q6JCLuX2RLCPnc",
139
+ "task_version": 0,
140
+ "version": 2,
141
+ "status": "success",
142
+ "invalidated": false,
143
+ "model": "openrouter/deepseek/deepseek-v4-pro",
144
+ "started_at": "2026-07-25T18:24:55+00:00",
145
+ "completed_at": "2026-07-25T18:26:20+00:00",
146
+ "primary_metric": {
147
+ "name": "bootstrap_score",
148
+ "value": 0.274154902152617,
149
+ "params": {
150
+ "bootstrap_samples": 1000,
151
+ "include_subset_scores": true,
152
+ "use_length_adjusted": true
153
+ }
154
+ }
155
+ }
156
+ }
viewer/logs/professional__deepseek-v4-pro__2026-07-25-cached.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9e705a12533814bc5971cc7fbe810560f8754ea58a8457df97d40268b0a46138
3
+ size 10117848
viewer/logs/professional__deepseek-v4-pro__2026-08-06.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:06bc2b3eb0ee87a65fea568efcbbc9158a4409dbc4d72ef7c80f5d54ee837ecc
3
+ size 10655038
viewer/logs/professional__gpt-5.5__2026-07-24.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1f22cecb703d697bb7e5e2c2ac80ade6c56b78a455f15347d94bd0d01e259a05
3
+ size 85560073
viewer/logs/professional__medgemma-27b__2026-07-24.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:10b3334c7b676c55580b9a416fe94516ea1f36e9ad4ea38ee11e0bcf5f06632d
3
+ size 71311754
viewer/logs/professional__medgemma-4b__2026-07-25.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:70f96705c49a6a66c7a995d72775f836d7f574b492c8c403f26fd94a3f80127f
3
+ size 68290748
viewer/logs/professional__opus-4.7__2026-07-24.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fc11e8d1783829805ddabf45016e1675fb615bd0afa20574247497e7f3136c9e
3
+ size 67292081
viewer/logs/professional__plamo-3.0-prime__2026-07-24.eval ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:66a7e5dee75b6c8ed0ccccb6893a5497fece16b32f8622f40ab3e0c1d20dd7c1
3
+ size 69551325
viewer/robots.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ User-agent: *
2
+ Disallow: /