title: transformers integration-test failure triage
emoji: π¬
colorFrom: indigo
colorTo: pink
sdk: docker
pinned: false
transformers integration-test failure triage
Static dashboard that reads the daily slow-CI artifacts of
huggingface/transformers (hf-internal-testing/transformers_daily_ci),
filters them to integration tests only, intersects across the last 7 daily
runs to drop flakes, then clusters the survivors by:
- CI's own bisect attribution (when it converged), and
- historical first-failure-day for everything CI could not pin.
The killer view is Regression-day clustering: it surfaces single days on
which dozens (or hundreds) of integration tests went red β almost always a
single fleet-regression PR.
Storage
A single HF bucket is mounted into the Space at /data at create-time.
The refresh writes both the current snapshot and a per-day archive there:
/data/current_view.json
/data/history/YYYY-MM-DD.json
No separate dataset / model repo is involved β the bucket is the canonical store and the Space is the only writer.
Architecture
ββββββββββββββββββββββββββββββββββββββββββ
daily-ci data β hf-internal-testing/transformers_daily_ci
ββreadββββ β YYYY-MM-DD/.../{model_results,
β new_failures_..._authors}.json
ββββββββββββββββββββββββββββββββββββββββββ
β² HF Hub API
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Space (docker SDK, default hardware = cpu-basic) β
β β
β /app/app/refresh.py β pulls last 7 daily reports, β
β filters to IntegrationTest only, β
β β₯5/7 intersection, β
β historical first-failure sweep, β
β joins CI bisect attribution, β
β renders /app/output/index.html. β
β /app/entrypoint.sh β refresh loop + http.server β
β /data/ β bucket mount (current_view + β
β history/YYYY-MM-DD.json) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β direct bucket writes
βΌ
ββββββββββββββββββββββββββββββββββββββββββ
β HF bucket mounted at /data β
β current_view.json β
β history/YYYY-MM-DD.json β
ββββββββββββββββββββββββββββββββββββββββββ
What's where
| path | what |
|---|---|
app/fetch.py |
last-N daily reports from hf-internal-testing/transformers_daily_ci |
app/filter.py |
IntegrationTest gate + β₯5/7 intersection |
app/classify.py |
regex binning of failure traces |
app/cluster.py |
join with CI bisect attribution + cluster by bad_commit |
app/history.py |
walk daily reports backwards to find first-failure-day per test |
app/render.py |
markdown-shaped sections β single static index.html |
app/persist.py |
save to /data/current_view.json + /data/history/YYYY-MM-DD.json |
app/refresh.py |
the orchestrator |
Local dry-run
pip install -r requirements.txt
python app/refresh.py --history-days 90
xdg-open output/index.html
--no-history skips the slow 90-day sweep; useful for a fast first render.
The refresh also writes to output/data/ locally, simulating the
bucket-backed /data/ mount used in production.
CI source
Reads ci_results_run_models_gpu/{model_results,new_failures_with_bad_commit_grouped_by_authors}.json
from the transformers_daily_ci dataset. Slack reporter
utils/notification_service.py in the main repo writes these.