gemini-3.1-pro-preview @ low · api

apilow
config
gemini-3.1-pro-preview-eff-low--api--official--dev
batch
2026-07-19--unified
transport
google-gemini-developer-api-openai-compat
protocol
api · metered
served model
gemini-3.1-pro-preview
采集于
2026年7月18日 11:54 · N=4
variant
live
slot 0 · P-q · sandboxed iframe
gemini-3.1-pro-preview @low · 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">
<title>Weather Card</title>
<style>
  :root {
    --bg-gradient: linear-gradient(135deg, #6dd5ed, #2193b0);
    --card-bg: rgba(255, 255, 255, 0.2);
    --card-border: rgba(255, 255, 255, 0.4);
    --text-color: #ffffff;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }
  body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    background: var(--bg-gradient);
    color: var(--text-color);
    width: 1280px;
    height: 800px;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
  }
  .card {
    background: var(--card-bg);
    border: 1px solid var(--card-border);
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
    border-radius: 24px;
    padding: 40px;
    width: 600px;
    box-shadow: 0 16px 40px rgba(0,0,0,0.2);
    display: flex;
    flex-direction: column;
    gap: 30px;
  }
  .header {
    text-align: center;
  }
  .location {
    font-size: 2.5rem;
    font-weight: 700;
    letter-spacing: 1px;
    margin-bottom: 8px;
    text-shadow: 0 2px 4px rgba(0,0,0,0.15);
  }
  .date {
    font-size: 1.2rem;
    font-weight: 400;
    opacity: 0.9;
  }
  .current-weather {
    display: flex;
    justify-content: space-around;
    align-items: center;
    background: rgba(0, 0, 0, 0.1);
    border-radius: 16px;
    padding: 24px;
  }
  .condition {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
  }
  .icon {
    font-size: 4rem;
    line-height: 1;
    filter: drop-shadow(0 4px 6px rgba(0,0,0,0.2));
  }
  .condition-text {
    font-size: 1.2rem;
    font-weight: 500;
  }
  .temperatures {
    display: flex;
    flex-direction: column;
    gap: 8px;
  }
  .temp-row {
    display: flex;
    align-items: baseline;
    gap: 8px;
  }
  .temp-label {
    font-size: 1.1rem;
    opacity: 0.8;
    width: 40px;
  }
  .temp-value {
    font-size: 2.2rem;
    font-weight: 600;
  }
  .hourly-container {
    display: flex;
    overflow-x: auto;
    gap: 16px;
    padding-bottom: 12px;
  }
  .hourly-container::-webkit-scrollbar {
    height: 8px;
  }
  .hourly-container::-webkit-scrollbar-track {
    background: rgba(255,255,255,0.1);
    border-radius: 4px;
  }
  .hourly-container::-webkit-scrollbar-thumb {
    background: rgba(255,255,255,0.4);
    border-radius: 4px;
  }
  .hour-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    background: rgba(255,255,255,0.15);
    padding: 12px 16px;
    border-radius: 12px;
    min-width: 80px;
    gap: 8px;
  }
  .hour-time {
    font-size: 1rem;
    opacity: 0.9;
  }
  .hour-temp {
    font-size: 1.3rem;
    font-weight: 600;
  }
  .error-message {
    text-align: center;
    font-size: 1.5rem;
    font-weight: 600;
    color: #ffcccc;
  }
  .hidden {
    display: none !important;
  }
</style>
</head>
<body>

<div class="card" id="weather-card">
  <div class="header">
    <div class="location" id="loc-name">Loading...</div>
    <div class="date" id="loc-date"></div>
  </div>
  
  <div class="current-weather hidden" id="current-weather">
    <div class="condition">
      <div class="icon" id="weather-icon"></div>
      <div class="condition-text" id="weather-text"></div>
    </div>
    <div class="temperatures">
      <div class="temp-row">
        <span class="temp-label">Max</span>
        <span class="temp-value" id="temp-max"></span>
      </div>
      <div class="temp-row">
        <span class="temp-label">Min</span>
        <span class="temp-value" id="temp-min"></span>
      </div>
    </div>
  </div>

  <div class="hourly-container hidden" id="hourly-container"></div>
  <div class="error-message hidden" id="error-message">Unable to load weather data.</div>
</div>

<script>
  function getWMO(code) {
    if (code === 0) return { text: "Clear sky", icon: "☀️" };
    if ([1, 2, 3].includes(code)) return { text: "Partly cloudy", icon: "⛅" };
    if ([45, 48].includes(code)) return { text: "Fog", icon: "🌫️" };
    if ([51, 53, 55, 56, 57].includes(code)) return { text: "Drizzle", icon: "🌧️" };
    if ([61, 63, 65, 66, 67].includes(code)) return { text: "Rain", icon: "🌧️" };
    if ([71, 73, 75, 77].includes(code)) return { text: "Snow", icon: "❄️" };
    if ([80, 81, 82].includes(code)) return { text: "Showers", icon: "🌦️" };
    if ([85, 86].includes(code)) return { text: "Snow showers", icon: "🌨️" };
    if ([95, 96, 99].includes(code)) return { text: "Thunderstorm", icon: "⛈️" };
    return { text: "Unknown", icon: "❓" };
  }

  async function init() {
    const params = new URLSearchParams(window.location.search);
    const lat = params.get('lat') || '52.52';
    const lon = params.get('lon') || '13.405';
    const name = params.get('name') || 'Berlin';
    
    const todayStr = new Date().toISOString().split('T')[0];
    const date = params.get('date') || todayStr;

    document.getElementById('loc-name').textContent = name;
    document.getElementById('loc-date').textContent = date;

    const isPast = date < todayStr;
    const endpoint = isPast ? '/api/om/archive' : '/api/om/forecast';

    const url = `${endpoint}?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}`;

    try {
      const response = await fetch(url);
      if (!response.ok) throw new Error('Network response was not ok');
      const data = await response.json();

      if (!data.daily || !data.hourly) throw new Error('Invalid data format');

      const maxTemp = data.daily.temperature_2m_max[0];
      const minTemp = data.daily.temperature_2m_min[0];
      const code = data.daily.weather_code[0];
      
      const wmo = getWMO(code);

      document.getElementById('temp-max').innerHTML = `${Math.round(maxTemp)}&deg;`;
      document.getElementById('temp-min').innerHTML = `${Math.round(minTemp)}&deg;`;
      document.getElementById('weather-icon').textContent = wmo.icon;
      document.getElementById('weather-text').textContent = wmo.text;
      
      document.getElementById('current-weather').classList.remove('hidden');

      const hourlyContainer = document.getElementById('hourly-container');
      const hourlyTemps = data.hourly.temperature_2m;
      const hourlyTimes = data.hourly.time;

      for (let i = 0; i < hourlyTemps.length; i++) {
        if (hourlyTemps[i] === null) continue;
        const timeStr = hourlyTimes[i].split('T')[1].substring(0, 5); // "HH:MM"
        const temp = Math.round(hourlyTemps[i]);

        const item = document.createElement('div');
        item.className = 'hour-item';
        
        const timeEl = document.createElement('span');
        timeEl.className = 'hour-time';
        timeEl.textContent = timeStr;
        
        const tempEl = document.createElement('span');
        tempEl.className = 'hour-temp';
        tempEl.innerHTML = `${temp}&deg;`;

        item.appendChild(timeEl);
        item.appendChild(tempEl);
        hourlyContainer.appendChild(item);
      }
      
      document.getElementById('hourly-container').classList.remove('hidden');

    } catch (error) {
      document.getElementById('current-weather').classList.add('hidden');
      document.getElementById('hourly-container').classList.add('hidden');
      document.getElementById('error-message').classList.remove('hidden');
    }
  }

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

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

bytes 总计7,561html / css / js1,035 / 2,827 / 3,699
dom 节点24dom 深度7
css 规则24含 js
brightness155.2contrast18.3
colorfulness55.0留白33.2%

该 slot 的 telemetry

prompt tokens348completion tokens2,680
total tokens3,028wall30.1 s
costrequest id
config.json614 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_GEMINI_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "gemini-3.1-pro-preview-eff-low--api--official--dev",
  "effort": "low",
  "family": "gemini",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "gemini-3.1-pro-preview",
  "protocol": "api",
  "served_model": "gemini-3.1-pro-preview",
  "telemetry": {
    "completion_tokens": 24342,
    "cost_usd": null,
    "prompt_tokens": 2748,
    "total_tokens": 27090,
    "wall_ms": 236764
  },
  "transport": "google-gemini-developer-api-openai-compat",
  "vendor_sanction_ref": null
}
send-log4.7 KB
{
  "N": 4,
  "batch_id": "2026-07-20--official-gemini",
  "config_id": "gemini-3.1-pro-preview-eff-low--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-19T15:21:24.726208+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:21:01.067358+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-19T15:21:57.423758+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:21:27.311639+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-19T15:22:15.798363+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:22:01.154679+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-19T15:22:49.484718+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:22:18.445096+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-19T15:23:23.192103+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:22:53.191832+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-19T15:23:49.409620+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:23:25.806816+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-19T15:24:50.657407+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:23:52.016001+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-19T15:25:19.097932+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T15:24:54.025170+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
    }
  }
}