claude-opus-4-7 @ medium · cursor
cursormedium
- config
- claude-opus-4-7-eff-medium--cli--cursor--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- claude-opus-4-7-medium
- 采集于
- 2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居
最近
claude-opus-4-7 @high · cursor-xl0.73claude-opus-4-7 @high · cursor0.73claude-opus-4-7-thinking @low · cursor0.72claude-opus-4-7 @low · kiro0.72claude-opus-4-7 @medium · kiro0.72最远
north-mini-code-free · api0.51qwen3.5-plus · go0.53cursor-grok-4.5 @high · cursor-xl0.54claude-fable-5-1 @max · CC0.54claude-sonnet-4-thinking · cursor0.54限于 session 2026-07-19--unified
similarity 衡量本 session 内的趋同程度 —— 不是质量。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempmatch展示值:25.3
- min tempmatch展示值:16
- 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" />
<meta name="viewport" content="width=1280, initial-scale=1" />
<title>Weather</title>
<style>
:root {
--bg-0: #0b1020;
--bg-1: #131a35;
--card: rgba(255, 255, 255, 0.08);
--card-strong: rgba(255, 255, 255, 0.14);
--stroke: rgba(255, 255, 255, 0.12);
--stroke-strong: rgba(255, 255, 255, 0.22);
--text: #f4f6fb;
--muted: #a9b3cf;
--accent: #ffd166;
--accent-2: #6ec7ff;
--danger: #ff6b6b;
--shadow: 0 30px 80px rgba(0, 0, 0, 0.45), 0 8px 24px rgba(0, 0, 0, 0.25);
}
* { box-sizing: border-box; }
html, body { height: 100%; }
body {
margin: 0;
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: var(--text);
background:
radial-gradient(1200px 700px at 15% -10%, #2a3b7a 0%, transparent 60%),
radial-gradient(900px 600px at 110% 10%, #6a3d9c 0%, transparent 55%),
radial-gradient(800px 500px at 50% 120%, #1c4b8a 0%, transparent 60%),
linear-gradient(180deg, var(--bg-0) 0%, var(--bg-1) 100%);
background-attachment: fixed;
min-height: 100vh;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
overflow-x: hidden;
}
.stage {
width: 1280px;
min-height: 800px;
margin: 0 auto;
padding: 56px 56px 56px 56px;
display: flex;
align-items: stretch;
justify-content: center;
}
.card {
position: relative;
width: 100%;
border-radius: 28px;
background:
linear-gradient(180deg, rgba(255,255,255,0.10) 0%, rgba(255,255,255,0.04) 100%);
border: 1px solid var(--stroke);
box-shadow: var(--shadow);
backdrop-filter: blur(18px) saturate(140%);
-webkit-backdrop-filter: blur(18px) saturate(140%);
overflow: hidden;
}
.card::before {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(600px 260px at 85% -10%, rgba(255, 209, 102, 0.18), transparent 60%),
radial-gradient(500px 220px at -10% 110%, rgba(110, 199, 255, 0.20), transparent 60%);
pointer-events: none;
}
.inner {
position: relative;
display: grid;
grid-template-columns: 1.05fr 1fr;
gap: 0;
min-height: 688px;
}
/* LEFT PANEL */
.left {
padding: 44px 40px 40px 44px;
display: flex;
flex-direction: column;
gap: 28px;
border-right: 1px solid var(--stroke);
}
.brand {
display: flex;
align-items: center;
justify-content: space-between;
}
.brand .logo {
display: flex;
align-items: center;
gap: 10px;
color: var(--muted);
font-size: 13px;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.brand .logo .dot {
width: 8px; height: 8px; border-radius: 50%;
background: var(--accent);
box-shadow: 0 0 12px rgba(255,209,102,0.7);
}
.brand .date-chip {
font-size: 13px;
color: var(--muted);
padding: 6px 12px;
border-radius: 999px;
background: rgba(255,255,255,0.06);
border: 1px solid var(--stroke);
}
.location {
display: flex;
flex-direction: column;
gap: 6px;
}
.location .name {
font-size: 44px;
font-weight: 700;
line-height: 1.05;
letter-spacing: -0.02em;
}
.location .sub {
color: var(--muted);
font-size: 15px;
}
.hero {
display: grid;
grid-template-columns: 140px 1fr;
gap: 24px;
align-items: center;
padding: 8px 0 4px 0;
}
.icon-wrap {
width: 140px; height: 140px;
display: flex; align-items: center; justify-content: center;
background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.18), rgba(255,255,255,0.02) 65%);
border-radius: 32px;
border: 1px solid var(--stroke);
}
.icon-wrap svg { width: 108px; height: 108px; display: block; }
.hero .now {
display: flex; flex-direction: column; gap: 6px;
}
.condition {
font-size: 22px;
font-weight: 600;
letter-spacing: -0.005em;
}
.temp-big {
font-size: 96px;
font-weight: 700;
line-height: 1;
letter-spacing: -0.04em;
display: flex; align-items: flex-start; gap: 4px;
}
.temp-big .unit {
font-size: 30px;
color: var(--muted);
margin-top: 14px;
font-weight: 500;
}
.stats {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
margin-top: 4px;
}
.stat {
padding: 16px 18px;
border-radius: 16px;
background: var(--card);
border: 1px solid var(--stroke);
display: flex; align-items: center; gap: 14px;
}
.stat .swatch {
width: 36px; height: 36px; border-radius: 10px;
display: flex; align-items: center; justify-content: center;
background: rgba(255,255,255,0.06);
border: 1px solid var(--stroke);
}
.stat .swatch svg { width: 20px; height: 20px; }
.stat .label { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.12em; }
.stat .value { font-size: 22px; font-weight: 700; letter-spacing: -0.01em; }
.footer-note {
margin-top: auto;
font-size: 12px;
color: var(--muted);
display: flex; align-items: center; gap: 8px;
}
/* RIGHT PANEL */
.right {
padding: 40px 44px 40px 40px;
display: flex;
flex-direction: column;
gap: 20px;
}
.section-head {
display: flex; align-items: baseline; justify-content: space-between;
}
.section-head h2 {
margin: 0;
font-size: 15px;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--muted);
font-weight: 600;
}
.legend {
font-size: 12px;
color: var(--muted);
}
.legend b { color: var(--text); font-weight: 600; }
.chart-wrap {
position: relative;
background: var(--card);
border: 1px solid var(--stroke);
border-radius: 20px;
padding: 18px 18px 12px 18px;
}
.chart-wrap svg { display: block; width: 100%; height: 240px; }
.hours {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 8px;
}
.hour {
padding: 12px 6px;
background: var(--card);
border: 1px solid var(--stroke);
border-radius: 14px;
text-align: center;
display: flex; flex-direction: column; align-items: center; gap: 6px;
}
.hour .h { font-size: 11px; color: var(--muted); letter-spacing: 0.06em; }
.hour .t { font-size: 15px; font-weight: 700; letter-spacing: -0.01em; }
.hour .bar {
width: 6px; height: 26px; border-radius: 3px;
background: linear-gradient(180deg, var(--accent), var(--accent-2));
opacity: 0.85;
}
.error {
padding: 22px 24px;
border-radius: 16px;
background: rgba(255, 107, 107, 0.10);
border: 1px solid rgba(255, 107, 107, 0.35);
color: #ffd7d7;
display: flex; align-items: center; gap: 14px;
font-size: 15px;
}
.error .badge {
width: 36px; height: 36px; border-radius: 10px;
background: rgba(255,107,107,0.18);
display: flex; align-items: center; justify-content: center;
border: 1px solid rgba(255,107,107,0.4);
}
.skeleton {
background: linear-gradient(90deg, rgba(255,255,255,0.06), rgba(255,255,255,0.14), rgba(255,255,255,0.06));
background-size: 200% 100%;
animation: shimmer 1.4s ease-in-out infinite;
border-radius: 8px;
color: transparent !important;
}
@keyframes shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
</style>
</head>
<body>
<div class="stage">
<div class="card">
<div class="inner">
<!-- LEFT PANEL -->
<div class="left">
<div class="brand">
<div class="logo"><span class="dot"></span><span>Meteogram</span></div>
<div class="date-chip" id="dateChip">—</div>
</div>
<div class="location">
<div class="name" id="locName">—</div>
<div class="sub" id="locSub">—</div>
</div>
<div class="hero">
<div class="icon-wrap" id="iconWrap">
<!-- weather icon injected here -->
</div>
<div class="now">
<div class="condition" id="condition">—</div>
<div class="temp-big"><span id="tempMain">—</span><span class="unit">°C</span></div>
</div>
</div>
<div class="stats">
<div class="stat">
<div class="swatch">
<svg viewBox="0 0 24 24" fill="none" stroke="#ffd166" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v10"/><circle cx="12" cy="17" r="4"/></svg>
</div>
<div>
<div class="label">High</div>
<div class="value" id="tempMax">—</div>
</div>
</div>
<div class="stat">
<div class="swatch">
<svg viewBox="0 0 24 24" fill="none" stroke="#6ec7ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21V11"/><circle cx="12" cy="7" r="4"/></svg>
</div>
<div>
<div class="label">Low</div>
<div class="value" id="tempMin">—</div>
</div>
</div>
</div>
<div class="footer-note">
<span>Data: Open-Meteo · Times shown in UTC</span>
</div>
</div>
<!-- RIGHT PANEL -->
<div class="right">
<div class="section-head">
<h2>Hourly Temperature</h2>
<div class="legend" id="legend">—</div>
</div>
<div class="chart-wrap">
<svg id="chart" viewBox="0 0 720 240" preserveAspectRatio="none"></svg>
</div>
<div class="section-head" style="margin-top:6px;">
<h2>By Hour</h2>
<div class="legend">Every 2h · UTC</div>
</div>
<div class="hours" id="hours"></div>
<div id="errorSlot"></div>
</div>
</div>
</div>
</div>
<script>
(function () {
const $ = (id) => document.getElementById(id);
const params = new URLSearchParams(location.search);
const lat = parseFloat(params.get("lat"));
const lon = parseFloat(params.get("lon"));
const name = params.get("name") || "Berlin";
const dateParam = params.get("date");
const latitude = Number.isFinite(lat) ? lat : 52.52;
const longitude = Number.isFinite(lon) ? lon : 13.405;
function todayUTC() {
const d = new Date();
const y = d.getUTCFullYear();
const m = String(d.getUTCMonth() + 1).padStart(2, "0");
const day = String(d.getUTCDate()).padStart(2, "0");
return `${y}-${m}-${day}`;
}
const today = todayUTC();
const date = /^\d{4}-\d{2}-\d{2}$/.test(dateParam || "") ? dateParam : today;
const isPast = date < today;
const endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";
const WMO = {
0: { label: "Clear sky", icon: "sun" },
1: { label: "Mainly clear", icon: "sun-cloud" },
2: { label: "Partly cloudy", icon: "sun-cloud" },
3: { label: "Overcast", icon: "cloud" },
45: { label: "Fog", icon: "fog" },
48: { label: "Rime fog", icon: "fog" },
51: { label: "Light drizzle", icon: "drizzle" },
53: { label: "Drizzle", icon: "drizzle" },
55: { label: "Dense drizzle", icon: "drizzle" },
56: { label: "Freezing drizzle", icon: "drizzle" },
57: { label: "Freezing drizzle", icon: "drizzle" },
61: { label: "Light rain", icon: "rain" },
63: { label: "Rain", icon: "rain" },
65: { label: "Heavy rain", icon: "rain" },
66: { label: "Freezing rain", icon: "rain" },
67: { label: "Freezing rain", icon: "rain" },
71: { label: "Light snow", icon: "snow" },
73: { label: "Snow", icon: "snow" },
75: { label: "Heavy snow", icon: "snow" },
77: { label: "Snow grains", icon: "snow" },
80: { label: "Rain showers", icon: "rain" },
81: { label: "Rain showers", icon: "rain" },
82: { label: "Violent showers", icon: "rain" },
85: { label: "Snow showers", icon: "snow" },
86: { label: "Snow showers", icon: "snow" },
95: { label: "Thunderstorm", icon: "storm" },
96: { label: "Thunderstorm w/ hail", icon: "storm" },
99: { label: "Thunderstorm w/ hail", icon: "storm" }
};
function iconSVG(kind) {
const sun = `<circle cx="36" cy="36" r="16" fill="url(#sunGrad)"/>
<g stroke="#ffd166" stroke-width="3" stroke-linecap="round">
<line x1="36" y1="6" x2="36" y2="14"/>
<line x1="36" y1="58" x2="36" y2="66"/>
<line x1="6" y1="36" x2="14" y2="36"/>
<line x1="58" y1="36" x2="66" y2="36"/>
<line x1="14" y1="14" x2="20" y2="20"/>
<line x1="52" y1="52" x2="58" y2="58"/>
<line x1="14" y1="58" x2="20" y2="52"/>
<line x1="52" y1="20" x2="58" y2="14"/>
</g>`;
const cloud = `<path d="M22 68 C10 68 6 58 14 52 C12 40 26 34 34 42 C40 32 58 34 60 46 C72 46 74 62 62 68 Z"
fill="url(#cloudGrad)" stroke="rgba(255,255,255,0.35)" stroke-width="1.5"/>`;
const sunCloud = `
<circle cx="60" cy="26" r="12" fill="url(#sunGrad)"/>
<g stroke="#ffd166" stroke-width="2" stroke-linecap="round">
<line x1="60" y1="6" x2="60" y2="10"/>
<line x1="80" y1="26" x2="84" y2="26"/>
<line x1="46" y1="12" x2="50" y2="16"/>
<line x1="74" y1="12" x2="70" y2="16"/>
</g>
<path d="M18 74 C6 74 4 62 14 58 C12 46 28 42 34 50 C40 42 58 44 60 56 C72 56 74 74 62 74 Z"
fill="url(#cloudGrad)" stroke="rgba(255,255,255,0.35)" stroke-width="1.5"/>`;
const drops = `
<g fill="#6ec7ff">
<path d="M28 78 q-3 6 0 8 q3 -2 0 -8z"/>
<path d="M40 82 q-3 6 0 8 q3 -2 0 -8z"/>
<path d="M52 78 q-3 6 0 8 q3 -2 0 -8z"/>
</g>`;
const rain = cloud + drops;
const drizzle = cloud + `
<g stroke="#6ec7ff" stroke-width="2" stroke-linecap="round">
<line x1="26" y1="76" x2="24" y2="84"/>
<line x1="38" y1="76" x2="36" y2="84"/>
<line x1="50" y1="76" x2="48" y2="84"/>
</g>`;
const snow = cloud + `
<g fill="#e8f2ff">
<circle cx="26" cy="80" r="2.2"/>
<circle cx="40" cy="84" r="2.2"/>
<circle cx="54" cy="80" r="2.2"/>
</g>`;
const fog = cloud + `
<g stroke="#cfd6e6" stroke-width="3" stroke-linecap="round">
<line x1="14" y1="80" x2="60" y2="80"/>
<line x1="20" y1="88" x2="66" y2="88"/>
</g>`;
const storm = cloud + `
<path d="M36 66 L30 82 L38 82 L32 96 L48 76 L40 76 L46 66 Z" fill="#ffd166" stroke="#f7b500" stroke-width="1"/>`;
const map = { sun, cloud, "sun-cloud": sunCloud, rain, drizzle, snow, fog, storm };
const inner = map[kind] || sunCloud;
return `
<svg viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="sunGrad" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#ffe29a"/>
<stop offset="100%" stop-color="#ffb14a"/>
</linearGradient>
<linearGradient id="cloudGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#f5f8ff"/>
<stop offset="100%" stop-color="#bcc8e6"/>
</linearGradient>
</defs>
${inner}
</svg>`;
}
function fmtDateLong(iso) {
const [y, m, d] = iso.split("-").map(Number);
const dt = new Date(Date.UTC(y, m - 1, d));
return dt.toLocaleDateString("en-US", {
weekday: "long", year: "numeric", month: "long", day: "numeric", timeZone: "UTC"
});
}
function fmtDateShort(iso) {
const [y, m, d] = iso.split("-").map(Number);
const dt = new Date(Date.UTC(y, m - 1, d));
return dt.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: "UTC" });
}
function coordStr(v) {
const n = Number(v);
const abs = Math.abs(n).toFixed(3);
return `${abs}°`;
}
function showError(msg) {
$("errorSlot").innerHTML = `
<div class="error" role="alert">
<div class="badge">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ffb0b0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 9v4"/><path d="M12 17h.01"/><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/></svg>
</div>
<div><strong>Couldn't load weather data.</strong> ${msg}</div>
</div>`;
$("condition").textContent = "Data unavailable";
$("tempMain").textContent = "—";
$("tempMax").textContent = "—";
$("tempMin").textContent = "—";
$("legend").textContent = "—";
$("iconWrap").innerHTML = iconSVG("fog");
$("chart").innerHTML = "";
$("hours").innerHTML = "";
}
function renderChart(times, temps) {
const svg = $("chart");
const W = 720, H = 240;
const padL = 36, padR = 16, padT = 18, padB = 28;
const iw = W - padL - padR;
const ih = H - padT - padB;
const min = Math.min(...temps);
const max = Math.max(...temps);
const range = Math.max(1, max - min);
const yMin = min - range * 0.15;
const yMax = max + range * 0.15;
const xAt = (i) => padL + (i / (temps.length - 1)) * iw;
const yAt = (t) => padT + (1 - (t - yMin) / (yMax - yMin)) * ih;
const gridCount = 4;
let grid = "";
let ylabels = "";
for (let i = 0; i <= gridCount; i++) {
const y = padT + (i / gridCount) * ih;
const val = yMax - (i / gridCount) * (yMax - yMin);
grid += `<line x1="${padL}" y1="${y.toFixed(1)}" x2="${W - padR}" y2="${y.toFixed(1)}" stroke="rgba(255,255,255,0.08)" stroke-width="1"/>`;
ylabels += `<text x="${padL - 8}" y="${(y + 4).toFixed(1)}" text-anchor="end" fill="#a9b3cf" font-size="11" font-family="Inter, sans-serif">${val.toFixed(0)}°</text>`;
}
let xlabels = "";
const hoursToLabel = [0, 6, 12, 18];
hoursToLabel.forEach(h => {
if (h < temps.length) {
const x = xAt(h);
xlabels += `<text x="${x.toFixed(1)}" y="${H - 8}" text-anchor="middle" fill="#a9b3cf" font-size="11" font-family="Inter, sans-serif">${String(h).padStart(2,"0")}:00</text>`;
}
});
let pathD = "";
temps.forEach((t, i) => {
const x = xAt(i);
const y = yAt(t);
pathD += (i === 0 ? "M" : "L") + x.toFixed(2) + " " + y.toFixed(2) + " ";
});
const areaD = pathD + `L${xAt(temps.length - 1).toFixed(2)} ${(padT + ih).toFixed(2)} L${xAt(0).toFixed(2)} ${(padT + ih).toFixed(2)} Z`;
let dots = "";
const iMax = temps.indexOf(max);
const iMin = temps.indexOf(min);
[iMax, iMin].forEach(i => {
if (i < 0) return;
const x = xAt(i);
const y = yAt(temps[i]);
const color = i === iMax ? "#ffd166" : "#6ec7ff";
dots += `<circle cx="${x.toFixed(1)}" cy="${y.toFixed(1)}" r="4" fill="${color}" stroke="#0b1020" stroke-width="2"/>`;
dots += `<text x="${x.toFixed(1)}" y="${(y - 10).toFixed(1)}" text-anchor="middle" fill="${color}" font-size="12" font-weight="700" font-family="Inter, sans-serif">${temps[i].toFixed(1)}°</text>`;
});
svg.innerHTML = `
<defs>
<linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#6ec7ff"/>
<stop offset="100%" stop-color="#ffd166"/>
</linearGradient>
<linearGradient id="areaGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="rgba(255,209,102,0.35)"/>
<stop offset="100%" stop-color="rgba(110,199,255,0.02)"/>
</linearGradient>
</defs>
${grid}
${ylabels}
${xlabels}
<path d="${areaD}" fill="url(#areaGrad)"/>
<path d="${pathD}" fill="none" stroke="url(#lineGrad)" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round"/>
${dots}
`;
}
function renderHours(times, temps) {
const container = $("hours");
container.innerHTML = "";
const min = Math.min(...temps);
const max = Math.max(...temps);
const range = Math.max(1, max - min);
const step = 2;
for (let h = 0; h < 24; h += step) {
if (h >= temps.length) break;
const t = temps[h];
const heightPct = 0.3 + 0.7 * ((t - min) / range);
const el = document.createElement("div");
el.className = "hour";
el.innerHTML = `
<div class="h">${String(h).padStart(2, "0")}:00</div>
<div class="bar" style="height:${Math.round(10 + heightPct * 30)}px"></div>
<div class="t">${t.toFixed(1)}°</div>
`;
container.appendChild(el);
}
}
function initialRender() {
$("locName").textContent = name;
$("locSub").textContent = `${coordStr(latitude)} ${latitude >= 0 ? "N" : "S"} · ${coordStr(longitude)} ${longitude >= 0 ? "E" : "W"}`;
$("dateChip").textContent = fmtDateShort(date);
$("iconWrap").innerHTML = iconSVG("sun-cloud");
$("condition").textContent = "Loading…";
$("tempMain").textContent = "—";
$("tempMax").textContent = "—";
$("tempMin").textContent = "—";
$("legend").textContent = fmtDateLong(date);
}
async function load() {
initialRender();
const url = new URL(endpoint, location.origin);
url.searchParams.set("latitude", String(latitude));
url.searchParams.set("longitude", String(longitude));
url.searchParams.set("daily", "temperature_2m_max,temperature_2m_min,weather_code");
url.searchParams.set("hourly", "temperature_2m");
url.searchParams.set("timezone", "UTC");
url.searchParams.set("temperature_unit", "celsius");
url.searchParams.set("start_date", date);
url.searchParams.set("end_date", date);
let data;
try {
const res = await fetch(url.toString(), { headers: { "accept": "application/json" } });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
data = await res.json();
} catch (e) {
showError(String(e && e.message ? e.message : e));
return;
}
try {
const daily = data.daily || {};
const hourly = data.hourly || {};
const tMax = daily.temperature_2m_max && daily.temperature_2m_max[0];
const tMin = daily.temperature_2m_min && daily.temperature_2m_min[0];
const wcode = daily.weather_code && daily.weather_code[0];
const times = hourly.time || [];
const temps = (hourly.temperature_2m || []).map(Number);
if (temps.length === 0 || tMax == null || tMin == null) {
showError("The API returned no data for this date.");
return;
}
const info = WMO[wcode] || { label: "Unknown", icon: "cloud" };
$("iconWrap").innerHTML = iconSVG(info.icon);
$("condition").textContent = info.label;
const avg = temps.reduce((a, b) => a + b, 0) / temps.length;
$("tempMain").textContent = avg.toFixed(1);
$("tempMax").textContent = `${Number(tMax).toFixed(1)}°C`;
$("tempMin").textContent = `${Number(tMin).toFixed(1)}°C`;
$("legend").textContent = `${fmtDateLong(date)} · ${temps.length}h`;
renderChart(times, temps);
renderHours(times, temps);
} catch (e) {
showError("Unexpected response format.");
}
}
load();
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 23,184 | html / css / js | 2,769 / 7,247 / 13,168 |
|---|---|---|---|
| dom 节点 | 57 | dom 深度 | 10 |
| css 规则 | 48 | 含 js | 是 |
| brightness | 49.5 | contrast | 24.2 |
| colorfulness | 23.9 | 留白 | 66.6% |
该 slot 的 telemetry
| prompt tokens | 13 | completion tokens | 11,008 |
|---|---|---|---|
| total tokens | 11,021 | wall | 133.1 s |
| cost | — | request id | — |
config.json586 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-opus-4-7-eff-medium--cli--cursor--dev",
"effort": "medium",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-opus-4-7",
"protocol": "cli",
"served_model": "claude-opus-4-7-medium",
"telemetry": {
"completion_tokens": 34742,
"cost_usd": null,
"prompt_tokens": 39,
"total_tokens": 34781,
"wall_ms": 372455
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-s2",
"config_id": "claude-opus-4-7-eff-medium--cli--cursor--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T20:58:55.884700+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T20:56:42.827777+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-08-12T21:00:34.274684+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T20:58:59.317836+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-12T21:01:58.057890+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T21:00:37.499516+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-08-12T21:03:05.122610+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T21:02:01.231814+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}