claude-fable-5-1 @ low · CC
CClow
- config
- claude-fable-5-1-eff-low--cli--claude-code--dev
- batch
- 2026-07-19--unified
- transport
- claude-code-cli-headless
- protocol
- cli · plan
- served model
- claude-fable-5-1
- 采集于
- 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 tempambiguous展示值:17max-equals-min
- min tempambiguous展示值:17max-equals-min
- 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: #0b1020;
--card: rgba(255,255,255,0.06);
--card-border: rgba(255,255,255,0.12);
--text: #f4f6fb;
--muted: #9aa4bd;
--accent: #7cc4ff;
--warm: #ffb36b;
--cold: #7cc4ff;
--grid: rgba(255,255,255,0.08);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: radial-gradient(1200px 700px at 15% 0%, #1b2a55 0%, var(--bg) 55%),
radial-gradient(900px 500px at 100% 100%, #2a1b4a 0%, transparent 60%),
var(--bg);
color: var(--text);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
-webkit-font-smoothing: antialiased;
}
.card {
width: 1040px;
background: var(--card);
border: 1px solid var(--card-border);
border-radius: 28px;
backdrop-filter: blur(20px);
box-shadow: 0 30px 80px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.08);
padding: 44px 48px 40px;
display: grid;
grid-template-columns: 340px 1fr;
gap: 40px;
}
.left { display: flex; flex-direction: column; justify-content: space-between; }
.loc { font-size: 15px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); font-weight: 600; }
.name { font-size: 40px; font-weight: 700; letter-spacing: -0.02em; margin-top: 6px; line-height: 1.1; }
.date { font-size: 16px; color: var(--muted); margin-top: 8px; }
.icon { font-size: 96px; line-height: 1; margin: 36px 0 12px; filter: drop-shadow(0 8px 24px rgba(124,196,255,0.25)); }
.cond { font-size: 24px; font-weight: 600; }
.range { display: flex; gap: 28px; margin-top: 28px; }
.stat .lbl { font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); font-weight: 600; }
.stat .val { font-size: 40px; font-weight: 700; letter-spacing: -0.03em; margin-top: 4px; font-variant-numeric: tabular-nums; }
.stat.max .val { color: var(--warm); }
.stat.min .val { color: var(--cold); }
.stat .val span { font-size: 20px; font-weight: 500; color: var(--muted); margin-left: 2px; }
.right { display: flex; flex-direction: column; }
.right h2 { font-size: 13px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); font-weight: 600; margin-bottom: 14px; }
.chart { width: 100%; height: 300px; }
.chart text { fill: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.hours {
display: grid; grid-template-columns: repeat(12, 1fr); gap: 6px; margin-top: 20px;
}
.hour { text-align: center; padding: 8px 0; border-radius: 10px; background: rgba(255,255,255,0.04); }
.hour .h { font-size: 11px; color: var(--muted); }
.hour .t { font-size: 15px; font-weight: 600; margin-top: 3px; font-variant-numeric: tabular-nums; }
.status { grid-column: 1 / -1; text-align: center; color: var(--muted); font-size: 18px; padding: 80px 0; }
.status.error { color: #ff8a8a; }
.status small { display: block; margin-top: 10px; font-size: 13px; opacity: 0.7; }
</style>
</head>
<body>
<main class="card" id="card">
<div class="status" id="status">Loading weather…</div>
</main>
<script>
(function () {
const q = new URLSearchParams(location.search);
const lat = parseFloat(q.get('lat')) || 52.52;
const lon = parseFloat(q.get('lon')) || 13.405;
const name = q.get('name') || 'Berlin';
const todayISO = new Date().toISOString().slice(0, 10);
const date = /^\d{4}-\d{2}-\d{2}$/.test(q.get('date') || '') ? q.get('date') : todayISO;
const WMO = {
0: ['Clear sky', '☀️'], 1: ['Mainly clear', '🌤️'], 2: ['Partly cloudy', '⛅'], 3: ['Overcast', '☁️'],
45: ['Fog', '🌫️'], 48: ['Rime fog', '🌫️'],
51: ['Light drizzle', '🌦️'], 53: ['Drizzle', '🌦️'], 55: ['Dense drizzle', '🌧️'],
56: ['Freezing drizzle', '🌧️'], 57: ['Freezing drizzle', '🌧️'],
61: ['Slight rain', '🌧️'], 63: ['Rain', '🌧️'], 65: ['Heavy rain', '🌧️'],
66: ['Freezing rain', '🌧️'], 67: ['Freezing rain', '🌧️'],
71: ['Slight snow', '🌨️'], 73: ['Snow', '🌨️'], 75: ['Heavy snow', '❄️'], 77: ['Snow grains', '🌨️'],
80: ['Rain showers', '🌦️'], 81: ['Rain showers', '🌧️'], 82: ['Violent showers', '⛈️'],
85: ['Snow showers', '🌨️'], 86: ['Heavy snow showers', '❄️'],
95: ['Thunderstorm', '⛈️'], 96: ['Thunderstorm, hail', '⛈️'], 99: ['Thunderstorm, hail', '⛈️']
};
const card = document.getElementById('card');
const status = document.getElementById('status');
const esc = s => String(s).replace(/[&<>"]/g, c => ({'&':'&','<':'<','>':'>','"':'"'}[c]));
const fmt = v => (v == null || isNaN(v)) ? '–' : Math.round(v);
function fail(msg) {
status.className = 'status error';
status.innerHTML = 'Weather data could not be loaded.<small>' + esc(msg) + '</small>';
}
function chart(times, temps) {
const W = 600, H = 300, pl = 40, pr = 12, pt = 16, pb = 28;
const valid = temps.filter(v => v != null && !isNaN(v));
if (!valid.length) return '<div class="status">No hourly data.</div>';
let lo = Math.floor(Math.min(...valid)) - 1, hi = Math.ceil(Math.max(...valid)) + 1;
const n = temps.length;
const x = i => pl + (i / Math.max(n - 1, 1)) * (W - pl - pr);
const y = v => pt + (1 - (v - lo) / (hi - lo)) * (H - pt - pb);
let path = '', area = '', started = false;
temps.forEach((v, i) => {
if (v == null || isNaN(v)) return;
path += (started ? ' L' : 'M') + x(i).toFixed(1) + ' ' + y(v).toFixed(1);
started = true;
});
area = path + ' L' + x(n - 1).toFixed(1) + ' ' + (H - pb) + ' L' + pl + ' ' + (H - pb) + ' Z';
let grid = '';
const steps = 4;
for (let k = 0; k <= steps; k++) {
const v = lo + (hi - lo) * k / steps, yy = y(v).toFixed(1);
grid += `<line x1="${pl}" x2="${W - pr}" y1="${yy}" y2="${yy}" stroke="var(--grid)"/>` +
`<text x="${pl - 8}" y="${yy}" dy="4" text-anchor="end">${v.toFixed(0)}°</text>`;
}
let ticks = '';
times.forEach((t, i) => {
if (i % 3 !== 0) return;
ticks += `<text x="${x(i).toFixed(1)}" y="${H - 8}" text-anchor="middle">${t.slice(11, 16)}</text>`;
});
return `<svg class="chart" viewBox="0 0 ${W} ${H}" preserveAspectRatio="none">
<defs><linearGradient id="g" x1="0" x2="0" y1="0" y2="1">
<stop offset="0" stop-color="var(--accent)" stop-opacity="0.35"/>
<stop offset="1" stop-color="var(--accent)" stop-opacity="0"/></linearGradient></defs>
${grid}${ticks}
<path d="${area}" fill="url(#g)"/>
<path d="${path}" fill="none" stroke="var(--accent)" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round"/>
</svg>`;
}
function render(d) {
const daily = d.daily || {}, hourly = d.hourly || {};
const max = daily.temperature_2m_max && daily.temperature_2m_max[0];
const min = daily.temperature_2m_min && daily.temperature_2m_min[0];
const code = daily.weather_code && daily.weather_code[0];
const times = hourly.time || [], temps = hourly.temperature_2m || [];
if (max == null && min == null && !times.length) return fail('The response contained no data for this date.');
const [cond, icon] = WMO[code] || ['Unknown', '🌡️'];
const dateLabel = new Date(date + 'T00:00:00Z').toLocaleDateString('en-GB', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric', timeZone: 'UTC' });
const hours = times.map((t, i) =>
`<div class="hour"><div class="h">${t.slice(11, 16)}</div><div class="t">${fmt(temps[i])}°</div></div>`).join('');
card.innerHTML = `
<section class="left">
<div>
<div class="loc">Weather</div>
<div class="name">${esc(name)}</div>
<div class="date">${dateLabel} · UTC</div>
</div>
<div>
<div class="icon">${icon}</div>
<div class="cond">${cond}</div>
<div class="range">
<div class="stat max"><div class="lbl">High</div><div class="val">${fmt(max)}<span>°C</span></div></div>
<div class="stat min"><div class="lbl">Low</div><div class="val">${fmt(min)}<span>°C</span></div></div>
</div>
</div>
</section>
<section class="right">
<h2>Hourly temperature</h2>
${chart(times, temps)}
<div class="hours">${hours}</div>
</section>`;
}
const base = date < todayISO ? '/api/om/archive' : '/api/om/forecast';
const params = 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 + '?' + params.toString())
.then(r => { if (!r.ok) throw new Error('HTTP ' + r.status); return r.json(); })
.then(d => { if (d.error) throw new Error(d.reason || 'API error'); render(d); })
.catch(e => fail(e.message || String(e)));
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 9,322 | html / css / js | 308 / 3,128 / 5,886 |
|---|---|---|---|
| dom 节点 | 10 | dom 深度 | 4 |
| css 规则 | 28 | 含 js | 是 |
| brightness | 30.6 | contrast | 19.5 |
| colorfulness | 16.5 | 留白 | 82.2% |
该 slot 的 telemetry
| prompt tokens | 2 | completion tokens | 4,422 |
|---|---|---|---|
| total tokens | 4,424 | wall | 44.5 s |
| cost | — | request id | — |
config.json574 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-fable-5-1-eff-low--cli--claude-code--dev",
"effort": "low",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-fable-5-1",
"protocol": "cli",
"served_model": "claude-fable-5-1",
"telemetry": {
"completion_tokens": 16814,
"cost_usd": null,
"prompt_tokens": 8,
"total_tokens": 16822,
"wall_ms": 168434
},
"transport": "claude-code-cli-headless",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-09-02--cc-fable51-s0",
"config_id": "claude-fable-5-1-eff-low--cli--claude-code--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-09-02T01:21:10.405109+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-09-02T01:20:43.144465+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-09-02T01:22:00.053459+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-09-02T01:21:15.564225+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-09-02T01:23:06.266917+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-09-02T01:22:03.191518+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-09-02T01:23:43.358672+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-09-02T01:23:09.744055+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
}
}
}