deepseek-v4-flash-0731 @ off · dsh

dshoff
config
deepseek-v4-flash-0731-eff-off--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-flash
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
deepseek-v4-flash-0731 @off · 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 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 tempambiguousshown: 16max-equals-min
  • min tempambiguousshown: 16max-equals-min
  • hourlyambiguouscoverage · 0 match · 0 mismatch · 24 not shown
  • request sidematch0 violation(s)

extractor fidelity-extractor-v1+Berlin-2026-07-15

Source — raw model output, one byte unchanged

download card.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Weather Card</title>
<style>
  :root {
    --bg: #101626;
    --card-1: #1b2437;
    --card-2: #243148;
    --accent: #6fb1ff;
    --accent-2: #8ee0ff;
    --text: #eef3ff;
    --muted: #9fb0cc;
    --muted-2: #75839f;
    --radius: 24px;
    --shadow: 0 30px 60px -24px rgba(0, 0, 0, 0.65);
  }

  * { box-sizing: border-box; margin: 0; padding: 0; }

  body {
    font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont,
      "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    background:
      radial-gradient(1200px 800px at 20% 10%, #2a3a5c 0%, transparent 55%),
      radial-gradient(1000px 700px at 85% 90%, #1d2b45 0%, transparent 55%),
      var(--bg);
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text);
    padding: 24px;
  }

  .card {
    width: 560px;
    border-radius: var(--radius);
    background: linear-gradient(160deg, var(--card-1) 0%, var(--card-2) 100%);
    box-shadow: var(--shadow);
    border: 1px solid rgba(255, 255, 255, 0.06);
    overflow: hidden;
    position: relative;
  }

  /* subtle gradient sheen across top of card */
  .card::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(
      180deg,
      rgba(255, 255, 255, 0.04) 0%,
      rgba(255, 255, 255, 0) 30%
    );
    pointer-events: none;
    z-index: 1;
  }

  .card-inner {
    position: relative;
    z-index: 2;
    padding: 28px 28px 24px;
  }

  .card.loading .content,
  .card.error .content { display: none; }

  .header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 20px;
  }

  .location-icon {
    width: 44px;
    height: 44px;
    border-radius: 13px;
    background: linear-gradient(140deg, rgba(111, 177, 255, 0.25), rgba(142, 224, 255, 0.12));
    border: 1px solid rgba(111, 177, 255, 0.35);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
  }

  .location-icon svg { width: 24px; height: 24px; }

  .title {
    font-size: 22px;
    font-weight: 700;
    letter-spacing: -0.02em;
    display: flex;
    align-items: center;
    gap: 10px;
    line-height: 1.25;
  }

  .title .city { word-break: break-word; }

  .date {
    margin-top: 5px;
    font-size: 14px;
    color: var(--muted);
    font-weight: 450;
  }

  .temp-big { font-size: 15px; color: var(--muted-2); margin-top: 6px; }

  .weather {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    background: rgba(255, 255, 255, 0.035);
    border: 1px solid rgba(255, 255, 255, 0.06);
    border-radius: 20px;
    padding: 20px 24px;
    margin-bottom: 22px;
  }

  .weather-main {
    display: flex;
    align-items: center;
    gap: 20px;
  }

  .weather-icon {
    width: 78px;
    height: 78px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent-2);
    flex-shrink: 0;
  }

  .weather-icon svg { width: 100%; height: 100%; }

  .condition { font-size: 18px; font-weight: 650; line-height: 1.2; }

  .condition-sub {
    font-size: 13px;
    color: var(--muted);
    margin-top: 4px;
    font-weight: 450;
  }

  .temps {
    text-align: right;
    display: flex;
    flex-direction: column;
    gap: 6px;
  }

  .temp-line { display: flex; align-items: baseline; justify-content: flex-end; gap: 6px; }

  .temp-max {
    font-size: 54px;
    font-weight: 750;
    line-height: 1;
    letter-spacing: -0.04em;
  }

  .temp-min {
    font-size: 20px;
    font-weight: 550;
    color: var(--muted);
    letter-spacing: -0.01em;
  }

  .section-label {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
  }

  .section-label h3 {
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--muted-2);
  }

  .hour-chips {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(72px, 1fr));
    gap: 10px;
  }

  .chip {
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid rgba(255, 255, 255, 0.06);
    border-radius: 14px;
    padding: 10px 6px;
    text-align: center;
  }

  .chip .h-time {
    font-size: 12px;
    color: var(--muted-2);
    font-weight: 550;
    letter-spacing: 0.02em;
  }

  .chip .h-temp {
    font-size: 15px;
    font-weight: 650;
    margin-top: 5px;
  }

  .chip .h-mini {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 4px;
    color: var(--muted);
  }

  .chip svg { width: 18px; height: 18px; }

  /* Message states */
  .message {
    display: none;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 48px 20px;
    gap: 14px;
  }

  .card.loading .loading { display: flex; }
  .card.error .error { display: flex; }

  .msg-icon {
    width: 56px;
    height: 56px;
    border-radius: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent);
    background: rgba(111, 177, 255, 0.12);
    border: 1px solid rgba(111, 177, 255, 0.24);
  }

  .msg-icon svg { width: 28px; height: 28px; }

  .spinner {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 3px solid rgba(111, 177, 255, 0.22);
    border-top-color: var(--accent);
    animation: spin 0.8s linear infinite;
  }

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

  .message h2 {
    font-size: 17px;
    font-weight: 650;
  }

  .message p {
    font-size: 13.5px;
    color: var(--muted);
    max-width: 320px;
    line-height: 1.5;
  }

  .retry {
    margin-top: 6px;
    background: rgba(111, 177, 255, 0.14);
    color: var(--accent-2);
    border: 1px solid rgba(111, 177, 255, 0.3);
    padding: 9px 18px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s ease;
  }

  .retry:hover { background: rgba(111, 177, 255, 0.24); }

  .footer-note {
    margin-top: 18px;
    text-align: center;
    font-size: 11px;
    color: var(--muted-2);
    letter-spacing: 0.02em;
  }
</style>
</head>
<body>
  <div class="card" id="card">

    <div class="card-inner">

      <!-- Loading -->
      <div class="message loading">
        <div class="msg-icon"><div class="spinner"></div></div>
        <h2>Loading weather…</h2>
        <p>Fetching conditions for the requested location and date.</p>
      </div>

      <!-- Error -->
      <div class="message error">
        <div class="msg-icon">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
            <circle cx="12" cy="12" r="9.5"></circle>
            <line x1="12" y1="7.5" x2="12" y2="13"></line>
            <line x1="12" y1="16" x2="12" y2="16.2"></line>
          </svg>
        </div>
        <h2>Couldn’t load weather data</h2>
        <p id="errorMsg">Something went wrong while fetching the forecast. Please try again.</p>
        <button class="retry" id="retryBtn">Try again</button>
      </div>

      <!-- Content -->
      <div class="content">
        <div class="header">
          <div class="location-icon">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"
              stroke-linecap="round" stroke-linejoin="round">
              <path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"></path>
              <circle cx="12" cy="10" r="3"></circle>
            </svg>
          </div>
          <div style="flex:1;min-width:0">
            <div class="title">
              <span class="city" id="cityName">—</span>
            </div>
            <div class="date">
              <span id="dateDisplay">—</span>
              <span class="temp-big" id="tempRangeDisplay">—</span>
            </div>
          </div>
        </div>

        <div class="weather">
          <div class="weather-main">
            <div class="weather-icon" id="weatherIcon"></div>
            <div>
              <div class="condition" id="conditionText">—</div>
              <div class="condition-sub" id="conditionCode">—</div>
            </div>
          </div>
          <div class="temps">
            <div class="temp-line">
              <span class="temp-max" id="tempMax">—</span>
              <span class="temp-max-unit" id="tempMaxUnit">°</span>
            </div>
            <div class="temp-line">
              <span class="temp-min" id="tempMin">—</span>
            </div>
          </div>
        </div>

        <div class="section-label">
          <h3>Hourly temperature</h3>
          <h3 id="timezoneNote">UTC</h3>
        </div>
        <div class="hour-chips" id="hourly"></div>

        <div class="footer-note" id="dateNote"></div>
      </div>

    </div>
  </div>

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

  var card = document.getElementById("card");

  // ---------- state ----------
  function pad(n) { return n < 10 ? "0" + n : "" + n; }

  function todayUTC() {
    var d = new Date();
    return d.getUTCFullYear() + "-" + pad(d.getUTCMonth() + 1) + "-" + pad(d.getUTCDate());
  }

  function parseParams() {
    var p = new URLSearchParams(window.location.search);
    var date = p.get("date") || todayUTC();
    var lat = p.get("lat");
    var lon = p.get("lon");
    if (lat !== null && lon !== null) {
      lat = parseFloat(lat);
      lon = parseFloat(lon);
      if (isNaN(lat) || isNaN(lon)) { lat = 52.52; lon = 13.405; }
    } else {
      lat = 52.52;
      lon = 13.405;
    }
    return {
      lat: lat,
      lon: lon,
      name: p.get("name") || "Berlin",
      date: /^\d{4}-\d{2}-\d{2}$/.test(date) ? date : todayUTC()
    };
  }

  // ---------- WMO weather codes ----------
  var ICONS = {
    "01": sun, "02": cloudSun, "03": cloud, "04": cloudHeavy,
    "45": fog, "48": fog, "51": drizzle, "53": drizzle, "55": drizzle,
    "56": drizzle, "57": drizzle,
    "61": rain, "63": rain, "65": rainHeavy, "66": rain, "67": rain,
    "71": snow, "73": snow, "75": snowHeavy, "77": snow,
    "80": rain, "81": rain, "82": rain,
    "85": snow, "86": snowHeavy,
    "95": storm, "96": storm, "99": storm
  };

  function weatherInfo(code) {
    if (code <= 1) return { text: "Clear sky", icon: "01" };
    if (code === 2) return { text: "Partly cloudy", icon: "02" };
    if (code === 3) return { text: "Overcast", icon: "03" };
    if (code >= 45 && code <= 48) return { text: "Foggy", icon: "45" };
    if (code >= 51 && code <= 57) return { text: "Drizzle", icon: "51" };
    if (code >= 61 && code <= 65) return { text: "Rain", icon: "61" };
    if (code === 66 || code === 67) return { text: "Freezing rain", icon: "66" };
    if (code === 71 || code === 73) return { text: "Snow", icon: "71" };
    if (code === 75 || code === 77) return { text: "Heavy snow", icon: "75" };
    if (code >= 80 && code < 83) return { text: "Rain showers", icon: "80" };
    if (code >= 85 && code < 87) return { text: "Snow showers", icon: "85" };
    if (code >= 95) return { text: "Thunderstorm", icon: "95" };
    return { text: "Unknown", icon: "03" };
  }

  // ---------- svg icon template ----------
  function sun() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<circle cx="12" cy="12" r="4.4" fill="currentColor" stroke="none"></circle>' +
      '<path d="M12 2.5v2.2M12 19.3v2.2M4.9 4.9l1.6 1.6M17.5 17.5l1.6 1.6M2.5 12h2.2M19.3 12h2.2M4.9 19.1l1.6-1.6M17.5 6.5l1.6-1.6"></path></svg>';
  }
  function cloudSun() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<circle cx="8" cy="8" r="3.6" fill="rgba(255,220,140,0.9)" stroke="none"></circle>' +
      '<path d="M8 1.6v1.6M1.6 8h1.6M3.1 3.1l1.1 1.1" opacity="0.8"></path>' +
      '<path d="M17 9a3.5 3.5 0 1 1 .6 6.96A3 3 0 0 1 18 14a3 3 0 0 0-3-3 4.5 4.5 0 0 0-1 .1A4.2 4.2 0 0 0 11 11a3.6 3.6 0 0 0 0 7h7a3.5 3.5 0 0 0-1-9Z"></path></svg>';
  }
  function cloud() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path></svg>';
  }
  function cloudHeavy() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18.5 9.5a3.5 3.5 0 1 1 .4 6.99H6a3.5 3.5 0 1 1 .3-6.99A4.4 4.4 0 0 1 12 6.4a4.6 4.6 0 0 1 6.5 3.1Z"></path>' +
      '<path d="M4 17l-1 1.6M8 17l-1 1.6M12 17l-1 1.6M16 17l-1 1.6" opacity="0.7"></path></svg>';
  }
  function fog() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 11a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 7.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M7 5h3M14 5h3V5M5 8h2M17 8h2" opacity="0.7"></path></svg>';
  }
  function drizzle() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M9 15.2l-1 2M12.5 15.2l-1 2M16 15.2l-1 2" opacity="0.8"></path></svg>';
  }
  function rain() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M9 16l-1.2 3M12.5 16l-1.2 3M16 16l-1.2 3" opacity="0.85"></path></svg>';
  }
  function rainHeavy() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M9 16l-1.4 3.1M12.5 16l-1.4 3.1M16 16l-1.4 3.1" opacity="0.85"></path></svg>';
  }
  function snow() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M10 16l-1.4 3M13.5 16l-1.4 3M17 16l-1.4 3" opacity="0.8"></path></svg>';
  }
  function snowHeavy() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M10 16l-1.7 3M13.7 16l-1.7 3M17.4 16l-1.7 3" opacity="0.8"></path></svg>';
  }
  function storm() {
    return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">' +
      '<path d="M18 10a3.5 3.5 0 1 1 .6 6.96H5.5a3.5 3.5 0 1 1 .3-6.99A4.5 4.5 0 0 1 12 6.5a4.6 4.6 0 0 1 6 3.5Z"></path>' +
      '<path d="M12 13l-2 4h3l-1.5 3.5L14.5 15h-3l1.2-2.2" opacity="0.9"></path></svg>';
  }

  // ---------- date formatting ----------
  var MONTHS = ["January","February","March","April","May","June","July",
    "August","September","October","November","December"];
  var DOW = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

  function formatDate(iso) {
    var p = iso.split("-");
    var y = +p[0], m = +p[1], d = +p[2];
    var dt = new Date(Date.UTC(y, m - 1, d));
    var dayName = DOW[dt.getUTCDay()];
    var ord;
    if (d % 100 >= 11 && d % 100 <= 13) ord = "th";
    else if (d % 10 === 1) ord = "st";
    else if (d % 10 === 2) ord = "nd";
    else if (d % 10 === 3) ord = "rd";
    else ord = "th";
    return dayName + ", " + MONTHS[m - 1] + " " + d + ord + ", " + y;
  }

  function isToday(iso) {
    return iso === todayUTC();
  }
  function isTheFuture(iso) {
    return iso > todayUTC();
  }
  function isThePast(iso) {
    return iso < todayUTC();
  }

  // ---------- build ----------
  function el(id) { return document.getElementById(id); }

  function updateView(cfg, data, hourly) {
    el("cityName").textContent = cfg.name;

    el("dateDisplay").textContent = formatDate(cfg.date);

    var daily = data.daily;
    var dmax = daily.temperature_2m_max[0];
    var dmin = daily.temperature_2m_min[0];
    var code = daily.weather_code[0];
    var info = weatherInfo(code);

    el("tempMax").textContent = Math.round(dmax) + "";
    el("tempMin").textContent = "↓ " + Math.round(dmin) + "°C";
    el("weatherIcon").innerHTML = ICONS[info.icon] ? ICONS[info.icon]() : ICONS["01"]();
    el("conditionText").textContent = info.text;
    el("conditionCode").textContent = "code " + code;

    // hourly
    var times = data.hourly.time;
    var vals = data.hourly.temperature_2m;
    var container = el("hourly");
    container.innerHTML = "";

    var hourIsoPrefix = cfg.date + "T";

    for (var i = 0; i < times.length; i++) {
      if (times[i].indexOf(hourIsoPrefix) !== 0) {
        if (times[i] > (cfg.date + "T24")) break;
        continue;
      }
      var hour = parseInt(times[i].substring(11, 13), 10);
      var t = Math.round(vals[i]);

      var chip = document.createElement("div");
      chip.className = "chip";
      chip.innerHTML =
        '<div class="h-time">' + pad(hour) + ":00</div>" +
        '<div class="h-temp">' + t + "°</div>" +
        '<div class="h-mini">' + ICONS[info.icon]() + "</div>";
      container.appendChild(chip);
    }

    var note = "Hourly temperatures in °C · ";
    if (isToday(cfg.date)) note += "today";
    else if (isTheFuture(cfg.date)) note += "forecast";
    else note += "historical";
    el("dateNote").textContent = note;

    card.className = "card";
  }

  // ---------- fetch ----------
  function buildEndpoint(cfg) {
    var base, isPast = false;
    if (isThePast(cfg.date)) {
      base = "/api/om/archive";
      isPast = true;
    } else {
      base = "/api/om/forecast";
    }
    var q = new URLSearchParams({
      latitude: cfg.lat,
      longitude: cfg.lon,
      daily: "temperature_2m_max,temperature_2m_min,weather_code",
      hourly: "temperature_2m",
      timezone: "UTC",
      temperature_unit: "celsius",
      start_date: cfg.date,
      end_date: cfg.date
    });
    // archive endpoint accepts wind_speed_unit/past_days optionally, but we keep it minimal
    return base + "?" + q.toString() + (isPast ? "" : "");
  }

  function fetchWeather(cfg) {
    card.className = "card loading";
    if (typeof AbortController !== "undefined") {
      var controller = new AbortController();
      var timeoutId = setTimeout(function () { controller.abort(); }, 15000);
      f();

      function f() {
        fetch(buildEndpoint(cfg), { signal: controller.signal })
          .then(function (r) {
            if (!r.ok) throw new Error("HTTP " + r.status);
            return r.json();
          })
          .then(function (data) {
            clearTimeout(timeoutId);
            if (!data || !data.daily || data.daily.temperature_2m_max.length === 0 ||
                !data.hourly) {
              throw new Error("Missing data");
            }
            updateView(cfg, data);
          })
          .catch(function (e) {
            clearTimeout(timeoutId);
            if (e && e.name === "AbortError") {
              el("errorMsg").textContent = "The request timed out. Please try again.";
            } else {
              el("errorMsg").textContent =
                "We couldn’t retrieve weather data for this location and date. " +
                "The service may be unavailable — please try again.";
            }
            card.className = "card error";
          });
      }
    } else {
      // fallback without AbortController
      fetch(buildEndpoint(cfg))
        .then(function (r) { if (!r.ok) throw new Error("HTTP"); return r.json(); })
        .then(function (data) { updateView(cfg, data); card.className = "card"; })
        .catch(function () {
          el("errorMsg").textContent = "We couldn’t retrieve weather data for this location and date.";
          card.className = "card error";
        });
    }
  }

  // ---------- init ----------
  function run() {
    var cfg = parseParams();
    fetchWeather(cfg);
  }

  var retry = el("retryBtn");
  retry.addEventListener("click", run);

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

L1 — cheap deterministic descriptors

bytes total20,964html / css / js2,926 / 6,132 / 11,906
dom nodes53dom depth9
css rules45js presentyes
brightness38.6contrast17.0
colorfulness14.3whitespace54.2%

This slot's telemetry

prompt tokens8,008completion tokens15,418
total tokens23,426wall68.2 s
cost—request id—
config.json601 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_DEEPSEEK_KEY",
    "method": "api-key"
  },
  "billing": "api",
  "config_id": "deepseek-v4-flash-0731-eff-off--cli--dsh--dev",
  "effort": "off",
  "family": "deepseek",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "deepseek-v4-flash-0731",
  "protocol": "cli",
  "served_model": "deepseek-v4-flash",
  "telemetry": {
    "completion_tokens": 48926,
    "cost_usd": null,
    "prompt_tokens": 38953,
    "total_tokens": 87879,
    "wall_ms": 260833
  },
  "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-flash-0731-eff-off--cli--dsh--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-21T13:19:08.071645+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:18:41.593840+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:20:19.985436+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:19:11.753353+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:22:39.923748+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:20:23.472427+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-08-21T13:23:13.134588+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-21T13:22:43.453423+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-min"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}