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

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居
最近
gpt-5.4 @medium · codex-oauth0.66gpt-5.4 @medium · api0.64claude-opus-4-8 @low · CC0.63gpt-5.4-mini @low · api0.63kimi-k2.7-code · go0.63最远
gpt-5.6-luna @low · kiro0.44gpt-5.6-luna @high · kiro0.44qwen3.5-plus · go0.45minimax-m2.7 · go0.45mimo-v2.5-pro @medium · api0.45限于 session 2026-07-19--unified
similarity 衡量本 session 内的趋同程度 —— 不是质量。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempmismatch展示值:26
- min tempmismatch展示值:24
- 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>
:root{
--bg-0:#0b1020;
--bg-1:#141b35;
--card:rgba(255,255,255,.06);
--card-border:rgba(255,255,255,.12);
--text:#eef2ff;
--muted:#a9b3cf;
--accent:#7cc7ff;
--warm:#ffb86b;
--cold:#86d6ff;
--shadow:0 20px 60px rgba(0,0,0,.45);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
font-family:"SF Pro Display","Segoe UI",system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif;
color:var(--text);
background:
radial-gradient(1200px 600px at 80% -10%,rgba(124,199,255,.18),transparent 60%),
radial-gradient(900px 500px at -10% 110%,rgba(255,184,107,.12),transparent 60%),
linear-gradient(160deg,var(--bg-0),var(--bg-1));
min-height:800px;
display:flex;
align-items:center;
justify-content:center;
padding:40px;
-webkit-font-smoothing:antialiased;
}
.card{
width:880px;
min-height:560px;
background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.03));
border:1px solid var(--card-border);
border-radius:28px;
box-shadow:var(--shadow);
padding:44px 52px 40px;
position:relative;
overflow:hidden;
backdrop-filter:blur(14px);
}
.card::before{
content:"";
position:absolute;inset:0;
background:radial-gradient(600px 300px at 90% 0%,rgba(124,199,255,.15),transparent 70%);
pointer-events:none;
}
.top{
display:flex;
align-items:flex-start;
justify-content:space-between;
gap:24px;
margin-bottom:34px;
}
.loc{
display:flex;align-items:center;gap:10px;
font-size:15px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
font-weight:600;
}
.loc .dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 12px var(--accent)}
.name{font-size:46px;font-weight:700;letter-spacing:-.02em;line-height:1.05;margin-top:8px}
.date{font-size:16px;color:var(--muted);margin-top:6px;font-variant-numeric:tabular-nums}
.cond{
text-align:right;
min-width:240px;
}
.cond .ico{
width:96px;height:96px;margin-left:auto;
display:flex;align-items:center;justify-content:center;
}
.cond .label{font-size:22px;font-weight:600;margin-top:6px}
.cond .sub{font-size:13px;color:var(--muted);margin-top:2px;letter-spacing:.05em}
.temps{
display:flex;gap:40px;
padding:26px 30px;
border-radius:20px;
background:rgba(255,255,255,.04);
border:1px solid rgba(255,255,255,.07);
margin-bottom:30px;
}
.temps .blk{flex:1}
.temps .lbl{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:600}
.temps .val{font-size:54px;font-weight:700;letter-spacing:-.03em;margin-top:6px;font-variant-numeric:tabular-nums}
.temps .val .u{font-size:24px;font-weight:500;color:var(--muted);margin-left:2px;vertical-align:super}
.temps .max .val{color:var(--warm)}
.temps .min .val{color:var(--cold)}
.temps .sep{width:1px;background:linear-gradient(180deg,transparent,rgba(255,255,255,.18),transparent)}
.hourly{
border-radius:20px;
background:rgba(255,255,255,.03);
border:1px solid rgba(255,255,255,.06);
padding:22px 26px 26px;
}
.hourly .h-title{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-bottom:6px}
.chart{width:100%;height:170px;display:block}
.footer{
margin-top:22px;
display:flex;justify-content:space-between;align-items:center;
font-size:11px;color:var(--muted);letter-spacing:.08em;
}
.footer a{color:var(--accent);text-decoration:none}
.error{
text-align:center;padding:80px 20px;color:var(--text);
}
.error .big{font-size:22px;font-weight:600;margin-bottom:10px}
.error .small{font-size:14px;color:var(--muted);max-width:560px;margin:0 auto;line-height:1.6}
.hidden{display:none}
.skeleton .bar{
background:linear-gradient(90deg,rgba(255,255,255,.05),rgba(255,255,255,.12),rgba(255,255,255,.05));
background-size:200% 100%;
animation:shimmer 1.4s infinite;
border-radius:8px;
}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skeleton .s-name{height:46px;width:260px;margin-top:8px}
.skeleton .s-cond{height:96px;width:96px;margin-left:auto;border-radius:50%}
.skeleton .s-temps{height:120px;margin-top:30px}
.skeleton .s-chart{height:170px;margin-top:24px}
</style>
</head>
<body>
<div class="card" id="root"></div>
<script>
(function(){
"use strict";
var root = document.getElementById("root");
function qs(name, def){
var m = new RegExp("[?&]"+name+"=([^&#]*)").exec(window.location.search);
return m ? decodeURIComponent(m[1]) : def;
}
function todayUTC(){
var d = new Date();
var p = function(n){return n<10?"0"+n:""+n;};
return d.getUTCFullYear()+"-"+p(d.getUTCMonth()+1)+"-"+p(d.getUTCDate());
}
function pad(n){return n<10?"0"+n:""+n;}
function fmtDate(s){
var d = new Date(s+"T00:00:00Z");
var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var days=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
return days[d.getUTCDay()]+", "+d.getUTCDate()+" "+months[d.getUTCMonth()]+" "+d.getUTCFullYear();
}
var lat = parseFloat(qs("lat","52.52"));
var lon = parseFloat(qs("lon","13.405"));
var name = qs("name","Berlin");
var date = qs("date", todayUTC());
var OM = {
clear:"Clear sky",mainlyClear:"Mainly clear",partlyCloudy:"Partly cloudy",overcast:"Overcast",
fog:"Fog",drizzleLight:"Light drizzle",drizzleMod:"Moderate drizzle",drizzleDense:"Dense drizzle",
rainSlight:"Slight rain",rainMod:"Moderate rain",rainHeavy:"Heavy rain",rainFreezing:"Freezing rain",
snowSlight:"Slight snowfall",snowMod:"Moderate snowfall",snowHeavy:"Heavy snowfall",
snowGrains:"Snow grains",rainShower:"Rain showers",rainShowerV:"Violent rain showers",
snowShower:"Snow showers",snowShowerHeavy:"Heavy snow showers",thunder:"Thunderstorm",
thunderHail:"Thunderstorm with hail"
};
function wmoLabel(c){
c = +c;
if(c===0) return OM.clear;
if(c===1) return OM.mainlyClear;
if(c===2) return OM.partlyCloudy;
if(c===3) return OM.overcast;
if(c===45||c===48) return OM.fog;
if(c===51) return OM.drizzleLight;
if(c===53) return OM.drizzleMod;
if(c===55) return OM.drizzleDense;
if(c===56||c===57) return OM.rainFreezing;
if(c===61) return OM.rainSlight;
if(c===63) return OM.rainMod;
if(c===65) return OM.rainHeavy;
if(c===66||c===67) return OM.rainFreezing;
if(c===71) return OM.snowSlight;
if(c===73) return OM.snowMod;
if(c===75) return OM.snowHeavy;
if(c===77) return OM.snowGrains;
if(c===80) return OM.rainShower;
if(c===81) return OM.rainShower;
if(c===82) return OM.rainShowerV;
if(c===85) return OM.snowShower;
if(c===86) return OM.snowShowerHeavy;
if(c===95) return OM.thunder;
if(c===96||c===99) return OM.thunderHail;
return "—";
}
function isPast(dateStr){
var today = todayUTC();
return dateStr < today;
}
function skyGradient(code){
if(code<=1) return ["#2a4d8f","#5b8fd6"];
if(code<=2) return ["#3a4f78","#6c83ad"];
if(code===3) return ["#474d5e","#6b7283"];
if(code<=48) return ["#5b6477","#8b94a8"];
if(code<=67) return ["#39506e","#6986a8"];
if(code<=77) return ["#5e7e9e","#a8c8e4"];
if(code<=82) return ["#364862","#5b7396"];
if(code<=86) return ["#5b7790","#9fbcd6"];
return ["#33263f","#54406a"];
}
function svgIcon(code, size){
size = size||96;
var s = size;
function wrap(inner){
return '<svg viewBox="0 0 96 96" width="'+s+'" height="'+s+'">'+inner+'</svg>';
}
function sun(){
return '<g stroke="#ffd166" stroke-width="4" stroke-linecap="round" fill="none">'+
'<circle cx="48" cy="48" r="16" fill="#ffd166" stroke="none"/>'+
line(48,18,48,28)+line(48,68,48,78)+line(18,48,28,48)+line(68,48,78,48)+
line(27,27,34,34)+line(62,62,69,69)+line(69,27,62,34)+line(34,62,27,69)+
'</g>';
}
function line(x1,y1,x2,y2){return '<line x1="'+x1+'" y1="'+y1+'" x2="'+x2+'" y2="'+y2+'"/>';}
function cloud(cy,color){
color=color||"#cdd9ee";
return '<g fill="'+color+'">'+
'<ellipse cx="48" cy="'+cy+'" rx="26" ry="14"/>'+
'<ellipse cx="34" cy="'+(cy+4)+'" rx="14" ry="10"/>'+
'<ellipse cx="62" cy="'+(cy+4)+'" rx="14" ry="10"/>'+
'</g>';
}
function rainDrops(cy){
return '<g stroke="#7cc7ff" stroke-width="3" stroke-linecap="round">'+
line(34,cy,30,cy+12)+line(48,cy,44,cy+12)+line(62,cy,58,cy+12)+
'</g>';
}
function snowFlakes(cy){
return '<g fill="#dbeaff">'+
'<circle cx="34" cy="'+(cy+6)+'" r="2.6"/>'+
'<circle cx="48" cy="'+(cy+10)+'" r="2.6"/>'+
'<circle cx="62" cy="'+(cy+6)+'" r="2.6"/>'+
'</g>';
}
function bolt(cy){
return '<path d="M48 '+(cy-2)+' L40 '+(cy+14)+' L46 '+(cy+14)+' L42 '+(cy+30)+' L56 '+(cy+10)+' L50 '+(cy+10)+' Z" fill="#ffd166" stroke="#ffb86b" stroke-width="1.5"/>';
}
function fogLines(cy){
return '<g stroke="#cdd9ee" stroke-width="4" stroke-linecap="round">'+
line(26,cy,70,cy)+line(30,cy+10,66,cy+10)+line(26,cy+20,70,cy+20)+
'</g>';
}
if(code===0) return wrap(sun());
if(code===1) return wrap(sun()+'<g opacity=".55">'+cloud(58,"#d8e2f2")+'</g>');
if(code===2) return wrap(sun()+'<g opacity=".85">'+cloud(56,"#c8d2e6")+'</g>');
if(code===3) return wrap(cloud(48));
if(code===45||code===48) return wrap(fogLines(40)+fogLines(56));
if(code>=51&&code<=57) return wrap(cloud(44)+rainDrops(62));
if(code>=56&&code<=57) return wrap(cloud(44)+rainDrops(62));
if(code>=61&&code<=65) return wrap(cloud(42)+rainDrops(60));
if(code>=66&&code<=67) return wrap(cloud(42)+rainDrops(60));
if(code>=71&&code<=77) return wrap(cloud(42)+snowFlakes(60));
if(code>=80&&code<=82) return wrap(cloud(40)+rainDrops(58));
if(code>=85&&code<=86) return wrap(cloud(40)+snowFlakes(58));
if(code>=95) return wrap(cloud(38)+bolt(58));
return wrap(cloud(48));
}
// Render skeleton
function renderSkeleton(){
root.classList.add("skeleton");
root.innerHTML =
'<div class="top">'+
'<div><div class="loc"><span class="bar" style="height:10px;width:120px"></span></div>'+
'<div class="bar s-name"></div><div class="bar" style="height:14px;width:160px;margin-top:10px"></div></div>'+
'<div><div class="bar s-cond"></div><div class="bar" style="height:14px;width:120px;margin:10px 0 0 auto"></div></div>'+
'</div>'+
'<div class="bar s-temps"></div>'+
'<div class="bar s-chart"></div>';
}
function renderError(msg){
root.classList.remove("skeleton");
root.innerHTML =
'<div class="error">'+
'<div class="big">Unable to load weather data</div>'+
'<div class="small">'+msg+'</div>'+
'<div style="margin-top:24px"><button id="retry" style="cursor:pointer;background:rgba(124,199,255,.15);color:#7cc7ff;border:1px solid rgba(124,199,255,.35);border-radius:10px;padding:10px 22px;font-size:13px;font-weight:600;letter-spacing:.05em">Retry</button></div>'+
'</div>';
var b=document.getElementById("retry");
if(b) b.onclick=function(){load();};
}
function render(data){
root.classList.remove("skeleton");
var daily = data.daily||{};
var dTimeArr = (daily.time||[]);
var idx = -1;
for(var i=0;i<dTimeArr.length;i++){if(dTimeArr[i]===date){idx=i;break;}}
if(idx<0){
renderError("The requested date ("+date+") is not available in the response.");
return;
}
var tmax = daily.temperature_2m_max[idx];
var tmin = daily.temperature_2m_min[idx];
var code = (daily.weather_code&&daily.weather_code[idx])||0;
var hourly = data.hourly||{};
var hTimes = hourly.time||[];
var hTemps = hourly.temperature_2m||[];
var rowStart=-1,rowEnd=-1;
for(var j=0;j<hTimes.length;j++){
if(hTimes[j].indexOf(date)===0){if(rowStart<0)rowStart=j;rowEnd=j;}
}
var hours=[];
if(rowStart>=0){
for(var k=rowStart;k<=rowEnd;k++){
hours.push({h:parseInt((hTimes[k]||"").slice(11,13),10), t:hTemps[k]});
}
}
var gradient = skyGradient(code);
root.style.boxShadow = "0 24px 70px "+hexA(gradient[1],.35)+", inset 0 1px 0 rgba(255,255,255,.08)";
var minT = Math.min.apply(null, hours.map(function(x){return x.t;}).concat([tmin]));
var maxT = Math.max.apply(null, hours.map(function(x){return x.t;}).concat([tmax]));
if(!isFinite(minT)||!isFinite(maxT)){minT=Math.min(tmin,tmax);maxT=Math.max(tmin,tmax);}
var padT = (maxT-minT)*0.12 || 1;
minT-=padT;maxT+=padT;
if(maxT-minT<2){maxT+=1;minT-=1;}
function colorFor(t){
var r = (t-minT)/(maxT-minT);
if(r<.5){return mix("#86d6ff","#9be7c4",r*2);}
return mix("#9be7c4","#ffb86b",(r-.5)*2);
}
function mix(a,b,x){
function h(s){return [parseInt(s.slice(1,3),16),parseInt(s.slice(3,5),16),parseInt(s.slice(5,7),16)];}
var A=h(a),B=h(b);
var c=A.map(function(v,i){return Math.round(v+(B[i]-v)*x);});
return "#"+c.map(function(v){return ("0"+v.toString(16)).slice(-2);}).join("");
}
function hexA(s,a){
var r=parseInt(s.slice(1,3),16),g=parseInt(s.slice(3,5),16),b=parseInt(s.slice(5,7),16);
return "rgba("+r+","+g+","+b+","+a+")";
}
var W=760,H=170,padL=34,padR=14,padT=20,padB=30;
var plotW=W-padL-padR, plotH=H-padT-padB;
var points=[];
if(hours.length){
for(var p=0;p<hours.length;p++){
var x=padL+(hours.length===1?plotW/2:(p/(hours.length-1))*plotW);
var y=padT+(1-((hours[p].t-minT)/(maxT-minT)))*plotH;
points.push([x,y,hours[p].t,hours[p].h]);
}
}
function smoothPath(pts){
if(pts.length<2) return "";
var d="M "+pts[0][0]+" "+pts[0][1];
for(var i=0;i<pts.length-1;i++){
var p0=pts[Math.max(0,i-1)],p1=pts[i],p2=pts[i+1],p3=pts[Math.min(pts.length-1,i+2)];
var cx1=p1[0]+(p2[0]-p0[0])/6, cy1=p1[1]+(p2[1]-p0[1])/6;
var cx2=p2[0]-(p3[0]-p1[0])/6, cy2=p2[1]-(p3[1]-p1[1])/6;
d+=" C "+cx1+" "+cy1+","+cx2+" "+cy2+","+p2[0]+" "+p2[1];
}
return d;
}
var linePath = smoothPath(points);
var areaPath = linePath + (points.length?(" L "+points[points.length-1][0]+" "+(padT+plotH)+" L "+points[0][0]+" "+(padT+plotH)+" Z"):"");
var gridLines="";
for(var g=0;g<5;g++){
var yy=padT+(g/4)*plotH;
var val=(maxT-(g/4)*(maxT-minT));
gridLines+='<line x1="'+padL+'" y1="'+yy+'" x2="'+(W-padR)+'" y2="'+yy+'" stroke="rgba(255,255,255,.06)" stroke-width="1"/>';
gridLines+='<text x="'+(padL-8)+'" y="'+(yy+3)+'" text-anchor="end" font-size="10" fill="#7a86a8" font-family="inherit">'+val.toFixed(0)+'°</text>';
}
var xLabels="";
if(points.length){
var step=Math.max(1,Math.floor(points.length/8));
for(var q=0;q<points.length;q+=step){
var hh=points[q][3];
var lbl=((hh%24+24)%24).toString().padStart(2,"0");
xLabels+='<text x="'+points[q][0]+'" y="'+(H-10)+'" text-anchor="middle" font-size="10" fill="#7a86a8" font-family="inherit">'+lbl+'</text>';
}
var last=points[points.length-1];
xLabels+='<text x="'+last[0]+'" y="'+(H-10)+'" text-anchor="middle" font-size="10" fill="#7a86a8" font-family="inherit">'+((""+last[3]).padStart(2,"0"))+'</text>';
}
var dots="";
for(var d2=0;d2<points.length;d2++){
var col=colorFor(points[d2][2]);
dots+='<circle cx="'+points[d2][0]+'" cy="'+points[d2][1]+'" r="3.2" fill="'+col+'" stroke="#0b1020" stroke-width="1.5"/>';
}
var gradientId="g"+Date.now();
var svgChart =
'<svg class="chart" viewBox="0 0 '+W+' '+H+'" preserveAspectRatio="none">'+
'<defs><linearGradient id="'+gradientId+'" x1="0" y1="0" x2="0" y2="1">'+
'<stop offset="0%" stop-color="'+hexA("#7cc7ff",.35)+'"/>'+
'<stop offset="100%" stop-color="'+hexA("#7cc7ff",0)+'"/>'+
'</linearGradient></defs>'+
gridLines+
(areaPath?'<path d="'+areaPath+'" fill="url(#'+gradientId+')"/>':'')+
(linePath?'<path d="'+linePath+'" fill="none" stroke="#7cc7ff" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round" opacity=".95"/>':'')+
dots+xLabels+
'</svg>';
var condLabel = wmoLabel(code);
var condSub = code!==undefined ? ("WMO code "+code) : "";
root.innerHTML =
'<div class="top">'+
'<div>'+
'<div class="loc"><span class="dot"></span><span>'+escapeHTML(name)+'</span></div>'+
'<div class="name">'+escapeHTML(name)+'</div>'+
'<div class="date">'+fmtDate(date)+' · UTC</div>'+
'</div>'+
'<div class="cond">'+
'<div class="ico">'+svgIcon(code,96)+'</div>'+
'<div class="label">'+escapeHTML(condLabel)+'</div>'+
'<div class="sub">'+escapeHTML(condSub)+'</div>'+
'</div>'+
'</div>'+
'<div class="temps">'+
'<div class="blk max"><div class="lbl">High</div><div class="val">'+fmtT(tmax)+'<span class="u">°C</span></div></div>'+
'<div class="sep"></div>'+
'<div class="blk min"><div class="lbl">Low</div><div class="val">'+fmtT(tmin)+'<span class="u">°C</span></div></div>'+
'</div>'+
'<div class="hourly">'+
'<div class="h-title">Hourly temperature · '+fmtDate(date).split(",")[0]+'</div>'+
(hours.length? svgChart : '<div style="padding:40px;text-align:center;color:#7a86a8;font-size:13px">No hourly data available for this date.</div>')+
'</div>'+
'<div class="footer"><span>'+escapeHTML(name)+' · '+lat.toFixed(3)+', '+lon.toFixed(3)+'</span><span>Source: Open-Meteo</span></div>';
}
function fmtT(v){
if(v===null||v===undefined||isNaN(v)) return "—";
return (Math.round(v*10)/10).toFixed(1).replace(/\.0$/,"")+"";
}
function escapeHTML(s){
return (""+s).replace(/[&<>"']/g,function(c){return {"&":"&","<":"<",">":">",'"':""","'":"'"}[c];});
}
function load(){
renderSkeleton();
var path = isPast(date) ? "/api/om/archive" : "/api/om/forecast";
var params =
"latitude="+encodeURIComponent(lat)+
"&longitude="+encodeURIComponent(lon)+
"&daily=temperature_2m_max,temperature_2m_min,weather_code"+
"&hourly=temperature_2m"+
"&timezone=UTC"+
"&temperature_unit=celsius"+
"&start_date="+encodeURIComponent(date)+
"&end_date="+encodeURIComponent(date);
var url = path+"?"+params;
function fail(msg){
renderError(msg||"Network or server error. Please check the API path and try again.");
}
var ctrl = new AbortController();
var timer = setTimeout(function(){ctrl.abort();}, 15000);
fetch(url,{signal:ctrl.signal})
.then(function(r){
clearTimeout(timer);
if(!r.ok){
return r.text().then(function(t){throw new Error("HTTP "+r.status+(t?(" — "+t.slice(0,180)):""));});
}
return r.json();
})
.then(function(d){
clearTimeout(timer);
if(!d || !d.daily){
fail("Unexpected response: missing 'daily' field.");return;
}
try{ render(d); }catch(e){ fail("Render failed: "+(e&&e.message?e.message:"")); }
})
.catch(function(e){
clearTimeout(timer);
var msg = e && e.name==="AbortError" ? "Request timed out." : (e&&e.message?e.message:"Network error.");
fail(msg);
});
}
load();
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 19,879 | html / css / js | 237 / 4,407 / 15,235 |
|---|---|---|---|
| dom 节点 | 9 | dom 深度 | 3 |
| css 规则 | 40 | 含 js | 是 |
| brightness | 38.5 | contrast | 16.4 |
| colorfulness | 15.6 | 留白 | 78.3% |
该 slot 的 telemetry
| prompt tokens | 0 | completion tokens | 0 |
|---|---|---|---|
| total tokens | 0 | wall | 140.1 s |
| cost | — | request id | — |
config.json558 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_OPENCODE_KEY",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "glm-5.2--cli--opencode--dev",
"effort": null,
"family": "glm",
"m": {
"min": 1,
"q": 2
},
"model_id": "glm-5.2",
"protocol": "cli",
"served_model": "glm-5.2",
"telemetry": {
"completion_tokens": null,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 392611
},
"transport": "opencode-cli-isolated-xdg-go-subscription",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-18--dev-opencode-cli",
"config_id": "glm-5.2--cli--opencode--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T14:45:51.435883+00:00",
"http_status": null,
"outcome": "infra-failed",
"reached_model": true,
"reason": "mid-stream-death",
"request_id": null,
"started_at": "2026-07-17T14:45:20.233095+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "infra-failed",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T14:48:11.516347+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T14:45:51.436724+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-17T14:50:27.695958+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T14:48:14.934958+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-17T14:53:14.773674+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T14:51:15.053150+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
}
}
}