claude-fable-5-thinking @ xhigh · cursor-xl

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

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。

similarity 邻居本 session 没有 similarity 数据 —— 这个 batch 没有计算 pairs。

Fidelity —— 卡片展示的数据对不对?

  • namematch
  • conditionmatch
  • datematch
  • max tempmatch展示值:25
  • 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=device-width, initial-scale=1">
<title>Weather</title>
<style>
  *{margin:0;padding:0;box-sizing:border-box}
  html,body{height:100%}
  body{
    --bg1:#41566e;--bg2:#8b9bad;
    --glow1:rgba(255,255,255,.20);--glow2:rgba(170,195,220,.25);
    --accent:#ffd166;--cool:#8fd0ff;
    --t1:#f4f8fd;--t2:rgba(233,242,250,.75);--t3:rgba(226,237,248,.52);
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
    color:var(--t1);
    display:grid;place-items:center;
    background:
      radial-gradient(1100px 750px at 12% -8%, var(--glow1), transparent 60%),
      radial-gradient(950px 700px at 108% 108%, var(--glow2), transparent 55%),
      linear-gradient(158deg, var(--bg1) 0%, var(--bg2) 100%);
    background-attachment:fixed;
    -webkit-font-smoothing:antialiased;
  }
  body::after{content:"";position:fixed;inset:0;pointer-events:none;
    background:radial-gradient(140% 115% at 50% 38%, transparent 58%, rgba(8,15,28,.35));}
  body[data-theme=clear]{--bg1:#1e6ad1;--bg2:#69c0f7;--glow1:rgba(255,198,88,.60);--glow2:rgba(255,255,255,.30)}
  body[data-theme=partly]{--bg1:#2f6fc2;--bg2:#8fb6dd;--glow1:rgba(255,205,110,.45);--glow2:rgba(255,255,255,.25)}
  body[data-theme=cloudy]{--bg1:#41566e;--bg2:#8b9bad;--glow1:rgba(255,255,255,.22);--glow2:rgba(170,195,220,.25);--accent:#f6d489}
  body[data-theme=fog]{--bg1:#5a6a77;--bg2:#a9b6c0;--glow1:rgba(255,255,255,.26);--glow2:rgba(200,215,228,.30);--accent:#ecdcae}
  body[data-theme=rain]{--bg1:#16324f;--bg2:#40719f;--glow1:rgba(96,190,230,.30);--glow2:rgba(140,190,235,.22)}
  body[data-theme=snow]{--bg1:#4f7cab;--bg2:#b6d0e8;--glow1:rgba(255,255,255,.42);--glow2:rgba(210,230,250,.35);--accent:#ffe3a3}
  body[data-theme=storm]{--bg1:#241f44;--bg2:#5b5187;--glow1:rgba(167,139,250,.38);--glow2:rgba(255,209,102,.18)}

  .card{
    width:1120px;max-width:calc(100vw - 72px);
    position:relative;z-index:1;
    border-radius:28px;
    padding:44px 52px 34px;
    background:linear-gradient(180deg, rgba(12,21,37,.55), rgba(12,21,37,.40));
    border:1px solid rgba(255,255,255,.16);
    box-shadow:0 34px 90px rgba(4,10,22,.45), inset 0 1px 0 rgba(255,255,255,.14);
    backdrop-filter:blur(22px) saturate(150%);
    -webkit-backdrop-filter:blur(22px) saturate(150%);
    animation:rise .55s cubic-bezier(.2,.7,.2,1) both;
  }
  @keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

  .top{display:flex;justify-content:space-between;align-items:flex-start;gap:24px}
  h1{font-size:34px;font-weight:650;letter-spacing:-.02em;max-width:640px;
     white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .meta{display:flex;gap:10px;margin-top:11px;align-items:center}
  .chip{display:inline-flex;align-items:center;padding:5px 13px;border-radius:999px;
    background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.15);
    font-size:12.5px;color:var(--t2);font-weight:500;letter-spacing:.02em}
  .chip.rel{background:rgba(255,209,102,.14);border-color:rgba(255,209,102,.32);color:#ffe4ab}
  .when{text-align:right;flex-shrink:0}
  .when .d1{font-size:18px;font-weight:560;color:var(--t1)}
  .when .d2{margin-top:9px;display:flex;justify-content:flex-end}

  .hero{display:flex;align-items:center;gap:32px;margin:32px 0 28px}
  .hero .icon{width:116px;height:116px;flex-shrink:0;filter:drop-shadow(0 12px 26px rgba(0,0,0,.28))}
  .cond{font-size:27px;font-weight:640;letter-spacing:-.01em}
  .csub{margin-top:7px;font-size:14px;color:var(--t3)}
  .grow{flex:1}
  .temps{display:flex;align-items:center;gap:28px}
  .tblock{display:flex;flex-direction:column;align-items:flex-end}
  .tl{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--t3);margin-bottom:5px}
  .tv-big{font-size:64px;font-weight:250;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
  .tblock.low .tv-big{color:rgba(238,246,255,.58)}
  .tdiv{width:1px;height:60px;background:rgba(255,255,255,.16)}

  .sec{border-top:1px solid rgba(255,255,255,.13);padding-top:22px}
  .sec-head{display:flex;justify-content:space-between;align-items:baseline;
    font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--t3);margin-bottom:14px}
  .tiles{display:grid;margin-top:8px}
  .tile{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 0 7px;border-radius:9px;transition:background .15s}
  .tile:hover{background:rgba(255,255,255,.07)}
  .tile .t{font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums}
  .tile .h{font-size:10.5px;color:var(--t3);font-variant-numeric:tabular-nums}
  .tile.hot{background:rgba(255,209,102,.11)}
  .tile.hot .t{color:var(--accent)}
  .tile.cold{background:rgba(124,199,255,.11)}
  .tile.cold .t{color:var(--cool)}
  .empty-hours{padding:34px 0;text-align:center;color:var(--t3);font-size:14px}

  .foot{margin-top:24px;display:flex;justify-content:space-between;font-size:12px;color:var(--t3)}

  .state{min-height:520px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center}
  .state h2{font-size:21px;font-weight:640}
  .state p{font-size:14px;color:var(--t2);max-width:420px;line-height:1.55}
  .dots{display:flex;gap:8px}
  .dots i{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.75);animation:pulse 1.1s ease-in-out infinite}
  .dots i:nth-child(2){animation-delay:.15s}
  .dots i:nth-child(3){animation-delay:.3s}
  @keyframes pulse{0%,100%{opacity:.25;transform:scale(.8)}50%{opacity:1;transform:scale(1)}}
  .btn{margin-top:6px;padding:10px 24px;border-radius:999px;border:1px solid rgba(255,255,255,.25);
    background:rgba(255,255,255,.12);color:#fff;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit}
  .btn:hover{background:rgba(255,255,255,.2)}
</style>
</head>
<body>
<main class="card" id="app">
  <div class="state">
    <div class="dots"><i></i><i></i><i></i></div>
    <p>Loading weather…</p>
  </div>
</main>

<script>
(function(){
  const app = document.getElementById('app');
  const qs = new URLSearchParams(location.search);
  const num = (v,d)=>{ const n=parseFloat(v); return Number.isFinite(n)?n:d; };
  const esc = s=>String(s).replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));

  const lat = num(qs.get('lat'), 52.52);
  const lon = num(qs.get('lon'), 13.405);
  const name = (qs.get('name')||'').trim() || 'Berlin';
  const todayUTC = new Date().toISOString().slice(0,10);
  let date = qs.get('date') || todayUTC;
  if(!/^\d{4}-\d{2}-\d{2}$/.test(date)) date = todayUTC;

  const isPast = date < todayUTC;
  const base = isPast ? '/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
  });

  document.title = 'Weather · ' + name;

  const WMO = {
    0:['Clear sky','clear'],1:['Mainly clear','clear'],2:['Partly cloudy','partly'],3:['Overcast','cloudy'],
    45:['Fog','fog'],48:['Depositing rime fog','fog'],
    51:['Light drizzle','rain'],53:['Drizzle','rain'],55:['Dense drizzle','rain'],
    56:['Freezing drizzle','rain'],57:['Dense freezing drizzle','rain'],
    61:['Slight rain','rain'],63:['Rain','rain'],65:['Heavy rain','rain'],
    66:['Freezing rain','rain'],67:['Heavy freezing rain','rain'],
    71:['Slight snowfall','snow'],73:['Snowfall','snow'],75:['Heavy snowfall','snow'],77:['Snow grains','snow'],
    80:['Slight rain showers','rain'],81:['Rain showers','rain'],82:['Violent rain showers','rain'],
    85:['Snow showers','snow'],86:['Heavy snow showers','snow'],
    95:['Thunderstorm','storm'],96:['Thunderstorm with hail','storm'],99:['Thunderstorm with heavy hail','storm']
  };

  function icon(t){
    const cloud = f=>`<circle cx="22" cy="38" r="10" fill="${f}"/><circle cx="33" cy="31" r="13" fill="${f}"/><circle cx="44" cy="37" r="10" fill="${f}"/><rect x="22" y="37" width="22" height="11" rx="5" fill="${f}"/>`;
    const sunDefs = `<defs><linearGradient id="sg" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#ffe9a8"/><stop offset="1" stop-color="#ffb347"/></linearGradient></defs>`;
    const C1='#eef4fb', C2='#cfdded';
    let b='';
    if(t==='clear'){
      b=`${sunDefs}<g stroke="#ffd98e" stroke-width="3.6" stroke-linecap="round"><line x1="32" y1="6" x2="32" y2="13"/><line x1="32" y1="51" x2="32" y2="58"/><line x1="6" y1="32" x2="13" y2="32"/><line x1="51" y1="32" x2="58" y2="32"/><line x1="13.6" y1="13.6" x2="18.6" y2="18.6"/><line x1="45.4" y1="45.4" x2="50.4" y2="50.4"/><line x1="13.6" y1="50.4" x2="18.6" y2="45.4"/><line x1="45.4" y1="18.6" x2="50.4" y2="13.6"/></g><circle cx="32" cy="32" r="13.5" fill="url(#sg)"/>`;
    }else if(t==='partly'){
      b=`${sunDefs}<g stroke="#ffd98e" stroke-width="3" stroke-linecap="round"><line x1="22" y1="4" x2="22" y2="9.5"/><line x1="4" y1="22" x2="9.5" y2="22"/><line x1="34.5" y1="22" x2="40" y2="22"/><line x1="9.3" y1="9.3" x2="13.2" y2="13.2"/><line x1="30.8" y1="13.2" x2="34.7" y2="9.3"/></g><circle cx="22" cy="22" r="9" fill="url(#sg)"/><g transform="translate(2 6)">${cloud(C1)}</g>`;
    }else if(t==='fog'){
      b=`<g transform="translate(0 -9)">${cloud(C1)}</g><g stroke="#d9e6f4" stroke-width="3.4" stroke-linecap="round"><line x1="16" y1="45" x2="47" y2="45" opacity=".9"/><line x1="21" y1="52" x2="52" y2="52" opacity=".65"/><line x1="17" y1="59" x2="40" y2="59" opacity=".4"/></g>`;
    }else if(t==='rain'){
      b=`<g transform="translate(0 -7)">${cloud(C1)}</g><g stroke="#8fd0ff" stroke-width="3.4" stroke-linecap="round"><line x1="24" y1="47" x2="21" y2="56"/><line x1="33" y1="47" x2="30" y2="56"/><line x1="42" y1="47" x2="39" y2="56"/></g>`;
    }else if(t==='snow'){
      b=`<g transform="translate(0 -7)">${cloud(C1)}</g><g fill="#eaf4ff"><circle cx="24" cy="49" r="2.4"/><circle cx="33" cy="55" r="2.4"/><circle cx="42" cy="49" r="2.4"/><circle cx="28" cy="58" r="1.8" opacity=".8"/><circle cx="38" cy="58" r="1.8" opacity=".8"/></g>`;
    }else if(t==='storm'){
      b=`<g transform="translate(0 -9)">${cloud(C1)}</g><path d="M34 38 L24 52 h7 l-4 12 13 -16 h-7 l7 -10 z" fill="#ffd166"/>`;
    }else{
      b=`<g transform="translate(22 2) scale(.6)" opacity=".55">${cloud(C2)}</g>${cloud(C1)}`;
    }
    return `<svg viewBox="0 0 64 64" width="100%" height="100%" aria-hidden="true">${b}</svg>`;
  }

  function fmtDate(iso){
    return new Intl.DateTimeFormat('en-GB',{weekday:'long',day:'numeric',month:'long',year:'numeric',timeZone:'UTC'})
      .format(new Date(iso+'T00:00:00Z'));
  }
  function relLabel(){
    const diff = Math.round((Date.parse(date)-Date.parse(todayUTC))/86400000);
    if(diff===0) return 'Today';
    if(diff===1) return 'Tomorrow';
    if(diff===-1) return 'Yesterday';
    return diff>0 ? `In ${diff} days` : `${-diff} days ago`;
  }
  const coords = `${Math.abs(lat).toFixed(2)}° ${lat>=0?'N':'S'}, ${Math.abs(lon).toFixed(2)}° ${lon>=0?'E':'W'}`;
  const fmtT = v => v==null ? '—' : Math.round(v)+'°';

  function chartSVG(hs){
    const N = hs.length;
    const pts = hs.map((v,i)=>({i,t:v.t})).filter(p=>p.t!=null);
    if(pts.length<2) return '';
    const W=960,H=180,TOP=30,BOT=26;
    const ts=pts.map(p=>p.t), lo=Math.min(...ts), hi=Math.max(...ts);
    const X=i=>+(((i+.5)*(W/N)).toFixed(2));
    const Y=t=>+((TOP+(hi===lo?.5:(hi-t)/(hi-lo))*(H-TOP-BOT)).toFixed(2));
    const LX=x=>Math.min(W-18,Math.max(18,x));
    let line=`M ${X(pts[0].i)} ${Y(pts[0].t)}`;
    for(let k=1;k<pts.length;k++){
      const a=pts[k-1],b=pts[k],xb=X(b.i),m=((X(a.i)+xb)/2).toFixed(2);
      line+=` C ${m} ${Y(a.t)}, ${m} ${Y(b.t)}, ${xb} ${Y(b.t)}`;
    }
    const x0=X(pts[0].i), x1=X(pts[pts.length-1].i);
    const area=`${line} L ${x1} ${H} L ${x0} ${H} Z`;
    const pMax=pts.find(p=>p.t===hi), pMin=pts.find(p=>p.t===lo);
    const grid=[TOP,(TOP+H-BOT)/2,H-BOT]
      .map(y=>`<line x1="${x0}" x2="${x1}" y1="${y}" y2="${y}" stroke="rgba(255,255,255,.09)" stroke-dasharray="3 5"/>`).join('');
    return `<svg viewBox="0 0 ${W} ${H}" style="width:100%;height:auto;display:block" aria-hidden="true">
      <defs>
        <linearGradient id="ag" x1="0" y1="0" x2="0" y2="1">
          <stop offset="0" style="stop-color:var(--accent);stop-opacity:.30"/>
          <stop offset="1" style="stop-color:var(--accent);stop-opacity:0"/>
        </linearGradient>
        <linearGradient id="lg" x1="0" y1="0" x2="1" y2="0">
          <stop offset="0" style="stop-color:#8fd0ff"/>
          <stop offset="1" style="stop-color:var(--accent)"/>
        </linearGradient>
      </defs>
      ${grid}
      <path d="${area}" fill="url(#ag)"/>
      <path d="${line}" fill="none" stroke="url(#lg)" stroke-width="2.6" stroke-linecap="round"/>
      <circle cx="${X(pMax.i)}" cy="${Y(pMax.t)}" r="4.4" style="fill:var(--accent)" stroke="rgba(255,255,255,.9)" stroke-width="1.6"/>
      <text x="${LX(X(pMax.i))}" y="${Y(pMax.t)-11}" text-anchor="middle" font-size="13" font-weight="600" fill="#fff">${Math.round(hi)}°</text>
      <circle cx="${X(pMin.i)}" cy="${Y(pMin.t)}" r="4.4" fill="#8fd0ff" stroke="rgba(255,255,255,.9)" stroke-width="1.6"/>
      <text x="${LX(X(pMin.i))}" y="${Y(pMin.t)+21}" text-anchor="middle" font-size="13" font-weight="600" fill="#fff">${Math.round(lo)}°</text>
    </svg>`;
  }

  function render(data){
    const d = data.daily || {};
    const tmax = d.temperature_2m_max ? d.temperature_2m_max[0] : null;
    const tmin = d.temperature_2m_min ? d.temperature_2m_min[0] : null;
    const code = d.weather_code ? d.weather_code[0] : null;
    const times = (data.hourly && data.hourly.time) || [];
    const temps = (data.hourly && data.hourly.temperature_2m) || [];
    const hours = [];
    times.forEach((t,i)=>{ if(t.startsWith(date)) hours.push({h:t.slice(11,13), t:temps[i]}); });

    const hasAny = tmax!=null || tmin!=null || hours.some(h=>h.t!=null);
    if(!hasAny){ renderError(new Error('No weather data is available for this date and location.')); return; }

    const [condName, theme] = WMO[code] || ['Unknown conditions','cloudy'];
    document.body.dataset.theme = theme;

    const valid = hours.filter(h=>h.t!=null).map(h=>h.t);
    const hHi = valid.length ? Math.max(...valid) : null;
    const hLo = valid.length ? Math.min(...valid) : null;

    const tiles = hours.map(h=>{
      const cls = h.t!=null && h.t===hHi ? ' hot' : h.t!=null && h.t===hLo ? ' cold' : '';
      return `<div class="tile${cls}"><span class="t">${h.t==null?'–':Math.round(h.t)+'°'}</span><span class="h">${h.h}</span></div>`;
    }).join('');

    app.innerHTML = `
      <header class="top">
        <div>
          <h1>${esc(name)}</h1>
          <div class="meta"><span class="chip">${coords}</span></div>
        </div>
        <div class="when">
          <div class="d1">${fmtDate(date)}</div>
          <div class="d2"><span class="chip rel">${relLabel()}</span></div>
        </div>
      </header>
      <div class="hero">
        <div class="icon">${icon(theme)}</div>
        <div>
          <div class="cond">${condName}</div>
          <div class="csub">${isPast ? 'Historical archive' : 'Forecast'} · Open-Meteo data</div>
        </div>
        <div class="grow"></div>
        <div class="temps">
          <div class="tblock"><span class="tl">High</span><span class="tv-big">${fmtT(tmax)}</span></div>
          <div class="tdiv"></div>
          <div class="tblock low"><span class="tl">Low</span><span class="tv-big">${fmtT(tmin)}</span></div>
        </div>
      </div>
      <section class="sec">
        <div class="sec-head"><span>Hourly temperature</span><span>°C · UTC</span></div>
        ${hours.length ? chartSVG(hours) + `<div class="tiles" style="grid-template-columns:repeat(${hours.length},1fr)">${tiles}</div>` : `<div class="empty-hours">No hourly data available for this date.</div>`}
      </section>
      <footer class="foot">
        <span>Temperatures in °C · All times UTC</span>
        <span>${lat.toFixed(4)}, ${lon.toFixed(4)}</span>
      </footer>`;
  }

  function renderError(err){
    app.innerHTML = `
      <div class="state">
        <svg viewBox="0 0 64 64" width="60" height="60" aria-hidden="true">
          <g fill="none" stroke="rgba(255,255,255,.85)" stroke-width="3" stroke-linecap="round">
            <circle cx="32" cy="32" r="24" opacity=".45"/>
            <line x1="32" y1="19" x2="32" y2="37"/>
          </g>
          <circle cx="32" cy="45" r="2.2" fill="rgba(255,255,255,.85)"/>
        </svg>
        <h2>Weather data couldn’t be loaded</h2>
        <p>We couldn’t load the weather for ${esc(name)} on ${fmtDate(date)}.<br>${esc(err && err.message ? err.message : 'Unknown error')}</p>
        <button class="btn" onclick="location.reload()">Try again</button>
      </div>`;
  }

  fetch(`${base}?${params.toString()}`)
    .then(res=>{
      if(!res.ok) throw new Error(`The weather service responded with status ${res.status}.`);
      return res.json();
    })
    .then(render)
    .catch(renderError);
})();
</script>
</body>
</html>

L1 —— 廉价的确定性描述量

bytes 总计17,265html / css / js368 / 5,725 / 11,172
dom 节点15dom 深度6
css 规则59含 js
brightness59.6contrast19.0
colorfulness29.9留白49.4%

该 slot 的 telemetry

prompt tokens2completion tokens33,489
total tokens33,491wall430 s
costrequest id
config.json609 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "claude-fable-5-thinking-eff-xhigh--cli--cursor-xl--dev",
  "effort": "xhigh",
  "family": "claude",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "claude-fable-5-thinking",
  "protocol": "cli",
  "served_model": "claude-fable-5-thinking-xhigh",
  "telemetry": {
    "completion_tokens": 78766,
    "cost_usd": null,
    "prompt_tokens": 8,
    "total_tokens": 78774,
    "wall_ms": 977077
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-xl-s0",
  "config_id": "claude-fable-5-thinking-eff-xhigh--cli--cursor-xl--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-13T09:11:54.615135+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-13T09:04:44.612073+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-13T09:13:48.705650+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-13T09:11:58.290876+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-13T09:14:50.854198+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-13T09:13:52.179525+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-13T09:21:12.252578+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-13T09:14:54.364876+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
    }
  }
}