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

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
nearest
claude-sonnet-4-6 @medium · kiro0.66kimi-k2.6 · opencode0.63kimi-k3 @low · api0.63claude-opus-4-6 @low · kiro0.61claude-opus-4-6 @max · kiro0.61farthest
gpt-5.5 @medium · codex-oauth0.42minimax-m2.7 · go0.45gpt-5.6-luna @medium · codex-oauth0.45gpt-5.4-mini @high · codex-oauth0.45glm-5.2 · opencode0.45within 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,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"')}
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 total | 10,015 | html / css / js | 246 / 2,748 / 7,021 |
|---|---|---|---|
| dom nodes | 9 | dom depth | 3 |
| css rules | 30 | js present | yes |
| brightness | 202.1 | contrast | 62.1 |
| colorfulness | 18.5 | whitespace | 73.8% |
This slot's telemetry
| prompt tokens | 566 | completion tokens | 3,637 |
|---|---|---|---|
| total tokens | 4,203 | wall | 57.6 s |
| cost | — | request 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
}
}
}