claude-opus-4-8 @ low · kiro

kirolow
config
claude-opus-4-8-eff-low--cli--kiro--dev
batch
2026-07-19--unified
transport
kiro-cli-isolated-home-github-social
protocol
cli · plan
served model
claude-opus-4.8
采集于
2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe
claude-opus-4-8 @low · kiro P-q slot 0 截图

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

similarity 邻居

限于 session 2026-07-19--unified

similarity 衡量本 session 内的趋同程度 —— 不是质量。

Fidelity —— 卡片展示的数据对不对?

  • namematch
  • conditionmatch
  • datematch
  • max tempmatch展示值:25
  • min tempmatch展示值:16
  • hourlymatchcoverage 8/24 · 8 命中 · 0 不符 · 16 未展示
  • 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=1280, initial-scale=1">
<title>Weather Card</title>
<style>
  :root {
    --bg: #0f1720;
    --card: rgba(255, 255, 255, 0.08);
    --card-border: rgba(255, 255, 255, 0.14);
    --text: #f4f7fb;
    --muted: #9fb0c3;
    --accent: #6cb8ff;
    --hi: #ffb14e;
    --lo: #6cb8ff;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }
  html, body {
    width: 1280px;
    height: 800px;
    overflow: hidden;
  }
  body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    background: radial-gradient(1200px 700px at 20% -10%, #24507e 0%, transparent 55%),
                radial-gradient(1000px 800px at 100% 100%, #3a2a5e 0%, transparent 50%),
                linear-gradient(160deg, #0b1220 0%, #0f1720 60%, #131b26 100%);
    color: var(--text);
    display: flex;
    align-items: center;
    justify-content: center;
    -webkit-font-smoothing: antialiased;
  }
  .card {
    width: 1040px;
    background: var(--card);
    border: 1px solid var(--card-border);
    border-radius: 28px;
    backdrop-filter: blur(24px);
    -webkit-backdrop-filter: blur(24px);
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45), inset 0 1px 0 rgba(255,255,255,0.12);
    padding: 48px 56px;
  }
  .header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
  }
  .location {
    font-size: 40px;
    font-weight: 700;
    letter-spacing: -0.5px;
  }
  .date {
    font-size: 18px;
    color: var(--muted);
    margin-top: 6px;
  }
  .cond {
    text-align: right;
  }
  .cond .icon { font-size: 64px; line-height: 1; }
  .cond .label {
    font-size: 18px;
    color: var(--muted);
    margin-top: 4px;
  }
  .temps {
    display: flex;
    align-items: baseline;
    gap: 40px;
    margin-top: 40px;
  }
  .temp-main {
    font-size: 108px;
    font-weight: 300;
    letter-spacing: -3px;
    line-height: 0.9;
  }
  .temp-main .deg { font-size: 56px; vertical-align: top; color: var(--muted); }
  .minmax { display: flex; gap: 32px; padding-bottom: 12px; }
  .minmax .item .k {
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    color: var(--muted);
  }
  .minmax .item .v { font-size: 30px; font-weight: 600; margin-top: 4px; }
  .minmax .hi .v { color: var(--hi); }
  .minmax .lo .v { color: var(--lo); }

  .chart-wrap { margin-top: 48px; }
  .chart-title {
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    color: var(--muted);
    margin-bottom: 16px;
  }
  .chart { width: 100%; height: 220px; display: block; }
  .chart .grid { stroke: rgba(255,255,255,0.07); stroke-width: 1; }
  .chart .axis { fill: var(--muted); font-size: 12px; }
  .chart .valtext { fill: var(--text); font-size: 11px; font-weight: 600; }
  .chart .area { fill: url(#grad); }
  .chart .line { fill: none; stroke: var(--accent); stroke-width: 2.5; }
  .chart .dot { fill: var(--accent); }

  .status {
    text-align: center;
    padding: 60px 20px;
    font-size: 20px;
    color: var(--muted);
  }
  .status.error { color: #ff8b8b; }
</style>
</head>
<body>
<div class="card" id="card">
  <div class="status" id="loading">Loading weather…</div>
</div>

<script>
(function () {
  var qs = new URLSearchParams(location.search);
  var lat = parseFloat(qs.get("lat"));
  var lon = parseFloat(qs.get("lon"));
  if (isNaN(lat)) lat = 52.52;
  if (isNaN(lon)) lon = 13.405;
  var name = qs.get("name") || "Berlin";
  var todayUTC = new Date().toISOString().slice(0, 10);
  var date = qs.get("date") || todayUTC;

  var WCODE = {
    0: ["Clear sky", "☀️"],
    1: ["Mainly clear", "🌤️"],
    2: ["Partly cloudy", "⛅"],
    3: ["Overcast", "☁️"],
    45: ["Fog", "🌫️"],
    48: ["Rime fog", "🌫️"],
    51: ["Light drizzle", "🌦️"],
    53: ["Drizzle", "🌦️"],
    55: ["Dense drizzle", "🌧️"],
    56: ["Freezing drizzle", "🌧️"],
    57: ["Freezing drizzle", "🌧️"],
    61: ["Light rain", "🌦️"],
    63: ["Rain", "🌧️"],
    65: ["Heavy rain", "🌧️"],
    66: ["Freezing rain", "🌧️"],
    67: ["Freezing rain", "🌧️"],
    71: ["Light snow", "🌨️"],
    73: ["Snow", "🌨️"],
    75: ["Heavy snow", "❄️"],
    77: ["Snow grains", "🌨️"],
    80: ["Rain showers", "🌦️"],
    81: ["Rain showers", "🌧️"],
    82: ["Violent showers", "⛈️"],
    85: ["Snow showers", "🌨️"],
    86: ["Snow showers", "❄️"],
    95: ["Thunderstorm", "⛈️"],
    96: ["Thunderstorm, hail", "⛈️"],
    99: ["Thunderstorm, hail", "⛈️"]
  };

  function describe(code) {
    return WCODE[code] || ["Unknown", "❓"];
  }

  function fmtDate(d) {
    var parts = d.split("-");
    var dt = new Date(Date.UTC(+parts[0], +parts[1] - 1, +parts[2]));
    return dt.toLocaleDateString("en-US", {
      weekday: "long", year: "numeric", month: "long", day: "numeric", timeZone: "UTC"
    });
  }

  function round(n) { return Math.round(n); }

  var endpoint = (date < todayUTC) ? "/api/om/archive" : "/api/om/forecast";
  var params = new URLSearchParams({
    latitude: lat,
    longitude: lon,
    daily: "temperature_2m_max,temperature_2m_min,weather_code",
    hourly: "temperature_2m",
    timezone: "UTC",
    temperature_unit: "celsius",
    start_date: date,
    end_date: date
  });

  function showError(msg) {
    document.getElementById("card").innerHTML =
      '<div class="status error">' + msg + '</div>';
  }

  fetch(endpoint + "?" + params.toString())
    .then(function (r) {
      if (!r.ok) throw new Error("HTTP " + r.status);
      return r.json();
    })
    .then(function (data) {
      if (!data || !data.daily || !data.hourly) {
        throw new Error("Malformed response");
      }
      render(data);
    })
    .catch(function (err) {
      showError("Unable to load weather data. " + (err && err.message ? "(" + err.message + ")" : ""));
    });

  function render(data) {
    var tmax = data.daily.temperature_2m_max[0];
    var tmin = data.daily.temperature_2m_min[0];
    var code = data.daily.weather_code[0];
    var times = data.hourly.time || [];
    var temps = data.hourly.temperature_2m || [];
    var desc = describe(code);

    var svg = buildChart(times, temps);

    var mid = (typeof tmax === "number" && typeof tmin === "number")
      ? round((tmax + tmin) / 2) : "–";

    var html =
      '<div class="header">' +
        '<div>' +
          '<div class="location">' + escapeHtml(name) + '</div>' +
          '<div class="date">' + fmtDate(date) + '</div>' +
        '</div>' +
        '<div class="cond">' +
          '<div class="icon">' + desc[1] + '</div>' +
          '<div class="label">' + desc[0] + '</div>' +
        '</div>' +
      '</div>' +
      '<div class="temps">' +
        '<div class="temp-main">' + mid + '<span class="deg">°C</span></div>' +
        '<div class="minmax">' +
          '<div class="item hi"><div class="k">High</div><div class="v">' +
            (typeof tmax === "number" ? round(tmax) + "°" : "–") + '</div></div>' +
          '<div class="item lo"><div class="k">Low</div><div class="v">' +
            (typeof tmin === "number" ? round(tmin) + "°" : "–") + '</div></div>' +
        '</div>' +
      '</div>' +
      '<div class="chart-wrap">' +
        '<div class="chart-title">Hourly temperature (°C, UTC)</div>' +
        svg +
      '</div>';

    document.getElementById("card").innerHTML = html;
  }

  function escapeHtml(s) {
    return String(s).replace(/[&<>"']/g, function (c) {
      return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[c];
    });
  }

  function buildChart(times, temps) {
    var pts = [];
    for (var i = 0; i < temps.length; i++) {
      if (typeof temps[i] === "number") {
        var hour = times[i] ? times[i].slice(11, 13) : i;
        pts.push({ h: +hour, t: temps[i] });
      }
    }
    if (pts.length === 0) {
      return '<div class="status">No hourly data available.</div>';
    }

    var W = 928, H = 220;
    var padL = 36, padR = 20, padT = 24, padB = 30;
    var iw = W - padL - padR, ih = H - padT - padB;

    var tvals = pts.map(function (p) { return p.t; });
    var minT = Math.min.apply(null, tvals);
    var maxT = Math.max.apply(null, tvals);
    if (minT === maxT) { minT -= 1; maxT += 1; }
    var pad = (maxT - minT) * 0.15;
    minT -= pad; maxT += pad;

    var n = pts.length;
    function x(i) { return padL + (n === 1 ? iw / 2 : iw * i / (n - 1)); }
    function y(t) { return padT + ih * (1 - (t - minT) / (maxT - minT)); }

    var s = '<svg class="chart" viewBox="0 0 ' + W + ' ' + H + '" preserveAspectRatio="none">';
    s += '<defs><linearGradient id="grad" x1="0" y1="0" x2="0" y2="1">' +
         '<stop offset="0%" stop-color="rgba(108,184,255,0.45)"/>' +
         '<stop offset="100%" stop-color="rgba(108,184,255,0.02)"/>' +
         '</linearGradient></defs>';

    var ticks = 4;
    for (var g = 0; g <= ticks; g++) {
      var yy = padT + ih * g / ticks;
      var tv = maxT - (maxT - minT) * g / ticks;
      s += '<line class="grid" x1="' + padL + '" y1="' + yy + '" x2="' + (W - padR) + '" y2="' + yy + '"/>';
      s += '<text class="axis" x="' + (padL - 8) + '" y="' + (yy + 4) + '" text-anchor="end">' + round(tv) + '°</text>';
    }

    var line = "", area = "";
    for (var i = 0; i < n; i++) {
      var px = x(i).toFixed(1), py = y(pts[i].t).toFixed(1);
      line += (i === 0 ? "M" : "L") + px + " " + py + " ";
    }
    area = "M" + x(0).toFixed(1) + " " + (padT + ih) + " " +
           line.replace(/^M/, "L") +
           "L" + x(n - 1).toFixed(1) + " " + (padT + ih) + " Z";

    s += '<path class="area" d="' + area + '"/>';
    s += '<path class="line" d="' + line.trim() + '"/>';

    var step = Math.max(1, Math.round(n / 8));
    for (var j = 0; j < n; j += step) {
      var lx = x(j), ly = y(pts[j].t);
      s += '<circle class="dot" cx="' + lx.toFixed(1) + '" cy="' + ly.toFixed(1) + '" r="3"/>';
      s += '<text class="valtext" x="' + lx.toFixed(1) + '" y="' + (ly - 10).toFixed(1) + '" text-anchor="middle">' + round(pts[j].t) + '°</text>';
      var hlabel = ("0" + pts[j].h).slice(-2) + ":00";
      s += '<text class="axis" x="' + lx.toFixed(1) + '" y="' + (H - 8) + '" text-anchor="middle">' + hlabel + '</text>';
    }

    s += '</svg>';
    return s;
  }
})();
</script>
</body>
</html>

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

bytes 总计10,445html / css / js313 / 3,001 / 7,131
dom 节点10dom 深度4
css 规则30含 js
brightness41.6contrast18.7
colorfulness20.0留白72.0%

该 slot 的 telemetry

prompt tokens0completion tokens0
total tokens0wall96.6 s
costrequest id
config.json577 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "claude-opus-4-8-eff-low--cli--kiro--dev",
  "effort": "low",
  "family": "claude",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "claude-opus-4-8",
  "protocol": "cli",
  "served_model": "claude-opus-4.8",
  "telemetry": {
    "completion_tokens": null,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 225873
  },
  "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": "claude-opus-4-8-eff-low--cli--kiro--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-18T15:41:53.486845+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T15:40:16.884059+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-18T15:42:40.153370+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T15:41:56.858043+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-18T15:43:22.592786+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T15:42:43.447659+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-18T15:44:13.068788+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T15:43:26.129197+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
    }
  }
}