gpt-5.4-mini @ low · api
apilow
- config
- gpt-5.4-mini-eff-low--api--official--dev
- batch
- 2026-07-19--unified
- transport
- openai-official-api
- protocol
- api · metered
- served model
- gpt-5.4-mini-2026-03-17
- captured
- Jul 18, 2026, 11:54 AM · N=4
variant
live
slot 0 · P-q · sandboxed iframe

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.
similarity neighbors
nearest
gpt-5.6-terra @high · codex-oauth0.69gpt-5.6-terra @low · kiro0.69claude-sonnet-5 @low · CC0.67gpt-5.6-sol @low · codex-oauth0.67grok-4.5 @low · grok-cli0.67farthest
gpt-5.6-luna @medium · codex-oauth0.41gpt-5.6-luna @high · kiro0.41gpt-5.5 @medium · codex-oauth0.44claude-opus-4-6 @high · kiro0.45minimax-m2.5 · kiro0.47within session 2026-07-19--unified
similarity measures convergence within this session — not quality.
Fidelity — does the card show the right data?
- namematch
- conditionmatch
- datematch
- max tempambiguousshown: 25max-equals-min
- min tempambiguousshown: 25max-equals-min
- hourlyambiguouscoverage · 0 match · 0 mismatch · 24 not shown
- request sidematch0 violation(s)
extractor fidelity-extractor-v1+Berlin-2026-07-15
Source — raw model output, one byte unchanged
download card.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Weather Card</title>
<style>
:root {
--bg1: #08111f;
--bg2: #10233f;
--card: rgba(12, 20, 35, 0.72);
--card2: rgba(255, 255, 255, 0.06);
--text: #eaf2ff;
--muted: rgba(234, 242, 255, 0.72);
--line: rgba(255, 255, 255, 0.12);
--accent: #7dd3fc;
--accent2: #a78bfa;
--good: #86efac;
--warn: #fbbf24;
--shadow: 0 24px 80px rgba(0, 0, 0, 0.35);
}
html, body {
width: 100%;
height: 100%;
margin: 0;
}
body {
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
color: var(--text);
background:
radial-gradient(1200px 900px at 15% 15%, rgba(125, 211, 252, 0.20), transparent 55%),
radial-gradient(1000px 800px at 85% 20%, rgba(167, 139, 250, 0.18), transparent 50%),
radial-gradient(900px 700px at 55% 85%, rgba(56, 189, 248, 0.12), transparent 55%),
linear-gradient(145deg, var(--bg1), var(--bg2));
overflow: hidden;
}
.frame {
width: 1280px;
height: 800px;
margin: 0 auto;
display: grid;
place-items: center;
position: relative;
}
.glow {
position: absolute;
inset: 0;
pointer-events: none;
background:
radial-gradient(600px 260px at 50% 0%, rgba(255,255,255,0.08), transparent 70%),
radial-gradient(500px 500px at 50% 50%, rgba(255,255,255,0.03), transparent 65%);
mix-blend-mode: screen;
}
.card {
width: 940px;
max-width: calc(100vw - 96px);
border: 1px solid var(--line);
background: linear-gradient(180deg, rgba(17, 26, 45, 0.84), rgba(8, 14, 26, 0.74));
box-shadow: var(--shadow);
border-radius: 32px;
backdrop-filter: blur(18px);
-webkit-backdrop-filter: blur(18px);
overflow: hidden;
position: relative;
}
.card::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(255,255,255,0.10), transparent 28%, transparent 72%, rgba(255,255,255,0.04));
pointer-events: none;
}
.top {
display: grid;
grid-template-columns: 1.3fr 0.9fr;
gap: 0;
padding: 34px 36px 28px;
border-bottom: 1px solid var(--line);
align-items: end;
}
.location {
display: flex;
flex-direction: column;
gap: 10px;
}
.kicker {
font-size: 13px;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--muted);
}
.name {
font-size: 48px;
line-height: 0.98;
font-weight: 800;
letter-spacing: -0.04em;
margin: 0;
}
.date {
font-size: 18px;
color: var(--muted);
}
.summary {
justify-self: end;
text-align: right;
display: flex;
flex-direction: column;
gap: 8px;
}
.temp-range {
display: flex;
align-items: baseline;
justify-content: flex-end;
gap: 16px;
font-variant-numeric: tabular-nums;
}
.max {
font-size: 78px;
font-weight: 800;
line-height: 0.9;
letter-spacing: -0.05em;
color: #ffffff;
text-shadow: 0 0 24px rgba(125, 211, 252, 0.15);
}
.min {
font-size: 28px;
color: var(--muted);
font-weight: 700;
}
.condition {
display: inline-flex;
align-items: center;
justify-content: flex-end;
gap: 12px;
font-size: 18px;
color: var(--text);
}
.badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(255,255,255,0.07);
border: 1px solid rgba(255,255,255,0.10);
color: var(--muted);
border-radius: 999px;
padding: 10px 14px;
font-size: 13px;
width: fit-content;
}
.body {
padding: 24px 28px 30px;
}
.section-title {
display: flex;
justify-content: space-between;
align-items: end;
margin-bottom: 14px;
}
.section-title h2 {
margin: 0;
font-size: 18px;
letter-spacing: 0.02em;
font-weight: 700;
color: var(--text);
}
.section-title .hint {
color: var(--muted);
font-size: 13px;
}
.hourly {
display: grid;
grid-template-columns: repeat(8, minmax(0, 1fr));
gap: 12px;
}
.hour {
background: linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0.04));
border: 1px solid rgba(255,255,255,0.10);
border-radius: 20px;
padding: 14px 12px;
text-align: center;
min-height: 112px;
display: flex;
flex-direction: column;
justify-content: space-between;
box-shadow: inset 0 1px 0 rgba(255,255,255,0.05);
}
.hour-time {
font-size: 13px;
color: var(--muted);
letter-spacing: 0.03em;
}
.hour-temp {
font-size: 26px;
font-weight: 800;
letter-spacing: -0.04em;
font-variant-numeric: tabular-nums;
}
.hour-pill {
align-self: center;
width: 100%;
padding: 7px 0;
border-radius: 999px;
background: rgba(125, 211, 252, 0.10);
color: #d8f3ff;
font-size: 12px;
border: 1px solid rgba(125, 211, 252, 0.16);
}
.error {
width: 940px;
max-width: calc(100vw - 96px);
padding: 40px;
border-radius: 28px;
border: 1px solid rgba(248, 113, 113, 0.25);
background: rgba(40, 14, 18, 0.72);
box-shadow: var(--shadow);
color: #ffe7e7;
text-align: center;
backdrop-filter: blur(18px);
}
.error h1 {
margin: 0 0 12px;
font-size: 34px;
}
.error p {
margin: 0;
color: rgba(255, 231, 231, 0.8);
font-size: 16px;
}
.loading {
color: var(--muted);
font-size: 18px;
letter-spacing: 0.02em;
}
@media (max-width: 1100px) {
.frame { width: 100%; height: 100%; }
.card { max-width: calc(100vw - 48px); }
.hourly { grid-template-columns: repeat(4, 1fr); }
.top { grid-template-columns: 1fr; gap: 18px; }
.summary { justify-self: start; text-align: left; }
.temp-range, .condition { justify-content: flex-start; }
}
</style>
</head>
<body>
<div class="frame">
<div class="glow"></div>
<div id="app" class="loading">Loading weather…</div>
</div>
<script>
(function () {
const params = new URLSearchParams(window.location.search);
const lat = parseFloat(params.get("lat") ?? "52.52");
const lon = parseFloat(params.get("lon") ?? "13.405");
const name = params.get("name") || "Berlin";
const dateParam = params.get("date") || new Date().toISOString().slice(0, 10);
const requestedDate = new Date(dateParam + "T00:00:00Z");
const todayUTC = new Date();
const todayStr = todayUTC.toISOString().slice(0, 10);
const isPast = dateParam < todayStr;
const apiPath = isPast ? "/api/om/archive" : "/api/om/forecast";
const dailyParams = "temperature_2m_max,temperature_2m_min,weather_code";
const hourlyParams = "temperature_2m";
const qs = new URLSearchParams({
latitude: String(lat),
longitude: String(lon),
daily: dailyParams,
hourly: hourlyParams,
timezone: "UTC",
temperature_unit: "celsius",
start_date: dateParam,
end_date: dateParam
});
const app = document.getElementById("app");
function weatherDescription(code) {
const map = {
0: "Clear sky",
1: "Mainly clear",
2: "Partly cloudy",
3: "Overcast",
45: "Fog",
48: "Depositing rime fog",
51: "Light drizzle",
53: "Moderate drizzle",
55: "Dense drizzle",
56: "Light freezing drizzle",
57: "Dense freezing drizzle",
61: "Slight rain",
63: "Moderate rain",
65: "Heavy rain",
66: "Light freezing rain",
67: "Heavy freezing rain",
71: "Slight snow fall",
73: "Moderate snow fall",
75: "Heavy snow fall",
77: "Snow grains",
80: "Slight rain showers",
81: "Moderate rain showers",
82: "Violent rain showers",
85: "Slight snow showers",
86: "Heavy snow showers",
95: "Thunderstorm",
96: "Thunderstorm with slight hail",
99: "Thunderstorm with heavy hail"
};
return map[code] || "Unknown weather";
}
function formatDateLabel(iso) {
const d = new Date(iso + "T00:00:00Z");
return new Intl.DateTimeFormat(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
timeZone: "UTC"
}).format(d);
}
function formatHourLabel(iso) {
const d = new Date(iso);
return new Intl.DateTimeFormat(undefined, {
hour: "numeric",
hour12: false,
timeZone: "UTC"
}).format(d).replace(/^24$/, "00") + ":00";
}
function renderError(message) {
app.outerHTML = `
<div class="error">
<h1>Weather data unavailable</h1>
<p>${message}</p>
</div>
`;
}
async function load() {
try {
const res = await fetch(`${apiPath}?${qs.toString()}`, { method: "GET" });
if (!res.ok) throw new Error(`Request failed (${res.status})`);
const data = await res.json();
const daily = data && data.daily;
const hourly = data && data.hourly;
if (!daily || !hourly || !Array.isArray(daily.time) || !Array.isArray(hourly.time)) {
throw new Error("Unexpected response format");
}
const idxDaily = daily.time.indexOf(dateParam);
if (idxDaily < 0) throw new Error("Requested day missing in daily data");
const hourlyItems = [];
for (let i = 0; i < hourly.time.length; i++) {
if (hourly.time[i].startsWith(dateParam)) {
hourlyItems.push({
time: hourly.time[i],
temp: hourly.temperature_2m[i]
});
}
}
const maxTemp = daily.temperature_2m_max[idxDaily];
const minTemp = daily.temperature_2m_min[idxDaily];
const code = daily.weather_code[idxDaily];
const desc = weatherDescription(code);
const hoursHtml = hourlyItems.map(item => `
<div class="hour">
<div class="hour-time">${formatHourLabel(item.time)}</div>
<div class="hour-temp">${Math.round(item.temp)}°</div>
<div class="hour-pill">${item.temp.toFixed(1)} °C</div>
</div>
`).join("");
app.outerHTML = `
<div class="card">
<div class="top">
<div class="location">
<div class="kicker">Weather card</div>
<h1 class="name">${escapeHtml(name)}</h1>
<div class="date">${formatDateLabel(dateParam)} · UTC</div>
</div>
<div class="summary">
<div class="temp-range">
<div class="max">${Math.round(maxTemp)}°</div>
<div class="min">${Math.round(minTemp)}°</div>
</div>
<div class="condition">
<span class="badge">Condition</span>
<span>${escapeHtml(desc)}</span>
</div>
</div>
</div>
<div class="body">
<div class="section-title">
<h2>Hourly temperatures</h2>
<div class="hint">${hourlyItems.length} readings for ${dateParam}</div>
</div>
<div class="hourly">
${hoursHtml || '<div class="loading">No hourly data available for this date.</div>'}
</div>
</div>
</div>
`;
} catch (err) {
renderError("The weather information could not be loaded. Please try again later.");
}
}
function escapeHtml(str) {
return String(str)
.replaceAll("&", "&")
.replaceAll("<", "<")
.replaceAll(">", ">")
.replaceAll('"', """)
.replaceAll("'", "'");
}
load();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 12,750 | html / css / js | 360 / 6,251 / 6,139 |
|---|---|---|---|
| dom nodes | 11 | dom depth | 4 |
| css rules | 38 | js present | yes |
| brightness | 39.2 | contrast | 23.1 |
| colorfulness | 15.1 | whitespace | 72.7% |
This slot's telemetry
| prompt tokens | 312 | completion tokens | 3,754 |
|---|---|---|---|
| total tokens | 4,066 | wall | 22.6 s |
| cost | — | request id | — |
config.json579 B
{
"N": 4,
"auth": {
"credential_ref": "WCB_OPENAI_OFFICIAL_KEY",
"method": "api-key"
},
"billing": "metered",
"config_id": "gpt-5.4-mini-eff-low--api--official--dev",
"effort": "low",
"family": "gpt",
"m": {
"min": 4,
"q": 4
},
"model_id": "gpt-5.4-mini",
"protocol": "api",
"served_model": "gpt-5.4-mini-2026-03-17",
"telemetry": {
"completion_tokens": 35687,
"cost_usd": null,
"prompt_tokens": 2464,
"total_tokens": 38151,
"wall_ms": 257025
},
"transport": "openai-official-api",
"vendor_sanction_ref": null
}send-log4.6 KB
{
"N": 4,
"batch_id": "2026-07-18--official-gpt",
"config_id": "gpt-5.4-mini-eff-low--api--official--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:50:58.197554+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:50:36.861468+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:51:23.979552+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:51:01.413048+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:52:10.117124+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:51:27.953286+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:52:46.238741+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:52:14.202793+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:53:21.387448+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:52:49.599865+00:00"
}
],
"block_index": 2,
"model_reaching_attempt_index": 0,
"slot_index": 2,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:54:07.271730+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:53:24.707248+00:00"
}
],
"block_index": 2,
"model_reaching_attempt_index": 0,
"slot_index": 2,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:54:33.169391+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:54:11.492459+00:00"
}
],
"block_index": 3,
"model_reaching_attempt_index": 0,
"slot_index": 3,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T19:55:20.316367+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T19:54:37.364893+00:00"
}
],
"block_index": 3,
"model_reaching_attempt_index": 0,
"slot_index": 3,
"terminal_state": "valid",
"variant": "P-min"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}