{% extends "base.html" %} {% block title %}— {{ run_id }}{% endblock %} {% block content %} {# ── helpers ── #} {% set r = results or {} %} {% set m = manifest or {} %} {% set verdict = r.get('verdict') or m.get('verdict') or 'unknown' %} {% set verdict_note = r.get('verdict_note') or m.get('verdict_note') or '' %} {% set summary = r.get('summary') or m.get('summary') or '' %} {% set tags = r.get('tags') or {} %} {% set metrics = r.get('metrics') or {} %} {% set metric_sums = m.get('metric_summaries') or {} %} {% set artifacts = m.get('artifacts') or [] %} {% set duration = m.get('duration_seconds') %} {% set ts_start = m.get('timestamp_start') %} {% set vc = { 'pass': 'bg-green-100 text-green-800 border-green-200', 'fail': 'bg-red-100 text-red-800 border-red-200', 'inconclusive':'bg-amber-100 text-amber-800 border-amber-200', }.get(verdict, 'bg-slate-100 text-slate-600 border-slate-200') %} {# decide which tabs are present #} {% set has_metrics = metrics or metric_sums %} {% set has_plots = image_files %} {% set has_config = config %} {% set has_report = report_md %} {% set has_logs = llm_logs or scenario_log %} {# ── page header ── #}
Results › {{ experiment }} › {{ run_id }}

{{ run_id }}

{{ verdict | upper }} {% if m.get('status') %} {% set sc = {'complete': 'bg-green-100 text-green-700', 'incomplete': 'bg-amber-100 text-amber-700'}.get(m.status, 'bg-slate-100 text-slate-600') %} {{ m.status }} {% endif %} {% if duration is not none %}{{ "%.2f" | format(duration) }}s{% endif %} {% if ts_start %} · {{ ts_start }}{% endif %}
{% if summary %}

{{ summary }}

{% endif %} {% if verdict_note %}

{{ verdict_note }}

{% endif %}
{# ── tabs ── #}
{# tab nav #}
{% macro tab_btn(id, label) %} {% endmacro %} {{ tab_btn('overview', 'Overview') }} {% if has_metrics %}{{ tab_btn('metrics', 'Metrics') }}{% endif %} {% if has_plots %}{{ tab_btn('plots', 'Plots (' ~ image_files | length ~ ')') }}{% endif %} {% if has_config %}{{ tab_btn('config', 'Config') }}{% endif %} {% if has_report %}{{ tab_btn('report', 'Report') }}{% endif %} {% if has_logs %}{{ tab_btn('logs', 'Logs') }}{% endif %} {{ tab_btn('notes', 'Notes' ~ (' (' ~ researcher_notes | length ~ ')' if researcher_notes else '')) }}
{# ── OVERVIEW tab ── #}
{# run metadata card #}

Run info

{% macro kv(label, val) %}
{{ label }}
{{ val }}
{% endmacro %} {{ kv('Experiment', experiment) }} {{ kv('Run ID', run_id) }} {{ kv('Verdict', verdict) }} {% if verdict_note %}{{ kv('Note', verdict_note) }}{% endif %} {% if m.get('status') %}{{ kv('Status', m.status) }}{% endif %} {% if ts_start %}{{ kv('Started', ts_start) }}{% endif %} {% if m.get('timestamp_end') %}{{ kv('Ended', m.timestamp_end) }}{% endif %} {% if duration is not none %}{{ kv('Duration', "%.3f" | format(duration) ~ 's') }}{% endif %}
{# tags card — always show (empty state if no tags) #}

Tags

{% if tags %}
{% for k, v in tags.items() %} {{ k }} = {{ v }} {% endfor %}
{% else %}

No tags recorded for this run.

{% endif %}
{# artifacts #} {% if artifacts %}

Artifacts

{% for a in artifacts %} {% endfor %}
Path Purpose Size
{{ a.path }} {{ a.purpose }} {% if a.size_bytes %}{{ (a.size_bytes / 1024) | round(1) }} KB{% else %}—{% endif %}
{% endif %}
{# /overview #} {# ── METRICS tab ── #} {% if has_metrics %} {# ── precompute agent metric groups ── #} {% set agent_kpi_keys = ['agent.success','agent.goal_completion','agent.path_efficiency','agent.first_attempt_success'] %} {% set agent_kpi_labels = { 'agent.success': 'Success Rate', 'agent.goal_completion': 'Goal Completion', 'agent.path_efficiency': 'Path Efficiency', 'agent.first_attempt_success': '1st-Attempt' } %} {% set agent_exec_keys = ['agent.latency','agent.retry_count','agent.error','agent.tool_call_count'] %} {% set agent_exec_labels = { 'agent.latency': 'Latency (s)', 'agent.retry_count': 'Retries', 'agent.error': 'Error Rate', 'agent.tool_call_count': 'Tool Calls/Step' } %} {% set agent_token_keys = ['agent.tokens_in','agent.tokens_out'] %} {% set agent_token_labels = { 'agent.tokens_in': 'Input Tokens', 'agent.tokens_out': 'Output Tokens' } %} {% set has_agent_metrics = metric_sums and ( metric_sums.keys() | list | select('match','^agent\\.') | list | length > 0 ) %}
{# ══════════════════════════════════════════════════════ AGENT PERFORMANCE SECTION ══════════════════════════════════════════════════════ #} {% if has_agent_metrics %}

Agent Performance

{# ── KPI stat cards ── #} {% set kpi_present = [] %} {% for k in agent_kpi_keys %}{% if metric_sums.get(k) %}{% set _ = kpi_present.append(k) %}{% endif %}{% endfor %} {% if kpi_present %}
{% for k in kpi_present %} {% set s = metric_sums[k] %} {% set mn = s.get('mean', 0) %} {% set pct = (mn * 100) | round(1) %} {% set color = 'indigo' if mn >= 0.8 else ('amber' if mn >= 0.5 else 'red') %}

{{ agent_kpi_labels.get(k, k) }}

{{ pct }}%

n={{ s.get('n',0) }}  ·  ±{{ "%.3f" | format(s.get('std',0)) }}

{% endfor %}
{% endif %} {# ── Charts row: KPI radar + token bar (Chart.js) ── #} {% if kpi_present or metric_sums.get('agent.tokens_in') or metric_sums.get('agent.tokens_out') %}
{# KPI radar chart #} {% if kpi_present %}

KPI Overview

{% endif %} {# Token usage bar chart #} {% if metric_sums.get('agent.tokens_in') or metric_sums.get('agent.tokens_out') %}

Token Usage per Step

{% endif %}
{% endif %} {# ── Step-by-step latency chart (raw series) ── #} {% if agent_series and agent_series.get('agent.latency') %}

Step Latency Timeline

{% endif %} {# ── Step execution stats table ── #} {% set exec_present = [] %} {% for k in agent_exec_keys %}{% if metric_sums.get(k) %}{% set _ = exec_present.append(k) %}{% endif %}{% endfor %} {% if exec_present %}

Step Execution Stats

{% for col in ['Metric','Mean','Std','Min','Max','n'] %} {% endfor %} {% for k in exec_present %} {% set s = metric_sums[k] %} {% endfor %}
{{ col }}
{{ agent_exec_labels.get(k, k) }} {{ "%.4f" | format(s.get('mean',0)) }} {{ "%.4f" | format(s.get('std',0)) }} {{ "%.4f" | format(s.get('min',0)) }} {{ "%.4f" | format(s.get('max',0)) }} {{ s.get('n',0) }}
{% endif %} {# ── Token stats table ── #} {% set token_present = [] %} {% for k in agent_token_keys %}{% if metric_sums.get(k) %}{% set _ = token_present.append(k) %}{% endif %}{% endfor %} {% if token_present %}

Token Budget

{% for col in ['Metric','Total','Avg/Step','Std','Min','Max'] %} {% endfor %} {% for k in token_present %} {% set s = metric_sums[k] %} {% set total = (s.get('mean',0) * s.get('n',1)) | round | int %} {% endfor %}
{{ col }}
{{ agent_token_labels.get(k, k) }} {{ "{:,}".format(total) }} {{ "%.1f" | format(s.get('mean',0)) }} {{ "%.1f" | format(s.get('std',0)) }} {{ s.get('min',0) | int }} {{ s.get('max',0) | int }}
{% endif %} {# ── Tool distribution ── #} {% set tool_items = [] %} {% for k, s in metric_sums.items() %} {% if k.startswith('agent.tool.') %} {% set _ = tool_items.append((k[11:], s)) %} {% endif %} {% endfor %} {% if tool_items %} {% set tool_total = tool_items | map(attribute='1') | map(attribute='n') | sum %}

Tool Distribution

{{ tool_total }} total calls
{# Tool bar chart #}
{# Tool table #}
{% for tool_name, s in tool_items | sort(attribute='1.n', reverse=true) %} {% set share = (s.get('n', 0) / tool_total * 100) if tool_total else 0 %} {% set sr = s.get('mean', 0) * 100 %} {% endfor %}
Tool Calls Share Success Rate
{{ tool_name }} {{ s.get('n',0) }} {{ "%.1f" | format(share) }}%
{{ "%.0f" | format(sr) }}%
{% endif %}
{% endif %}{# /has_agent_metrics #} {# ══════════════════════════════════════════════════════ RESULT METRICS (from results.yaml) ══════════════════════════════════════════════════════ #} {% if metrics %}

Result Metrics

{% if numeric_metrics %}
{% for key, val in numeric_metrics.items() %} {% set abs_val = val if val >= 0 else -val %} {% set bar_w = [(abs_val / max_metric_val * 100), 100] | min | round(1) %}
{{ key }}
{{ val }}
{% endfor %}

{% endif %}
{% for key, val in metrics.items() %}
{{ key }}
{% if val is sameas true %}true {% elif val is sameas false %}false {% else %}{{ val }}{% endif %}
{% endfor %}
{% endif %} {# ══════════════════════════════════════════════════════ OTHER METRIC SUMMARIES (non-agent tracked metrics) ══════════════════════════════════════════════════════ #} {% set other_sums = [] %} {% for k, s in metric_sums.items() %} {% if not k.startswith('agent.') %}{% set _ = other_sums.append((k, s)) %}{% endif %} {% endfor %} {% if other_sums %}

Tracked Metric Summaries

Descriptive statistics across all observations in this run.

{% for key, s in other_sums %} {% set label = s.get('label') or key %} {% set mn = s.get('mean', 0) %} {% set sd = s.get('std', 0) %} {% set lo = s.get('min', 0) %} {% set hi = s.get('max', 1) %} {% set n = s.get('n', 0) %} {% set rng = hi - lo %} {% set mean_pct = (((mn - lo) / rng * 100) if rng else 50) | round(1) %}

{{ label }}

{{ "%.4g" | format(mn) }}

± {{ "%.4g" | format(sd) }}  ·  n={{ n }}

{{ "%.4g" | format(lo) }} {{ "%.4g" | format(hi) }}
{% endfor %}
{% endif %}
{# /metrics #} {% endif %} {# ── PLOTS tab ── #} {% if has_plots %}
{% for fname in image_files %}
{{ fname }}

{{ fname }}

{% endfor %}
{% endif %} {# ── CONFIG tab ── #} {% if has_config %}

Run Configuration

{{ config | tojson(indent=2) }}
{% endif %} {# ── REPORT tab ── #} {% if has_report %}

Run Report

{{ report_md }}
{% endif %} {# ── LOGS tab ── #} {% if has_logs %} {% set _init_tab = 'scenario' if scenario_log else (llm_logs.keys() | list | first | default('')) %} {% set _init_content = scenario_log if scenario_log else (llm_logs.values() | list | first | default('')) %}
{# toolbar: sub-tab buttons + pause #}
{% if scenario_log %} {% endif %} {% for name in llm_logs %} {% endfor %}
{# /logs #} {% endif %} {# ── NOTES tab ── #}
{% with notes=researcher_notes %} {% include "partials/researcher_notes.html" %} {% endwith %}
{# /x-data tabs #} {# empty state when there is genuinely nothing #} {% if not results and not manifest and not config and not report_md %}

No result data found for this run.

{{ 'results/' ~ experiment ~ '/' ~ run_id ~ '/conclusions/' }}

{% endif %} {% endblock %}