gpt-5.6-luna @ high · kiro
kirohigh
- config
- gpt-5.6-luna-eff-high--cli--kiro--dev
- batch
- 2026-07-19--unified
- transport
- kiro-cli-isolated-home-github-social
- protocol
- cli · plan
- served model
- gpt-5.6-luna
- 采集于
- 2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居
最近
gpt-5.6-luna @medium · codex-oauth0.73gpt-5.5 @low · codex-oauth0.66gpt-5.6-luna @low · codex-oauth0.66gpt-5.6-sol @ultra · codex-oauth0.63gpt-5.6-terra @medium · kiro0.61最远
grok-4.5 @low · api0.36gemini-3.5-flash @minimal · api0.36minimax-m2.7 · opencode0.38gpt-5.6-sol @medium · codex-oauth0.38gpt-5.6-luna @medium · kiro0.38限于 session 2026-07-19--unified
similarity 衡量本 session 内的趋同程度 —— 不是质量。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempambiguousinsufficient-distinct-temperature-nodes
- min tempambiguousinsufficient-distinct-temperature-nodes
- hourlyambiguouscoverage · 0 命中 · 0 不符 · 24 未展示
- request sidematch0 处违规
extractor fidelity-extractor-v1+Berlin-2026-07-15
源码 —— 原始模型输出,一字节未改
下载 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 {
--ink: #10243d;
--muted: #718198;
--line: #e8eef5;
--blue: #2269d8;
--blue-deep: #174ca5;
--sky: #eaf4ff;
--warm: #ffb45d;
--shadow: 0 24px 70px rgba(23, 56, 93, .14);
}
* { box-sizing: border-box; }
body {
margin: 0;
min-width: 1024px;
min-height: 100vh;
color: var(--ink);
background:
radial-gradient(circle at 85% 12%, rgba(255, 224, 171, .72), transparent 27%),
radial-gradient(circle at 8% 92%, rgba(194, 226, 255, .82), transparent 31%),
#f5f8fc;
font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
-webkit-font-smoothing: antialiased;
}
.page {
width: 1180px;
min-height: 720px;
margin: 40px auto;
padding: 34px 38px 30px;
overflow: hidden;
position: relative;
border: 1px solid rgba(255,255,255,.8);
border-radius: 30px;
background: rgba(255,255,255,.78);
box-shadow: var(--shadow);
backdrop-filter: blur(18px);
}
.page::after {
content: "";
position: absolute;
width: 390px;
height: 390px;
right: -190px;
bottom: -220px;
border-radius: 50%;
background: rgba(223, 239, 255, .48);
pointer-events: none;
}
header {
display: flex;
justify-content: space-between;
align-items: flex-start;
position: relative;
z-index: 1;
}
.eyebrow {
margin: 0 0 10px;
color: var(--blue);
font-size: 11px;
font-weight: 800;
letter-spacing: .18em;
text-transform: uppercase;
}
h1 {
max-width: 620px;
margin: 0;
font-size: 35px;
line-height: 1.1;
letter-spacing: -.045em;
font-weight: 760;
}
.date-label {
margin: 11px 0 0;
color: var(--muted);
font-size: 14px;
font-weight: 560;
}
.unit-pill {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 9px 13px;
border: 1px solid #dce8f6;
border-radius: 999px;
color: var(--blue-deep);
background: #f7fbff;
font-size: 12px;
font-weight: 750;
letter-spacing: .03em;
}
.unit-pill::before {
content: "";
width: 7px;
height: 7px;
border-radius: 50%;
background: #57a7f4;
box-shadow: 0 0 0 4px #e5f2ff;
}
.hero {
display: grid;
grid-template-columns: 1.04fr .96fr;
gap: 28px;
margin-top: 38px;
position: relative;
z-index: 1;
}
.summary {
min-height: 248px;
padding: 28px 30px;
display: flex;
align-items: center;
justify-content: space-between;
border-radius: 24px;
color: white;
background:
radial-gradient(circle at 88% 12%, rgba(255,255,255,.32), transparent 23%),
linear-gradient(135deg, #397fdf 0%, #1f62c7 53%, #174aa2 100%);
box-shadow: 0 15px 33px rgba(35, 101, 204, .23);
}
.summary-copy { align-self: stretch; display: flex; flex-direction: column; justify-content: space-between; }
.summary-kicker {
margin: 0;
color: rgba(255,255,255,.72);
font-size: 12px;
font-weight: 700;
letter-spacing: .13em;
text-transform: uppercase;
}
.temperature {
margin: 18px 0 4px;
font-size: 82px;
line-height: .92;
letter-spacing: -.08em;
font-weight: 730;
}
.temperature sup {
margin-left: 4px;
font-size: 31px;
font-weight: 520;
vertical-align: top;
letter-spacing: -.03em;
}
.condition {
margin: 0;
color: rgba(255,255,255,.88);
font-size: 17px;
font-weight: 620;
}
.range {
display: flex;
gap: 17px;
margin-top: 24px;
color: rgba(255,255,255,.77);
font-size: 13px;
}
.range strong {
color: white;
font-weight: 750;
}
.weather-art {
width: 150px;
height: 150px;
margin-right: 8px;
position: relative;
flex: 0 0 auto;
}
.sun {
width: 72px;
height: 72px;
position: absolute;
top: 8px;
right: 10px;
border-radius: 50%;
background: #ffd27b;
box-shadow: 0 0 0 12px rgba(255, 213, 133, .14), 0 0 34px rgba(255, 212, 120, .75);
}
.cloud {
width: 120px;
height: 42px;
position: absolute;
left: 5px;
bottom: 31px;
border-radius: 28px;
background: #fff;
box-shadow: 0 11px 20px rgba(15, 51, 112, .15);
}
.cloud::before, .cloud::after {
content: "";
position: absolute;
border-radius: 50%;
background: #fff;
}
.cloud::before { width: 57px; height: 57px; left: 19px; bottom: 12px; }
.cloud::after { width: 42px; height: 42px; left: 66px; bottom: 16px; }
.details {
min-height: 248px;
padding: 25px 26px;
border: 1px solid var(--line);
border-radius: 24px;
background: rgba(255,255,255,.84);
}
.details-title {
margin: 0 0 19px;
color: var(--muted);
font-size: 11px;
font-weight: 800;
letter-spacing: .16em;
text-transform: uppercase;
}
.detail-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 13px;
}
.detail {
min-height: 76px;
padding: 15px 16px;
border-radius: 16px;
background: #f7faff;
}
.detail-label {
display: block;
margin-bottom: 8px;
color: #8795a9;
font-size: 11px;
font-weight: 700;
letter-spacing: .04em;
text-transform: uppercase;
}
.detail-value {
color: var(--ink);
font-size: 21px;
font-weight: 750;
letter-spacing: -.04em;
}
.detail-value.small {
font-size: 16px;
letter-spacing: -.02em;
}
.hourly-section {
margin-top: 32px;
position: relative;
z-index: 1;
}
.section-heading {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 16px;
}
.section-heading h2 {
margin: 0;
font-size: 18px;
letter-spacing: -.025em;
}
.section-heading span {
color: var(--muted);
font-size: 12px;
font-weight: 600;
}
.hourly {
height: 183px;
display: grid;
grid-template-columns: repeat(24, minmax(32px, 1fr));
gap: 6px;
padding: 17px 12px 12px;
border: 1px solid var(--line);
border-radius: 20px;
background: rgba(255,255,255,.8);
}
.hour {
min-width: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
color: var(--muted);
font-size: 10px;
font-weight: 650;
}
.hour-time { opacity: .78; }
.hour-temp {
color: var(--ink);
font-size: 11px;
font-weight: 760;
}
.bar-track {
width: 9px;
height: 88px;
display: flex;
align-items: flex-end;
border-radius: 8px;
background: #edf3fa;
overflow: hidden;
}
.bar {
width: 100%;
min-height: 7px;
border-radius: 8px;
background: linear-gradient(180deg, #67b4f5, #2671d8);
}
.loading, .error {
min-height: 410px;
display: grid;
place-items: center;
text-align: center;
color: var(--muted);
}
.loading-dot {
width: 10px;
height: 10px;
display: inline-block;
margin-right: 8px;
border-radius: 50%;
background: var(--blue);
animation: pulse 1s infinite ease-in-out;
}
.error-box {
max-width: 470px;
padding: 26px 30px;
border: 1px solid #f3d9d9;
border-radius: 18px;
color: #a65353;
background: #fff8f8;
font-size: 14px;
line-height: 1.5;
}
@keyframes pulse {
0%, 100% { opacity: .32; transform: scale(.8); }
50% { opacity: 1; transform: scale(1); }
}
@media (max-width: 1100px) {
.page { width: calc(100% - 40px); }
.temperature { font-size: 70px; }
.weather-art { transform: scale(.82); margin-right: -8px; }
}
</style>
</head>
<body>
<main class="page">
<header>
<div>
<p class="eyebrow">Daily forecast</p>
<h1 id="location">Berlin</h1>
<p class="date-label" id="date">Loading date…</p>
</div>
<div class="unit-pill">CELSIUS</div>
</header>
<div id="content">
<div class="loading"><div><span class="loading-dot"></span>Loading weather data</div></div>
</div>
</main>
<script>
(() => {
const params = new URLSearchParams(window.location.search);
const now = new Date();
const today = [
now.getUTCFullYear(),
String(now.getUTCMonth() + 1).padStart(2, "0"),
String(now.getUTCDate()).padStart(2, "0")
].join("-");
const validDate = value => /^\d{4}-\d{2}-\d{2}$/.test(value || "") && !Number.isNaN(Date.parse(value + "T00:00:00Z"));
const date = validDate(params.get("date")) ? params.get("date") : today;
const name = params.get("name") || "Berlin";
const latitude = Number(params.get("lat"));
const longitude = Number(params.get("lon"));
const lat = Number.isFinite(latitude) ? latitude : 52.52;
const lon = Number.isFinite(longitude) ? longitude : 13.405;
const locationEl = document.getElementById("location");
const dateEl = document.getElementById("date");
const contentEl = document.getElementById("content");
locationEl.textContent = name;
dateEl.textContent = formatDate(date);
function formatDate(value) {
return new Intl.DateTimeFormat("en-US", {
weekday: "long",
month: "long",
day: "numeric",
year: "numeric",
timeZone: "UTC"
}).format(new Date(value + "T00:00:00Z"));
}
function weatherCondition(code) {
const map = {
0: ["Clear sky", "clear"],
1: ["Mainly clear", "clear"],
2: ["Partly cloudy", "cloudy"],
3: ["Overcast", "cloudy"],
45: ["Fog", "cloudy"],
48: ["Depositing rime fog", "cloudy"],
51: ["Light drizzle", "rain"],
53: ["Drizzle", "rain"],
55: ["Heavy drizzle", "rain"],
56: ["Freezing drizzle", "rain"],
57: ["Heavy freezing drizzle", "rain"],
61: ["Light rain", "rain"],
63: ["Rain", "rain"],
65: ["Heavy rain", "rain"],
66: ["Freezing rain", "rain"],
67: ["Heavy freezing rain", "rain"],
71: ["Light snow", "snow"],
73: ["Snow", "snow"],
75: ["Heavy snow", "snow"],
77: ["Snow grains", "snow"],
80: ["Light rain showers", "rain"],
81: ["Rain showers", "rain"],
82: ["Heavy rain showers", "rain"],
85: ["Light snow showers", "snow"],
86: ["Snow showers", "snow"],
95: ["Thunderstorm", "storm"],
96: ["Thunderstorm with hail", "storm"],
99: ["Thunderstorm with heavy hail", "storm"]
};
return map[Number(code)] || ["Weather conditions unavailable", "cloudy"];
}
function number(value) {
return Number.isFinite(Number(value)) ? Math.round(Number(value)) : null;
}
function degree(value) {
return value === null ? "—" : `${value}°`;
}
function render(data) {
if (!data || !data.daily || !data.hourly ||
!Array.isArray(data.daily.temperature_2m_max) ||
!Array.isArray(data.daily.temperature_2m_min) ||
!Array.isArray(data.daily.weather_code) ||
!Array.isArray(data.hourly.temperature_2m)) {
throw new Error("The weather response was incomplete.");
}
const max = number(data.daily.temperature_2m_max[0]);
const min = number(data.daily.temperature_2m_min[0]);
const code = data.daily.weather_code[0];
const condition = weatherCondition(code);
const hourlyTemps = data.hourly.temperature_2m.slice(0, 24).map(Number).filter(Number.isFinite);
if (hourlyTemps.length === 0 || max === null || min === null) {
throw new Error("No weather data is available for this date.");
}
const low = Math.min(...hourlyTemps);
const high = Math.max(...hourlyTemps);
const spread = Math.max(high - low, 1);
contentEl.innerHTML = `
<section class="hero">
<article class="summary">
<div class="summary-copy">
<div>
<p class="summary-kicker">At a glance</p>
<div class="temperature">${degree(max)}<sup>C</sup></div>
<p class="condition">${condition[0]}</p>
</div>
<div class="range">
<span>High <strong>${degree(max)}</strong></span>
<span>Low <strong>${degree(min)}</strong></span>
</div>
</div>
<div class="weather-art" aria-hidden="true">
<div class="sun"></div>
<div class="cloud"></div>
</div>
</article>
<article class="details">
<p class="details-title">Today's details</p>
<div class="detail-grid">
<div class="detail">
<span class="detail-label">Maximum</span>
<strong class="detail-value">${degree(max)}C</strong>
</div>
<div class="detail">
<span class="detail-label">Minimum</span>
<strong class="detail-value">${degree(min)}C</strong>
</div>
<div class="detail">
<span class="detail-label">Condition</span>
<strong class="detail-value small">${condition[0]}</strong>
</div>
<div class="detail">
<span class="detail-label">Hourly readings</span>
<strong class="detail-value">${hourlyTemps.length} hours</strong>
</div>
</div>
</article>
</section>
<section class="hourly-section">
<div class="section-heading">
<h2>Hourly temperature</h2>
<span>UTC · degrees Celsius</span>
</div>
<div class="hourly" id="hourly"></div>
</section>
`;
const hourlyEl = document.getElementById("hourly");
hourlyEl.innerHTML = hourlyTemps.map((temp, index) => {
const hour = String(index).padStart(2, "0");
const height = 12 + ((temp - low) / spread) * 82;
return `
<div class="hour" title="${hour}:00 UTC · ${Math.round(temp)}°C">
<span class="hour-time">${hour}</span>
<div class="bar-track"><div class="bar" style="height:${height}%"></div></div>
<span class="hour-temp">${Math.round(temp)}°</span>
</div>
`;
}).join("");
}
function showError(message) {
contentEl.innerHTML = `<div class="error"><div class="error-box"><strong>Weather data unavailable</strong><br>${message}</div></div>`;
}
const endpoint = date < today ? "/api/om/archive" : "/api/om/forecast";
const request = 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
});
fetch(`${endpoint}?${request.toString()}`, { headers: { "Accept": "application/json" } })
.then(response => {
if (!response.ok) throw new Error(`Request failed with status ${response.status}.`);
return response.json();
})
.then(render)
.catch(error => showError(error.message || "Please try again later."));
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 16,455 | html / css / js | 641 / 8,290 / 7,524 |
|---|---|---|---|
| dom 节点 | 19 | dom 深度 | 7 |
| css 规则 | 53 | 含 js | 是 |
| brightness | 227.1 | contrast | 50.3 |
| colorfulness | 53.2 | 留白 | 84.2% |
该 slot 的 telemetry
| prompt tokens | 0 | completion tokens | 0 |
|---|---|---|---|
| total tokens | 0 | wall | 25.2 s |
| cost | — | request id | — |
config.json566 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-luna-eff-high--cli--kiro--dev",
"effort": "high",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-luna",
"protocol": "cli",
"served_model": "gpt-5.6-luna",
"telemetry": {
"completion_tokens": null,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 90997
},
"transport": "kiro-cli-isolated-home-github-social",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-18--kiro-cli",
"config_id": "gpt-5.6-luna-eff-high--cli--kiro--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-19T00:04:07.378184+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-19T00:03:42.088102+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-19T00:04:29.172668+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-19T00:04:11.133312+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-19T00:04:55.420951+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-19T00:04:31.904888+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-19T00:05:23.412886+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-19T00:04:59.101286+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
}
}
}