deepseek-v4-flash-0731 @ max · api

apimax
config
deepseek-v4-flash-0731-eff-max--api--official--dev
batch
2026-07-19--unified
transport
deepseek-official-api
protocol
api · metered
served model
deepseek-v4-flash
captured
Jul 18, 2026, 11:54 AM · N=4
variant
live
slot 0 · P-q · sandboxed iframe
deepseek-v4-flash-0731 @max · api P-q slot 0 screenshot

delivered in a markdown fence — the model wrapped its HTML in a code fence; extraction stripped it. Recorded here for traceability.

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 tempmatchshown: 25
  • min tempmatchshown: 16
  • hourlymismatchcoverage 0/24 · 0 match · 7 mismatch · 17 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">
    <title>Weather Card</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            background: linear-gradient(135deg, #e0e7f1, #f0f4f8);
            transition: background 0.6s ease;
            padding: 20px;
        }

        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(24px) scale(0.98);
            }
            to {
                opacity: 1;
                transform: translateY(0) scale(1);
            }
        }

        .weather-card {
            background: rgba(255, 255, 255, 0.92);
            backdrop-filter: blur(24px);
            -webkit-backdrop-filter: blur(24px);
            border-radius: 28px;
            box-shadow:
                0 24px 70px rgba(0, 0, 0, 0.10),
                0 0 0 1px rgba(255, 255, 255, 0.6) inset;
            padding: 44px 48px 40px;
            width: 720px;
            max-width: 100%;
            animation: fadeInUp 0.5s ease-out;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }

        .weather-card:hover {
            transform: translateY(-3px);
            box-shadow:
                0 30px 80px rgba(0, 0, 0, 0.14),
                0 0 0 1px rgba(255, 255, 255, 0.7) inset;
        }

        .card-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 36px;
        }

        .location {
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .location-pin {
            font-size: 22px;
            line-height: 1;
            filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
        }

        .location-name {
            font-size: 26px;
            font-weight: 700;
            color: #1a202c;
            letter-spacing: -0.03em;
        }

        .date-label {
            font-size: 14px;
            font-weight: 500;
            color: #7a8699;
            background: #f1f5f9;
            padding: 6px 14px;
            border-radius: 20px;
            white-space: nowrap;
        }

        .weather-hero {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 36px;
            margin-bottom: 32px;
        }

        .weather-icon {
            width: 110px;
            height: 110px;
            border-radius: 50%;
            background: linear-gradient(135deg, rgba(59, 130, 246, 0.18), rgba(139, 92, 246, 0.10));
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 58px;
            box-shadow:
                0 12px 30px rgba(59, 130, 246, 0.18),
                0 0 0 1px rgba(255, 255, 255, 0.6) inset;
            flex-shrink: 0;
        }

        .weather-info {
            text-align: left;
        }

        .weather-condition {
            font-size: 22px;
            font-weight: 600;
            color: #1a202c;
            letter-spacing: -0.01em;
            margin-bottom: 4px;
        }

        .weather-desc {
            font-size: 14px;
            color: #7a8699;
            line-height: 1.4;
        }

        .temp-section {
            display: flex;
            justify-content: center;
            gap: 16px;
            margin-bottom: 30px;
        }

        .temp-box {
            background: linear-gradient(135deg, #f8fafc, #f1f5f9);
            border-radius: 18px;
            padding: 22px 36px;
            text-align: center;
            flex: 1;
            max-width: 220px;
            box-shadow:
                0 4px 12px rgba(0, 0, 0, 0.03),
                0 0 0 1px rgba(0, 0, 0, 0.03) inset;
            transition: transform 0.2s ease;
        }

        .temp-box:hover {
            transform: scale(1.02);
        }

        .temp-value {
            font-size: 46px;
            font-weight: 800;
            line-height: 1;
            letter-spacing: -0.04em;
        }

        .temp-label {
            font-size: 11px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.1em;
            color: #94a3b8;
            margin-top: 10px;
        }

        .temp-max .temp-value {
            color: #ef4444;
        }

        .temp-min .temp-value {
            color: #3b82f6;
        }

        .divider {
            height: 1px;
            background: linear-gradient(to right, transparent, rgba(0, 0, 0, 0.07), transparent);
            margin-bottom: 26px;
        }

        .hourly-title {
            font-size: 12px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.12em;
            color: #94a3b8;
            text-align: center;
            margin-bottom: 14px;
        }

        .chart-container {
            width: 100%;
            overflow: hidden;
            border-radius: 14px;
            background: linear-gradient(180deg, rgba(248, 250, 252, 0.6), rgba(255, 255, 255, 0.3));
            padding: 6px 0 0;
        }

        .chart-container svg {
            display: block;
        }

        .error-card {
            background: rgba(255, 255, 255, 0.95);
            border-radius: 28px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.10);
            padding: 52px;
            text-align: center;
            width: 480px;
            max-width: 100%;
            animation: fadeInUp 0.4s ease-out;
        }

        .error-icon {
            font-size: 52px;
            margin-bottom: 18px;
            line-height: 1;
        }

        .error-title {
            font-size: 22px;
            font-weight: 700;
            color: #1a202c;
            margin-bottom: 8px;
        }

        .error-message {
            font-size: 14px;
            color: #64748b;
            line-height: 1.5;
        }
    </style>
</head>
<body>
    <div id="app"></div>
    <script>
        (function() {
            'use strict';

            const app = document.getElementById('app');

            /* ===== Query params ===== */
            const params = new URLSearchParams(window.location.search);

            const latParam = parseFloat(params.get('lat'));
            const lonParam = parseFloat(params.get('lon'));
            const lat = !isNaN(latParam) ? latParam : 52.52;
            const lon = !isNaN(lonParam) ? lonParam : 13.405;

            const nameParam = params.get('name');
            const name = nameParam && nameParam.trim() ? nameParam.trim() : 'Berlin';

            const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
            const dateParam = params.get('date');
            const todayUTC = new Date().toISOString().slice(0, 10);
            const date = (dateParam && dateRegex.test(dateParam)) ? dateParam : todayUTC;

            /* ===== API endpoint ===== */
            const apiBase = (date < todayUTC) ? '/api/om/archive' : '/api/om/forecast';

            const url = apiBase +
                '?latitude=' + encodeURIComponent(lat) +
                '&longitude=' + encodeURIComponent(lon) +
                '&daily=temperature_2m_max,temperature_2m_min,weather_code' +
                '&hourly=temperature_2m' +
                '&timezone=UTC' +
                '&temperature_unit=celsius' +
                '&start_date=' + date +
                '&end_date=' + date;

            /* ===== Condition mappings ===== */
            function weatherCondition(code) {
                const map = {
                    0: 'Clear sky',
                    1: 'Mainly clear',
                    2: 'Partly cloudy',
                    3: 'Overcast',
                    45: 'Fog',
                    48: '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 slight hail',
                    99: 'Thunderstorm with heavy hail'
                };
                return map[code] || 'Unknown';
            }

            function weatherEmoji(code) {
                if (code === 0) return '☀️';
                if (code === 1) return '🌤️';
                if (code === 2) return '⛅';
                if (code === 3) return '☁️';
                if (code === 45 || code === 48) return '🌫️';
                if (code >= 51 && code <= 57) return '🌧️';
                if (code >= 61 && code <= 67) return '🌧️';
                if (code >= 71 && code <= 77) return '🌨️';
                if (code >= 80 && code <= 82) return '🌦️';
                if (code >= 85 && code <= 86) return '🌨️';
                if (code >= 95) return '⛈️';
                return '🌡️';
            }

            function backgroundGradient(code) {
                if (code === 0 || code === 1) {
                    return 'linear-gradient(135deg, #0a84d0 0%, #1cb0f6 50%, #8ed8f8 100%)';
                } else if (code === 2) {
                    return 'linear-gradient(135deg, #4a7fba 0%, #6e99c4 50%, #a8c6e0 100%)';
                } else if (code === 3) {
                    return 'linear-gradient(135deg, #5b6b7a 0%, #748596 50%, #9aacbb 100%)';
                } else if (code === 45 || code === 48) {
                    return 'linear-gradient(135deg, #7a8a9a 0%, #96a5b5 50%, #bdc8d1 100%)';
                } else if ((code >= 51 && code <= 57) || (code >= 61 && code <= 67) || (code >= 80 && code <= 82)) {
                    return 'linear-gradient(135deg, #1a3a5c 0%, #2c5e8a 50%, #4a7fa8 100%)';
                } else if ((code >= 71 && code <= 77) || (code >= 85 && code <= 86)) {
                    return 'linear-gradient(135deg, #4a5f70 0%, #7a8a9a 50%, #c0ccd4 100%)';
                } else if (code >= 95) {
                    return 'linear-gradient(135deg, #0f1a2e 0%, #1e2f45 50%, #334a68 100%)';
                }
                return 'linear-gradient(135deg, #e0e7f1 0%, #f0f4f8 50%, #dbe4ec 100%)';
            }

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

            /* ===== Nice ticks ===== */
            function niceTicks(min, max, count) {
                const span = max - min;
                if (span === 0) return [Math.floor(min - 1), Math.ceil(max + 1)];
                const roughStep = span / count;
                const mag = Math.pow(10, Math.floor(Math.log10(roughStep)));
                const err = roughStep / mag;
                let step;
                if (err >= 7.5) step = 10;
                else if (err >= 3.5) step = 5;
                else if (err >= 1.5) step = 2;
                else step = 1;
                step *= mag;
                const niceMin = Math.floor(min / step) * step;
                const niceMax = Math.ceil(max / step) * step;
                const result = [];
                for (let t = niceMin; t <= niceMax + step * 0.5; t += step) {
                    result.push(Math.round(t * 100) / 100);
                }
                return result;
            }

            /* ===== Generate chart ===== */
            function generateChart(temperatures, times) {
                if (!temperatures || temperatures.length === 0) {
                    return '<p style="text-align:center;color:#94a3b8;padding:20px;">No hourly data available</p>';
                }

                const width = 560;
                const height = 190;
                const pad = { top: 22, right: 24, bottom: 30, left: 42 };
                const chartW = width - pad.left - pad.right;
                const chartH = height - pad.top - pad.bottom;

                let minT = Math.min.apply(null, temperatures);
                let maxT = Math.max.apply(null, temperatures);
                if (minT === maxT) {
                    minT -= 1;
                    maxT += 1;
                }
                const range = maxT - minT;
                const yMin = minT - range * 0.15;
                const yMax = maxT + range * 0.15;

                function x(i) {
                    return pad.left + (i / (temperatures.length - 1)) * chartW;
                }

                function y(t) {
                    return pad.top + (1 - (t - yMin) / (yMax - yMin)) * chartH;
                }

                let line = 'M ' + x(0).toFixed(1) + ' ' + y(temperatures[0]).toFixed(1);
                for (let i = 1; i < temperatures.length; i++) {
                    line += ' L ' + x(i).toFixed(1) + ' ' + y(temperatures[i]).toFixed(1);
                }

                const area = line +
                    ' L ' + x(temperatures.length - 1).toFixed(1) + ' ' + (pad.top + chartH).toFixed(1) +
                    ' L ' + x(0).toFixed(1) + ' ' + (pad.top + chartH).toFixed(1) + ' Z';

                let dots = '';
                for (let i = 0; i < temperatures.length; i++) {
                    const hourLabel = times && times[i] ? times[i].replace('T', ' ') : ('Hour ' + i);
                    dots += '<circle cx="' + x(i).toFixed(1) + '" cy="' + y(temperatures[i]).toFixed(1) +
                        '" r="3" fill="#ffffff" stroke="#3b82f6" stroke-width="2">' +
                        '<title>' + escapeHtml(hourLabel) + ' — ' + Math.round(temperatures[i]) + '°C</title>' +
                        '</circle>';
                }

                const ticks = niceTicks(yMin, yMax, 4);
                let grid = '';
                for (let i = 0; i < ticks.length; i++) {
                    const ty = y(ticks[i]);
                    grid += '<line x1="' + pad.left + '" y1="' + ty.toFixed(1) + '" x2="' + (width - pad.right) +
                        '" y2="' + ty.toFixed(1) + '" stroke="#e8edf2" stroke-width="1" stroke-dasharray="4 4"/>';
                    grid += '<text x="' + (pad.left - 8) + '" y="' + (ty + 4).toFixed(1) +
                        '" text-anchor="end" font-size="11" fill="#94a3b8" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif">' +
                        Math.round(ticks[i]) + '°</text>';
                }

                const labelIndices = [];
                const step = Math.ceil(temperatures.length / 6);
                for (let i = 0; i < temperatures.length; i += step) {
                    labelIndices.push(i);
                }
                if (labelIndices[labelIndices.length - 1] !== temperatures.length - 1) {
                    labelIndices.push(temperatures.length - 1);
                }

                let xLabels = '';
                for (let i = 0; i < labelIndices.length; i++) {
                    const idx = labelIndices[i];
                    let hour = idx;
                    if (times && times[idx]) {
                        const parts = times[idx].split('T');
                        if (parts.length > 1) {
                            hour = parseInt(parts[1].split(':')[0], 10);
                        }
                    }
                    const label = String(hour).padStart(2, '0') + ':00';
                    xLabels += '<text x="' + x(idx).toFixed(1) + '" y="' + (height - 6) +
                        '" text-anchor="middle" font-size="11" fill="#94a3b8" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif">' +
                        label + '</text>';
                }

                const bottomLine = '<line x1="' + pad.left + '" y1="' + (pad.top + chartH).toFixed(1) + '" x2="' +
                    (width - pad.right) + '" y2="' + (pad.top + chartH).toFixed(1) +
                    '" stroke="#e8edf2" stroke-width="1"/>';

                return '<svg viewBox="0 0 ' + width + ' ' + height + '" width="100%" height="' + height +
                    '" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Hourly temperature chart">' +
                    '<defs>' +
                    '<linearGradient id="areaGrad" x1="0" y1="0" x2="0" y2="1">' +
                    '<stop offset="0%" stop-color="#3b82f6" stop-opacity="0.25"/>' +
                    '<stop offset="100%" stop-color="#3b82f6" stop-opacity="0.01"/>' +
                    '</linearGradient>' +
                    '<linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">' +
                    '<stop offset="0%" stop-color="#3b82f6"/>' +
                    '<stop offset="50%" stop-color="#8b5cf6"/>' +
                    '<stop offset="100%" stop-color="#ec4899"/>' +
                    '</linearGradient>' +
                    '</defs>' +
                    grid +
                    bottomLine +
                    '<path d="' + area + '" fill="url(#areaGrad)"/>' +
                    '<path d="' + line + '" fill="none" stroke="url(#lineGrad)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>' +
                    dots +
                    xLabels +
                    '</svg>';
            }

            /* ===== Escape HTML ===== */
            function escapeHtml(str) {
                const div = document.createElement('div');
                div.appendChild(document.createTextNode(str));
                return div.innerHTML;
            }

            /* ===== Render card ===== */
            function renderCard(data) {
                const weatherCode = data.daily.weather_code[0];
                const maxTemp = data.daily.temperature_2m_max[0];
                const minTemp = data.daily.temperature_2m_min[0];

                const hourlyTimes = Array.isArray(data.hourly.time) ? data.hourly.time : [];
                const hourlyTemps = Array.isArray(data.hourly.temperature_2m) ? data.hourly.temperature_2m : [];

                const filteredTimes = [];
                const filteredTemps = [];
                for (let i = 0; i < hourlyTimes.length; i++) {
                    if (hourlyTimes[i] && hourlyTimes[i].startsWith(date)) {
                        filteredTimes.push(hourlyTimes[i]);
                        filteredTemps.push(hourlyTemps[i]);
                    }
                }

                if (filteredTemps.length === 0) {
                    throw new Error('No hourly temperature data available for this date.');
                }

                document.body.style.background = backgroundGradient(weatherCode);

                app.innerHTML = `
                    <div class="weather-card">
                        <div class="card-header">
                            <div class="location">
                                <span class="location-pin">📍</span>
                                <span class="location-name">${escapeHtml(name)}</span>
                            </div>
                            <div class="date-label">${formatDate(date)}</div>
                        </div>
                        <div class="weather-hero">
                            <div class="weather-icon">${weatherEmoji(weatherCode)}</div>
                            <div class="weather-info">
                                <div class="weather-condition">${weatherCondition(weatherCode)}</div>
                                <div class="weather-desc">${lat.toFixed(2)}°N, ${lon.toFixed(2)}°E</div>
                            </div>
                        </div>
                        <div class="temp-section">
                            <div class="temp-box temp-max">
                                <div class="temp-value">${Math.round(maxTemp)}°</div>
                                <div class="temp-label">Maximum</div>
                            </div>
                            <div class="temp-box temp-min">
                                <div class="temp-value">${Math.round(minTemp)}°</div>
                                <div class="temp-label">Minimum</div>
                            </div>
                        </div>
                        <div class="divider"></div>
                        <div class="hourly-title">Hourly Temperatures</div>
                        <div class="chart-container">
                            ${generateChart(filteredTemps, filteredTimes)}
                        </div>
                    </div>
                `;
            }

            /* ===== Render error ===== */
            function renderError(message) {
                app.innerHTML = `
                    <div class="error-card">
                        <div class="error-icon">⚠️</div>
                        <div class="error-title">Unable to load weather data</div>
                        <div class="error-message">${escapeHtml(message || 'Please try again later.')}</div>
                    </div>
                `;
            }

            /* ===== Fetch ===== */
            async function fetchWeather() {
                const response = await fetch(url);
                if (!response.ok) {
                    throw new Error('Weather service returned ' + response.status + '.');
                }
                const data = await response.json();
                if (!data.daily || !data.hourly) {
                    throw new Error('Weather service returned an unexpected response.');
                }
                return data;
            }

            /* ===== Init ===== */
            async function init() {
                try {
                    const data = await fetchWeather();
                    renderCard(data);
                } catch (error) {
                    console.error(error);
                    renderError(error.message);
                }
            }

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

L1 — cheap deterministic descriptors

bytes total23,016html / css / js196 / 6,157 / 16,663
dom nodes8dom depth3
css rules32js presentyes
brightness158.7contrast78.8
colorfulness50.0whitespace46.7%

This slot's telemetry

prompt tokens413completion tokens25,588
total tokens26,001wall153.5 s
costrequest id
config.json596 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_DEEPSEEK_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "deepseek-v4-flash-0731-eff-max--api--official--dev",
  "effort": "max",
  "family": "deepseek",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "deepseek-v4-flash-0731",
  "protocol": "api",
  "served_model": "deepseek-v4-flash",
  "telemetry": {
    "completion_tokens": 263517,
    "cost_usd": null,
    "prompt_tokens": 3272,
    "total_tokens": 266789,
    "wall_ms": 2036340
  },
  "transport": "deepseek-official-api",
  "vendor_sanction_ref": null
}
send-log4.7 KB
{
  "N": 4,
  "batch_id": "2026-07-31--official-deepseek-flash-0731",
  "config_id": "deepseek-v4-flash-0731-eff-max--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-31T06:30:40.942523+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:28:07.418634+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-31T06:33:17.699623+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:30:44.564970+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-31T06:34:25.528080+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:33:21.600482+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-31T06:41:20.137137+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:34:28.910124+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-31T06:45:18.559457+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:41:24.041838+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-31T06:51:39.608572+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:45:22.249396+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-31T06:58:11.336023+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:51:42.970675+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-31T07:02:29.023092+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:58:14.687576+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
    }
  }
}