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

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 @medium · CC0.69grok-4.5 @high · grok-cli0.69claude-opus-4-8 @medium · kiro0.67kimi-k2.7-code · go0.67claude-opus-4-7 @low · kiro0.66farthest
gpt-5.5 @medium · codex-oauth0.42gpt-5.6-luna @medium · codex-oauth0.44gpt-5.6-luna @low · codex-oauth0.44gpt-5.6-luna @high · kiro0.45north-mini-code-free · api0.47within 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 total | 16,929 | html / css / js | 2,692 / 5,434 / 8,803 |
|---|---|---|---|
| dom nodes | 49 | dom depth | 10 |
| css rules | 46 | js present | yes |
| brightness | 131.7 | contrast | 21.7 |
| colorfulness | 101.4 | whitespace | 46.9% |
This slot's telemetry
| prompt tokens | 312 | completion tokens | 8,389 |
|---|---|---|---|
| total tokens | 8,701 | wall | 211.6 s |
| cost | — | request 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
}
}
}