claude-opus-4-8-thinking @ high · cursor

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

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

similarity 邻居

限于 session 2026-07-19--unified

similarity 衡量本 session 内的趋同程度 —— 不是质量。

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

  • namematch
  • conditionmatch
  • datematch
  • max tempmatch展示值:25
  • min tempmatch展示值:16
  • hourlymatchcoverage 12/24 · 12 命中 · 0 不符 · 12 未展示
  • 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 {
    --card-w: 960px;
    --ease: cubic-bezier(0.4, 0.0, 0.2, 1);
  }
  * { margin: 0; padding: 0; box-sizing: border-box; }
  html, body {
    width: 100%;
    min-height: 100vh;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    color: #fff;
    background: #0b1026;
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
  }
  body {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 40px;
    background:
      radial-gradient(1200px 800px at 80% -10%, rgba(255,255,255,0.10), transparent 60%),
      var(--bg, linear-gradient(160deg, #1e3a8a 0%, #0f172a 100%));
    transition: background 0.8s var(--ease);
  }

  .card {
    width: var(--card-w);
    max-width: 100%;
    border-radius: 28px;
    padding: 40px 44px;
    position: relative;
    overflow: hidden;
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.16);
    box-shadow:
      0 30px 60px -20px rgba(0, 0, 0, 0.55),
      inset 0 1px 0 rgba(255, 255, 255, 0.18);
    backdrop-filter: blur(20px) saturate(120%);
    -webkit-backdrop-filter: blur(20px) saturate(120%);
    animation: rise 0.7s var(--ease) both;
  }
  @keyframes rise {
    from { opacity: 0; transform: translateY(24px) scale(0.98); }
    to   { opacity: 1; transform: translateY(0) scale(1); }
  }

  .top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 24px;
  }
  .loc { min-width: 0; }
  .loc h1 {
    font-size: 34px;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.1;
    display: flex;
    align-items: center;
    gap: 10px;
  }
  .loc h1 .pin { opacity: 0.7; font-size: 26px; }
  .loc .date {
    margin-top: 8px;
    font-size: 16px;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.72);
    letter-spacing: 0.01em;
  }
  .badge {
    flex-shrink: 0;
    font-size: 13px;
    font-weight: 600;
    padding: 7px 14px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.18);
    color: rgba(255, 255, 255, 0.9);
    white-space: nowrap;
  }

  .hero {
    display: flex;
    align-items: center;
    gap: 28px;
    margin-top: 34px;
  }
  .icon-wrap {
    width: 128px;
    height: 128px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    filter: drop-shadow(0 12px 22px rgba(0,0,0,0.35));
  }
  .icon-wrap svg { width: 118px; height: 118px; overflow: visible; }
  .temp-block { flex: 1; min-width: 0; }
  .temp-now {
    font-size: 92px;
    font-weight: 700;
    line-height: 0.9;
    letter-spacing: -0.04em;
    display: flex;
    align-items: flex-start;
  }
  .temp-now .deg { font-size: 44px; font-weight: 600; margin-top: 6px; }
  .cond {
    margin-top: 10px;
    font-size: 22px;
    font-weight: 600;
    color: rgba(255, 255, 255, 0.92);
  }
  .minmax {
    margin-top: 14px;
    display: flex;
    gap: 22px;
    font-size: 16px;
    color: rgba(255, 255, 255, 0.8);
  }
  .minmax .v { color: #fff; font-weight: 700; }
  .minmax .hi .dot { color: #ffd27a; }
  .minmax .lo .dot { color: #9ec5ff; }

  .divider {
    height: 1px;
    margin: 30px 0 22px;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.22), transparent);
  }

  .section-label {
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.6);
    margin-bottom: 16px;
  }

  .chart {
    width: 100%;
    height: 150px;
    display: block;
  }
  .chart .axis { stroke: rgba(255,255,255,0.12); stroke-width: 1; }
  .chart .line {
    fill: none;
    stroke: url(#lineGrad);
    stroke-width: 3;
    stroke-linecap: round;
    stroke-linejoin: round;
  }
  .chart .pt { fill: #fff; }
  .chart .lbl { fill: rgba(255,255,255,0.9); font-size: 11px; font-weight: 600; text-anchor: middle; }
  .chart .hr  { fill: rgba(255,255,255,0.5); font-size: 10px; text-anchor: middle; }

  .hours {
    margin-top: 18px;
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    gap: 6px;
  }
  .hours .h {
    text-align: center;
    padding: 8px 2px;
    border-radius: 10px;
    background: rgba(255,255,255,0.05);
  }
  .hours .h .t { font-size: 13px; font-weight: 700; }
  .hours .h .c { font-size: 10px; color: rgba(255,255,255,0.55); margin-top: 3px; }

  .msg {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 40px 20px;
    min-height: 200px;
  }
  .msg .em { font-size: 46px; margin-bottom: 16px; }
  .msg h2 { font-size: 22px; font-weight: 700; margin-bottom: 8px; }
  .msg p { font-size: 15px; color: rgba(255,255,255,0.7); max-width: 460px; }

  .skeleton { color: transparent !important; }
  .spin {
    width: 44px; height: 44px; border-radius: 50%;
    border: 4px solid rgba(255,255,255,0.2);
    border-top-color: #fff;
    animation: spin 0.9s linear infinite;
    margin-bottom: 18px;
  }
  @keyframes spin { to { transform: rotate(360deg); } }

  .foot {
    margin-top: 22px;
    font-size: 12px;
    color: rgba(255,255,255,0.45);
    text-align: right;
  }
</style>
</head>
<body>
  <main class="card" id="card">
    <div class="msg" id="loading">
      <div class="spin"></div>
      <p>Loading weather…</p>
    </div>
  </main>

<script>
(function () {
  "use strict";

  var qs = new URLSearchParams(location.search);
  function num(v, d) { var n = parseFloat(v); return isFinite(n) ? n : d; }

  var lat = num(qs.get("lat"), 52.52);
  var lon = num(qs.get("lon"), 13.405);
  var name = (qs.get("name") || "Berlin").trim() || "Berlin";

  function todayUTC() {
    var n = new Date();
    return n.getUTCFullYear() + "-" +
      String(n.getUTCMonth() + 1).padStart(2, "0") + "-" +
      String(n.getUTCDate()).padStart(2, "0");
  }
  var dateStr = qs.get("date");
  if (!dateStr || !/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) dateStr = todayUTC();

  // WMO weather code interpretation.
  var WMO = {
    0:  ["Clear sky", "sun"],
    1:  ["Mainly clear", "sun"],
    2:  ["Partly cloudy", "partly"],
    3:  ["Overcast", "cloud"],
    45: ["Fog", "fog"],
    48: ["Depositing rime fog", "fog"],
    51: ["Light drizzle", "drizzle"],
    53: ["Moderate drizzle", "drizzle"],
    55: ["Dense drizzle", "drizzle"],
    56: ["Light freezing drizzle", "drizzle"],
    57: ["Dense freezing drizzle", "drizzle"],
    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", "snow"],
    73: ["Moderate snow", "snow"],
    75: ["Heavy snow", "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 w/ slight hail", "storm"],
    99: ["Thunderstorm w/ heavy hail", "storm"]
  };
  function wmo(code) { return WMO[code] || ["Unknown", "cloud"]; }

  // Background gradient palettes keyed by icon family.
  var THEMES = {
    sun:     "linear-gradient(160deg, #2563eb 0%, #38bdf8 55%, #fcd34d 130%)",
    partly:  "linear-gradient(160deg, #1e40af 0%, #3b82f6 60%, #93c5fd 120%)",
    cloud:   "linear-gradient(160deg, #334155 0%, #475569 55%, #64748b 110%)",
    fog:     "linear-gradient(160deg, #475569 0%, #64748b 55%, #94a3b8 110%)",
    drizzle: "linear-gradient(160deg, #1e293b 0%, #334155 55%, #475569 110%)",
    rain:    "linear-gradient(160deg, #0f172a 0%, #1e3a5f 55%, #3b82f6 120%)",
    snow:    "linear-gradient(160deg, #334155 0%, #64748b 50%, #cbd5e1 120%)",
    storm:   "linear-gradient(160deg, #111827 0%, #312e81 60%, #6d28d9 120%)"
  };

  function icon(kind) {
    var s;
    switch (kind) {
      case "sun":
        return '<svg viewBox="0 0 100 100">' +
          '<g stroke="#ffe08a" stroke-width="4" stroke-linecap="round">' +
          rays() + '</g>' +
          '<circle cx="50" cy="50" r="19" fill="#ffd166" stroke="#ffe08a" stroke-width="3"/></svg>';
      case "partly":
        return '<svg viewBox="0 0 100 100">' +
          '<circle cx="38" cy="40" r="15" fill="#ffd166"/>' +
          cloud(52, 58, "#e2e8f0") + '</svg>';
      case "cloud":
        return '<svg viewBox="0 0 100 100">' + cloud(50, 52, "#cbd5e1") + '</svg>';
      case "fog":
        return '<svg viewBox="0 0 100 100">' + cloud(50, 44, "#cbd5e1") +
          '<g stroke="#e2e8f0" stroke-width="4" stroke-linecap="round">' +
          '<line x1="24" y1="72" x2="76" y2="72"/><line x1="30" y1="82" x2="70" y2="82"/></g></svg>';
      case "drizzle":
        return '<svg viewBox="0 0 100 100">' + cloud(50, 42, "#cbd5e1") +
          drops("#7dd3fc", [ [38,74],[52,74],[66,74] ]) + '</svg>';
      case "rain":
        return '<svg viewBox="0 0 100 100">' + cloud(50, 40, "#cbd5e1") +
          drops("#38bdf8", [ [34,72],[46,80],[58,72],[70,80] ]) + '</svg>';
      case "snow":
        return '<svg viewBox="0 0 100 100">' + cloud(50, 40, "#e2e8f0") +
          '<g fill="#fff">' +
          '<circle cx="36" cy="76" r="4"/><circle cx="52" cy="84" r="4"/><circle cx="68" cy="76" r="4"/></g></svg>';
      case "storm":
        return '<svg viewBox="0 0 100 100">' + cloud(50, 40, "#94a3b8") +
          '<polygon points="50,66 40,84 50,84 44,98 66,76 54,76 62,66" fill="#fcd34d"/></svg>';
      default:
        return '<svg viewBox="0 0 100 100">' + cloud(50, 52, "#cbd5e1") + '</svg>';
    }
    function rays() {
      var out = "", i, a, x1, y1, x2, y2;
      for (i = 0; i < 8; i++) {
        a = i * Math.PI / 4;
        x1 = 50 + Math.cos(a) * 27; y1 = 50 + Math.sin(a) * 27;
        x2 = 50 + Math.cos(a) * 36; y2 = 50 + Math.sin(a) * 36;
        out += '<line x1="' + x1.toFixed(1) + '" y1="' + y1.toFixed(1) +
               '" x2="' + x2.toFixed(1) + '" y2="' + y2.toFixed(1) + '"/>';
      }
      return out;
    }
    function cloud(cx, cy, col) {
      return '<g fill="' + col + '">' +
        '<circle cx="' + (cx-16) + '" cy="' + cy + '" r="14"/>' +
        '<circle cx="' + (cx+16) + '" cy="' + cy + '" r="15"/>' +
        '<circle cx="' + cx + '" cy="' + (cy-12) + '" r="17"/>' +
        '<rect x="' + (cx-30) + '" y="' + cy + '" width="60" height="16" rx="8"/></g>';
    }
    function drops(col, pts) {
      return '<g fill="' + col + '">' + pts.map(function (p) {
        return '<path d="M' + p[0] + ' ' + p[1] + ' q4 6 0 10 q-4 -4 0 -10 z"/>';
      }).join("") + '</g>';
    }
  }

  function fmtDate(str) {
    var p = str.split("-");
    var d = new Date(Date.UTC(+p[0], +p[1] - 1, +p[2]));
    return d.toLocaleDateString("en-US", {
      weekday: "long", year: "numeric", month: "long", day: "numeric", timeZone: "UTC"
    });
  }

  function isPast(str) { return str < todayUTC(); }

  function buildUrl() {
    var base = isPast(dateStr) ? "/api/om/archive" : "/api/om/forecast";
    var p = 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: dateStr,
      end_date: dateStr
    });
    return base + "?" + p.toString();
  }

  function esc(s) {
    return String(s).replace(/[&<>"']/g, function (c) {
      return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[c];
    });
  }
  function r0(n) { return Math.round(n); }

  function showError(detail) {
    document.body.style.setProperty("--bg", "linear-gradient(160deg,#3f1d2b 0%,#111827 100%)");
    document.getElementById("card").innerHTML =
      '<div class="msg">' +
      '<div class="em">&#9888;&#65039;</div>' +
      '<h2>Weather data unavailable</h2>' +
      '<p>' + esc(detail || "We couldn\u2019t load the forecast for " + name + " on this date. Please try again later.") + '</p>' +
      '</div>';
  }

  function render(data) {
    var daily = data && data.daily;
    var hourly = data && data.hourly;
    if (!daily || !daily.time || !daily.time.length) {
      showError("No forecast is available for " + name + " on " + dateStr + ".");
      return;
    }

    var tmax = daily.temperature_2m_max[0];
    var tmin = daily.temperature_2m_min[0];
    var code = daily.weather_code[0];
    var info = wmo(code);
    var kind = info[1];
    var condition = info[0];

    document.body.style.setProperty("--bg", THEMES[kind] || THEMES.cloud);

    // Hourly series for the requested date.
    var times = (hourly && hourly.time) || [];
    var temps = (hourly && hourly.temperature_2m) || [];
    var series = [];
    for (var i = 0; i < times.length; i++) {
      if (String(times[i]).slice(0, 10) === dateStr && temps[i] != null) {
        series.push({ hour: parseInt(String(times[i]).slice(11, 13), 10), t: temps[i] });
      }
    }

    // "Now" temperature: current hour if today, else midday-ish average fallback.
    var nowTemp;
    if (!isPast(dateStr) && dateStr === todayUTC() && series.length) {
      var h = new Date().getUTCHours();
      var match = series.filter(function (s) { return s.hour <= h; }).pop() || series[series.length - 1];
      nowTemp = match.t;
    } else if (series.length) {
      nowTemp = series.reduce(function (a, s) { return a + s.t; }, 0) / series.length;
    } else {
      nowTemp = (tmax + tmin) / 2;
    }

    var html =
      '<div class="top">' +
        '<div class="loc">' +
          '<h1><span class="pin">&#128205;</span>' + esc(name) + '</h1>' +
          '<div class="date">' + esc(fmtDate(dateStr)) + '</div>' +
        '</div>' +
        '<div class="badge">' + (isPast(dateStr) ? "Historical" : "Forecast") + ' &middot; UTC</div>' +
      '</div>' +
      '<div class="hero">' +
        '<div class="icon-wrap">' + icon(kind) + '</div>' +
        '<div class="temp-block">' +
          '<div class="temp-now">' + r0(nowTemp) + '<span class="deg">&deg;C</span></div>' +
          '<div class="cond">' + esc(condition) + '</div>' +
          '<div class="minmax">' +
            '<span class="hi"><span class="dot">&#9650;</span> High <span class="v">' + r0(tmax) + '&deg;</span></span>' +
            '<span class="lo"><span class="dot">&#9660;</span> Low <span class="v">' + r0(tmin) + '&deg;</span></span>' +
          '</div>' +
        '</div>' +
      '</div>' +
      '<div class="divider"></div>' +
      '<div class="section-label">Hourly temperature</div>' +
      chart(series) +
      grid(series) +
      '<div class="foot">' + esc(lat.toFixed(3)) + ', ' + esc(lon.toFixed(3)) + '</div>';

    document.getElementById("card").innerHTML = html;
  }

  function chart(series) {
    if (!series.length) return '<p style="color:rgba(255,255,255,.6)">Hourly data unavailable.</p>';
    var W = 872, H = 150, padX = 16, padTop = 26, padBot = 30;
    var xs = series.map(function (s) { return s.hour; });
    var ys = series.map(function (s) { return s.t; });
    var minY = Math.min.apply(null, ys), maxY = Math.max.apply(null, ys);
    if (minY === maxY) { minY -= 1; maxY += 1; }
    var span = maxY - minY;
    var innerW = W - padX * 2, innerH = H - padTop - padBot;
    function X(i) { return padX + (series.length === 1 ? innerW / 2 : innerW * i / (series.length - 1)); }
    function Y(v) { return padTop + innerH * (1 - (v - minY) / span); }

    var pts = series.map(function (s, i) { return [X(i), Y(s.t)]; });
    var d = pts.map(function (p, i) { return (i ? "L" : "M") + p[0].toFixed(1) + " " + p[1].toFixed(1); }).join(" ");
    var area = "M" + pts[0][0].toFixed(1) + " " + (H - padBot) + " " +
      pts.map(function (p) { return "L" + p[0].toFixed(1) + " " + p[1].toFixed(1); }).join(" ") +
      " L" + pts[pts.length - 1][0].toFixed(1) + " " + (H - padBot) + " Z";

    // Label a subset to avoid clutter.
    var step = Math.ceil(series.length / 12);
    var labels = "", dots = "", hrs = "";
    series.forEach(function (s, i) {
      var x = X(i).toFixed(1), y = Y(s.t).toFixed(1);
      if (i % step === 0 || i === series.length - 1) {
        labels += '<text class="lbl" x="' + x + '" y="' + (Y(s.t) - 10).toFixed(1) + '">' + r0(s.t) + '&deg;</text>';
        dots += '<circle class="pt" cx="' + x + '" cy="' + y + '" r="3"/>';
        hrs += '<text class="hr" x="' + x + '" y="' + (H - 10) + '">' + String(s.hour).padStart(2, "0") + '</text>';
      }
    });

    return '<svg class="chart" viewBox="0 0 ' + W + ' ' + H + '" preserveAspectRatio="none">' +
      '<defs>' +
      '<linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">' +
        '<stop offset="0" stop-color="#9ec5ff"/><stop offset="1" stop-color="#ffd27a"/></linearGradient>' +
      '<linearGradient id="areaGrad" x1="0" y1="0" x2="0" y2="1">' +
        '<stop offset="0" stop-color="rgba(255,255,255,0.28)"/><stop offset="1" stop-color="rgba(255,255,255,0)"/></linearGradient>' +
      '</defs>' +
      '<path d="' + area + '" fill="url(#areaGrad)"/>' +
      '<path class="line" d="' + d + '"/>' +
      dots + labels + hrs +
      '</svg>';
  }

  function grid(series) {
    if (!series.length) return "";
    // Show up to 24 hours, condensed to a readable strip.
    var out = '<div class="hours">';
    var pick = series;
    if (series.length > 12) {
      // sample every other hour to keep 12 columns
      pick = series.filter(function (s, i) { return i % 2 === 0; }).slice(0, 12);
    }
    pick.forEach(function (s) {
      out += '<div class="h"><div class="t">' + r0(s.t) + '&deg;</div>' +
             '<div class="c">' + String(s.hour).padStart(2, "0") + ':00</div></div>';
    });
    out += '</div>';
    return out;
  }

  function load() {
    var url = buildUrl();
    var done = false;
    var timer = setTimeout(function () {
      if (!done) showError("The request timed out while contacting the weather service.");
    }, 15000);

    fetch(url, { headers: { "Accept": "application/json" } })
      .then(function (res) {
        if (!res.ok) throw new Error("HTTP " + res.status);
        return res.json();
      })
      .then(function (data) {
        done = true; clearTimeout(timer);
        if (data && data.error) { showError(data.reason || "The weather service returned an error."); return; }
        render(data);
      })
      .catch(function (err) {
        done = true; clearTimeout(timer);
        showError("We couldn\u2019t reach the weather service (" + (err && err.message ? err.message : "network error") + ").");
      });
  }

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

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

bytes 总计18,805html / css / js368 / 5,213 / 13,224
dom 节点12dom 深度5
css 规则46含 js是
brightness74.2contrast18.8
colorfulness12.8留白40.8%

该 slot 的 telemetry

prompt tokens6completion tokens10,398
total tokens10,404wall117.5 s
cost—request id—
config.json607 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "claude-opus-4-8-thinking-eff-high--cli--cursor--dev",
  "effort": "high",
  "family": "claude",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "claude-opus-4-8-thinking",
  "protocol": "cli",
  "served_model": "claude-opus-4-8-thinking-high",
  "telemetry": {
    "completion_tokens": 28383,
    "cost_usd": null,
    "prompt_tokens": 14,
    "total_tokens": 28397,
    "wall_ms": 318213
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-s0",
  "config_id": "claude-opus-4-8-thinking-eff-high--cli--cursor--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T17:08:26.751354+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:06:29.242823+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-12T17:09:26.216845+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:08:30.048755+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-12T17:10:12.828092+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:09:29.639295+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-12T17:11:57.618723+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:10:16.260774+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
    }
  }
}