gpt-5.4 @ none · api

apinone
config
gpt-5.4-eff-none--api--official--dev
batch
2026-07-19--unified
transport
openai-official-api
protocol
api · metered
served model
gpt-5.4-2026-03-05
采集于
2026年7月18日 11:54 · N=4
variant
live
slot 0 · P-q · sandboxed iframe
gpt-5.4 @none · api 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 24/24 · 24 命中 · 0 不符 · 0 未展示
  • 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.0" />
  <title>Weather Card</title>
  <style>
    :root {
      --bg1: #0b1220;
      --bg2: #111a2f;
      --card: rgba(255, 255, 255, 0.12);
      --card-strong: rgba(255, 255, 255, 0.18);
      --border: rgba(255, 255, 255, 0.18);
      --text: #eef4ff;
      --muted: rgba(238, 244, 255, 0.72);
      --soft: rgba(238, 244, 255, 0.52);
      --accent: #8cc8ff;
      --accent2: #b39dff;
      --warm: #ffb86b;
      --cool: #7dd3fc;
      --shadow: 0 18px 50px rgba(0, 0, 0, 0.35);
      --radius: 28px;
    }

    * { box-sizing: border-box; }

    html, body {
      width: 1280px;
      height: 800px;
      margin: 0;
      overflow: hidden;
      font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
      color: var(--text);
      background:
        radial-gradient(1200px 600px at 15% 10%, rgba(124, 92, 255, 0.22), transparent 60%),
        radial-gradient(900px 500px at 85% 15%, rgba(71, 191, 255, 0.22), transparent 55%),
        radial-gradient(600px 300px at 50% 100%, rgba(255, 173, 92, 0.10), transparent 60%),
        linear-gradient(135deg, var(--bg1), var(--bg2));
    }

    body {
      position: relative;
      display: grid;
      place-items: center;
    }

    .bg-orb, .bg-orb::before, .bg-orb::after {
      position: absolute;
      border-radius: 999px;
      filter: blur(30px);
      pointer-events: none;
    }

    .bg-orb {
      width: 360px;
      height: 360px;
      left: 120px;
      top: 120px;
      background: rgba(140, 200, 255, 0.08);
    }

    .bg-orb::before {
      content: "";
      width: 260px;
      height: 260px;
      right: -680px;
      top: -50px;
      background: rgba(179, 157, 255, 0.10);
      position: absolute;
    }

    .bg-orb::after {
      content: "";
      width: 300px;
      height: 300px;
      left: 780px;
      top: 360px;
      background: rgba(255, 184, 107, 0.08);
      position: absolute;
    }

    .frame {
      width: 1160px;
      height: 700px;
      padding: 28px;
      border-radius: 36px;
      background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.03));
      border: 1px solid rgba(255,255,255,0.08);
      box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,0.08);
      backdrop-filter: blur(10px);
      position: relative;
      overflow: hidden;
    }

    .frame::before {
      content: "";
      position: absolute;
      inset: 0;
      background:
        linear-gradient(120deg, rgba(255,255,255,0.06), transparent 28%),
        radial-gradient(600px 240px at 80% -10%, rgba(255,255,255,0.08), transparent 60%);
      pointer-events: none;
    }

    .card {
      position: relative;
      height: 100%;
      display: grid;
      grid-template-columns: 1.05fr 1.25fr;
      gap: 24px;
      z-index: 1;
    }

    .panel {
      border-radius: var(--radius);
      background: linear-gradient(180deg, rgba(255,255,255,0.10), rgba(255,255,255,0.07));
      border: 1px solid var(--border);
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
      overflow: hidden;
      position: relative;
    }

    .left {
      padding: 32px;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      background:
        radial-gradient(360px 220px at 80% 18%, rgba(255,255,255,0.08), transparent 60%),
        linear-gradient(180deg, rgba(145, 190, 255, 0.12), rgba(255,255,255,0.04));
    }

    .location-row {
      display: flex;
      align-items: flex-start;
      justify-content: space-between;
      gap: 18px;
    }

    .eyebrow {
      font-size: 13px;
      letter-spacing: 0.16em;
      text-transform: uppercase;
      color: var(--soft);
      margin-bottom: 10px;
    }

    .location {
      font-size: 42px;
      line-height: 1.05;
      font-weight: 700;
      letter-spacing: -0.03em;
      max-width: 420px;
      text-wrap: balance;
    }

    .date {
      margin-top: 12px;
      font-size: 18px;
      color: var(--muted);
      font-weight: 500;
    }

    .icon-wrap {
      width: 132px;
      height: 132px;
      border-radius: 28px;
      background: linear-gradient(180deg, rgba(255,255,255,0.16), rgba(255,255,255,0.08));
      border: 1px solid rgba(255,255,255,0.14);
      display: grid;
      place-items: center;
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.10);
      flex: 0 0 auto;
    }

    .condition {
      margin-top: 22px;
      font-size: 22px;
      color: var(--text);
      font-weight: 600;
    }

    .temps {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 14px;
      margin-top: 26px;
    }

    .temp-box {
      padding: 18px 18px 16px;
      border-radius: 22px;
      background: linear-gradient(180deg, rgba(255,255,255,0.11), rgba(255,255,255,0.06));
      border: 1px solid rgba(255,255,255,0.12);
    }

    .temp-label {
      font-size: 13px;
      text-transform: uppercase;
      letter-spacing: 0.14em;
      color: var(--soft);
      margin-bottom: 8px;
    }

    .temp-value {
      font-size: 40px;
      line-height: 1;
      font-weight: 750;
      letter-spacing: -0.04em;
    }

    .temp-value.max { color: #ffd19a; }
    .temp-value.min { color: #9edfff; }

    .summary-band {
      display: flex;
      align-items: center;
      gap: 12px;
      margin-top: 18px;
      padding: 14px 16px;
      border-radius: 20px;
      background: rgba(255,255,255,0.08);
      border: 1px solid rgba(255,255,255,0.10);
      color: var(--muted);
      font-size: 15px;
    }

    .right {
      padding: 24px 24px 18px;
      display: flex;
      flex-direction: column;
      background:
        radial-gradient(420px 240px at 20% 0%, rgba(124, 211, 252, 0.10), transparent 60%),
        linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0.05));
    }

    .hourly-head {
      display: flex;
      align-items: baseline;
      justify-content: space-between;
      margin-bottom: 18px;
      padding: 4px 4px 0;
    }

    .hourly-title {
      font-size: 22px;
      font-weight: 700;
      letter-spacing: -0.02em;
    }

    .hourly-sub {
      font-size: 14px;
      color: var(--muted);
    }

    .hourly-grid {
      display: grid;
      grid-template-columns: repeat(6, 1fr);
      gap: 12px;
      flex: 1;
      align-content: start;
    }

    .hour {
      min-height: 92px;
      border-radius: 20px;
      padding: 14px 12px;
      background: linear-gradient(180deg, rgba(255,255,255,0.10), rgba(255,255,255,0.06));
      border: 1px solid rgba(255,255,255,0.10);
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
    }

    .hour-time {
      font-size: 13px;
      color: var(--soft);
      letter-spacing: 0.04em;
    }

    .hour-temp {
      font-size: 25px;
      line-height: 1;
      font-weight: 700;
      letter-spacing: -0.03em;
    }

    .footer-note {
      margin-top: 16px;
      padding: 0 4px;
      font-size: 12px;
      color: rgba(238, 244, 255, 0.5);
    }

    .status {
      position: absolute;
      inset: 0;
      display: none;
      align-items: center;
      justify-content: center;
      z-index: 3;
      background: linear-gradient(180deg, rgba(10,16,30,0.52), rgba(10,16,30,0.68));
      backdrop-filter: blur(8px);
    }

    .status.show { display: flex; }

    .status-card {
      width: 500px;
      max-width: calc(100% - 80px);
      padding: 30px 28px;
      text-align: center;
      border-radius: 28px;
      background: linear-gradient(180deg, rgba(255,255,255,0.12), rgba(255,255,255,0.08));
      border: 1px solid rgba(255,255,255,0.12);
      box-shadow: var(--shadow);
    }

    .status-title {
      font-size: 28px;
      font-weight: 700;
      letter-spacing: -0.03em;
      margin-bottom: 10px;
    }

    .status-text {
      font-size: 16px;
      color: var(--muted);
      line-height: 1.5;
    }

    .spinner {
      width: 42px;
      height: 42px;
      margin: 0 auto 18px;
      border-radius: 999px;
      border: 3px solid rgba(255,255,255,0.18);
      border-top-color: rgba(255,255,255,0.85);
      animation: spin 1s linear infinite;
    }

    @keyframes spin {
      to { transform: rotate(360deg); }
    }

    svg { display: block; }

    .sr-only {
      position: absolute;
      width: 1px;
      height: 1px;
      padding: 0;
      margin: -1px;
      overflow: hidden;
      clip: rect(0,0,0,0);
      white-space: nowrap;
      border: 0;
    }
  </style>
</head>
<body>
  <div class="bg-orb"></div>

  <div class="frame">
    <div class="card" id="card">
      <section class="panel left">
        <div>
          <div class="location-row">
            <div>
              <div class="eyebrow">Weather Overview</div>
              <div class="location" id="locationName">Berlin</div>
              <div class="date" id="displayDate">—</div>
            </div>
            <div class="icon-wrap" id="iconWrap" aria-hidden="true"></div>
          </div>

          <div class="condition" id="conditionText">Loading weather…</div>

          <div class="temps">
            <div class="temp-box">
              <div class="temp-label">Maximum</div>
              <div class="temp-value max" id="maxTemp">—</div>
            </div>
            <div class="temp-box">
              <div class="temp-label">Minimum</div>
              <div class="temp-value min" id="minTemp">—</div>
            </div>
          </div>

          <div class="summary-band">
            <span>UTC day view</span>
            <span style="opacity:.45">•</span>
            <span id="coordText">52.52, 13.405</span>
          </div>
        </div>
      </section>

      <section class="panel right">
        <div class="hourly-head">
          <div class="hourly-title">Hourly temperatures</div>
          <div class="hourly-sub" id="hourCount">24 readings</div>
        </div>
        <div class="hourly-grid" id="hourlyGrid"></div>
        <div class="footer-note">Temperatures shown in °C for the selected UTC date.</div>
      </section>
    </div>

    <div class="status show" id="status">
      <div class="status-card">
        <div class="spinner" id="spinner"></div>
        <div class="status-title" id="statusTitle">Loading weather</div>
        <div class="status-text" id="statusText">Fetching conditions for the selected location and date.</div>
      </div>
    </div>
  </div>

  <script>
    const qs = new URLSearchParams(location.search);

    function todayUTC() {
      return new Date().toISOString().slice(0, 10);
    }

    function validDateString(s) {
      return /^\d{4}-\d{2}-\d{2}$/.test(s || "");
    }

    const lat = Number.isFinite(parseFloat(qs.get("lat"))) ? parseFloat(qs.get("lat")) : 52.52;
    const lon = Number.isFinite(parseFloat(qs.get("lon"))) ? parseFloat(qs.get("lon")) : 13.405;
    const name = (qs.get("name") || "Berlin").trim() || "Berlin";
    const dateStr = validDateString(qs.get("date")) ? qs.get("date") : todayUTC();

    const requested = new Date(dateStr + "T00:00:00Z");
    const today = new Date(todayUTC() + "T00:00:00Z");
    const apiPath = requested < today ? "/api/om/archive" : "/api/om/forecast";

    const els = {
      locationName: document.getElementById("locationName"),
      displayDate: document.getElementById("displayDate"),
      conditionText: document.getElementById("conditionText"),
      maxTemp: document.getElementById("maxTemp"),
      minTemp: document.getElementById("minTemp"),
      coordText: document.getElementById("coordText"),
      hourlyGrid: document.getElementById("hourlyGrid"),
      hourCount: document.getElementById("hourCount"),
      iconWrap: document.getElementById("iconWrap"),
      status: document.getElementById("status"),
      statusTitle: document.getElementById("statusTitle"),
      statusText: document.getElementById("statusText"),
      spinner: document.getElementById("spinner")
    };

    els.locationName.textContent = name;
    els.coordText.textContent = lat.toFixed(3) + ", " + lon.toFixed(3);
    els.displayDate.textContent = formatDate(dateStr);

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

    function setStatus(title, text, loading) {
      els.status.classList.add("show");
      els.statusTitle.textContent = title;
      els.statusText.textContent = text;
      els.spinner.style.display = loading ? "block" : "none";
    }

    function hideStatus() {
      els.status.classList.remove("show");
    }

    function c(v) {
      return Math.round(v) + "°C";
    }

    function weatherInfo(code) {
      const map = {
        0: ["Clear sky", "clear"],
        1: ["Mainly clear", "partly"],
        2: ["Partly cloudy", "partly"],
        3: ["Overcast", "cloudy"],
        45: ["Fog", "fog"],
        48: ["Depositing rime fog", "fog"],
        51: ["Light drizzle", "drizzle"],
        53: ["Moderate drizzle", "drizzle"],
        55: ["Dense drizzle", "drizzle"],
        56: ["Light freezing drizzle", "drizzle"],
        57: ["Dense freezing drizzle", "drizzle"],
        61: ["Slight rain", "rain"],
        63: ["Moderate rain", "rain"],
        65: ["Heavy rain", "rain"],
        66: ["Light freezing rain", "rain"],
        67: ["Heavy freezing rain", "rain"],
        71: ["Slight snow fall", "snow"],
        73: ["Moderate snow fall", "snow"],
        75: ["Heavy snow fall", "snow"],
        77: ["Snow grains", "snow"],
        80: ["Slight rain showers", "showers"],
        81: ["Moderate rain showers", "showers"],
        82: ["Violent rain showers", "showers"],
        85: ["Slight snow showers", "snow"],
        86: ["Heavy snow showers", "snow"],
        95: ["Thunderstorm", "storm"],
        96: ["Thunderstorm with slight hail", "storm"],
        99: ["Thunderstorm with heavy hail", "storm"]
      };
      return map[code] || ["Unknown conditions", "cloudy"];
    }

    function iconSVG(type) {
      const common = 'viewBox="0 0 120 120" width="88" height="88"';
      if (type === "clear") {
        return '<svg ' + common + ' aria-hidden="true"><defs><radialGradient id="g1" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="#fff1a8"/><stop offset="100%" stop-color="#ffbf5f"/></radialGradient></defs><circle cx="60" cy="60" r="24" fill="url(#g1)"/><g stroke="#ffd37b" stroke-width="5" stroke-linecap="round" opacity=".95"><line x1="60" y1="14" x2="60" y2="28"/><line x1="60" y1="92" x2="60" y2="106"/><line x1="14" y1="60" x2="28" y2="60"/><line x1="92" y1="60" x2="106" y2="60"/><line x1="27" y1="27" x2="37" y2="37"/><line x1="83" y1="83" x2="93" y2="93"/><line x1="27" y1="93" x2="37" y2="83"/><line x1="83" y1="37" x2="93" y2="27"/></g></svg>';
      }
      if (type === "partly") {
        return '<svg ' + common + ' aria-hidden="true"><defs><radialGradient id="g2" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="#fff1a8"/><stop offset="100%" stop-color="#ffbf5f"/></radialGradient></defs><circle cx="42" cy="42" r="18" fill="url(#g2)"/><g stroke="#ffd37b" stroke-width="4" stroke-linecap="round" opacity=".9"><line x1="42" y1="13" x2="42" y2="23"/><line x1="42" y1="61" x2="42" y2="71"/><line x1="13" y1="42" x2="23" y2="42"/><line x1="61" y1="42" x2="71" y2="42"/><line x1="22" y1="22" x2="29" y2="29"/><line x1="55" y1="55" x2="62" y2="62"/><line x1="22" y1="62" x2="29" y2="55"/><line x1="55" y1="29" x2="62" y2="22"/></g><g><ellipse cx="67" cy="71" rx="28" ry="18" fill="#eef5ff" opacity=".96"/><ellipse cx="52" cy="74" rx="18" ry="13" fill="#dfeaf7"/><ellipse cx="83" cy="75" rx="17" ry="12" fill="#dfeaf7"/></g></svg>';
      }
      if (type === "cloudy") {
        return '<svg ' + common + ' aria-hidden="true"><g><ellipse cx="62" cy="66" rx="30" ry="20" fill="#eef5ff" opacity=".97"/><ellipse cx="44" cy="71" rx="18" ry="14" fill="#dfeaf7"/><ellipse cx="84" cy="72" rx="19" ry="14" fill="#dfeaf7"/><ellipse cx="62" cy="76" rx="40" ry="16" fill="#cfdced" opacity=".9"/></g></svg>';
      }
      if (type === "fog") {
        return '<svg ' + common + ' aria-hidden="true"><g><ellipse cx="58" cy="48" rx="24" ry="16" fill="#eef5ff" opacity=".9"/><ellipse cx="74" cy="52" rx="18" ry="13" fill="#dfeaf7"/><ellipse cx="44" cy="54" rx="16" ry="12" fill="#dfeaf7"/></g><g stroke="#d8e5f5" stroke-width="5" stroke-linecap="round" opacity=".85"><line x1="24" y1="72" x2="96" y2="72"/><line x1="18" y1="84" x2="88" y2="84"/><line x1="30" y1="96" x2="102" y2="96"/></g></svg>';
      }
      if (type === "drizzle" || type === "rain" || type === "showers") {
        return '<svg ' + common + ' aria-hidden="true"><g><ellipse cx="60" cy="46" rx="28" ry="18" fill="#eef5ff" opacity=".96"/><ellipse cx="43" cy="51" rx="17" ry="13" fill="#dfeaf7"/><ellipse cx="80" cy="52" rx="18" ry="13" fill="#dfeaf7"/></g><g stroke="#7ccfff" stroke-width="5" stroke-linecap="round"><line x1="42" y1="70" x2="36" y2="86"/><line x1="60" y1="72" x2="54" y2="88"/><line x1="78" y1="70" x2="72" y2="86"/></g></svg>';
      }
      if (type === "snow") {
        return '<svg ' + common + ' aria-hidden="true"><g><ellipse cx="60" cy="44" rx="28" ry="18" fill="#eef5ff" opacity=".96"/><ellipse cx="43" cy="49" rx="17" ry="13" fill="#dfeaf7"/><ellipse cx="80" cy="50" rx="18" ry="13" fill="#dfeaf7"/></g><g stroke="#dff4ff" stroke-width="4" stroke-linecap="round"><line x1="42" y1="73" x2="42" y2="85"/><line x1="36" y1="79" x2="48" y2="79"/><line x1="38" y1="75" x2="46" y2="83"/><line x1="46" y1="75" x2="38" y2="83"/><line x1="60" y1="73" x2="60" y2="85"/><line x1="54" y1="79" x2="66" y2="79"/><line x1="56" y1="75" x2="64" y2="83"/><line x1="64" y1="75" x2="56" y2="83"/><line x1="78" y1="73" x2="78" y2="85"/><line x1="72" y1="79" x2="84" y2="79"/><line x1="74" y1="75" x2="82" y2="83"/><line x1="82" y1="75" x2="74" y2="83"/></g></svg>';
      }
      if (type === "storm") {
        return '<svg ' + common + ' aria-hidden="true"><g><ellipse cx="60" cy="42" rx="28" ry="18" fill="#eef5ff" opacity=".95"/><ellipse cx="43" cy="47" rx="17" ry="13" fill="#dfeaf7"/><ellipse cx="80" cy="48" rx="18" ry="13" fill="#dfeaf7"/></g><polygon points="58,60 48,82 61,82 54,104 76,74 63,74 72,60" fill="#ffd36d"/></svg>';
      }
      return '<svg ' + common + ' aria-hidden="true"><circle cx="60" cy="60" r="18" fill="#dfeaf7"/></svg>';
    }

    function buildHourly(times, temps) {
      els.hourlyGrid.innerHTML = "";
      const count = Math.min(times.length, temps.length);
      els.hourCount.textContent = count + " readings";
      for (let i = 0; i < count; i++) {
        const time = String(times[i]).slice(11, 16);
        const temp = Math.round(temps[i]);
        const cell = document.createElement("div");
        cell.className = "hour";
        cell.innerHTML = '<div class="hour-time">' + time + '</div><div class="hour-temp">' + temp + '°</div>';
        els.hourlyGrid.appendChild(cell);
      }
    }

    async function load() {
      setStatus("Loading weather", "Fetching conditions for the selected location and date.", true);

      const params = 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: dateStr,
        end_date: dateStr
      });

      try {
        const res = await fetch(apiPath + "?" + params.toString(), { credentials: "same-origin" });
        if (!res.ok) throw new Error("HTTP " + res.status);
        const data = await res.json();

        const daily = data && data.daily;
        const hourly = data && data.hourly;

        if (
          !daily ||
          !hourly ||
          !Array.isArray(daily.temperature_2m_max) ||
          !Array.isArray(daily.temperature_2m_min) ||
          !Array.isArray(daily.weather_code) ||
          !Array.isArray(hourly.time) ||
          !Array.isArray(hourly.temperature_2m) ||
          daily.temperature_2m_max.length < 1 ||
          daily.temperature_2m_min.length < 1 ||
          daily.weather_code.length < 1
        ) {
          throw new Error("Malformed weather data");
        }

        const max = daily.temperature_2m_max[0];
        const min = daily.temperature_2m_min[0];
        const code = daily.weather_code[0];
        const info = weatherInfo(code);

        els.maxTemp.textContent = c(max);
        els.minTemp.textContent = c(min);
        els.conditionText.textContent = info[0];
        els.iconWrap.innerHTML = iconSVG(info[1]);

        const hourTimes = [];
        const hourTemps = [];
        for (let i = 0; i < hourly.time.length; i++) {
          if (String(hourly.time[i]).slice(0, 10) === dateStr) {
            hourTimes.push(hourly.time[i]);
            hourTemps.push(hourly.temperature_2m[i]);
          }
        }

        if (!hourTimes.length) {
          throw new Error("No hourly data available for selected date");
        }

        buildHourly(hourTimes, hourTemps);
        hideStatus();
      } catch (err) {
        els.conditionText.textContent = "Weather data unavailable";
        els.maxTemp.textContent = "—";
        els.minTemp.textContent = "—";
        els.iconWrap.innerHTML = iconSVG("cloudy");
        els.hourlyGrid.innerHTML = "";
        els.hourCount.textContent = "0 readings";
        setStatus("Could not load weather", "The weather data for this location and date could not be loaded.", false);
      }
    }

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

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

bytes 总计21,815html / css / js2,145 / 8,451 / 11,219
dom 节点42dom 深度9
css 规则45含 js
brightness56.4contrast26.7
colorfulness18.4留白37.9%

该 slot 的 telemetry

prompt tokens312completion tokens6,913
total tokens7,225wall104 s
costrequest id
config.json566 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_OPENAI_OFFICIAL_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "gpt-5.4-eff-none--api--official--dev",
  "effort": "none",
  "family": "gpt",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "gpt-5.4",
  "protocol": "api",
  "served_model": "gpt-5.4-2026-03-05",
  "telemetry": {
    "completion_tokens": 39779,
    "cost_usd": null,
    "prompt_tokens": 2464,
    "total_tokens": 42243,
    "wall_ms": 403502
  },
  "transport": "openai-official-api",
  "vendor_sanction_ref": null
}
send-log4.6 KB
{
  "N": 4,
  "batch_id": "2026-07-18--official-gpt",
  "config_id": "gpt-5.4-eff-none--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T17:14:30.989721+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:13:59.303481+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-17T17:16:18.854989+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:14:34.899634+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-17T17:17:04.860218+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:16:22.902787+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-17T17:18:02.150902+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:17:08.389279+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-17T17:19:09.058975+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:18:05.734621+00:00"
        }
      ],
      "block_index": 2,
      "model_reaching_attempt_index": 0,
      "slot_index": 2,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T17:19:44.544239+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:19:12.898704+00:00"
        }
      ],
      "block_index": 2,
      "model_reaching_attempt_index": 0,
      "slot_index": 2,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T17:20:32.506758+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:19:48.044587+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T17:21:09.097802+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T17:20:36.377732+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-min"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}