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.
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:
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:
In the template's existing @switch (control.value.type) block — add a @case ('boolean') and extend @default:
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-originatedstring values (type: "str", value: "True"/"False"), which are common in ClearML pipelines.