glm-5.1 · opencode

opencode
config
glm-5.1--cli--opencode--dev
batch
2026-07-19--unified
transport
opencode-cli-isolated-xdg-go-subscription
protocol
cli · plan
served model
glm-5.1
采集于
2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe
glm-5.1 · opencode P-q slot 0 截图

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

similarity 邻居

限于 session 2026-07-19--unified

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

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

  • namematch
  • conditionmatch
  • datematch
  • max tempambiguousno-remaining-candidate
  • 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=1280, initial-scale=1">
<title>Weather Card</title>
<style>
  * { margin: 0; padding: 0; box-sizing: border-box; }
  html, body {
    width: 1280px;
    height: 800px;
    overflow: hidden;
    font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
    background: #0f172a;
    color: #e2e8f0;
    -webkit-font-smoothing: antialiased;
  }
  .stage {
    width: 1280px;
    height: 800px;
    display: flex;
    align-items: center;
    justify-content: center;
    background:
      radial-gradient(1200px 600px at 20% 0%, rgba(99,102,241,0.25), transparent 60%),
      radial-gradient(900px 500px at 100% 100%, rgba(56,189,248,0.18), transparent 60%),
      linear-gradient(160deg, #0b1224 0%, #131a2e 50%, #0f172a 100%);
  }
  .card {
    width: 1180px;
    height: 700px;
    border-radius: 28px;
    background: linear-gradient(160deg, rgba(30,41,59,0.85) 0%, rgba(15,23,42,0.85) 100%);
    border: 1px solid rgba(148,163,184,0.15);
    box-shadow: 0 30px 80px -20px rgba(0,0,0,0.7), inset 0 1px 0 rgba(255,255,255,0.05);
    display: grid;
    grid-template-rows: auto 1fr auto;
    padding: 40px 48px 32px;
    position: relative;
    overflow: hidden;
  }
  .card::before {
    content: "";
    position: absolute;
    inset: 0;
    background: radial-gradient(800px 400px at 85% -10%, rgba(99,102,241,0.18), transparent 60%);
    pointer-events: none;
  }
  .header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    position: relative;
    z-index: 1;
  }
  .loc-name {
    font-size: 34px;
    font-weight: 700;
    letter-spacing: -0.02em;
    background: linear-gradient(180deg, #fff, #cbd5e1);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }
  .loc-date {
    margin-top: 6px;
    font-size: 15px;
    color: #94a3b8;
    letter-spacing: 0.03em;
  }
  .condition-badge {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 12px 20px;
    border-radius: 999px;
    background: rgba(30,41,59,0.6);
    border: 1px solid rgba(148,163,184,0.2);
    backdrop-filter: blur(8px);
  }
  .icon {
    width: 44px;
    height: 44px;
    flex: 0 0 44px;
  }
  .condition-text {
    font-size: 18px;
    font-weight: 600;
    color: #e2e8f0;
  }
  .body {
    display: grid;
    grid-template-columns: 1fr 1.15fr;
    gap: 40px;
    padding: 28px 0 10px;
    position: relative;
    z-index: 1;
  }
  .left {
    display: flex;
    flex-direction: column;
    justify-content: center;
  }
  .temps {
    display: flex;
    align-items: baseline;
    gap: 28px;
  }
  .t-max {
    font-size: 128px;
    font-weight: 200;
    line-height: 1;
    background: linear-gradient(180deg, #fef3c7, #fbbf24);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    letter-spacing: -0.05em;
  }
  .t-max .deg {
    font-size: 64px;
    font-weight: 300;
    vertical-align: super;
    margin-left: 4px;
  }
  .t-min {
    font-size: 40px;
    font-weight: 300;
    color: #7dd3fc;
    letter-spacing: -0.02em;
  }
  .t-min .lbl {
    font-size: 14px;
    color: #94a3b8;
    display: block;
    margin-bottom: 4px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    font-weight: 500;
  }
  .right {
    display: flex;
    flex-direction: column;
  }
  .panel-title {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: #94a3b8;
    font-weight: 600;
    margin-bottom: 16px;
  }
  .chart-wrap {
    flex: 1;
    position: relative;
    min-height: 0;
  }
  .footer {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-top: 18px;
    border-top: 1px solid rgba(148,163,184,0.12);
    position: relative;
    z-index: 1;
  }
  .footer .meta {
    font-size: 12px;
    color: #64748b;
    letter-spacing: 0.06em;
  }
  .err {
    text-align: center;
    color: #fca5a5;
    font-size: 20px;
    font-weight: 500;
    padding: 60px;
  }
  .err small {
    display: block;
    margin-top: 10px;
    font-size: 14px;
    color: #94a3b8;
    font-weight: 400;
  }
  .skeleton {
    background: linear-gradient(90deg, rgba(148,163,184,0.06), rgba(148,163,184,0.16), rgba(148,163,184,0.06));
    background-size: 200% 100%;
    animation: shimmer 1.4s infinite;
    border-radius: 8px;
  }
  @keyframes shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
  }
</style>
</head>
<body>
<div class="stage">
  <div class="card" id="card">
    <div id="content"></div>
  </div>
</div>
<script>
(function () {
  "use strict";

  const params = new URLSearchParams(location.search);
  const lat = parseFloat(params.get("lat") ?? "52.52");
  const lon = parseFloat(params.get("lon") ?? "13.405");
  const name = params.get("name") || "Berlin";
  let date = params.get("date");
  if (!date) {
    const d = new Date();
    date = d.toISOString().slice(0, 10);
  }

  const root = document.getElementById("content");
  const card = document.getElementById("card");

  renderSkeleton();

  const isPast = date < todayUTC();
  const endpoint = (isPast ? "/api/om/archive" : "/api/om/forecast");
  const qs = 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: date,
    end_date: date
  });

  fetch(`${endpoint}?${qs.toString()}`)
    .then(r => {
      if (!r.ok) throw new Error("HTTP " + r.status);
      return r.json();
    })
    .then(d => render(d, name, date))
    .catch(err => renderError(err));

  function todayUTC() {
    const d = new Date();
    return d.toISOString().slice(0, 10);
  }

  function renderSkeleton() {
    card.innerHTML = `
      <div class="header">
        <div>
          <div class="skeleton" style="width:260px;height:36px"></div>
          <div class="skeleton" style="width:140px;height:18px;margin-top:10px"></div>
        </div>
        <div class="skeleton" style="width:200px;height:68px;border-radius:999px"></div>
      </div>
      <div class="body">
        <div class="left">
          <div class="skeleton" style="width:320px;height:128px"></div>
          <div class="skeleton" style="width:180px;height:48px;margin-top:24px"></div>
        </div>
        <div class="right">
          <div class="skeleton" style="width:160px;height:16px;margin-bottom:18px"></div>
          <div class="skeleton" style="flex:1"></div>
        </div>
      </div>
      <div class="footer">
        <div class="skeleton" style="width:240px;height:14px"></div>
        <div class="skeleton" style="width:120px;height:14px"></div>
      </div>`;
  }

  function renderError(err) {
    card.innerHTML = `
      <div class="err">
        Unable to load weather data
        <small>${escapeHtml(String(err && err.message ? err.message : err))}</small>
      </div>`;
  }

  function render(d, name, date) {
    if (!d || !d.daily || !d.hourly) {
      renderError(new Error("Malformed API response"));
      return;
    }
    const tMax = d.daily.temperature_2m_max && d.daily.temperature_2m_max[0];
    const tMin = d.daily.temperature_2m_min && d.daily.temperature_2m_min[0];
    const code = d.daily.weather_code && d.daily.weather_code[0];
    const hours = d.hourly.time || [];
    const temps = d.hourly.temperature_2m || [];

    if (tMax == null || tMin == null || code == null) {
      renderError(new Error("Missing daily data for requested date"));
      return;
    }

    const cond = weatherLabel(code);
    const condIcon = weatherIcon(code);

    const pairs = [];
    for (let i = 0; i < hours.length; i++) {
      if (hours[i] && hours[i].slice(0, 10) === date) {
        pairs.push({ h: Number(hours[i].slice(11, 13)), t: temps[i] });
      }
    }
    if (pairs.length === 0) {
      renderError(new Error("No hourly data for requested date"));
      return;
    }

    card.innerHTML = `
      <div class="header">
        <div>
          <div class="loc-name">${escapeHtml(name)}</div>
          <div class="loc-date">${escapeHtml(formatDate(date))}</div>
        </div>
        <div class="condition-badge">
          ${condIcon}
          <div class="condition-text">${escapeHtml(cond)}</div>
        </div>
      </div>
      <div class="body">
        <div class="left">
          <div class="temps">
            <div class="t-max">${formatTemp(tMax)}<span class="deg">°</span></div>
            <div class="t-min">
              <span class="lbl">Low</span>
              ${formatTemp(tMin)
            </div>
          </div>
        </div>
        <div class="right">
          <div class="panel-title">Hourly temperature · °C</div>
          <div class="chart-wrap">
            <canvas id="hourly"></canvas>
          </div>
        </div>
      </div>
      <div class="footer">
        <div class="meta">${pairs.length} hourly readings · UTC</div>
        <div class="meta">${isPast ? "Archive API" : "Forecast API"} · Open-Meteo</div>
      </div>`;

    drawChart(document.getElementById("hourly"), pairs);
  }

  function drawChart(canvas, pairs) {
    const wrap = canvas.parentElement;
    const W = wrap.clientWidth;
    const H = wrap.clientHeight;
    const dpr = window.devicePixelRatio || 1;
    canvas.width = W * dpr;
    canvas.height = H * dpr;
    canvas.style.width = W + "px";
    canvas.style.height = H + "px";
    const ctx = canvas.getContext("2d");
    ctx.scale(dpr, dpr);

    const padL = 32, padR = 14, padT = 18, padB = 28;
    const cw = W - padL - padR;
    const ch = H - padT - padB;

    const xs = pairs.map(p => p.h);
    const ys = pairs.map(p => p.t);
    const ymin = Math.min(...ys);
    const ymax = Math.max(...ys);
    const range = (ymax - ymin) || 1;
    const pad = range * 0.18;
    const lo = ymin - pad;
    const hi = ymax + pad;
    const span = hi - lo;

    const X = h => padL + ((h - xs[0]) / 23) * cw;
    const Y = t => padT + (1 - (t - lo) / span) * ch;

    // gridlines
    ctx.strokeStyle = "rgba(148,163,184,0.12)";
    ctx.lineWidth = 1;
    ctx.font = "11px -apple-system, sans-serif";
    ctx.fillStyle = "#64748b";
    ctx.textBaseline = "middle";
    const steps = 4;
    for (let i = 0; i <= steps; i++) {
      const t = lo + (span * i) / steps;
      const y = Y(t);
      ctx.beginPath();
      ctx.moveTo(padL, y);
      ctx.lineTo(W - padR, y);
      ctx.stroke();
      ctx.textAlign = "right";
      ctx.fillText(Math.round(t) + "°", padL - 8, y);
    }

    // x labels (0, 6, 12, 18, 23)
    ctx.textAlign = "center";
    ctx.textBaseline = "top";
    [0, 6, 12, 18, 23].forEach(h => {
      const x = X(h);
      ctx.fillText(String(h).padStart(2, "0"), x, padT + ch + 8);
    });

    // smooth area
    const pts = pairs.map(p => ({ x: X(p.h), y: Y(p.t) }));
    const grad = ctx.createLinearGradient(0, padT, 0, padT + ch);
    grad.addColorStop(0, "rgba(251,191,36,0.45)");
    grad.addColorStop(1, "rgba(251,191,36,0.02)");

    ctx.beginPath();
    ctx.moveTo(pts[0].x, padT + ch);
    ctx.lineTo(pts[0].x, pts[0].y);
    for (let i = 1; i < pts.length; i++) {
      const p0 = pts[i - 1], p1 = pts[i];
      const cx = (p0.x + p1.x) / 2;
      ctx.bezierCurveTo(cx, p0.y, cx, p1.y, p1.x, p1.y);
    }
    ctx.lineTo(pts[pts.length - 1].x, padT + ch);
    ctx.closePath();
    ctx.fillStyle = grad;
    ctx.fill();

    // line
    ctx.beginPath();
    ctx.moveTo(pts[0].x, pts[0].y);
    for (let i = 1; i < pts.length; i++) {
      const p0 = pts[i - 1], p1 = pts[i];
      const cx = (p0.x + p1.x) / 2;
      ctx.bezierCurveTo(cx, p0.y, cx, p1.y, p1.x, p1.y);
    }
    ctx.strokeStyle = "#fbbf24";
    ctx.lineWidth = 2.5;
    ctx.lineJoin = "round";
    ctx.lineCap = "round";
    ctx.shadowColor = "rgba(251,191,36,0.4)";
    ctx.shadowBlur = 10;
    ctx.stroke();
    ctx.shadowBlur = 0;

    // peak marker
    let maxIdx = 0, minIdx = 0;
    ys.forEach((y, i) => { if (y > ys[maxIdx]) maxIdx = i; if (y < ys[minIdx]) minIdx = i; });
    drawDot(ctx, pts[maxIdx], ys[maxIdx], "#fde68a");
    drawDot(ctx, pts[minIdx], ys[minIdx], "#7dd3fc");
  }

  function drawDot(ctx, p, val, color) {
    ctx.beginPath();
    ctx.arc(p.x, p.y, 4, 0, Math.PI * 2);
    ctx.fillStyle = color;
    ctx.fill();
    ctx.strokeStyle = "rgba(15,23,42,0.8)";
    ctx.lineWidth = 2;
    ctx.stroke();
    ctx.fillStyle = "#e2e8f0";
    ctx.font = "600 11px -apple-system, sans-serif";
    ctx.textAlign = "center";
    ctx.textBaseline = "bottom";
    ctx.fillText(Math.round(val) + "°", p.x, p.y - 8);
  }

  function formatTemp(v) {
    return Math.round(v).toString();
  }

  function formatDate(yyyymmdd) {
    const d = new Date(yyyymmdd + "T00:00:00Z");
    return d.toLocaleDateString("en-US", {
      weekday: "long", year: "numeric", month: "long", day: "numeric", timeZone: "UTC"
    });
  }

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

  function weatherLabel(code) {
    if (code === 0) return "Clear sky";
    if (code === 1) return "Mainly clear";
    if (code === 2) return "Partly cloudy";
    if (code === 3) return "Overcast";
    if (code === 45 || code === 48) return "Fog";
    if (code >= 51 && code <= 57) return "Drizzle";
    if (code >= 61 && code <= 67) return "Rain";
    if (code >= 71 && code <= 77) return "Snow";
    if (code >= 80 && code <= 82) return "Rain showers";
    if (code >= 85 && code <= 86) return "Snow showers";
    if (code === 95) return "Thunderstorm";
    if (code >= 96) return "Thunderstorm with hail";
    return "Unknown";
  }

  function weatherIcon(code) {
    const stroke = "#e2e8f0";
    if (code === 0) return svgSun(stroke);
    if (code <= 2) return svgSunCloud(stroke);
    if (code === 3) return svgCloud(stroke);
    if (code === 45 || code === 48) return svgFog(stroke);
    if (code >= 51 && code <= 67) return svgRain(stroke);
    if (code >= 71 && code <= 77) return svgSnow(stroke);
    if (code >= 80 && code <= 86) return svgRain(stroke);
    if (code >= 95) return svgStorm(stroke);
    return svgCloud(stroke);
  }
  function svgSun(c) {
    return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="${c}" stroke-width="2.4" stroke-linecap="round">
      <circle cx="24" cy="24" r="9" fill="rgba(251,191,36,0.25)" stroke="#fbbf24"/>
      <g stroke="#fbbf24">
        <line x1="24" y1="6" x2="24" y2="11"/><line x1="24" y1="37" x2="24" y2="42"/>
        <line x1="6" y1="24" x2="11" y2="24"/><line x1="37" y1="24" x2="42" y2="24"/>
        <line x1="11.3" y1="11.3" x2="14.8" y2="14.8"/><line x1="33.2" y1="33.2" x2="36.7" y2="36.7"/>
        <line x1="36.7" y1="11.3" x2="33.2" y2="14.8"/><line x1="14.8" y1="33.2" x2="11.3" y2="36.7"/>
      </g></svg>`;
  }
  function svgCloud(c) {
    return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="#cbd5e1" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round">
      <path d="M14 33h22a8 8 0 0 0 0-16 11 11 0 0 0-21-3 7 7 0 0 0-1 19z" fill="rgba(148,163,184,0.25)"/></svg>`;
  }
  function svgSunCloud(c) {
    return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="#cbd5e1" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
      <circle cx="17" cy="17" r="6" fill="rgba(251,191,36,0.25)" stroke="#fbbf24"/>
      <g stroke="#fbbf24"><line x1="17" y1="5" x2="17" y2="8"/><line x1="5" y1="17" x2="8" y2="17"/><line x1="8.5" y1="8.5" x2="10.6" y2="10.6"/><line x1="25.5" y1="8.5" x2="23.4" y2="10.6"/></g>
      <path d="M18 38h16a7 7 0 0 0 0-14 10 10 0 0 0-19 2 6 6 0 0 0-3 12z" fill="rgba(148,163,184,0.25)"/></svg>`;
  }
  function svgFog(c) { return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="#cbd5e1" stroke-width="2.4" stroke-linecap="round">
      <path d="M14 28h22a7 7 0 0 0 0-14 11 11 0 0 0-21-3 7 7 0 0 0-1 17z" fill="rgba(148,163,184,0.22)"/>
      <line x1="10" y1="34" x2="38" y2="34"/><line x1="14" y1="40" x2="34" y2="40"/></svg>`; }
  function svgRain(c) { return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="#7dd3fc" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
      <path d="M14 26h22a8 8 0 0 0 0-16 11 11 0 0 0-21-3 7 7 0 0 0-1 19z" fill="rgba(148,163,184,0.25)" stroke="#cbd5e1"/>
      <line x1="16" y1="33" x2="13" y2="40"/><line x1="24" y1="33" x2="21" y2="40"/><line x1="32" y1="33" x2="29" y2="40"/></svg>`; }
  function svgSnow(c) { return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="#e0f2fe" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
      <path d="M14 26h22a8 8 0 0 0 0-16 11 11 0 0 0-21-3 7 7 0 0 0-1 19z" fill="rgba(148,163,184,0.25)" stroke="#cbd5e1"/>
      <circle cx="16" cy="37" r="1.5" fill="#e0f2fe"/><circle cx="24" cy="39" r="1.5" fill="#e0f2fe"/><circle cx="32" cy="37" r="1.5" fill="#e0f2fe"/></svg>`; }
  function svgStorm(c) { return `<svg class="icon" viewBox="0 0 48 48" fill="none" stroke="#c4b5fd" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
      <path d="M14 26h22a8 8 0 0 0 0-16 11 11 0 0 0-21-3 7 7 0 0 0-1 19z" fill="rgba(148,163,184,0.25)" stroke="#cbd5e1"/>
      <path d="M24 30l-5 9h5l-2 7 7-11h-5l2-5z" fill="rgba(251,191,36,0.5)" stroke="#fbbf24" stroke-width="1.4"/></svg>`; }
})();
</script>
</body>
</html>

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

bytes 总计17,551html / css / js312 / 4,444 / 12,795
dom 节点11dom 深度5
css 规则29含 js
brightness34.9contrast14.8
colorfulness23.5留白86.0%

该 slot 的 telemetry

prompt tokens0completion tokens0
total tokens0wall122.3 s
costrequest id
config.json558 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_OPENCODE_KEY",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "glm-5.1--cli--opencode--dev",
  "effort": null,
  "family": "glm",
  "m": {
    "min": 2,
    "q": 1
  },
  "model_id": "glm-5.1",
  "protocol": "cli",
  "served_model": "glm-5.1",
  "telemetry": {
    "completion_tokens": null,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 334026
  },
  "transport": "opencode-cli-isolated-xdg-go-subscription",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-07-18--dev-opencode-cli",
  "config_id": "glm-5.1--cli--opencode--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T14:39:56.326135+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:37:54.040140+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:41:51.584565+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:40:00.165352+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:43:35.609011+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T14:41:55.284413+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-07-17T14:45:20.231360+00:00",
          "http_status": null,
          "outcome": "infra-failed",
          "reached_model": true,
          "reason": "mid-stream-death",
          "request_id": null,
          "started_at": "2026-07-17T14:43:39.389606+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "infra-failed",
      "variant": "P-q"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}