Skip to content

air: Show the experiment, accelerators and config in the air list info pane - #7587

Merged
dimk0 merged 4 commits into
mainfrom
air-list-info-pane-experiment
Nov 14, 2026
Merged

dimk0 merged 4 commits into
mainfrom
air-list-info-pane-experiment

Conversation

@dimk0

@dimk0 dimk0 commented Nov 13, 2026

Copy link
Copy Markdown
Member

Changes

In air list, the info pane (i) now shows the Experiment, the Accelerators and the Configuration box for runs submitted as an ai_runtime_task, as air get already does. Before, the pane showed N/A for Experiment and Accelerators and left the Configuration box out.

Why

The pane renders the same view as air get, but it built the data without the step air get uses to read those fields from the run's ai_runtime_task. The list row had the experiment while the pane for the same run said N/A.

The pane is also where the full experiment name can be read: the list shortens long names to fit the Experiment column, and the pane shows the name whole. Internal ticket: CNXT-2610.

Tests

  • New TestRunDetailTextShowsAiRuntimeTaskFields: fails on main, passes with the fix.
  • go test ./cmd/air, ./task lint-q.

Manual test

air list --all-status --all-users against a staging workspace, then i on the first run. The list row showed the experiment cut off with …. Names are masked.

w/o fix
│  Experiment    N/A
│  Accelerators  N/A
(no Configuration box)

w/ fix
│  Experiment    ██████████████████████████████████████████████████████
│  Accelerators  8x H100
(Configuration box shown above Metadata)

This pull request and its description were written by Isaac.

dimk0 and others added 2 commits November 13, 2026 07:57
…nfo pane

The info pane (`i`) built its data without the step `air get` uses to
read an ai_runtime_task run's experiment, accelerators and config path.
For those runs it showed "N/A" for Experiment and Accelerators and no
Configuration box, although the list row and `air get` had them.

Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
@github-actions github-actions Bot added the AIR Databricks AI Runtime CLI label Nov 13, 2026
@dimk0
dimk0 marked this pull request as ready for review November 13, 2026 08:18
@dimk0
dimk0 requested review from a team as code owners November 13, 2026 08:18
@dimk0
dimk0 requested a review from rclarey November 13, 2026 08:18
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Integration test report

Commit: 343096b

Run: 43518630844

Env 💚​RECOVERED ✅​pass 🙈​skip Time
💚​ aws linux-2core-8gb 1 270 15 4:48
💚​ aws-windows-latest-4core-16gb 1 272 13 4:09
💚​ azure linux-2core-8gb 1 269 15 5:13
💚​ azure-windows-latest-4core-16gb 1 271 13 4:16
💚​ gcp linux-2core-8gb 1 270 15 5:41
💚​ gcp-windows-latest-4core-16gb 1 272 13 3:27
Test Name aws linux-2core-8gb aws-windows-latest-4core-16gb azure linux-2core-8gb azure-windows-latest-4core-16gb gcp linux-2core-8gb gcp-windows-latest-4core-16gb
💚​ TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
Top 3 slowest tests (at least 2 minutes):
duration env testname
3:28 aws-windows-latest-4core-16gb TestAccept
3:19 gcp-windows-latest-4core-16gb TestAccept
3:10 azure-windows-latest-4core-16gb TestAccept

…periment

# Conflicts:
#	cmd/air/list_detail_test.go

@caroline-db caroline-db left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This correctly fixes single-task AIR runs. Multi-task rendering is tracked separately in CNXT-2622 and doesn’t block this PR; note that #7598 duplicates this change.

@dimk0

dimk0 commented Nov 13, 2026

Copy link
Copy Markdown
Member Author

Thanks. #7598 was a duplicate of this change opened from another session and is now closed, so this PR is the one to land. Agreed that multi-task runs are out of scope here: the pane reads the first task, as air get does, and CNXT-2622 covers the rest.

…periment

# Conflicts:
#	cmd/air/list_detail.go
@dimk0
dimk0 added this pull request to the merge queue Nov 14, 2026
Merged via the queue into main with commit e235716 Nov 14, 2026
28 checks passed
@dimk0
dimk0 deleted the air-list-info-pane-experiment branch November 14, 2026 00:20
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

❌ Integration test report

Commit: e235716

Run: 43533630134

Env 🔄​flaky 💚​RECOVERED ✅​pass 🙈​skip Time
💚​ aws linux-2core-8gb 12 1623 1316 206:54
🔄​ azure linux-2core-8gb 3 9 1603 1324 184:29
💚​ gcp linux-2core-8gb 12 1610 1322 211:02
12 interesting tests: 9 RECOVERED, 3 flaky
Test Name aws linux-2core-8gb azure linux-2core-8gb gcp linux-2core-8gb
🔄​ TestAccept 💚​R 🔄​f 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started-omitted 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started-omitted/DMS=true 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started-toggle 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started-toggle/DMS= 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started-toggle/DMS=true 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started/DMS= 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/apps/lifecycle-started/DMS=true 💚​R 💚​R 💚​R
🔄​ TestAccept/bundle/resources/postgres_synced_tables/recreate 💚​R 🔄​f 💚​R
🔄​ TestAccept/bundle/resources/postgres_synced_tables/recreate/DMS= 💚​R 🔄​f 💚​R
💚​ TestAccept/bundle/resources/postgres_synced_tables/recreate/DMS=true 💚​R 💚​R 💚​R
Top 50 slowest tests (at least 2 minutes):
duration env testname
11:26 gcp linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started/DMS=true
9:57 gcp linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started/DMS=
9:40 aws linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started/DMS=true
9:10 azure linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started/DMS=true
8:59 azure linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started/DMS=
8:44 aws linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started/DMS=
7:32 azure linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started/DMS=
7:16 gcp linux-2core-8gb TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DMS=
7:10 gcp linux-2core-8gb TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DMS=true
7:06 gcp linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started/DMS=true
7:01 gcp linux-2core-8gb TestAccept/bundle/invariant/no_drift/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
6:47 aws linux-2core-8gb TestAccept/bundle/config-remote-sync/multiple_resources/DMS=true
6:45 gcp linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started/DMS=
6:41 gcp linux-2core-8gb TestAccept/bundle/config-remote-sync/multiple_resources/DMS=true
6:29 aws linux-2core-8gb TestAccept/bundle/config-remote-sync/multiple_resources/DMS=
6:24 azure linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started/DMS=true
6:09 aws linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started/DMS=true
6:04 aws linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DMS=
6:01 aws linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started/DMS=
6:01 azure linux-2core-8gb TestAccept/bundle/config-remote-sync/multiple_resources/DMS=
5:51 gcp linux-2core-8gb TestAccept/bundle/config-remote-sync/multiple_resources/DMS=
5:26 azure linux-2core-8gb TestAccept/bundle/config-remote-sync/multiple_resources/DMS=true
5:19 gcp linux-2core-8gb TestAccept/bundle/invariant/no_drift/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
5:10 azure linux-2core-8gb TestAccept/pipelines/run/refresh-flags
5:05 aws linux-2core-8gb TestAccept/bundle/deploy/spark-jar-task/DMS=true
5:02 gcp linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DMS=true
5:00 aws linux-2core-8gb TestAccept/bundle/deploy/spark-jar-task/DMS=
4:50 azure linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DMS=true
4:48 gcp linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DMS=
4:44 aws linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DMS=true
4:28 aws linux-2core-8gb TestAccept/pipelines/run/refresh-flags
4:21 gcp linux-2core-8gb TestAccept/pipelines/run/refresh-flags
4:10 azure linux-2core-8gb TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DMS=
4:09 aws linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-toggle/DMS=
3:40 gcp linux-2core-8gb TestAccept/bundle/templates/default-python/combinations/classic/DLT=yes/DMS=/NBOOK=yes/PY=yes/READPLAN=
3:39 aws linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-omitted/DMS=true
3:34 aws linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-toggle/DMS=true
3:33 gcp linux-2core-8gb TestAccept/bundle/invariant/no_drift/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
3:31 azure linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-toggle/DMS=true
3:28 gcp linux-2core-8gb TestAccept/bundle/deploy/spark-jar-task/DMS=true
3:28 azure linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-omitted/DMS=true
3:22 aws linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-omitted/DMS=
3:17 azure linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-omitted/DMS=
3:17 gcp linux-2core-8gb TestAccept/bundle/templates/default-python/combinations/classic/DLT=yes/DMS=/NBOOK=yes/PY=no/READPLAN=1
3:16 aws linux-2core-8gb TestAccept/bundle/resources/schemas/rename_then_change/DMS=true
3:13 aws linux-2core-8gb TestAccept/bundle/templates/default-python/combinations/serverless/DLT=no/DMS=/NBOOK=no/PY=yes/READPLAN=1
3:11 gcp linux-2core-8gb TestAccept/bundle/invariant/delete_idempotent/DMS=/INPUT_CONFIG=cluster_libraries.yml.tmpl/READPLAN=1
3:09 gcp linux-2core-8gb TestAccept/bundle/deploy/spark-jar-task/DMS=
3:05 azure linux-2core-8gb TestAccept/bundle/resources/apps/lifecycle-started-toggle/DMS=
3:04 gcp linux-2core-8gb TestAccept/bundle/resources/apps/inline_config/DMS=

idelafuente-oc pushed a commit to idelafuente-oc/cli that referenced this pull request Nov 14, 2026
…databricks#7583)

## Changes

In the interactive `air list` table, the Experiment and User columns now
shrink to fit the terminal width instead of pushing the columns to their
right past the window edge.

- The list tracks the terminal width from `WindowSizeMsg` and lays the
columns out against it, on resize and when a lazily loaded page arrives.
- When the table is wider than the terminal, Experiment and User give up
cells, widest first, down to floors of 12 and 8 cells.
- A shortened Experiment keeps its end behind a leading `…`, the rule
databricks#7582 uses for the MLflow column, because experiment names often share a
prefix. A shortened User keeps its start, since emails differ there.
- The one-shot table (piped output, `NO_COLOR`, `--limit`) is unchanged,
including which end of a long Experiment it keeps.

This PR builds on databricks#7582 (merged), which provides `truncateStart` and the
display-width `truncate`.

Known gaps:

- The other columns have fixed widths, so the table only fits from about
136 columns up (measured on real runs; it depends on the statuses and
durations shown). In narrower terminals it is narrower than before but
the rightmost columns are still cut off. Fitting those widths means
shrinking or hiding fixed columns, which this PR doesn't do. Tracked
internally as CNXT-2619.
- The full experiment name is meant to be read in the info pane (`i`),
which shows `N/A` for many runs today. databricks#7587 fixes that.

## Why

Every column was sized from its content, with Experiment and User capped
at 36 cells, and nothing looked at the terminal width. With long
experiment names the table was about 180 cells wide, so the columns to
the right of Experiment were unreadable in most terminals. Internal
ticket: CNXT-2610.

In a 133-column terminal against real runs, cutting 14 distinct
experiment names to 12 cells at their end left 7 distinct labels;
keeping the end leaves all 14 distinct.

## Tests

- Unit tests for the width allocation at 80, 120, 134, 160 and 200
columns, for relayout on resize and on a lazily loaded page, for which
end each column keeps, and for the unchanged one-shot table.
- `go test ./cmd/air`, `./task lint-q`.

## Manual test

`air list --all-status --all-users` against a staging workspace in a
133-column terminal: Experiment shrank to 12 cells and User to 8. All 20
Experiment cells kept their end behind a leading `…`, and all 20 User
cells kept their start. The table was 136 cells wide, so the
`Accelerators` header lost its last 3 characters.

The list model with fixture rows, long Experiment and User values:

160 columns, w/o fix (cut at the window edge):
```
   Run ID           Experiment                            Status     Started              Duration    Progress  MLflow                  User
▸  684127395104822  /Users/someone.longname@example.com…  ● SUCCESS  2026-10-23T17:32:39    1h 14m           -  qwen-run-001            someone.with.a.long.name.for
```

160 columns, w/ fix:
```
   Run ID           Experiment               Status     Started              Duration    Progress  MLflow                  User                     Accelerators
▸  684127395104822  …art/qwen-finetune-lora  ● SUCCESS  2026-10-23T17:32:39    1h 14m           -  qwen-run-001            someone.with.a.long.na…  8x H100
```

120 columns, w/ fix (Accelerators still cut off):
```
   Run ID           Experiment    Status     Started              Duration    Progress  MLflow                  User
▸  684127395104822  …netune-lora  ● SUCCESS  2026-10-23T17:32:39    1h 14m           -  qwen-run-001            someone…
```

This pull request and its description were written by Isaac.

---------

Co-authored-by: Isaac <no-reply@databricks.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIR Databricks AI Runtime CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants