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
glm-5.2 · opencode P-q slot 0 截图

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。

similarity 邻居

限于 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 {"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[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,879html / css / js237 / 4,407 / 15,235
dom 节点9dom 深度3
css 规则40含 js
brightness38.5contrast16.4
colorfulness15.6留白78.3%

该 slot 的 telemetry

prompt tokens0completion tokens0
total tokens0wall140.1 s
costrequest 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
    }
  }
}