gpt-5.6-luna @ xhigh · codex-oauth

codex-oauthxhigh
config
gpt-5.6-luna-eff-xhigh--cli--codex-oauth--dev
batch
2026-07-19--unified
transport
codex-cli-oauth-chatgpt
protocol
cli · plan
served model
gpt-5.6-luna
采集于
2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe
gpt-5.6-luna @xhigh · codex-oauth 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 24/24 · 24 命中 · 0 不符 · 0 未展示
  • 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.0" />
  <title>Weather Card</title>
  <style>
    :root {
      --bg: #08111f;
      --surface: rgba(19, 34, 56, 0.78);
      --surface-strong: #142943;
      --line: rgba(187, 220, 255, 0.14);
      --text: #f3f8ff;
      --muted: #8ea5bf;
      --soft: #c0d1e5;
      --cyan: #61d9ff;
      --blue: #6a8cff;
      --yellow: #ffd36a;
      --shadow: 0 24px 70px rgba(0, 0, 0, 0.34);
    }

    * {
      box-sizing: border-box;
    }

    html,
    body {
      min-width: 1280px;
      min-height: 800px;
      margin: 0;
    }

    body {
      overflow: hidden;
      color: var(--text);
      background:
        radial-gradient(circle at 15% 0%, rgba(77, 128, 215, 0.24), transparent 34%),
        radial-gradient(circle at 100% 100%, rgba(60, 219, 224, 0.1), transparent 32%),
        linear-gradient(135deg, #07101d 0%, #0d1b2d 52%, #091321 100%);
      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
      letter-spacing: -0.01em;
    }

    body::before {
      position: fixed;
      inset: 0;
      z-index: -1;
      pointer-events: none;
      content: "";
      opacity: 0.18;
      background-image:
        linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
      background-size: 42px 42px;
      mask-image: linear-gradient(to bottom, black, transparent 82%);
    }

    .app {
      width: 1180px;
      height: 740px;
      margin: 30px auto;
      display: flex;
      flex-direction: column;
    }

    .topbar {
      display: flex;
      align-items: center;
      justify-content: space-between;
      height: 54px;
      margin-bottom: 24px;
    }

    .brand {
      display: flex;
      align-items: center;
      gap: 13px;
      color: var(--text);
      font-size: 16px;
      font-weight: 750;
      letter-spacing: 0.02em;
    }

    .brand-mark {
      position: relative;
      width: 34px;
      height: 34px;
      overflow: hidden;
      border: 1px solid rgba(145, 224, 255, 0.4);
      border-radius: 11px;
      background: linear-gradient(135deg, rgba(66, 205, 255, 0.35), rgba(87, 119, 255, 0.35));
      box-shadow: inset 0 0 20px rgba(126, 233, 255, 0.12);
    }

    .brand-mark::before,
    .brand-mark::after {
      position: absolute;
      content: "";
      border-radius: 50%;
    }

    .brand-mark::before {
      width: 15px;
      height: 15px;
      top: 6px;
      left: 8px;
      background: var(--yellow);
      box-shadow: 0 0 15px rgba(255, 211, 106, 0.75);
    }

    .brand-mark::after {
      width: 19px;
      height: 9px;
      bottom: 6px;
      left: 7px;
      border-radius: 10px 10px 7px 7px;
      background: #d5f2ff;
      box-shadow: 5px 2px 0 -1px #bde8ff;
    }

    .unit-toggle {
      display: flex;
      align-items: center;
      gap: 4px;
      padding: 4px;
      border: 1px solid var(--line);
      border-radius: 10px;
      background: rgba(16, 30, 49, 0.62);
      color: var(--muted);
      font-size: 12px;
      font-weight: 700;
    }

    .unit-toggle span {
      padding: 6px 10px;
      border-radius: 7px;
    }

    .unit-toggle .active {
      color: #061523;
      background: var(--cyan);
      box-shadow: 0 4px 12px rgba(97, 217, 255, 0.22);
    }

    .dashboard {
      display: grid;
      grid-template-columns: 420px 1fr;
      gap: 20px;
      flex: 1;
      min-height: 0;
    }

    .card {
      position: relative;
      overflow: hidden;
      border: 1px solid var(--line);
      border-radius: 24px;
      background: var(--surface);
      box-shadow: var(--shadow);
      backdrop-filter: blur(18px);
    }

    .summary {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      padding: 32px;
      background:
        radial-gradient(circle at 84% 10%, rgba(99, 196, 255, 0.3), transparent 28%),
        radial-gradient(circle at 15% 88%, rgba(89, 96, 255, 0.18), transparent 34%),
        linear-gradient(145deg, rgba(27, 56, 88, 0.9), rgba(13, 27, 46, 0.86));
    }

    .summary::after {
      position: absolute;
      width: 330px;
      height: 330px;
      right: -126px;
      bottom: -146px;
      content: "";
      border: 1px solid rgba(143, 220, 255, 0.09);
      border-radius: 50%;
      box-shadow:
        0 0 0 34px rgba(143, 220, 255, 0.025),
        0 0 0 68px rgba(143, 220, 255, 0.018);
    }

    .summary-top,
    .summary-bottom {
      position: relative;
      z-index: 1;
    }

    .eyebrow {
      margin: 0 0 12px;
      color: var(--cyan);
      font-size: 11px;
      font-weight: 800;
      letter-spacing: 0.14em;
      text-transform: uppercase;
    }

    .location {
      margin: 0;
      max-width: 345px;
      overflow: hidden;
      font-size: 34px;
      font-weight: 760;
      line-height: 1.08;
      text-overflow: ellipsis;
      white-space: nowrap;
    }

    .date {
      margin: 10px 0 0;
      color: var(--soft);
      font-size: 14px;
    }

    .weather-visual {
      display: flex;
      align-items: center;
      gap: 25px;
      margin: 78px 0 56px;
    }

    .weather-orb {
      position: relative;
      width: 132px;
      height: 132px;
      flex: 0 0 auto;
      border-radius: 50%;
      background: radial-gradient(circle at 35% 28%, #fff3bd 0 7%, #ffd66a 25%, rgba(255, 195, 69, 0.17) 61%, transparent 70%);
      box-shadow: 0 0 50px rgba(255, 204, 86, 0.28);
    }

    .weather-orb::before,
    .weather-orb::after {
      position: absolute;
      content: "";
      border-radius: 50%;
    }

    .weather-orb::before {
      width: 52px;
      height: 30px;
      right: 13px;
      bottom: 32px;
      background: #d9f2ff;
      box-shadow: -22px 8px 0 -4px #c6e8fb, 11px 8px 0 -5px #c6e8fb;
    }

    .weather-orb::after {
      width: 76px;
      height: 8px;
      right: 3px;
      bottom: 26px;
      border-radius: 0;
      background: linear-gradient(90deg, transparent, rgba(127, 215, 255, 0.8), transparent);
      transform: rotate(-7deg);
      opacity: 0.9;
    }

    .current-temp {
      margin: 0;
      font-size: 72px;
      font-weight: 300;
      line-height: 0.9;
      letter-spacing: -0.08em;
    }

    .current-temp sup {
      position: relative;
      top: -25px;
      margin-left: 4px;
      font-size: 25px;
      font-weight: 600;
      letter-spacing: 0;
    }

    .condition {
      margin: 13px 0 0;
      color: var(--soft);
      font-size: 17px;
      font-weight: 600;
    }

    .range {
      display: flex;
      align-items: center;
      gap: 15px;
      margin-bottom: 26px;
      color: var(--soft);
      font-size: 14px;
      font-weight: 600;
    }

    .range span {
      color: var(--muted);
    }

    .range strong {
      color: var(--text);
      font-size: 18px;
    }

    .range-divider {
      width: 1px;
      height: 20px;
      background: var(--line);
    }

    .source {
      display: flex;
      align-items: center;
      gap: 8px;
      color: var(--muted);
      font-size: 11px;
    }

    .source-dot {
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: #64e4a4;
      box-shadow: 0 0 10px rgba(100, 228, 164, 0.75);
    }

    .details {
      display: flex;
      flex-direction: column;
      min-width: 0;
      padding: 26px;
    }

    .details-header {
      display: flex;
      align-items: flex-start;
      justify-content: space-between;
      margin-bottom: 21px;
    }

    .details-title {
      margin: 0;
      font-size: 20px;
      font-weight: 730;
    }

    .details-subtitle {
      margin: 5px 0 0;
      color: var(--muted);
      font-size: 12px;
    }

    .date-chip {
      padding: 8px 11px;
      border: 1px solid rgba(97, 217, 255, 0.22);
      border-radius: 9px;
      color: var(--cyan);
      background: rgba(97, 217, 255, 0.07);
      font-size: 11px;
      font-weight: 750;
      letter-spacing: 0.04em;
    }

    .hourly-chart {
      display: flex;
      flex-direction: column;
      min-height: 0;
      flex: 1;
      padding: 20px;
      border: 1px solid rgba(183, 217, 247, 0.1);
      border-radius: 17px;
      background: rgba(6, 17, 31, 0.28);
    }

    .chart-heading {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 17px;
    }

    .chart-heading h2 {
      margin: 0;
      font-size: 13px;
      font-weight: 750;
    }

    .chart-heading span {
      color: var(--muted);
      font-size: 11px;
    }

    .hourly-grid {
      display: grid;
      grid-template-columns: repeat(12, minmax(0, 1fr));
      grid-template-rows: repeat(2, 1fr);
      gap: 9px;
      min-height: 0;
      flex: 1;
    }

    .hour {
      position: relative;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      min-height: 132px;
      padding: 12px 9px 11px;
      overflow: hidden;
      border: 1px solid rgba(191, 224, 255, 0.09);
      border-radius: 12px;
      background: rgba(23, 43, 68, 0.56);
    }

    .hour:nth-child(n+13) {
      background: rgba(15, 34, 56, 0.48);
    }

    .hour::after {
      position: absolute;
      right: -13px;
      bottom: -28px;
      width: 56px;
      height: 56px;
      content: "";
      border: 1px solid rgba(97, 217, 255, 0.1);
      border-radius: 50%;
    }

    .hour-time {
      color: var(--muted);
      font-size: 10px;
      font-weight: 700;
      letter-spacing: 0.03em;
    }

    .hour-temp {
      position: relative;
      z-index: 1;
      margin-top: auto;
      color: var(--text);
      font-size: 19px;
      font-weight: 700;
    }

    .temperature-bar {
      position: relative;
      height: 5px;
      margin: 12px 0 1px;
      overflow: hidden;
      border-radius: 5px;
      background: rgba(120, 169, 205, 0.16);
    }

    .temperature-bar i {
      display: block;
      height: 100%;
      min-width: 6px;
      border-radius: inherit;
      background: linear-gradient(90deg, var(--blue), var(--cyan));
      box-shadow: 0 0 9px rgba(97, 217, 255, 0.5);
    }

    .hourly-footer {
      display: flex;
      align-items: center;
      justify-content: space-between;
      margin-top: 19px;
      padding-top: 16px;
      border-top: 1px solid var(--line);
      color: var(--muted);
      font-size: 11px;
    }

    .hourly-footer strong {
      color: var(--soft);
      font-weight: 650;
    }

    .state {
      position: absolute;
      inset: 0;
      z-index: 10;
      display: grid;
      place-items: center;
      padding: 40px;
      border-radius: 24px;
      background: rgba(9, 20, 35, 0.94);
      text-align: center;
    }

    .state.hidden {
      display: none;
    }

    .state-box {
      max-width: 370px;
    }

    .state-icon {
      width: 48px;
      height: 48px;
      margin: 0 auto 16px;
      border: 1px solid rgba(97, 217, 255, 0.35);
      border-radius: 15px;
      color: var(--cyan);
      background: rgba(97, 217, 255, 0.09);
      font-size: 25px;
      line-height: 46px;
    }

    .state h2 {
      margin: 0 0 8px;
      font-size: 21px;
    }

    .state p {
      margin: 0;
      color: var(--muted);
      font-size: 13px;
      line-height: 1.5;
    }

    @media (max-width: 900px) {
      html,
      body {
        min-width: 0;
        overflow: auto;
      }

      .app {
        width: calc(100% - 32px);
        height: auto;
        min-height: calc(100vh - 32px);
        margin: 16px auto;
      }

      .dashboard {
        grid-template-columns: 1fr;
      }

      .summary {
        min-height: 540px;
      }

      .hourly-grid {
        grid-template-columns: repeat(6, minmax(0, 1fr));
      }
    }
  </style>
</head>
<body>
  <main class="app">
    <header class="topbar">
      <div class="brand">
        <div class="brand-mark" aria-hidden="true"></div>
        <span>Atmos / Daily weather</span>
      </div>
      <div class="unit-toggle" aria-label="Temperature unit">
        <span class="active">°C</span>
        <span>°F</span>
      </div>
    </header>

    <section class="dashboard" aria-live="polite">
      <article class="card summary">
        <div class="summary-top">
          <p class="eyebrow">Local conditions</p>
          <h1 class="location" id="location">Berlin</h1>
          <p class="date" id="date">Loading date…</p>

          <div class="weather-visual">
            <div class="weather-orb" aria-hidden="true"></div>
            <div>
              <p class="current-temp" id="currentTemp">—<sup>°C</sup></p>
              <p class="condition" id="condition">Loading…</p>
            </div>
          </div>
        </div>

        <div class="summary-bottom">
          <div class="range">
            <span>High</span>
            <strong id="maxTemp">—</strong>
            <div class="range-divider"></div>
            <span>Low</span>
            <strong id="minTemp">—</strong>
          </div>
          <div class="source">
            <i class="source-dot"></i>
            <span>Open-Meteo · UTC</span>
          </div>
        </div>
      </article>

      <article class="card details">
        <div class="details-header">
          <div>
            <h2 class="details-title">Hourly temperature</h2>
            <p class="details-subtitle">A clear look at the day ahead</p>
          </div>
          <div class="date-chip" id="dateChip">—</div>
        </div>

        <div class="hourly-chart">
          <div class="chart-heading">
            <h2>Temperature curve</h2>
            <span>24-hour view</span>
          </div>
          <div class="hourly-grid" id="hourlyGrid"></div>
          <div class="hourly-footer">
            <span>Updates shown in <strong>degrees Celsius</strong></span>
            <span id="hourlyRange">—</span>
          </div>
        </div>
      </article>
    </section>

    <div class="state hidden" id="state">
      <div class="state-box">
        <div class="state-icon">!</div>
        <h2>Weather unavailable</h2>
        <p id="stateMessage">We couldn't load weather data for this date. Please try again later.</p>
      </div>
    </div>
  </main>

  <script>
    (() => {
      const params = new URLSearchParams(window.location.search);
      const todayUtc = new Date().toISOString().slice(0, 10);

      const rawLat = Number(params.get("lat"));
      const rawLon = Number(params.get("lon"));
      const lat = Number.isFinite(rawLat) ? rawLat : 52.52;
      const lon = Number.isFinite(rawLon) ? rawLon : 13.405;
      const name = (params.get("name") || "Berlin").trim() || "Berlin";
      const requestedDate = /^\d{4}-\d{2}-\d{2}$/.test(params.get("date") || "")
        ? params.get("date")
        : todayUtc;

      const locationEl = document.getElementById("location");
      const dateEl = document.getElementById("date");
      const dateChipEl = document.getElementById("dateChip");
      const conditionEl = document.getElementById("condition");
      const currentTempEl = document.getElementById("currentTemp");
      const maxTempEl = document.getElementById("maxTemp");
      const minTempEl = document.getElementById("minTemp");
      const hourlyGridEl = document.getElementById("hourlyGrid");
      const hourlyRangeEl = document.getElementById("hourlyRange");
      const stateEl = document.getElementById("state");
      const stateMessageEl = document.getElementById("stateMessage");

      const weatherDescriptions = {
        0: "Clear sky",
        1: "Mainly clear",
        2: "Partly cloudy",
        3: "Overcast",
        45: "Foggy",
        48: "Rime fog",
        51: "Light drizzle",
        53: "Drizzle",
        55: "Heavy drizzle",
        56: "Freezing drizzle",
        57: "Heavy freezing drizzle",
        61: "Light rain",
        63: "Rain",
        65: "Heavy rain",
        66: "Freezing rain",
        67: "Heavy freezing rain",
        71: "Light snow",
        73: "Snow",
        75: "Heavy snow",
        77: "Snow grains",
        80: "Light showers",
        81: "Showers",
        82: "Heavy showers",
        85: "Snow showers",
        86: "Heavy snow showers",
        95: "Thunderstorms",
        96: "Thunderstorms with hail",
        99: "Heavy thunderstorms with hail"
      };

      const formatDate = (value) => {
        const date = new Date(`${value}T00:00:00Z`);
        return new Intl.DateTimeFormat("en-US", {
          weekday: "long",
          month: "long",
          day: "numeric",
          year: "numeric",
          timeZone: "UTC"
        }).format(date);
      };

      const formatShortDate = (value) => {
        const date = new Date(`${value}T00:00:00Z`);
        return new Intl.DateTimeFormat("en-US", {
          month: "short",
          day: "numeric",
          timeZone: "UTC"
        }).format(date).toUpperCase();
      };

      const formatHour = (value, index) => {
        const match = String(value || "").match(/T(\d{2}):/);
        const hour = match ? Number(match[1]) : index;
        return `${String(hour).padStart(2, "0")}:00`;
      };

      const formatTemp = (value) => {
        if (value === null || value === undefined || !Number.isFinite(Number(value))) return "—";
        return `${Math.round(Number(value))}°`;
      };

      const showError = (message) => {
        stateMessageEl.textContent = message;
        stateEl.classList.remove("hidden");
      };

      const render = (data) => {
        const daily = data && data.daily;
        const hourly = data && data.hourly;

        if (
          !daily ||
          !hourly ||
          !Array.isArray(daily.time) ||
          !Array.isArray(daily.temperature_2m_max) ||
          !Array.isArray(daily.temperature_2m_min) ||
          !Array.isArray(daily.weather_code) ||
          !Array.isArray(hourly.temperature_2m)
        ) {
          throw new Error("The weather response was incomplete.");
        }

        const dayIndex = daily.time.indexOf(requestedDate);
        const max = daily.temperature_2m_max[dayIndex >= 0 ? dayIndex : 0];
        const min = daily.temperature_2m_min[dayIndex >= 0 ? dayIndex : 0];
        const code = daily.weather_code[dayIndex >= 0 ? dayIndex : 0];
        const values = hourly.temperature_2m
          .map(Number)
          .filter((value) => Number.isFinite(value));

        if (max === null || min === null || code === null || !values.length) {
          throw new Error("No weather data is available for this date.");
        }

        const current = values[0];
        const low = Math.min(...values);
        const high = Math.max(...values);
        const span = Math.max(high - low, 1);

        locationEl.textContent = name;
        locationEl.title = name;
        dateEl.textContent = formatDate(requestedDate);
        dateChipEl.textContent = formatShortDate(requestedDate);
        conditionEl.textContent = weatherDescriptions[Number(code)] || "Variable conditions";
        currentTempEl.innerHTML = `${Math.round(current)}<sup>°C</sup>`;
        maxTempEl.textContent = formatTemp(max);
        minTempEl.textContent = formatTemp(min);
        hourlyRangeEl.textContent = `${Math.round(low)}° — ${Math.round(high)}°`;

        hourlyGridEl.innerHTML = "";
        const hourlyTimes = Array.isArray(hourly.time) ? hourly.time : [];
        hourly.temperature_2m.forEach((temperature, index) => {
          const numericTemperature = Number(temperature);
          if (!Number.isFinite(numericTemperature)) return;

          const percent = Math.max(8, ((numericTemperature - low) / span) * 100);
          const hour = document.createElement("div");
          hour.className = "hour";
          hour.innerHTML = `
            <span class="hour-time">${formatHour(hourlyTimes[index], index)}</span>
            <div>
              <div class="hour-temp">${formatTemp(numericTemperature)}</div>
              <div class="temperature-bar" aria-hidden="true"><i style="width:${percent}%"></i></div>
            </div>
          `;
          hourlyGridEl.appendChild(hour);
        });

        if (!hourlyGridEl.children.length) {
          throw new Error("No hourly temperatures are available for this date.");
        }
      };

      const loadWeather = async () => {
        const endpoint = requestedDate < todayUtc ? "/api/om/archive" : "/api/om/forecast";
        const query = new URLSearchParams({
          latitude: String(lat),
          longitude: String(lon),
          daily: "temperature_2m_max,temperature_2m_min,weather_code",
          hourly: "temperature_2m",
          timezone: "UTC",
          temperature_unit: "celsius",
          start_date: requestedDate,
          end_date: requestedDate
        });

        try {
          const response = await fetch(`${endpoint}?${query.toString()}`, {
            method: "GET",
            headers: { "Accept": "application/json" }
          });

          if (!response.ok) {
            throw new Error(`Weather service returned ${response.status}.`);
          }

          const data = await response.json();
          render(data);
        } catch (error) {
          showError("We couldn't load weather data for this date. Please check the location or try again later.");
        }
      };

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

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

bytes 总计21,433html / css / js2,671 / 11,663 / 7,099
dom 节点58dom 深度10
css 规则68含 js
brightness37.6contrast25.1
colorfulness25.4留白71.8%

该 slot 的 telemetry

prompt tokens0completion tokens7,336
total tokens0wall142.9 s
costrequest id
config.json564 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "gpt-5.6-luna-eff-xhigh--cli--codex-oauth--dev",
  "effort": "xhigh",
  "family": "gpt",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "gpt-5.6-luna",
  "protocol": "cli",
  "served_model": "gpt-5.6-luna",
  "telemetry": {
    "completion_tokens": 39975,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 537653
  },
  "transport": "codex-cli-oauth-chatgpt",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-07-17--dev-codex-oauth-gpt-5.6-luna",
  "config_id": "gpt-5.6-luna-eff-xhigh--cli--codex-oauth--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T14:04:07.172843+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:02:05.462502+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-07-17T14:06:33.256877+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:04:10.372979+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-07-17T14:09:16.999809+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:06:36.950369+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-07-17T14:11:14.326806+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:09:21.305775+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
    }
  }
}