| --- |
| 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: |
|
|
| 1. CI's own bisect attribution (when it converged), and |
| 2. **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 |
|
|
| ```bash |
| 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. |
|
|