mimo-v2.5-pro · go
go
- config
- mimo-v2.5-pro--opencode-go--dev
- batch
- 2026-07-19--unified
- transport
- opencode-go-gateway
- protocol
- api · plan
- served model
- mimo-v2.5-pro
- captured
- Jul 18, 2026, 11:54 AM · N=2
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
qwen3.7-max · qoder0.70claude-opus-4-6 @medium · kiro0.67claude-opus-4-8 @medium · kiro0.67qwen3.7-plus · opencode0.67qwen3.8-max-preview · qoder0.67farthest
gpt-5.5 @medium · codex-oauth0.39minimax-m2.7 · go0.42gpt-5.6-sol @high · codex-oauth0.42gpt-5.6-luna @medium · codex-oauth0.45claude-sonnet-5 @medium · kiro0.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 tempambiguousshown: 17max-equals-min
- min tempambiguousshown: 17max-equals-min
- hourlyambiguouscoverage · 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}
body{
width:1280px;height:800px;
font-family:'Segoe UI',system-ui,-apple-system,sans-serif;
background:linear-gradient(135deg,#0f0c29,#302b63,#24243e);
display:flex;align-items:center;justify-content:center;
color:#fff;overflow:hidden;
}
.card{
width:820px;min-height:520px;
background:rgba(255,255,255,0.07);
backdrop-filter:blur(24px);
border:1px solid rgba(255,255,255,0.12);
border-radius:28px;
padding:48px 52px;
box-shadow:0 32px 64px rgba(0,0,0,0.35),inset 0 1px 0 rgba(255,255,255,0.08);
position:relative;
overflow:hidden;
animation:fadeUp .7s cubic-bezier(.22,1,.36,1) both;
}
@keyframes fadeUp{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:none}}
.card::before{
content:'';position:absolute;top:-80px;right:-80px;
width:280px;height:280px;
background:radial-gradient(circle,rgba(139,92,246,0.25),transparent 70%);
pointer-events:none;
}
.card::after{
content:'';position:absolute;bottom:-60px;left:-60px;
width:220px;height:220px;
background:radial-gradient(circle,rgba(56,189,248,0.18),transparent 70%);
pointer-events:none;
}
.error-card{
display:flex;flex-direction:column;align-items:center;justify-content:center;
min-height:300px;text-align:center;
}
.error-card .error-icon{font-size:64px;margin-bottom:20px;opacity:.7}
.error-card h2{font-size:22px;font-weight:600;margin-bottom:8px}
.error-card p{font-size:15px;color:rgba(255,255,255,0.55)}
.header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:10px;position:relative;z-index:1}
.location{font-size:32px;font-weight:700;letter-spacing:-.5px}
.date-display{
font-size:15px;color:rgba(255,255,255,0.55);margin-top:4px;
font-weight:400;letter-spacing:.3px;
}
.weather-icon-block{text-align:center;position:relative;z-index:1}
.weather-emoji{font-size:80px;line-height:1;filter:drop-shadow(0 8px 24px rgba(0,0,0,0.3))}
.weather-desc{
font-size:15px;color:rgba(255,255,255,0.6);margin-top:8px;
font-weight:500;text-transform:capitalize;letter-spacing:.2px;
}
.temp-section{
display:flex;align-items:flex-end;gap:40px;
margin:28px 0 12px;position:relative;z-index:1;
}
.temp-block{text-align:center}
.temp-label{font-size:12px;text-transform:uppercase;letter-spacing:1.5px;color:rgba(255,255,255,0.4);margin-bottom:6px;font-weight:600}
.temp-value{font-size:56px;font-weight:300;letter-spacing:-2px;line-height:1}
.temp-unit{font-size:20px;vertical-align:super;font-weight:400;color:rgba(255,255,255,0.5)}
.temp-max .temp-value{color:#fbbf24}
.temp-min .temp-value{color:#60a5fa}
.divider{
width:1px;height:70px;
background:linear-gradient(180deg,transparent,rgba(255,255,255,0.15),transparent);
align-self:center;
}
.current-temp-block .temp-value{font-size:72px;font-weight:200}
.hourly-section{margin-top:24px;position:relative;z-index:1}
.hourly-title{
font-size:13px;text-transform:uppercase;letter-spacing:1.8px;
color:rgba(255,255,255,0.35);margin-bottom:16px;font-weight:600;
}
.hourly-scroll{
display:flex;gap:8px;
overflow-x:auto;padding-bottom:8px;
scrollbar-width:thin;scrollbar-color:rgba(255,255,255,0.15) transparent;
}
.hourly-scroll::-webkit-scrollbar{height:4px}
.hourly-scroll::-webkit-scrollbar-track{background:transparent}
.hourly-scroll::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.15);border-radius:2px}
.hour-item{
flex-shrink:0;
background:rgba(255,255,255,0.04);
border:1px solid rgba(255,255,255,0.06);
border-radius:14px;
padding:14px 16px;
text-align:center;
min-width:72px;
transition:background .2s,border-color .2s,transform .2s;
cursor:default;
}
.hour-item:hover{
background:rgba(255,255,255,0.1);
border-color:rgba(255,255,255,0.15);
transform:translateY(-2px);
}
.hour-time{font-size:12px;color:rgba(255,255,255,0.4);margin-bottom:8px;font-weight:600;letter-spacing:.3px}
.hour-temp{font-size:18px;font-weight:600;letter-spacing:-.3px}
.hour-bar-wrap{margin-top:8px;height:4px;border-radius:2px;background:rgba(255,255,255,0.06);overflow:hidden}
.hour-bar{height:100%;border-radius:2px;transition:width .6s cubic-bezier(.22,1,.36,1)}
.loading{
display:flex;flex-direction:column;align-items:center;justify-content:center;
min-height:300px;
}
.spinner{
width:48px;height:48px;
border:3px solid rgba(255,255,255,0.1);
border-top-color:rgba(139,92,246,0.8);
border-radius:50%;
animation:spin .8s linear infinite;
margin-bottom:20px;
}
@keyframes spin{to{transform:rotate(360deg)}}
.loading p{color:rgba(255,255,255,0.4);font-size:14px;font-weight:500}
</style>
</head>
<body>
<div class="card" id="card">
<div class="loading" id="loading">
<div class="spinner"></div>
<p>Fetching weather data…</p>
</div>
</div>
<script>
(function(){
const params = new URLSearchParams(location.search);
const lat = params.get('lat') || 52.52;
const lon = params.get('lon') || 13.405;
const name = params.get('name') || 'Berlin';
const now = new Date();
const todayUTC = now.toISOString().slice(0,10);
const dateStr = params.get('date') || todayUTC;
const dateObj = new Date(dateStr + 'T12:00:00Z');
const isPast = dateObj < new Date(todayUTC + 'T00:00:00Z');
const endpoint = isPast ? '/api/om/archive' : '/api/om/forecast';
const qs = 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 url = endpoint + '?' + qs.toString();
const weatherCodes = {
0:'Clear sky',1:'Mainly clear',2:'Partly cloudy',3:'Overcast',
45:'Fog',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 snow',73:'Moderate snow',75:'Heavy snow',
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 weatherIcons = {
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 formatDisplayDate(ds){
const d = new Date(ds+'T12:00:00Z');
return d.toLocaleDateString('en-US',{weekday:'long',year:'numeric',month:'long',day:'numeric',timeZone:'UTC'});
}
function showError(msg){
document.getElementById('card').innerHTML=
'<div class="error-card"><div class="error-icon">⚠️</div><h2>Weather Data Unavailable</h2><p>'+msg+'</p></div>';
}
fetch(url).then(function(r){
if(!r.ok) throw new Error('API returned '+r.status);
return r.json();
}).then(function(data){
const card = document.getElementById('card');
const daily = data.daily;
const hourly = data.hourly;
if(!daily || !daily.time || daily.time.length===0) throw new Error('No daily data');
const maxT = daily.temperature_2m_max[0];
const minT = daily.temperature_2m_min[0];
const wmo = daily.weather_code[0];
const desc = weatherCodes[wmo] || 'Unknown';
const icon = weatherIcons[wmo] || '🌡️';
let currentTemp = null;
if(hourly && hourly.temperature_2m){
const hourTimes = hourly.time;
const hourTemps = hourly.temperature_2m;
// find closest hour to now if today
let bestIdx = 0;
if(dateStr === todayUTC){
const nowHour = now.getUTCHours();
let bestDiff = 99;
for(let i=0;i<hourTimes.length;i++){
const h = parseInt(hourTimes[i].slice(11,13));
if(Math.abs(h-nowHour)<bestDiff){bestDiff=Math.abs(h-nowHour);bestIdx=i;}
}
}
currentTemp = hourTemps[bestIdx];
}
// Build hourly items
let hourlyHTML = '';
if(hourly && hourly.time){
const tArr = hourly.temperature_2m;
const allTemps = tArr.filter(function(v){return v!==null});
const tMin = Math.min.apply(null, allTemps);
const tMax = Math.max.apply(null, allTemps);
const tRange = tMax - tMin || 1;
for(let i=0;i<hourly.time.length;i++){
const t = hourly.time[i];
const h = t.slice(11,16);
const temp = tArr[i];
if(temp===null||temp===undefined) continue;
const pct = ((temp - tMin)/tRange)*100;
const barColor = temp >= (tMin+tMax)/2
? 'linear-gradient(90deg,#f59e0b,#ef4444)'
: 'linear-gradient(90deg,#3b82f6,#6366f1)';
hourlyHTML +=
'<div class="hour-item">' +
'<div class="hour-time">'+h+'</div>' +
'<div class="hour-temp">'+Math.round(temp)+'°</div>' +
'<div class="hour-bar-wrap"><div class="hour-bar" style="width:'+pct+'%;background:'+barColor+'"></div></div>' +
'</div>';
}
}
let mainTempBlock = '';
if(currentTemp!==null){
mainTempBlock =
'<div class="temp-block current-temp-block">' +
'<div class="temp-label">Now</div>' +
'<div class="temp-value">'+Math.round(currentTemp)+'<span class="temp-unit">°C</span></div>' +
'</div>' +
'<div class="divider"></div>';
}
card.innerHTML =
'<div class="header">' +
'<div>' +
'<div class="location">'+name+'</div>' +
'<div class="date-display">'+formatDisplayDate(dateStr)+'</div>' +
'</div>' +
'<div class="weather-icon-block">' +
'<div class="weather-emoji">'+icon+'</div>' +
'<div class="weather-desc">'+desc+'</div>' +
'</div>' +
'</div>' +
'<div class="temp-section">' +
mainTempBlock +
'<div class="temp-block temp-max">' +
'<div class="temp-label">High</div>' +
'<div class="temp-value">'+Math.round(maxT)+'<span class="temp-unit">°C</span></div>' +
'</div>' +
'<div class="divider"></div>' +
'<div class="temp-block temp-min">' +
'<div class="temp-label">Low</div>' +
'<div class="temp-value">'+Math.round(minT)+'<span class="temp-unit">°C</span></div>' +
'</div>' +
'</div>' +
'<div class="hourly-section">' +
'<div class="hourly-title">Hourly Temperatures</div>' +
'<div class="hourly-scroll">'+hourlyHTML+'</div>' +
'</div>';
}).catch(function(err){
showError(err.message || 'Could not load weather data.');
});
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 11,304 | html / css / js | 361 / 4,807 / 6,136 |
|---|---|---|---|
| dom nodes | 12 | dom depth | 5 |
| css rules | 44 | js present | yes |
| brightness | 50.7 | contrast | 18.3 |
| colorfulness | 22.0 | whitespace | 79.7% |
This slot's telemetry
| prompt tokens | 566 | completion tokens | 3,840 |
|---|---|---|---|
| total tokens | 4,406 | wall | 48.5 s |
| cost | — | request id | — |
config.json549 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_OPENCODE_KEY",
"method": "oauth"
},
"billing": "plan",
"config_id": "mimo-v2.5-pro--opencode-go--dev",
"effort": null,
"family": "mimo",
"m": {
"min": 2,
"q": 2
},
"model_id": "mimo-v2.5-pro",
"protocol": "api",
"served_model": "mimo-v2.5-pro",
"telemetry": {
"completion_tokens": 16074,
"cost_usd": null,
"prompt_tokens": 2248,
"total_tokens": 18322,
"wall_ms": 204289
},
"transport": "opencode-go-gateway",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-19--go-requeue2",
"config_id": "mimo-v2.5-pro--opencode-go--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-18T20:48:15.339038+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T20:47:10.982152+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-18T20:49:07.523757+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T20:48:18.985706+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-18T20:50:09.907511+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T20:49:11.428769+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-18T20:50:46.518973+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T20:50:13.603776+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}