mimo-v2.5-pro @ medium · api

apimedium
config
mimo-v2.5-pro-eff-medium--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 @medium · 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
  • hourlynot-foundcoverage · 0 match · 0 mismatch · 24 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>
  *{margin:0;padding:0;box-sizing:border-box}
  html,body{width:100%;height:100%;font-family:'Segoe UI',system-ui,-apple-system,sans-serif;overflow:hidden}
  body{display:flex;align-items:center;justify-content:center;background:#e8ecf1}
  .card{width:900px;border-radius:28px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.18),0 4px 16px rgba(0,0,0,.08);animation:fadeUp .7s cubic-bezier(.22,1,.36,1) both}
  @keyframes fadeUp{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}
  .hero{padding:40px 48px 32px;color:#fff;position:relative;overflow:hidden}
  .hero::before{content:'';position:absolute;top:-40%;right:-10%;width:340px;height:340px;border-radius:50%;background:rgba(255,255,255,.12);pointer-events:none}
  .hero::after{content:'';position:absolute;bottom:-30%;left:-5%;width:260px;height:260px;border-radius:50%;background:rgba(255,255,255,.07);pointer-events:none}
  .hero-top{display:flex;justify-content:space-between;align-items:flex-start;position:relative;z-index:1}
  .location-name{font-size:26px;font-weight:700;letter-spacing:.5px;text-shadow:0 2px 8px rgba(0,0,0,.15)}
  .date-str{font-size:14px;font-weight:500;opacity:.88;margin-top:4px}
  .weather-icon{font-size:64px;line-height:1;filter:drop-shadow(0 4px 12px rgba(0,0,0,.15))}
  .hero-main{display:flex;align-items:flex-end;gap:32px;margin-top:28px;position:relative;z-index:1}
  .temp-now{font-size:96px;font-weight:200;line-height:1;letter-spacing:-4px}
  .temp-now sup{font-size:38px;font-weight:400;letter-spacing:0;vertical-align:super}
  .temp-range{display:flex;flex-direction:column;gap:4px;padding-bottom:10px}
  .temp-range span{font-size:17px;font-weight:500;display:flex;align-items:center;gap:6px}
  .temp-range .arrow-up{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:7px solid rgba(255,255,255,.7)}
  .temp-range .arrow-down{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:7px solid rgba(255,255,255,.7)}
  .condition-label{font-size:18px;font-weight:500;opacity:.92;margin-top:16px;position:relative;z-index:1}
  .bottom{background:#fff;padding:28px 48px 36px}
  .bottom-title{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:#8b95a5;margin-bottom:20px}
  .chart-wrap{position:relative;height:180px}
  canvas{display:block;width:100%;height:100%}
  .hour-labels{display:flex;justify-content:space-between;padding-top:8px}
  .hour-labels span{font-size:11px;color:#9aa3b2;font-weight:500;width:calc(100% / 24);text-align:center}
  .error-msg{text-align:center;padding:100px 40px;color:#5a6577;font-size:20px}
  .error-msg .err-icon{font-size:48px;margin-bottom:16px;display:block}
</style>
</head>
<body>
<div class="card" id="card"></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';
  let dateStr = params.get('date');
  const today = new Date().toISOString().slice(0,10);
  if(!dateStr || !/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) dateStr = today;

  const isPast = dateStr < today;
  const endpoint = isPast ? '/api/om/archive' : '/api/om/forecast';
  const url = endpoint + '?' + 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
  });

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

  function weatherGradient(code){
    if(code<=1)return'linear-gradient(135deg,#4facfe,#00f2fe)';
    if(code<=3)return'linear-gradient(135deg,#667eea,#764ba2)';
    if(code<=48)return'linear-gradient(135deg,#8e9eab,#bdc3c7)';
    if(code<=57)return'linear-gradient(135deg,#606c88,#3f4c6b)';
    if(code<=67)return'linear-gradient(135deg,#4b6cb7,#182848)';
    if(code<=77)return'linear-gradient(135deg,#e6dada,#274046)';
    if(code<=82)return'linear-gradient(135deg,#4b6cb7,#182848)';
    if(code<=86)return'linear-gradient(135deg,#e6dada,#274046)';
    return'linear-gradient(135deg,#232526,#414345)';
  }

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

  fetch(url).then(r=>{
    if(!r.ok) throw new Error('HTTP '+r.status);
    return r.json();
  }).then(data=>{
    const daily = data.daily;
    if(!daily||!daily.time||!daily.time.length) throw new Error('No data');
    const idx = 0;
    const maxT = daily.temperature_2m_max[idx];
    const minT = daily.temperature_2m_min[idx];
    const code = daily.weather_code[idx];
    const desc = wmoDesc[code]||'Unknown';
    const emoji = wmoEmoji[code]||'🌡️';
    const hourlyTemps = data.hourly.temperature_2m;

    const dateObj = new Date(dateStr+'T00:00:00Z');
    const dateDisplay = dateObj.toLocaleDateString('en-US',{weekday:'long',year:'numeric',month:'long',day:'numeric',timeZone:'UTC'});

    // current display temp: use average of max/min as "representative"
    const currentTemp = Math.round((maxT+minT)/2);

    card.innerHTML = `
      <div class="hero" style="background:${weatherGradient(code)}">
        <div class="hero-top">
          <div>
            <div class="location-name">${escHtml(name)}</div>
            <div class="date-str">${escHtml(dateDisplay)}</div>
          </div>
          <div class="weather-icon">${emoji}</div>
        </div>
        <div class="hero-main">
          <div class="temp-now">${currentTemp}<sup>°C</sup></div>
          <div class="temp-range">
            <span><span class="arrow-up"></span>${maxT}°</span>
            <span><span class="arrow-down"></span>${minT}°</span>
          </div>
        </div>
        <div class="condition-label">${escHtml(desc)}</div>
      </div>
      <div class="bottom">
        <div class="bottom-title">Hourly Temperature</div>
        <div class="chart-wrap"><canvas id="chart"></canvas></div>
        <div class="hour-labels" id="hourLabels"></div>
      </div>
    `;

    drawChart(hourlyTemps);
  }).catch(()=>{
    card.innerHTML='<div class="error-msg"><span class="err-icon">⚠️</span>Weather data could not be loaded.<br>Please check the location or try again later.</div>';
  });

  function escHtml(s){return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;')}

  function drawChart(temps){
    const canvas = document.getElementById('chart');
    const rect = canvas.parentElement.getBoundingClientRect();
    const dpr = window.devicePixelRatio||1;
    canvas.width = rect.width*dpr;
    canvas.height = rect.height*dpr;
    canvas.style.width = rect.width+'px';
    canvas.style.height = rect.height+'px';
    const ctx = canvas.getContext('2d');
    ctx.scale(dpr,dpr);

    const W = rect.width, H = rect.height;
    const padT = 16, padB = 16, padL = 8, padR = 8;
    const chartW = W-padL-padR, chartH = H-padT-padB;

    const vals = temps.slice(0,24);
    const mn = Math.floor(Math.min(...vals))-1;
    const mx = Math.ceil(Math.max(...vals))+1;
    const range = mx-mn||1;

    const xs = vals.map((_,i)=> padL + (i/(vals.length-1))*chartW);
    const ys = vals.map(v=> padT + (1-(v-mn)/range)*chartH );

    // gradient fill
    const grad = ctx.createLinearGradient(0,padT,0,H-padB);
    grad.addColorStop(0,'rgba(79,172,254,.25)');
    grad.addColorStop(1,'rgba(79,172,254,.02)');

    ctx.beginPath();
    ctx.moveTo(xs[0],ys[0]);
    for(let i=1;i<xs.length;i++){
      const cpx1=(xs[i-1]+xs[i])/2;
      ctx.bezierCurveTo(cpx1,ys[i-1],cpx1,ys[i],xs[i],ys[i]);
    }
    ctx.lineTo(xs[xs.length-1],H-padB);
    ctx.lineTo(xs[0],H-padB);
    ctx.closePath();
    ctx.fillStyle=grad;
    ctx.fill();

    // line
    ctx.beginPath();
    ctx.moveTo(xs[0],ys[0]);
    for(let i=1;i<xs.length;i++){
      const cpx1=(xs[i-1]+xs[i])/2;
      ctx.bezierCurveTo(cpx1,ys[i-1],cpx1,ys[i],xs[i],ys[i]);
    }
    ctx.strokeStyle='#4facfe';
    ctx.lineWidth=2.5;
    ctx.lineJoin='round';
    ctx.stroke();

    // dots & labels
    ctx.font='500 10px system-ui,sans-serif';
    ctx.textAlign='center';
    for(let i=0;i<vals.length;i++){
      // dot
      ctx.beginPath();
      ctx.arc(xs[i],ys[i],3,0,Math.PI*2);
      ctx.fillStyle='#4facfe';
      ctx.fill();
      ctx.strokeStyle='#fff';
      ctx.lineWidth=1.5;
      ctx.stroke();
      // label
      ctx.fillStyle='#5a6577';
      ctx.fillText(vals[i]+'°',xs[i],ys[i]-10);
    }

    // hour labels
    const labels = document.getElementById('hourLabels');
    labels.innerHTML='';
    for(let i=0;i<24;i++){
      const s = document.createElement('span');
      s.textContent = (i<10?'0':'')+i+':00';
      labels.appendChild(s);
    }
  }
})();
</script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total10,015html / css / js246 / 2,748 / 7,021
dom nodes9dom depth3
css rules30js presentyes
brightness202.1contrast62.1
colorfulness18.5whitespace73.8%

This slot's telemetry

prompt tokens566completion tokens3,637
total tokens4,203wall57.6 s
costrequest id
config.json572 B
{
  "N": 4,
  "auth": {
    "credential_ref": "WCB_MIMO_KEY",
    "method": "api-key"
  },
  "billing": "metered",
  "config_id": "mimo-v2.5-pro-eff-medium--api--official--dev",
  "effort": "medium",
  "family": "mimo",
  "m": {
    "min": 4,
    "q": 4
  },
  "model_id": "mimo-v2.5-pro",
  "protocol": "api",
  "served_model": "mimo-v2.5-pro",
  "telemetry": {
    "completion_tokens": 56295,
    "cost_usd": null,
    "prompt_tokens": 4496,
    "total_tokens": 60791,
    "wall_ms": 933326
  },
  "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-medium--api--official--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-19T07:42:21.491158+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:41:31.391187+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:43:23.003702+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:42:25.444210+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:44:26.697232+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:43:26.389905+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:45:08.911055+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:44:30.599632+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:46:17.553998+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:45:13.261705+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:46:59.411827+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:46:21.710825+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:47:45.004636+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:47:03.051855+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-19T07:57:32.185568+00:00",
          "http_status": 200,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-19T07:47:49.070164+00:00"
        }
      ],
      "block_index": 3,
      "model_reaching_attempt_index": 0,
      "slot_index": 3,
      "terminal_state": "valid",
      "variant": "P-q"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}