claude-opus-4-7-thinking @ xhigh · cursor
cursorxhigh
- config
- claude-opus-4-7-thinking-eff-xhigh--cli--cursor--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- claude-opus-4-7-thinking-xhigh
- captured
- Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe

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
nearest
claude-sonnet-5 @xhigh · cursor-xl0.72claude-opus-4-8-thinking @max · cursor0.71claude-opus-4-8 @xhigh · cursor0.71claude-opus-4-8-thinking @medium · cursor0.70claude-sonnet-5-thinking @medium · cursor-xl0.70farthest
north-mini-code-free · api0.50grok-4.3 · api0.51deepseek-v4-pro · opencode0.52grok-4.3 @medium · api0.52grok-4.3 @low · api0.52within 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 2/24 · 2 match · 7 mismatch · 15 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=1280">
<title>Weather</title>
<style>
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--grad-a: #1a3a66;
--grad-b: #3672a8;
--grad-c: #79b3e0;
--accent: #ffd66b;
--accent-2: #ffb84d;
--text: #ffffff;
--text-2: rgba(255, 255, 255, 0.78);
--text-3: rgba(255, 255, 255, 0.52);
--text-4: rgba(255, 255, 255, 0.32);
--glass: rgba(255, 255, 255, 0.09);
--border: rgba(255, 255, 255, 0.20);
--border-soft: rgba(255, 255, 255, 0.12);
}
body[data-theme="clear"] { --grad-a:#124074; --grad-b:#3a7fbf; --grad-c:#8dc4ec; --accent:#ffd66b; --accent-2:#ffb147; }
body[data-theme="partly"] { --grad-a:#255d92; --grad-b:#588fbf; --grad-c:#a8c9e3; --accent:#ffe08a; --accent-2:#ffc862; }
body[data-theme="cloudy"] { --grad-a:#3a4a5f; --grad-b:#5f728a; --grad-c:#96a8bd; --accent:#e2ecf5; --accent-2:#c5d3e2; }
body[data-theme="fog"] { --grad-a:#4f5a68; --grad-b:#7a8493; --grad-c:#b3bcc7; --accent:#eef1f5; --accent-2:#d4dae2; }
body[data-theme="rain"] { --grad-a:#1a2c44; --grad-b:#3b5878; --grad-c:#6f8ba8; --accent:#8ecbff; --accent-2:#5faee0; }
body[data-theme="snow"] { --grad-a:#476884; --grad-b:#7a9bb8; --grad-c:#c4d5e6; --accent:#ffffff; --accent-2:#dceaf5; }
body[data-theme="storm"] { --grad-a:#141830; --grad-b:#363b5c; --grad-c:#565a84; --accent:#ffe066; --accent-2:#ffb84d; }
html, body { width: 100%; height: 100%; overflow: hidden; }
body {
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
color: var(--text);
background:
radial-gradient(ellipse 1000px 600px at 82% -8%, rgba(255, 255, 255, 0.22) 0%, transparent 60%),
radial-gradient(ellipse 900px 600px at 12% 110%, rgba(0, 0, 0, 0.28) 0%, transparent 60%),
linear-gradient(155deg, var(--grad-a) 0%, var(--grad-b) 52%, var(--grad-c) 100%);
display: flex;
align-items: center;
justify-content: center;
padding: 32px;
transition: background 900ms cubic-bezier(.4, 0, .2, 1);
position: relative;
font-feature-settings: "ss01", "cv11", "tnum" 0;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* Decorative atmospheric orbs */
.halo {
position: absolute;
inset: 0;
overflow: hidden;
pointer-events: none;
z-index: 0;
}
.halo::before, .halo::after {
content: "";
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: 0.55;
}
.halo::before {
width: 520px; height: 520px;
top: -160px; right: -120px;
background: radial-gradient(circle, var(--accent) 0%, transparent 70%);
}
.halo::after {
width: 460px; height: 460px;
bottom: -180px; left: -140px;
background: radial-gradient(circle, var(--accent-2) 0%, transparent 70%);
opacity: 0.35;
}
.card {
width: 100%;
max-width: 1180px;
position: relative;
z-index: 2;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.13) 0%, rgba(255, 255, 255, 0.06) 100%);
backdrop-filter: blur(30px) saturate(140%);
-webkit-backdrop-filter: blur(30px) saturate(140%);
border: 1px solid var(--border);
border-radius: 32px;
padding: 44px 52px 40px;
box-shadow:
0 40px 80px -30px rgba(0, 0, 0, 0.55),
0 10px 30px -10px rgba(0, 0, 0, 0.30),
inset 0 1px 0 rgba(255, 255, 255, 0.25),
inset 0 -1px 0 rgba(0, 0, 0, 0.15);
animation: rise 700ms cubic-bezier(.2, .8, .2, 1) both;
}
@keyframes rise {
from { opacity: 0; transform: translateY(18px) scale(.985); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
/* Header */
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 24px;
border-bottom: 1px solid var(--border-soft);
margin-bottom: 28px;
}
.brand {
display: flex;
align-items: center;
gap: 12px;
}
.brand-badge {
width: 34px; height: 34px;
border-radius: 10px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.06));
border: 1px solid var(--border);
display: flex;
align-items: center;
justify-content: center;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.brand-text {
font-size: 11px;
font-weight: 600;
letter-spacing: 0.28em;
text-transform: uppercase;
color: var(--text-2);
}
.location-tag {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 8px 16px 8px 14px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.10);
border: 1px solid var(--border);
font-size: 14px;
font-weight: 500;
color: var(--text);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
max-width: 400px;
}
.location-tag .name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.location-tag .coords {
font-size: 11px;
color: var(--text-3);
font-variant-numeric: tabular-nums;
letter-spacing: 0.02em;
border-left: 1px solid var(--border-soft);
padding-left: 10px;
margin-left: 2px;
}
.pulse {
width: 8px; height: 8px;
border-radius: 50%;
background: var(--accent);
position: relative;
box-shadow: 0 0 12px rgba(255, 214, 107, 0.8);
}
.pulse::after {
content: "";
position: absolute;
inset: -4px;
border-radius: 50%;
border: 1px solid var(--accent);
opacity: 0.6;
animation: pulse-ring 2.2s ease-out infinite;
}
@keyframes pulse-ring {
0% { transform: scale(0.6); opacity: 0.7; }
100% { transform: scale(2.4); opacity: 0; }
}
/* Main content */
.main {
display: grid;
grid-template-columns: 1.05fr 1fr;
gap: 20px;
align-items: center;
min-height: 300px;
}
.date-line {
display: flex;
align-items: center;
gap: 10px;
font-size: 12px;
font-weight: 600;
letter-spacing: 0.24em;
text-transform: uppercase;
color: var(--text-3);
margin-bottom: 14px;
}
.date-line .dot {
width: 4px; height: 4px;
border-radius: 50%;
background: var(--text-4);
}
.place {
font-size: 46px;
font-weight: 300;
letter-spacing: -0.025em;
line-height: 1.02;
margin-bottom: 20px;
display: flex;
align-items: baseline;
gap: 14px;
flex-wrap: wrap;
}
.place-note {
font-size: 15px;
color: var(--text-3);
font-weight: 500;
letter-spacing: 0.02em;
}
.condition {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 20px;
font-weight: 400;
letter-spacing: -0.01em;
color: var(--text);
background: rgba(255, 255, 255, 0.06);
border: 1px solid var(--border-soft);
padding: 8px 14px;
border-radius: 999px;
margin-bottom: 18px;
}
.condition svg {
width: 20px;
height: 20px;
opacity: 0.95;
}
.temps {
display: flex;
align-items: baseline;
gap: 28px;
flex-wrap: wrap;
}
.temp-hero {
font-size: 138px;
font-weight: 200;
letter-spacing: -0.065em;
line-height: 0.88;
font-variant-numeric: tabular-nums;
background: linear-gradient(180deg, #ffffff 0%, rgba(255, 255, 255, 0.72) 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 4px 24px rgba(255, 255, 255, 0.08);
}
.temp-hero .deg {
font-size: 68px;
font-weight: 300;
opacity: 0.65;
margin-left: 2px;
letter-spacing: -0.04em;
}
.temp-range {
display: flex;
flex-direction: column;
gap: 10px;
padding: 4px 0 6px;
}
.temp-item {
display: flex;
align-items: center;
gap: 10px;
font-size: 15px;
color: var(--text-2);
font-weight: 500;
}
.temp-item .label {
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 10px;
color: var(--text-3);
min-width: 40px;
}
.temp-item .value {
font-size: 22px;
font-weight: 400;
color: var(--text);
font-variant-numeric: tabular-nums;
letter-spacing: -0.01em;
}
.temp-item .arrow {
display: inline-flex;
width: 22px; height: 22px;
border-radius: 6px;
background: rgba(255, 255, 255, 0.10);
align-items: center;
justify-content: center;
color: var(--accent);
font-size: 12px;
font-weight: 700;
}
.temp-item.low .arrow { color: #8ecbff; }
.icon-wrap {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
position: relative;
}
.icon-wrap::before {
content: "";
position: absolute;
inset: 20% 15% 20% 15%;
background: radial-gradient(circle, rgba(255, 255, 255, 0.18) 0%, transparent 70%);
filter: blur(30px);
z-index: 0;
}
.weather-icon {
width: 300px;
height: 300px;
position: relative;
z-index: 1;
filter: drop-shadow(0 25px 40px rgba(0, 0, 0, 0.28));
}
/* Sun rotation */
.rotate-slow {
animation: rotate-slow 80s linear infinite;
transform-origin: 100px 100px;
}
@keyframes rotate-slow { to { transform: rotate(360deg); } }
.float-y {
animation: float-y 6s ease-in-out infinite;
transform-origin: center;
}
@keyframes float-y {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-6px); }
}
.drop {
animation: drop-fall 2.4s ease-in-out infinite;
opacity: 0.95;
}
.drop:nth-child(2) { animation-delay: 0.6s; }
.drop:nth-child(3) { animation-delay: 1.2s; }
.drop:nth-child(4) { animation-delay: 1.8s; }
@keyframes drop-fall {
0%, 100% { transform: translateY(-4px); }
50% { transform: translateY(10px); }
}
.flake {
animation: flake-fall 5s ease-in-out infinite;
transform-origin: center;
opacity: 0.95;
}
.flake:nth-child(2) { animation-delay: 1.2s; }
.flake:nth-child(3) { animation-delay: 2.4s; }
.flake:nth-child(4) { animation-delay: 3.6s; }
@keyframes flake-fall {
0%, 100% { transform: translateY(-4px) rotate(0deg); }
50% { transform: translateY(10px) rotate(180deg); }
}
.bolt-flash {
animation: bolt-flash 3.2s ease-in-out infinite;
transform-origin: 100px 130px;
}
@keyframes bolt-flash {
0%, 45%, 55%, 100% { opacity: 1; filter: drop-shadow(0 0 8px rgba(255, 224, 102, 0.7)); }
50% { opacity: 0.3; }
}
/* Hourly */
.hourly {
margin-top: 32px;
padding-top: 22px;
border-top: 1px solid var(--border-soft);
}
.hourly-head {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.hourly-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.24em;
color: var(--text-3);
}
.hourly-title .marker {
width: 20px; height: 2px;
background: linear-gradient(90deg, var(--accent), transparent);
border-radius: 2px;
}
.hourly-stats {
display: flex;
gap: 22px;
font-size: 11px;
letter-spacing: 0.18em;
color: var(--text-3);
text-transform: uppercase;
font-weight: 600;
}
.hourly-stats strong {
color: var(--text);
font-weight: 500;
font-variant-numeric: tabular-nums;
margin-left: 6px;
}
.hourly-stats .hi strong { color: var(--accent); }
.hourly-stats .lo strong { color: #8ecbff; }
.chart-wrap {
width: 100%;
height: 180px;
position: relative;
}
.chart {
width: 100%;
height: 100%;
display: block;
overflow: visible;
}
.chart-grid { stroke: rgba(255, 255, 255, 0.08); stroke-width: 1; stroke-dasharray: 2 4; }
.chart-label { fill: var(--text-3); font-size: 11px; font-family: inherit; font-weight: 500; letter-spacing: 0.06em; }
.chart-temp { fill: #ffffff; font-size: 12px; font-family: inherit; font-variant-numeric: tabular-nums; font-weight: 600; paint-order: stroke; stroke: rgba(0,0,0,0.35); stroke-width: 2.5; stroke-linejoin: round; }
.chart-line { fill: none; stroke: url(#lineGrad); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.25)); }
.chart-dot { fill: #fff; stroke: var(--accent); stroke-width: 2; }
.chart-dot-lo { fill: #fff; stroke: #8ecbff; stroke-width: 2; }
.chart-marker-line { stroke: rgba(255, 255, 255, 0.35); stroke-width: 1; stroke-dasharray: 2 3; }
/* Loader */
.loader {
display: flex;
flex-direction: column;
align-items: center;
gap: 18px;
color: var(--text-2);
font-size: 14px;
letter-spacing: 0.14em;
text-transform: uppercase;
font-weight: 500;
}
.spinner {
width: 36px; height: 36px;
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.15);
border-top-color: var(--text);
animation: spin 900ms linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
/* Error */
.error-card {
width: 100%;
max-width: 620px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.11) 0%, rgba(255, 255, 255, 0.05) 100%);
backdrop-filter: blur(28px);
-webkit-backdrop-filter: blur(28px);
border: 1px solid var(--border);
border-radius: 24px;
padding: 44px 40px;
text-align: center;
box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.4);
position: relative;
z-index: 2;
}
.error-icon {
width: 64px; height: 64px;
margin: 0 auto 18px;
border-radius: 50%;
background: rgba(255, 130, 130, 0.14);
border: 1px solid rgba(255, 130, 130, 0.30);
display: flex;
align-items: center;
justify-content: center;
color: #ffc7c7;
}
.error-title {
font-size: 22px;
font-weight: 500;
margin-bottom: 8px;
letter-spacing: -0.01em;
}
.error-message {
font-size: 14px;
color: var(--text-2);
line-height: 1.6;
max-width: 460px;
margin: 0 auto;
}
.error-detail {
display: inline-block;
margin-top: 16px;
padding: 6px 12px;
font-family: "SFMono-Regular", ui-monospace, Menlo, Consolas, monospace;
font-size: 12px;
color: var(--text-3);
background: rgba(0, 0, 0, 0.20);
border: 1px solid var(--border-soft);
border-radius: 8px;
letter-spacing: 0.02em;
}
</style>
</head>
<body data-theme="clear">
<div class="halo" aria-hidden="true"></div>
<div id="app">
<div class="loader" role="status" aria-live="polite">
<div class="spinner"></div>
<div>Loading forecast</div>
</div>
</div>
<script>
(function () {
"use strict";
const WEATHER = {
0: { label: "Clear sky", theme: "clear", icon: "sun" },
1: { label: "Mainly clear", theme: "clear", icon: "sun-cloud" },
2: { label: "Partly cloudy", theme: "partly", icon: "sun-cloud" },
3: { label: "Overcast", theme: "cloudy", icon: "cloud" },
45: { label: "Fog", theme: "fog", icon: "fog" },
48: { label: "Depositing rime fog", theme: "fog", icon: "fog" },
51: { label: "Light drizzle", theme: "rain", icon: "drizzle" },
53: { label: "Moderate drizzle", theme: "rain", icon: "drizzle" },
55: { label: "Dense drizzle", theme: "rain", icon: "drizzle" },
56: { label: "Light freezing drizzle", theme: "rain", icon: "drizzle" },
57: { label: "Freezing drizzle", theme: "rain", icon: "drizzle" },
61: { label: "Light rain", theme: "rain", icon: "rain" },
63: { label: "Rain", theme: "rain", icon: "rain" },
65: { label: "Heavy rain", theme: "rain", icon: "rain" },
66: { label: "Light freezing rain", theme: "rain", icon: "rain" },
67: { label: "Heavy freezing rain", theme: "rain", icon: "rain" },
71: { label: "Light snow", theme: "snow", icon: "snow" },
73: { label: "Snow", theme: "snow", icon: "snow" },
75: { label: "Heavy snow", theme: "snow", icon: "snow" },
77: { label: "Snow grains", theme: "snow", icon: "snow" },
80: { label: "Rain showers", theme: "rain", icon: "rain" },
81: { label: "Heavy rain showers", theme: "rain", icon: "rain" },
82: { label: "Violent rain showers", theme: "rain", icon: "rain" },
85: { label: "Snow showers", theme: "snow", icon: "snow" },
86: { label: "Heavy snow showers", theme: "snow", icon: "snow" },
95: { label: "Thunderstorm", theme: "storm", icon: "storm" },
96: { label: "Thunderstorm w/ hail", theme: "storm", icon: "storm" },
99: { label: "Severe thunderstorm", theme: "storm", icon: "storm" }
};
function escapeHTML(str) {
return String(str).replace(/[&<>"']/g, function (c) {
return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c];
});
}
function parseParams() {
const q = new URLSearchParams(window.location.search);
let lat = parseFloat(q.get("lat"));
let lon = parseFloat(q.get("lon"));
if (!Number.isFinite(lat)) lat = 52.52;
if (!Number.isFinite(lon)) lon = 13.405;
const name = q.get("name") || "Berlin";
const todayUTC = new Date().toISOString().slice(0, 10);
let date = q.get("date");
if (!date || !/^\d{4}-\d{2}-\d{2}$/.test(date)) date = todayUTC;
return { lat, lon, name, date, todayUTC };
}
async function fetchWeather({ lat, lon, date, todayUTC }) {
const isPast = date < todayUTC;
const endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";
const url = new URL(endpoint, window.location.origin);
url.searchParams.set("latitude", String(lat));
url.searchParams.set("longitude", String(lon));
url.searchParams.set("daily", "temperature_2m_max,temperature_2m_min,weather_code");
url.searchParams.set("hourly", "temperature_2m");
url.searchParams.set("timezone", "UTC");
url.searchParams.set("temperature_unit", "celsius");
url.searchParams.set("start_date", date);
url.searchParams.set("end_date", date);
const res = await fetch(url.toString(), { headers: { Accept: "application/json" } });
if (!res.ok) {
let detail = "";
try { const j = await res.json(); detail = j.reason || j.error || ""; } catch (_) {}
throw new Error(detail ? detail : "Request failed (" + res.status + ")");
}
const data = await res.json();
if (!data || !data.daily || !data.hourly) throw new Error("Malformed response");
return data;
}
function iconSVG(kind) {
const gradients = `
<defs>
<radialGradient id="sunGrad" cx="50%" cy="45%" r="55%">
<stop offset="0%" stop-color="#FFF6D1"/>
<stop offset="55%" stop-color="#FFD66B"/>
<stop offset="100%" stop-color="#F09A20"/>
</radialGradient>
<radialGradient id="sunHalo" cx="50%" cy="50%" r="55%">
<stop offset="0%" stop-color="rgba(255,220,120,0.55)"/>
<stop offset="70%" stop-color="rgba(255,220,120,0.05)"/>
<stop offset="100%" stop-color="rgba(255,220,120,0)"/>
</radialGradient>
<linearGradient id="cloudLight" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#ffffff"/>
<stop offset="100%" stop-color="#c9d5e5"/>
</linearGradient>
<linearGradient id="cloudDark" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#e2e9f2"/>
<stop offset="100%" stop-color="#8ea1b7"/>
</linearGradient>
<linearGradient id="cloudStorm" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#a5aec2"/>
<stop offset="100%" stop-color="#4e5372"/>
</linearGradient>
<linearGradient id="dropGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#bfe1ff"/>
<stop offset="100%" stop-color="#5faee0"/>
</linearGradient>
<linearGradient id="boltGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#fff2a8"/>
<stop offset="100%" stop-color="#ffb84d"/>
</linearGradient>
</defs>`;
const CLOUD_LIGHT = 'M 48 138 Q 22 138 22 114 Q 22 90 48 88 Q 56 60 88 60 Q 118 60 128 84 Q 140 78 152 80 Q 178 84 180 110 Q 196 116 192 134 Q 188 154 168 154 L 50 154 Q 30 154 30 145 Z';
const CLOUD_DARK = 'M 44 142 Q 18 142 18 116 Q 18 92 46 90 Q 54 58 88 58 Q 120 58 130 84 Q 142 78 154 80 Q 182 84 184 112 Q 200 118 196 138 Q 192 158 170 158 L 48 158 Q 28 158 28 148 Z';
switch (kind) {
case "sun":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<circle cx="100" cy="100" r="90" fill="url(#sunHalo)"/>
<g class="rotate-slow" stroke="#FFD66B" stroke-width="4" stroke-linecap="round" opacity="0.85">
<line x1="100" y1="14" x2="100" y2="34"/>
<line x1="100" y1="166" x2="100" y2="186"/>
<line x1="14" y1="100" x2="34" y2="100"/>
<line x1="166" y1="100" x2="186" y2="100"/>
<line x1="39" y1="39" x2="53" y2="53"/>
<line x1="147" y1="147" x2="161" y2="161"/>
<line x1="39" y1="161" x2="53" y2="147"/>
<line x1="147" y1="53" x2="161" y2="39"/>
</g>
<circle cx="100" cy="100" r="46" fill="url(#sunGrad)"/>
<circle cx="86" cy="86" r="14" fill="#fff6d1" opacity="0.35"/>
</svg>`;
case "sun-cloud":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<circle cx="66" cy="54" r="54" fill="url(#sunHalo)"/>
<g class="rotate-slow" style="transform-origin: 66px 54px;" stroke="#FFD66B" stroke-width="3.2" stroke-linecap="round" opacity="0.9">
<line x1="66" y1="14" x2="66" y2="24"/>
<line x1="66" y1="84" x2="66" y2="94"/>
<line x1="26" y1="54" x2="36" y2="54"/>
<line x1="96" y1="54" x2="106" y2="54"/>
<line x1="37" y1="25" x2="44" y2="32"/>
<line x1="88" y1="76" x2="95" y2="83"/>
<line x1="37" y1="83" x2="44" y2="76"/>
<line x1="88" y1="32" x2="95" y2="25"/>
</g>
<circle cx="66" cy="54" r="24" fill="url(#sunGrad)"/>
<g class="float-y">
<path d="${CLOUD_LIGHT}" fill="url(#cloudLight)" stroke="rgba(255,255,255,0.35)" stroke-width="0.5"/>
</g>
</svg>`;
case "cloud":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<g class="float-y">
<path d="${CLOUD_DARK}" fill="url(#cloudDark)" opacity="0.75" transform="translate(-8 -12) scale(0.9)"/>
<path d="${CLOUD_LIGHT}" fill="url(#cloudLight)" stroke="rgba(255,255,255,0.4)" stroke-width="0.5"/>
</g>
</svg>`;
case "fog":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<g class="float-y">
<path d="${CLOUD_LIGHT}" fill="url(#cloudLight)" opacity="0.85" transform="translate(0 -22) scale(0.85)"/>
</g>
<g stroke="#ffffff" stroke-width="7" stroke-linecap="round" opacity="0.85">
<line x1="36" y1="132" x2="164" y2="132"/>
<line x1="28" y1="152" x2="172" y2="152"/>
<line x1="46" y1="172" x2="154" y2="172"/>
</g>
</svg>`;
case "drizzle":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<g class="float-y">
<path d="${CLOUD_LIGHT}" fill="url(#cloudLight)" transform="translate(0 -8)"/>
</g>
<g>
<g transform="translate(60 162)"><circle class="drop" r="3.5" fill="url(#dropGrad)"/></g>
<g transform="translate(88 168)"><circle class="drop" r="3.5" fill="url(#dropGrad)"/></g>
<g transform="translate(116 162)"><circle class="drop" r="3.5" fill="url(#dropGrad)"/></g>
<g transform="translate(144 168)"><circle class="drop" r="3.5" fill="url(#dropGrad)"/></g>
</g>
</svg>`;
case "rain":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<g class="float-y">
<path d="${CLOUD_DARK}" fill="url(#cloudDark)"/>
</g>
<g>
<g transform="translate(62 160)"><path class="drop" d="M 0 -8 Q -3 4 -3 8 Q -3 14 0 14 Q 3 14 3 8 Q 3 4 0 -8 Z" fill="url(#dropGrad)"/></g>
<g transform="translate(94 168)"><path class="drop" d="M 0 -8 Q -3 4 -3 8 Q -3 14 0 14 Q 3 14 3 8 Q 3 4 0 -8 Z" fill="url(#dropGrad)"/></g>
<g transform="translate(126 160)"><path class="drop" d="M 0 -8 Q -3 4 -3 8 Q -3 14 0 14 Q 3 14 3 8 Q 3 4 0 -8 Z" fill="url(#dropGrad)"/></g>
<g transform="translate(158 168)"><path class="drop" d="M 0 -8 Q -3 4 -3 8 Q -3 14 0 14 Q 3 14 3 8 Q 3 4 0 -8 Z" fill="url(#dropGrad)"/></g>
</g>
</svg>`;
case "snow":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<g class="float-y">
<path d="${CLOUD_LIGHT}" fill="url(#cloudLight)"/>
</g>
<g stroke="#ffffff" stroke-width="2.4" stroke-linecap="round" fill="none">
<g transform="translate(62 172)"><g class="flake"><line x1="-8" y1="0" x2="8" y2="0"/><line x1="0" y1="-8" x2="0" y2="8"/><line x1="-6" y1="-6" x2="6" y2="6"/><line x1="-6" y1="6" x2="6" y2="-6"/></g></g>
<g transform="translate(96 178)"><g class="flake"><line x1="-6" y1="0" x2="6" y2="0"/><line x1="0" y1="-6" x2="0" y2="6"/><line x1="-4" y1="-4" x2="4" y2="4"/><line x1="-4" y1="4" x2="4" y2="-4"/></g></g>
<g transform="translate(128 172)"><g class="flake"><line x1="-8" y1="0" x2="8" y2="0"/><line x1="0" y1="-8" x2="0" y2="8"/><line x1="-6" y1="-6" x2="6" y2="6"/><line x1="-6" y1="6" x2="6" y2="-6"/></g></g>
<g transform="translate(160 178)"><g class="flake"><line x1="-6" y1="0" x2="6" y2="0"/><line x1="0" y1="-6" x2="0" y2="6"/><line x1="-4" y1="-4" x2="4" y2="4"/><line x1="-4" y1="4" x2="4" y2="-4"/></g></g>
</g>
</svg>`;
case "storm":
return `<svg viewBox="0 0 200 200" class="weather-icon" xmlns="http://www.w3.org/2000/svg">
${gradients}
<g class="float-y">
<path d="${CLOUD_DARK}" fill="url(#cloudStorm)"/>
</g>
<path class="bolt-flash" d="M 108 118 L 78 168 L 96 168 L 86 196 L 130 148 L 108 148 L 122 118 Z" fill="url(#boltGrad)" stroke="#fff3a8" stroke-width="1"/>
</svg>`;
}
return "";
}
function smoothPath(points) {
if (points.length < 2) return "";
let d = "M " + points[0][0].toFixed(2) + "," + points[0][1].toFixed(2);
for (let i = 0; i < points.length - 1; i++) {
const p0 = points[i - 1] || points[i];
const p1 = points[i];
const p2 = points[i + 1];
const p3 = points[i + 2] || p2;
const t = 0.18;
const cp1x = p1[0] + (p2[0] - p0[0]) * t;
const cp1y = p1[1] + (p2[1] - p0[1]) * t;
const cp2x = p2[0] - (p3[0] - p1[0]) * t;
const cp2y = p2[1] - (p3[1] - p1[1]) * t;
d += " C " + cp1x.toFixed(2) + "," + cp1y.toFixed(2)
+ " " + cp2x.toFixed(2) + "," + cp2y.toFixed(2)
+ " " + p2[0].toFixed(2) + "," + p2[1].toFixed(2);
}
return d;
}
function renderChart(hours) {
const w = 1060, h = 180;
const pad = { top: 30, right: 24, bottom: 26, left: 24 };
const cw = w - pad.left - pad.right;
const ch = h - pad.top - pad.bottom;
const temps = hours.map(x => x.temp);
const minT = Math.min.apply(null, temps);
const maxT = Math.max.apply(null, temps);
const range = Math.max(0.5, maxT - minT);
const yMin = minT - range * 0.20;
const yMax = maxT + range * 0.25;
const yRange = yMax - yMin;
const n = hours.length;
const points = hours.map(function (hr, i) {
const x = pad.left + (i / (n - 1)) * cw;
const y = pad.top + ch - ((hr.temp - yMin) / yRange) * ch;
return [x, y, hr.temp, hr.hour];
});
const linePath = smoothPath(points);
const areaPath = linePath
+ " L " + points[points.length - 1][0].toFixed(2) + "," + (pad.top + ch).toFixed(2)
+ " L " + points[0][0].toFixed(2) + "," + (pad.top + ch).toFixed(2)
+ " Z";
// Grid lines (baseline)
const baseY = pad.top + ch;
const gridLines = '<line class="chart-grid" x1="' + pad.left + '" y1="' + baseY + '" x2="' + (pad.left + cw) + '" y2="' + baseY + '"/>';
// Hour labels every 3h
let hourLabels = "";
for (let i = 0; i < n; i += 3) {
const x = points[i][0];
const label = String(points[i][3]).padStart(2, "0") + ":00";
hourLabels += '<text class="chart-label" x="' + x.toFixed(2) + '" y="' + (h - 6) + '" text-anchor="middle">' + label + "</text>";
}
// Ensure last hour label
const lastIdx = n - 1;
if ((lastIdx % 3) !== 0) {
const x = points[lastIdx][0];
const label = String(points[lastIdx][3]).padStart(2, "0") + ":00";
hourLabels += '<text class="chart-label" x="' + x.toFixed(2) + '" y="' + (h - 6) + '" text-anchor="middle">' + label + "</text>";
}
// Highlight min & max first (so regular dots overlay)
let minIdx = 0, maxIdx = 0;
for (let i = 1; i < n; i++) {
if (temps[i] < temps[minIdx]) minIdx = i;
if (temps[i] > temps[maxIdx]) maxIdx = i;
}
let extremes = "";
const markPoint = function (idx, cls) {
const p = points[idx];
extremes += '<line class="chart-marker-line" x1="' + p[0] + '" y1="' + (p[1] - 8) + '" x2="' + p[0] + '" y2="' + baseY + '"/>';
extremes += '<circle class="' + cls + '" cx="' + p[0] + '" cy="' + p[1] + '" r="5"/>';
};
markPoint(maxIdx, "chart-dot");
markPoint(minIdx, "chart-dot-lo");
// Temperature dots + labels every 3h + extremes
let dots = "";
let tempLabels = "";
const labelIndices = new Set();
for (let i = 0; i < n; i += 3) labelIndices.add(i);
labelIndices.add(minIdx);
labelIndices.add(maxIdx);
labelIndices.add(n - 1);
Array.from(labelIndices).sort(function (a, b) { return a - b; }).forEach(function (i) {
const p = points[i];
if (i !== minIdx && i !== maxIdx) {
dots += '<circle class="chart-dot" cx="' + p[0].toFixed(2) + '" cy="' + p[1].toFixed(2) + '" r="3"/>';
}
const t = Math.round(p[2]);
const yLabel = (p[1] - 14).toFixed(2);
tempLabels += '<text class="chart-temp" x="' + p[0].toFixed(2) + '" y="' + yLabel + '" text-anchor="middle">' + t + '°</text>';
});
return `
<svg class="chart" viewBox="0 0 ${w} ${h}" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="areaGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="rgba(255,255,255,0.40)"/>
<stop offset="60%" stop-color="rgba(255,255,255,0.10)"/>
<stop offset="100%" stop-color="rgba(255,255,255,0)"/>
</linearGradient>
<linearGradient id="lineGrad" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#8ecbff"/>
<stop offset="50%" stop-color="#ffffff"/>
<stop offset="100%" stop-color="var(--accent)"/>
</linearGradient>
</defs>
${gridLines}
<path d="${areaPath}" fill="url(#areaGrad)"/>
<path class="chart-line" d="${linePath}"/>
${extremes}
${dots}
${tempLabels}
${hourLabels}
</svg>`;
}
function formatDate(dateStr) {
const d = new Date(dateStr + "T00:00:00Z");
const weekday = d.toLocaleDateString("en-US", { weekday: "long", timeZone: "UTC" });
const month = d.toLocaleDateString("en-US", { month: "long", timeZone: "UTC" });
const day = d.getUTCDate();
const year = d.getUTCFullYear();
return { weekday, month, day, year, iso: dateStr };
}
function formatCoords(lat, lon) {
const ns = lat >= 0 ? "N" : "S";
const ew = lon >= 0 ? "E" : "W";
return Math.abs(lat).toFixed(2) + "°" + ns + " · " + Math.abs(lon).toFixed(2) + "°" + ew;
}
function render(ctx) {
const { name, date, todayUTC, lat, lon, data } = ctx;
const dmax = data.daily.temperature_2m_max[0];
const dmin = data.daily.temperature_2m_min[0];
const code = data.daily.weather_code[0];
if (dmax == null || dmin == null || code == null) {
throw new Error("No data available for this date");
}
// Build hourly list, restricted to the requested date to handle DST/tz edge-cases
const hours = [];
for (let i = 0; i < data.hourly.time.length; i++) {
const t = data.hourly.time[i];
if (typeof t === "string" && t.slice(0, 10) === date) {
const temp = data.hourly.temperature_2m[i];
if (temp == null) continue;
const hour = parseInt(t.slice(11, 13), 10);
hours.push({ time: t, hour: hour, temp: temp });
}
}
if (hours.length < 2) throw new Error("Hourly data unavailable");
const info = WEATHER[code] || { label: "Unknown conditions", theme: "cloudy", icon: "cloud" };
document.body.dataset.theme = info.theme;
const df = formatDate(date);
let relative = "";
if (date === todayUTC) relative = "Today";
else {
const dNow = Date.UTC(
parseInt(todayUTC.slice(0, 4), 10),
parseInt(todayUTC.slice(5, 7), 10) - 1,
parseInt(todayUTC.slice(8, 10), 10)
);
const dT = Date.UTC(
parseInt(date.slice(0, 4), 10),
parseInt(date.slice(5, 7), 10) - 1,
parseInt(date.slice(8, 10), 10)
);
const diff = Math.round((dT - dNow) / 86400000);
if (diff === 1) relative = "Tomorrow";
else if (diff === -1) relative = "Yesterday";
else if (diff > 1) relative = "In " + diff + " days";
else relative = Math.abs(diff) + " days ago";
}
const hi = Math.round(dmax);
const lo = Math.round(dmin);
const html = `
<div class="card" role="region" aria-label="Weather card">
<header class="header">
<div class="brand">
<div class="brand-badge">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="4" fill="#ffd66b"/>
<g stroke="#ffd66b" stroke-width="1.8" stroke-linecap="round">
<line x1="12" y1="2.5" x2="12" y2="5"/>
<line x1="12" y1="19" x2="12" y2="21.5"/>
<line x1="2.5" y1="12" x2="5" y2="12"/>
<line x1="19" y1="12" x2="21.5" y2="12"/>
<line x1="5.3" y1="5.3" x2="7" y2="7"/>
<line x1="17" y1="17" x2="18.7" y2="18.7"/>
<line x1="5.3" y1="18.7" x2="7" y2="17"/>
<line x1="17" y1="7" x2="18.7" y2="5.3"/>
</g>
</svg>
</div>
<div class="brand-text">Weather Forecast</div>
</div>
<div class="location-tag">
<span class="pulse" aria-hidden="true"></span>
<span class="name">${escapeHTML(name)}</span>
<span class="coords">${formatCoords(lat, lon)}</span>
</div>
</header>
<section class="main">
<div class="summary">
<div class="date-line">
<span>${escapeHTML(relative)}</span>
<span class="dot"></span>
<span>${df.weekday}, ${df.month} ${df.day}, ${df.year}</span>
<span class="dot"></span>
<span>UTC</span>
</div>
<h1 class="place">
<span>${escapeHTML(name)}</span>
</h1>
<div class="condition">
${conditionInlineIcon(info.icon)}
<span>${info.label}</span>
</div>
<div class="temps">
<div class="temp-hero">${hi}<span class="deg">°</span></div>
<div class="temp-range">
<div class="temp-item"><span class="arrow">↑</span><span class="label">High</span><span class="value">${hi}°</span></div>
<div class="temp-item low"><span class="arrow">↓</span><span class="label">Low</span><span class="value">${lo}°</span></div>
</div>
</div>
</div>
<div class="icon-wrap">
${iconSVG(info.icon)}
</div>
</section>
<section class="hourly">
<div class="hourly-head">
<div class="hourly-title">
<span class="marker"></span>
<span>Hourly temperature · ${hours.length} hours</span>
</div>
<div class="hourly-stats">
<span class="hi">High<strong>${hi}°</strong></span>
<span class="lo">Low<strong>${lo}°</strong></span>
<span>Range<strong>${(hi - lo)}°</strong></span>
</div>
</div>
<div class="chart-wrap">
${renderChart(hours)}
</div>
</section>
</div>
`;
document.getElementById("app").innerHTML = html;
}
function conditionInlineIcon(kind) {
const stroke = "currentColor";
switch (kind) {
case "sun":
case "sun-cloud":
return `<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="4" fill="${stroke}" opacity="0.9"/><g stroke="${stroke}" stroke-width="1.7" stroke-linecap="round"><line x1="12" y1="2.5" x2="12" y2="5"/><line x1="12" y1="19" x2="12" y2="21.5"/><line x1="2.5" y1="12" x2="5" y2="12"/><line x1="19" y1="12" x2="21.5" y2="12"/><line x1="5.3" y1="5.3" x2="7" y2="7"/><line x1="17" y1="17" x2="18.7" y2="18.7"/><line x1="5.3" y1="18.7" x2="7" y2="17"/><line x1="17" y1="7" x2="18.7" y2="5.3"/></g></svg>`;
case "cloud":
case "fog":
return `<svg viewBox="0 0 24 24" fill="${stroke}" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 18h11a3.5 3.5 0 0 0 .5-6.96A5.5 5.5 0 0 0 7.34 10 4 4 0 0 0 6.5 18Z"/></svg>`;
case "rain":
case "drizzle":
return `<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="${stroke}" d="M6.5 15h11a3.5 3.5 0 0 0 .5-6.96A5.5 5.5 0 0 0 7.34 7 4 4 0 0 0 6.5 15Z"/><g stroke="${stroke}" stroke-width="1.6" stroke-linecap="round"><line x1="8" y1="18" x2="7" y2="21"/><line x1="12" y1="18" x2="11" y2="21"/><line x1="16" y1="18" x2="15" y2="21"/></g></svg>`;
case "snow":
return `<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="${stroke}" d="M6.5 15h11a3.5 3.5 0 0 0 .5-6.96A5.5 5.5 0 0 0 7.34 7 4 4 0 0 0 6.5 15Z"/><g fill="${stroke}"><circle cx="8" cy="19.5" r="1"/><circle cx="12" cy="20.5" r="1"/><circle cx="16" cy="19.5" r="1"/></g></svg>`;
case "storm":
return `<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="${stroke}" d="M6.5 14h11a3.5 3.5 0 0 0 .5-6.96A5.5 5.5 0 0 0 7.34 6 4 4 0 0 0 6.5 14Z"/><path fill="#ffd66b" d="m13 14-3 5h2l-1 3 4-5h-2l1-3z"/></svg>`;
}
return "";
}
function renderError(err, ctx) {
document.body.dataset.theme = "cloudy";
const detail = (err && err.message) ? err.message : "Unknown error";
const dateInfo = ctx ? formatDate(ctx.date) : null;
const locName = ctx ? ctx.name : "";
document.getElementById("app").innerHTML = `
<div class="error-card" role="alert">
<div class="error-icon">
<svg width="30" height="30" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="1.8"/>
<line x1="12" y1="7" x2="12" y2="13" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
<circle cx="12" cy="16.5" r="1.1" fill="currentColor"/>
</svg>
</div>
<div class="error-title">Weather data could not be loaded</div>
<div class="error-message">
We couldn't fetch the forecast${locName ? " for " + escapeHTML(locName) : ""}${dateInfo ? " on " + dateInfo.weekday + ", " + dateInfo.month + " " + dateInfo.day + ", " + dateInfo.year : ""}.
Please check your connection or try a different date.
</div>
<div class="error-detail">${escapeHTML(detail)}</div>
</div>
`;
}
async function main() {
const ctx = parseParams();
try {
const data = await fetchWeather(ctx);
ctx.data = data;
render(ctx);
} catch (err) {
renderError(err, ctx);
}
}
main();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 41,070 | html / css / js | 423 / 14,235 / 26,412 |
|---|---|---|---|
| dom nodes | 13 | dom depth | 5 |
| css rules | 101 | js present | yes |
| brightness | 105.2 | contrast | 29.6 |
| colorfulness | 30.8 | whitespace | 44.1% |
This slot's telemetry
| prompt tokens | 61 | completion tokens | 72,756 |
|---|---|---|---|
| total tokens | 72,817 | wall | 1,070.6 s |
| cost | — | request id | — |
config.json613 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-opus-4-7-thinking-eff-xhigh--cli--cursor--dev",
"effort": "xhigh",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-opus-4-7-thinking",
"protocol": "cli",
"served_model": "claude-opus-4-7-thinking-xhigh",
"telemetry": {
"completion_tokens": 120214,
"cost_usd": null,
"prompt_tokens": 81,
"total_tokens": 120295,
"wall_ms": 1519222
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-s0",
"config_id": "claude-opus-4-7-thinking-eff-xhigh--cli--cursor--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T21:28:39.784202+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T21:10:49.121147+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T21:30:00.402667+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T21:28:43.737091+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T21:31:03.264881+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T21:30:03.318719+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T21:36:18.317154+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T21:31:06.332594+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}