kimi-k2.7-code · api

api
config
kimi-k2.7-code--api--official--dev
batch
2026-07-19--unified
transport
moonshot-official-api
protocol
api · metered
served model
kimi-k2.7-code
captured
Jul 18, 2026, 11:54 AM · N=4
variant
live
slot 0 · P-q · sandboxed iframe
kimi-k2.7-code · api P-q slot 0 screenshot

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.

similarity neighbors

within session 2026-07-19--unified

similarity measures convergence within this session — not quality.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempambiguousshown: 17max-equals-min
  • min tempambiguousshown: 17max-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=1280, height=800">
  <title>Weather Card</title>
  <style>
    * { box-sizing: border-box; margin: 0; padding: 0; }
    html, body {
      width: 100%;
      height: 100%;
      overflow: hidden;
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
      color: #fff;
      background: #0f172a;
    }
    .app {
      width: 1280px;
      height: 800px;
      margin: 0 auto;
      position: relative;
      display: flex;
      align-items: center;
      justify-content: center;
      background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 40%, #06b6d4 100%);
      overflow: hidden;
    }
    .orb {
      position: absolute;
      border-radius: 50%;
      filter: blur(80px);
      opacity: .45;
      pointer-events: none;
    }
    .orb-1 { width: 420px; height: 420px; top: -80px; left: -80px; background: #60a5fa; }
    .orb-2 { width: 360px; height: 360px; bottom: -60px; right: -60px; background: #22d3ee; }
    .orb-3 { width: 260px; height: 260px; top: 40%; left: 55%; background: #818cf8; opacity: .3; }

    .card {
      width: 960px;
      min-height: 560px;
      background: rgba(255, 255, 255, .12);
      backdrop-filter: blur(28px);
      -webkit-backdrop-filter: blur(28px);
      border: 1px solid rgba(255, 255, 255, .22);
      border-radius: 44px;
      box-shadow: 0 40px 110px rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 255, 255, .18);
      padding: 52px;
      position: relative;
      z-index: 1;
      display: flex;
      flex-direction: column;
    }

    .state {
      position: absolute;
      inset: 0;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      text-align: center;
      padding: 52px;
    }
    .state.hidden { display: none; }
    .spinner {
      width: 56px;
      height: 56px;
      border: 4px solid rgba(255,255,255,.2);
      border-top-color: #fff;
      border-radius: 50%;
      animation: spin 1s linear infinite;
      margin-bottom: 20px;
    }
    @keyframes spin { to { transform: rotate(360deg); } }

    .error-icon {
      width: 64px;
      height: 64px;
      margin-bottom: 18px;
      opacity: .9;
    }
    .error-title { font-size: 28px; font-weight: 600; margin-bottom: 8px; letter-spacing: -.2px; }
    .error-sub { font-size: 16px; opacity: .75; max-width: 420px; line-height: 1.4; }

    .content.hidden { display: none; }
    .content { display: flex; flex-direction: column; gap: 36px; animation: fadeIn .7s ease; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }

    header.top {
      display: flex;
      justify-content: space-between;
      align-items: flex-start;
      border-bottom: 1px solid rgba(255,255,255,.12);
      padding-bottom: 24px;
    }
    .location { font-size: 34px; font-weight: 700; letter-spacing: -.4px; line-height: 1.1; }
    .location svg { width: 24px; height: 24px; margin-right: 10px; vertical-align: -2px; opacity: .85; }
    .date-display { font-size: 18px; opacity: .78; margin-top: 8px; font-weight: 500; }

    .hero {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 40px;
      align-items: center;
    }
    .condition { text-align: center; }
    .condition-icon {
      width: 160px;
      height: 160px;
      margin: 0 auto 14px;
      filter: drop-shadow(0 16px 32px rgba(0,0,0,.25));
      animation: float 4s ease-in-out infinite;
    }
    @keyframes float { 0%,100%{ transform: translateY(0); } 50%{ transform: translateY(-8px); } }
    .condition-text { font-size: 22px; font-weight: 600; opacity: .95; letter-spacing: .2px; }

    .temps { display: flex; flex-direction: column; gap: 24px; }
    .temp-row { display: flex; align-items: baseline; gap: 16px; }
    .temp-value { font-size: 80px; font-weight: 800; line-height: 1; letter-spacing: -2px; }
    .temp-value.min { font-size: 60px; opacity: .85; }
    .temp-unit { font-size: 28px; font-weight: 500; opacity: .7; }
    .temp-label { font-size: 14px; text-transform: uppercase; letter-spacing: 1.5px; opacity: .65; margin-bottom: 4px; }

    .hourly { margin-top: 8px; }
    .section-title {
      font-size: 14px;
      text-transform: uppercase;
      letter-spacing: 1.6px;
      opacity: .7;
      margin-bottom: 16px;
    }
    .chart {
      height: 200px;
      background: rgba(0, 0, 0, .12);
      border: 1px solid rgba(255,255,255,.08);
      border-radius: 28px;
      padding: 20px 22px 14px;
      display: flex;
      align-items: flex-end;
      justify-content: space-between;
      gap: 8px;
    }
    .bar-col {
      flex: 1 1 0;
      min-width: 26px;
      height: 100%;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: flex-end;
      position: relative;
    }
    .bar {
      width: 100%;
      border-radius: 8px 8px 4px 4px;
      position: relative;
      transition: transform .2s ease, opacity .2s ease;
      box-shadow: inset 0 1px 0 rgba(255,255,255,.25);
    }
    .bar-col:hover .bar { transform: scaleY(1.04); opacity: .95; }
    .bar-temp {
      position: absolute;
      top: -20px;
      left: 50%;
      transform: translateX(-50%);
      font-size: 11px;
      font-weight: 700;
      white-space: nowrap;
      opacity: .95;
      text-shadow: 0 1px 2px rgba(0,0,0,.3);
    }
    .bar-time {
      margin-top: 8px;
      font-size: 10px;
      opacity: .65;
      white-space: nowrap;
    }
  </style>
</head>
<body>
  <div class="app">
    <div class="orb orb-1"></div>
    <div class="orb orb-2"></div>
    <div class="orb orb-3"></div>

    <div class="card">
      <div id="loading" class="state">
        <div class="spinner"></div>
        <div style="font-size:18px;opacity:.85;">Loading weather data…</div>
      </div>

      <div id="error" class="state hidden">
        <svg class="error-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
          <circle cx="12" cy="12" r="10"></circle>
          <line x1="12" y1="8" x2="12" y2="12"></line>
          <line x1="12" y1="16" x2="12.01" y2="16"></line>
        </svg>
        <div class="error-title">Unable to load weather data</div>
        <div class="error-sub">The forecast service could not be reached, or the requested date is not available. Please check your parameters and try again.</div>
      </div>

      <div id="content" class="content hidden">
        <header class="top">
          <div>
            <div class="location">
              <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg>
              <span id="locName">Location</span>
            </div>
            <div class="date-display" id="dateDisplay">Date</div>
          </div>
        </header>

        <section class="hero">
          <div class="condition">
            <div id="conditionIcon" class="condition-icon"></div>
            <div id="conditionText" class="condition-text">Condition</div>
          </div>
          <div class="temps">
            <div>
              <div class="temp-label">High</div>
              <div class="temp-row">
                <span id="maxTemp" class="temp-value">--</span>
                <span class="temp-unit">°C</span>
              </div>
            </div>
            <div>
              <div class="temp-label">Low</div>
              <div class="temp-row">
                <span id="minTemp" class="temp-value min">--</span>
                <span class="temp-unit">°C</span>
              </div>
            </div>
          </div>
        </section>

        <section class="hourly">
          <div class="section-title">Hourly temperatures</div>
          <div id="chart" class="chart"></div>
        </section>
      </div>
    </div>
  </div>

  <script>
    (function() {
      function getQueryParams() {
        const params = new URLSearchParams(window.location.search);
        const today = new Date().toISOString().slice(0, 10);
        let lat = parseFloat(params.get('lat'));
        let lon = parseFloat(params.get('lon'));
        if (Number.isNaN(lat)) lat = 52.52;
        if (Number.isNaN(lon)) lon = 13.405;
        const name = params.get('name') || 'Berlin';
        const date = /^\d{4}-\d{2}-\d{2}$/.test(params.get('date') || '') ? params.get('date') : today;
        return { lat, lon, name, date, today };
      }

      function chooseEndpoint(date, today) {
        return date >= today ? '/api/om/forecast' : '/api/om/archive';
      }

      function buildUrl(endpoint, { lat, lon, date }) {
        const qs = new URLSearchParams({
          latitude: String(lat),
          longitude: String(lon),
          daily: 'temperature_2m_max,temperature_2m_min,weather_code',
          hourly: 'temperature_2m',
          timezone: 'UTC',
          temperature_unit: 'celsius',
          start_date: date,
          end_date: date
        });
        return `${endpoint}?${qs.toString()}`;
      }

      function formatDateUTC(iso) {
        const [y, m, d] = iso.split('-').map(Number);
        const date = new Date(Date.UTC(y, m - 1, d));
        return new Intl.DateTimeFormat('en-US', {
          weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC'
        }).format(date);
      }

      function weatherInfo(code) {
        const sun = `<svg viewBox="0 0 100 100"><circle cx="50" cy="50" r="22" fill="#fbbf24"/><g stroke="#fbbf24" stroke-width="4" stroke-linecap="round"><line x1="50" y1="14" x2="50" y2="4"/><line x1="50" y1="86" x2="50" y2="96"/><line x1="14" y1="50" x2="4" y2="50"/><line x1="86" y1="50" x2="96" y2="50"/><line x1="24.5" y1="24.5" x2="17.5" y2="17.5"/><line x1="75.5" y1="75.5" x2="82.5" y2="82.5"/><line x1="24.5" y1="75.5" x2="17.5" y2="82.5"/><line x1="75.5" y1="24.5" x2="82.5" y2="17.5"/></g></svg>`;
        const partly = `<svg viewBox="0 0 100 100"><circle cx="38" cy="38" r="16" fill="#fbbf24"/><g fill="#e2e8f0"><circle cx="58" cy="56" r="20"/><circle cx="42" cy="62" r="18"/><circle cx="72" cy="62" r="16"/></g></svg>`;
        const cloud = `<svg viewBox="0 0 100 100"><g fill="#e2e8f0"><circle cx="38" cy="54" r="22"/><circle cx="60" cy="46" r="24"/><circle cx="78" cy="58" r="20"/><rect x="30" y="56" width="54" height="22" rx="11"/></g></svg>`;
        const fog = `<svg viewBox="0 0 100 100"><g fill="#e2e8f0"><circle cx="36" cy="44" r="20"/><circle cx="58" cy="38" r="22"/><circle cx="76" cy="48" r="18"/><rect x="28" y="48" width="56" height="20" rx="10"/></g><g stroke="#cbd5e1" stroke-width="4" stroke-linecap="round"><line x1="18" y1="74" x2="82" y2="74"/><line x1="24" y1="84" x2="76" y2="84"/><line x1="30" y1="94" x2="70" y2="94"/></g></svg>`;
        const drizzle = `<svg viewBox="0 0 100 100"><g fill="#cbd5e1"><circle cx="38" cy="42" r="20"/><circle cx="58" cy="36" r="22"/><circle cx="76" cy="46" r="18"/><rect x="30" y="46" width="56" height="20" rx="10"/></g><g stroke="#38bdf8" stroke-width="3" stroke-linecap="round"><line x1="38" y1="72" x2="34" y2="84"/><line x1="52" y1="72" x2="48" y2="84"/><line x1="66" y1="72" x2="62" y2="84"/></g></svg>`;
        const rain = `<svg viewBox="0 0 100 100"><g fill="#94a3b8"><circle cx="38" cy="40" r="20"/><circle cx="58" cy="34" r="22"/><circle cx="76" cy="44" r="18"/><rect x="30" y="44" width="56" height="20" rx="10"/></g><g stroke="#60a5fa" stroke-width="4" stroke-linecap="round"><line x1="36" y1="70" x2="30" y2="88"/><line x1="52" y1="70" x2="46" y2="88"/><line x1="68" y1="70" x2="62" y2="88"/></g></svg>`;
        const snow = `<svg viewBox="0 0 100 100"><g fill="#e2e8f0"><circle cx="38" cy="40" r="20"/><circle cx="58" cy="34" r="22"/><circle cx="76" cy="44" r="18"/><rect x="30" y="44" width="56" height="20" rx="10"/></g><g fill="#fff"><circle cx="34" cy="78" r="4"/><circle cx="52" cy="88" r="4"/><circle cx="70" cy="76" r="4"/><circle cx="44" cy="92" r="3"/><circle cx="62" cy="66" r="3"/></g></svg>`;
        const thunder = `<svg viewBox="0 0 100 100"><g fill="#64748b"><circle cx="38" cy="40" r="20"/><circle cx="58" cy="34" r="22"/><circle cx="76" cy="44" r="18"/><rect x="30" y="44" width="56" height="20" rx="10"/></g><path d="M54 56 L42 78 H54 L48 96 L68 68 H56 L62 56 Z" fill="#facc15" stroke="#facc15" stroke-width="2" stroke-linejoin="round"/></svg>`;

        if (code === 0) return { label: 'Clear sky', icon: sun };
        if (code === 1) return { label: 'Mainly clear', icon: sun };
        if (code === 2) return { label: 'Partly cloudy', icon: partly };
        if (code === 3) return { label: 'Overcast', icon: cloud };
        if (code === 45 || code === 48) return { label: 'Fog', icon: fog };
        if ([51,53,55].includes(code)) return { label: 'Drizzle', icon: drizzle };
        if ([61,63,65,80,81,82].includes(code)) return { label: 'Rain', icon: rain };
        if ([71,73,75,85,86].includes(code)) return { label: 'Snow', icon: snow };
        if ([95,96,99].includes(code)) return { label: 'Thunderstorm', icon: thunder };
        return { label: 'Unknown', icon: cloud };
      }

      function show(id) {
        document.getElementById('loading').classList.add('hidden');
        document.getElementById('error').classList.add('hidden');
        document.getElementById('content').classList.add('hidden');
        document.getElementById(id).classList.remove('hidden');
      }

      function render(params, data) {
        const daily = data.daily;
        if (!daily || !daily.time || !daily.time.length) throw new Error('No daily data');

        const maxC = Math.round(daily.temperature_2m_max[0]);
        const minC = Math.round(daily.temperature_2m_min[0]);
        const code = daily.weather_code[0];

        document.getElementById('locName').textContent = params.name;
        document.getElementById('dateDisplay').textContent = formatDateUTC(params.date);
        document.getElementById('maxTemp').textContent = maxC;
        document.getElementById('minTemp').textContent = minC;

        const info = weatherInfo(code);
        document.getElementById('conditionIcon').innerHTML = info.icon;
        document.getElementById('conditionText').textContent = info.label;

        const hourly = data.hourly || { time: [], temperature_2m: [] };
        const points = hourly.time
          .map((t, i) => ({ time: t, temp: hourly.temperature_2m[i] }))
          .filter(p => typeof p.time === 'string' && p.time.startsWith(params.date));

        const chart = document.getElementById('chart');
        chart.innerHTML = '';

        if (points.length) {
          const temps = points.map(p => p.temp);
          const minT = Math.min(...temps);
          const maxT = Math.max(...temps);
          const range = maxT - minT || 1;
          const minHeight = 12;
          const maxHeight = 140;

          points.forEach((p, i) => {
            const pct = (p.temp - minT) / range;
            const h = minHeight + pct * (maxHeight - minHeight);
            const hue = 220 - pct * 180; // cold blue to warm red
            const col = document.createElement('div');
            col.className = 'bar-col';
            col.title = `${p.time.slice(11, 16)} UTC · ${Math.round(p.temp)}°C`;

            const bar = document.createElement('div');
            bar.className = 'bar';
            bar.style.height = `${h}px`;
            bar.style.background = `linear-gradient(180deg, hsl(${hue}, 85%, 65%) 0%, hsl(${hue}, 75%, 48%) 100%)`;

            const tempLabel = document.createElement('div');
            tempLabel.className = 'bar-temp';
            tempLabel.textContent = `${Math.round(p.temp)}°`;

            const timeLabel = document.createElement('div');
            timeLabel.className = 'bar-time';
            timeLabel.textContent = p.time.slice(11, 16);

            bar.appendChild(tempLabel);
            col.appendChild(bar);
            col.appendChild(timeLabel);
            chart.appendChild(col);
          });
        } else {
          chart.innerHTML = '<div style="width:100%;text-align:center;opacity:.7;">No hourly data available.</div>';
        }

        show('content');
      }

      async function init() {
        const params = getQueryParams();
        const endpoint = chooseEndpoint(params.date, params.today);
        const url = buildUrl(endpoint, params);

        try {
          const response = await fetch(url);
          if (!response.ok) throw new Error('HTTP ' + response.status);
          const data = await response.json();
          render(params, data);
        } catch (err) {
          console.error(err);
          show('error');
        }
      }

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

L1 — cheap deterministic descriptors

bytes total16,929html / css / js2,692 / 5,434 / 8,803
dom nodes49dom depth10
css rules46js presentyes
brightness131.7contrast21.7
colorfulness101.4whitespace46.9%

This slot's telemetry

prompt tokens312completion tokens8,389
total tokens8,701wall211.6 s
costrequest id
config.json558 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_KIMI_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "kimi-k2.7-code--api--official--dev",
  "effort": null,
  "family": "kimi",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "kimi-k2.7-code",
  "protocol": "api",
  "served_model": "kimi-k2.7-code",
  "telemetry": {
    "completion_tokens": 64999,
    "cost_usd": null,
    "prompt_tokens": 2464,
    "total_tokens": 67463,
    "wall_ms": 1532338
  },
  "transport": "moonshot-official-api",
  "vendor_sanction_ref": null
}
send-log4.6 KB
{
  "N": 4,
  "batch_id": "2026-07-20--official-kimi",
  "config_id": "kimi-k2.7-code--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:23:27.328026+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:19:55.761684+00:00"
        }
      ],
      "block_index": 0,
      "model_reaching_attempt_index": 0,
      "slot_index": 0,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:25:07.470187+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:23:31.309999+00:00"
        }
      ],
      "block_index": 0,
      "model_reaching_attempt_index": 0,
      "slot_index": 0,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:26:28.883352+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:25:11.061013+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:29:28.144604+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:26:32.524012+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:36:17.170045+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:29:32.882332+00:00"
        }
      ],
      "block_index": 2,
      "model_reaching_attempt_index": 0,
      "slot_index": 2,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:37:50.197721+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:36:22.383554+00:00"
        }
      ],
      "block_index": 2,
      "model_reaching_attempt_index": 0,
      "slot_index": 2,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:40:25.143856+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:37:54.765160+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T03:45:57.280887+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T03:40:28.632878+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-q"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}