gpt-5.5 @ low · codex-oauth

codex-oauthlow
config
gpt-5.5-eff-low--cli--codex-oauth--dev
batch
2026-07-19--unified
transport
codex-cli-oauth-chatgpt
protocol
cli · plan
served model
gpt-5.5
采集于
2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe
gpt-5.5 @low · codex-oauth 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
  • 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 {
  color-scheme: light;
  --ink: #17202a;
  --muted: #617084;
  --panel: rgba(255,255,255,.74);
  --line: rgba(31,45,64,.14);
  --accent: #0e7c86;
  --accent-2: #d0673a;
  --sky: #9fd7ee;
  --grass: #7cae72;
}
* { box-sizing: border-box; }
html, body {
  width: 100%;
  height: 100%;
  margin: 0;
}
body {
  min-height: 100vh;
  display: grid;
  place-items: center;
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  color: var(--ink);
  background:
    radial-gradient(circle at 18% 18%, rgba(255,255,255,.95) 0 8%, transparent 9%),
    linear-gradient(180deg, #8fcbe8 0%, #d8edf1 48%, #e9e1c4 49%, #8dbb7a 100%);
  overflow: hidden;
}
body::before {
  content: "";
  position: fixed;
  inset: auto -5vw 0;
  height: 39vh;
  background:
    linear-gradient(8deg, rgba(50,115,74,.38), transparent 54%),
    linear-gradient(172deg, rgba(205,160,82,.34), transparent 48%),
    #82ae73;
  clip-path: polygon(0 35%, 18% 20%, 35% 34%, 54% 16%, 73% 32%, 100% 12%, 100% 100%, 0 100%);
}
body::after {
  content: "";
  position: fixed;
  width: 720px;
  height: 180px;
  left: 50%;
  top: 116px;
  transform: translateX(-50%);
  background:
    radial-gradient(ellipse at 20% 60%, rgba(255,255,255,.88) 0 24%, transparent 25%),
    radial-gradient(ellipse at 42% 45%, rgba(255,255,255,.8) 0 28%, transparent 29%),
    radial-gradient(ellipse at 66% 60%, rgba(255,255,255,.74) 0 25%, transparent 26%),
    radial-gradient(ellipse at 83% 54%, rgba(255,255,255,.64) 0 17%, transparent 18%);
  opacity: .55;
  filter: blur(1px);
}
.card {
  position: relative;
  z-index: 1;
  width: min(1040px, calc(100vw - 96px));
  min-height: 590px;
  display: grid;
  grid-template-rows: auto 1fr auto;
  gap: 28px;
  padding: 38px;
  border: 1px solid rgba(255,255,255,.58);
  border-radius: 8px;
  background: linear-gradient(145deg, rgba(255,255,255,.86), rgba(255,255,255,.62));
  box-shadow: 0 28px 70px rgba(30,54,78,.24), inset 0 1px 0 rgba(255,255,255,.7);
  backdrop-filter: blur(18px) saturate(1.2);
}
.header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 28px;
}
.place {
  min-width: 0;
}
.location {
  margin: 0;
  max-width: 640px;
  font-size: 54px;
  line-height: .98;
  letter-spacing: 0;
  font-weight: 780;
  overflow-wrap: anywhere;
}
.date {
  margin-top: 12px;
  color: var(--muted);
  font-size: 18px;
  font-weight: 600;
}
.badge {
  flex: 0 0 auto;
  min-width: 210px;
  padding: 17px 20px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.6);
  text-align: right;
}
.badge .label {
  color: var(--muted);
  font-size: 12px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .12em;
}
.badge .condition {
  margin-top: 7px;
  font-size: 22px;
  font-weight: 760;
}
.main {
  display: grid;
  grid-template-columns: 345px 1fr;
  gap: 34px;
  align-items: stretch;
}
.temps {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
.tempBox {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 22px;
  background: rgba(255,255,255,.56);
}
.tempBox .k {
  color: var(--muted);
  font-size: 13px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .1em;
}
.tempBox .v {
  margin-top: 12px;
  font-size: 58px;
  line-height: 1;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
.tempBox.max .v { color: var(--accent-2); }
.tempBox.min .v { color: var(--accent); }
.summary {
  margin-top: 14px;
  height: calc(100% - 146px);
  min-height: 190px;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 24px;
  background:
    linear-gradient(180deg, rgba(255,255,255,.58), rgba(255,255,255,.34)),
    repeating-linear-gradient(90deg, transparent 0 32px, rgba(23,32,42,.04) 33px 34px);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  overflow: hidden;
}
.icon {
  width: 116px;
  height: 116px;
  margin-bottom: auto;
  filter: drop-shadow(0 12px 18px rgba(35,65,85,.18));
}
.note {
  color: var(--muted);
  font-size: 15px;
  line-height: 1.45;
}
.chartPanel {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 24px 24px 18px;
  background: rgba(255,255,255,.5);
  min-width: 0;
}
.chartTop {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 18px;
  margin-bottom: 16px;
}
.chartTitle {
  font-size: 18px;
  font-weight: 780;
}
.range {
  color: var(--muted);
  font-size: 14px;
  font-weight: 650;
}
.chart {
  width: 100%;
  height: 300px;
  display: block;
  overflow: visible;
}
.axisText {
  fill: #617084;
  font-size: 11px;
  font-weight: 700;
  font-family: inherit;
}
.hourText {
  fill: #617084;
  font-size: 10px;
  font-weight: 700;
  font-family: inherit;
}
.footer {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 9px;
}
.hourTile {
  min-width: 0;
  border: 1px solid rgba(31,45,64,.12);
  border-radius: 8px;
  padding: 10px 8px;
  background: rgba(255,255,255,.45);
  text-align: center;
}
.hourTile .h {
  color: var(--muted);
  font-size: 11px;
  font-weight: 800;
}
.hourTile .t {
  margin-top: 5px;
  font-size: 18px;
  font-weight: 780;
  font-variant-numeric: tabular-nums;
}
.loading, .error {
  grid-row: 1 / -1;
  display: grid;
  place-items: center;
  min-height: 500px;
  text-align: center;
}
.loading h1, .error h1 {
  margin: 0;
  font-size: 36px;
  line-height: 1.1;
}
.loading p, .error p {
  margin: 12px auto 0;
  max-width: 540px;
  color: var(--muted);
  font-size: 17px;
  line-height: 1.45;
}
.hidden { display: none; }
@media (max-width: 900px) {
  .card { width: calc(100vw - 32px); padding: 24px; }
  .main { grid-template-columns: 1fr; }
  .footer { grid-template-columns: repeat(4, 1fr); }
  .header { flex-direction: column; }
  .badge { width: 100%; text-align: left; }
  .location { font-size: 40px; }
}
</style>
</head>
<body>
<main class="card" aria-live="polite">
  <section id="loading" class="loading">
    <div>
      <h1>Loading weather</h1>
      <p>Fetching the requested day from the local Open-Meteo compatible API.</p>
    </div>
  </section>

  <section id="error" class="error hidden">
    <div>
      <h1>Weather data could not be loaded</h1>
      <p>Check the requested location, date, and API availability, then try again.</p>
    </div>
  </section>

  <div id="content" class="hidden">
    <header class="header">
      <div class="place">
        <h1 id="location" class="location">Berlin</h1>
        <div id="date" class="date"></div>
      </div>
      <div class="badge">
        <div class="label">Condition</div>
        <div id="condition" class="condition">Clear sky</div>
      </div>
    </header>

    <section class="main">
      <div>
        <div class="temps">
          <div class="tempBox max">
            <div class="k">Maximum</div>
            <div id="maxTemp" class="v">--</div>
          </div>
          <div class="tempBox min">
            <div class="k">Minimum</div>
            <div id="minTemp" class="v">--</div>
          </div>
        </div>
        <div class="summary">
          <svg id="weatherIcon" class="icon" viewBox="0 0 140 140" role="img" aria-label="Weather icon"></svg>
          <div id="note" class="note"></div>
        </div>
      </div>

      <div class="chartPanel">
        <div class="chartTop">
          <div class="chartTitle">Hourly Temperature</div>
          <div id="range" class="range"></div>
        </div>
        <svg id="chart" class="chart" viewBox="0 0 620 300" preserveAspectRatio="none" role="img" aria-label="Hourly temperature chart"></svg>
      </div>
    </section>

    <footer id="tiles" class="footer" aria-label="Hourly temperatures"></footer>
  </div>
</main>

<script>
(function () {
  "use strict";

  const params = new URLSearchParams(window.location.search);
  const todayUtc = new Date().toISOString().slice(0, 10);
  const state = {
    lat: validNumber(params.get("lat"), 52.52),
    lon: validNumber(params.get("lon"), 13.405),
    name: params.get("name") || "Berlin",
    date: validDate(params.get("date")) || todayUtc
  };

  const els = {
    loading: document.getElementById("loading"),
    error: document.getElementById("error"),
    content: document.getElementById("content"),
    location: document.getElementById("location"),
    date: document.getElementById("date"),
    condition: document.getElementById("condition"),
    maxTemp: document.getElementById("maxTemp"),
    minTemp: document.getElementById("minTemp"),
    note: document.getElementById("note"),
    range: document.getElementById("range"),
    chart: document.getElementById("chart"),
    tiles: document.getElementById("tiles"),
    icon: document.getElementById("weatherIcon")
  };

  function validNumber(value, fallback) {
    const n = Number(value);
    return Number.isFinite(n) ? n : fallback;
  }

  function validDate(value) {
    if (!value || !/^\d{4}-\d{2}-\d{2}$/.test(value)) return "";
    const d = new Date(value + "T00:00:00Z");
    return Number.isNaN(d.getTime()) ? "" : value;
  }

  function endpointFor(date) {
    return date < todayUtc ? "/api/om/archive" : "/api/om/forecast";
  }

  function buildUrl() {
    const url = new URL(endpointFor(state.date), window.location.origin);
    url.searchParams.set("latitude", state.lat);
    url.searchParams.set("longitude", state.lon);
    url.searchParams.set("daily", "temperature_2m_max,temperature_2m_min,weather_code");
    url.searchParams.set("hourly", "temperature_2m");
    url.searchParams.set("timezone", "UTC");
    url.searchParams.set("temperature_unit", "celsius");
    url.searchParams.set("start_date", state.date);
    url.searchParams.set("end_date", state.date);
    return url;
  }

  function weatherName(code) {
    const map = {
      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: "Heavy snow showers",
      95: "Thunderstorm",
      96: "Thunderstorm with hail",
      99: "Thunderstorm with hail"
    };
    return map[code] || "Unknown";
  }

  function iconSvg(code) {
    const cloud = '<ellipse cx="72" cy="82" rx="39" ry="24" fill="#f8fbfc"/><ellipse cx="48" cy="84" rx="22" ry="17" fill="#f8fbfc"/><ellipse cx="91" cy="78" rx="26" ry="20" fill="#eef5f7"/><rect x="38" y="78" width="70" height="27" rx="14" fill="#f8fbfc"/>';
    if (code === 0 || code === 1) {
      return '<circle cx="70" cy="70" r="28" fill="#f3b34d"/><g stroke="#f3b34d" stroke-width="8" stroke-linecap="round"><path d="M70 20v13"/><path d="M70 107v13"/><path d="M20 70h13"/><path d="M107 70h13"/><path d="M35 35l10 10"/><path d="M95 95l10 10"/><path d="M105 35L95 45"/><path d="M45 95l-10 10"/></g>';
    }
    if (code === 2 || code === 3 || code === 45 || code === 48) {
      return '<circle cx="48" cy="54" r="24" fill="#f3b34d"/>' + cloud;
    }
    if ((code >= 71 && code <= 77) || code === 85 || code === 86) {
      return cloud + '<g fill="#66a8c7"><circle cx="49" cy="118" r="4"/><circle cx="70" cy="121" r="4"/><circle cx="91" cy="116" r="4"/></g>';
    }
    if (code >= 95) {
      return cloud + '<path d="M70 102l-13 28 21-18-4 25 17-34z" fill="#d0673a"/>';
    }
    return cloud + '<g stroke="#0e7c86" stroke-width="6" stroke-linecap="round"><path d="M50 111l-7 14"/><path d="M72 111l-7 14"/><path d="M94 111l-7 14"/></g>';
  }

  function formatTemp(n) {
    return Number.isFinite(n) ? Math.round(n) + "°" : "--";
  }

  function formatDate(date) {
    const d = new Date(date + "T00:00:00Z");
    return new Intl.DateTimeFormat(undefined, {
      weekday: "long",
      year: "numeric",
      month: "long",
      day: "numeric",
      timeZone: "UTC"
    }).format(d);
  }

  function getHourlyForDate(hourly) {
    const times = hourly && hourly.time;
    const temps = hourly && hourly.temperature_2m;
    if (!Array.isArray(times) || !Array.isArray(temps)) return [];
    return times.map((time, i) => ({ time, temp: Number(temps[i]) }))
      .filter(d => d.time && d.time.slice(0, 10) === state.date && Number.isFinite(d.temp));
  }

  function renderChart(points) {
    const w = 620, h = 300, l = 42, r = 16, t = 20, b = 42;
    const temps = points.map(p => p.temp);
    const min = Math.floor(Math.min(...temps) - 1);
    const max = Math.ceil(Math.max(...temps) + 1);
    const span = Math.max(1, max - min);
    const stepX = (w - l - r) / Math.max(1, points.length - 1);
    const xy = points.map((p, i) => ({
      x: l + i * stepX,
      y: t + (max - p.temp) / span * (h - t - b),
      p
    }));
    const d = xy.map((p, i) => (i ? "L" : "M") + p.x.toFixed(1) + " " + p.y.toFixed(1)).join(" ");
    const area = d + " L " + xy[xy.length - 1].x.toFixed(1) + " " + (h - b) + " L " + l + " " + (h - b) + " Z";
    const grid = [0, .25, .5, .75, 1].map(v => {
      const y = t + v * (h - t - b);
      const label = Math.round(max - v * span) + "°";
      return '<line x1="' + l + '" y1="' + y + '" x2="' + (w - r) + '" y2="' + y + '" stroke="rgba(31,45,64,.12)" stroke-width="1"/><text class="axisText" x="4" y="' + (y + 4) + '">' + label + '</text>';
    }).join("");
    const markers = xy.map((p, i) => {
      if (i % 3 !== 0 && i !== xy.length - 1) return "";
      const hour = p.p.time.slice(11, 13);
      return '<circle cx="' + p.x + '" cy="' + p.y + '" r="3.8" fill="#0e7c86"/><text class="hourText" x="' + p.x + '" y="287" text-anchor="middle">' + hour + '</text>';
    }).join("");
    els.chart.innerHTML =
      '<defs><linearGradient id="fillTemp" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#d0673a" stop-opacity=".38"/><stop offset="1" stop-color="#0e7c86" stop-opacity=".06"/></linearGradient></defs>' +
      grid +
      '<path d="' + area + '" fill="url(#fillTemp)"/>' +
      '<path d="' + d + '" fill="none" stroke="#0e7c86" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>' +
      markers;
    els.range.textContent = Math.round(min) + "° to " + Math.round(max) + "°C";
  }

  function renderTiles(points) {
    const selected = points.filter((_, i) => i % 3 === 0).slice(0, 8);
    els.tiles.innerHTML = selected.map(p => {
      const hour = p.time.slice(11, 13) + ":00";
      return '<div class="hourTile"><div class="h">' + hour + '</div><div class="t">' + formatTemp(p.temp) + '</div></div>';
    }).join("");
  }

  function showError() {
    els.loading.classList.add("hidden");
    els.content.classList.add("hidden");
    els.error.classList.remove("hidden");
  }

  function showContent() {
    els.loading.classList.add("hidden");
    els.error.classList.add("hidden");
    els.content.classList.remove("hidden");
  }

  async function load() {
    try {
      const res = await fetch(buildUrl(), { headers: { "Accept": "application/json" } });
      if (!res.ok) throw new Error("HTTP " + res.status);
      const data = await res.json();
      const daily = data.daily || {};
      const maxTemp = Number(daily.temperature_2m_max && daily.temperature_2m_max[0]);
      const minTemp = Number(daily.temperature_2m_min && daily.temperature_2m_min[0]);
      const code = Number(daily.weather_code && daily.weather_code[0]);
      const hourly = getHourlyForDate(data.hourly);
      if (!Number.isFinite(maxTemp) || !Number.isFinite(minTemp) || !Number.isFinite(code) || hourly.length === 0) {
        throw new Error("Incomplete data");
      }

      const condition = weatherName(code);
      els.location.textContent = state.name;
      els.date.textContent = formatDate(state.date) + " · UTC";
      els.condition.textContent = condition;
      els.maxTemp.textContent = formatTemp(maxTemp);
      els.minTemp.textContent = formatTemp(minTemp);
      els.note.textContent = condition + " with hourly readings from " + hourly[0].time.slice(11, 16) + " to " + hourly[hourly.length - 1].time.slice(11, 16) + " UTC.";
      els.icon.innerHTML = iconSvg(code);
      renderChart(hourly);
      renderTiles(hourly);
      showContent();
    } catch (err) {
      showError();
    }
  }

  load();
})();
</script>
</body>
</html>

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

bytes 总计16,680html / css / js2,063 / 5,866 / 8,751
dom 节点43dom 深度9
css 规则46含 js
brightness216.9contrast37.4
colorfulness36.2留白67.2%

该 slot 的 telemetry

prompt tokens0completion tokens11,373
total tokens0wall101.5 s
costrequest id
config.json545 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "gpt-5.5-eff-low--cli--codex-oauth--dev",
  "effort": "low",
  "family": "gpt",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "gpt-5.5",
  "protocol": "cli",
  "served_model": "gpt-5.5",
  "telemetry": {
    "completion_tokens": 40629,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 327365
  },
  "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.5",
  "config_id": "gpt-5.5-eff-low--cli--codex-oauth--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T13:52:01.619359+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:51:05.418486+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:53:46.744792+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:52:05.215396+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:55:30.939837+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:53:50.075004+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-17T13:56:43.566351+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:55:34.779071+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-min"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}