QoL and metric value inverter
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
<th>Weight</th>
|
||||
<th>Norm Min</th>
|
||||
<th>Norm Max</th>
|
||||
<th>Direction</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -15,8 +16,9 @@
|
||||
<td>{{ mb.metric_name }}</td>
|
||||
<td>{{ mb.unit or '—' }}</td>
|
||||
<td>{{ mb.weight }}</td>
|
||||
<td>{{ mb.norm_min }}</td>
|
||||
<td>{{ mb.norm_max }}</td>
|
||||
<td>{{ mb.norm_min|si }}</td>
|
||||
<td>{{ mb.norm_max|si }}</td>
|
||||
<td>{{ '↓ lower' if mb.lower_is_better else '↑ higher' }}</td>
|
||||
<td class="actions">
|
||||
<button class="btn btn-sm"
|
||||
onclick="this.closest('tr').nextElementSibling.style.display='table-row'; this.closest('tr').style.display='none'">
|
||||
@@ -39,6 +41,7 @@
|
||||
<td><input name="weight" type="number" step="any" value="{{ mb.weight }}" required></td>
|
||||
<td><input name="norm_min" type="number" step="any" value="{{ mb.norm_min }}" required></td>
|
||||
<td><input name="norm_max" type="number" step="any" value="{{ mb.norm_max }}" required></td>
|
||||
<td><label><input type="checkbox" name="lower_is_better" value="1" {{ 'checked' if mb.lower_is_better }}> lower is better</label></td>
|
||||
<td>
|
||||
<button type="submit" class="btn btn-sm btn-primary">Save</button>
|
||||
<button type="button" class="btn btn-sm"
|
||||
@@ -63,6 +66,7 @@
|
||||
<input name="weight" type="number" step="any" placeholder="weight" value="1.0" required>
|
||||
<input name="norm_min" type="number" step="any" placeholder="norm min" value="0.0" required>
|
||||
<input name="norm_max" type="number" step="any" placeholder="norm max" value="1.0" required>
|
||||
<label><input type="checkbox" name="lower_is_better" value="1"> lower is better</label>
|
||||
<button type="submit" class="btn btn-primary">Add</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<p>{{ d.description }}</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Metric</th><th>Unit</th><th>Weight</th><th>Norm Min</th><th>Norm Max</th></tr>
|
||||
<tr><th>Metric</th><th>Unit</th><th>Weight</th><th>Norm Min</th><th>Norm Max</th><th>Direction</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for mb in d.metric_bounds %}
|
||||
@@ -24,8 +24,9 @@
|
||||
<td>{{ mb.metric_name }}</td>
|
||||
<td>{{ mb.unit }}</td>
|
||||
<td>{{ mb.weight }}</td>
|
||||
<td>{{ mb.norm_min }}</td>
|
||||
<td>{{ mb.norm_max }}</td>
|
||||
<td>{{ mb.norm_min|si }}</td>
|
||||
<td>{{ mb.norm_max|si }}</td>
|
||||
<td>{{ '↓ lower' if mb.lower_is_better else '↑ higher' }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<tr>
|
||||
<td>{{ dep.category }}</td>
|
||||
<td>{{ dep.key }}</td>
|
||||
<td>{{ dep.value }}</td>
|
||||
<td>{{ dep.value|si }}</td>
|
||||
<td>{{ dep.unit or '—' }}</td>
|
||||
<td><span class="badge badge-{{ dep.constraint_type }}">{{ dep.constraint_type }}</span></td>
|
||||
<td class="actions">
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<td>1 — Constraints</td>
|
||||
<td>{{ run.combos_pass1 or 0 }} checked
|
||||
{%- if (run.combos_pass2 or 0) > 0 and (run.combos_pass1 or 0) > (run.combos_pass2 or 0) %},
|
||||
<span class="badge badge-blocked">{{ (run.combos_pass1 or 0) - (run.combos_pass2 or 0) }} blocked</span>
|
||||
<span class="badge badge-p1_fail">{{ (run.combos_pass1 or 0) - (run.combos_pass2 or 0) }} failed</span>
|
||||
{%- endif -%}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<th>Status</th>
|
||||
<th>Total</th>
|
||||
<th>P1 Checked</th>
|
||||
<th>P1 Blocked</th>
|
||||
<th>P1 Failed</th>
|
||||
<th>P2 Estimated</th>
|
||||
<th>P3 Scored</th>
|
||||
<th>P4 Reviewed</th>
|
||||
@@ -113,7 +113,7 @@
|
||||
<td><span class="badge badge-{{ run.status }}">{{ run.status }}</span></td>
|
||||
<td>{{ run.total_combos or '—' }}</td>
|
||||
<td>{{ run.combos_pass1 or '—' }}</td>
|
||||
<td>{% if blocked %}<span class="badge badge-blocked">{{ blocked }}</span>{% else %}—{% endif %}</td>
|
||||
<td>{% if blocked %}<span class="badge badge-p1_fail">{{ blocked }}</span>{% else %}—{% endif %}</td>
|
||||
<td>{{ run.combos_pass2 or '—' }}</td>
|
||||
<td>{{ run.combos_pass3 or '—' }}</td>
|
||||
<td>{{ run.combos_pass4 or '—' }}</td>
|
||||
@@ -133,7 +133,7 @@
|
||||
<h3>{{ d.name }} <span class="subtitle">{{ d.description }}</span></h3>
|
||||
<dl class="summary-dl">
|
||||
<dt>Results</dt><dd>{{ s.total_results }} scored combinations</dd>
|
||||
<dt>Blocked</dt><dd>{{ s.blocked }} combinations</dd>
|
||||
<dt>Failed</dt><dd>{{ s.failed }} combinations</dd>
|
||||
<dt>Score range</dt><dd class="score-cell">{{ "%.4f"|format(s.min_score) }} — {{ "%.4f"|format(s.max_score) }}</dd>
|
||||
<dt>Avg score</dt><dd class="score-cell">{{ "%.4f"|format(s.avg_score) }}</dd>
|
||||
<dt>Last pass</dt><dd>{{ s.last_pass }}</dd>
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
{% for dep in e.dependencies %}
|
||||
<tr>
|
||||
<td>{{ dep.key }}</td>
|
||||
<td>{{ dep.value }}{{ ' ' + dep.unit if dep.unit else '' }}</td>
|
||||
<td>{{ dep.value|si }}{{ ' ' + dep.unit if dep.unit else '' }}</td>
|
||||
<td><span class="badge badge-{{ dep.constraint_type }}">{{ dep.constraint_type }}</span></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
@@ -77,10 +77,10 @@
|
||||
<tr>
|
||||
<td>{{ s.metric_name }}</td>
|
||||
{% set unit = s.metric_unit or '' %}
|
||||
<td class="score-cell">{{ "%.2f"|format(s.raw_value) if s.raw_value is not none else '—' }}{{ ' ' + unit if unit and s.raw_value is not none else '' }}</td>
|
||||
<td class="score-cell">{{ s.raw_value|si if s.raw_value is not none else '—' }}{{ ' ' + unit if unit and s.raw_value is not none else '' }}</td>
|
||||
<td>
|
||||
{%- if mb -%}
|
||||
{{ "%.2f"|format(mb.norm_min) }} — {{ "%.2f"|format(mb.norm_max) }}{{ ' ' + unit if unit else '' }}
|
||||
{{ mb.norm_min|si }} — {{ mb.norm_max|si }}{{ ' ' + unit if unit else '' }}
|
||||
{%- else -%}
|
||||
—
|
||||
{%- endif -%}
|
||||
@@ -88,22 +88,22 @@
|
||||
<td>
|
||||
{%- if mb and s.raw_value is not none -%}
|
||||
{%- if s.raw_value <= mb.norm_min -%}
|
||||
<span class="badge badge-blocked">at/below min</span>
|
||||
<span class="badge badge-{{ 'valid' if mb.lower_is_better else 'p1_fail' }}">at/below min{{ ' (best)' if mb.lower_is_better else '' }}</span>
|
||||
{%- elif s.raw_value >= mb.norm_max -%}
|
||||
<span class="badge badge-valid">at/above max</span>
|
||||
<span class="badge badge-{{ 'p1_fail' if mb.lower_is_better else 'valid' }}">at/above max{{ ' (worst)' if mb.lower_is_better else '' }}</span>
|
||||
{%- else -%}
|
||||
{% set pct = ((s.raw_value - mb.norm_min) / (mb.norm_max - mb.norm_min) * 100) | int %}
|
||||
<div class="metric-bar-container">
|
||||
<div class="metric-bar" style="width: {{ pct }}%"></div>
|
||||
</div>
|
||||
<span class="metric-bar-label">~{{ pct }}%</span>
|
||||
<span class="metric-bar-label">~{{ pct }}%{{ ' ↓' if mb.lower_is_better else '' }}</span>
|
||||
{%- endif -%}
|
||||
{%- else -%}
|
||||
—
|
||||
{%- endif -%}
|
||||
</td>
|
||||
<td class="score-cell">{{ "%.4f"|format(s.normalized_score) if s.normalized_score is not none else '—' }}</td>
|
||||
<td>{{ "%.0f%%"|format(mb.weight * 100) if mb else '—' }}</td>
|
||||
<td>{{ "%.0f%%"|format(mb.weight * 100) if mb else '—' }}{{ ' ↓' if mb and mb.lower_is_better else '' }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<td>{{ r.combination.entities|map(attribute='name')|join(' + ') }}</td>
|
||||
<td><span class="badge badge-{{ r.combination.status }}">{{ r.combination.status }}</span></td>
|
||||
<td class="block-reason-cell">
|
||||
{%- if r.combination.status == 'blocked' and r.combination.block_reason -%}
|
||||
{%- if r.combination.status.endswith('_fail') and r.combination.block_reason -%}
|
||||
{{ r.combination.block_reason }}
|
||||
{%- elif r.novelty_flag -%}
|
||||
{{ r.novelty_flag }}
|
||||
|
||||
Reference in New Issue
Block a user