GymCoach
근력 트레이닝 기록 및 개인 AI 코치
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A public reference benchmark for radiology finding-to-report generation.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
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.
laibench.laudos.ai is a static site in site/ that runs the real scorer in the browser: scripts/build-site-scorer.mjs bundles src/ with esbuild (Node built-ins shimmed in site-src/shims/) and a test requires the bundle to return the same verdict, score, gate reasons and per-check outcomes as the CLI. The site has the pneumothorax test, a playground that marks up any report with the scorer's evidence, the discrimination ladder, the leaderboard (each row states the scoring version that produced it), the 49 public cases, and in-browser recomputation of the suiteHash and scoringHash.
npm run site:build # bundle the scorer, copy the public cases, write site/provenance.json
npm run ladder # regenerate site/ladder.json
npx serve site # or any static server
npm test fails if site/assets/laibench-scorer.js or site/provenance.json is stale relative to the scoring source.
The public stratified page is a reference-vs-null sanity check: it verifies the harness is not inverted by comparing public reference reports against a fixed unsafe null baseline. That is a sanity check, not a claim that the null baseline measures realistic model degradation. Dose-response controls require answer-key material and are generated only inside the controlled environment; public releases publish aggregate calibration summaries only — never case-level predictions or gold labels.
Two distinct artifacts exist, and only one is open:
Do not attach "open benchmark" language to the controlled suite.
The public demonstration cases under cases/public/ are synthetic and input-only (every case is flagged synthetic: true). The controlled pt-BR cases are synthetic and were authored and reviewed by senior radiologists in São Paulo, SP, Brazil. Synthetic authorship and internal senior-radiologist review are a data-quality process, not an independent third-party validation; external inter-rater adjudication is tracked as future work and is not claimed here. A radiologist-review claim on any public score is gated by npm run guard:public and npm run laibench:validate-adjudication.
This repository ships synthetic, public-safe material only — code, schemas, docs, the site, and a tiny synthetic demo suite. It contains no raw clinical reports, private corpus, hidden test sets, answer keys, private scoring criteria, credentials, or internal tooling. The boundary is enforced by npm run guard:public (and guard:private) in CI. See DATA_ACCESS_POLICY.md.
@software{laibench,
title = {LAIBench: a governance-oriented benchmark for AI-assisted radiology reporting},
author = {{Laudos.AI Research}},
year = {2026},
url = {https://laibench.laudos.ai}
}
Companion (conceptual): Beyond Templates: A Compositional Model and Lower Bound for Radiology Report Variability.
Released under the MIT License. It applies to the public code, schemas, documentation, examples, synthetic demo cases, and tooling in this repository. It does not apply to the private clinical corpus, gated datasets, hidden test sets, answer keys, private scoring criteria, or protected evaluation artifacts — none of which are included here.