hy3-free · api

api
config
hy3-free--zen-free--dev
batch
2026-07-19--unified
transport
opencode-zen-free-tier
protocol
api · plan
served model
tencent/hy3:free
采集于
2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe
hy3-free · api P-q slot 0 截图

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

similarity 邻居

限于 session 2026-07-19--unified

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

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

  • namematch
  • conditionmatch
  • datematch
  • max tempmatch展示值:25.3
  • 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>
  * { box-sizing: border-box; margin: 0; padding: 0; }
  body {
    font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
    background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
    width: 1280px;
    height: 800px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
  }
  .card {
    width: 960px;
    height: 640px;
    background: rgba(255, 255, 255, 0.08);
    backdrop-filter: blur(20px);
    border: 1px solid rgba(255,255,255,0.18);
    border-radius: 24px;
    padding: 48px 56px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto 1fr;
    gap: 32px;
    box-shadow: 0 20px 60px rgba(0,0,0,0.35);
  }
  .header {
    grid-column: 1 / 3;
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
  }
  .loc {
    font-size: 42px;
    font-weight: 600;
    letter-spacing: 0.5px;
  }
  .date {
    font-size: 20px;
    opacity: 0.85;
    margin-top: 6px;
  }
  .summary {
    display: flex;
    flex-direction: column;
    justify-content: center;
  }
  .weather-icon {
    font-size: 96px;
    line-height: 1;
    margin-bottom: 12px;
  }
  .condition {
    font-size: 28px;
    font-weight: 500;
  }
  .temps {
    margin-top: 24px;
    font-size: 22px;
  }
  .temps span { display:inline-block; margin-right: 28px; }
  .max b { color: #ffd166; }
  .min b { color: #8ecae6; }
  .hourly {
    background: rgba(0,0,0,0.15);
    border-radius: 16px;
    padding: 20px;
    overflow-y: auto;
  }
  .hourly h3 {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 16px;
    opacity: 0.9;
  }
  .hour-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px 16px;
  }
  .hour {
    display: flex;
    justify-content: space-between;
    font-size: 15px;
    padding: 6px 10px;
    background: rgba(255,255,255,0.06);
    border-radius: 8px;
  }
  .hour .t { font-weight: 600; }
  .error {
    grid-column: 1 / 3;
    text-align: center;
    font-size: 24px;
    color: #ffb3b3;
    align-self: center;
  }
  ::-webkit-scrollbar { width: 8px; }
  ::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 4px; }
</style>
</head>
<body>
<div class="card" id="card">
  <div class="header">
    <div>
      <div class="loc" id="loc">—</div>
      <div class="date" id="date">—</div>
    </div>
  </div>
  <div class="summary">
    <div class="weather-icon" id="icon">⛅</div>
    <div class="condition" id="cond">—</div>
    <div class="temps">
      <span class="max">Max: <b id="tmax">—</b></span>
      <span class="min">Min: <b id="tmin">—</b></span>
    </div>
  </div>
  <div class="hourly">
    <h3>Hourly Temperature (UTC)</h3>
    <div class="hour-grid" id="hours"></div>
  </div>
</div>

<script>
(function(){
  const params = new URLSearchParams(location.search);
  const lat = parseFloat(params.get('lat')) || 52.52;
  const lon = parseFloat(params.get('lon')) || 13.405;
  const name = params.get('name') || 'Berlin';
  const todayUTC = new Date().toISOString().slice(0,10);
  const date = params.get('date') || todayUTC;

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

  const isPast = date < todayUTC;
  const base = isPast ? '/api/om/archive' : '/api/om/forecast';
  const url = `${base}?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}`;

  const codeMap = {
    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:['Snow showers','❄️'],
    95:['Thunderstorm','⛈️'],96:['Thunderstorm','⛈️'],99:['Thunderstorm','⛈️']
  };

  fetch(url)
    .then(r => { if(!r.ok) throw new Error('HTTP '+r.status); return r.json(); })
    .then(data => {
      const dIdx = data.daily.time.indexOf(date);
      if(dIdx === -1) throw new Error('Date not found');
      const tmax = data.daily.temperature_2m_max[dIdx];
      const tmin = data.daily.temperature_2m_min[dIdx];
      const code = data.daily.weather_code[dIdx];
      const [cond, icon] = codeMap[code] || ['Unknown','❓'];

      document.getElementById('tmax').textContent = tmax + '°C';
      document.getElementById('tmin').textContent = tmin + '°C';
      document.getElementById('cond').textContent = cond;
      document.getElementById('icon').textContent = icon;

      const hours = data.hourly.time;
      const temps = data.hourly.temperature_2m;
      const hg = document.getElementById('hours');
      for(let i=0;i<hours.length;i++){
        const hh = hours[i].split('T')[1];
        const div = document.createElement('div');
        div.className = 'hour';
        div.innerHTML = `<span>${hh}</span><span class="t">${temps[i]}°</span>`;
        hg.appendChild(div);
      }
    })
    .catch(err => {
      const card = document.getElementById('card');
      card.innerHTML = `<div class="error">Weather data could not be loaded.<br>${err.message}</div>`;
    });
})();
</script>
</body>
</html>

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

bytes 总计5,866html / css / js725 / 2,187 / 2,954
dom 节点23dom 深度7
css 规则21含 js
brightness76.9contrast18.2
colorfulness35.6留白64.6%

该 slot 的 telemetry

prompt tokens323completion tokens1,968
total tokens2,291wall25.9 s
costrequest id
config.json539 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_ZEN_KEY",
    "method": "api-key"
  },
  "billing": "plan",
  "config_id": "hy3-free--zen-free--dev",
  "effort": null,
  "family": "hunyuan",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "hy3-free",
  "protocol": "api",
  "served_model": "tencent/hy3:free",
  "telemetry": {
    "completion_tokens": 7018,
    "cost_usd": null,
    "prompt_tokens": 1276,
    "total_tokens": 8294,
    "wall_ms": 70437
  },
  "transport": "opencode-zen-free-tier",
  "vendor_sanction_ref": null
}
send-log2.4 KB
{
  "N": 2,
  "batch_id": "2026-07-18--dev-zen-free",
  "config_id": "hy3-free--zen-free--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-18T00:54:37.445276+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T00:54:11.591415+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-18T00:54:50.758325+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T00:54:40.869969+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-18T00:55:02.854992+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T00:54:53.548609+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-18T00:55:31.003695+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-18T00:55:05.612687+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
    }
  }
}