{% extends "base.html" %} {% block title %}Experiment {{ exp_id }} — ABREKA{% endblock %} {% block extra_css %} {{ pygments_css }} /* Tabs */ .tab-bar { display: flex; gap: 0; border-bottom: 2px solid var(--border); margin-bottom: 16px; } .tab-btn { padding: 8px 20px; font-size: 13px; font-weight: 600; color: var(--muted); background: none; border: none; border-bottom: 2px solid transparent; margin-bottom: -2px; cursor: pointer; transition: color 0.15s, border-color 0.15s; } .tab-btn:hover { color: var(--text); } .tab-btn.active { color: var(--primary); border-bottom-color: var(--primary); } .tab-panel { display: none; } .tab-panel.active { display: block; } /* File browser (VS Code style) */ .file-browser { display: flex; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); min-height: 500px; --sidebar-width: 260px; --splitter-width: 8px; } .file-sidebar { width: var(--sidebar-width); min-width: var(--sidebar-width); border-right: 1px solid var(--border); overflow-y: auto; max-height: 600px; font-family: var(--mono); font-size: 13px; flex-shrink: 0; transition: width 0.2s, min-width 0.2s, padding 0.2s, border 0.2s; } .file-sidebar.collapsed { width: 0; min-width: 0; overflow: hidden; border-right: none; } .file-splitter { width: var(--splitter-width); flex-shrink: 0; cursor: col-resize; background: transparent; position: relative; } .file-splitter::before { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; width: 1px; transform: translateX(-50%); background: var(--border); } .file-browser.resizing, .file-browser.resizing * { cursor: col-resize !important; user-select: none; } .file-browser.sidebar-collapsed .file-splitter { display: none; } .file-sidebar-header { padding: 10px 12px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; } .file-item { display: flex; align-items: center; padding: 3px 8px; cursor: pointer; color: var(--text); border-left: 2px solid transparent; } .file-item:hover { background: var(--primary-light); } .file-item.active { background: var(--primary-light); border-left-color: var(--primary); } .file-item.dir { font-weight: 600; color: var(--muted); cursor: default; } .file-item.binary { opacity: 0.5; cursor: default; } .file-item .name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-item .size { font-size: 11px; color: var(--muted); margin-left: 8px; } .file-content-area { flex: 1; min-width: 0; overflow: auto; max-height: 600px; display: flex; flex-direction: column; } .file-content-header { padding: 8px 12px; font-size: 12px; font-family: var(--mono); border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; background: #fafbfc; flex-shrink: 0; } .file-content-header .file-path { color: var(--text); font-weight: 600; } .file-content-header .file-meta-inline { color: var(--muted); display: flex; gap: 12px; align-items: center; } .file-content-body { flex: 1; overflow: auto; padding: 0; } .file-content-body .highlight { border-radius: 0; margin: 0; } .file-content-body .highlight pre { margin: 0; padding: 12px; overflow-x: auto; font-size: 12px; line-height: 1.6; } .file-placeholder { display: flex; align-items: center; justify-content: center; height: 100%; color: var(--muted); font-size: 14px; } .truncation-warning { background: #fef3c7; border-bottom: 1px solid #f59e0b; padding: 6px 12px; font-size: 12px; color: #92400e; flex-shrink: 0; } .binary-notice { display: flex; align-items: center; justify-content: center; height: 100%; color: var(--muted); font-size: 14px; } /* Toolbar buttons */ .icon-btn { background: none; border: 1px solid var(--border); border-radius: 4px; padding: 3px 8px; cursor: pointer; font-size: 12px; color: var(--muted); display: inline-flex; align-items: center; gap: 4px; } .icon-btn:hover { background: var(--primary-light); color: var(--text); } /* Run output full width */ .run-output-card pre { max-height: 400px; overflow-y: auto; } {% endblock %} {% block content %}
| Status | {{ exp.status.value }} |
| Created | {{ exp.created_at.isoformat()[:19] }} |
| Completed | {{ exp.completed_at.isoformat()[:19] }} |
| Parents | {% for p in exp.parents %} {{ p }}{% if not loop.last %}, {% endif %} {% endfor %} {% if not exp.parents %}none{% endif %} |
| Children | {% for c in children %} {{ c }}{% if not loop.last %}, {% endif %} {% endfor %} {% if not children %}none{% endif %} |
| Tags | {% for t in exp.tags %} {{ t }} {% endfor %} {% if not exp.tags %}none{% endif %} |
{{ exp.hypothesis }}
{{ exp.method }}
{{ exp.failure_reason }}
| Split | Metric | Value |
|---|---|---|
| {{ split }} | {{ key }} | {{ "%.6f" | format(val) if val is number else val }} |
| Stage | Attempts | Total (s) | Last (s) | Status |
|---|---|---|---|---|
| {{ row.stage }} | {{ row.attempts }} | {{ "%.2f" | format(row.seconds_total) }} | {{ "%.2f" | format(row.seconds_last) }} | {{ row.last_status }} |
Total runtime: {{ runtime_total_seconds | human_duration }}
| Stage | Size | |
|---|---|---|
| {{ s.stage }} | {{ "%.0f" | format(s.size_kb) }} KB | View session |
No session recordings found.
{% endif %}{{ run_output }}