Workflow
Train with a managed dataset
- 1
Select dataChoose a dataset and outcome.
- 2
Set evaluationDefine the holdout and compute budget.
- 3
Review and runConfirm advanced options, then train.
Automatic selection is recommended unless your protocol requires a
specific pipeline component.
"""
UPLOAD_DATA_GUIDE_HTML = """
Model reuse
Run a single prediction
Select a model saved to your account or upload an exported package. The
required input format appears after the model is inspected.
Predictions are analytical outputs and require domain-appropriate
validation and human review.
"""
APP_CSS = r"""
:root {
/* Brand ---------------------------------------------------------------- */
--ui-navy-900: #102f44;
--ui-navy-800: #163f59;
--ui-blue-700: #075b82;
--ui-blue-600: #0877a5;
--ui-teal-700: #0b6b68;
--ui-teal-100: #dff3f1;
--ui-violet-700: #5f4b8b;
/* Text ----------------------------------------------------------------- */
--ui-ink: #172b3a;
--ui-ink-label: #294858;
--ui-muted: #536b7a;
/* Surfaces ------------------------------------------------------------- */
--ui-surface: #ffffff;
--ui-surface-subtle: #f5f8fa;
--ui-canvas: #f2f6f7;
--ui-canvas-deep: #e8eff2;
--ui-accent-bg: #e9f2f6;
--ui-teal-bg: #e6f3f1;
/* Scientific Light workbench ------------------------------------------ */
--ui-research-ink: #17251f;
--ui-research-muted: #58675f;
--ui-research-green-900: #1b3027;
--ui-research-green-700: #255e48;
--ui-research-green-100: #e6eee9;
--ui-research-paper: #fffefb;
--ui-research-canvas: #eeece6;
--ui-research-floating: rgba(255, 254, 251, 0.97);
--ui-research-shadow: 0 6px 18px rgba(27, 48, 39, 0.08);
/* Modern Scientific Studio -------------------------------------------- */
--ui-studio-ink: #223047;
--ui-studio-muted: #5f6f86;
--ui-studio-subtle: #5f6f86;
--ui-studio-bg: #f4f6fa;
--ui-studio-surface: #ffffff;
--ui-studio-soft: #eef2f7;
--ui-studio-border: #dbe1eb;
--ui-studio-border-strong: #c3cddb;
--ui-studio-cobalt: #466ba6;
--ui-studio-cobalt-hover: #385b92;
--ui-studio-cobalt-soft: #e9eff9;
--ui-studio-success: #326852;
--ui-studio-success-soft: #e8f2ee;
--ui-studio-warning: #806022;
--ui-studio-warning-soft: #f7efd9;
--ui-studio-danger: #954747;
--ui-studio-danger-soft: #f8eaea;
--ui-studio-shadow: 0 12px 30px rgba(49, 68, 98, 0.08);
/* Lines ---------------------------------------------------------------- */
--ui-border-subtle: #dde6ea;
--ui-border: #b3c4cd;
--ui-border-strong: #7b8f9b;
/* Status --------------------------------------------------------------- */
--ui-success: #176b45;
--ui-success-bg: #e8f4ed;
--ui-success-border: #8bbfa2;
--ui-warning: #7a5500;
--ui-warning-bg: #fff5d6;
--ui-warning-border: #c7a967;
--ui-error: #a1282f;
--ui-error-bg: #fae9e8;
--ui-error-border: #cf9296;
--ui-danger-700: #a1282f;
/* On dark -------------------------------------------------------------- */
--ui-on-dark: #ffffff;
--ui-on-dark-muted: #dcebf0;
--ui-on-dark-subtle: #b9dfe8;
/* States --------------------------------------------------------------- */
--ui-disabled-dark: #536b7a;
--ui-disabled-surface: #edf2f4;
--ui-focus: #c07a00;
/* Type ----------------------------------------------------------------- */
--ui-font: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--ui-font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, monospace;
--ui-shadow: 0 1px 2px rgba(16, 47, 68, 0.06), 0 8px 24px rgba(16, 47, 68, 0.06);
}
html, body, .gradio-container,
button, input, textarea, select {
font-family: var(--ui-font) !important;
}
code, kbd, pre, samp, .run-alias {
font-family: var(--ui-font-mono) !important;
}
html, body {
background: var(--ui-canvas) !important;
color: var(--ui-ink);
}
.gradio-container {
max-width: 1480px !important;
margin: 0 auto !important;
padding: 0 24px 48px !important;
background: var(--ui-canvas) !important;
color: var(--ui-ink) !important;
color-scheme: light !important;
}
.contain {
gap: 20px !important;
}
.app-header {
margin: 0 -24px 24px;
padding: 24px 32px 24px;
background: var(--ui-navy-900);
border-bottom: 5px solid var(--ui-teal-700);
color: var(--ui-on-dark);
display: flex;
align-items: center;
justify-content: space-between;
gap: 32px;
}
.app-identity {
display: flex;
align-items: center;
gap: 16px;
}
.app-mark {
width: 46px;
height: 46px;
border: 1px solid rgba(255,255,255,.55);
display: grid;
place-items: center;
font-size: 14px;
font-weight: 700;
letter-spacing: .08em;
}
.app-eyebrow,
.section-kicker,
.notice-title {
margin: 0 0 4px !important;
font-size: 12px !important;
line-height: 1.35 !important;
font-weight: 700 !important;
letter-spacing: .09em;
text-transform: uppercase;
}
.app-eyebrow {
color: var(--ui-on-dark-subtle);
}
.app-header h1 {
color: var(--ui-on-dark) !important;
font-size: 28px !important;
line-height: 1.15 !important;
letter-spacing: -.02em;
margin: 0 !important;
}
.app-subtitle {
max-width: 570px;
margin: 0 !important;
color: var(--ui-on-dark-muted);
font-size: 16px;
line-height: 1.5;
}
.app-header .app-subtitle {
color: var(--ui-on-dark-muted) !important;
}
.app-header .app-eyebrow {
color: var(--ui-on-dark-subtle) !important;
}
.app-header .app-mark {
color: var(--ui-on-dark) !important;
}
.research-notice {
background: var(--ui-accent-bg);
border-left: 4px solid var(--ui-blue-700);
padding: 12px 16px;
color: var(--ui-ink-label);
}
.research-notice p {
margin: 0 !important;
font-size: 13px;
line-height: 1.5;
color: var(--ui-ink-label) !important;
}
.research-notice .notice-title {
color: var(--ui-blue-700);
margin-bottom: 4px !important;
}
.account-card,
.panel-card,
.results-shell,
.context-panel,
.inference-output {
background: var(--ui-surface) !important;
border: 1px solid var(--ui-border) !important;
border-radius: 8px !important;
box-shadow: var(--ui-shadow);
}
.account-card:not(.account-card .account-card) {
max-width: 720px;
margin: 28px auto 12px;
padding: 8px 20px 20px !important;
}
.account-card .account-card {
max-width: none;
margin: 0;
padding: 0 !important;
border: 0 !important;
border-radius: 0 !important;
box-shadow: none;
}
.account-card:has(.tabs.hide) {
display: none !important;
width: 0 !important;
height: 0 !important;
min-height: 0 !important;
margin: 0 !important;
padding: 0 !important;
border: 0 !important;
box-shadow: none !important;
}
.account-card h2 {
margin-top: 8px !important;
border-bottom: 0 !important;
}
.account-card .tab-nav,
.account-card .tab-container {
background: var(--ui-canvas-deep) !important;
border: 1px solid var(--ui-border) !important;
}
.account-card .tab-nav button,
.account-card .tab-container button {
color: var(--ui-ink-label) !important;
}
.account-card .tab-nav button.selected,
.account-card .tab-container button.selected {
color: var(--ui-navy-900) !important;
background: var(--ui-surface) !important;
border-bottom: 3px solid var(--ui-teal-700) !important;
}
.account-strip {
align-items: center;
min-height: 48px;
padding: 8px 16px !important;
background: var(--ui-surface) !important;
border: 1px solid var(--ui-border) !important;
border-radius: 8px !important;
}
.panel-card {
padding: 20px !important;
}
.panel-card .panel-card {
padding: 0 !important;
border: 0 !important;
border-radius: 0 !important;
box-shadow: none;
}
.context-panel {
padding: 24px !important;
align-self: flex-start;
}
.context-panel h2 {
color: var(--ui-navy-900) !important;
font-size: 20px !important;
margin: 0 0 16px !important;
}
.section-kicker {
color: var(--ui-teal-700);
}
.workflow-list,
.check-list {
margin: 8px 0 20px !important;
padding: 0 !important;
list-style: none !important;
}
.workflow-list li {
display: flex;
gap: 12px;
margin: 0;
padding: 12px 0;
border-bottom: 1px solid var(--ui-border-subtle);
}
.workflow-list li > span {
flex: 0 0 26px;
width: 26px;
height: 26px;
display: grid;
place-items: center;
border-radius: 50%;
background: var(--ui-teal-100);
color: var(--ui-teal-700);
font-size: 12px;
font-weight: 700;
}
.workflow-list strong,
.workflow-list small {
display: block;
}
.workflow-list strong {
font-size: 14px;
color: var(--ui-ink);
}
.workflow-list small {
color: var(--ui-muted);
font-size: 12px;
margin-top: 2px;
}
body .gradio-container .context-panel .workflow-list small,
body.dark .gradio-container .context-panel .workflow-list small {
color: var(--ui-muted) !important;
}
.check-list li {
position: relative;
padding: 8px 0 8px 24px;
font-size: 13px;
line-height: 1.45;
}
.check-list li::before {
content: "";
position: absolute;
left: 1px;
top: 13px;
width: 8px;
height: 4px;
border-left: 2px solid var(--ui-teal-700);
border-bottom: 2px solid var(--ui-teal-700);
transform: rotate(-45deg);
}
.context-note {
margin: 0 !important;
padding: 12px 12px;
background: var(--ui-canvas);
border: 1px solid var(--ui-border-subtle);
color: var(--ui-muted);
font-size: 12px;
line-height: 1.5;
}
#workspace-tabs {
margin-top: 2px;
}
#workspace-tabs .tab-nav,
#workspace-tabs .tab-container {
gap: 4px;
padding: 4px 4px 0;
background: var(--ui-canvas-deep);
border: 1px solid var(--ui-border);
border-bottom: 0;
border-radius: 8px 8px 0 0;
}
#workspace-tabs .tab-nav button,
#workspace-tabs .tab-container button {
color: var(--ui-muted);
font-weight: 600;
min-height: 46px;
padding: 8px 16px;
border-radius: 4px 4px 0 0;
}
#workspace-tabs .tab-nav button.selected,
#workspace-tabs .tab-container button.selected {
color: var(--ui-navy-900);
background: var(--ui-surface);
border-bottom: 3px solid var(--ui-teal-700);
}
#workspace-tabs > .tabitem {
padding-top: 20px;
}
.configuration-heading h2,
.results-heading h2 {
color: var(--ui-navy-900) !important;
margin: 0 !important;
}
.configuration-heading p,
.results-heading p {
margin: 4px 0 0 !important;
color: var(--ui-muted);
font-size: 13px;
}
.advanced-options {
margin-top: 8px;
border-color: var(--ui-border) !important;
background: var(--ui-surface-subtle) !important;
}
.advanced-options > .label-wrap {
color: var(--ui-navy-900);
font-weight: 700;
}
label span,
.block > label,
.form > label {
color: var(--ui-ink-label) !important;
font-weight: 600 !important;
}
input, textarea, select,
[data-testid="dropdown"] {
border-color: var(--ui-border-strong) !important;
}
label.container.show_textbox_border,
.container.show_textbox_border {
background: var(--ui-surface) !important;
border: 1px solid var(--ui-border-strong) !important;
border-radius: 4px !important;
}
.gradio-container .wrap {
background: var(--ui-surface) !important;
border: 1px solid var(--ui-border-strong) !important;
border-radius: 4px !important;
color: var(--ui-ink) !important;
}
.gradio-container .wrap .or {
color: var(--ui-muted) !important;
}
.gradio-container label.float {
background: var(--ui-surface) !important;
color: var(--ui-ink-label) !important;
}
.gradio-container .label-wrap > span:not(.icon),
.gradio-container label > span:not(.icon),
.gradio-container .block > .container > span {
color: var(--ui-ink-label) !important;
}
.reset-button {
display: none !important;
}
button.primary,
.primary-button {
background: var(--ui-blue-700) !important;
border-color: var(--ui-blue-700) !important;
color: var(--ui-on-dark) !important;
font-weight: 700 !important;
min-height: 44px;
}
button.primary *,
.primary-button * {
color: var(--ui-on-dark) !important;
}
button.primary:hover,
.primary-button:hover {
background: var(--ui-navy-800) !important;
border-color: var(--ui-navy-800) !important;
}
button.secondary {
background: var(--ui-surface) !important;
color: var(--ui-blue-700) !important;
border-color: var(--ui-blue-700) !important;
}
button.secondary * {
color: var(--ui-blue-700) !important;
}
button.secondary:hover {
background: var(--ui-canvas-deep) !important;
color: var(--ui-navy-900) !important;
border-color: var(--ui-navy-900) !important;
}
button.secondary:hover * {
color: var(--ui-navy-900) !important;
}
button.stop {
background: var(--ui-danger-700) !important;
border-color: var(--ui-danger-700) !important;
color: var(--ui-on-dark) !important;
}
button.stop *,
button.stop:hover * {
color: var(--ui-on-dark) !important;
}
button.stop:hover {
background: var(--ui-navy-900) !important;
border-color: var(--ui-navy-900) !important;
}
/* A disabled primary reads as an inactive control, not as a filled slab that
still looks like the main action. */
button.primary:disabled,
.primary-button:disabled,
button.stop:disabled {
background: var(--ui-disabled-surface) !important;
border-color: var(--ui-border-strong) !important;
color: var(--ui-disabled-dark) !important;
box-shadow: none !important;
opacity: 1 !important;
}
button.primary:disabled *,
.primary-button:disabled *,
button.stop:disabled * {
color: var(--ui-disabled-dark) !important;
}
button.secondary:disabled {
background: var(--ui-disabled-surface) !important;
border-color: var(--ui-border-strong) !important;
color: var(--ui-disabled-dark) !important;
opacity: 1 !important;
}
button.secondary:disabled * {
color: var(--ui-disabled-dark) !important;
}
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
[role="tab"]:focus-visible,
[role="combobox"]:focus-visible {
outline: 3px solid var(--ui-focus) !important;
outline-offset: 2px !important;
}
.run-button {
margin-top: 8px;
}
.route-summary {
border-left: 3px solid var(--ui-blue-600) !important;
background: var(--ui-accent-bg) !important;
padding: 12px 12px !important;
color: var(--ui-ink-label);
font-size: 13px;
}
.results-shell {
margin-top: 24px;
padding: 24px !important;
}
.results-heading {
background: var(--ui-surface) !important;
border-bottom: 1px solid var(--ui-border-subtle);
padding-bottom: 12px;
margin-bottom: 2px;
}
.run-status {
margin: 12px 0 4px;
padding: 12px 16px !important;
border: 1px solid var(--ui-border) !important;
border-left: 4px solid var(--ui-blue-600) !important;
border-radius: 4px !important;
background: var(--ui-surface-subtle) !important;
color: var(--ui-navy-900);
font-weight: 600;
}
.performance-summary {
padding: 4px 0 8px;
}
.performance-summary h3 {
color: var(--ui-navy-900) !important;
margin-top: 16px !important;
}
.performance-summary em {
color: var(--ui-ink) !important;
}
.metric-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(155px, 1fr));
gap: 12px;
margin: 12px 0 16px;
}
.metric-card {
min-height: 88px;
padding: 12px 16px;
background: var(--ui-canvas);
border: 1px solid var(--ui-border-subtle);
border-top: 3px solid var(--ui-teal-700);
border-radius: 4px;
}
.metric-label {
display: block;
margin-bottom: 8px;
color: var(--ui-muted);
font-size: 11px;
font-weight: 700;
letter-spacing: .06em;
text-transform: uppercase;
}
.metric-value {
display: block;
color: var(--ui-navy-900);
font-size: 20px;
line-height: 1.2;
font-weight: 700;
overflow-wrap: anywhere;
}
.metric-value.metric-model {
font-size: 16px;
line-height: 1.35;
}
.performance-summary table {
width: 100%;
margin: 12px 0 20px !important;
border-collapse: collapse;
font-size: 13px;
}
.performance-summary th {
background: var(--ui-navy-900) !important;
color: var(--ui-on-dark) !important;
text-align: left;
font-weight: 700;
}
.performance-summary th * {
color: var(--ui-on-dark) !important;
}
.performance-summary td,
.performance-summary th {
padding: 8px 12px !important;
border: 1px solid var(--ui-border) !important;
}
.performance-summary tbody tr:nth-child(even) {
background: var(--ui-surface-subtle);
}
.artifact-panel {
padding: 16px !important;
background: var(--ui-canvas) !important;
border: 1px solid var(--ui-border) !important;
border-radius: 8px !important;
}
.artifact-panel .artifact-note {
color: var(--ui-muted);
font-size: 12px;
line-height: 1.45;
margin-bottom: 8px;
}
.detail-accordion {
margin-top: 8px;
border-color: var(--ui-border) !important;
}
.detail-markdown {
color: var(--ui-ink-label);
font-size: 13px;
}
.detail-markdown pre {
white-space: pre-wrap;
overflow-wrap: anywhere;
}
/* Gradio can apply dark-mode prose colors inside otherwise light result cards.
Pin every foreground/background pair used by generated result HTML. */
.gradio-container .performance-summary .metric-card,
.performance-summary .metric-card {
background: var(--ui-canvas) !important;
color: var(--ui-ink) !important;
}
.gradio-container .performance-summary .metric-label,
.performance-summary .metric-label {
color: var(--ui-muted) !important;
}
.gradio-container .performance-summary .metric-value,
.performance-summary .metric-value {
color: var(--ui-navy-900) !important;
}
.gradio-container .performance-summary table tbody td,
.gradio-container .performance-summary table tbody td *,
.gradio-container .detail-markdown table tbody td,
.gradio-container .detail-markdown table tbody td *,
.performance-summary table tbody td,
.performance-summary table tbody td *,
.detail-markdown table tbody td,
.detail-markdown table tbody td * {
background: var(--ui-surface) !important;
color: var(--ui-ink) !important;
}
.gradio-container .performance-summary table tbody tr:nth-child(even) td,
.gradio-container .detail-markdown table tbody tr:nth-child(even) td,
.performance-summary table tbody tr:nth-child(even) td,
.detail-markdown table tbody tr:nth-child(even) td {
background: var(--ui-surface-subtle) !important;
}
.gradio-container .detail-markdown,
.gradio-container .detail-markdown p,
.gradio-container .detail-markdown li,
.detail-markdown,
.detail-markdown p,
.detail-markdown li {
color: var(--ui-ink) !important;
}
.prediction-table {
min-height: 250px;
}
.visual-prediction-image {
min-width: 240px !important;
border: 1px solid var(--ui-border) !important;
border-radius: 10px !important;
overflow: hidden;
background: var(--ui-surface-subtle) !important;
}
.visual-prediction-image img {
max-height: 520px !important;
object-fit: contain !important;
background: #0f172a !important;
}
.visual-prediction-warning {
margin-bottom: 8px !important;
padding: 10px 12px !important;
border: 1px solid #d6b35d !important;
border-radius: 8px !important;
background: #fff8df !important;
color: #5f4704 !important;
}
.prediction-table .label,
.prediction-table .label *,
.inference-output .label,
.inference-output .label * {
color: var(--ui-ink) !important;
}
.gradio-container .min_value,
.gradio-container .max_value {
color: var(--ui-muted) !important;
}
.artifact-panel label {
background: var(--ui-surface) !important;
color: var(--ui-ink) !important;
}
/* Hide Gradio's own page chrome without swallowing the workbench's own