glm-5.2 · go
go
- config
- glm-5.2--opencode-go--dev
- batch
- 2026-07-19--unified
- transport
- opencode-go-gateway
- protocol
- api · plan
- served model
- glm-5.2
- captured
- Jul 18, 2026, 11:54 AM · N=2
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.4 @none · api0.66claude-opus-4-8 @low · kiro0.64claude-opus-4-8 @xhigh · kiro0.64claude-sonnet-5 @medium · kiro0.64gpt-5.4 @high · api0.64farthest
nemotron-3-ultra-free · api0.45gpt-5.6-terra @medium · kiro0.47gpt-5.6-luna @high · kiro0.47claude-haiku-4-5 @xhigh · CC0.47claude-haiku-4-5 @medium · 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 tempmismatchshown: 13.4
- min tempmismatchshown: 52.52
- hourlymismatchcoverage 0/24 · 0 match · 3 mismatch · 21 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</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { width: 100%; height: 100%; overflow: hidden; }
body {
font-family: -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
background: #070b18;
color: #e8ecf5;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
/* Ambient background */
.bg-layer {
position: absolute;
inset: 0;
overflow: hidden;
z-index: 0;
}
.blob {
position: absolute;
border-radius: 50%;
filter: blur(90px);
opacity: 0.55;
animation: drift 22s ease-in-out infinite alternate;
}
.blob.b1 { width: 520px; height: 520px; background: #1b3a6b; top: -120px; left: -100px; }
.blob.b2 { width: 460px; height: 460px; background: #2a6b8f; bottom: -160px; right: -120px; animation-delay: -8s; }
.blob.b3 { width: 380px; height: 380px; background: #c95d3a; top: 40%; left: 55%; opacity: 0.25; animation-delay: -14s; }
@keyframes drift {
0% { transform: translate(0,0) scale(1); }
100% { transform: translate(40px,-30px) scale(1.1); }
}
.grain {
position: absolute; inset: 0;
background-image:
radial-gradient(rgba(255,255,255,0.04) 1px, transparent 1px);
background-size: 3px 3px;
opacity: 0.6;
mix-blend-mode: overlay;
pointer-events: none;
}
/* Card */
.card {
position: relative;
z-index: 1;
width: 1120px;
min-height: 660px;
backdrop-filter: blur(28px) saturate(140%);
-webkit-backdrop-filter: blur(28px) saturate(140%);
background: linear-gradient(160deg, rgba(28,36,58,0.72), rgba(14,20,38,0.72));
border: 1px solid rgba(255,255,255,0.08);
border-radius: 32px;
box-shadow:
0 30px 80px rgba(0,0,0,0.55),
inset 0 1px 0 rgba(255,255,255,0.06);
padding: 48px 56px 44px;
display: grid;
grid-template-rows: auto auto 1fr auto;
gap: 26px;
}
/* Header row */
.head {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.head-left .eyebrow {
font-size: 11px;
letter-spacing: 0.32em;
text-transform: uppercase;
color: #7d89a8;
margin-bottom: 10px;
}
.head-left h1 {
font-size: 38px;
font-weight: 300;
letter-spacing: -0.01em;
color: #fff;
line-height: 1.05;
}
.head-left h1 .thin { color: #9aa4c0; font-weight: 200; }
.head-right {
text-align: right;
}
.head-right .date {
font-size: 15px;
color: #d8def0;
font-variant-numeric: tabular-nums;
letter-spacing: 0.02em;
}
.head-right .weekday {
font-size: 11px;
letter-spacing: 0.32em;
text-transform: uppercase;
color: #7d89a8;
margin-top: 6px;
}
/* Main reading */
.reading {
display: grid;
grid-template-columns: 1.1fr 1fr;
gap: 32px;
align-items: center;
padding: 8px 0 4px;
border-top: 1px solid rgba(255,255,255,0.06);
border-bottom: 1px solid rgba(255,255,255,0.06);
padding-top: 28px;
padding-bottom: 28px;
}
.hero {
display: flex;
align-items: center;
gap: 28px;
}
.glyph {
width: 116px;
height: 116px;
flex-shrink: 0;
}
.hero-text .temp {
font-size: 92px;
font-weight: 200;
line-height: 0.9;
letter-spacing: -0.04em;
color: #fff;
font-variant-numeric: tabular-nums;
}
.hero-text .temp .deg {
font-size: 48px;
vertical-align: top;
color: #9aa4c0;
margin-left: 4px;
font-weight: 200;
}
.hero-text .condition {
margin-top: 14px;
font-size: 17px;
color: #d8def0;
letter-spacing: 0.02em;
}
.hero-text .feels {
margin-top: 4px;
font-size: 12px;
color: #7d89a8;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.extremes {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
.extreme {
padding: 18px 22px;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.06);
border-radius: 18px;
}
.extreme .label {
font-size: 11px;
letter-spacing: 0.22em;
text-transform: uppercase;
color: #7d89a8;
display: flex;
align-items: center;
gap: 8px;
}
.extreme .label .arr { font-size: 14px; line-height: 1; }
.extreme.hi .arr { color: #f0a35e; }
.extreme.lo .arr { color: #6fb8d8; }
.extreme .val {
margin-top: 10px;
font-size: 38px;
font-weight: 300;
color: #fff;
font-variant-numeric: tabular-nums;
letter-spacing: -0.02em;
}
.extreme .val .u {
font-size: 18px;
color: #9aa4c0;
margin-left: 2px;
}
.extreme .sub {
margin-top: 4px;
font-size: 11px;
color: #7d89a8;
letter-spacing: 0.06em;
}
/* Hourly chart */
.chart-block {
display: grid;
grid-template-rows: auto 1fr;
gap: 14px;
}
.chart-head {
display: flex;
justify-content: space-between;
align-items: center;
}
.chart-title {
font-size: 11px;
letter-spacing: 0.32em;
text-transform: uppercase;
color: #7d89a8;
}
.legend {
display: flex;
gap: 22px;
font-size: 11px;
color: #9aa4c0;
letter-spacing: 0.06em;
}
.legend span { display: flex; align-items: center; gap: 7px; }
.legend i {
display: inline-block;
width: 10px; height: 10px;
border-radius: 10px;
}
.legend .dot-hi { background: #f0a35e; }
.legend .dot-lo { background: #6fb8d8; }
.legend .dot-avg { background: #c9d0e6; }
.chart-wrap {
position: relative;
width: 100%;
height: 220px;
}
#chart { width: 100%; height: 100%; display: block; }
.foot {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 11px;
color: #6c7796;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.foot .pulse {
display: inline-flex;
align-items: center;
gap: 8px;
}
.pulse i {
width: 7px; height: 7px;
border-radius: 50%;
background: #4ade80;
box-shadow: 0 0 10px #4ade80;
animation: blink 1.6s ease-in-out infinite;
}
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.3} }
/* Error state */
.error {
position: relative;
z-index: 1;
width: 560px;
max-width: 92vw;
backdrop-filter: blur(28px);
background: linear-gradient(160deg, rgba(40,22,28,0.72), rgba(20,16,22,0.72));
border: 1px solid rgba(255,120,120,0.18);
border-radius: 24px;
padding: 44px 40px;
text-align: center;
box-shadow: 0 30px 80px rgba(0,0,0,0.55);
}
.error h2 {
font-size: 22px;
font-weight: 300;
color: #ffd8d8;
margin-bottom: 12px;
letter-spacing: 0.02em;
}
.error p {
font-size: 13px;
color: #b69;
line-height: 1.6;
letter-spacing: 0.04em;
}
.error .mark {
width: 56px; height: 56px;
border-radius: 50%;
border: 1.5px solid rgba(255,150,150,0.4);
margin: 0 auto 22px;
display: flex; align-items: center; justify-content: center;
color: #ff9b9b;
font-size: 26px;
font-weight: 200;
}
.hidden { display: none !important; }
</style>
</head>
<body>
<div class="bg-layer">
<div class="blob b1"></div>
<div class="blob b2"></div>
<div class="blob b3"></div>
<div class="grain"></div>
</div>
<div id="error" class="error hidden">
<div class="mark">!</div>
<h2>We couldn't load the weather</h2>
<p id="errMsg">The forecast service is unreachable right now. Please check your connection or try again in a moment.</p>
</div>
<div id="card" class="card hidden">
<div class="head">
<div class="head-left">
<div class="eyebrow">Atmospheric report</div>
<h1 id="locName">Berlin <span class="thin">/ Germany</span></h1>
</div>
<div class="head-right">
<div class="date" id="dateStr">—</div>
<div class="weekday" id="weekday">—</div>
</div>
</div>
<div class="reading">
<div class="hero">
<svg class="glyph" id="glyph" viewBox="0 0 116 116"></svg>
<div class="hero-text">
<div class="temp" id="refTemp">—<span class="deg">°</span></div>
<div class="condition" id="condition">—</div>
<div class="feels" id="feels">midday reference</div>
</div>
</div>
<div class="extremes">
<div class="extreme hi">
<div class="label"><span class="arr">↑</span> High</div>
<div class="val"><span id="tMax">—</span><span class="u">°C</span></div>
<div class="sub" id="tMaxTime">—</div>
</div>
<div class="extreme lo">
<div class="label"><span class="arr">↓</span> Low</div>
<div class="val"><span id="tMin">—</span><span class="u">°C</span></div>
<div class="sub" id="tMinTime">—</div>
</div>
</div>
</div>
<div class="chart-block">
<div class="chart-head">
<div class="chart-title">Hourly temperature · 24h</div>
<div class="legend">
<span><i class="dot-hi"></i> daily high</span>
<span><i class="dot-lo"></i> daily low</span>
<span><i class="dot-avg"></i> hourly</span>
</div>
</div>
<div class="chart-wrap">
<svg id="chart" viewBox="0 0 1000 220" preserveAspectRatio="none"></svg>
</div>
</div>
<div class="foot">
<span class="pulse"><i></i> Live · Open-Meteo compatible</span>
<span id="coord">— · —</span>
</div>
</div>
<script>
(function () {
"use strict";
// --- Parse parameters ---
var params = new URLSearchParams(location.search);
var lat = parseFloat(params.get("lat"));
var lon = parseFloat(params.get("lon"));
var name = params.get("name");
var dateStr = params.get("date");
if (isNaN(lat)) lat = 52.52;
if (isNaN(lon)) lon = 13.405;
if (!name) name = "Berlin";
function todayUTC() {
var d = new Date();
var y = d.getUTCFullYear();
var m = ("0" + (d.getUTCMonth() + 1)).slice(-2);
var day = ("0" + d.getUTCDate()).slice(-2);
return y + "-" + m + "-" + day;
}
if (!dateStr || !/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) dateStr = todayUTC();
// --- WMO weather code map ---
var WMO = {
0: { label: "Clear sky", kind: "clear" },
1: { label: "Mainly clear", kind: "clear" },
2: { label: "Partly cloudy", kind: "partly" },
3: { label: "Overcast", kind: "cloudy" },
45: { label: "Fog", kind: "fog" },
48: { label: "Depositing rime fog",kind: "fog" },
51: { label: "Light drizzle", kind: "drizzle" },
53: { label: "Moderate drizzle", kind: "drizzle" },
55: { label: "Dense drizzle", kind: "drizzle" },
56: { label: "Light freezing drizzle", kind: "drizzle" },
57: { label: "Dense freezing drizzle", kind: "drizzle" },
61: { label: "Slight rain", kind: "rain" },
63: { label: "Moderate rain", kind: "rain" },
65: { label: "Heavy rain", kind: "rain" },
66: { label: "Light freezing rain",kind: "rain" },
67: { label: "Heavy freezing rain",kind: "rain" },
71: { label: "Slight snowfall", kind: "snow" },
73: { label: "Moderate snowfall", kind: "snow" },
75: { label: "Heavy snowfall", kind: "snow" },
77: { label: "Snow grains", kind: "snow" },
80: { label: "Slight rain showers",kind: "rain" },
81: { label: "Moderate rain showers",kind: "rain" },
82: { label: "Violent rain showers",kind: "rain" },
85: { label: "Slight snow showers",kind: "snow" },
86: { label: "Heavy snow showers", kind: "snow" },
95: { label: "Thunderstorm", kind: "storm" },
96: { label: "Thunderstorm, slight hail", kind: "storm" },
99: { label: "Thunderstorm, heavy hail", kind: "storm" }
};
// --- Decide endpoint (past date -> archive, else forecast) ---
var today = todayUTC();
var isPast = dateStr < today;
var endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";
var qs = new URLSearchParams({
latitude: lat.toFixed(4),
longitude: lon.toFixed(4),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: dateStr,
end_date: dateStr
});
// --- DOM refs ---
var card = document.getElementById("card");
var errorBox = document.getElementById("error");
var errMsg = document.getElementById("errMsg");
function fail(msg) {
card.classList.add("hidden");
errorBox.classList.remove("hidden");
errMsg.textContent = msg;
}
function fmtDateNice(d) {
var months = ["January","February","March","April","May","June","July",
"August","September","October","November","December"];
var wd = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
return {
date: d.getUTCDate() + " " + months[d.getUTCMonth()] + " " + d.getUTCFullYear(),
weekday: wd[d.getUTCDay()]
};
}
function setName(name) {
var parts = name.split(",").map(function(s){return s.trim();});
var main = parts[0];
var sub = parts.slice(1).join(", ");
var html = main;
if (sub) html += ' <span class="thin">/ ' + sub + '</span>';
else html += ' <span class="thin">/ ' + (lat>=0?"N":"S") + Math.abs(lat).toFixed(2) + '° ' + (lon>=0?"E":"W") + Math.abs(lon).toFixed(2) + '°</span>';
document.getElementById("locName").innerHTML = html;
}
// --- Weather glyph (SVG) ---
function drawGlyph(kind) {
var g = document.getElementById("glyph");
var s = "";
if (kind === "clear") {
s += '<circle cx="58" cy="58" r="20" fill="#ffd27a"/>';
for (var i = 0; i < 12; i++) {
var a = (i * 30) * Math.PI / 180;
var x1 = 58 + Math.cos(a) * 32, y1 = 58 + Math.sin(a) * 32;
var x2 = 58 + Math.cos(a) * 42, y2 = 58 + Math.sin(a) * 42;
s += '<line x1="'+x1+'" y1="'+y1+'" x2="'+x2+'" y2="'+y2+'" stroke="#ffd27a" stroke-width="2.5" stroke-linecap="round" opacity="0.85"/>';
}
} else if (kind === "partly") {
s += '<circle cx="44" cy="46" r="16" fill="#ffd27a"/>';
s += '<path d="M 40 70 a 18 18 0 0 1 0 -36 a 22 22 0 0 1 38 6 a 14 14 0 0 1 4 30 z" fill="#cdd4e8"/>';
} else if (kind === "cloudy" || kind === "fog") {
s += '<path d="M 30 68 a 18 18 0 0 1 0-36 a 24 24 0 0 1 46 4 a 14 14 0 0 1 4 32 z" fill="#a8b1cd"/>';
if (kind === "fog") {
for (var j = 0; j < 3; j++) {
s += '<line x1="28" y1="'+(78+j*8)+'" x2="86" y2="'+(78+j*8)+'" stroke="#cfd6ea" stroke-width="2" stroke-linecap="round" opacity="0.7"/>';
}
}
} else if (kind === "drizzle" || kind === "rain") {
s += '<path d="M 30 60 a 18 18 0 0 1 0-36 a 24 24 0 0 1 46 4 a 14 14 0 0 1 4 32 z" fill="#7d89aa"/>';
var drops = kind === "rain" ? 5 : 3;
for (var k = 0; k < drops; k++) {
var dx = 38 + k * 11;
s += '<line x1="'+dx+'" y1="72" x2="'+(dx-3)+'" y2="86" stroke="#6fb8d8" stroke-width="2.2" stroke-linecap="round"/>';
}
} else if (kind === "snow") {
s += '<path d="M 30 60 a 18 18 0 0 1 0-36 a 24 24 0 0 1 46 4 a 14 14 0 0 1 4 32 z" fill="#cdd4e8"/>';
for (var m = 0; m < 4; m++) {
var sx = 40 + m * 12;
s += '<circle cx="'+sx+'" cy="80" r="2.4" fill="#fff"/>';
}
} else if (kind === "storm") {
s += '<path d="M 30 56 a 18 18 0 0 1 0-36 a 24 24 0 0 1 46 4 a 14 14 0 0 1 4 32 z" fill="#5a627d"/>';
s += '<path d="M 56 66 L 48 82 L 56 82 L 50 96 L 70 76 L 60 76 L 66 66 Z" fill="#ffd27a"/>';
}
g.innerHTML = s;
}
// --- Build chart ---
function buildChart(hours, temps, tMax, tMin) {
var svg = document.getElementById("chart");
var W = 1000, H = 220, padL = 56, padR = 20, padT = 22, padB = 40;
var cw = W - padL - padR;
var ch = H - padT - padB;
var minT = Math.min.apply(null, temps);
var maxT = Math.max.apply(null, temps);
var range = (maxT - minT) || 1;
// pad range a bit
var pmin = minT - range * 0.18;
var pmax = maxT + range * 0.18;
var pr = pmax - pmin;
var xOf = function(i) { return padL + (cw * i / (temps.length - 1)); };
var yOf = function(v) { return padT + ch * (1 - (v - pmin) / pr); };
// Path
var pts = temps.map(function(t, i) { return [xOf(i), yOf(t)]; });
var lineD = pts.map(function(p, i) {
return (i === 0 ? "M" : "L") + " " + p[0].toFixed(2) + " " + p[1].toFixed(2);
}).join(" ");
var areaD = lineD + " L " + pts[pts.length - 1][0].toFixed(2) + " " + (padT + ch) +
" L " + pts[0][0].toFixed(2) + " " + (padT + ch) + " Z";
var s = "";
s += '<defs>' +
'<linearGradient id="areaGrad" x1="0" y1="0" x2="0" y2="1">' +
'<stop offset="0%" stop-color="#f0a35e" stop-opacity="0.42"/>' +
'<stop offset="100%" stop-color="#f0a35e" stop-opacity="0"/>' +
'</linearGradient>' +
'<linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">' +
'<stop offset="0%" stop-color="#6fb8d8"/>' +
'<stop offset="100%" stop-color="#f0a35e"/>' +
'</linearGradient>' +
'</defs>';
// Y grid + labels
var steps = 4;
for (var i = 0; i <= steps; i++) {
var v = pmin + (pr * i / steps);
var y = padT + ch * (1 - i / steps);
s += '<line x1="'+padL+'" y1="'+y+'" x2="'+(W-padR)+'" y2="'+y+'" stroke="rgba(255,255,255,0.05)" stroke-width="1"/>';
s += '<text x="'+(padL-10)+'" y="'+(y+3)+'" text-anchor="end" fill="#6c7796" font-size="10" font-family="inherit" letter-spacing="0.06em">'+ Math.round(v) + '°</text>';
}
// X labels (every 3h)
for (var h = 0; h < hours.length; h += 3) {
var x = xOf(h);
var label = ("0" + hours[h]).slice(-2);
s += '<text x="'+x+'" y="'+(H-padB+18)+'" text-anchor="middle" fill="#6c7796" font-size="10" font-family="inherit" letter-spacing="0.06em">'+label+'</text>';
}
// High/low reference dashed lines
s += '<line x1="'+padL+'" y1="'+yOf(tMax)+'" x2="'+(W-padR)+'" y2="'+yOf(tMax)+'" stroke="#f0a35e" stroke-width="1" stroke-dasharray="3 4" opacity="0.45"/>';
s += '<line x1="'+padL+'" y1="'+yOf(tMin)+'" x2="'+(W-padR)+'" y2="'+yOf(tMin)+'" stroke="#6fb8d8" stroke-width="1" stroke-dasharray="3 4" opacity="0.45"/>';
// Area + line
s += '<path d="'+areaD+'" fill="url(#areaGrad)"/>';
s += '<path d="'+lineD+'" fill="none" stroke="url(#lineGrad)" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>';
// Points - accent the max and min, plus noon reference
var maxIdx = temps.indexOf(maxT);
var minIdx = temps.indexOf(tMin);
var noonIdx = 12;
for (var pi = 0; pi < pts.length; pi++) {
var p = pts[pi];
var isMax = pi === maxIdx;
var isMin = pi === minIdx;
var col = (isMax ? "#f0a35e" : (isMin ? "#6fb8d8" : "#c9d0e6"));
var r = (isMax || isMin) ? 4.5 : 2.5;
s += '<circle cx="'+p[0]+'" cy="'+p[1]+'" r="'+r+'" fill="'+col+'"/>';
if (isMax || isMin) {
var val = temps[pi];
s += '<text x="'+p[0]+'" y="'+(p[1]-10)+'" text-anchor="middle" fill="'+col+'" font-size="11" font-family="inherit" font-weight="500" letter-spacing="0.04em">'+val.toFixed(1)+'°</text>';
}
}
svg.innerHTML = s;
}
// --- Render ---
function render(data) {
if (!data || !data.daily || !data.hourly) {
fail("The data returned by the service did not contain the expected fields.");
return;
}
var d = data.daily;
var h = data.hourly;
var tMax = d.temperature_2m_max[0];
var tMin = d.temperature_2m_min[0];
var wcode = d.weather_code[0];
if (tMax === null || tMin === null || wcode === null) {
fail("Part of the requested data is missing for this date.");
return;
}
var wmo = WMO[wcode] || { label: "Unknown", kind: "cloudy" };
// Location, date
setName(name);
var dd = new Date(dateStr + "T00:00:00Z");
var nd = fmtDateNice(dd);
document.getElementById("dateStr").textContent = nd.date;
document.getElementById("weekday").textContent = nd.weekday;
document.getElementById("coord").textContent =
Math.abs(lat).toFixed(3) + (lat>=0?"°N ":"°S ") + Math.abs(lon).toFixed(3) + (lon>=0?"°E":"°W");
// Reference temp: try noon hour
var hourLabels = [], temps = [];
if (h.time && h.temperature_2m) {
for (var i = 0; i < h.time.length; i++) {
var hh = h.time[i].indexOf("T") >= 0
? parseInt(h.time[i].split("T")[1].slice(0,2), 10)
: i;
hourLabels.push(hh);
temps.push(h.temperature_2m[i]);
}
}
// If only one day returned, should be 24 entries. Sometimes returns fewer for archive; pad with what we have.
if (temps.length === 0) {
fail("No hourly temperature values were returned for this date.");
return;
}
// Reference display value: prefer hour 12, else max
var refIdx = hourLabels.indexOf(12);
if (refIdx < 0) refIdx = Math.min(temps.length - 1, Math.floor(temps.length / 2));
var refVal = temps[refIdx];
document.getElementById("refTemp").innerHTML =
(refVal >= 0 ? "" : "") + Math.round(refVal) + '<span class="deg">°C</span>';
document.getElementById("condition").textContent = wmo.label;
document.getElementById("feels").textContent =
refIdx + ":00 UTC · reference observation";
document.getElementById("tMax").textContent = (tMax >= 0 ? "" : "") + tMax.toFixed(1);
document.getElementById("tMin").textContent = (tMin >= 0 ? "" : "") + tMin.toFixed(1);
var maxIdx = temps.indexOf(Math.max.apply(null, temps));
var minIdx = temps.indexOf(Math.min.apply(null, temps));
var maxHr = hourLabels[maxIdx];
var minHr = hourLabels[minIdx];
function hr12(hh) {
var suf = hh < 12 ? "AM" : "PM";
var h12 = hh % 12; if (h12 === 0) h12 = 12;
return ("0"+h12).slice(-2) + ":00 " + suf + " UTC";
}
document.getElementById("tMaxTime").textContent = "peak at " + hr12(maxHr);
document.getElementById("tMinTime").textContent = "trough at " + hr12(minHr);
drawGlyph(wmo.kind);
buildChart(hourLabels, temps, tMax, tMin);
card.classList.remove("hidden");
}
// --- Fetch ---
function load() {
var url = endpoint + "?" + qs.toString();
var ctrl = new AbortController();
var to = setTimeout(function(){ ctrl.abort(); }, 12000);
fetch(url, { signal: ctrl.signal })
.then(function(r) {
clearTimeout(to);
if (!r.ok) throw new Error("HTTP " + r.status);
return r.json();
})
.then(function(j) {
try { render(j); }
catch (e) { fail("We couldn't interpret the data returned for this location and date."); }
})
.catch(function(e) {
var msg;
if (e.name === "AbortError") msg = "The request timed out and the service did not respond.";
else msg = "The weather service is unreachable. Verify the location and date, then try again.";
fail(msg);
});
}
load();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 23,150 | html / css / js | 2,527 / 7,037 / 13,586 |
|---|---|---|---|
| dom nodes | 64 | dom depth | 8 |
| css rules | 58 | js present | yes |
| brightness | 29.4 | contrast | 16.0 |
| colorfulness | 19.1 | whitespace | 87.7% |
This slot's telemetry
| prompt tokens | 319 | completion tokens | 8,377 |
|---|---|---|---|
| total tokens | 8,696 | wall | 233.7 s |
| cost | — | request id | — |
config.json529 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_OPENCODE_KEY",
"method": "oauth"
},
"billing": "plan",
"config_id": "glm-5.2--opencode-go--dev",
"effort": null,
"family": "glm",
"m": {
"min": 2,
"q": 1
},
"model_id": "glm-5.2",
"protocol": "api",
"served_model": "glm-5.2",
"telemetry": {
"completion_tokens": 18237,
"cost_usd": null,
"prompt_tokens": 941,
"total_tokens": 19178,
"wall_ms": 619022
},
"transport": "opencode-go-gateway",
"vendor_sanction_ref": null
}send-log3.3 KB
{
"N": 2,
"batch_id": "2026-07-17--dev-opencode-go",
"config_id": "glm-5.2--opencode-go--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-20T02:25:43.006009+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T02:22:38.008581+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-20T02:29:40.207553+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T02:25:46.507232+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-20T02:32:40.861093+00:00",
"http_status": 200,
"outcome": "model-failed",
"reached_model": true,
"reason": "no-valid-html",
"request_id": null,
"started_at": "2026-07-20T02:29:45.270184+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "model-failed",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": 500,
"charged": false,
"ended_at": "2026-07-20T02:33:17.731508+00:00",
"http_status": 503,
"outcome": "rate-limited",
"reached_model": false,
"reason": "http-503-overloaded",
"request_id": null,
"started_at": "2026-07-20T02:32:41.075847+00:00"
},
{
"attempt_index": 1,
"backoff_ms": 1000,
"charged": false,
"ended_at": "2026-07-20T02:34:06.645411+00:00",
"http_status": 503,
"outcome": "rate-limited",
"reached_model": false,
"reason": "http-503-overloaded",
"request_id": null,
"started_at": "2026-07-20T02:33:18.236596+00:00"
},
{
"attempt_index": 2,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-20T02:37:27.986405+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T02:34:07.649109+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 2,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}