{{ run.status }} {% if run.stage %}{{ run.stage }}{% endif %} {% if run.total %}{{ run.index }} / {{ run.total }}{% endif %} {% if run.eta_s is not none %}{{ tr("ETA") }} {{ run.eta_s | round(0) | int }}s{% endif %}
{# The resolved profile and decoder knobs the run actually executes with (post-precedence), so a finished run is explainable at a glance. #}
{% if run.profile %}{{ run.profile }}{% endif %} {% if run.knobs %} {{ tr("resolved knobs") }} {% for name, value in run.knobs.items() %}{{ name }}={{ value }}{% endfor %} {% endif %}
{# The CLI's own `--auto` / `--backend auto` explanation, reused verbatim. #} {% for explanation in run.explanations %}
{{ explanation }}
{% endfor %} {# The four axes, computed once in the service and rendered from that value: accuracy, speed, memory, fit -- and no fifth. #} {% if run.axes %}
{{ tr("accuracy") }}
{% if run.axes.accuracy.basis == "wer" %} {{ tr("WER") }} {{ format_ratio(run.axes.accuracy.wer) }}{% if run.axes.accuracy.similarity is not none %} · {{ tr("similarity") }} {{ format_ratio(run.axes.accuracy.similarity) }}{% endif %} {% elif run.axes.accuracy.basis == "coverage" %} {{ tr("coverage") }} {{ format_ratio(run.axes.accuracy.coverage) }} · {{ tr("mean confidence") }} {{ format_ratio(run.axes.accuracy.mean_confidence) }} · {{ trn("{count} word", "{count} words", run.axes.accuracy.words, count=run.axes.accuracy.words) }} {% else %} {{ tr("unknown") }} — {{ tr(run.axes.accuracy.reason) }} {% endif %}
{{ tr("speed") }}
{% if run.axes.speed.x_realtime is not none %} {{ format_rate(run.axes.speed.x_realtime) }}x {{ tr("realtime") }} {{ format_seconds(run.axes.speed.audio_seconds) }}s / {{ format_seconds(run.axes.speed.wall_seconds) }}s {% else %} {{ tr("unknown") }} — {{ tr(run.axes.speed.reason) }} {% endif %}
{{ tr("memory") }}
{% if run.axes.memory.peak_rss_bytes is not none %} {{ format_mib(run.axes.memory.peak_rss_bytes) }} MiB {% else %} {{ tr("unknown") }} — {{ tr(run.axes.memory.reason) }} {% endif %}
{{ tr("fit") }}
{% if run.axes.fit.reason %} {{ tr("unknown") }} — {{ tr(run.axes.fit.reason) }} {% else %} {{ tr("auto chose") }} {% for field in run.axes.fit.chose %}{{ field }}{% else %}{{ tr("nothing (chosen by hand)") }}{% endfor %} {{ run.axes.fit.facts.backend or "?" }} · {{ run.axes.fit.facts.model or "?" }}{% if run.axes.fit.facts.jobs is not none %} · {{ tr("jobs") }} {{ run.axes.fit.facts.jobs }}{% endif %}{% if run.axes.fit.facts.chunk_seconds is not none %} · {{ format_seconds(run.axes.fit.facts.chunk_seconds) }}s{% endif %} {% endif %}
{% endif %} {% if run.message %}
{{ run.message }}
{% endif %} {% if run.error %}{% endif %} {# Cancel and resume. Both act on the run this fragment shows and swap the fragment back in; the controls are derived from the run's row, so a run another writer started (the agent's MCP server) offers them too. #} {% if run.cancellable or run.resumable or run.resumes_run_id %}
{% if run.cancellable %} {% if run.cancel_requested %}{{ tr("asking the run to stop…") }}{% endif %} {% endif %} {% if run.resumable %} {{ tr("Resuming re-uses this workspace's cached chunks. A run elsewhere re-decodes from scratch: the cache is app-owned and keyed by this workspace's path.") }} {% endif %} {% if run.resumes_run_id %}
{{ tr("resumed from run {run_id}", run_id=run.resumes_run_id) }}
{% endif %}
{% endif %}