summarize-eval
Summarize a CXR eval result directory (or compare two) as a Markdown table with metrics as columns and confidence bins as rows. Invoke when the user points at one or two result-dirs and asks for a summary, calibration analysis, or comparison.
- License 许可
- MIT
- 最近更新
- 2026-09-02
- Stars
- ★ 6
- Forks
- 0
01 前言 Front Matter
- name
- summarize-eval
- description
- Summarize a CXR eval result directory (or compare two) as a Markdown table with metrics as columns and confidence bins as rows. Invoke when the user points at one or two result-dirs and asks for a summary, calibration analysis, or comparison.
02 资源文件 1
- 脚本eval_summary.py7.0 KB
03 SKILL.md 正文
summarize-eval
Single result-dir
uv run python .github/skills/summarize-eval/eval_summary.py --result-dir <result-dir>
Required output, in this order:
- The script's stdout, copied verbatim (the Markdown tables — do not edit, re-format, drop, or re-render them).
- The analysis bullets below.
Analysis. One bold headline sentence, then 2–5 free-form bullets. Classification leads when present.
- Headline (bold, 1 sentence). What's true about this run? Lead with the classification verdict (or cxr_metric verdict if classification is absent). Cite the macro-F1 / sensitivity / specificity numbers (or the strongest cxr_metric movement) that support it. No hedging in the headline.
- Bullets. Cover, in whatever order makes the story clearest:
- Calibration — high vs medium (and low if n ≥ 10) on macro-F1 and sensitivity. Well-calibrated, flat, or inverted? Cite the gap.
- Agreement — do cxr_metric numbers point the same direction as the classification verdict? Name the metric that agrees most, or call out a disagreement explicitly.
- Caveats — any bucket with n < 10, or suspicious values (specificity == sensitivity, RadCliQ-v1 negative, SEMB near zero).
- Write bullets as direct observations, not labeled headers ("SEMB dropped -0.076…" not "SEMB: dropped …"). Skip any bullet that has nothing to say. Don't write a "summary" or "overall" bullet — the headline does that. Don't re-hedge magnitudes already in the headline.
Two result-dirs (comparison)
uv run python .github/skills/summarize-eval/eval_summary.py \
--baseline <baseline-dir> --candidate <candidate-dir>
Required output, in this order:
- The script's stdout, copied verbatim (per-dir tables + delta table — do not edit, re-format, drop, or re-render them).
- The analysis bullets below.
Analysis. One bold headline sentence, then 2–5 free-form bullets. Classification leads when present.
- Headline (bold, 1 sentence). Did candidate beat baseline? Cite the macro-F1 / sensitivity / specificity deltas (or the strongest cxr_metric delta if classification is absent). No hedging in the headline.
- Bullets. Cover, in whatever order makes the story clearest:
- Calibration — did the high-vs-medium gap on macro-F1 / sensitivity widen, narrow, or invert? Often the real story; cite both gaps.
- Agreement — do classification deltas and cxr_metric deltas point the same direction? Name the metric that agrees most, or call out a disagreement explicitly ("text similarity dropped while classification improved — surface form changed, findings didn't").
- Caveats — any bucket with n < 10. Classification deltas under ~0.02 and cxr_metric deltas under 0.05 (0.2 for RadCliQ) on small N are noise; say so once.
- Write bullets as direct observations, not labeled headers. Skip any bullet that has nothing to say. Don't write a "summary" or "overall" bullet.
Rules
- Higher is better for BLEU / BERTScore / SEMB / RadGraph. Lower is better for RadCliQ-v0 ↓ and RadCliQ-v1 ↓.
- Higher is better for every classification metric (accuracy, F1, sensitivity, specificity, bal-acc).
- All numbers come from the script's output. Don't recompute.
- Always include the script's stdout tables before the analysis. Never reply with bullets only.
- Markdown only. Tables + bullets. No padding, no clinical disclaimers, no recap of what the metrics measure.
04 同仓库更多 Skills
write-report-with-ehr
Write a context-aware chest X-ray report grounded in the trained MedImageInsight (MI2) adapter AND the patient's EHR record. Adds a COMPARISON section and uses the most recent prior report to call out interval change.
lookup-patient-history
Load a synthetic patient EHR record (demographics, HPI, problems, meds, devices, prior imaging studies and reports) for a given chest X-ray. Invoke as the first step of any context-aware reporting flow that needs patient history. No model calls.
write-report-zeroshot
Write a chest X-ray report grounded in MedImageInsight (MI2) zero-shot classifier scores. Invoke whenever drafting a CXR report when MI2 is available — get vision-grounded per-finding probabilities, then delegate the prose to `write-report-simple`.
write-report-adapter
Write a chest X-ray report grounded in the trained MedImageInsight (MI2) adapter. Invoke whenever drafting a CXR report when the adapter is available — get vision-grounded per-finding positive/possible/negative calls, then delegate the prose to `write-report-simple`.
write-report-zeroshot
Write a chest X-ray report grounded in MedImageInsight (MI2) zero-shot classifier scores. Invoke whenever drafting a CXR report when MI2 is available — get vision-grounded per-finding probabilities, then delegate the prose to `write-report-simple`.
write-report-adapter
Write a chest X-ray report grounded in the trained MedImageInsight (MI2) adapter. Invoke whenever drafting a CXR report when the adapter is available — get vision-grounded per-finding positive/possible/negative calls, then delegate the prose to `write-report-simple`.