gpt-5.6-terra @ medium · codex-oauth

codex-oauthmedium
config
gpt-5.6-terra-eff-medium--cli--codex-oauth--dev
batch
2026-07-19--unified
transport
codex-cli-oauth-chatgpt
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 · codex-oauth P-q slot 0 截图

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

similarity 邻居

限于 session 2026-07-19--unified

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

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

  • namematch
  • conditionmatch
  • datematch
  • max tempambiguousno-remaining-candidate
  • min tempmatch展示值:16
  • 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: #17263b;
    --muted: #6d7c91;
    --line: rgba(36, 66, 101, .12);
    --card: rgba(255, 255, 255, .82);
    --blue: #276ff0;
    --sun: #ffbd3e;
  }
  * { box-sizing: border-box; }
  body {
    margin: 0;
    min-width: 1280px;
    min-height: 800px;
    display: grid;
    place-items: center;
    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 15% 14%, rgba(255,255,255,.92) 0 7%, transparent 28%),
      radial-gradient(circle at 89% 77%, rgba(112,178,255,.25), transparent 25%),
      linear-gradient(135deg, #9fd2ff 0%, #d7edff 47%, #b9d7fa 100%);
  }
  .glow {
    position: fixed;
    width: 520px;
    height: 520px;
    border-radius: 50%;
    top: -250px;
    right: 5%;
    background: rgba(255, 218, 130, .28);
    filter: blur(10px);
  }
  main {
    width: 1030px;
    min-height: 594px;
    position: relative;
    border: 1px solid rgba(255,255,255,.72);
    border-radius: 31px;
    overflow: hidden;
    background: var(--card);
    box-shadow: 0 32px 80px rgba(42, 81, 132, .24), 0 2px 8px rgba(45, 72, 108, .08);
    backdrop-filter: blur(22px);
  }
  .top {
    min-height: 301px;
    padding: 43px 54px;
    display: flex;
    justify-content: space-between;
    position: relative;
    background: linear-gradient(115deg, rgba(255,255,255,.35), rgba(255,255,255,.02));
  }
  .place {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 11px;
    color: #53657e;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: .02em;
  }
  .pin {
    width: 17px; height: 17px;
    color: var(--blue);
  }
  h1 {
    margin: 0;
    max-width: 480px;
    font-size: 37px;
    line-height: 1.12;
    letter-spacing: -.045em;
    font-weight: 760;
  }
  .date {
    margin: 12px 0 29px;
    color: var(--muted);
    font-size: 16px;
    font-weight: 500;
  }
  .condition {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    padding: 8px 13px 8px 9px;
    border-radius: 999px;
    color: #375170;
    font-size: 14px;
    font-weight: 750;
    background: rgba(255,255,255,.52);
    border: 1px solid rgba(255,255,255,.76);
  }
  .dot {
    width: 24px; height: 24px;
    display: grid; place-items: center;
    border-radius: 50%;
    background: #edf5ff;
    font-size: 15px;
  }
  .hero {
    min-width: 356px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 23px;
    padding-right: 8px;
  }
  .weather-icon {
    width: 126px;
    height: 110px;
    position: relative;
    filter: drop-shadow(0 12px 10px rgba(62, 126, 201, .16));
  }
  .sun {
    position: absolute;
    top: 4px; right: 12px;
    width: 49px; height: 49px;
    border-radius: 50%;
    background: var(--sun);
    box-shadow: 0 0 0 10px rgba(255, 199, 65, .17);
  }
  .cloud {
    position: absolute;
    bottom: 10px; left: 4px;
    width: 98px; height: 43px;
    border-radius: 28px;
    background: #f8fbff;
    box-shadow: inset 0 -5px 0 #d9eaff, 0 9px 13px rgba(84, 130, 183, .2);
  }
  .cloud:before, .cloud:after {
    content: "";
    position: absolute;
    bottom: 0;
    border-radius: 50%;
    background: #f8fbff;
  }
  .cloud:before { left: 16px; width: 49px; height: 49px; }
  .cloud:after { left: 51px; width: 38px; height: 38px; }
  .temp {
    font-size: 91px;
    line-height: .85;
    letter-spacing: -.09em;
    font-weight: 300;
    color: #173152;
  }
  .temp sup {
    top: -.55em;
    font-size: 28px;
    letter-spacing: 0;
    position: relative;
    font-weight: 500;
  }
  .range {
    margin-top: 13px;
    color: #64768c;
    font-size: 15px;
    text-align: right;
    font-weight: 650;
  }
  .range b { color: #2566d3; }
  .divider { height: 1px; background: var(--line); margin: 0 54px; }
  .hourly { padding: 25px 54px 32px; }
  .section-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    margin-bottom: 21px;
  }
  h2 { margin: 0; font-size: 16px; letter-spacing: -.02em; }
  .section-head span { color: #7c8ba0; font-size: 13px; font-weight: 650; }
  .chart {
    height: 180px;
    position: relative;
    border-radius: 18px;
    padding: 16px 15px 12px;
    background: rgba(242, 248, 255, .72);
    overflow: hidden;
  }
  .chart svg {
    position: absolute;
    inset: 14px 15px 33px;
    width: calc(100% - 30px);
    height: calc(100% - 47px);
    overflow: visible;
  }
  .hours {
    position: absolute;
    left: 15px; right: 15px; bottom: 11px;
    display: grid;
    grid-template-columns: repeat(8, 1fr);
    color: #7c8a9c;
    font-size: 11px;
    font-weight: 700;
    text-align: center;
  }
  .hours span:first-child { text-align: left; }
  .hours span:last-child { text-align: right; }
  .loading, .error {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    text-align: center;
    color: #52677f;
    font-weight: 650;
    background: rgba(255,255,255,.38);
  }
  .error {
    padding: 50px;
    color: #7c3145;
    background: rgba(255, 247, 249, .82);
  }
  .error strong { display:block; font-size: 24px; color:#5d2031; margin-bottom:8px; }
</style>
</head>
<body>
<div class="glow"></div>
<main id="card">
  <section class="top">
    <div>
      <div class="place">
        <svg class="pin" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a7 7 0 0 0-7 7c0 5.25 7 13 7 13s7-7.75 7-13a7 7 0 0 0-7-7Zm0 9.5A2.5 2.5 0 1 1 12 6a2.5 2.5 0 0 1 0 5.5Z"/></svg>
        <span id="location">Berlin</span>
      </div>
      <h1>Weather outlook</h1>
      <p class="date" id="date">Loading date…</p>
      <div class="condition"><span class="dot" id="condition-icon">☀</span><span id="condition">Loading weather</span></div>
    </div>
    <div class="hero">
      <div class="weather-icon"><div class="sun"></div><div class="cloud"></div></div>
      <div>
        <div class="temp"><span id="max">--</span><sup>°</sup></div>
        <div class="range">Low <b id="min">--°</b></div>
      </div>
    </div>
  </section>
  <div class="divider"></div>
  <section class="hourly">
    <div class="section-head"><h2>Temperature through the day</h2><span>Hourly forecast · °C</span></div>
    <div class="chart">
      <svg id="chart" viewBox="0 0 900 110" preserveAspectRatio="none"></svg>
      <div class="hours" id="hours"></div>
    </div>
  </section>
  <div class="loading" id="loading">Loading your weather…</div>
</main>
<script>
(() => {
  const q = new URLSearchParams(location.search);
  const utcToday = new Date().toISOString().slice(0, 10);
  const lat = q.get("lat") || "52.52";
  const lon = q.get("lon") || "13.405";
  const name = q.get("name") || "Berlin";
  const requestedDate = /^\d{4}-\d{2}-\d{2}$/.test(q.get("date") || "") ? q.get("date") : utcToday;
  document.getElementById("location").textContent = name;

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

  document.getElementById("date").textContent = new Intl.DateTimeFormat("en-US", {
    weekday: "long", month: "long", day: "numeric", year: "numeric", timeZone: "UTC"
  }).format(new Date(requestedDate + "T12:00:00Z"));

  const api = requestedDate < utcToday ? "/api/om/archive" : "/api/om/forecast";
  const 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: requestedDate, end_date: requestedDate
  });

  function renderChart(values) {
    const data = values.map((v, i) => ({ v, i })).filter(x => Number.isFinite(x.v));
    if (!data.length) throw new Error("No hourly temperatures available");
    const min = Math.min(...data.map(x => x.v)), max = Math.max(...data.map(x => x.v));
    const spread = Math.max(max - min, 3);
    const y = v => 95 - ((v - min) / spread) * 72;
    const x = i => i / Math.max(values.length - 1, 1) * 900;
    const points = data.map(p => `${x(p.i)},${y(p.v)}`).join(" ");
    const area = `0,110 ${points} 900,110`;
    document.getElementById("chart").innerHTML =
      `<defs><linearGradient id="fill" x1="0" x2="0" y1="0" y2="1"><stop stop-color="#4389f4" stop-opacity=".28"/><stop offset="1" stop-color="#4389f4" stop-opacity="0"/></linearGradient></defs>
       <path d="M0 26H900M0 61H900M0 96H900" stroke="#b9d3f1" stroke-opacity=".45" stroke-dasharray="3 6" fill="none"/>
       <polygon points="${area}" fill="url(#fill)"/>
       <polyline points="${points}" fill="none" stroke="#2874ed" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>` +
      data.filter((_, i) => i % 3 === 0).map(p => `<circle cx="${x(p.i)}" cy="${y(p.v)}" r="4.2" fill="#fff" stroke="#2874ed" stroke-width="2.5"><title>${Math.round(p.v)}°C</title></circle>`).join("");
    const labels = [0, 3, 6, 9, 12, 15, 18, 21].map(h => `<span>${String(h).padStart(2, "0")}:00</span>`);
    document.getElementById("hours").innerHTML = labels.join("");
  }

  fetch(`${api}?${params}`)
    .then(r => r.ok ? r.json() : Promise.reject(new Error("Weather service unavailable")))
    .then(data => {
      const daily = data.daily;
      if (!daily || !daily.temperature_2m_max?.length || !data.hourly?.temperature_2m) throw new Error("Incomplete weather data");
      const max = Math.round(daily.temperature_2m_max[0]);
      const min = Math.round(daily.temperature_2m_min[0]);
      const [label, icon] = weather[daily.weather_code?.[0]] || ["Variable conditions", "⛅"];
      document.getElementById("max").textContent = max;
      document.getElementById("min").textContent = `${min}°`;
      document.getElementById("condition").textContent = label;
      document.getElementById("condition-icon").textContent = icon;
      renderChart(data.hourly.temperature_2m);
      document.getElementById("loading").remove();
    })
    .catch(() => {
      document.getElementById("loading").outerHTML =
        `<div class="error"><div><strong>Weather data couldn’t be loaded.</strong>Please check your connection and try again.</div></div>`;
    });
})();
</script>
</body>
</html>

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

bytes 总计11,186html / css / js1,490 / 5,225 / 4,471
dom 节点40dom 深度8
css 规则36含 js
brightness234.1contrast20.9
colorfulness30.2留白83.9%

该 slot 的 telemetry

prompt tokens0completion tokens9,538
total tokens0wall72.3 s
costrequest id
config.json569 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "gpt-5.6-terra-eff-medium--cli--codex-oauth--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": 36060,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 251580
  },
  "transport": "codex-cli-oauth-chatgpt",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-07-17--dev-codex-oauth-gpt-5.6-terra",
  "config_id": "gpt-5.6-terra-eff-medium--cli--codex-oauth--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T13:55:25.124231+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:54:12.839070+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-17T13:56:29.511714+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:55:28.503024+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-17T13:57:30.561091+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:56:33.451040+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-17T13:58:35.432800+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:57:34.249234+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
    }
  }
}