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

截图是 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 => ({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[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,282html / css / js348 / 4,217 / 4,717
dom 节点12dom 深度6
css 规则33含 js
brightness49.8contrast15.1
colorfulness20.0留白70.4%

该 slot 的 telemetry

prompt tokens2completion tokens4,225
total tokens4,227wall52 s
costrequest 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
    }
  }
}