glm-5.3 · opencode
opencode
- config
- glm-5.3--cli--opencode--dev
- batch
- 2026-07-19--unified
- transport
- opencode-cli-isolated-xdg-go-subscription
- protocol
- cli · plan
- served model
- glm-5.3
- 采集于
- 2026年7月18日 11:54 · N=2
variant
live
slot 1 · P-q · sandboxed iframe

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居本 session 没有 similarity 数据 —— 这个 batch 没有计算 pairs。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempmismatch展示值:9.3
- min tempmismatch展示值:13.405
- hourlyambiguouscoverage · 0 命中 · 0 不符 · 24 未展示
- request sidematch0 处违规
extractor fidelity-extractor-v1+Berlin-2026-07-15
源码 —— 原始模型输出,一字节未改
下载 card.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Weather</title>
<style>
:root{
--accent:#7dd3fc;
--accent-2:#bae6fd;
--ink:#f2f6fc;
--ink-2:rgba(242,246,252,.62);
--ink-3:rgba(242,246,252,.42);
--card-line:rgba(255,255,255,.14);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{
font-family:"SF Pro Display",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
color:var(--ink);
background:#0a0f1e;
overflow:hidden;
-webkit-font-smoothing:antialiased;
}
.scene{
position:relative;width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;
background:
radial-gradient(1200px 700px at 12% -10%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 60%),
radial-gradient(1000px 700px at 105% 110%, color-mix(in srgb, var(--accent-2) 10%, transparent), transparent 60%),
linear-gradient(160deg,#0b1122 0%,#0a0f1e 45%,#0b1424 100%);
transition:background .8s ease;
}
.glow{position:absolute;border-radius:50%;filter:blur(90px);pointer-events:none;transition:background .8s ease}
.g1{width:560px;height:560px;left:-140px;top:-160px;background:radial-gradient(circle,var(--accent) 0%,transparent 70%);opacity:.22}
.g2{width:640px;height:640px;right:-180px;bottom:-220px;background:radial-gradient(circle,var(--accent-2) 0%,transparent 70%);opacity:.14}
.card{
position:relative;width:880px;max-width:94vw;border-radius:32px;padding:46px 52px 42px;
background:linear-gradient(165deg,rgba(255,255,255,.09),rgba(255,255,255,.028) 55%);
border:1px solid var(--card-line);
backdrop-filter:blur(28px);-webkit-backdrop-filter:blur(28px);
box-shadow:0 40px 90px rgba(2,6,20,.55),inset 0 1px 0 rgba(255,255,255,.09);
}
.hidden{display:none !important}
.reveal{animation:rise .6s cubic-bezier(.2,.7,.2,1) both}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
header{display:flex;justify-content:space-between;align-items:flex-start;gap:24px}
.loc{display:flex;gap:14px;align-items:flex-start}
.loc .pin{width:22px;height:22px;margin-top:5px;color:var(--accent);flex:none}
.loc h1{font-size:26px;font-weight:650;letter-spacing:-.01em;line-height:1.15}
.coords{margin-top:5px;font-size:13px;color:var(--ink-3);letter-spacing:.02em;font-variant-numeric:tabular-nums}
.date-block{text-align:right}
.badge{
display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:650;letter-spacing:.14em;text-transform:uppercase;
color:var(--accent);border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);
padding:5px 11px;border-radius:999px;background:color-mix(in srgb, var(--accent) 10%, transparent);
margin-bottom:10px;
}
.badge .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent)}
.date-str{font-size:16px;font-weight:550;color:var(--ink-2)}
.hero{display:flex;align-items:center;gap:34px;margin:34px 0 8px}
.hero-icon{width:104px;height:104px;flex:none;display:flex;align-items:center;justify-content:center}
.hero-main{flex:1;min-width:0}
.cond{font-size:30px;font-weight:680;letter-spacing:-.015em;line-height:1.1}
.cond-sub{margin-top:7px;font-size:13.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.tiles{display:flex;gap:14px}
.tile{
min-width:132px;padding:15px 22px 13px;border-radius:20px;text-align:left;
background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.03));
border:1px solid rgba(255,255,255,.1);
}
.tile .lbl{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3)}
.tile .lbl svg{width:13px;height:13px}
.tile.hi .lbl svg{color:#f9a8a8}
.tile.lo .lbl svg{color:#9cc8fa}
.tile .val{display:block;margin-top:6px;font-size:44px;font-weight:250;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}
.tile .val sup{font-size:18px;font-weight:400;color:var(--ink-3);letter-spacing:0}
.divider{height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent);margin:30px 0 24px}
.sec-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}
.sec-head h2{font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-3)}
.sec-head span{font-size:12px;color:var(--ink-3);letter-spacing:.04em;font-variant-numeric:tabular-nums}
.chart-wrap{position:relative;cursor:crosshair}
.chart-wrap svg{display:block;overflow:visible}
.tooltip{
position:absolute;top:0;left:0;transform:translate(-50%,-130%);pointer-events:none;opacity:0;
background:rgba(8,13,28,.92);border:1px solid rgba(255,255,255,.14);border-radius:11px;
padding:7px 12px;font-size:12.5px;white-space:nowrap;transition:opacity .15s ease;
box-shadow:0 10px 26px rgba(0,0,0,.45);font-variant-numeric:tabular-nums;
}
.tooltip b{color:var(--accent);font-weight:650}
.loading{display:flex;flex-direction:column;align-items:center;gap:18px;padding:64px 0 48px}
.loading p{color:var(--ink-3);font-size:14px;letter-spacing:.04em}
.spin{
width:34px;height:34px;border-radius:50%;
border:3px solid rgba(255,255,255,.12);border-top-color:var(--accent);
animation:spin 0.9s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}
.error-box{
margin-top:34px;padding:30px 32px;border-radius:20px;text-align:center;
background:rgba(255,120,120,.06);border:1px solid rgba(255,140,140,.22);
}
.error-box .eicon{width:34px;height:34px;color:#fca5a5;margin:0 auto 14px;display:block}
.error-box h3{font-size:19px;font-weight:650}
.error-box p{margin-top:8px;font-size:13.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.retry{
margin-top:18px;font:inherit;font-size:13.5px;font-weight:600;color:var(--ink);
background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);border-radius:12px;
padding:9px 22px;cursor:pointer;transition:background .2s ease;
}
.retry:hover{background:rgba(255,255,255,.15)}
</style>
</head>
<body>
<div class="scene">
<div class="glow g1"></div>
<div class="glow g2"></div>
<main class="card">
<header>
<div class="loc">
<svg class="pin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"/><circle cx="12" cy="10" r="3"/></svg>
<div>
<h1 id="locName">—</h1>
<div class="coords" id="coords"></div>
</div>
</div>
<div class="date-block">
<span class="badge"><span class="dot"></span><span id="srcBadge">Loading</span></span>
<div class="date-str" id="dateStr"></div>
</div>
</header>
<div id="loading" class="loading">
<div class="spin"></div>
<p>Fetching weather…</p>
</div>
<section id="summary" class="hidden">
<div class="hero">
<div class="hero-icon" id="wxIcon"></div>
<div class="hero-main">
<div class="cond" id="condTxt"></div>
<div class="cond-sub" id="condSub"></div>
</div>
<div class="tiles">
<div class="tile hi">
<span class="lbl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5M5 12l7-7 7 7"/></svg>High</span>
<span class="val"><span id="tMax">—</span><sup>°C</sup></span>
</div>
<div class="tile lo">
<span class="lbl"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5v14M19 12l-7 7-7-7"/></svg>Low</span>
<span class="val"><span id="tMin">—</span><sup>°C</sup></span>
</div>
</div>
</div>
<div class="divider"></div>
<div class="sec-head">
<h2>Hourly temperature</h2>
<span id="chartMeta"></span>
</div>
<div class="chart-wrap" id="chartWrap">
<div class="tooltip" id="tip"></div>
</div>
</section>
<div id="errorBox" class="error-box hidden">
<svg class="eicon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4M12 17h.01"/></svg>
<h3>Weather data could not be loaded</h3>
<p id="errDetail">Something went wrong.</p>
<button class="retry" id="retryBtn">Try again</button>
</div>
</main>
</div>
<script>
(function(){
const $ = id => document.getElementById(id);
const params = new URLSearchParams(location.search);
const num = (v,d) => { const n = parseFloat(v); return Number.isFinite(n) ? n : d; };
const lat = num(params.get('lat'), 52.52);
const lon = num(params.get('lon'), 13.405);
const name = params.get('name') || 'Berlin';
const today = new Date().toISOString().slice(0,10);
let date = params.get('date');
if(!/^\d{4}-\d{2}-\d{2}$/.test(date || '')) date = today;
const isPast = date < today;
$('locName').textContent = name;
document.title = name + ' · ' + date + ' — Weather';
$('coords').textContent =
Math.abs(lat).toFixed(3) + '° ' + (lat >= 0 ? 'N' : 'S') + ', ' +
Math.abs(lon).toFixed(3) + '° ' + (lon >= 0 ? 'E' : 'W');
$('dateStr').textContent = new Date(date + 'T00:00:00Z')
.toLocaleDateString('en-GB', {weekday:'long', day:'numeric', month:'long', year:'numeric', timeZone:'UTC'});
const WX = {
0:['Clear sky','clear'], 1:['Mainly clear','clear'], 2:['Partly cloudy','partly'], 3:['Overcast','cloud'],
45:['Fog','fog'], 48:['Rime fog','fog'],
51:['Light drizzle','drizzle'], 53:['Drizzle','drizzle'], 55:['Dense drizzle','drizzle'],
56:['Freezing drizzle','drizzle'], 57:['Freezing drizzle','drizzle'],
61:['Light rain','rain'], 63:['Rain','rain'], 65:['Heavy rain','rain'],
66:['Freezing rain','rain'], 67:['Freezing rain','rain'],
71:['Light snowfall','snow'], 73:['Snowfall','snow'], 75:['Heavy snowfall','snow'], 77:['Snow grains','snow'],
80:['Light showers','rain'], 81:['Rain showers','rain'], 82:['Violent showers','rain'],
85:['Snow showers','snow'], 86:['Snow showers','snow'],
95:['Thunderstorm','storm'], 96:['Thunderstorm, hail','storm'], 99:['Thunderstorm, hail','storm']
};
const THEME = {
clear:{a:'#fbbf24',b:'#fde68a'}, partly:{a:'#fcd34d',b:'#fef3c7'}, cloud:{a:'#94a3b8',b:'#cbd5e1'},
fog:{a:'#9aa7bd',b:'#cbd5e1'}, drizzle:{a:'#38bdf8',b:'#7dd3fc'}, rain:{a:'#3b82f6',b:'#60a5fa'},
snow:{a:'#a5f3fc',b:'#e0f2fe'}, storm:{a:'#a78bfa',b:'#c4b5fd'}
};
const CLOUD_CLOSED = 'M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z';
const CLOUD_OPEN = 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242';
const W = '#e9eff9';
function icon(group, a){
const open = (inner) =>
`<svg viewBox="0 0 24 24" fill="none" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">` +
`<path stroke="${W}" d="${CLOUD_OPEN}"/>` + inner + `</svg>`;
const rays = `<path stroke="${a}" d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/>`;
switch(group){
case 'clear': return `<svg viewBox="0 0 24 24" fill="none" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4" stroke="${a}"/>${rays}</svg>`;
case 'partly': return `<svg viewBox="0 0 24 24" fill="none" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path stroke="${a}" d="M12 2v2M4.93 4.93l1.41 1.41M20 12h2M19.07 4.93l-1.41 1.41"/><path stroke="${a}" d="M15.95 12.65a4 4 0 0 0-5.93-4.13"/><path stroke="${W}" d="M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"/></svg>`;
case 'cloud': return `<svg viewBox="0 0 24 24" fill="none" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(5 -4) scale(.5)"><path stroke="#b9c6da" d="${CLOUD_CLOSED}"/></g><path stroke="${W}" d="${CLOUD_CLOSED}"/></svg>`;
case 'fog': return `<svg viewBox="0 0 24 24" fill="none" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path stroke="${W}" d="${CLOUD_CLOSED}" transform="translate(0 -2.5)"/><path stroke="${a}" d="M5 19.5h14M8 22.5h8"/></svg>`;
case 'drizzle': return open(`<path stroke="${a}" d="M8 19v1M8 14v1M16 19v1M16 14v1M12 21v1M12 16v1"/>`);
case 'rain': return open(`<path stroke="${a}" d="M16 14v6M8 14v6M12 16v6"/>`);
case 'snow': return open(`<path stroke="${a}" stroke-width="2.6" d="M8 15h.01M8 19h.01M12 17h.01M12 21h.01M16 15h.01M16 19h.01"/>`);
case 'storm': return `<svg viewBox="0 0 24 24" fill="none" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path stroke="${W}" d="${CLOUD_CLOSED}" transform="translate(0 -2)"/><path stroke="${a}" d="M13 11.5 9 17.5h5l-3.5 5.5"/></svg>`;
}
return open('');
}
function setTheme(group){
const t = THEME[group] || THEME.cloud;
document.documentElement.style.setProperty('--accent', t.a);
document.documentElement.style.setProperty('--accent-2', t.b);
}
const state = {times:[], temps:[]};
let hoverBind = null;
function buildChart(times, temps){
const wrap = $('chartWrap');
const old = wrap.querySelector('svg');
if(old) old.remove();
const Wp = Math.max(wrap.clientWidth, 320), H = 250;
const padL = 10, padR = 10, padT = 38, padB = 36;
const vals = temps.filter(v => v != null);
if(!vals.length) return;
const lo = Math.min(...vals), hi = Math.max(...vals);
const span = Math.max(hi - lo, 4);
const y0 = lo - span * .2, y1 = hi + span * .2;
const X = i => padL + (Wp - padL - padR) * (times.length > 1 ? i / (times.length - 1) : 0);
const Y = v => padT + (H - padT - padB) * (1 - (v - y0) / (y1 - y0));
const pts = [];
temps.forEach((v,i) => { if(v != null) pts.push({x:X(i), y:Y(v), v, h:times[i].slice(11,16)}); });
const t = THEME[curGroup] || THEME.cloud;
let line = '';
if(pts.length > 1){
line = `M ${pts[0].x.toFixed(1)} ${pts[0].y.toFixed(1)}`;
for(let i = 0; i < pts.length - 1; i++){
const p0 = pts[Math.max(0, i-1)], p1 = pts[i], p2 = pts[i+1], p3 = pts[Math.min(pts.length-1, i+2)];
const c1x = p1.x + (p2.x - p0.x)/6, c1y = p1.y + (p2.y - p0.y)/6;
const c2x = p2.x - (p3.x - p1.x)/6, c2y = p2.y - (p3.y - p1.y)/6;
line += ` C ${c1x.toFixed(1)} ${c1y.toFixed(1)} ${c2x.toFixed(1)} ${c2y.toFixed(1)} ${p2.x.toFixed(1)} ${p2.y.toFixed(1)}`;
}
}
const area = line
? line + ` L ${pts[pts.length-1].x.toFixed(1)} ${H-padB+4} L ${pts[0].x.toFixed(1)} ${H-padB+4} Z`
: '';
let s = `<svg width="${Wp}" height="${H}" viewBox="0 0 ${Wp} ${H}">`;
s += `<defs>
<linearGradient id="lg" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="${t.a}"/><stop offset="1" stop-color="${t.b}"/></linearGradient>
<linearGradient id="ag" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="${t.a}" stop-opacity=".30"/><stop offset="1" stop-color="${t.a}" stop-opacity="0"/></linearGradient>
</defs>`;
for(let g = 0; g <= 4; g++){
const gy = padT + (H - padT - padB) * g / 4;
s += `<line x1="${padL}" x2="${Wp-padR}" y1="${gy.toFixed(1)}" y2="${gy.toFixed(1)}" stroke="rgba(255,255,255,.07)"/>`;
}
if(area) s += `<path d="${area}" fill="url(#ag)"/>`;
if(line) s += `<path d="${line}" fill="none" stroke="url(#lg)" stroke-width="2.6" stroke-linecap="round" style="filter:drop-shadow(0 6px 10px ${t.a}44)"/>`;
temps.forEach((v,i) => {
if(v == null) return;
if(i % 3 === 0) s += `<text x="${X(i).toFixed(1)}" y="${(Y(v)-13).toFixed(1)}" text-anchor="middle" font-size="11.5" font-weight="650" fill="rgba(255,255,255,.92)" font-family="inherit">${Math.round(v)}°</text>`;
if(i % 3 === 0) s += `<text x="${X(i).toFixed(1)}" y="${H-9}" text-anchor="middle" font-size="11" fill="rgba(255,255,255,.42)" font-family="inherit">${times[i].slice(11,13)}</text>`;
});
pts.forEach(p => { s += `<circle cx="${p.x.toFixed(1)}" cy="${p.y.toFixed(1)}" r="2.2" fill="rgba(255,255,255,.88)"/>`; });
s += `<g id="guide" visibility="hidden"><line id="gLine" y1="${padT-14}" y2="${H-padB+6}" stroke="rgba(255,255,255,.28)" stroke-dasharray="3 4"/><circle id="gDot" r="4.6" fill="${t.a}" stroke="#fff" stroke-width="2"/></g>`;
s += `</svg>`;
wrap.insertAdjacentHTML('beforeend', s);
const svg = wrap.querySelector('svg');
const guide = svg.querySelector('#guide'), gLine = svg.querySelector('#gLine'), gDot = svg.querySelector('#gDot');
const tip = $('tip');
svg.addEventListener('mousemove', e => {
const r = svg.getBoundingClientRect();
const x = e.clientX - r.left;
let best = 0, bd = Infinity;
pts.forEach((p,i) => { const d = Math.abs(p.x - x); if(d < bd){ bd = d; best = i; } });
const p = pts[best];
guide.setAttribute('visibility','visible');
gLine.setAttribute('x1', p.x); gLine.setAttribute('x2', p.x);
gDot.setAttribute('cx', p.x); gDot.setAttribute('cy', p.y);
tip.innerHTML = p.h + ' UTC — <b>' + p.v.toFixed(1) + '°C</b>';
tip.style.left = Math.min(Math.max(p.x, 52), Wp - 52) + 'px';
tip.style.top = Math.max(p.y, 40) + 'px';
tip.style.opacity = 1;
});
svg.addEventListener('mouseleave', () => {
guide.setAttribute('visibility','hidden');
tip.style.opacity = 0;
});
$('chartMeta').textContent = 'min ' + lo.toFixed(1) + '° · max ' + hi.toFixed(1) + '° · times in UTC';
}
let curGroup = 'cloud';
async function load(){
$('loading').classList.remove('hidden');
$('summary').classList.add('hidden');
$('errorBox').classList.add('hidden');
$('srcBadge').textContent = 'Loading';
try{
const qs = new URLSearchParams({
latitude: String(lat),
longitude: String(lon),
daily: 'temperature_2m_max,temperature_2m_min,weather_code',
hourly: 'temperature_2m',
timezone: 'UTC',
temperature_unit: 'celsius',
start_date: date,
end_date: date
});
const endpoint = isPast ? '/api/om/archive' : '/api/om/forecast';
const res = await fetch(endpoint + '?' + qs.toString());
if(!res.ok) throw new Error('The ' + (isPast ? 'archive' : 'forecast') + ' API answered HTTP ' + res.status + ' for ' + date + '.');
const data = await res.json();
const d = data.daily || {}, h = data.hourly || {};
const max = d.temperature_2m_max && d.temperature_2m_max[0];
const min = d.temperature_2m_min && d.temperature_2m_min[0];
const code = d.weather_code && d.weather_code[0];
if(max == null || min == null || !Array.isArray(h.temperature_2m) || !h.time || !h.time.length){
throw new Error('The API response did not contain complete data for this date.');
}
const wx = WX[code] || ['Unknown condition','cloud'];
curGroup = wx[1];
setTheme(curGroup);
$('srcBadge').textContent = isPast ? 'Historical · Archive' : (date === today ? 'Forecast · Today' : 'Forecast');
$('wxIcon').innerHTML = icon(curGroup, (THEME[curGroup] || THEME.cloud).a);
$('wxIcon').querySelectorAll('svg').forEach(s => { s.setAttribute('width','104'); s.setAttribute('height','104'); });
$('condTxt').textContent = wx[0];
const spread = Math.round((max - min) * 10) / 10;
$('condSub').textContent = 'WMO code ' + code + ' · daily range ' + spread + '° · ' + h.time.length + ' hourly values';
$('tMax').textContent = Math.round(max);
$('tMin').textContent = Math.round(min);
$('loading').classList.add('hidden');
$('summary').classList.remove('hidden');
$('summary').classList.remove('reveal'); void $('summary').offsetWidth;
$('summary').classList.add('reveal');
state.times = h.time; state.temps = h.temperature_2m;
buildChart(state.times, state.temps);
}catch(err){
$('loading').classList.add('hidden');
$('summary').classList.add('hidden');
$('errDetail').textContent = (err && err.message ? err.message : 'Unknown error.') + ' Endpoint: ' + (isPast ? '/api/om/archive' : '/api/om/forecast') + ' · ' + date;
$('errorBox').classList.remove('hidden');
$('errorBox').classList.remove('reveal'); void $('errorBox').offsetWidth;
$('errorBox').classList.add('reveal');
$('srcBadge').textContent = 'Error';
setTheme('rain');
}
}
$('retryBtn').addEventListener('click', load);
let rto;
window.addEventListener('resize', () => {
clearTimeout(rto);
rto = setTimeout(() => { if(state.times.length) buildChart(state.times, state.temps); }, 120);
});
load();
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 21,095 | html / css / js | 2,735 / 6,111 / 12,249 |
|---|---|---|---|
| dom 节点 | 61 | dom 深度 | 10 |
| css 规则 | 55 | 含 js | 是 |
| brightness | 29.1 | contrast | 15.3 |
| colorfulness | 18.4 | 留白 | 84.4% |
该 slot 的 telemetry
| prompt tokens | 0 | completion tokens | 0 |
|---|---|---|---|
| total tokens | 0 | wall | 257.7 s |
| cost | — | request id | — |
config.json559 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_OPENCODE_KEY",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "glm-5.3--cli--opencode--dev",
"effort": null,
"family": "glm",
"m": {
"min": 2,
"q": 1
},
"model_id": "glm-5.3",
"protocol": "cli",
"served_model": "glm-5.3",
"telemetry": {
"completion_tokens": null,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 1083214
},
"transport": "opencode-cli-isolated-xdg-go-subscription",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-22--opencode-cli-new",
"config_id": "glm-5.3--cli--opencode--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-21T14:23:35.481185+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-21T14:17:53.335049+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-08-21T14:25:35.509340+00:00",
"http_status": null,
"outcome": "infra-failed",
"reached_model": true,
"reason": "mid-stream-death",
"request_id": null,
"started_at": "2026-08-21T14:23:41.022446+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "infra-failed",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-21T14:29:53.183506+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-21T14:25:35.510183+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-08-21T14:38:00.130096+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-21T14:29:56.725644+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"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
}
}
}