mimo-v2.5-pro @ low · api

apilow
config
mimo-v2.5-pro-eff-low--api--official--dev
batch
2026-07-19--unified
transport
xiaomi-mimo-official-api
protocol
api · metered
served model
mimo-v2.5-pro
captured
Jul 18, 2026, 11:54 AM · N=4
variant
live
slot 0 · P-q · sandboxed iframe
mimo-v2.5-pro @low · api P-q slot 0 screenshot

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.

similarity neighbors

within session 2026-07-19--unified

similarity measures convergence within this session — not quality.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempmatchshown: 25.3
  • min tempmatchshown: 16
  • hourlymismatchcoverage 0/24 · 0 match · 5 mismatch · 19 not shown
  • request sidematch0 violation(s)

extractor fidelity-extractor-v1+Berlin-2026-07-15

Source — raw model output, one byte unchanged

download card.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1280,height=800">
<title>Weather Card</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
body{
  font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
  background:linear-gradient(135deg,#0f0c29,#302b63,#24243e);
  min-height:100vh;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:20px;
}
.card{
  background:rgba(255,255,255,0.08);
  backdrop-filter:blur(24px);
  -webkit-backdrop-filter:blur(24px);
  border:1px solid rgba(255,255,255,0.12);
  border-radius:28px;
  width:680px;
  max-width:100%;
  padding:48px;
  color:#fff;
  box-shadow:0 24px 80px rgba(0,0,0,0.35),0 0 0 1px rgba(255,255,255,0.05) inset;
  position:relative;
  overflow:hidden;
}
.card::before{
  content:'';position:absolute;top:-60%;left:-60%;width:200%;height:200%;
  background:radial-gradient(circle at 30% 20%,rgba(120,140,255,0.12) 0%,transparent 50%),
             radial-gradient(circle at 70% 80%,rgba(255,120,200,0.08) 0%,transparent 50%);
  pointer-events:none;z-index:0;
}
.card>*{position:relative;z-index:1}
.error-card{text-align:center;padding:60px 48px}
.error-icon{font-size:64px;margin-bottom:20px;display:block}
.error-msg{font-size:18px;font-weight:400;color:rgba(255,255,255,0.7);line-height:1.6}
.header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:32px}
.location-info h1{
  font-size:32px;font-weight:700;letter-spacing:-0.5px;
  background:linear-gradient(135deg,#fff,rgba(255,255,255,0.8));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;
  background-clip:text;
}
.location-info .date{
  font-size:15px;font-weight:400;color:rgba(255,255,255,0.55);
  margin-top:6px;letter-spacing:0.3px;
}
.weather-icon-block{text-align:center;min-width:120px}
.weather-icon{font-size:64px;line-height:1;filter:drop-shadow(0 4px 12px rgba(0,0,0,0.2))}
.weather-desc{
  font-size:13px;font-weight:500;color:rgba(255,255,255,0.7);
  margin-top:8px;text-transform:capitalize;letter-spacing:0.2px;
}
.temps{
  display:flex;align-items:flex-end;gap:32px;
  margin-bottom:36px;
  padding-bottom:36px;
  border-bottom:1px solid rgba(255,255,255,0.08);
}
.temp-big{
  font-size:72px;font-weight:200;line-height:1;letter-spacing:-3px;
}
.temp-big .unit{font-size:28px;font-weight:300;vertical-align:super;letter-spacing:0}
.temp-range{display:flex;flex-direction:column;gap:10px}
.temp-range-item{
  display:flex;align-items:center;gap:10px;
  background:rgba(255,255,255,0.06);
  padding:10px 18px;border-radius:14px;
}
.temp-range-item .label{
  font-size:11px;font-weight:600;text-transform:uppercase;
  letter-spacing:1px;color:rgba(255,255,255,0.4);width:36px;
}
.temp-range-item .value{font-size:22px;font-weight:500;letter-spacing:-0.5px}
.temp-range-item.high .value{color:#ffb347}
.temp-range-item.low .value{color:#7ec8e3}
.section-title{
  font-size:12px;font-weight:600;text-transform:uppercase;
  letter-spacing:1.5px;color:rgba(255,255,255,0.35);margin-bottom:20px;
}
.hourly-chart{
  display:flex;align-items:flex-end;gap:4px;
  height:180px;padding:0 4px;
  position:relative;
}
.hour-col{
  flex:1;display:flex;flex-direction:column;align-items:center;
  gap:8px;height:100%;
  justify-content:flex-end;
}
.bar-wrapper{
  flex:1;width:100%;display:flex;align-items:flex-end;justify-content:center;
  position:relative;
}
.bar{
  width:100%;max-width:28px;border-radius:8px 8px 4px 4px;
  transition:all 0.3s ease;
  position:relative;cursor:default;
  min-height:4px;
}
.bar:hover{
  filter:brightness(1.3);
  transform:scaleX(1.15);
}
.bar-tooltip{
  position:absolute;top:-28px;left:50%;transform:translateX(-50%);
  background:rgba(0,0,0,0.75);color:#fff;
  font-size:11px;font-weight:600;padding:3px 8px;
  border-radius:6px;white-space:nowrap;
  opacity:0;pointer-events:none;transition:opacity 0.2s;
  backdrop-filter:blur(8px);
}
.bar:hover .bar-tooltip{opacity:1}
.hour-label{
  font-size:10px;font-weight:500;color:rgba(255,255,255,0.35);
  letter-spacing:0.2px;
  min-height:16px;
}
.y-axis{
  position:absolute;left:-40px;top:0;bottom:0;
  display:flex;flex-direction:column;justify-content:space-between;
  pointer-events:none;
}
.y-tick{font-size:10px;color:rgba(255,255,255,0.25);font-weight:400}
.chart-area{position:relative;margin-left:44px;flex:1}
.grid-line{
  position:absolute;left:0;right:0;
  border-top:1px dashed rgba(255,255,255,0.06);
  pointer-events:none;
}
@media(max-width:720px){
  .card{padding:32px 24px;width:100%}
  .temp-big{font-size:56px}
  .hourly-chart{height:140px}
  .header{flex-direction:column;gap:16px}
  .temps{flex-direction:column;gap:16px;align-items:flex-start}
}
</style>
</head>
<body>
<div class="card" id="card"></div>

<script>
(function(){
  const params = new URLSearchParams(window.location.search);
  const lat = parseFloat(params.get('lat')) || 52.52;
  const lon = parseFloat(params.get('lon')) || 13.405;
  const name = params.get('name') || 'Berlin';

  let dateParam = params.get('date');
  let dateStr;
  if(dateParam && /^\d{4}-\d{2}-\d{2}$/.test(dateParam)){
    dateStr = dateParam;
  } else {
    const now = new Date();
    dateStr = now.toISOString().slice(0,10);
  }

  const todayStr = new Date().toISOString().slice(0,10);
  const isPast = dateStr < todayStr;
  const basePath = isPast ? '/api/om/archive' : '/api/om/forecast';

  const url = basePath + '?' + new URLSearchParams({
    latitude: lat,
    longitude: lon,
    daily: 'temperature_2m_max,temperature_2m_min,weather_code',
    hourly: 'temperature_2m',
    timezone: 'UTC',
    temperature_unit: 'celsius',
    start_date: dateStr,
    end_date: dateStr
  }).toString();

  const WMO = {
    0:['Clear sky','☀️'],1:['Mainly clear','🌤️'],2:['Partly cloudy','⛅'],3:['Overcast','☁️'],
    45:['Fog','🌫️'],48:['Rime fog','🌫️'],
    51:['Light drizzle','🌦️'],53:['Moderate drizzle','🌦️'],55:['Dense drizzle','🌧️'],
    56:['Freezing drizzle','🌧️'],57:['Dense freezing drizzle','🌧️'],
    61:['Slight rain','🌧️'],63:['Moderate rain','🌧️'],65:['Heavy rain','🌧️'],
    66:['Freezing rain','🌧️'],67:['Heavy freezing rain','🌧️'],
    71:['Slight snow','🌨️'],73:['Moderate snow','🌨️'],75:['Heavy snow','❄️'],
    77:['Snow grains','🌨️'],
    80:['Slight showers','🌦️'],81:['Moderate showers','🌧️'],82:['Violent showers','⛈️'],
    85:['Slight snow showers','🌨️'],86:['Heavy snow showers','❄️'],
    95:['Thunderstorm','⛈️'],96:['Thunderstorm w/ hail','⛈️'],99:['Thunderstorm w/ heavy hail','⛈️']
  };

  const card = document.getElementById('card');

  function formatDate(d){
    const dt = new Date(d+'T00:00:00Z');
    const opts = {weekday:'long',year:'numeric',month:'long',day:'numeric',timeZone:'UTC'};
    return dt.toLocaleDateString('en-US',opts);
  }

  function showError(msg){
    card.innerHTML = '<div class="error-card"><span class="error-icon">⚠️</span><p class="error-msg">'+msg+'</p></div>';
  }

  function getBarColor(temp,minT,maxT){
    const range = maxT - minT || 1;
    const t = (temp - minT)/range;
    const r = Math.round(120 + t * 135);
    const g = Math.round(180 - t * 40);
    const b = Math.round(255 - t * 180);
    return `rgb(${r},${g},${b})`;
  }

  function render(data){
    const daily = data.daily;
    const hourly = data.hourly;
    if(!daily || !daily.weather_code || daily.weather_code.length === 0){
      showError('No weather data available for <strong>'+name+'</strong> on <strong>'+formatDate(dateStr)+'</strong>.');
      return;
    }

    const maxT = daily.temperature_2m_max[0];
    const minT = daily.temperature_2m_min[0];
    const code = daily.weather_code[0];
    const wmo = WMO[code] || ['Unknown','❓'];
    const cond = wmo[0];
    const icon = wmo[1];

    const dateLabel = formatDate(dateStr);

    // find hourly temps for this date
    const hourlyTemps = [];
    const hourlyTimes = hourly.time || [];
    for(let i=0;i<hourlyTimes.length;i++){
      if(hourlyTimes[i].startsWith(dateStr)){
        hourlyTemps.push(hourly.temperature_2m[i]);
      }
    }

    // Build hourly chart
    let chartHTML = '';
    if(hourlyTemps.length > 0){
      const allMin = Math.min(...hourlyTemps);
      const allMax = Math.max(...hourlyTemps);
      const range = allMax - allMin || 1;
      const chartHeight = 130; // px for bar area

      // Compute grid ticks
      const tickCount = 4;
      const ticks = [];
      for(let i=0;i<=tickCount;i++){
        ticks.push(Math.round(allMin + (range * i / tickCount)));
      }

      let barsHTML = '';
      for(let h=0;h<hourlyTemps.length;h++){
        const t = hourlyTemps[h];
        const pct = ((t - allMin)/range) * 0.85 + 0.15;
        const barH = pct * chartHeight;
        const color = getBarColor(t, allMin, allMax);
        const showLabel = h % 3 === 0;
        barsHTML += '<div class="hour-col">' +
          '<div class="bar-wrapper">' +
            '<div class="bar" style="height:'+barH+'px;background:linear-gradient(to top,rgba(0,0,0,0.3),'+color+')">' +
              '<span class="bar-tooltip">'+t.toFixed(1)+'°</span>' +
            '</div>' +
          '</div>' +
          '<span class="hour-label">'+(showLabel ? String(h).padStart(2,'0')+':00' : '')+'</span>' +
        '</div>';
      }

      let gridHTML = '';
      for(let i=0;i<=tickCount;i++){
        const pct = (i/tickCount)*100;
        gridHTML += '<div class="grid-line" style="bottom:'+pct+'%"></div>';
      }

      let yAxisHTML = '';
      for(let i=ticks.length-1;i>=0;i--){
        yAxisHTML += '<span class="y-tick">'+ticks[i]+'°</span>';
      }

      chartHTML = '<div class="section-title">Hourly Temperatures</div>' +
        '<div class="hourly-chart">' +
          '<div class="y-axis">'+yAxisHTML+'</div>' +
          '<div class="chart-area">'+gridHTML+barsHTML+'</div>' +
        '</div>';
    }

    card.innerHTML =
      '<div class="header">' +
        '<div class="location-info">' +
          '<h1>'+name+'</h1>' +
          '<div class="date">'+dateLabel+'</div>' +
        '</div>' +
        '<div class="weather-icon-block">' +
          '<span class="weather-icon">'+icon+'</span>' +
          '<div class="weather-desc">'+cond+'</div>' +
        '</div>' +
      '</div>' +
      '<div class="temps">' +
        '<div class="temp-big">'+Math.round(maxT)+'<span class="unit">°C</span></div>' +
        '<div class="temp-range">' +
          '<div class="temp-range-item high">' +
            '<span class="label">High</span>' +
            '<span class="value">'+maxT.toFixed(1)+'°C</span>' +
          '</div>' +
          '<div class="temp-range-item low">' +
            '<span class="label">Low</span>' +
            '<span class="value">'+minT.toFixed(1)+'°C</span>' +
          '</div>' +
        '</div>' +
      '</div>' +
      chartHTML;

    // Dynamic background based on weather
    const b = document.body;
    if(code <= 1){
      b.style.background = 'linear-gradient(135deg,#1a1a2e,#16213e,#0f3460)';
    } else if(code <= 3){
      b.style.background = 'linear-gradient(135deg,#2d3436,#636e72,#b2bec3)';
    } else if(code >= 61 || (code >= 80)){
      b.style.background = 'linear-gradient(135deg,#0c0c1d,#1a1a3e,#2d2d5e)';
    } else if(code >= 71 && code <= 77){
      b.style.background = 'linear-gradient(135deg,#dfe6e9,#b2bec3,#636e72)';
    }
  }

  fetch(url)
    .then(function(r){
      if(!r.ok) throw new Error('HTTP '+r.status);
      return r.json();
    })
    .then(render)
    .catch(function(){
      showError('Could not load weather data for <strong>'+name+'</strong>. Please check that the API is available and try again.');
    });
})();
</script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total11,920html / css / js246 / 4,678 / 6,996
dom nodes9dom depth3
css rules42js presentyes
brightness52.5contrast19.5
colorfulness21.4whitespace58.4%

This slot's telemetry

prompt tokens566completion tokens4,007
total tokens4,573wall60.6 s
costrequest id
config.json566 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_MIMO_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "mimo-v2.5-pro-eff-low--api--official--dev",
  "effort": "low",
  "family": "mimo",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "mimo-v2.5-pro",
  "protocol": "api",
  "served_model": "mimo-v2.5-pro",
  "telemetry": {
    "completion_tokens": 32881,
    "cost_usd": null,
    "prompt_tokens": 4496,
    "total_tokens": 37377,
    "wall_ms": 513889
  },
  "transport": "xiaomi-mimo-official-api",
  "vendor_sanction_ref": null
}
send-log4.7 KB
{
  "N": 4,
  "batch_id": "2026-07-19--official-mimo",
  "config_id": "mimo-v2.5-pro-eff-low--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-19T07:33:05.454359+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:32:25.007447+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-19T07:34:09.751382+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:33:09.173302+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-19T07:35:42.754668+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:34:14.147021+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-19T07:36:29.369105+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:35:46.642990+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-19T07:37:20.850106+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:36:33.094167+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-19T07:39:43.430565+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:37:24.699280+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-19T07:40:43.190309+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:39:48.699618+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-19T07:41:27.587849+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:40:47.027777+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
    }
  }
}