deepseek-v4-pro-0812 @ high · dsh

dshhigh
config
deepseek-v4-pro-0812-eff-high--cli--dsh--dev
batch
2026-07-19--unified
transport
dsh-0.1.0-rc.8-headless-isolated-home
protocol
cli · api
served model
deepseek-v4-pro
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
deepseek-v4-pro-0812 @high · dsh 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 neighborsNo similarity data for this session — this batch has no computed pairs.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempmatchshown: 25
  • 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=1280, initial-scale=1">
<title>Weather</title>
<style>
  :root {
    --bg-grad: linear-gradient(165deg, #2f80ed 0%, #56ccf2 55%, #f2994a 100%);
    --accent: #3b82f6;
    --accent-soft: rgba(59, 130, 246, 0.16);
    --ink: #16202e;
    --ink-muted: #5b6b7d;
    --card: rgba(255, 255, 255, 0.86);
    --card-border: rgba(255, 255, 255, 0.65);
    --shadow: 0 30px 70px -25px rgba(12, 25, 50, 0.45);
  }

  * { box-sizing: border-box; }

  html, body { height: 100%; }

  body {
    margin: 0;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 44px;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    background: var(--bg-grad);
    background-attachment: fixed;
    color: var(--ink);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
  }

  .card {
    width: min(1120px, 100%);
    background: var(--card);
    backdrop-filter: blur(24px) saturate(150%);
    -webkit-backdrop-filter: blur(24px) saturate(150%);
    border: 1px solid var(--card-border);
    border-radius: 28px;
    box-shadow: var(--shadow);
    padding: 40px 44px 36px;
  }

  /* ---------- Header ---------- */
  .head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    margin-bottom: 30px;
  }

  .loc { display: flex; align-items: center; gap: 16px; min-width: 0; }

  .loc-pin {
    width: 46px;
    height: 46px;
    flex: 0 0 auto;
    border-radius: 14px;
    background: var(--accent-soft);
    color: var(--accent);
    display: flex;
    align-items: center;
    justify-content: center;
  }

  h1 {
    margin: 0;
    font-size: 30px;
    font-weight: 750;
    letter-spacing: -0.02em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 58vw;
  }

  .date { margin: 3px 0 0; font-size: 15px; color: var(--ink-muted); font-weight: 500; }

  .badge {
    align-self: flex-start;
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--accent);
    background: var(--accent-soft);
    padding: 8px 15px;
    border-radius: 999px;
    white-space: nowrap;
  }

  /* ---------- Status / loading / error ---------- */
  .status {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 18px 0;
    color: var(--ink-muted);
    font-size: 15px;
    font-weight: 500;
  }

  .status.error {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    padding: 26px 0;
  }

  .spinner {
    width: 22px;
    height: 22px;
    border: 3px solid rgba(22, 32, 46, 0.14);
    border-top-color: var(--accent);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
  }

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

  .error-msg { font-size: 18px; color: #b91c1c; font-weight: 700; }
  .error-sub { font-size: 14px; color: var(--ink-muted); }

  .retry {
    margin-top: 10px;
    font: inherit;
    font-weight: 600;
    font-size: 14px;
    color: #fff;
    background: var(--accent);
    border: none;
    border-radius: 12px;
    padding: 10px 20px;
    cursor: pointer;
    transition: transform 0.15s ease, filter 0.15s ease;
  }
  .retry:hover { filter: brightness(1.06); transform: translateY(-1px); }
  .retry:active { transform: translateY(0); }

  /* ---------- Hero ---------- */
  .hero {
    display: grid;
    grid-template-columns: 296px 1fr;
    gap: 46px;
    align-items: center;
    animation: rise 0.5s ease both;
  }

  .summary { display: flex; flex-direction: column; gap: 22px; }

  .icon-ring {
    width: 112px;
    height: 112px;
    border-radius: 50%;
    background: var(--accent-soft);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.55);
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .wx-emoji { font-size: 58px; line-height: 1; }

  .cond { font-size: 21px; font-weight: 650; letter-spacing: -0.01em; }

  .stats { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }

  .stat {
    background: rgba(22, 32, 46, 0.05);
    border: 1px solid rgba(22, 32, 46, 0.05);
    border-radius: 16px;
    padding: 14px 16px;
    display: flex;
    flex-direction: column;
    gap: 3px;
  }

  .stat-label {
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-muted);
  }

  .stat-value { font-size: 30px; font-weight: 750; letter-spacing: -0.02em; }

  .chart-wrap { min-width: 0; }

  .chart-title {
    font-size: 13px;
    font-weight: 650;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--ink-muted);
    margin-bottom: 10px;
  }

  .chart-box { position: relative; }

  #chart { display: block; width: 100%; height: auto; }

  .chart-label {
    fill: var(--ink-muted);
    font-size: 12.5px;
    font-weight: 600;
    stroke: #ffffff;
    stroke-width: 3px;
    paint-order: stroke;
  }

  .guide {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 1px;
    background: rgba(22, 32, 46, 0.28);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.15s ease;
  }

  .tooltip {
    position: absolute;
    top: -8px;
    transform: translate(-50%, -100%);
    background: #16202e;
    color: #fff;
    font-size: 12.5px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    padding: 6px 11px;
    border-radius: 9px;
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.15s ease;
    box-shadow: 0 8px 18px rgba(15, 30, 60, 0.28);
  }

  .axis { position: relative; height: 24px; margin-top: 6px; }

  .axis-label {
    position: absolute;
    transform: translateX(-50%);
    font-size: 11px;
    color: var(--ink-muted);
    font-variant-numeric: tabular-nums;
  }

  /* ---------- Hourly strip ---------- */
  .hours {
    margin-top: 28px;
    display: flex;
    gap: 6px;
    overflow-x: auto;
    padding-bottom: 4px;
    animation: rise 0.5s 0.08s ease both;
  }

  .tile {
    flex: 1 0 36px;
    min-width: 36px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    background: rgba(22, 32, 46, 0.04);
    border: 1px solid transparent;
    border-radius: 12px;
    padding: 9px 4px 10px;
    transition: background 0.18s ease, transform 0.18s ease, border-color 0.18s ease;
  }

  .tile:hover { background: rgba(22, 32, 46, 0.08); transform: translateY(-2px); }

  .tile-bar-wrap {
    height: 34px;
    width: 100%;
    display: flex;
    align-items: flex-end;
    justify-content: center;
  }

  .tile-bar { width: 64%; border-radius: 4px 4px 0 0; }

  .tile-hour { font-size: 11px; color: var(--ink-muted); font-variant-numeric: tabular-nums; }
  .tile-temp { font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; }

  .tile.now {
    background: var(--accent-soft);
    border-color: var(--accent);
  }
  .tile.now .tile-hour { color: var(--accent); font-weight: 700; }
  .tile.now .tile-temp { color: var(--accent); font-weight: 700; }

  @keyframes rise {
    from { opacity: 0; transform: translateY(10px); }
    to   { opacity: 1; transform: translateY(0); }
  }

  @media (max-width: 860px) {
    body { padding: 24px; }
    .hero { grid-template-columns: 1fr; gap: 30px; }
  }
</style>
</head>
<body>
  <main class="card">
    <header class="head">
      <div class="loc">
        <div class="loc-pin" aria-hidden="true">
          <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 1 1 16 0Z"/>
            <circle cx="12" cy="10" r="3"/>
          </svg>
        </div>
        <div>
          <h1 id="locName">Berlin</h1>
          <p class="date" id="locDate">&mdash;</p>
        </div>
      </div>
      <div class="badge" id="badge">Today</div>
    </header>

    <div class="status loading" id="status">
      <span class="spinner"></span><span>Loading weather&hellip;</span>
    </div>

    <section class="hero" style="display:none">
      <div class="summary">
        <div class="icon-ring"><span class="wx-emoji" id="wxEmoji">☀️</span></div>
        <div class="cond" id="wxLabel">Clear sky</div>
        <div class="stats">
          <div class="stat">
            <span class="stat-label">High</span>
            <span class="stat-value" id="hiTemp">&mdash;</span>
          </div>
          <div class="stat">
            <span class="stat-label">Low</span>
            <span class="stat-value" id="loTemp">&mdash;</span>
          </div>
        </div>
      </div>
      <div class="chart-wrap">
        <div class="chart-title">Temperature &middot; 24 hours</div>
        <div class="chart-box" id="chartBox">
          <svg id="chart" viewBox="0 0 720 250" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Hourly temperature chart"></svg>
          <div class="guide" id="guide"></div>
          <div class="tooltip" id="tooltip"></div>
        </div>
        <div class="axis" id="axis"></div>
      </div>
    </section>

    <section class="hours" id="hours" style="display:none"></section>
  </main>

  <script>
  (function () {
    'use strict';

    var WX = {
      0:  { label: 'Clear sky',              emoji: '☀️', cat: 'clear'   },
      1:  { label: 'Mainly clear',           emoji: '🌤️', cat: 'clear'   },
      2:  { label: 'Partly cloudy',          emoji: '⛅',  cat: 'partly'  },
      3:  { label: 'Overcast',               emoji: '☁️', cat: 'overcast'},
      45: { label: 'Fog',                    emoji: '🌫️', cat: 'fog'     },
      48: { label: 'Rime fog',               emoji: '🌫️', cat: 'fog'     },
      51: { label: 'Light drizzle',          emoji: '🌦️', cat: 'drizzle' },
      53: { label: 'Moderate drizzle',       emoji: '🌦️', cat: 'drizzle' },
      55: { label: 'Dense drizzle',          emoji: '🌧️', cat: 'drizzle' },
      56: { label: 'Freezing drizzle',       emoji: '🌧️', cat: 'drizzle' },
      57: { label: 'Freezing drizzle',       emoji: '🌧️', cat: 'drizzle' },
      61: { label: 'Light rain',             emoji: '🌦️', cat: 'rain'    },
      63: { label: 'Moderate rain',          emoji: '🌧️', cat: 'rain'    },
      65: { label: 'Heavy rain',             emoji: '🌧️', cat: 'rain'    },
      66: { label: 'Freezing rain',          emoji: '🌧️', cat: 'rain'    },
      67: { label: 'Freezing rain',          emoji: '🌧️', cat: 'rain'    },
      71: { label: 'Light snow',             emoji: '🌨️', cat: 'snow'    },
      73: { label: 'Moderate snow',          emoji: '🌨️', cat: 'snow'    },
      75: { label: 'Heavy snow',             emoji: '❄️', cat: 'snow'    },
      77: { label: 'Snow grains',            emoji: '❄️', cat: 'snow'    },
      80: { label: 'Light rain showers',     emoji: '🌦️', cat: 'showers' },
      81: { label: 'Moderate rain showers',  emoji: '🌧️', cat: 'showers' },
      82: { label: 'Violent rain showers',   emoji: '🌧️', cat: 'showers' },
      85: { label: 'Light snow showers',     emoji: '🌨️', cat: 'snow'    },
      86: { label: 'Heavy snow showers',     emoji: '🌨️', cat: 'snow'    },
      95: { label: 'Thunderstorm',           emoji: '⛈️', cat: 'thunder' },
      96: { label: 'Thunderstorm with hail', emoji: '⛈️', cat: 'thunder' },
      99: { label: 'Thunderstorm with hail', emoji: '⛈️', cat: 'thunder' }
    };

    var THEMES = {
      clear:    { bg: 'linear-gradient(165deg,#1f63b8 0%,#3f9be0 55%,#9fd4f2 100%)', accent: '#f6b93b' },
      partly:   { bg: 'linear-gradient(165deg,#2f6aa5 0%,#63a8d8 55%,#c8dce9 100%)', accent: '#e2a90a' },
      overcast: { bg: 'linear-gradient(165deg,#55606e 0%,#8a97a6 55%,#bcc4cd 100%)', accent: '#718096' },
      fog:      { bg: 'linear-gradient(165deg,#5a6c7d 0%,#93a5b5 55%,#cbd5e0 100%)', accent: '#8ba1b5' },
      drizzle:  { bg: 'linear-gradient(165deg,#3a5a78 0%,#5c87a6 55%,#a3bccb 100%)', accent: '#3f8fd4' },
      rain:     { bg: 'linear-gradient(165deg,#1f3a5f 0%,#35608a 55%,#6b93b5 100%)', accent: '#3b82f6' },
      snow:     { bg: 'linear-gradient(165deg,#3f6d9e 0%,#7fa9cc 55%,#dde8f2 100%)', accent: '#4f93d4' },
      showers:  { bg: 'linear-gradient(165deg,#274e7a 0%,#4d7fa8 55%,#8fb3ce 100%)', accent: '#38bdf8' },
      thunder:  { bg: 'linear-gradient(165deg,#241b4d 0%,#4a2c6e 55%,#7a4d9e 100%)', accent: '#c084fc' }
    };

    var $ = function (s) { return document.querySelector(s); };

    var params = new URLSearchParams(window.location.search);
    var lat = params.get('lat') || '52.52';
    var lon = params.get('lon') || '13.405';
    var name = params.get('name') || 'Berlin';

    var todayStr = new Date().toISOString().slice(0, 10);
    var date = params.get('date');
    if (!date || !/^\d{4}-\d{2}-\d{2}$/.test(date)) date = todayStr;

    var locName = $('#locName');
    var locDate = $('#locDate');
    var badge = $('#badge');

    locName.textContent = name;

    var dObj = new Date(date + 'T12:00:00Z');
    if (isNaN(dObj)) {
      locDate.textContent = date;
    } else {
      locDate.textContent = new Intl.DateTimeFormat('en-US', {
        weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC'
      }).format(dObj);
    }

    badge.textContent = date === todayStr ? 'Today' : (date < todayStr ? 'Historical' : 'Forecast');

    var apiPath = date < todayStr ? '/api/om/archive' : '/api/om/forecast';
    var qs = new URLSearchParams({
      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
    });

    var hero = $('.hero');
    var hoursEl = $('.hours');
    var statusEl = $('#status');

    function pad(h) { return String(h).padStart(2, '0'); }
    function fmt(v) { return Math.round(v) + '°'; }

    function showLoading() {
      hero.style.display = 'none';
      hoursEl.style.display = 'none';
      statusEl.hidden = false;
      statusEl.className = 'status loading';
      statusEl.innerHTML = '<span class="spinner"></span><span>Loading weather&hellip;</span>';
    }

    function showError() {
      hero.style.display = 'none';
      hoursEl.style.display = 'none';
      statusEl.hidden = false;
      statusEl.className = 'status error';
      statusEl.innerHTML =
        '<div class="error-msg">Couldn’t load the weather data.</div>' +
        '<div class="error-sub">Please check the location and date, then try again.</div>' +
        '<button class="retry" id="retry">Try again</button>';
      $('#retry').addEventListener('click', load);
    }

    function showData() {
      statusEl.hidden = true;
      hero.style.display = '';
      hoursEl.style.display = '';
    }

    function applyTheme(cat) {
      var t = THEMES[cat] || THEMES.partly;
      var r = document.documentElement.style;
      r.setProperty('--bg-grad', t.bg);
      r.setProperty('--accent', t.accent);
      r.setProperty('--accent-soft', hexA(t.accent, 0.18));
    }

    function hexA(hex, a) {
      var h = hex.replace('#', '');
      var r = parseInt(h.slice(0, 2), 16);
      var g = parseInt(h.slice(2, 4), 16);
      var b = parseInt(h.slice(4, 6), 16);
      return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
    }

    function renderChart(temps, times, nowIndex) {
      var svg = $('#chart');
      var n = temps.length;
      var W = 720, H = 250, PX = 16, PT = 34, PB = 30;

      var mn = Math.min.apply(null, temps);
      var mx = Math.max.apply(null, temps);
      var lo = mn, hi = mx, span = hi - lo;
      if (!isFinite(span) || span === 0) { lo = mn - 2; hi = mx + 2; span = 4; }
      else { var padV = span * 0.16; lo = mn - padV; hi = mx + padV; span = hi - lo; }

      var x = function (i) { return PX + (W - 2 * PX) * (i / (n - 1)); };
      var y = function (v) { return PT + (H - PT - PB) * (1 - (v - lo) / span); };

      var minIdx = temps.indexOf(mn);
      var maxIdx = temps.indexOf(mx);
      var baseY = y(lo);

      var pts = temps.map(function (v, i) { return [x(i), y(v)]; });
      var lineD = 'M' + pts.map(function (p) { return p[0].toFixed(2) + ',' + p[1].toFixed(2); }).join(' L');
      var areaD = lineD + ' L ' + x(n - 1).toFixed(2) + ',' + baseY.toFixed(2) + ' L ' + x(0).toFixed(2) + ',' + baseY.toFixed(2) + ' Z';

      var grid = [lo, (lo + hi) / 2, hi].map(function (v) {
        var gy = y(v).toFixed(2);
        return '<line x1="16" y1="' + gy + '" x2="' + (W - 16) + '" y2="' + gy + '" style="stroke:rgba(22,32,46,0.07)" stroke-dasharray="3 6"/>';
      }).join('');

      var dots = pts.map(function (p, i) {
        var isMin = i === minIdx, isMax = i === maxIdx, isNow = i === nowIndex;
        if (isMin || isMax) {
          return '<circle cx="' + p[0].toFixed(2) + '" cy="' + p[1].toFixed(2) + '" r="5" style="fill:var(--accent);stroke:#fff;stroke-width:2.5"/>';
        }
        if (isNow) {
          return '<circle cx="' + p[0].toFixed(2) + '" cy="' + p[1].toFixed(2) + '" r="6" style="fill:#fff;stroke:var(--accent);stroke-width:3"/>';
        }
        return '<circle cx="' + p[0].toFixed(2) + '" cy="' + p[1].toFixed(2) + '" r="2.8" style="fill:#fff;stroke:var(--accent);stroke-width:1.5"/>';
      }).join('');

      function mkLabel(i, val, above) {
        var px = x(i).toFixed(2);
        var anchor = 'middle', dx = 0;
        if (i === 0) { anchor = 'start'; dx = 6; }
        else if (i === n - 1) { anchor = 'end'; dx = -6; }
        var ty = (above ? y(val) - 11 : y(val) + 20).toFixed(2);
        return '<text x="' + (+px + dx).toFixed(2) + '" y="' + ty + '" text-anchor="' + anchor + '" class="chart-label">' + Math.round(val) + '°</text>';
      }

      var labels = maxIdx === minIdx
        ? mkLabel(maxIdx, mx, true)
        : mkLabel(maxIdx, mx, true) + mkLabel(minIdx, mn, false);

      var nowMarkup = '';
      if (nowIndex >= 0) {
        var nx = x(nowIndex).toFixed(2);
        nowMarkup = '<line x1="' + nx + '" y1="' + (PT + 4) + '" x2="' + nx + '" y2="' + (H - PB - 4) + '" style="stroke:var(--accent);stroke-width:1.5;stroke-dasharray:4 5;opacity:0.5"/>';
      }

      svg.innerHTML =
        '<defs><linearGradient id="areaGrad" x1="0" y1="0" x2="0" y2="1">' +
          '<stop offset="0" style="stop-color:var(--accent);stop-opacity:0.34"/>' +
          '<stop offset="1" style="stop-color:var(--accent);stop-opacity:0.02"/>' +
        '</linearGradient></defs>' +
        grid +
        '<path d="' + areaD + '" style="fill:url(#areaGrad)"/>' +
        '<path d="' + lineD + '" style="fill:none;stroke:var(--accent);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round"/>' +
        nowMarkup + dots + labels;

      $('#axis').innerHTML = [0, 3, 6, 9, 12, 15, 18, 21].map(function (h) {
        var frac = (x(h) / W * 100).toFixed(2);
        return '<span class="axis-label" style="left:' + frac + '%">' + pad(h) + '</span>';
      }).join('');

      setupTooltip(n, x, temps, times);
    }

    function setupTooltip(n, x, temps, times) {
      var box = $('#chartBox');
      var guide = $('#guide');
      var tip = $('#tooltip');
      var W = 720;

      box.onmousemove = function (e) {
        var rect = box.getBoundingClientRect();
        if (!rect.width) return;
        var frac = (e.clientX - rect.left) / rect.width;
        var i = Math.round(frac * (n - 1));
        i = Math.max(0, Math.min(n - 1, i));
        var leftPx = (x(i) / W) * rect.width;
        guide.style.left = leftPx + 'px';
        guide.style.opacity = '1';
        tip.style.left = Math.max(46, Math.min(rect.width - 46, leftPx)) + 'px';
        tip.textContent = pad(new Date(times[i]).getUTCHours()) + ':00  ·  ' + temps[i].toFixed(1) + '°C';
        tip.style.opacity = '1';
      };
      box.onmouseleave = function () {
        guide.style.opacity = '0';
        tip.style.opacity = '0';
      };
    }

    function renderHours(temps, times, nowIndex) {
      var box = $('#hours');
      var mn = Math.min.apply(null, temps);
      var mx = Math.max.apply(null, temps);
      var span = (mx - mn) || 1;

      box.innerHTML = '';
      for (var i = 0; i < temps.length; i++) {
        var h = new Date(times[i]).getUTCHours();
        var norm = (temps[i] - mn) / span;
        var hue = Math.round(210 - 170 * norm);
        var barH = (12 + norm * 88).toFixed(1);

        var tile = document.createElement('div');
        tile.className = 'tile' + (i === nowIndex ? ' now' : '');
        tile.title = pad(h) + ':00 — ' + temps[i].toFixed(1) + '°C';
        tile.innerHTML =
          '<div class="tile-bar-wrap"><div class="tile-bar" style="height:' + barH + '%;background:hsl(' + hue + ',80%,58%)"></div></div>' +
          '<span class="tile-hour">' + pad(h) + '</span>' +
          '<span class="tile-temp">' + Math.round(temps[i]) + '°</span>';
        box.appendChild(tile);
      }
    }

    async function load() {
      showLoading();
      try {
        var res = await fetch(apiPath + '?' + qs.toString(), { headers: { Accept: 'application/json' } });
        if (!res.ok) throw new Error('HTTP ' + res.status);
        var data = await res.json();

        var daily = data && data.daily;
        var hourly = data && data.hourly;
        if (!daily || !Array.isArray(daily.temperature_2m_max) || !daily.temperature_2m_max.length ||
            !Array.isArray(daily.temperature_2m_min) || !Array.isArray(daily.weather_code)) {
          throw new Error('Malformed daily data');
        }
        if (!hourly || !Array.isArray(hourly.temperature_2m) || !Array.isArray(hourly.time) || !hourly.temperature_2m.length) {
          throw new Error('Malformed hourly data');
        }

        var hi = daily.temperature_2m_max[0];
        var lo = daily.temperature_2m_min[0];
        var code = daily.weather_code[0];
        var temps = hourly.temperature_2m;
        var times = hourly.time;

        $('#hiTemp').textContent = fmt(hi);
        $('#loTemp').textContent = fmt(lo);

        var w = WX[code] || WX[3];
        $('#wxEmoji').textContent = w.emoji;
        $('#wxLabel').textContent = w.label;
        applyTheme(w.cat);

        var nowIndex = -1;
        if (date === todayStr) {
          var nowH = new Date().getUTCHours();
          for (var i = 0; i < times.length; i++) {
            if (new Date(times[i]).getUTCHours() === nowH) { nowIndex = i; break; }
          }
        }

        renderChart(temps, times, nowIndex);
        renderHours(temps, times, nowIndex);
        showData();
      } catch (err) {
        showError();
      }
    }

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

L1 — cheap deterministic descriptors

bytes total22,940html / css / js2,105 / 7,278 / 13,557
dom nodes42dom depth8
css rules55js presentyes
brightness198.7contrast52.0
colorfulness32.7whitespace65.7%

This slot's telemetry

prompt tokens8,090completion tokens43,544
total tokens51,634wall496.4 s
costrequest id
config.json600 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_DEEPSEEK_KEY",
    "method": "api-key"
  },
  "billing": "api",
  "config_id": "deepseek-v4-pro-0812-eff-high--cli--dsh--dev",
  "effort": "high",
  "family": "deepseek",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "deepseek-v4-pro-0812",
  "protocol": "cli",
  "served_model": "deepseek-v4-pro",
  "telemetry": {
    "completion_tokens": 101633,
    "cost_usd": null,
    "prompt_tokens": 31853,
    "total_tokens": 133486,
    "wall_ms": 1155259
  },
  "transport": "dsh-0.1.0-rc.8-headless-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-21--dsh-s0",
  "config_id": "deepseek-v4-pro-0812-eff-high--cli--dsh--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-21T13:07:24.439986+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T12:59:08.085411+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-21T13:10:07.987370+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:07:28.105411+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-21T13:12:01.101016+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:10:11.535054+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-21T13:18:34.320487+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:12:04.797112+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
    }
  }
}