mimo-v2.5-pro · opencode
opencode
- config
- mimo-v2.5-pro--cli--opencode--dev
- batch
- 2026-07-19--unified
- transport
- opencode-cli-isolated-xdg-go-subscription
- protocol
- cli · plan
- served model
- mimo-v2.5-pro
- 采集于
- 2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居
最近
claude-opus-4-7 @high · kiro0.63gemini-3.5-flash @medium · api0.63claude-sonnet-5 @high · CC0.61deepseek-v4-pro · go0.61gpt-5.4 @high · api0.61最远
gpt-5.6-luna @none · codex-oauth0.42kimi-k3 @disabled · api0.44gpt-5.6-luna @medium · codex-oauth0.44minimax-m2.1 · kiro0.45kimi-k3 @low · api0.45限于 session 2026-07-19--unified
similarity 衡量本 session 内的趋同程度 —— 不是质量。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempambiguous展示值:25.3max-equals-min
- min tempambiguous展示值:25.3max-equals-min
- hourlyambiguouscoverage · 0 命中 · 0 不符 · 24 未展示
- request sidematch0 处违规
extractor fidelity-extractor-v1+Berlin-2026-07-15
源码 —— 原始模型输出,一字节未改
下载 card.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1280">
<title>Weather Card</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
--bg:#0f172a;--card:#1e293b;--card-alt:#334155;
--text:#f1f5f9;--text-dim:#94a3b8;--accent:#38bdf8;--accent2:#818cf8;
--warm:#fb923c;--cool:#22d3ee;--radius:16px;
font-family:'Segoe UI',system-ui,-apple-system,sans-serif;
}
html,body{height:100%}
body{
background:var(--bg);color:var(--text);
display:flex;align-items:center;justify-content:center;
min-height:100vh;padding:24px;
}
.card{
background:var(--card);border-radius:var(--radius);
box-shadow:0 25px 60px rgba(0,0,0,.45);
width:100%;max-width:1080px;overflow:hidden;
display:grid;grid-template-columns:1fr 1fr;
}
.hero{
padding:48px 40px;display:flex;flex-direction:column;justify-content:center;
background:linear-gradient(135deg,#1e3a5f 0%,#0f172a 100%);
position:relative;overflow:hidden;
}
.hero::before{
content:'';position:absolute;top:-60px;right:-60px;
width:260px;height:260px;border-radius:50%;
background:radial-gradient(circle,rgba(56,189,248,.18),transparent 70%);
pointer-events:none;
}
.hero .location{font-size:1.15rem;color:var(--accent);font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px}
.hero .date{font-size:.95rem;color:var(--text-dim);margin-bottom:28px}
.hero .temp-row{display:flex;align-items:baseline;gap:20px;margin-bottom:12px}
.hero .temp-hi{font-size:4rem;font-weight:700;line-height:1;letter-spacing:-.03em}
.hero .temp-lo{font-size:1.8rem;font-weight:400;color:var(--text-dim)}
.hero .condition{font-size:1.15rem;color:var(--text-dim);display:flex;align-items:center;gap:8px}
.hero .weather-icon{font-size:2.6rem;margin-bottom:16px}
.details{padding:40px 36px;display:flex;flex-direction:column;gap:24px;overflow:hidden}
.details h3{font-size:.8rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);font-weight:600}
.hourly{flex:1;overflow-y:auto;min-height:0}
.hourly::-webkit-scrollbar{width:4px}
.hourly::-webkit-scrollbar-thumb{background:var(--card-alt);border-radius:4px}
.hour-row{
display:flex;align-items:center;gap:12px;
padding:9px 12px;border-radius:10px;
transition:background .15s;
}
.hour-row:hover{background:var(--card-alt)}
.hour-time{width:52px;font-size:.85rem;color:var(--text-dim);font-variant-numeric:tabular-nums;flex-shrink:0}
.bar-track{flex:1;height:8px;background:var(--card-alt);border-radius:4px;overflow:hidden;position:relative}
.bar-fill{height:100%;border-radius:4px;transition:width .4s ease}
.hour-val{width:46px;text-align:right;font-size:.85rem;font-weight:600;font-variant-numeric:tabular-nums;flex-shrink:0}
.legend{display:flex;gap:16px;flex-wrap:wrap}
.legend-item{display:flex;align-items:center;gap:6px;font-size:.78rem;color:var(--text-dim)}
.legend-dot{width:8px;height:8px;border-radius:50%}
.error-state{
grid-column:1/-1;padding:80px 40px;text-align:center;
}
.error-state .icon{font-size:3rem;margin-bottom:16px}
.error-state .msg{font-size:1.1rem;color:var(--text-dim)}
@media(max-width:720px){
.card{grid-template-columns:1fr}
.hero{padding:32px 24px}
.details{padding:24px}
}
</style>
</head>
<body>
<div class="card" id="app"></div>
<script>
(function(){
const $=s=>document.querySelector(s);
const app=$('#app');
const p=new URLSearchParams(location.search);
const lat=parseFloat(p.get('lat'))||52.52;
const lon=parseFloat(p.get('lon'))||13.405;
const name=p.get('name')||'Berlin';
const dateStr=p.get('date')||new Date().toISOString().slice(0,10);
const isPast=(()=>{const t=new Date();t.setUTCHours(0,0,0,0);return new Date(dateStr)<t})();
const endpoint=isPast?'/api/om/archive':'/api/om/forecast';
const params=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 codes={
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 icons={
0:'☀️',1:'🌤️',2:'⛅',3:'☁️',
45:'🌫️',48:'🌫️',51:'🌦️',53:'🌦️',55:'🌧️',
61:'🌧️',63:'🌧️',65:'🌧️',71:'🌨️',73:'🌨️',75:'❄️',
80:'🌦️',81:'🌧️',82:'⛈️',95:'⛈️',96:'⛈️',99:'⛈️'
};
function icon(c){return icons[c]||'🌡️'}
function condition(c){return codes[c]||'Unknown'}
function renderError(msg){
app.innerHTML=`<div class="error-state"><div class="icon">⚠️</div><div class="msg">${msg}</div></div>`;
}
function render(data){
const d=data.daily;
if(!d||!d.time||!d.time.length){renderError('No data available for this date.');return}
const hi=d.temperature_2m_max[0];
const lo=d.temperature_2m_min[0];
const wc=d.weather_code[0];
const hours=data.hourly.temperature_2m||[];
const times=data.hourly.time||[];
const valid=[];
for(let i=0;i<times.length;i++){
if(times[i].startsWith(dateStr)&&hours[i]!=null){
valid.push({h:times[i].slice(11,16),v:hours[i]});
}
}
if(!valid.length){renderError('No hourly data for this date.');return}
const minT=Math.min(...valid.map(x=>x.v));
const maxT=Math.max(...valid.map(x=>x.v));
const range=maxT-minT||1;
const dStr=new Date(dateStr+'T00:00:00Z').toLocaleDateString('en-US',{
weekday:'long',year:'numeric',month:'long',day:'numeric',timeZone:'UTC'
});
let rows='';
for(const x of valid){
const pct=((x.v-minT)/range*70+30).toFixed(1);
const ratio=(x.v-lo)/(hi-lo||1);
const col=ratio>.6?'var(--warm)':ratio<.4?'var(--cool)':'var(--accent)';
rows+=`<div class="hour-row">
<span class="hour-time">${x.h}</span>
<div class="bar-track"><div class="bar-fill" style="width:${pct}%;background:${col}"></div></div>
<span class="hour-val">${x.v.toFixed(1)}°</span>
</div>`;
}
app.innerHTML=`
<div class="hero">
<div class="location">${name}</div>
<div class="date">${dStr}</div>
<div class="weather-icon">${icon(wc)}</div>
<div class="temp-row">
<span class="temp-hi">${hi.toFixed(1)}°</span>
<span class="temp-lo">${lo.toFixed(1)}°</span>
</div>
<div class="condition">${condition(wc)}</div>
</div>
<div class="details">
<div>
<h3>Hourly Temperatures</h3>
<div class="legend">
<span class="legend-item"><span class="legend-dot" style="background:var(--cool)"></span>Cooler</span>
<span class="legend-item"><span class="legend-dot" style="background:var(--accent)"></span>Average</span>
<span class="legend-item"><span class="legend-dot" style="background:var(--warm)"></span>Warmer</span>
</div>
</div>
<div class="hourly">${rows}</div>
</div>`;
}
fetch(endpoint+'?'+params)
.then(r=>{if(!r.ok)throw new Error('HTTP '+r.status);return r.json()})
.then(render)
.catch(()=>renderError('Unable to load weather data. Please try again later.'));
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 7,765 | html / css / js | 233 / 3,093 / 4,439 |
|---|---|---|---|
| dom 节点 | 9 | dom 深度 | 3 |
| css 规则 | 35 | 含 js | 是 |
| brightness | 43.8 | contrast | 24.9 |
| colorfulness | 40.8 | 留白 | 55.1% |
该 slot 的 telemetry
| prompt tokens | 0 | completion tokens | 0 |
|---|---|---|---|
| total tokens | 0 | wall | 33.2 s |
| cost | — | request id | — |
config.json577 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_OPENCODE_KEY",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "mimo-v2.5-pro--cli--opencode--dev",
"effort": null,
"family": "mimo",
"m": {
"min": 2,
"q": 2
},
"model_id": "mimo-v2.5-pro",
"protocol": "cli",
"served_model": "mimo-v2.5-pro",
"telemetry": {
"completion_tokens": null,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 187009
},
"transport": "opencode-cli-isolated-xdg-go-subscription",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-20--refill2-oc-mimo-v2.5-pro",
"config_id": "mimo-v2.5-pro--cli--opencode--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-20T10:59:51.027389+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T10:59:17.861689+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-20T11:00:34.195881+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T10:59:55.582500+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-20T11:01:06.303630+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T11:00:38.742199+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-20T11:02:37.632637+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-20T11:01:09.958066+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
}
}
}