safeeyes
Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder
翻訳待ち
A public reference benchmark for radiology finding-to-report generation.
翻訳待ち
Loading the full README.
Read the full README ↗LAIBench is a technical benchmark framework — not a medical device, not regulatory approval, and not clinical validation. It must not be used as the sole basis for clinical deployment decisions. Everything below is within that technical scope.
Why LAIBench exists? Existing LLM benchmarks measure general reasoning. Radiology requires evaluation of clinical safety, report faithfulness, terminology consistency, and critical finding detection. LAIBench was created to measure those properties.
Most "report quality" benchmarks reward fluent prose. A confidently-written report that misses a pneumothorax can score well. LAIBench is built so that cannot happen:
FAIL — no matter how polished the rest of the report is. Form never rescues substance.MIN(deterministic, judge) — an optional LLM judge can lower a score but never inflate past the deterministic gate.scoringHash (over the gate-deciding source files) and a cases-only suiteHash pin exactly what produced each number.Pure TypeScript, zero runtime dependencies, deterministic checks, optional frozen judging, bootstrap CIs, McNemar / Cohen's h.
LAIBench evaluates reporting behavior from provided text evidence: whether a system can convert an exam descriptor and concise findings into a faithful radiology report under the public contract. It is not primary image interpretation.
It makes failure modes visible: clinically relevant omissions, hallucinated/unsupported findings, factual contradictions, critical-finding preservation, structured-report compliance, terminology and report-language compliance, privacy hygiene, and auditability.
| Dimension | Weight | Purpose |
|---|---|---|
| CRIT | 30% | Critical-finding preservation and unsafe-negation checks |
| QUAL | 25% | Clinical quality, finding preservation, hallucination resistance, impression synthesis |
| TERM | 20% | Locale, modality, section, terminology, and report-language contract |
| GUIDE | 15% | Guideline and anatomical coverage expectations |
| RAG | 10% | Evidence fidelity, section order, laterality, levels, and measurements |
Critical-finding omissions, unsafe negations, contradictions, unsupported normalcy, wrong report language, and structural errors trigger failure gates — a high average score cannot hide them. See docs/laibench-leaderboard-methods.md.
npm ci
npm run typecheck
npm test
npm run guard:public # public-release safety gate
npm run smoke:mock # run the synthetic en-US suite with a bundled mock agent
npm run smoke:leaderboard # build a leaderboard from the run
npm run smoke:reference # template reference agent on the en-US suite (31 PASS / 18 PARTIAL / 0 FAIL)
npm run ladder # public discrimination ladder → site/ladder.json + docs/public-ladder.md
npm run ladder degrades a template reference report by exactly one error per rung on the 49 public cases — no answer keys needed — and scores every version with the real harness. Under v3.11.0 every critical rung (critical denied, omitted or fabricated, and a "No acute abnormality." null report) is vetoed, and no critical rung passes. Full table: docs/public-ladder.md.
Run the synthetic public en-US suite with a local command adapter:
npm run bench -- suite \
--suite suites/lite-public.en-US.json \
--provider command \
--cmd "node examples/mock-agent.mjs" \
--run-name mock-agent \
--track agent \
--out runs/mock-agent.json
Any agent that reads a JSON job on stdin and writes the report HTML to stdout works with the command provider — no SDK required:
npm run bench -- suite \
--suite suites/lite-public.en-US.json \
--provider command \
--cmd "node path/to/your-agent.mjs" \
--run-name my-agent --track agent \
--entity-name "My Lab" --entity-type org --system-type product-agent \
--out runs/my-agent.json
examples/mock-agent.mjs is a minimal reference adapter. OpenRouter and any OpenAI-compatible endpoint are also supported (--provider openrouter / --provider openai-compatible); examples/smoke-openai-compatible.mjs shows the shape.
npm run bench -- reliability \
--inputs runs/run-1.json runs/run-2.json runs/run-3.json \
--out runs/reliability.json --markdown runs/reliability.md
npm run bench -- eval-submission \
--suite suites/lite-public.en-US.json \
--predictions predictions/my-agent.jsonl \
--run-name my-agent --track agent --out runs/my-agent.json
Each JSONL line follows the prediction record schema (instance_id, model_output). See docs/public-submissions.md.
This is the beginning of the README. Read the rest at the original. Read the full README ↗