minimax-m2.5 · go
go
- config
- minimax-m2.5--opencode-go--dev
- batch
- 2026-07-19--unified
- transport
- opencode-go-gateway
- protocol
- api · plan
- served model
- minimax-m2.5
- 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
minimax-m2.1 · kiro0.69qwen3.5-plus · go0.61claude-haiku-4-5 @max · CC0.59claude-fable-5 @xhigh · CC0.58claude-haiku-4-5 @xhigh · CC0.58farthest
claude-opus-4-6 @high · kiro0.38qwen3.7-max · qoder0.39mimo-v2.5-free · api0.39claude-opus-4-6 @max · kiro0.39qwen3.7-plus · go0.41within 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
- min tempmatchshown: 16
- 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=device-width, initial-scale=1.0">
<title>Weather Card</title>
<style>
:root {
--primary: #667eea;
--secondary: #764ba2;
--bg: #f0f2f5;
--card-bg: #ffffff;
--text-primary: #2d3748;
--text-secondary: #718096;
--max-color: #e53e3e;
--min-color: #3182ce;
--accent: #f56565;
}
*,*::before,*::after{box-sizing:border-box}
body{
margin:0;
padding:0;
background:var(--bg);
font-family:"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
color:var(--text-primary);
display:flex;
justify-content:center;
align-items:center;
min-height:100vh;
}
.weather-card{
background:var(--card-bg);
border-radius:16px;
box-shadow:0 10px 40px rgba(0,0,0,0.1);
width:800px;
max-width:100%;
overflow:hidden;
}
.header{
background:linear-gradient(135deg,var(--primary) 0%,var(--secondary) 100%);
padding:32px;
text-align:center;
color:#fff;
}
.location-name{
font-size:2.5rem;
font-weight:700;
margin-bottom:8px;
line-height:1.1;
}
.date{
font-size:1.25rem;
opacity:0.9;
}
.content{
padding:32px;
}
.loading,.error{
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
min-height:300px;
font-size:1.25rem;
color:var(--text-secondary);
}
.error{
color:var(--accent);
display:none;
}
.spinner{
width:40px;
height:40px;
border:4px solid #e2e8f0;
border-top-color:var(--primary);
border-radius:50%;
animation:spin 1s linear infinite;
margin-bottom:16px;
}
@keyframes spin{to{transform:rotate(360deg);}}
.temperature-display{
display:flex;
justify-content:center;
align-items:center;
gap:32px;
margin-bottom:24px;
}
.temp-box{
display:flex;
flex-direction:column;
align-items:center;
}
.temp-label{
font-size:0.875rem;
text-transform:uppercase;
letter-spacing:0.05em;
color:var(--text-secondary);
margin-bottom:4px;
}
.temp-value{
font-size:4rem;
font-weight:700;
line-height:1;
}
.max-temp .temp-value{color:var(--max-color);}
.min-temp .temp-value{color:var(--min-color);}
.weather-condition{
display:flex;
align-items:center;
justify-content:center;
gap:12px;
font-size:1.5rem;
font-weight:600;
color:var(--text-primary);
margin-bottom:32px;
}
.weather-icon{
width:48px;
height:48px;
color:var(--secondary);
}
.hourly-section{
background:var(--bg);
border-radius:12px;
padding:24px;
}
.hourly-title{
font-size:1.125rem;
font-weight:600;
margin-bottom:16px;
color:var(--text-primary);
}
.hourly-chart{
width:100%;
height:200px;
display:block;
}
</style>
</head>
<body>
<div class="weather-card">
<div class="header">
<div class="location-name" id="locationName">Loading...</div>
<div class="date" id="dateDisplay"></div>
</div>
<div class="content">
<div id="loading" class="loading">
<div class="spinner"></div>
<span>Loading weather data...</span>
</div>
<div id="error" class="error">Unable to load weather data.</div>
<div id="content" style="display:none;">
<div class="temperature-display">
<div class="temp-box max-temp">
<span class="temp-label">High</span>
<span class="temp-value" id="maxTemp">--</span>
</div>
<div class="temp-box min-temp">
<span class="temp-label">Low</span>
<span class="temp-value" id="minTemp">--</span>
</div>
</div>
<div class="weather-condition">
<span class="weather-icon" id="weatherIcon"></span>
<span id="weatherCondition">--</span>
</div>
<div class="hourly-section">
<div class="hourly-title">Hourly Temperature</div>
<canvas id="hourlyChart" class="hourly-chart"></canvas>
</div>
</div>
</div>
</div>
<script>
(function(){
const weatherConditions={
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:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',
1:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/><circle cx="12" cy="12" r="4"/></svg>',
2:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"/></svg>',
3:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"/></svg>',
45:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"/><path d="M16 17H8M12 13v8"/></svg>',
48:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"/><path d="M16 17H8M12 13v8"/></svg>',
51:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
53:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
55:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
61:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
63:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
65:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
71:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 6 16.18"/><path d="M16 11l-4 4l-4-4"/></svg>',
73:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 6 16.18"/><path d="M16 11l-4 4l-4-4"/></svg>',
75:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 6 16.18"/><path d="M16 11l-4 4l-4-4"/></svg>',
77:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 6 16.18"/><path d="M16 11l-4 4l-4-4"/></svg>',
80:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
81:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
82:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 13V21M8 13V21M12 15V23M20 16.5A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 6 16h2"/></svg>',
85:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 6 16.18"/><path d="M16 11l-4 4l-4-4"/></svg>',
86:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 6 16.18"/><path d="M16 11l-4 4l-4-4"/></svg>',
95:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>',
96:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>',
99:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>'
};
function getCondition(code){
return weatherConditions[code]||'Unknown';
}
function getIcon(code){
return weatherIcons[code]||weatherIcons[3];
}
function formatDate(dateStr){
const d=new Date(dateStr+'T00:00:00Z');
return d.toLocaleDateString('en-US',{weekday:'long',year:'numeric',month:'long',day:'numeric',timeZone:'UTC'});
}
function drawChart(canvas,hours,temps){
const ctx=canvas.getContext('2d');
const dpr=window.devicePixelRatio||1;
const width=canvas.offsetWidth;
const height=200;
canvas.width=width*dpr;
canvas.height=height*dpr;
ctx.scale(dpr,dpr);
const padding={top:20,right:20,bottom:40,left:40};
const chartWidth=width-padding.left-padding.right;
const chartHeight=height-padding.top-padding.bottom;
const minTemp=Math.min(...temps);
const maxTemp=Math.max(...temps);
const range=maxTemp-minTemp||1;
const xStep=chartWidth/(temps.length-1);
const yScale=(t)=>padding.top+chartHeight-((t-minTemp)/range)*chartHeight;
// grid
ctx.strokeStyle='#e2e8f0';
ctx.lineWidth=1;
const yTicks=5;
for(let i=0;i<=yTicks;i++){
const y=padding.top+(chartHeight/yTicks)*i;
ctx.beginPath();
ctx.moveTo(padding.left,y);
ctx.lineTo(width-padding.right,y);
ctx.stroke();
const label=Math.round(maxTemp-(maxTemp-minTemp)*(i/yTicks));
ctx.fillStyle='#718096';
ctx.font='12px sans-serif';
ctx.textAlign='right';
ctx.fillText(label+'°',padding.left-5,y+4);
}
// line
ctx.beginPath();
ctx.strokeStyle='#667eea';
ctx.lineWidth=2;
for(let i=0;i<temps.length;i++){
const x=padding.left+i*xStep;
const y=yScale(temps[i]);
if(i===0)ctx.moveTo(x,y);
else ctx.lineTo(x,y);
}
ctx.stroke();
// fill
const gradient=ctx.createLinearGradient(0,padding.top,0,height-padding.bottom);
gradient.addColorStop(0,'rgba(102,126,234,0.3)');
gradient.addColorStop(1,'rgba(102,126,234,0)');
ctx.fillStyle=gradient;
ctx.beginPath();
for(let i=0;i<temps.length;i++){
const x=padding.left+i*xStep;
const y=yScale(temps[i]);
if(i===0)ctx.moveTo(x,y);
else ctx.lineTo(x,y);
}
ctx.lineTo(padding.left+(temps.length-1)*xStep,height-padding.bottom);
ctx.lineTo(padding.left,height-padding.bottom);
ctx.closePath();
ctx.fill();
// points
ctx.fillStyle='#667eea';
for(let i=0;i<temps.length;i++){
const x=padding.left+i*xStep;
const y=yScale(temps[i]);
ctx.beginPath();
ctx.arc(x,y,3,0,Math.PI*2);
ctx.fill();
}
// x labels
ctx.fillStyle='#718096';
ctx.font='11px sans-serif';
ctx.textAlign='center';
for(let i=0;i<temps.length;i++){
if(i%3===0){
const x=padding.left+i*xStep;
const h=new Date(hours[i]).getUTCHours();
ctx.fillText(h+':00',x,height-padding.bottom+20);
}
}
}
async function init(){
const loading=document.getElementById('loading');
const errorEl=document.getElementById('error');
const content=document.getElementById('content');
const locationNameEl=document.getElementById('locationName');
const dateDisplayEl=document.getElementById('dateDisplay');
const maxTempEl=document.getElementById('maxTemp');
const minTempEl=document.getElementById('minTemp');
const weatherConditionEl=document.getElementById('weatherCondition');
const weatherIconEl=document.getElementById('weatherIcon');
const chartCanvas=document.getElementById('hourlyChart');
try{
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 dateStr=params.get('date');
if(!dateStr){
dateStr=new Date().toISOString().split('T')[0];
}
const today=new Date().toISOString().split('T')[0];
const baseURL=dateStr<=today?'/api/om/archive':'/api/om/forecast';
const url=`${baseURL}?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 response=await fetch(url);
if(!response.ok) throw new Error('API error');
const data=await response.json();
const daily=data.daily;
const dailyIndex=daily.time.indexOf(dateStr);
if(dailyIndex===-1) throw new Error('Daily data not found');
const maxTemp=parseFloat(daily.temperature_2m_max[dailyIndex]);
const minTemp=parseFloat(daily.temperature_2m_min[dailyIndex]);
const weatherCode=parseInt(daily.weather_code[dailyIndex],10);
const hourly=data.hourly;
const hourlyTimes=hourly.time;
const hourlyTemps=hourly.temperature_2m;
const dayHours=[],dayTemps=[];
for(let i=0;i<hourlyTimes.length;i++){
if(hourlyTimes[i].startsWith(dateStr)){
dayHours.push(hourlyTimes[i]);
dayTemps.push(parseFloat(hourlyTemps[i]));
}
}
locationNameEl.textContent=name;
dateDisplayEl.textContent=formatDate(dateStr);
maxTempEl.textContent=Math.round(maxTemp)+'°';
minTempEl.textContent=Math.round(minTemp)+'°';
weatherConditionEl.textContent=getCondition(weatherCode);
weatherIconEl.innerHTML=getIcon(weatherCode);
loading.style.display='none';
content.style.display='block';
drawChart(chartCanvas,dayHours,dayTemps);
}catch(e){
loading.style.display='none';
errorEl.style.display='flex';
console.error(e);
}
}
document.addEventListener('DOMContentLoaded',init);
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 14,774 | html / css / js | 1,389 / 2,444 / 10,941 |
|---|---|---|---|
| dom nodes | 31 | dom depth | 8 |
| css rules | 24 | js present | yes |
| brightness | 228.5 | contrast | 40.1 |
| colorfulness | 33.5 | whitespace | 88.1% |
This slot's telemetry
| prompt tokens | 346 | completion tokens | 14,872 |
|---|---|---|---|
| total tokens | 15,218 | wall | 181.8 s |
| cost | — | request id | — |
config.json555 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_OPENCODE_KEY",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "minimax-m2.5--opencode-go--dev",
"effort": null,
"family": "minimax",
"m": {
"min": 2,
"q": 2
},
"model_id": "minimax-m2.5",
"protocol": "api",
"served_model": "minimax-m2.5",
"telemetry": {
"completion_tokens": 32851,
"cost_usd": null,
"prompt_tokens": 1368,
"total_tokens": 34219,
"wall_ms": 408847
},
"transport": "opencode-go-gateway",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-18--dev-go-extra",
"config_id": "minimax-m2.5--opencode-go--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-18T00:19:31.790370+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T00:16:29.947170+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:20:52.600867+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T00:19:34.559643+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:21:45.132226+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T00:20:55.372814+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:23:27.098699+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T00:21:47.888902+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
}
}
}