{{ ui_lang.training_run_heading|default('Run') }} {{ run.run_id }}
{{ ui_lang.training_summary|default('Summary') }}
- {{ ui_lang.training_col_status|default('Status') }}
- {{ run.status }}
- {{ ui_lang.training_col_trainer|default('Trainer') }}
- {{ run.trainer }}
- {{ ui_lang.training_col_schemas|default('Schemas') }}
- {{ run.schema_names|join(', ') }}
- {{ ui_lang.training_trigger|default('Triggered by') }}
- {{ run.trigger }}
- {{ ui_lang.training_col_train|default('Train') }}
- {{ run.n_train }}
- {{ ui_lang.training_col_val|default('Val') }}
- {{ run.n_val }}
- {{ ui_lang.training_col_test|default('Test') }}
- {{ run.n_test }}
- {{ ui_lang.training_col_duration|default('Duration') }}
- {% if run.duration %}{{ '%.1fs'|format(run.duration) }}{% else %}still running{% endif %}
- {{ ui_lang.training_split_seed|default('Split seed') }}
- {{ run.split_seed }}
- {{ ui_lang.training_model_version|default('Model version') }}
- {{ run.model_version or '—' }}
{{ ui_lang.training_seed_note|default('The split seed decides which items are held out. Keep it fixed: changing it moves validation items into training, and every score recorded before the change stops being comparable to the ones after it.') }}
{{ ui_lang.training_error_heading|default('What went wrong') }}
{{ run.error }}
{% if run.error_code %}{{ ui_lang.training_error_code|default('Code') }}: {{ run.error_code }}
{% endif %}{{ ui_lang.training_metrics_heading|default('Metrics') }}
{% if not run.metrics %}{{ ui_lang.training_no_metrics|default('This run recorded no metrics.') }}
{% else %}| {{ ui_lang.training_col_metric|default('Metric') }} | {{ ui_lang.training_col_value|default('Value') }} |
|---|---|
| {{ name }} | {#- A count is not a rate: rendering n_train as "37.0000" reads as a measurement with four significant figures rather than a tally. -#}{%- if value is number and value == value|round|int -%} {{ value|int }} {%- elif value is number -%} {{ '%.4f'|format(value) }} {%- else -%} {{ value }} {%- endif -%} |
{{ ui_lang.training_log_heading|default('Log') }}
{% set log_events = events|selectattr('event', 'equalto', 'log')|list %} {% if not log_events %}{{ ui_lang.training_no_log|default('This run produced no log lines.') }}
{% else %}
{% for e in log_events %}
{% endif %}
[{{ e.level }}] {{ e.msg }}
{% endfor %}