gpt-5.4-mini @ low · cursor

cursorlow
config
gpt-5.4-mini-eff-low--cli--cursor--dev
batch
2026-07-19--unified
transport
cursor-agent-cli-isolated-home
protocol
cli · plan
served model
gpt-5.4-mini-low
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
gpt-5.4-mini @low · cursor P-q slot 0 screenshot

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.

similarity neighborsNo similarity data for this session — this batch has no computed pairs.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempambiguousinsufficient-distinct-temperature-nodes
  • min tempambiguousinsufficient-distinct-temperature-nodes
  • hourlyambiguouscoverage · 0 match · 0 mismatch · 24 not shown
  • request sidematch0 violation(s)

extractor fidelity-extractor-v1+Berlin-2026-07-15

Source — raw model output, one byte unchanged

download card.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Weather Card</title>
  <style>
    :root {
      --bg0: #06111f;
      --bg1: #0b1f39;
      --bg2: #14345d;
      --card: rgba(10, 18, 33, 0.64);
      --card-border: rgba(255, 255, 255, 0.14);
      --text: #eff5ff;
      --muted: rgba(239, 245, 255, 0.72);
      --faint: rgba(239, 245, 255, 0.48);
      --accent: #7dd3fc;
      --accent2: #b8a6ff;
      --good: #8bf0c1;
      --warn: #ffd166;
      --shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
      --radius: 28px;
    }

    * { box-sizing: border-box; }
    html, body { width: 100%; height: 100%; }
    body {
      margin: 0;
      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
      color: var(--text);
      overflow: hidden;
      background:
        radial-gradient(1200px 900px at 15% 15%, rgba(125, 211, 252, 0.24), transparent 45%),
        radial-gradient(900px 700px at 85% 18%, rgba(184, 166, 255, 0.22), transparent 42%),
        radial-gradient(1100px 700px at 50% 100%, rgba(67, 97, 238, 0.16), transparent 48%),
        linear-gradient(160deg, var(--bg0), var(--bg1) 54%, var(--bg2));
    }

    .scene {
      position: relative;
      width: 1280px;
      height: 800px;
      margin: 0 auto;
      display: grid;
      place-items: center;
      padding: 40px;
    }

    .glow {
      position: absolute;
      inset: auto;
      border-radius: 999px;
      filter: blur(30px);
      opacity: 0.95;
      pointer-events: none;
    }

    .glow.g1 {
      width: 360px;
      height: 360px;
      left: 110px;
      top: 86px;
      background: radial-gradient(circle at 30% 30%, rgba(125, 211, 252, 0.55), rgba(125, 211, 252, 0.05) 70%, transparent 72%);
    }

    .glow.g2 {
      width: 430px;
      height: 430px;
      right: 86px;
      bottom: 54px;
      background: radial-gradient(circle at 40% 35%, rgba(184, 166, 255, 0.38), rgba(184, 166, 255, 0.06) 68%, transparent 72%);
    }

    .card {
      position: relative;
      width: 1080px;
      height: 620px;
      border-radius: var(--radius);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
        rgba(10, 18, 33, 0.64);
      border: 1px solid var(--card-border);
      box-shadow: var(--shadow);
      backdrop-filter: blur(18px);
      overflow: hidden;
      display: grid;
      grid-template-rows: auto 1fr auto;
      padding: 34px 36px 30px;
    }

    .card::before {
      content: "";
      position: absolute;
      inset: 0;
      background:
        radial-gradient(700px 340px at 20% 15%, rgba(125, 211, 252, 0.12), transparent 62%),
        radial-gradient(640px 320px at 92% 10%, rgba(184, 166, 255, 0.11), transparent 56%);
      pointer-events: none;
    }

    .topbar {
      position: relative;
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 20px;
      z-index: 1;
    }

    .brand {
      display: flex;
      align-items: center;
      gap: 14px;
      min-width: 0;
    }

    .badge {
      width: 48px;
      height: 48px;
      border-radius: 16px;
      display: grid;
      place-items: center;
      background:
        linear-gradient(160deg, rgba(125, 211, 252, 0.28), rgba(184, 166, 255, 0.18));
      border: 1px solid rgba(255, 255, 255, 0.16);
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.18);
      flex: none;
    }

    .badge svg { width: 26px; height: 26px; opacity: 0.96; }

    .eyebrow {
      font-size: 12px;
      letter-spacing: 0.22em;
      text-transform: uppercase;
      color: var(--faint);
      margin-bottom: 6px;
    }

    .titlewrap { min-width: 0; }
    .location {
      font-size: 34px;
      line-height: 1.05;
      font-weight: 720;
      letter-spacing: -0.03em;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      margin: 0;
    }

    .date {
      color: var(--muted);
      font-size: 16px;
      margin-top: 6px;
      letter-spacing: 0.01em;
    }

    .status {
      font-size: 13px;
      color: var(--muted);
      padding: 12px 16px;
      border-radius: 999px;
      border: 1px solid rgba(255,255,255,0.12);
      background: rgba(255,255,255,0.04);
      white-space: nowrap;
    }

    .main {
      position: relative;
      z-index: 1;
      display: grid;
      grid-template-columns: 1.02fr 1.18fr;
      gap: 28px;
      align-items: stretch;
      margin-top: 24px;
    }

    .summary {
      border-radius: 24px;
      background: linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0.035));
      border: 1px solid rgba(255,255,255,0.12);
      padding: 28px;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      min-height: 0;
    }

    .tempBlock {
      display: flex;
      align-items: flex-end;
      gap: 18px;
      flex-wrap: wrap;
    }

    .bigTemp {
      font-size: 96px;
      line-height: 0.92;
      letter-spacing: -0.08em;
      font-weight: 760;
    }

    .tempMeta {
      padding-bottom: 10px;
      display: grid;
      gap: 8px;
    }

    .condition {
      font-size: 26px;
      line-height: 1.1;
      font-weight: 640;
      letter-spacing: -0.02em;
    }

    .sub {
      color: var(--muted);
      font-size: 15px;
      line-height: 1.5;
      max-width: 28ch;
    }

    .stats {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 14px;
      margin-top: 22px;
    }

    .stat {
      padding: 16px 18px;
      border-radius: 18px;
      background: rgba(6, 10, 18, 0.24);
      border: 1px solid rgba(255,255,255,0.1);
    }

    .stat .label {
      font-size: 12px;
      letter-spacing: 0.14em;
      text-transform: uppercase;
      color: var(--faint);
      margin-bottom: 8px;
    }

    .stat .value {
      font-size: 22px;
      font-weight: 700;
      letter-spacing: -0.03em;
    }

    .panel {
      border-radius: 24px;
      background: linear-gradient(180deg, rgba(255,255,255,0.07), rgba(255,255,255,0.03));
      border: 1px solid rgba(255,255,255,0.12);
      padding: 24px;
      display: grid;
      grid-template-rows: auto 1fr;
      min-height: 0;
    }

    .panelHead {
      display: flex;
      align-items: baseline;
      justify-content: space-between;
      gap: 16px;
      margin-bottom: 18px;
    }

    .panelTitle {
      font-size: 18px;
      font-weight: 680;
      letter-spacing: -0.02em;
    }

    .panelHint {
      color: var(--faint);
      font-size: 13px;
    }

    .hours {
      display: grid;
      grid-template-columns: repeat(8, minmax(0, 1fr));
      gap: 12px;
      align-content: start;
      overflow: hidden;
    }

    .hour {
      border-radius: 18px;
      padding: 14px 10px 12px;
      background:
        linear-gradient(180deg, rgba(255,255,255,0.07), rgba(255,255,255,0.03));
      border: 1px solid rgba(255,255,255,0.1);
      text-align: center;
      min-height: 118px;
      display: grid;
      grid-template-rows: auto auto 1fr auto;
      gap: 8px;
    }

    .hourTime {
      font-size: 13px;
      color: var(--faint);
      letter-spacing: 0.03em;
    }

    .hourTemp {
      font-size: 26px;
      font-weight: 720;
      letter-spacing: -0.04em;
      margin-top: 2px;
    }

    .hourBarWrap {
      display: grid;
      align-items: end;
      min-height: 44px;
      padding: 2px 8px 0;
    }

    .hourBar {
      width: 100%;
      border-radius: 999px;
      height: 10px;
      background: rgba(255,255,255,0.08);
      position: relative;
      overflow: hidden;
    }

    .hourBar > span {
      position: absolute;
      inset: 0;
      border-radius: inherit;
      background: linear-gradient(90deg, #7dd3fc, #b8a6ff);
      transform-origin: left center;
    }

    .hourLabel {
      font-size: 12px;
      color: var(--muted);
    }

    .footer {
      position: relative;
      z-index: 1;
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-top: 18px;
      color: var(--faint);
      font-size: 13px;
      gap: 16px;
    }

    .footer .left, .footer .right {
      display: flex;
      gap: 14px;
      align-items: center;
      flex-wrap: wrap;
    }

    .pill {
      padding: 9px 12px;
      border-radius: 999px;
      background: rgba(255,255,255,0.05);
      border: 1px solid rgba(255,255,255,0.1);
      color: var(--muted);
    }

    .errorState {
      position: relative;
      z-index: 1;
      display: none;
      place-items: center;
      height: 100%;
      text-align: center;
      padding: 24px;
    }

    .errorState .box {
      max-width: 620px;
      padding: 30px 28px;
      border-radius: 24px;
      background: rgba(8, 15, 28, 0.58);
      border: 1px solid rgba(255,255,255,0.14);
      box-shadow: var(--shadow);
    }

    .errorState h1 {
      margin: 0 0 10px;
      font-size: 30px;
      letter-spacing: -0.03em;
    }

    .errorState p {
      margin: 0;
      color: var(--muted);
      font-size: 16px;
      line-height: 1.6;
    }

    .loading .main,
    .loading .footer {
      filter: blur(3px);
      opacity: 0.55;
      pointer-events: none;
      user-select: none;
    }

    .skeleton {
      background: linear-gradient(90deg, rgba(255,255,255,0.06), rgba(255,255,255,0.12), rgba(255,255,255,0.06));
      background-size: 240% 100%;
      animation: shimmer 1.4s infinite linear;
      border-radius: 12px;
    }

    @keyframes shimmer {
      0% { background-position: 200% 0; }
      100% { background-position: -20% 0; }
    }
  </style>
</head>
<body>
  <div class="scene" id="scene">
    <div class="glow g1"></div>
    <div class="glow g2"></div>

    <section class="card" id="card" aria-live="polite">
      <div class="topbar">
        <div class="brand">
          <div class="badge" aria-hidden="true">
            <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
              <path d="M7.5 16.5h10a3.5 3.5 0 0 0 .7-6.93A5.25 5.25 0 0 0 8.36 7.5 4 4 0 0 0 7.5 16.5Z" stroke="white" stroke-opacity=".9" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
              <path d="M9.4 4.5v2.1M14.6 4.5v2.1M4.7 9.3l1.5 1.5M18.3 9.3l-1.5 1.5" stroke="white" stroke-opacity=".9" stroke-width="1.5" stroke-linecap="round"/>
            </svg>
          </div>
          <div class="titlewrap">
            <div class="eyebrow">Weather card</div>
            <h1 class="location" id="location">Berlin</h1>
            <div class="date" id="dateText">Today</div>
          </div>
        </div>
        <div class="status" id="status">Loading weather data…</div>
      </div>

      <div class="main">
        <div class="summary">
          <div>
            <div class="tempBlock">
              <div class="bigTemp skeleton" id="maxTemp" style="width: 160px; height: 88px;"></div>
              <div class="tempMeta">
                <div class="condition skeleton" id="condition" style="width: 230px; height: 28px;"></div>
                <div class="sub" id="summaryText">
                  Fetching daily and hourly temperatures for the selected date.
                </div>
              </div>
            </div>

            <div class="stats">
              <div class="stat">
                <div class="label">Maximum</div>
                <div class="value" id="maxStat">-- °C</div>
              </div>
              <div class="stat">
                <div class="label">Minimum</div>
                <div class="value" id="minStat">-- °C</div>
              </div>
            </div>
          </div>

          <div class="pill" id="metaPill">UTC timezone · daily + hourly data</div>
        </div>

        <div class="panel">
          <div class="panelHead">
            <div class="panelTitle">Hourly temperatures</div>
            <div class="panelHint" id="hourRange">Selected date in UTC</div>
          </div>
          <div class="hours" id="hours"></div>
        </div>
      </div>

      <div class="footer">
        <div class="left">
          <span class="pill" id="coords">52.52, 13.405</span>
          <span class="pill">Open-Meteo compatible API</span>
        </div>
        <div class="right">
          <span class="pill" id="sourceHint">Forecast or archive endpoint chosen automatically</span>
        </div>
      </div>

      <div class="errorState" id="errorState">
        <div class="box">
          <h1>Weather data could not be loaded</h1>
          <p id="errorText">Please try again later.</p>
        </div>
      </div>
    </section>
  </div>

  <script>
    (function () {
      const qs = new URLSearchParams(location.search);
      const lat = qs.get('lat') || '52.52';
      const lon = qs.get('lon') || '13.405';
      const name = qs.get('name') || 'Berlin';
      const dateParam = qs.get('date') || new Date().toISOString().slice(0, 10);

      const els = {
        card: document.getElementById('card'),
        location: document.getElementById('location'),
        dateText: document.getElementById('dateText'),
        status: document.getElementById('status'),
        maxTemp: document.getElementById('maxTemp'),
        condition: document.getElementById('condition'),
        summaryText: document.getElementById('summaryText'),
        maxStat: document.getElementById('maxStat'),
        minStat: document.getElementById('minStat'),
        hours: document.getElementById('hours'),
        errorState: document.getElementById('errorState'),
        errorText: document.getElementById('errorText'),
        coords: document.getElementById('coords'),
        hourRange: document.getElementById('hourRange'),
        sourceHint: document.getElementById('sourceHint'),
        metaPill: document.getElementById('metaPill')
      };

      els.location.textContent = name;
      els.coords.textContent = `${lat}, ${lon}`;
      els.dateText.textContent = formatDate(dateParam);
      els.hourRange.textContent = `${formatDate(dateParam)} · hourly UTC`;

      const requestedDate = new Date(dateParam + 'T00:00:00Z');
      const todayUTC = new Date();
      const todayISO = todayUTC.toISOString().slice(0, 10);
      const endpoint = dateParam < todayISO ? '/api/om/archive' : '/api/om/forecast';
      els.sourceHint.textContent = endpoint.includes('archive') ? 'Archive data endpoint' : 'Forecast data endpoint';

      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: dateParam,
        end_date: dateParam
      });

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

      function formatDate(iso) {
        const d = new Date(iso + 'T00:00:00Z');
        return new Intl.DateTimeFormat('en-US', {
          timeZone: 'UTC',
          weekday: 'long',
          year: 'numeric',
          month: 'long',
          day: 'numeric'
        }).format(d);
      }

      function fmtHour(iso) {
        const d = new Date(iso);
        return new Intl.DateTimeFormat('en-US', {
          timeZone: 'UTC',
          hour: 'numeric',
          hour12: true
        }).format(d).replace(/\s/g, '');
      }

      function weatherLabel(code) {
        return weatherCodeMap[code]?.[0] || 'Unknown conditions';
      }

      function weatherTint(code) {
        return weatherCodeMap[code]?.[1] || 'clear';
      }

      function setError(message) {
        els.card.classList.remove('loading');
        els.errorText.textContent = message;
        els.errorState.style.display = 'grid';
        els.status.textContent = 'Unavailable';
      }

      function iconFor(code) {
        const kind = weatherTint(code);
        if (kind === 'storm') return '⛈';
        if (kind === 'snow') return '❄';
        if (kind === 'rain') return '🌧';
        if (kind === 'fog') return '🌫';
        if (kind === 'cloudy') return '☁';
        if (kind === 'partly') return '⛅';
        return '☀';
      }

      function renderHours(times, temps) {
        els.hours.innerHTML = '';
        if (!times || !temps || !times.length) {
          const empty = document.createElement('div');
          empty.className = 'hour';
          empty.style.gridColumn = '1 / -1';
          empty.innerHTML = '<div class="hourTime">No hourly data</div><div class="hourTemp">--</div><div class="hourBarWrap"><div class="hourBar"><span style="transform:scaleX(0.08)"></span></div></div><div class="hourLabel">Unavailable</div>';
          els.hours.appendChild(empty);
          return;
        }

        const min = Math.min(...temps.filter(v => Number.isFinite(v)));
        const max = Math.max(...temps.filter(v => Number.isFinite(v)));
        const span = Math.max(1, max - min);

        times.forEach((t, i) => {
          const temp = temps[i];
          const pct = Number.isFinite(temp) ? ((temp - min) / span) : 0;
          const bar = Math.max(0.08, pct);
          const cell = document.createElement('div');
          cell.className = 'hour';
          cell.innerHTML = `
            <div class="hourTime">${fmtHour(t)}</div>
            <div class="hourTemp">${Number.isFinite(temp) ? `${Math.round(temp)}°` : '--'}</div>
            <div class="hourBarWrap">
              <div class="hourBar"><span style="transform:scaleX(${bar.toFixed(3)})"></span></div>
            </div>
            <div class="hourLabel">${Number.isFinite(temp) ? `${temp.toFixed(1)} °C` : 'No data'}</div>
          `;
          els.hours.appendChild(cell);
        });
      }

      async function load() {
        try {
          const res = await fetch(`${endpoint}?${params.toString()}`, { credentials: 'same-origin' });
          if (!res.ok) throw new Error(`Request failed with status ${res.status}`);
          const data = await res.json();

          const daily = data && data.daily;
          const hourly = data && data.hourly;

          const dailyTime = daily?.time?.[0];
          const max = daily?.temperature_2m_max?.[0];
          const min = daily?.temperature_2m_min?.[0];
          const code = daily?.weather_code?.[0];

          if (!dailyTime || !Number.isFinite(max) || !Number.isFinite(min)) {
            throw new Error('Missing daily weather data');
          }

          const hourlyTimes = [];
          const hourlyTemps = [];
          if (hourly?.time && hourly?.temperature_2m) {
            for (let i = 0; i < hourly.time.length; i++) {
              if (hourly.time[i] && hourly.time[i].slice(0, 10) === dateParam) {
                hourlyTimes.push(hourly.time[i]);
                hourlyTemps.push(hourly.temperature_2m[i]);
              }
            }
          }

          els.card.classList.remove('loading');
          els.status.textContent = 'Loaded';
          els.maxTemp.textContent = `${Math.round(max)}°`;
          els.maxTemp.classList.remove('skeleton');
          els.condition.classList.remove('skeleton');
          els.condition.textContent = `${iconFor(code)} ${weatherLabel(code)}`;
          els.summaryText.textContent = `The day’s weather in UTC, based on the selected coordinates, with hourly temperatures shown below.`;
          els.maxStat.textContent = `${max.toFixed(1)} °C`;
          els.minStat.textContent = `${min.toFixed(1)} °C`;
          els.metaPill.textContent = `Daily weather code ${code} · ${endpoint.includes('archive') ? 'archived' : 'forecast'} response`;
          renderHours(hourlyTimes, hourlyTemps);
        } catch (err) {
          setError('The requested weather data could not be loaded from the local API.');
          els.card.classList.remove('loading');
          els.maxTemp.textContent = '--';
          els.maxTemp.classList.remove('skeleton');
          els.condition.textContent = 'Unavailable';
          els.condition.classList.remove('skeleton');
          els.maxStat.textContent = '-- °C';
          els.minStat.textContent = '-- °C';
          els.hours.innerHTML = '';
        }
      }

      load();
    })();
  </script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total21,400html / css / js3,228 / 9,495 / 8,677
dom nodes54dom depth10
css rules54js presentyes
brightness51.9contrast24.9
colorfulness20.7whitespace52.1%

This slot's telemetry

prompt tokens16,072completion tokens6,299
total tokens22,371wall44.3 s
costrequest id
config.json568 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "gpt-5.4-mini-eff-low--cli--cursor--dev",
  "effort": "low",
  "family": "gpt",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "gpt-5.4-mini",
  "protocol": "cli",
  "served_model": "gpt-5.4-mini-low",
  "telemetry": {
    "completion_tokens": 20107,
    "cost_usd": null,
    "prompt_tokens": 50448,
    "total_tokens": 70555,
    "wall_ms": 149396
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-smoke",
  "config_id": "gpt-5.4-mini-eff-low--cli--cursor--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T16:49:36.384542+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T16:48:52.105376+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-12T16:50:07.728325+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T16:49:41.893264+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-12T16:50:42.827408+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T16:50:10.909581+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-12T16:51:33.896274+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T16:50:46.527953+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
    }
  }
}