{# The comparison page. Server-rendered in one pass, no JavaScript: everything here is read-only content, and UI standards §13 requires that to work with scripting disabled. The rule the whole layout exists to serve: two columns in different groups are never presented as if their numbers could be subtracted. A separated row says so in words, the group number appears in every affected cell, and the fingerprint diff that separates the columns is printed underneath rather than left as two hex strings nobody can read. #} {% extends "base.html" %} {% block title %}Compare · FreeWeight{% endblock %} {% block content %}
These runs could not be compared.
{{ error }}
Check the run IDs with freeweight run list. Two runs that measured different
things are still comparable — they are shown side by side with the reason — so this message
means the request itself could not be read.
Nothing to compare yet.
Name two or more runs above. A quantization study, a KV-precision study and a plain before-and-after are all the same form: pick the runs, and the boundaries between them are worked out and labelled for you.
This is a {{ comparison.study.value | replace("_", " ") }} across {{ comparison.columns | length }} run(s).
| Run | Model | Suite | Quantization | KV precision | Context | Machine | GPU | Started |
|---|---|---|---|---|---|---|---|---|
{{ column.run_id[:8] }}… {{ column.label }} |
{{ column.model_canonical_id }} {% if column.identity_confidence == "name_only" %} name only {% endif %} | {{ column.suite_key }} v{{ column.suite_version }} | {{ column.quantization or "—" }} | {{ column.kv_cache_precision or "—" }} | {{ column.context_size if column.context_size is not none else "—" }} | {{ column.machine_hostname or column.machine_fingerprint[:12] ~ "…" }} | {{ column.gpu_index if column.gpu_index is not none else "—" }} | {{ column.started_at_rfc3339 or "—" }} |
These runs are one model at {{ comparison.context_sweep.points | length }} different served contexts on one machine, so the memory each needs can be differenced into a cost function. Each point is that run's own reported residency, not the device's total. This is a study across runs, not a benchmark result: a benchmark measures one run under one profile.
| Served context | Model VRAM |
|---|---|
| {{ "{:,}".format(point[0]) }} tokens | {{ point[1] | bytes }} |
{{ comparison.context_sweep.weights_bytes | bytes }} of weights and fixed allocations, plus {{ comparison.context_sweep.bytes_per_token | bytes }} per token of context.
Fit quality r² = {{ "%.4f" | format(comparison.context_sweep.r_squared) }}, points scattered ±{{ comparison.context_sweep.residual_stddev_bytes | bytes }} around the line. A sweep taken while something else was using the GPU shows up here rather than quietly biasing the slope.
{{ verdict.left[:8] }}… vs {{ verdict.right[:8] }}…
— {{ verdict.comparability.value }} ({{ verdict.study.value | replace("_", " ") }})
{{ verdict.reason }}
{% if verdict.diff %}| Field | Left | Right |
|---|---|---|
{{ entry.path }} |
{{ entry.left }} |
{{ entry.right }} |
No stored fingerprint document to diff — the reason above is the whole of what is known.
{% endif %}| Metric | Kind | {% for column in comparison.columns %}{{ column.label }} | {% endfor %}Comparable |
|---|---|---|---|
{{ row.metric_key }}
({{ row.unit }}, {{ "higher is better" if row.higher_is_better else "lower is better" }})
|
{{ row.kind.value }} | {% for cell in row.cells %}
{% if cell.numeric_value is not none %}
{{ "%.4g" | format(cell.numeric_value) }}
{% if row.mergeable and row.best_run_id == cell.run_id %}
best
{% endif %}
{% else %}
—
{% endif %}
n={{ cell.sample_count if cell.sample_count is not none else "—" }}, excluded={{ cell.excluded_count if cell.excluded_count is not none else "—" }} {% if cell.coefficient_of_variation is not none %} , cv={{ "%.3g" | format(cell.coefficient_of_variation) }} {% endif %} {% if not row.mergeable %} , group {{ cell.group_index + 1 }} {% endif %} |
{% endfor %}
{% if row.mergeable %} yes {% else %} no {{ row.groups | length }} groups {% endif %} |
No aggregate metrics on these runs.
These runs stored no run-level metric rows — most often because none of them completed.