Skip to content

Embed MLflow run ID in dashboard CSV and Slack notifications - #2 - #153

Open
Harshith-umesh wants to merge 19 commits into
openshift-psap:mainfrom
Harshith-umesh:mlflow-url-in-csv
Open

Embed MLflow run ID in dashboard CSV and Slack notifications - #2#153
Harshith-umesh wants to merge 19 commits into
openshift-psap:mainfrom
Harshith-umesh:mlflow-url-in-csv

Conversation

@Harshith-umesh

@Harshith-umesh Harshith-umesh commented Jul 31, 2026

Copy link
Copy Markdown
Member

Summary

Pre-creates the MLflow run during the test step so its run_id and experiment_id are available before CSV generation. The export step resumes this run instead of creating a new one, ensuring the dashboard CSV and Slack notifications link to the correct MLflow entry.

Changes

  • Pre-create MLflow run (test_phase.py): New _precreate_mlflow_run() helper creates an MLflow run early in the test phase, capturing run_id and experiment_id. Sets MLFLOW_WORKSPACE and FJOB_NAME to match the export step's context. Writes a marker file (__mlflow_precreated_run__.yaml) for cross-step persistence.

  • Resume pre-created run on export (export.py, mlflow_backend.py): _discover_precreated_mlflow_run_id() looks for the marker file first, then falls back to reading mlflow_run_id from __test_labels__.yaml (already discovered by the export step). Both log_artifacts() and log_multi_run_artifacts() now pass run_name alongside run_id so the run name is set correctly on resume.

  • Dashboard CSV (csv_export.py, plugin.py): Added mlflow_run_id and mlflow_experiment_id columns to FIELDNAMES and _extract_row(). The postprocess plugin maps these from test labels into CSV rows.

  • Slack notifications (regression.py): New _build_mlflow_run_url() constructs the MLflow URL at runtime from vault secrets (tracking URI) and config (run ID, experiment ID, workspace). Both regression and failure notifications include a clickable MLflow link.

Test plan

  • Run a full pipeline (forge-full) and verify:
    • Dashboard CSV contains correct mlflow_run_id and mlflow_experiment_id
    • Dashboard-generated MLflow URL matches the actual MLflow run URL
    • MLflow run name matches FJOB_NAME (not auto-generated)
    • Slack notification includes a working MLflow link
  • Verify pd.concat handles schema evolution (old CSV rows get NaN for new columns)
  • Verify no secrets are persisted to artifacts (tracking URI is fetched from vault at runtime)

Summary by CodeRabbit

  • New Features
    • Added support for pre-created MLflow runs during benchmarking and artifact exports.
    • MLflow run and experiment links can now appear in regression, failure, and success notifications.
    • Dashboard CSV exports now include MLflow run and experiment identifiers.
    • Added optional success notifications for completed analyses, including workload, cluster, version, and dashboard details.
  • Bug Fixes
    • Improved MLflow run naming and identifier handling for single- and multi-run exports.
    • Notifications now consistently use configured Slack recipients and optional notification settings.

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 31, 2026
@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign tosokin for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The change pre-creates and propagates MLflow run metadata through RHAIIS benchmarks, exports, CSV output, and Slack notifications. It also adds MLflow URL generation, configurable success notifications, public Caliper secret utilities, and ignore rules for generated files.

Changes

MLflow reporting flow

Layer / File(s) Summary
Pre-created run lifecycle
projects/caliper/public/*, projects/caliper/orchestration/export.py, projects/rhaiis/orchestration/test_phase.py, projects/caliper/engine/file_export/*
Pre-created MLflow runs are written to markers, discovered during export, passed to single-run and multi-run exports, and used with explicit run names.
Benchmark metadata propagation
projects/rhaiis/postprocess/csv_export.py, projects/rhaiis/postprocess/plugin.py
Dashboard CSV output defines MLflow run and experiment columns and populates them from KPI labels.
Notification and regression reporting
projects/rhaiis/postprocess/regression.py, projects/rhaiis/orchestration/analysis.py, projects/rhaiis/orchestration/test_phase.py, projects/rhaiis/orchestration/config.yaml
Regression and failure messages include MLflow links. Optional success messages include benchmark metadata and are controlled by slack_notify_always.

Configuration hygiene

Layer / File(s) Summary
Generated launcher file exclusions
.gitignore
The launcher configuration ignore section excludes Fournos job YAML files and kubeconfig files.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant TestPhase
  participant MLflow
  participant Marker
  participant Export
  participant Slack
  TestPhase->>MLflow: precreate and finish run
  TestPhase->>Marker: store run and experiment IDs
  Export->>Marker: discover run ID
  Export->>MLflow: export artifacts with run ID
  TestPhase->>Slack: send success or regression notification with MLflow link
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 61.54% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main user-visible changes: adding the MLflow run ID to dashboard CSV output and Slack notifications.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread projects/rhaiis/orchestration/test_phase.py Outdated
Comment thread projects/rhaiis/orchestration/test_phase.py Outdated
Comment thread projects/rhaiis/orchestration/test_phase.py Outdated
Comment thread projects/rhaiis/postprocess/regression.py
Comment thread .gitignore Outdated
Comment thread projects/caliper/orchestration/export.py
@Harshith-umesh
Harshith-umesh marked this pull request as ready for review August 3, 2026 15:41
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Aug 3, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (2)
projects/rhaiis/orchestration/test_phase.py (1)

622-667: 🎯 Functional Correctness | 🔵 Trivial

Duplicate success-notification setup vs. run_regression_check.

When compare_version/version are both set, run_regression_check() (in analysis.py) handles the no-regression case internally and already sends a success notification with the same model/accelerator/tp/dp/slack_user computation. When they are not both set, this block (lines 644-667) re-implements the identical model/accelerator/engine-args/tp/dp lookup and calls send_success_notification again. See consolidated comment for the shared fix.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/rhaiis/orchestration/test_phase.py` around lines 622 - 667, The
success-notification setup is duplicated between the compare-version path and
the unconditional slack-notification block. Consolidate the shared model,
accelerator, engine-args, tensor/data-parallel, and notification behavior around
run_regression_check and send_success_notification so the no-regression path
cannot send duplicate notifications while preserving notifications when
comparison is not requested.
projects/rhaiis/orchestration/analysis.py (1)

168-172: 🎯 Functional Correctness | 🔵 Trivial

Duplicate success-notification setup vs. _sync_postprocessed_dashboard_csv.

This branch (lines 200-214) computes tp/dp/slack_user and calls send_success_notification with the same shape of arguments used in test_phase.py's _sync_postprocessed_dashboard_csv. See consolidated comment for the shared fix.

Also applies to: 189-214

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/rhaiis/orchestration/analysis.py` around lines 168 - 172, Remove the
duplicated tensor/data parallel argument and Slack-user setup from the branch
around send_success_notification, and reuse the existing shared notification
logic used by _sync_postprocessed_dashboard_csv. Preserve the current argument
values and success-notification behavior while centralizing construction of the
notification inputs in one helper or shared path.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/caliper/engine/file_export/mlflow_backend.py`:
- Around line 416-420: Update log_artifacts() and log_multi_run_artifacts() so
that when resuming with run_id and a resolved run_name, they set the
mlflow.runName tag inside the active MLflow run context before applying other
metadata. Preserve the existing start_kw handling and apply this behavior
consistently in both artifact logging paths.

In `@projects/caliper/orchestration/export.py`:
- Around line 364-403: Update build_mlflow_run_url() to validate tracking_uri
with the existing assert_tracking_uri_has_no_userinfo() guard before composing
the Slack-visible URL, preserving the current empty-string fallback when
validation fails. Do not log or include the URI or any validation error details,
and leave the scheme check and URL construction unchanged for valid
credential-free URIs.
- Around line 267-335: Ensure the MLflow workspace restoration around
precreate_mlflow_run is executed in a finally block, including when
mlflow.set_tracking_uri, mlflow.set_experiment, mlflow.start_run, or another
operation inside the connection context raises. Keep the existing restoration
behavior for both previously set and unset MLFLOW_WORKSPACE values, while
preserving the function’s current return and logging flow on success.

---

Nitpick comments:
In `@projects/rhaiis/orchestration/analysis.py`:
- Around line 168-172: Remove the duplicated tensor/data parallel argument and
Slack-user setup from the branch around send_success_notification, and reuse the
existing shared notification logic used by _sync_postprocessed_dashboard_csv.
Preserve the current argument values and success-notification behavior while
centralizing construction of the notification inputs in one helper or shared
path.

In `@projects/rhaiis/orchestration/test_phase.py`:
- Around line 622-667: The success-notification setup is duplicated between the
compare-version path and the unconditional slack-notification block. Consolidate
the shared model, accelerator, engine-args, tensor/data-parallel, and
notification behavior around run_regression_check and send_success_notification
so the no-regression path cannot send duplicate notifications while preserving
notifications when comparison is not requested.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: bf88813e-4411-4f6b-b653-01f70cb71772

📥 Commits

Reviewing files that changed from the base of the PR and between cd8c7c8 and 0616bac.

📒 Files selected for processing (10)
  • .gitignore
  • projects/caliper/engine/file_export/mlflow_backend.py
  • projects/caliper/orchestration/export.py
  • projects/rhaiis/orchestration/analysis.py
  • projects/rhaiis/orchestration/config.d/rhaiis.yaml
  • projects/rhaiis/orchestration/config.yaml
  • projects/rhaiis/orchestration/test_phase.py
  • projects/rhaiis/postprocess/csv_export.py
  • projects/rhaiis/postprocess/plugin.py
  • projects/rhaiis/postprocess/regression.py

Comment thread projects/caliper/engine/file_export/mlflow_backend.py
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py Outdated
@kpouget

kpouget commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@Harshith-umesh #155 has been merged, so you can rebase on top of main?

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 4, 2026
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 4, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/caliper/orchestration/export.py`:
- Around line 405-406: Update the URL construction near the tracking URI return
to URL-encode the workspace value before inserting it into the query string,
preserving the existing omission of the query parameter when workspace is empty.
Use the module’s existing URL-encoding utility or import the standard
query-string encoder rather than interpolating the raw workspace value.
- Around line 295-300: Update run_from_orchestration_config() to resolve and
load the file-based backend.mlflow.config YAML before looking up experiment and
workspace or creating the run. Ensure both inline mappings and YAML paths
populate the existing experiment and workspace settings consistently for resumed
runs.
- Around line 312-331: Update the MLflow run setup around
mlflow.set_tracking_uri to capture the current tracking URI before applying
tracking_uri, then restore that saved URI in the existing finally block
alongside MLFLOW_WORKSPACE restoration. Preserve the current behavior when no
tracking_uri is provided.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6fcd1721-fbce-4f74-8fad-230aecc26972

📥 Commits

Reviewing files that changed from the base of the PR and between a38dd81 and d9f651f.

📒 Files selected for processing (12)
  • .gitignore
  • projects/caliper/engine/file_export/artifacts_export_run.py
  • projects/caliper/engine/file_export/mlflow_backend.py
  • projects/caliper/orchestration/export.py
  • projects/rhaiis/orchestration/analysis.py
  • projects/rhaiis/orchestration/config.d/rhaiis.yaml
  • projects/rhaiis/orchestration/config.d/workloads.yaml
  • projects/rhaiis/orchestration/config.yaml
  • projects/rhaiis/orchestration/test_phase.py
  • projects/rhaiis/postprocess/csv_export.py
  • projects/rhaiis/postprocess/plugin.py
  • projects/rhaiis/postprocess/regression.py
🚧 Files skipped from review as they are similar to previous changes (9)
  • projects/rhaiis/postprocess/plugin.py
  • projects/rhaiis/postprocess/regression.py
  • projects/caliper/engine/file_export/mlflow_backend.py
  • projects/rhaiis/orchestration/config.d/rhaiis.yaml
  • projects/rhaiis/orchestration/analysis.py
  • .gitignore
  • projects/rhaiis/orchestration/config.yaml
  • projects/rhaiis/orchestration/test_phase.py
  • projects/rhaiis/postprocess/csv_export.py

Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/caliper/orchestration/export.py Outdated
Comment thread projects/rhaiis/orchestration/config.d/rhaiis.yaml Outdated
Comment thread projects/rhaiis/orchestration/config.d/workloads.yaml Outdated
Comment thread projects/rhaiis/orchestration/analysis.py
Comment thread projects/rhaiis/orchestration/test_phase.py Outdated
Comment thread .gitignore Outdated
Harshith-umesh and others added 16 commits August 4, 2026 14:05
…k notifications

Pre-create the MLflow run during the test step (before CSV generation)
so the run_id and experiment_id are available for:
- Dashboard CSV columns (mlflow_run_id, mlflow_experiment_id)
- Slack notifications (MLflow run URL constructed at runtime from vault)

The export step resumes the pre-created run instead of creating a new one,
via the existing run_id parameter on both single-run and multi-run paths.

Co-authored-by: Cursor <cursoragent@cursor.com>
config.project.set_config() is in-memory only and doesn't survive across
pipeline steps (separate process invocations). Write the pre-created
run_id to a __mlflow_precreated_run__.yaml marker file that the export
step discovers by scanning the artifact tree.

Co-authored-by: Cursor <cursoragent@cursor.com>
The pre-created run was landing in the wrong workspace/experiment
(233 instead of 264) because MLFLOW_WORKSPACE was not set. The export
step sets it, so the same experiment name resolved to a different
experiment ID, and the export couldn't resume the pre-created run.

Co-authored-by: Cursor <cursoragent@cursor.com>
The marker file approach was fragile — if _write_mlflow_precreated_run_marker()
failed, the exception was silently caught and the export step created a new
MLflow run instead of resuming the pre-created one.

Two changes:
- export.py: _discover_precreated_mlflow_run_id() now falls back to reading
  mlflow_run_id from __test_labels__.yaml in already-discovered run_dirs
- test_phase.py: marker write is isolated in its own try/except so failures
  are logged separately from the pre-creation itself

Co-authored-by: Cursor <cursoragent@cursor.com>
…un_id key

config.project.set_config() raises KeyError when the key doesn't exist in
the config schema. This was the root cause of the marker file never being
written — the KeyError was caught by the outer try/except before the marker
write could execute. The set_config calls are unnecessary since the run_id
is communicated via test labels and the marker file, not in-memory config.

Co-authored-by: Cursor <cursoragent@cursor.com>
Pre-created runs got MLflow's auto-generated name (e.g. rambunctious-fowl-43)
because start_run() was called without run_name. The export step's resume
path also skipped run_name when run_id was set (elif branch).

Two fixes:
- Pre-creation: pass FJOB_NAME as run_name to start_run()
- Resume: pass both run_id and run_name so the name is updated on resume

Co-authored-by: Cursor <cursoragent@cursor.com>
Addresses reviewer feedback: rhaiis orchestration/postprocess must not
import caliper engine code directly.

Moved to caliper/orchestration/export.py:
- precreate_mlflow_run() (was _precreate_mlflow_run in test_phase.py)
- write_mlflow_precreated_run_marker() (was _write_mlflow_precreated_run_marker)
- build_mlflow_run_url() (was _build_mlflow_run_url in regression.py)

rhaiis files now import from projects.caliper.orchestration.export.

Co-authored-by: Cursor <cursoragent@cursor.com>
… helpers to caliper

- Add send_success_notification() for clean pipeline completions
- Wire tests.rhaiis.slack_notify_always config to trigger it
- Add dashboard link (gated on csv_dashboard.enabled) and MLflow link
- Move precreate_mlflow_run, write_mlflow_precreated_run_marker, and
  build_mlflow_run_url from rhaiis to caliper/orchestration/export.py

Co-authored-by: Cursor <cursoragent@cursor.com>
The config keys caliper.export.mlflow_run_id/experiment_id don't exist
in the schema, so get_config returns None and the URL is never built.
Now reads from the __mlflow_precreated_run__.yaml marker file on disk.

Co-authored-by: Cursor <cursoragent@cursor.com>
- mlflow_backend.py: set mlflow.runName tag explicitly when resuming a
  run with run_id, since some MLflow versions ignore run_name in
  start_run() during resume
- export.py: wrap MLFLOW_WORKSPACE restoration in finally block so it
  executes even if set_experiment/start_run raises
- export.py: validate tracking_uri with assert_tracking_uri_has_no_userinfo()
  before composing the Slack-visible MLflow URL

Co-authored-by: Cursor <cursoragent@cursor.com>
…run_id

The marker file is always written reliably; the test-labels fallback
was redundant defensive code.

Co-authored-by: Cursor <cursoragent@cursor.com>
Import was lost during rebase when build_mlflow_run_url() was
rewritten to read from the marker file.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Revert agent_analysis.url change and workload rampup additions —
these belong in a separate PR per reviewer feedback.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Create projects/caliper/public/file_export.py to expose engine
  functions; orchestration imports from public instead of engine
- Refactor precreate_mlflow_run() to accept secrets_path, experiment,
  workspace from caller instead of reading project config
- Combine precreate_mlflow_run() and write_mlflow_precreated_run_marker()
  into a single call
- Refactor build_mlflow_run_url() to accept secrets_path and workspace
  from caller
- Move config reads to rhaiis callers (test_phase.py, regression.py)
- Save/restore tracking URI in finally block alongside MLFLOW_WORKSPACE
- URL-encode workspace in MLflow URL query string
- Add logger.warning for all failure return paths
- Warn on invalid marker YAML object type
- Remove bare except swallowing in _read_mlflow_ids_from_marker
- Add docstring explaining MLFLOW_PRECREATED_RUN_MARKER purpose
- Revert unrelated rhaiis changes (agent_analysis.url, workloads rampup)

Co-authored-by: Cursor <cursoragent@cursor.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/caliper/orchestration/export.py`:
- Around line 355-363: Update the marker-scanning logic to catch file-read and
YAML parsing errors for each marker, log or skip the malformed entry, and
continue scanning so the empty-ID fallback remains reachable. In the marker
handling around the existing data mapping check, require a non-empty string
run_id before returning it, and only return a validated string experiment_id as
appropriate for the existing contract.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 969f9e5c-da09-43b8-a619-c6cbf8e8013c

📥 Commits

Reviewing files that changed from the base of the PR and between d9f651f and 9731846.

📒 Files selected for processing (5)
  • projects/caliper/orchestration/export.py
  • projects/caliper/public/__init__.py
  • projects/caliper/public/file_export.py
  • projects/rhaiis/orchestration/test_phase.py
  • projects/rhaiis/postprocess/regression.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • projects/rhaiis/postprocess/regression.py
  • projects/rhaiis/orchestration/test_phase.py

Comment thread projects/caliper/orchestration/export.py
Harshith-umesh and others added 2 commits August 4, 2026 15:05
The slack_notify_always notification was inside
_sync_postprocessed_dashboard_csv() which returns early when
csv_dashboard.enabled is false. Move to a standalone function
called from run() so it fires independently.

Co-authored-by: Cursor <cursoragent@cursor.com>
…cess_notification

Co-authored-by: Cursor <cursoragent@cursor.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/caliper/orchestration/export.py`:
- Around line 319-332: The export flow around mlflow.set_experiment and the
finally restoration block must preserve the caller’s active MLflow experiment.
Capture the current experiment before switching to experiment, then restore it
in finally alongside MLFLOW_WORKSPACE and the tracking URI, including the prior
default/no-experiment state.
- Around line 421-422: Update the exception handler around reading the MLflow
pre-created run marker to catch yaml.YAMLError without binding or logging the
exception text. Keep the generic warning and existing skip behavior, while
retaining OSError handling as appropriate.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8d7573c5-2ff3-4864-bc3f-3d9372ba279e

📥 Commits

Reviewing files that changed from the base of the PR and between 9731846 and 2b951ca.

📒 Files selected for processing (12)
  • .gitignore
  • projects/caliper/engine/file_export/artifacts_export_run.py
  • projects/caliper/engine/file_export/mlflow_backend.py
  • projects/caliper/orchestration/export.py
  • projects/caliper/public/__init__.py
  • projects/caliper/public/file_export.py
  • projects/rhaiis/orchestration/analysis.py
  • projects/rhaiis/orchestration/config.yaml
  • projects/rhaiis/orchestration/test_phase.py
  • projects/rhaiis/postprocess/csv_export.py
  • projects/rhaiis/postprocess/plugin.py
  • projects/rhaiis/postprocess/regression.py
🚧 Files skipped from review as they are similar to previous changes (11)
  • projects/rhaiis/postprocess/plugin.py
  • projects/rhaiis/postprocess/csv_export.py
  • projects/caliper/public/file_export.py
  • projects/caliper/public/init.py
  • projects/rhaiis/orchestration/config.yaml
  • projects/caliper/engine/file_export/mlflow_backend.py
  • projects/rhaiis/orchestration/analysis.py
  • .gitignore
  • projects/caliper/engine/file_export/artifacts_export_run.py
  • projects/rhaiis/postprocess/regression.py
  • projects/rhaiis/orchestration/test_phase.py

Comment thread projects/caliper/orchestration/export.py
Comment thread projects/caliper/orchestration/export.py
Move personal ignore patterns (fournos-job-*.yaml, kubeconfig*) to
.git/info/exclude per reviewer feedback.

Co-authored-by: Cursor <cursoragent@cursor.com>
@Harshith-umesh

Copy link
Copy Markdown
Member Author

/test fournos rhaiis nvidia
/pipeline forge-full
/exclusive false
/cluster hera
/var tests.rhaiis.version: vLLM-0.24.0-delete-gh
/var rhaiis.images.nvidia: vllm/vllm-openai:v0.24.0
/var tests.rhaiis.model_key: nemotron3super-120b-fp8
/var tests.rhaiis.workload_keys: ["profile1","profile2","profile4"]
/var rhaiis.engines.vllm.args.tensor-parallel-size: 2
/var tests.rhaiis.slack_notify_always: true
/var rhaiis.cluster_tag: hera2
/var rhaiis.deploy.image_pull_secrets: ["npalaska-image-pull"]
/var rhaiis.profiler.enabled: false
/var tests.rhaiis.warmup: false
/var caliper.postprocess.csv_dashboard.enabled: true
/var workloads.profile1.rates: [1,50,100,200,300]
/var workloads.profile1.max_seconds: 10
/var workloads.profile2.rates: [1,50,100,200,300]
/var workloads.profile2.max_seconds: 10
/var workloads.profile4.rates: [1,50,100,200,300]
/var workloads.profile4.max_seconds: 10

@psap-forge-bot

psap-forge-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

🔴 Execution of rhaiis nvidia 🔴

Execution Engine Configuration

forge:
  args:
  - nvidia
  configOverrides:
    caliper.postprocess.csv_dashboard.enabled: true
    rhaiis.cluster_tag: hera2
    rhaiis.deploy.image_pull_secrets:
    - npalaska-image-pull
    rhaiis.engines.vllm.args.tensor-parallel-size: 2
    rhaiis.images.nvidia: vllm/vllm-openai:v0.24.0
    rhaiis.profiler.enabled: false
    tests.rhaiis.model_key: nemotron3super-120b-fp8
    tests.rhaiis.slack_notify_always: true
    tests.rhaiis.version: vLLM-0.24.0-delete-gh
    tests.rhaiis.warmup: false
    tests.rhaiis.workload_keys:
    - profile1
    - profile2
    - profile4
    workloads.profile1.max_seconds: 10
    workloads.profile1.rates:
    - 1
    - 50
    - 100
    - 200
    - 300
    workloads.profile2.max_seconds: 10
    workloads.profile2.rates:
    - 1
    - 50
    - 100
    - 200
    - 300
    workloads.profile4.max_seconds: 10
    workloads.profile4.rates:
    - 1
    - 50
    - 100
    - 200
    - 300
  project: rhaiis

Artifact Links

Test Logs

00 Pre-Cleanup 2 seconds

01 Prepare 3 seconds

02 Preflight 2 seconds

03 Test 7 minutes, 15 seconds

04 Post-Cleanup 5 seconds

🔄 05 Export-Artifacts

Post-processing Status

  • parse: success
  • artifacts_to_kpis: success
  • kpis_to_csv: success
  • ⏭️ artifacts_to_ai_data: disabled

    kpi.artifacts_to_ai_data disabled

  • ⏭️ s3_import: disabled

    s3_import disabled

  • ⏭️ analyse_kpis: disabled

    analyze disabled

  • ⏭️ s3_export: disabled

    s3_export disabled

@psap-forge-bot

psap-forge-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown
🔴 Submission of rhaiis nvidia failed after 10 minutes, 15 seconds 🔴

Error: FournosJobFailureError: FOURNOS Job 'forge-rhaiis-20260804-201255' failed: Tasks Completed: 6 (Failed: 1, Cancelled 0), Skipped: 0

/test fournos rhaiis nvidia
/var tests.rhaiis.version: vLLM-0.24.0-delete-gh
/var rhaiis.images.nvidia: vllm/vllm-openai:v0.24.0
/var tests.rhaiis.model_key: nemotron3super-120b-fp8
/var tests.rhaiis.workload_keys: ["profile1","profile2","profile4"]
/var rhaiis.engines.vllm.args.tensor-parallel-size: 2
/var tests.rhaiis.slack_notify_always: true
/var rhaiis.cluster_tag: hera2
/var rhaiis.deploy.image_pull_secrets: ["npalaska-image-pull"]
/var rhaiis.profiler.enabled: false
/var tests.rhaiis.warmup: false
/var caliper.postprocess.csv_dashboard.enabled: true
/var workloads.profile1.rates: [1,50,100,200,300]
/var workloads.profile1.max_seconds: 10
/var workloads.profile2.rates: [1,50,100,200,300]
/var workloads.profile2.max_seconds: 10
/var workloads.profile4.rates: [1,50,100,200,300]
/var workloads.profile4.max_seconds: 10
/pipeline forge-full
/exclusive false
/cluster hera

@Harshith-umesh

Copy link
Copy Markdown
Member Author

/test fournos rhaiis nvidia
/pipeline forge-full
/exclusive false
/cluster hera
/var tests.rhaiis.version: vLLM-0.24.0-delete-gh
/var rhaiis.images.nvidia: vllm/vllm-openai:v0.24.0
/var tests.rhaiis.model_key: nemotron3super-120b-fp8
/var tests.rhaiis.workload_keys: ["profile1","profile2","profile4"]
/var rhaiis.engines.vllm.args.tensor-parallel-size: 2
/var tests.rhaiis.slack_notify_always: true
/var benchmarks.guidellm.fs_group: 0
/var rhaiis.cluster_tag: hera2
/var rhaiis.deploy.image_pull_secrets: ["npalaska-image-pull"]
/var rhaiis.profiler.enabled: false
/var tests.rhaiis.warmup: false
/var caliper.postprocess.csv_dashboard.enabled: true
/var workloads.profile1.rates: [1,50,100,200,300]
/var workloads.profile1.max_seconds: 10
/var workloads.profile2.rates: [1,50,100,200,300]
/var workloads.profile2.max_seconds: 10
/var workloads.profile4.rates: [1,50,100,200,300]
/var workloads.profile4.max_seconds: 10

@psap-forge-bot

psap-forge-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

🟢 Execution of rhaiis nvidia 🟢

Execution Engine Configuration

forge:
  args:
  - nvidia
  configOverrides:
    benchmarks.guidellm.fs_group: 0
    caliper.postprocess.csv_dashboard.enabled: true
    rhaiis.cluster_tag: hera2
    rhaiis.deploy.image_pull_secrets:
    - npalaska-image-pull
    rhaiis.engines.vllm.args.tensor-parallel-size: 2
    rhaiis.images.nvidia: vllm/vllm-openai:v0.24.0
    rhaiis.profiler.enabled: false
    tests.rhaiis.model_key: nemotron3super-120b-fp8
    tests.rhaiis.slack_notify_always: true
    tests.rhaiis.version: vLLM-0.24.0-delete-gh
    tests.rhaiis.warmup: false
    tests.rhaiis.workload_keys:
    - profile1
    - profile2
    - profile4
    workloads.profile1.max_seconds: 10
    workloads.profile1.rates:
    - 1
    - 50
    - 100
    - 200
    - 300
    workloads.profile2.max_seconds: 10
    workloads.profile2.rates:
    - 1
    - 50
    - 100
    - 200
    - 300
    workloads.profile4.max_seconds: 10
    workloads.profile4.rates:
    - 1
    - 50
    - 100
    - 200
    - 300
  project: rhaiis

Artifact Links

Test Logs

00 Pre-Cleanup 2 seconds

01 Prepare 3 seconds

02 Preflight 2 seconds

03 Test 14 minutes, 20 seconds

04 Post-Cleanup 5 seconds

🔄 05 Export-Artifacts

Post-processing Status

  • parse: success
  • artifacts_to_kpis: success
  • kpis_to_csv: success
  • ⏭️ artifacts_to_ai_data: disabled

    kpi.artifacts_to_ai_data disabled

  • ⏭️ s3_import: disabled

    s3_import disabled

  • ⏭️ analyse_kpis: disabled

    analyze disabled

  • ⏭️ s3_export: disabled

    s3_export disabled

@psap-forge-bot

psap-forge-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown
🟢 Submission of rhaiis nvidia succeeded after 17 minutes, 12 seconds 🟢
/test fournos rhaiis nvidia
/var tests.rhaiis.version: vLLM-0.24.0-delete-gh
/var rhaiis.images.nvidia: vllm/vllm-openai:v0.24.0
/var tests.rhaiis.model_key: nemotron3super-120b-fp8
/var tests.rhaiis.workload_keys: ["profile1","profile2","profile4"]
/var rhaiis.engines.vllm.args.tensor-parallel-size: 2
/var tests.rhaiis.slack_notify_always: true
/var benchmarks.guidellm.fs_group: 0
/var rhaiis.cluster_tag: hera2
/var rhaiis.deploy.image_pull_secrets: ["npalaska-image-pull"]
/var rhaiis.profiler.enabled: false
/var tests.rhaiis.warmup: false
/var caliper.postprocess.csv_dashboard.enabled: true
/var workloads.profile1.rates: [1,50,100,200,300]
/var workloads.profile1.max_seconds: 10
/var workloads.profile2.rates: [1,50,100,200,300]
/var workloads.profile2.max_seconds: 10
/var workloads.profile4.rates: [1,50,100,200,300]
/var workloads.profile4.max_seconds: 10
/pipeline forge-full
/exclusive false
/cluster hera

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants