Skip to content

[Feature Request] Render boolean pipeline parameters as checkboxes in "NEW RUN" dialog #148

Description

@di2mot

When opening the "NEW RUN" dialog for a pipeline run, all parameters from the Args hyperparameter section are rendered as plain text inputs — including boolean parameters whose values are "True" or "False" (as produced by Python's str(bool)). This forces users to manually type "True" or "False", which is error-prone and inconsistent with standard form UX for boolean values.

Apply a frontend heuristic: if a parameter's type is "boolean", or its current value is case-insensitively equal to "true" or "false", render it as a mat-checkbox instead of a text input.

The checkbox should:

  • Display the parameter name as its label (already shown in the adjacent param-key column)
  • Be checked when the value is "true" (case-insensitive)
  • On toggle, write back the string "True" or "False" (capitalized, matching Python's bool representation) — preserving the existing string-based data flow to the API
  • Values of null, "", or any other string must not be treated as boolean — only explicit "true" / "false".

Affected component

src/app/webapp-common/pipelines-controller/run-pipeline-controller-dialog/

Implementation sketch
The change is purely template-level + one helper method. No NgRx actions, reducers, API calls, or data models need to change.

In run-pipeline-controller-dialog.component.ts:

  isBooleanParam(value: string): boolean {
    return value?.toLowerCase() === 'true' || value?.toLowerCase() === 'false';
  }

In the template's existing @switch (control.value.type) block — add a @case ('boolean') and extend @default:

 @case ('boolean') {
    <mat-checkbox class="param-checkbox"
      [checked]="control.get('value').value?.toLowerCase() === 'true'"
      (change)="control.get('value').setValue($event.checked ? 'True' : 'False')">
    </mat-checkbox>
  }
  @default {
    @if (isBooleanParam(control.value.value)) {
      <mat-checkbox class="param-checkbox"
        [checked]="control.get('value').value?.toLowerCase() === 'true'"
        (change)="control.get('value').setValue($event.checked ? 'True' : 'False')">
      </mat-checkbox>
    } @else {
      <mat-form-field appearance="outline" subscriptSizing="dynamic">
        <input matInput formControlName="value">
      </mat-form-field>
    }
  }

MatCheckbox needs to be added to the component's imports array (it's a standalone component using @angular/material/checkbox).

Additional context
The dual-case approach (@case ('boolean') + isBooleanParam in @default) is intentional: it handles both strictly-typed API responses (type: "boolean") and Python-originated
string values (type: "str", value: "True"/"False"), which are common in ClearML pipelines.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions