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
claude-fable-5-1 @low · CC P-q slot 0 截图

截图是 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 => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[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,322html / css / js308 / 3,128 / 5,886
dom 节点10dom 深度4
css 规则28含 js
brightness30.6contrast19.5
colorfulness16.5留白82.2%

该 slot 的 telemetry

prompt tokens2completion tokens4,422
total tokens4,424wall44.5 s
costrequest 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
    }
  }
}