gpt-5.6-terra @ medium · kiro

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

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。

similarity 邻居

限于 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">
<title>Weather Card</title>
<style>
  :root {
    --ink: #172237;
    --muted: #68758a;
    --line: rgba(35, 55, 87, .12);
    --card: rgba(255,255,255,.78);
    --blue: #276ff2;
    --navy: #0f1f3d;
  }
  * { box-sizing: border-box; }
  html, body { width: 100%; min-width: 1280px; height: 100%; margin: 0; }
  body {
    overflow: hidden;
    color: var(--ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    background:
      radial-gradient(circle at 13% 12%, rgba(255,255,255,.98) 0 8%, transparent 31%),
      radial-gradient(circle at 88% 80%, rgba(123,189,255,.24) 0, transparent 29%),
      linear-gradient(135deg, #d8edff 0%, #eff7ff 49%, #d7e9ff 100%);
  }
  .orb {
    position: fixed; border-radius: 50%; pointer-events: none; filter: blur(1px);
    background: rgba(255,255,255,.38);
  }
  .orb.one { width: 420px; height: 420px; right: -84px; top: -145px; }
  .orb.two { width: 270px; height: 270px; left: -90px; bottom: -115px; }
  main {
    width: 1280px; height: 800px; margin: auto; position: relative;
    display: grid; place-items: center; padding: 52px 92px;
  }
  .weather-card {
    width: 100%; min-height: 590px; overflow: hidden; border-radius: 32px;
    background: var(--card); border: 1px solid rgba(255,255,255,.82);
    box-shadow: 0 28px 75px rgba(31, 76, 137, .18), 0 4px 12px rgba(35, 71, 122, .07);
    backdrop-filter: blur(18px);
  }
  .top {
    min-height: 346px; position: relative; overflow: hidden; padding: 43px 54px 38px;
    color: #fff; background: linear-gradient(125deg, #0b2959 0%, #1754a4 54%, #388cf4 100%);
  }
  .top::before {
    content: ""; position: absolute; width: 490px; height: 490px; right: -88px; top: -242px;
    border: 1px solid rgba(255,255,255,.16); border-radius: 50%;
    box-shadow: 0 0 0 52px rgba(255,255,255,.055), 0 0 0 105px rgba(255,255,255,.035);
  }
  .top::after {
    content: ""; position: absolute; width: 720px; height: 180px; bottom: -106px; left: -52px;
    background: radial-gradient(ellipse, rgba(255,255,255,.18) 0%, rgba(255,255,255,0) 69%);
    transform: rotate(-8deg);
  }
  .card-content { position: relative; z-index: 1; }
  .eyebrow {
    display: flex; align-items: center; gap: 10px; color: rgba(255,255,255,.72);
    font-size: 12px; font-weight: 750; letter-spacing: .13em; text-transform: uppercase;
  }
  .pin {
    width: 8px; height: 8px; border-radius: 50%; background: #9ddcff;
    box-shadow: 0 0 0 4px rgba(157,220,255,.16);
  }
  .heading-row { display: flex; justify-content: space-between; align-items: flex-start; margin-top: 12px; }
  h1 { margin: 0; font-size: 38px; line-height: 1.1; letter-spacing: -.045em; font-weight: 730; }
  .date { margin: 9px 0 0; color: rgba(255,255,255,.75); font-size: 15px; font-weight: 520; }
  .condition {
    margin-top: 31px; display: flex; align-items: center; gap: 18px;
  }
  .condition-icon {
    width: 72px; height: 72px; display: grid; place-items: center; font-size: 57px;
    line-height: 1; filter: drop-shadow(0 6px 8px rgba(0,0,0,.13));
  }
  .condition-name { font-size: 21px; font-weight: 670; letter-spacing: -.02em; }
  .condition-note { margin-top: 4px; color: rgba(255,255,255,.68); font-size: 13px; }
  .temperatures {
    position: absolute; right: 54px; bottom: 37px; z-index: 2; text-align: right;
  }
  .temperature {
    font-size: 88px; line-height: .8; font-weight: 250; letter-spacing: -.075em;
    font-variant-numeric: tabular-nums;
  }
  .degree { font-size: .47em; vertical-align: top; margin-left: 3px; font-weight: 320; }
  .range { margin-top: 19px; color: rgba(255,255,255,.81); font-size: 14px; font-weight: 580; }
  .range b { color: #fff; font-weight: 750; }
  .bottom { padding: 28px 54px 31px; }
  .section-heading {
    display: flex; align-items: center; justify-content: space-between; margin-bottom: 17px;
  }
  .section-heading h2 { margin: 0; font-size: 14px; font-weight: 760; letter-spacing: .01em; }
  .section-heading span { color: var(--muted); font-size: 12px; font-weight: 550; }
  .hourly {
    display: grid; grid-template-columns: repeat(12, 1fr); gap: 8px;
    min-height: 136px;
  }
  .hour {
    min-width: 0; padding: 13px 7px 10px; border-radius: 15px; text-align: center;
    background: rgba(241,247,255,.75); border: 1px solid transparent;
  }
  .hour.current {
    color: #fff; background: var(--blue); box-shadow: 0 8px 16px rgba(39,111,242,.21);
  }
  .hour-time { color: var(--muted); font-size: 11px; font-weight: 650; }
  .current .hour-time { color: rgba(255,255,255,.78); }
  .mini-icon { height: 31px; margin: 6px 0 4px; font-size: 24px; line-height: 31px; }
  .hour-temp { font-size: 15px; font-weight: 760; font-variant-numeric: tabular-nums; }
  .status {
    min-height: 590px; display: grid; place-items: center; padding: 50px; text-align: center;
  }
  .status-inner { max-width: 410px; }
  .status-icon { font-size: 55px; margin-bottom: 14px; }
  .status h1 { font-size: 28px; }
  .status p { margin: 11px 0 0; color: var(--muted); font-size: 15px; line-height: 1.55; }
  .loading-dot {
    width: 9px; height: 9px; display: inline-block; margin-right: 8px; border-radius: 50%;
    background: var(--blue); animation: pulse 1s infinite alternate;
  }
  @keyframes pulse { to { transform: scale(.55); opacity: .4; } }
</style>
</head>
<body>
<div class="orb one"></div><div class="orb two"></div>
<main>
  <article class="weather-card" id="card" aria-live="polite">
    <div class="status">
      <div class="status-inner">
        <div class="status-icon">☀️</div>
        <h1><span class="loading-dot"></span>Loading weather</h1>
        <p>Collecting the forecast for your selected day.</p>
      </div>
    </div>
  </article>
</main>
<script>
(() => {
  const params = new URLSearchParams(location.search);
  const utcToday = new Date().toISOString().slice(0, 10);
  const isDate = value => /^\d{4}-\d{2}-\d{2}$/.test(value) && !Number.isNaN(new Date(value + "T00:00:00Z").getTime());
  const date = isDate(params.get("date") || "") ? params.get("date") : utcToday;
  const lat = Number(params.get("lat"));
  const lon = Number(params.get("lon"));
  const latitude = Number.isFinite(lat) ? lat : 52.52;
  const longitude = Number.isFinite(lon) ? lon : 13.405;
  const name = (params.get("name") || "Berlin").trim() || "Berlin";
  const endpoint = date < utcToday ? "/api/om/archive" : "/api/om/forecast";
  const query = new URLSearchParams({
    latitude, longitude,
    daily: "temperature_2m_max,temperature_2m_min,weather_code",
    hourly: "temperature_2m",
    timezone: "UTC",
    temperature_unit: "celsius",
    start_date: date,
    end_date: date
  });

  const conditionFor = code => {
    const weather = {
      0: ["Clear sky", "☀️", "A bright, clear day"],
      1: ["Mainly clear", "🌤️", "Mostly sunny skies"],
      2: ["Partly cloudy", "⛅", "Sun and passing clouds"],
      3: ["Overcast", "☁️", "Cloud-covered skies"],
      45: ["Foggy", "🌫️", "Low visibility"],
      48: ["Rime fog", "🌫️", "Icy fog in the air"],
      51: ["Light drizzle", "🌦️", "A little drizzle"],
      53: ["Drizzle", "🌦️", "Steady light rain"],
      55: ["Heavy drizzle", "🌧️", "Persistent drizzle"],
      56: ["Freezing drizzle", "🌧️", "Icy drizzle"],
      57: ["Heavy freezing drizzle", "🌧️", "Heavy icy drizzle"],
      61: ["Light rain", "🌦️", "Light rain showers"],
      63: ["Rain", "🌧️", "Rain through the day"],
      65: ["Heavy rain", "🌧️", "Heavy rainfall"],
      66: ["Freezing rain", "🌧️", "Freezing rain"],
      67: ["Heavy freezing rain", "🌧️", "Heavy freezing rain"],
      71: ["Light snow", "🌨️", "Light snowfall"],
      73: ["Snowfall", "🌨️", "Snow is falling"],
      75: ["Heavy snow", "❄️", "Heavy snowfall"],
      77: ["Snow grains", "🌨️", "Fine snow grains"],
      80: ["Rain showers", "🌦️", "Passing showers"],
      81: ["Rain showers", "🌧️", "Moderate showers"],
      82: ["Heavy showers", "⛈️", "Intense rain showers"],
      85: ["Snow showers", "🌨️", "Passing snow showers"],
      86: ["Heavy snow showers", "❄️", "Heavy snow showers"],
      95: ["Thunderstorm", "⛈️", "Storms in the area"],
      96: ["Thunderstorm with hail", "⛈️", "Storms and light hail"],
      99: ["Severe thunderstorm", "⛈️", "Storms with heavy hail"]
    };
    return weather[code] || ["Weather update", "🌤️", "Current conditions"];
  };
  const formatDate = value => new Intl.DateTimeFormat("en-US", {
    weekday: "long", month: "long", day: "numeric", year: "numeric", timeZone: "UTC"
  }).format(new Date(value + "T12:00:00Z"));
  const temp = value => `${Math.round(value)}°`;
  const hourLabel = iso => {
    const hour = Number(iso.slice(11, 13));
    return hour === 0 ? "12 AM" : hour < 12 ? `${hour} AM` : hour === 12 ? "12 PM" : `${hour - 12} PM`;
  };

  async function load() {
    try {
      const response = await fetch(`${endpoint}?${query}`, { headers: { Accept: "application/json" } });
      if (!response.ok) throw new Error(`Weather service returned ${response.status}`);
      const data = await response.json();
      const daily = data.daily;
      const hourly = data.hourly;
      if (!daily || !hourly || !Array.isArray(hourly.time) || !hourly.time.length ||
          !Number.isFinite(daily.temperature_2m_max?.[0]) || !Number.isFinite(daily.temperature_2m_min?.[0])) {
        throw new Error("The weather response did not contain data for this date.");
      }
      const [condition, icon, note] = conditionFor(daily.weather_code?.[0]);
      const dayHours = hourly.time.map((time, i) => ({ time, value: hourly.temperature_2m?.[i] }))
        .filter(item => item.time.startsWith(date) && Number.isFinite(item.value));
      if (!dayHours.length) throw new Error("Hourly temperatures were unavailable.");
      const nowHour = new Date().toISOString().slice(0, 13);
      const sampled = dayHours.filter((_, i) => i % 2 === 0).slice(0, 12);
      document.getElementById("card").innerHTML = `
        <section class="top">
          <div class="card-content">
            <div class="eyebrow"><span class="pin"></span> Weather at your location</div>
            <div class="heading-row">
              <div><h1>${escapeHtml(name)}</h1><p class="date">${formatDate(date)}</p></div>
            </div>
            <div class="condition">
              <div class="condition-icon">${icon}</div>
              <div><div class="condition-name">${condition}</div><div class="condition-note">${note}</div></div>
            </div>
          </div>
          <div class="temperatures">
            <div class="temperature">${temp(daily.temperature_2m_max[0])}<span class="degree">C</span></div>
            <div class="range"><b>High ${temp(daily.temperature_2m_max[0])}</b> &nbsp;·&nbsp; Low ${temp(daily.temperature_2m_min[0])}</div>
          </div>
        </section>
        <section class="bottom">
          <div class="section-heading"><h2>Hourly temperature</h2><span>All times UTC · Celsius</span></div>
          <div class="hourly">${sampled.map(item => `
            <div class="hour ${item.time.slice(0, 13) === nowHour ? "current" : ""}">
              <div class="hour-time">${hourLabel(item.time)}</div>
              <div class="mini-icon">${icon}</div>
              <div class="hour-temp">${temp(item.value)}</div>
            </div>`).join("")}</div>
        </section>`;
    } catch (error) {
      document.getElementById("card").innerHTML = `
        <div class="status">
          <div class="status-inner">
            <div class="status-icon">🌦️</div>
            <h1>Weather unavailable</h1>
            <p>We couldn’t load weather data for ${escapeHtml(name)} on ${formatDate(date)}. Please try again shortly.</p>
          </div>
        </div>`;
    }
  }
  function escapeHtml(value) {
    const element = document.createElement("span");
    element.textContent = value;
    return element.innerHTML;
  }
  load();
})();
</script>
</body>
</html>

L1 —— 廉价的确定性描述量

bytes 总计12,201html / css / js625 / 5,281 / 6,295
dom 节点18dom 深度8
css 规则46含 js
brightness182.3contrast78.5
colorfulness67.5留白61.2%

该 slot 的 telemetry

prompt tokens0completion tokens0
total tokens0wall27.2 s
costrequest id
config.json574 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "gpt-5.6-terra-eff-medium--cli--kiro--dev",
  "effort": "medium",
  "family": "gpt",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "gpt-5.6-terra",
  "protocol": "cli",
  "served_model": "gpt-5.6-terra",
  "telemetry": {
    "completion_tokens": null,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 103341
  },
  "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-terra-eff-medium--cli--kiro--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-18T19:01:26.864356+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T19:00:59.610336+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-18T19:01:52.283493+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T19:01:30.718545+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-18T19:02:18.315106+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T19:01:55.581680+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-18T19:02:53.535173+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T19:02:21.564533+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
    }
  }
}