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

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居本 session 没有 similarity 数据 —— 这个 batch 没有计算 pairs。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempambiguousinsufficient-distinct-temperature-nodes
- min tempambiguousinsufficient-distinct-temperature-nodes
- 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 Card</title>
<style>
:root {
--bg1: #0f1b2d;
--bg2: #1b3a5c;
--card-bg: rgba(255,255,255,0.07);
--card-border: rgba(255,255,255,0.14);
--text: #eaf2fb;
--text-dim: rgba(234,242,251,0.65);
--accent: #7fd0ff;
--accent-warm: #ffc46b;
}
* { margin:0; padding:0; box-sizing:border-box; }
html, body {
width:100%; height:100%;
font-family: "Avenir Next", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
color: var(--text);
}
body {
min-height:800px;
background:
radial-gradient(1100px 600px at 80% -10%, rgba(127,208,255,0.18), transparent 60%),
radial-gradient(900px 500px at 10% 110%, rgba(255,196,107,0.12), transparent 60%),
linear-gradient(160deg, var(--bg1), var(--bg2));
display:flex; align-items:center; justify-content:center;
padding:40px;
}
.card {
width: 880px;
background: var(--card-bg);
border: 1px solid var(--card-border);
border-radius: 24px;
backdrop-filter: blur(18px);
-webkit-backdrop-filter: blur(18px);
box-shadow: 0 30px 60px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.08);
padding: 40px 48px 36px;
position:relative;
overflow:hidden;
}
.card::before {
content:"";
position:absolute; inset:0;
background: radial-gradient(600px 240px at 85% 0%, rgba(127,208,255,0.10), transparent 70%);
pointer-events:none;
}
.header {
display:flex; justify-content:space-between; align-items:flex-start;
margin-bottom: 28px;
}
.location { font-size: 34px; font-weight:600; letter-spacing: 0.3px; }
.date { margin-top:6px; font-size:15px; color: var(--text-dim); letter-spacing: 1.2px; text-transform: uppercase; }
.icon { font-size: 64px; line-height:1; filter: drop-shadow(0 6px 16px rgba(0,0,0,0.35)); }
.main {
display:flex; align-items:baseline; gap:28px;
margin-bottom: 8px;
}
.temp-max {
font-size: 88px; font-weight:200; line-height:1;
background: linear-gradient(180deg, #ffffff, #9fcdf0);
-webkit-background-clip: text; background-clip: text;
-webkit-text-fill-color: transparent;
}
.temp-minmax { display:flex; flex-direction:column; gap:6px; font-size:16px; }
.temp-minmax .row { display:flex; gap:8px; align-items:center; }
.temp-minmax .label { color:var(--text-dim); font-size:12px; letter-spacing:1.5px; text-transform:uppercase; width:36px; }
.temp-minmax .val { font-weight:600; font-size:20px; }
.condition {
font-size: 19px; color: var(--accent);
margin-bottom: 34px; font-weight:500; letter-spacing:0.4px;
}
.section-title {
font-size:12px; letter-spacing:2px; text-transform:uppercase;
color:var(--text-dim); margin-bottom:16px;
display:flex; align-items:center; gap:12px;
}
.section-title::after { content:""; flex:1; height:1px; background:linear-gradient(90deg, var(--card-border), transparent); }
.hourly {
display:flex; gap:4px; overflow-x:auto; padding-bottom:6px;
scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.25) transparent;
}
.hourly::-webkit-scrollbar { height:6px; }
.hourly::-webkit-scrollbar-thumb { background:rgba(255,255,255,0.2); border-radius:3px; }
.hour {
flex:0 0 auto;
display:flex; flex-direction:column; align-items:center; gap:10px;
padding:14px 10px 12px;
border-radius:14px;
min-width:62px;
transition: background 0.2s;
}
.hour:hover { background: rgba(255,255,255,0.06); }
.hour .h-time { font-size:12px; color:var(--text-dim); letter-spacing:0.5px; }
.hour .h-bar-wrap { height:70px; width:6px; background:rgba(255,255,255,0.08); border-radius:3px; display:flex; align-items:flex-end; }
.hour .h-bar { width:6px; border-radius:3px; background:linear-gradient(180deg, var(--accent-warm), var(--accent)); min-height:4px; }
.hour .h-temp { font-size:14px; font-weight:600; }
.status {
text-align:center; padding:70px 20px; font-size:20px; color:var(--text-dim);
}
.status.error { color:#ff9b9b; }
.spinner {
width:36px; height:36px; margin:0 auto 18px;
border:3px solid rgba(255,255,255,0.15); border-top-color:var(--accent);
border-radius:50%; animation:spin 0.9s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
</style>
</head>
<body>
<div class="card">
<div id="content">
<div class="status"><div class="spinner"></div>Loading weather…</div>
</div>
</div>
<script>
(function(){
const params = new URLSearchParams(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 todayUTC = new Date().toISOString().slice(0,10);
let date = params.get("date") || todayUTC;
if (!/^\d{4}-\d{2}-\d{2}$/.test(date)) date = todayUTC;
const WMO = {
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 snowfall","🌨️"],73:["Moderate snowfall","🌨️"],75:["Heavy snowfall","❄️"],
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 hail","⛈️"],99:["Thunderstorm with heavy hail","⛈️"]
};
function esc(s){ return String(s).replace(/[&<>"']/g, c => ({"&":"&","<":"<",">":">",'"':""","'":"'"}[c])); }
function fmtDate(d){
try {
return new Date(d + "T00:00:00Z").toLocaleDateString("en-US",
{ weekday:"long", year:"numeric", month:"long", day:"numeric", timeZone:"UTC" });
} catch(e){ return d; }
}
function showError(msg){
document.getElementById("content").innerHTML =
'<div class="status error">⚠️ ' + esc(msg) + '</div>';
}
const isPast = date < todayUTC;
const base = isPast ? "/api/om/archive" : "/api/om/forecast";
const qs = 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
});
fetch(base + "?" + qs.toString())
.then(r => { if(!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
.then(data => {
const daily = data.daily, hourly = data.hourly;
if (!daily || !daily.time || !daily.time.length) throw new Error("No data");
const tmax = daily.temperature_2m_max[0];
const tmin = daily.temperature_2m_min[0];
const code = daily.weather_code[0];
if (tmax == null || tmin == null) throw new Error("No data");
const [condText, icon] = WMO[code] || ["Unknown conditions","🌡️"];
let hoursHtml = "";
if (hourly && hourly.time && hourly.time.length) {
const temps = hourly.temperature_2m;
const valid = temps.filter(t => t != null);
const lo = Math.min(...valid), hi = Math.max(...valid);
const span = (hi - lo) || 1;
hoursHtml = hourly.time.map((t,i) => {
const temp = temps[i];
if (temp == null) return "";
const hh = t.slice(11,16);
const pct = Math.round(15 + 85 * (temp - lo) / span);
return '<div class="hour"><div class="h-time">' + esc(hh) + '</div>' +
'<div class="h-bar-wrap"><div class="h-bar" style="height:' + pct + '%"></div></div>' +
'<div class="h-temp">' + Math.round(temp) + '°</div></div>';
}).join("");
}
document.getElementById("content").innerHTML =
'<div class="header"><div>' +
'<div class="location">' + esc(name) + '</div>' +
'<div class="date">' + esc(fmtDate(date)) + '</div>' +
'</div><div class="icon">' + icon + '</div></div>' +
'<div class="main">' +
'<div class="temp-max">' + Math.round(tmax) + '°</div>' +
'<div class="temp-minmax">' +
'<div class="row"><span class="label">High</span><span class="val">' + Math.round(tmax) + '°C</span></div>' +
'<div class="row"><span class="label">Low</span><span class="val">' + Math.round(tmin) + '°C</span></div>' +
'</div>' +
'</div>' +
'<div class="condition">' + esc(condText) + '</div>' +
'<div class="section-title">Hourly temperature (UTC)</div>' +
(hoursHtml ? '<div class="hourly">' + hoursHtml + '</div>'
: '<div class="status">Hourly data unavailable.</div>');
})
.catch(err => {
showError("Weather data could not be loaded. " + (err && err.message ? err.message : ""));
});
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 9,282 | html / css / js | 348 / 4,217 / 4,717 |
|---|---|---|---|
| dom 节点 | 12 | dom 深度 | 6 |
| css 规则 | 33 | 含 js | 是 |
| brightness | 49.8 | contrast | 15.1 |
| colorfulness | 20.0 | 留白 | 70.4% |
该 slot 的 telemetry
| prompt tokens | 2 | completion tokens | 4,225 |
|---|---|---|---|
| total tokens | 4,227 | wall | 52 s |
| cost | — | request id | — |
config.json573 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-fable-5-eff-low--cli--cursor--dev",
"effort": "low",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-fable-5",
"protocol": "cli",
"served_model": "claude-fable-5-low",
"telemetry": {
"completion_tokens": 13801,
"cost_usd": null,
"prompt_tokens": 8,
"total_tokens": 13809,
"wall_ms": 172063
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-s1",
"config_id": "claude-fable-5-eff-low--cli--cursor--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T18:11:28.281454+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T18:10:51.205302+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-12T18:12:23.908034+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T18:11:31.935451+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-12T18:13:13.618798+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T18:12:27.496781+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-12T18:13:53.867359+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T18:13:16.969268+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
}
}
}