gpt-5.2-codex @ medium · api
apimedium
- config
- gpt-5.2-codex-eff-medium--api--official--dev
- batch
- 2026-07-19--unified
- transport
- openai-official-api
- protocol
- api · metered
- served model
- gpt-5.2-codex
- 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
grok-4.5 · go0.61claude-sonnet-4-6 @max · kiro0.59claude-sonnet-5 @low · CC0.59deepseek-v4-pro · go0.59gpt-5.4 @none · api0.59farthest
gpt-5.6-luna @medium · codex-oauth0.44north-mini-code-free · api0.45gpt-5.5 @low · codex-oauth0.47claude-sonnet-5 @max · CC0.47claude-haiku-4-5 @xhigh · CC0.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 tempambiguousno-remaining-candidate
- min tempmismatchshown: 25.3
- 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">
<title>Weather Card</title>
<style>
:root{
--bg1:#0f2027;
--bg2:#203a43;
--bg3:#2c5364;
--card:#ffffffee;
--accent:#3b82f6;
--text:#0f172a;
--muted:#6b7280;
}
html,body{
margin:0;
padding:0;
width:100%;
height:100%;
font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
color:var(--text);
}
body{
background: linear-gradient(135deg,var(--bg1),var(--bg2),var(--bg3));
display:flex;
align-items:center;
justify-content:center;
}
.card{
width:880px;
max-width:90vw;
background:var(--card);
border-radius:28px;
padding:36px 44px;
box-shadow:0 25px 60px rgba(0,0,0,0.35);
backdrop-filter: blur(8px);
}
.header{
display:flex;
justify-content:space-between;
align-items:flex-start;
margin-bottom:18px;
}
.title h1{
font-size:36px;
margin:0;
letter-spacing:0.5px;
}
.title .date{
font-size:18px;
color:var(--muted);
margin-top:4px;
}
.temp{
text-align:right;
}
.temp .max{
font-size:42px;
font-weight:700;
color:var(--accent);
line-height:1;
}
.temp .min{
font-size:20px;
color:var(--muted);
margin-top:4px;
}
.condition{
display:flex;
align-items:center;
gap:12px;
margin:14px 0 24px;
font-size:20px;
font-weight:600;
}
.condition .icon{
font-size:34px;
}
.hourly{
margin-top:16px;
}
.hourly h3{
margin:0 0 12px;
font-size:16px;
letter-spacing:0.8px;
text-transform:uppercase;
color:var(--muted);
}
.hours{
display:flex;
overflow-x:auto;
gap:10px;
padding-bottom:8px;
}
.hour{
flex:0 0 auto;
background:#f3f4f6;
border-radius:14px;
padding:10px 14px;
text-align:center;
min-width:72px;
box-shadow:inset 0 0 0 1px rgba(0,0,0,0.04);
}
.hour .t{
font-size:12px;
color:var(--muted);
margin-bottom:4px;
}
.hour .v{
font-size:16px;
font-weight:600;
}
.error{
text-align:center;
font-size:20px;
color:#fee2e2;
background:rgba(239,68,68,0.2);
padding:18px;
border-radius:16px;
}
</style>
</head>
<body>
<div id="app" class="card">
<div class="loading">Loading weather...</div>
</div>
<script>
(function(){
const params = new URLSearchParams(location.search);
const lat = params.get('lat') || "52.52";
const lon = params.get('lon') || "13.405";
const name = params.get('name') || "Berlin";
const todayUTC = new Date().toISOString().slice(0,10);
const date = params.get('date') || todayUTC;
function isPast(dateStr){
return dateStr < todayUTC;
}
const endpoint = isPast(date) ? "/api/om/archive" : "/api/om/forecast";
const url = endpoint + "?" + new URLSearchParams({
latitude: lat,
longitude: lon,
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: date,
end_date: date
}).toString();
function codeToText(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","❓"];
}
function render(data){
const daily = data.daily;
const hourly = data.hourly;
if(!daily || !hourly){
throw new Error("Missing data");
}
const max = daily.temperature_2m_max[0];
const min = daily.temperature_2m_min[0];
const code = daily.weather_code[0];
const [cond, icon] = codeToText(code);
const hours = hourly.time;
const temps = hourly.temperature_2m;
const hourCards = hours.map((t, i)=>{
const hour = t.slice(11,16);
return `<div class="hour"><div class="t">${hour}</div><div class="v">${temps[i].toFixed(1)}°C</div></div>`;
}).join("");
document.getElementById("app").innerHTML = `
<div class="header">
<div class="title">
<h1>${name}</h1>
<div class="date">${date} (UTC)</div>
</div>
<div class="temp">
<div class="max">${max.toFixed(1)}°C</div>
<div class="min">Min ${min.toFixed(1)}°C</div>
</div>
</div>
<div class="condition">
<div class="icon">${icon}</div>
<div>${cond}</div>
</div>
<div class="hourly">
<h3>Hourly temperatures</h3>
<div class="hours">${hourCards}</div>
</div>
`;
}
fetch(url)
.then(res => {
if(!res.ok) throw new Error("Network error");
return res.json();
})
.then(render)
.catch(()=>{
document.getElementById("app").innerHTML = `<div class="error">Weather data could not be loaded.</div>`;
});
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 6,549 | html / css / js | 241 / 2,506 / 3,802 |
|---|---|---|---|
| dom nodes | 9 | dom depth | 4 |
| css rules | 19 | js present | yes |
| brightness | 107.0 | contrast | 86.4 |
| colorfulness | 24.1 | whitespace | 30.4% |
This slot's telemetry
| prompt tokens | 312 | completion tokens | 2,356 |
|---|---|---|---|
| total tokens | 2,668 | wall | 21.3 s |
| cost | — | request id | — |
config.json577 B
{
"N": 4,
"auth": {
"credential_ref": "WCB_OPENAI_OFFICIAL_KEY",
"method": "api-key"
},
"billing": "metered",
"config_id": "gpt-5.2-codex-eff-medium--api--official--dev",
"effort": "medium",
"family": "gpt",
"m": {
"min": 4,
"q": 4
},
"model_id": "gpt-5.2-codex",
"protocol": "api",
"served_model": "gpt-5.2-codex",
"telemetry": {
"completion_tokens": 17217,
"cost_usd": null,
"prompt_tokens": 2464,
"total_tokens": 19681,
"wall_ms": 163334
},
"transport": "openai-official-api",
"vendor_sanction_ref": null
}send-log4.7 KB
{
"N": 4,
"batch_id": "2026-07-18--official-gpt",
"config_id": "gpt-5.2-codex-eff-medium--api--official--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T15:52:08.530025+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:51:47.243792+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-17T15:52:33.452416+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:52:12.205477+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-17T15:52:49.633967+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:52:36.164530+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-17T15:53:14.349642+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:52:52.433120+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-17T15:53:39.148222+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:53:18.058570+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-17T15:54:03.206073+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:53:41.921250+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-17T15:54:28.107810+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:54:06.491933+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-17T15:54:53.048197+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T15:54:31.617617+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
}
}
}