deepseek-v4-flash-0731 @ none · api

apinone
config
deepseek-v4-flash-0731-eff-none--api--official--dev
batch
2026-07-19--unified
transport
deepseek-official-api
protocol
api · metered
served model
deepseek-v4-flash
采集于
2026年7月18日 11:54 · N=4
variant
live
slot 0 · P-q · sandboxed iframe
deepseek-v4-flash-0731 @none · api P-q slot 0 截图

输出带 markdown 围栏 — 模型把 HTML 包在代码围栏里返回,提取时已剥离;记录在此以便追溯。

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

similarity 邻居

限于 session 2026-07-19--unified

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

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

  • namematch
  • conditionmatch
  • datematch
  • max tempmismatch展示值:17.4
  • min tempmismatch展示值:17.2
  • hourlymatchcoverage 22/24 · 22 命中 · 0 不符 · 2 未展示
  • 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.0, maximum-scale=1.0, user-scalable=yes">
  <title>skyline · weather card</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    body {
      font-family: system-ui, -apple-system, 'Inter', 'Segoe UI', Roboto, sans-serif;
      background: linear-gradient(145deg, #0b1020 0%, #1c2333 100%);
      min-height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 24px;
    }

    .weather-card {
      background: rgba(255, 255, 255, 0.08);
      backdrop-filter: blur(16px);
      -webkit-backdrop-filter: blur(16px);
      border-radius: 48px;
      box-shadow: 0 30px 50px rgba(0, 0, 0, 0.6), inset 0 1px 2px rgba(255, 255, 255, 0.08);
      border: 1px solid rgba(255, 255, 255, 0.1);
      width: 100%;
      max-width: 780px;
      padding: 40px 42px;
      color: #f0f4fa;
      transition: all 0.2s ease;
    }

    .card-header {
      display: flex;
      flex-direction: column;
      gap: 6px;
      margin-bottom: 40px;
    }

    .location-line {
      display: flex;
      align-items: center;
      gap: 12px;
      font-size: 1.9rem;
      font-weight: 500;
      letter-spacing: -0.02em;
    }

    .location-name {
      background: rgba(255, 255, 255, 0.06);
      padding: 8px 20px;
      border-radius: 100px;
      border: 1px solid rgba(255, 255, 255, 0.1);
      backdrop-filter: blur(4px);
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
      color: white;
      font-weight: 450;
      display: inline-block;
    }

    .date-badge {
      font-size: 1rem;
      font-weight: 400;
      color: #b9c6dd;
      background: rgba(0, 0, 0, 0.2);
      padding: 6px 18px;
      border-radius: 40px;
      width: fit-content;
      border: 1px solid rgba(255, 255, 255, 0.1);
      letter-spacing: 0.3px;
      backdrop-filter: blur(4px);
    }

    .temp-summary {
      display: flex;
      align-items: center;
      justify-content: flex-start;
      gap: 32px;
      margin: 32px 0 30px;
      flex-wrap: wrap;
    }

    .temp-block {
      display: flex;
      align-items: baseline;
      background: rgba(0, 0, 0, 0.18);
      padding: 10px 24px 10px 22px;
      border-radius: 100px;
      border: 1px solid rgba(255, 255, 255, 0.1);
      box-shadow: 0 10px 20px -8px rgba(0,0,0,0.6);
    }

    .temp-value {
      font-size: 3.2rem;
      font-weight: 600;
      letter-spacing: -0.02em;
      margin-right: 6px;
    }

    .temp-unit {
      font-size: 1.5rem;
      font-weight: 300;
      color: #cbd5e9;
    }

    .temp-label {
      font-size: 0.9rem;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      font-weight: 400;
      color: #9aaecb;
      margin-left: 10px;
    }

    .condition-badge {
      background: rgba(120, 160, 255, 0.1);
      border: 1px solid rgba(140, 180, 255, 0.2);
      border-radius: 120px;
      padding: 10px 26px;
      font-size: 1.05rem;
      font-weight: 450;
      color: #d8e2ff;
      display: flex;
      align-items: center;
      gap: 10px;
      backdrop-filter: blur(6px);
    }

    .condition-icon {
      font-size: 1.7rem;
      line-height: 1;
      filter: drop-shadow(0 4px 6px rgba(0,0,0,0.4));
    }

    .divider {
      height: 1px;
      background: linear-gradient(90deg, rgba(255,255,255,0.2), rgba(255,255,255,0.05));
      margin: 30px 0 28px;
      border-radius: 10px;
    }

    .hourly-title {
      font-size: 0.9rem;
      text-transform: uppercase;
      letter-spacing: 0.12em;
      font-weight: 450;
      color: #b7c6e0;
      margin-bottom: 18px;
      display: flex;
      align-items: center;
      gap: 8px;
    }

    .hourly-grid {
      display: grid;
      grid-template-columns: repeat(12, 1fr);
      gap: 10px 8px;
      background: rgba(0, 0, 0, 0.15);
      padding: 16px 14px;
      border-radius: 28px;
      border: 1px solid rgba(255,255,255,0.06);
      backdrop-filter: blur(4px);
    }

    .hour-item {
      display: flex;
      flex-direction: column;
      align-items: center;
      background: rgba(255,255,255,0.03);
      padding: 8px 0 6px;
      border-radius: 18px;
      transition: background 0.2s;
    }

    .hour-item:hover {
      background: rgba(255,255,255,0.07);
    }

    .hour-time {
      font-size: 0.68rem;
      font-weight: 500;
      color: #98abc8;
      letter-spacing: 0.04em;
      margin-bottom: 5px;
    }

    .hour-temp {
      font-size: 1.06rem;
      font-weight: 600;
      color: #f0f5ff;
      background: rgba(255,255,255,0.03);
      padding: 3px 8px;
      border-radius: 40px;
      border: 1px solid rgba(255,255,255,0.06);
    }

    .error-message {
      background: rgba(255, 80, 80, 0.08);
      border: 1px solid rgba(255, 100, 100, 0.2);
      padding: 20px 40px;
      border-radius: 60px;
      color: #ffc9c9;
      font-weight: 450;
      font-size: 1.1rem;
      text-align: center;
      backdrop-filter: blur(8px);
      letter-spacing: 0.2px;
    }

    .loading {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 12px;
      color: #ccd8f0;
      font-weight: 400;
      padding: 40px 0;
    }

    .spinner {
      width: 36px;
      height: 36px;
      border: 3px solid rgba(255,255,255,0.2);
      border-top-color: #b0c8ff;
      border-radius: 50%;
      animation: spin 1s linear infinite;
    }

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

    @media (max-width: 600px) {
      .weather-card { padding: 28px 22px; }
      .temp-summary { gap: 15px; }
      .temp-value { font-size: 2.6rem; }
      .hourly-grid { grid-template-columns: repeat(6, 1fr); gap: 12px; }
    }
  </style>
</head>
<body>
  <div class="weather-card" id="weatherCard">
    <!-- populated by JS -->
  </div>

  <script>
    (function() {
      const card = document.getElementById('weatherCard');
      
      // ---------- helper: read URL params ----------
      function getParam(name, fallback) {
        const params = new URLSearchParams(window.location.search);
        const val = params.get(name);
        return val === null || val.trim() === '' ? fallback : val.trim();
      }

      // ---------- defaults ----------
      const now = new Date();
      const defaultDate = now.toISOString().slice(0, 10); // UTC today
      
      const lat = getParam('lat', '52.52');
      const lon = getParam('lon', '13.405');
      const locName = getParam('name', 'Berlin');
      const dateStr = getParam('date', defaultDate);

      // validate date format (YYYY-MM-DD) – basic check
      const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
      let validDate = dateRegex.test(dateStr) ? dateStr : defaultDate;

      // ---------- build API endpoint ----------
      // decide forecast vs archive endpoint based on date vs today (UTC)
      const todayUTC = new Date();
      todayUTC.setUTCHours(0,0,0,0);
      const targetUTC = new Date(validDate + 'T00:00:00Z');
      
      let endpoint;
      if (targetUTC >= todayUTC) {
        // Use forecast (includes today and future)
        endpoint = '/api/om/forecast';
      } else {
        // Use archive for past dates
        endpoint = '/api/om/archive';
      }

      // common query params (both endpoints identically used)
      const params = {
        latitude: lat,
        longitude: lon,
        daily: 'temperature_2m_max,temperature_2m_min,weather_code',
        hourly: 'temperature_2m',
        timezone: 'UTC',
        temperature_unit: 'celsius',
        start_date: validDate,
        end_date: validDate
      };

      // build query string
      const queryString = new URLSearchParams(params).toString();
      const url = `${endpoint}?${queryString}`;

      // ---------- weather condition mapping (WMO) ----------
      function mapWeatherCode(code) {
        if (code === 0) return { label: 'Clear', icon: '☀️' };
        if (code === 1) return { label: 'Mainly clear', icon: '🌤️' };
        if (code === 2) return { label: 'Partly cloudy', icon: '⛅' };
        if (code === 3) return { label: 'Overcast', icon: '☁️' };
        if (code === 45 || code === 48) return { label: 'Fog', icon: '🌫️' };
        if (code >= 51 && code <= 57) return { label: 'Drizzle', icon: '🌦️' };
        if (code >= 61 && code <= 67) return { label: 'Rain', icon: '🌧️' };
        if (code >= 71 && code <= 77) return { label: 'Snow', icon: '🌨️' };
        if (code >= 80 && code <= 82) return { label: 'Showers', icon: '🌧️' };
        if (code >= 85 && code <= 86) return { label: 'Snow showers', icon: '❄️' };
        if (code >= 95) return { label: 'Thunderstorm', icon: '⛈️' };
        return { label: 'Unknown', icon: '🌡️' };
      }

      // ---------- render UI ----------
      function renderError(message) {
        card.innerHTML = `
          <div class="header" style="margin-bottom: 20px;">
            <div class="location-line"><span class="location-name">⚠️ ${locName}</span></div>
            <div class="date-badge">${validDate}</div>
          </div>
          <div class="error-message">${message}</div>
        `;
      }

      function renderWeather(data) {
        try {
          const daily = data.daily;
          const hourly = data.hourly;
          
          if (!daily || !hourly) throw new Error('malformed data');

          // daily arrays
          const maxT = daily.temperature_2m_max[0];
          const minT = daily.temperature_2m_min[0];
          const wCode = daily.weather_code[0];

          const condition = mapWeatherCode(wCode);

          // Hourly for that day (all 24 hours if available, we take first 24)
          const hourlyTemps = hourly.temperature_2m;
          const times = hourly.time || [];

          // Filter only hours that match the date
          const hourData = [];
          for (let i = 0; i < times.length; i++) {
            if (times[i].startsWith(validDate)) {
              hourData.push({
                time: times[i].slice(11, 16), // HH:MM
                temp: Math.round(hourlyTemps[i] * 10) / 10
              });
            }
            if (hourData.length === 24) break; // max 24
          }

          // if no hourly due to api, fallback to empty
          let hourlyHtml = '';
          if (hourData.length === 0) {
            hourlyHtml = `<div style="color: rgba(255,255,255,0.5); font-size: 0.95rem; padding: 12px;">hourly data not available</div>`;
          } else {
            // take first 24, but we'll slice if more (unlikely)
            const first24 = hourData.slice(0, 24);
            hourlyHtml = first24.map(h => `
              <div class="hour-item">
                <div class="hour-time">${h.time}</div>
                <div class="hour-temp">${h.temp.toFixed(1)}°</div>
              </div>
            `).join('');
          }

          // format date nicely e.g. "Fri, Aug 11"
          const displayDate = new Date(validDate + 'T00:00:00Z');
          const dateString = displayDate.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' });

          card.innerHTML = `
            <div class="card-header">
              <div class="location-line">
                <span class="location-name">📍 ${locName}</span>
              </div>
              <div class="date-badge">${dateString} · ${validDate}</div>
            </div>

            <div class="temp-summary">
              <div class="temp-block">
                <span class="temp-value">${Math.round(minT)}</span>
                <span class="temp-unit">°C</span>
                <span class="temp-label">min</span>
              </div>
              <div class="temp-block">
                <span class="temp-value">${Math.round(maxT)}</span>
                <span class="temp-unit">°C</span>
                <span class="temp-label">max</span>
              </div>
              <div class="condition-badge">
                <span class="condition-icon">${condition.icon}</span>
                <span>${condition.label}</span>
              </div>
            </div>

            <div class="divider"></div>

            <div class="hourly-title">
              <span>HOURLY</span>
              <span style="opacity:0.6; font-weight:300;">· 24h</span>
            </div>
            <div class="hourly-grid">
              ${hourlyHtml || `<div style="grid-column:1/-1; text-align:center;">no hourly data</div>`}
            </div>
          `;
        } catch (e) {
          renderError('We could not parse the weather data.');
        }
      }

      // ---------- fetch data ----------
      card.innerHTML = `
        <div class="loading">
          <div class="spinner"></div>
          <div>loading weather ...</div>
        </div>
      `;

      fetch(url, {
        method: 'GET',
        headers: { 'Accept': 'application/json' },
        credentials: 'same-origin'
      })
      .then(response => {
        if (!response.ok) {
          throw new Error(`HTTP ${response.status}`);
        }
        return response.json();
      })
      .then(data => {
        // check if we have required fields
        if (data && data.daily && data.hourly) {
          renderWeather(data);
        } else {
          renderError('Incomplete weather data received.');
        }
      })
      .catch(err => {
        console.error('Fetch error:', err);
        renderError('Weather data unavailable — could not load.');
      });

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

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

bytes 总计13,602html / css / js370 / 5,554 / 7,678
dom 节点9dom 深度3
css 规则31含 js
brightness36.6contrast19.8
colorfulness8.7留白87.0%

该 slot 的 telemetry

prompt tokens321completion tokens3,959
total tokens4,280wall22.8 s
costrequest id
config.json595 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_DEEPSEEK_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "deepseek-v4-flash-0731-eff-none--api--official--dev",
  "effort": "none",
  "family": "deepseek",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "deepseek-v4-flash-0731",
  "protocol": "api",
  "served_model": "deepseek-v4-flash",
  "telemetry": {
    "completion_tokens": 28958,
    "cost_usd": null,
    "prompt_tokens": 2536,
    "total_tokens": 31494,
    "wall_ms": 167550
  },
  "transport": "deepseek-official-api",
  "vendor_sanction_ref": null
}
send-log4.7 KB
{
  "N": 4,
  "batch_id": "2026-07-31--official-deepseek-flash-0731",
  "config_id": "deepseek-v4-flash-0731-eff-none--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-31T06:28:15.413744+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:27:54.452215+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-31T06:28:43.953082+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:28:21.176288+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-31T06:29:15.724713+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:28:47.168910+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-31T06:29:38.303830+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:29:20.024440+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-31T06:29:55.568696+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:29:41.163603+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-31T06:30:22.919200+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:29:58.882736+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-31T06:30:48.000462+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:30:26.890651+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-31T06:31:08.799093+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-31T06:30:51.356554+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
    }
  }
}