kimi-k2.6 @ disabled · api

apidisabled
config
kimi-k2.6-eff-disabled--api--official--dev
batch
2026-07-19--unified
transport
moonshot-official-api
protocol
api · metered
served model
kimi-k2.6
captured
Jul 18, 2026, 11:54 AM · N=4
variant
live
slot 0 · P-q · sandboxed iframe
kimi-k2.6 @disabled · api 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 neighbors

within session 2026-07-19--unified

similarity measures convergence within this session — not quality.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempmismatchshown: 17
  • min tempmatchshown: 16
  • 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>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            width: 1280px;
            height: 800px;
            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            overflow: hidden;
        }

        .weather-card {
            width: 720px;
            background: linear-gradient(160deg, rgba(255,255,255,0.12) 0%, rgba(255,255,255,0.05) 100%);
            border-radius: 32px;
            padding: 48px;
            backdrop-filter: blur(20px);
            -webkit-backdrop-filter: blur(20px);
            border: 1px solid rgba(255,255,255,0.1);
            box-shadow: 0 32px 64px rgba(0,0,0,0.3), 0 0 0 1px rgba(255,255,255,0.05) inset;
            position: relative;
            overflow: hidden;
        }

        .weather-card::before {
            content: '';
            position: absolute;
            top: -50%;
            left: -50%;
            width: 200%;
            height: 200%;
            background: radial-gradient(circle at 30% 20%, rgba(100, 180, 255, 0.15) 0%, transparent 50%),
                        radial-gradient(circle at 70% 80%, rgba(255, 150, 100, 0.1) 0%, transparent 50%);
            pointer-events: none;
        }

        .header {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            margin-bottom: 32px;
            position: relative;
            z-index: 1;
        }

        .location-info h1 {
            color: #fff;
            font-size: 42px;
            font-weight: 700;
            letter-spacing: -0.5px;
            margin-bottom: 8px;
            text-shadow: 0 2px 8px rgba(0,0,0,0.2);
        }

        .location-info .date {
            color: rgba(255,255,255,0.7);
            font-size: 18px;
            font-weight: 400;
            letter-spacing: 0.5px;
        }

        .weather-icon-container {
            width: 120px;
            height: 120px;
            display: flex;
            align-items: center;
            justify-content: center;
            position: relative;
        }

        .weather-icon {
            width: 100px;
            height: 100px;
        }

        .main-temp {
            text-align: center;
            margin-bottom: 32px;
            position: relative;
            z-index: 1;
        }

        .temp-display {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 48px;
        }

        .temp-item {
            text-align: center;
        }

        .temp-item .label {
            color: rgba(255,255,255,0.6);
            font-size: 14px;
            text-transform: uppercase;
            letter-spacing: 2px;
            margin-bottom: 8px;
            font-weight: 600;
        }

        .temp-item .value {
            color: #fff;
            font-size: 64px;
            font-weight: 200;
            line-height: 1;
        }

        .temp-item .value span {
            font-size: 32px;
            font-weight: 300;
            color: rgba(255,255,255,0.7);
        }

        .temp-divider {
            width: 2px;
            height: 80px;
            background: linear-gradient(to bottom, transparent, rgba(255,255,255,0.3), transparent);
        }

        .condition {
            text-align: center;
            margin-bottom: 40px;
            position: relative;
            z-index: 1;
        }

        .condition-text {
            color: rgba(255,255,255,0.9);
            font-size: 24px;
            font-weight: 500;
            letter-spacing: 1px;
            text-transform: capitalize;
        }

        .hourly-section {
            position: relative;
            z-index: 1;
        }

        .hourly-title {
            color: rgba(255,255,255,0.6);
            font-size: 14px;
            text-transform: uppercase;
            letter-spacing: 2px;
            margin-bottom: 20px;
            font-weight: 600;
        }

        .hourly-chart {
            display: flex;
            align-items: flex-end;
            justify-content: space-between;
            height: 160px;
            padding: 0 8px;
            position: relative;
        }

        .hourly-chart::before {
            content: '';
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            height: 1px;
            background: linear-gradient(to right, transparent, rgba(255,255,255,0.2), transparent);
        }

        .hour-bar {
            display: flex;
            flex-direction: column;
            align-items: center;
            flex: 1;
            max-width: 48px;
            position: relative;
        }

        .bar-fill {
            width: 8px;
            border-radius: 4px 4px 0 0;
            background: linear-gradient(to top, rgba(100, 180, 255, 0.6), rgba(150, 220, 255, 0.9));
            transition: height 0.5s ease;
            position: relative;
            margin-bottom: 12px;
        }

        .bar-fill::after {
            content: '';
            position: absolute;
            top: 0;
            left: -4px;
            right: -4px;
            bottom: 0;
            background: inherit;
            border-radius: 4px 4px 0 0;
            filter: blur(8px);
            opacity: 0.5;
        }

        .bar-temp {
            color: rgba(255,255,255,0.9);
            font-size: 13px;
            font-weight: 600;
            margin-bottom: 8px;
            min-height: 20px;
        }

        .bar-hour {
            color: rgba(255,255,255,0.5);
            font-size: 12px;
            font-weight: 500;
        }

        .error-message {
            text-align: center;
            color: rgba(255, 150, 150, 0.9);
            font-size: 18px;
            padding: 40px;
            position: relative;
            z-index: 1;
        }

        .error-message svg {
            width: 64px;
            height: 64px;
            margin-bottom: 16px;
            opacity: 0.8;
        }

        .loading {
            text-align: center;
            color: rgba(255,255,255,0.7);
            font-size: 18px;
            padding: 40px;
            position: relative;
            z-index: 1;
        }

        .spinner {
            width: 48px;
            height: 48px;
            border: 3px solid rgba(255,255,255,0.1);
            border-top-color: rgba(100, 180, 255, 0.9);
            border-radius: 50%;
            animation: spin 1s linear infinite;
            margin: 0 auto 16px;
        }

        @keyframes spin {
            to { transform: rotate(360deg); }
        }

        .fade-in {
            animation: fadeIn 0.6s ease forwards;
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }
    </style>
</head>
<body>
    <div class="weather-card" id="card">
        <div class="loading" id="loading">
            <div class="spinner"></div>
            Loading weather data...
        </div>
    </div>

    <script>
        (function() {
            // Parse URL parameters
            const params = new URLSearchParams(window.location.search);
            const lat = parseFloat(params.get('lat')) || 52.52;
            const lon = parseFloat(params.get('lon')) || 13.405;
            const name = params.get('name') || 'Berlin';
            const dateParam = params.get('date');
            const today = new Date();
            const date = dateParam || today.toISOString().split('T')[0];

            // Determine if date is in the past
            const requestedDate = new Date(date + 'T00:00:00Z');
            const now = new Date();
            now.setUTCHours(0, 0, 0, 0);
            const isPast = requestedDate < now;

            const card = document.getElementById('card');
            const loading = document.getElementById('loading');

            // Weather code to condition mapping
            function getWeatherCondition(code) {
                const conditions = {
                    0: 'Clear Sky',
                    1: 'Mainly Clear',
                    2: 'Partly Cloudy',
                    3: 'Overcast',
                    45: 'Foggy',
                    48: 'Depositing Rime Fog',
                    51: 'Light Drizzle',
                    53: 'Moderate Drizzle',
                    55: 'Dense Drizzle',
                    56: 'Light Freezing Drizzle',
                    57: 'Dense Freezing Drizzle',
                    61: 'Slight Rain',
                    63: 'Moderate Rain',
                    65: 'Heavy Rain',
                    66: 'Light Freezing Rain',
                    67: 'Heavy Freezing Rain',
                    71: 'Slight Snow',
                    73: 'Moderate Snow',
                    75: 'Heavy Snow',
                    77: 'Snow Grains',
                    80: 'Slight Rain Showers',
                    81: 'Moderate Rain Showers',
                    82: 'Violent Rain Showers',
                    85: 'Slight Snow Showers',
                    86: 'Heavy Snow Showers',
                    95: 'Thunderstorm',
                    96: 'Thunderstorm with Hail',
                    99: 'Thunderstorm with Heavy Hail'
                };
                return conditions[code] || 'Unknown';
            }

            // Get weather icon SVG based on code
            function getWeatherIcon(code) {
                const isDay = true; // Simplified
                if (code === 0 || code === 1) {
                    // Sun
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <radialGradient id="sunGrad" cx="50%" cy="50%" r="50%">
                                <stop offset="0%" stop-color="#FFD700"/>
                                <stop offset="100%" stop-color="#FFA500"/>
                            </radialGradient>
                        </defs>
                        <circle cx="50" cy="50" r="22" fill="url(#sunGrad)"/>
                        <g stroke="#FFD700" stroke-width="3" stroke-linecap="round">
                            <line x1="50" y1="12" x2="50" y2="20"/>
                            <line x1="50" y1="80" x2="50" y2="88"/>
                            <line x1="12" y1="50" x2="20" y2="50"/>
                            <line x1="80" y1="50" x2="88" y2="50"/>
                            <line x1="23" y1="23" x2="29" y2="29"/>
                            <line x1="71" y1="71" x2="77" y2="77"/>
                            <line x1="23" y1="77" x2="29" y2="71"/>
                            <line x1="71" y1="29" x2="77" y2="23"/>
                        </g>
                    </svg>`;
                } else if (code === 2) {
                    // Partly cloudy
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <radialGradient id="sunGrad2" cx="50%" cy="50%" r="50%">
                                <stop offset="0%" stop-color="#FFD700"/>
                                <stop offset="100%" stop-color="#FFA500"/>
                            </radialGradient>
                            <linearGradient id="cloudGrad" x1="0%" y1="0%" x2="0%" y2="100%">
                                <stop offset="0%" stop-color="#E8E8E8"/>
                                <stop offset="100%" stop-color="#B0B0B0"/>
                            </linearGradient>
                        </defs>
                        <circle cx="35" cy="35" r="18" fill="url(#sunGrad2)"/>
                        <path d="M55 45 Q65 35 75 45 Q85 40 90 50 Q95 55 90 65 Q85 75 70 75 L45 75 Q30 75 30 60 Q30 45 45 45 Z" fill="url(#cloudGrad)"/>
                    </svg>`;
                } else if (code === 3) {
                    // Overcast
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <linearGradient id="cloudGrad2" x1="0%" y1="0%" x2="0%" y2="100%">
                                <stop offset="0%" stop-color="#C0C0C0"/>
                                <stop offset="100%" stop-color="#808080"/>
                            </linearGradient>
                        </defs>
                        <path d="M25 55 Q35 45 50 50 Q60 40 75 50 Q85 45 90 55 Q95 65 85 75 Q75 85 55 85 L35 85 Q15 85 15 65 Q15 55 25 55 Z" fill="url(#cloudGrad2)"/>
                        <path d="M35 40 Q45 30 60 35 Q70 25 80 35 Q85 30 85 40 Q90 50 80 55" fill="none" stroke="#A0A0A0" stroke-width="2"/>
                    </svg>`;
                } else if (code >= 51 && code <= 67) {
                    // Drizzle/Rain
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <linearGradient id="rainCloud" x1="0%" y1="0%" x2="0%" y2="100%">
                                <stop offset="0%" stop-color="#A0A0A0"/>
                                <stop offset="100%" stop-color="#606060"/>
                            </linearGradient>
                        </defs>
                        <path d="M25 45 Q35 35 50 40 Q60 30 75 40 Q85 35 90 45 Q95 55 85 65 Q75 75 55 75 L35 75 Q15 75 15 55 Q15 45 25 45 Z" fill="url(#rainCloud)"/>
                        <g stroke="#64B4FF" stroke-width="2" stroke-linecap="round">
                            <line x1="35" y1="78" x2="32" y2="88"/>
                            <line x1="50" y1="78" x2="47" y2="90"/>
                            <line x1="65" y1="78" x2="62" y2="86"/>
                            <line x1="42" y1="82" x2="40" y2="92"/>
                            <line x1="58" y1="82" x2="55" y2="92"/>
                        </g>
                    </svg>`;
                } else if (code >= 71 && code <= 77) {
                    // Snow
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <linearGradient id="snowCloud" x1="0%" y1="0%" x2="0%" y2="100%">
                                <stop offset="0%" stop-color="#E0E0E0"/>
                                <stop offset="100%" stop-color="#A0A0A0"/>
                            </linearGradient>
                        </defs>
                        <path d="M25 45 Q35 35 50 40 Q60 30 75 40 Q85 35 90 45 Q95 55 85 65 Q75 75 55 75 L35 75 Q15 75 15 55 Q15 45 25 45 Z" fill="url(#snowCloud)"/>
                        <g fill="#fff">
                            <circle cx="35" cy="82" r="3"/>
                            <circle cx="50" cy="85" r="3"/>
                            <circle cx="65" cy="80" r="3"/>
                            <circle cx="42" cy="90" r="2"/>
                            <circle cx="58" cy="92" r="2"/>
                        </g>
                    </svg>`;
                } else if (code >= 95) {
                    // Thunderstorm
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <linearGradient id="stormCloud" x1="0%" y1="0%" x2="0%" y2="100%">
                                <stop offset="0%" stop-color="#505050"/>
                                <stop offset="100%" stop-color="#303030"/>
                            </linearGradient>
                        </defs>
                        <path d="M25 45 Q35 35 50 40 Q60 30 75 40 Q85 35 90 45 Q95 55 85 65 Q75 75 55 75 L35 75 Q15 75 15 55 Q15 45 25 45 Z" fill="url(#stormCloud)"/>
                        <polygon points="48,75 42,88 50,88 46,100 58,82 50,82" fill="#FFD700"/>
                    </svg>`;
                } else {
                    // Default cloud
                    return `<svg class="weather-icon" viewBox="0 0 100 100">
                        <defs>
                            <linearGradient id="defaultCloud" x1="0%" y1="0%" x2="0%" y2="100%">
                                <stop offset="0%" stop-color="#D0D0D0"/>
                                <stop offset="100%" stop-color="#909090"/>
                            </linearGradient>
                        </defs>
                        <path d="M25 45 Q35 35 50 40 Q60 30 75 40 Q85 35 90 45 Q95 55 85 65 Q75 75 55 75 L35 75 Q15 75 15 55 Q15 45 25 45 Z" fill="url(#defaultCloud)"/>
                    </svg>`;
                }
            }

            // Format date nicely
            function formatDate(dateStr) {
                const d = new Date(dateStr + 'T00:00:00Z');
                const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC' };
                return d.toLocaleDateString('en-US', options);
            }

            // Build API URL
            const baseUrl = isPast ? '/api/om/archive' : '/api/om/forecast';
            const apiUrl = `${baseUrl}?latitude=${lat}&longitude=${lon}&daily=temperature_2m_max,temperature_2m_min,weather_code&hourly=temperature_2m&timezone=UTC&temperature_unit=celsius&start_date=${date}&end_date=${date}`;

            fetch(apiUrl)
                .then(response => {
                    if (!response.ok) throw new Error('Failed to fetch weather data');
                    return response.json();
                })
                .then(data => {
                    if (!data.daily || !data.daily.temperature_2m_max || data.daily.temperature_2m_max.length === 0) {
                        throw new Error('No data available for this date');
                    }

                    const maxTemp = Math.round(data.daily.temperature_2m_max[0]);
                    const minTemp = Math.round(data.daily.temperature_2m_min[0]);
                    const weatherCode = data.daily.weather_code[0];
                    const condition = getWeatherCondition(weatherCode);

                    // Get hourly data for the day (24 hours)
                    const hourlyTimes = data.hourly.time;
                    const hourlyTemps = data.hourly.temperature_2m;
                    
                    // Find indices for the requested date
                    const datePrefix = date + 'T';
                    const dayIndices = [];
                    for (let i = 0; i < hourlyTimes.length; i++) {
                        if (hourlyTimes[i].startsWith(datePrefix)) {
                            dayIndices.push(i);
                        }
                    }

                    // Sample every 3 hours for display (8 bars)
                    const sampleIndices = [];
                    for (let i = 0; i < dayIndices.length; i += 3) {
                        if (sampleIndices.length < 8) {
                            sampleIndices.push(dayIndices[i]);
                        }
                    }

                    const hourlyData = sampleIndices.map(idx => {
                        const time = hourlyTimes[idx];
                        const hour = parseInt(time.split('T')[1].split(':')[0]);
                        return {
                            hour: hour,
                            temp: Math.round(hourlyTemps[idx])
                        };
                    });

                    // Calculate bar heights
                    const allTemps = hourlyData.map(h => h.temp);
                    const tempMin = Math.min(...allTemps, minTemp) - 2;
                    const tempMax = Math.max(...allTemps, maxTemp) + 2;
                    const tempRange = tempMax - tempMin || 1;

                    // Build HTML
                    const barsHtml = hourlyData.map(h => {
                        const heightPercent = ((h.temp - tempMin) / tempRange) * 100;
                        const barHeight = Math.max(heightPercent, 10);
                        const hourLabel = h.hour === 0 ? '12a' : h.hour === 12 ? '12p' : h.hour < 12 ? h.hour + 'a' : (h.hour - 12) + 'p';
                        
                        return `
                            <div class="hour-bar">
                                <div class="bar-temp">${h.temp}°</div>
                                <div class="bar-fill" style="height: ${barHeight}px;"></div>
                                <div class="bar-hour">${hourLabel}</div>
                            </div>
                        `;
                    }).join('');

                    const html = `
                        <div class="fade-in">
                            <div class="header">
                                <div class="location-info">
                                    <h1>${name}</h1>
                                    <div class="date">${formatDate(date)}</div>
                                </div>
                                <div class="weather-icon-container">
                                    ${getWeatherIcon(weatherCode)}
                                </div>
                            </div>
                            <div class="main-temp">
                                <div class="temp-display">
                                    <div class="temp-item">
                                        <div class="label">High</div>
                                        <div class="value">${maxTemp}<span>°C</span></div>
                                    </div>
                                    <div class="temp-divider"></div>
                                    <div class="temp-item">
                                        <div class="label">Low</div>
                                        <div class="value">${minTemp}<span>°C</span></div>
                                    </div>
                                </div>
                            </div>
                            <div class="condition">
                                <div class="condition-text">${condition}</div>
                            </div>
                            <div class="hourly-section">
                                <div class="hourly-title">Hourly Temperature</div>
                                <div class="hourly-chart">
                                    ${barsHtml}
                                </div>
                            </div>
                        </div>
                    `;

                    loading.style.display = 'none';
                    card.insertAdjacentHTML('beforeend', html);
                })
                .catch(error => {
                    loading.style.display = 'none';
                    card.insertAdjacentHTML('beforeend', `
                        <div class="error-message fade-in">
                            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                                <circle cx="12" cy="12" r="10"/>
                                <line x1="12" y1="8" x2="12" y2="12"/>
                                <line x1="12" y1="16" x2="12.01" y2="16"/>
                            </svg>
                            <div>Unable to load weather data</div>
                            <div style="font-size: 14px; margin-top: 8px; opacity: 0.7;">${error.message}</div>
                        </div>
                    `);
                });
        })();
    </script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total23,628html / css / js433 / 7,095 / 16,100
dom nodes11dom depth5
css rules37js presentyes
brightness48.6contrast20.8
colorfulness23.0whitespace54.6%

This slot's telemetry

prompt tokens312completion tokens5,622
total tokens5,934wall137.5 s
costrequest id
config.json562 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_KIMI_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "kimi-k2.6-eff-disabled--api--official--dev",
  "effort": "disabled",
  "family": "kimi",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "kimi-k2.6",
  "protocol": "api",
  "served_model": "kimi-k2.6",
  "telemetry": {
    "completion_tokens": 43512,
    "cost_usd": null,
    "prompt_tokens": 2464,
    "total_tokens": 45976,
    "wall_ms": 1101782
  },
  "transport": "moonshot-official-api",
  "vendor_sanction_ref": null
}
send-log4.7 KB
{
  "N": 4,
  "batch_id": "2026-07-20--official-kimi",
  "config_id": "kimi-k2.6-eff-disabled--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T02:20:04.064262+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:18:48.949346+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-20T02:22:24.410319+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:20:06.860698+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-20T02:25:11.179834+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:22:28.937350+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-20T02:27:29.169713+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:25:15.215937+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-20T02:30:59.527288+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:27:32.646637+00:00"
        }
      ],
      "block_index": 2,
      "model_reaching_attempt_index": 0,
      "slot_index": 2,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T02:33:17.526591+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:31:03.972946+00:00"
        }
      ],
      "block_index": 2,
      "model_reaching_attempt_index": 0,
      "slot_index": 2,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T02:34:38.404741+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:33:20.945618+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T02:37:36.316534+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T02:34:41.265773+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-q"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}