kimi-k3 · opencode

opencode
config
kimi-k3--cli--opencode--dev
batch
2026-07-19--unified
transport
opencode-cli-isolated-xdg-go-subscription
protocol
cli · plan
served model
kimi-k3
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
kimi-k3 · opencode P-q slot 0 screenshot

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

within 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
  • hourlymatchcoverage 24/24 · 24 match · 0 mismatch · 0 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">
<title>Weather Card</title>
<style>
  :root{
    --c1:#2b6cb0;
    --c2:#63b3ed;
    --c3:#f6d365;
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html,body{height:100%}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
    color:#fff;
    min-height:100vh;
    display:grid;
    place-items:center;
    padding:40px;
    background:linear-gradient(155deg,var(--c1) 0%,var(--c2) 55%,var(--c3) 125%);
    transition:background .8s ease;
  }
  body::before{
    content:"";
    position:fixed;inset:0;pointer-events:none;
    background:
      radial-gradient(1100px 620px at 18% -12%, rgba(255,255,255,.28), transparent 62%),
      radial-gradient(900px 540px at 92% 112%, rgba(8,22,44,.34), transparent 62%);
  }
  body::after{
    content:"";
    position:fixed;inset:0;pointer-events:none;opacity:.05;mix-blend-mode:overlay;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E");
  }
  .card{
    position:relative;z-index:1;
    width:min(940px,94vw);
    background:linear-gradient(180deg,rgba(255,255,255,.17),rgba(255,255,255,.08));
    border:1px solid rgba(255,255,255,.26);
    border-radius:30px;
    box-shadow:0 30px 80px rgba(10,25,47,.35), inset 0 1px 0 rgba(255,255,255,.35);
    backdrop-filter:blur(22px) saturate(1.35);
    -webkit-backdrop-filter:blur(22px) saturate(1.35);
    padding:34px 40px 24px;
  }
  .head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
  .loc{display:flex;align-items:center;gap:10px;font-size:27px;font-weight:650;letter-spacing:.2px}
  .loc svg{width:23px;height:23px;opacity:.9;flex:0 0 auto}
  .badge{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,.24);border:1px solid rgba(255,255,255,.35)}
  .datebox{text-align:right;font-size:14px;line-height:1.5;opacity:.9}
  .datebox .d1{font-weight:600}
  .datebox .d2{font-size:12px;opacity:.7;font-variant-numeric:tabular-nums}
  .main{display:flex;align-items:center;gap:38px;margin-top:24px}
  .wicon{width:132px;height:132px;flex:0 0 auto;filter:drop-shadow(0 12px 26px rgba(0,0,0,.28))}
  .wicon svg{width:100%;height:100%}
  .bigtemp{font-size:102px;font-weight:250;line-height:.95;letter-spacing:-3px;font-variant-numeric:tabular-nums}
  .bigtemp sup{font-size:42px;font-weight:300;letter-spacing:0}
  .cond{font-size:20px;font-weight:550;opacity:.95;margin-top:8px}
  .divider{width:1px;align-self:stretch;background:linear-gradient(180deg,transparent,rgba(255,255,255,.38),transparent)}
  .stats{display:flex;flex-direction:column;gap:15px;min-width:178px}
  .stat{display:flex;align-items:center;gap:12px}
  .stat .ic{width:32px;height:32px;flex:0 0 auto;display:grid;place-items:center;border-radius:10px;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.18)}
  .stat .ic svg{width:17px;height:17px}
  .stat .t{font-size:11px;text-transform:uppercase;letter-spacing:.11em;opacity:.7}
  .stat .v{font-size:19px;font-weight:650;font-variant-numeric:tabular-nums}
  .hourly{margin-top:28px;padding-top:20px;border-top:1px solid rgba(255,255,255,.17)}
  .hourly h2{font-size:12.5px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;opacity:.72;margin-bottom:4px}
  .chart{width:100%;height:auto;display:block}
  .strip{display:flex;gap:8px;overflow-x:auto;padding:12px 2px 4px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.35) transparent}
  .strip::-webkit-scrollbar{height:6px}
  .strip::-webkit-scrollbar-thumb{background:rgba(255,255,255,.3);border-radius:3px}
  .strip::-webkit-scrollbar-track{background:transparent}
  .chip{flex:0 0 auto;min-width:62px;text-align:center;padding:9px 6px;border-radius:14px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.13)}
  .chip.now{background:rgba(255,255,255,.25);border-color:rgba(255,255,255,.55);box-shadow:0 4px 14px rgba(10,25,47,.25)}
  .chip .h{font-size:11px;opacity:.72;font-variant-numeric:tabular-nums}
  .chip .t{font-size:15px;font-weight:650;margin-top:3px;font-variant-numeric:tabular-nums}
  .foot{margin-top:14px;font-size:11.5px;opacity:.62;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
  .sk{border-radius:14px;background:linear-gradient(100deg,rgba(255,255,255,.10) 40%,rgba(255,255,255,.24) 50%,rgba(255,255,255,.10) 60%);background-size:200% 100%;animation:sh 1.4s infinite linear}
  @keyframes sh{to{background-position:-200% 0}}
  .error{display:flex;flex-direction:column;align-items:center;text-align:center;padding:48px 20px;gap:14px}
  .error .eic{width:64px;height:64px}
  .error .eic svg{width:100%;height:100%}
  .error .msg{font-size:22px;font-weight:650}
  .error .sub{font-size:14px;opacity:.82;max-width:440px;line-height:1.55}
</style>
</head>
<body>
<noscript><div class="card"><div class="error"><div class="msg">JavaScript is required to load weather data.</div></div></div></noscript>
<div class="card" id="card" aria-live="polite">
  <div class="sk" style="width:230px;height:28px"></div>
  <div style="display:flex;gap:38px;margin-top:26px;align-items:center">
    <div class="sk" style="width:132px;height:132px;border-radius:50%"></div>
    <div style="flex:1">
      <div class="sk" style="width:200px;height:88px"></div>
      <div class="sk" style="width:150px;height:20px;margin-top:12px"></div>
    </div>
  </div>
  <div class="sk" style="height:196px;margin-top:30px"></div>
</div>

<script>
(function(){
  "use strict";
  var card = document.getElementById('card');

  /* ---------- parameters ---------- */
  var qp = new URLSearchParams(location.search);
  function num(v,d){ var n = parseFloat(v); return Number.isFinite(n) ? n : d; }
  var lat  = num(qp.get('lat'), 52.52);
  var lon  = num(qp.get('lon'), 13.405);
  var name = (qp.get('name') || 'Berlin').trim() || 'Berlin';
  var today = new Date().toISOString().slice(0,10);           // UTC today
  var date = qp.get('date') || today;
  if(!/^\d{4}-\d{2}-\d{2}$/.test(date)) date = today;

  var endpoint = date < today ? '/api/om/archive' : '/api/om/forecast';
  var q = new URLSearchParams({
    latitude: String(lat),
    longitude: String(lon),
    daily: 'temperature_2m_max,temperature_2m_min,weather_code',
    hourly: 'temperature_2m',
    timezone: 'UTC',
    temperature_unit: 'celsius',
    start_date: date,
    end_date: date
  });

  fetch(endpoint + '?' + q.toString())
    .then(function(r){ if(!r.ok) throw new Error('HTTP ' + r.status); return r.json(); })
    .then(render)
    .catch(showError);

  /* ---------- WMO weather codes ---------- */
  var WMO = {
    0:['Clear sky','clear'],      1:['Mainly clear','clear'],   2:['Partly cloudy','partly'], 3:['Overcast','cloudy'],
    45:['Fog','fog'],             48:['Rime fog','fog'],
    51:['Light drizzle','rain'],  53:['Drizzle','rain'],        55:['Dense drizzle','rain'],
    56:['Freezing drizzle','rain'],57:['Freezing drizzle','rain'],
    61:['Light rain','rain'],     63:['Rain','rain'],           65:['Heavy rain','rain'],
    66:['Freezing rain','rain'],  67:['Freezing rain','rain'],
    71:['Light snow','snow'],     73:['Snow','snow'],           75:['Heavy snow','snow'],   77:['Snow grains','snow'],
    80:['Light showers','rain'],  81:['Rain showers','rain'],   82:['Violent showers','rain'],
    85:['Snow showers','snow'],   86:['Snow showers','snow'],
    95:['Thunderstorm','thunder'],96:['Thunderstorm, hail','thunder'],99:['Thunderstorm, hail','thunder']
  };
  var THEMES = {
    clear:  ['#2f6fb4','#6cb3ee','#f6d365'],
    partly: ['#3a6073','#5f8ea8','#a8c8da'],
    cloudy: ['#475a68','#6b7f8f','#97aab8'],
    fog:    ['#57636e','#7c8894','#adb8c1'],
    rain:   ['#2a3c4f','#3f5872','#61809b'],
    snow:   ['#6789ad','#9db8d2','#e0ecf7'],
    thunder:['#282838','#3d3d56','#5b5b78']
  };

  /* ---------- inline SVG artwork ---------- */
  var SUN_CORE = '<circle cx="32" cy="32" r="11" fill="#FFD66B"/>';
  var SUN_RAYS = '<g stroke="#FFD66B" stroke-width="3.4" stroke-linecap="round">' +
    '<line x1="32" y1="16" x2="32" y2="10.5"/><line x1="43.3" y1="20.7" x2="47.2" y2="16.8"/>' +
    '<line x1="48" y1="32" x2="53.5" y2="32"/><line x1="43.3" y1="43.3" x2="47.2" y2="47.2"/>' +
    '<line x1="32" y1="48" x2="32" y2="53.5"/><line x1="20.7" y1="43.3" x2="16.8" y2="47.2"/>' +
    '<line x1="16" y1="32" x2="10.5" y2="32"/><line x1="20.7" y1="20.7" x2="16.8" y2="16.8"/></g>';
  var CLOUD = '<g fill="#FFFFFF"><circle cx="25" cy="36" r="9.5"/><circle cx="36" cy="29" r="12"/>' +
              '<circle cx="45" cy="37" r="8"/><rect x="16" y="35" width="37" height="10" rx="5"/></g>';
  var CLOUD_S = '<g fill="#FFFFFF"><circle cx="28" cy="40" r="8"/><circle cx="38" cy="33" r="10.5"/>' +
                '<circle cx="46" cy="40" r="7"/><rect x="20" y="39" width="32" height="9" rx="4.5"/></g>';
  var DROPS = '<g stroke="#9CD0FF" stroke-width="3.2" stroke-linecap="round">' +
              '<line x1="24" y1="51" x2="21" y2="58"/><line x1="33" y1="51" x2="30" y2="58"/><line x1="42" y1="51" x2="39" y2="58"/></g>';
  var FLAKES = '<g fill="#EAF6FF"><circle cx="23" cy="53" r="2.6"/><circle cx="32" cy="57" r="2.6"/><circle cx="41" cy="53" r="2.6"/></g>';
  var BOLT  = '<polygon points="34,45 26,55 31.5,55 28,63 39,52 33.5,52 37,45" fill="#FFD66B"/>';
  var FOGLN = '<g stroke="rgba(255,255,255,.85)" stroke-width="3" stroke-linecap="round">' +
              '<line x1="20" y1="50" x2="44" y2="50"/><line x1="24" y1="55" x2="48" y2="55"/><line x1="20" y1="60" x2="44" y2="60"/></g>';

  function icon(kind){
    var inner = {
      clear:   SUN_CORE + SUN_RAYS,
      partly:  '<circle cx="21" cy="21" r="7.5" fill="#FFD66B"/>' +
               '<g stroke="#FFD66B" stroke-width="2.6" stroke-linecap="round">' +
               '<line x1="21" y1="10" x2="21" y2="6.5"/><line x1="28.8" y1="13.2" x2="31.3" y2="10.7"/>' +
               '<line x1="32" y1="21" x2="35.5" y2="21"/><line x1="13.2" y1="13.2" x2="10.7" y2="10.7"/>' +
               '<line x1="10" y1="21" x2="6.5" y2="21"/></g>' + CLOUD_S,
      cloudy:  CLOUD,
      fog:     CLOUD + FOGLN,
      rain:    CLOUD + DROPS,
      snow:    CLOUD + FLAKES,
      thunder: CLOUD + BOLT
    }[kind] || CLOUD;
    return '<svg viewBox="0 0 64 64" role="img" aria-label="' + kind + '">' + inner + '</svg>';
  }

  var PIN = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21s-7-5.5-7-11a7 7 0 0 1 14 0c0 5.5-7 11-7 11z"/><circle cx="12" cy="10" r="2.6"/></svg>';
  var UP  = '<svg viewBox="0 0 24 24" fill="none" stroke="#FFB84D" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5"/><path d="M5 12l7-7 7 7"/></svg>';
  var DN  = '<svg viewBox="0 0 24 24" fill="none" stroke="#9CD0FF" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5v14"/><path d="M19 12l-7 7-7-7"/></svg>';
  var WARN= '<svg viewBox="0 0 24 24" fill="none" stroke="#FFD66B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>';

  function esc(s){
    return String(s).replace(/[&<>"']/g, function(c){
      return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c];
    });
  }
  function fmtDate(d){
    var dt = new Date(d + 'T00:00:00Z');
    return new Intl.DateTimeFormat('en-US',{weekday:'long',month:'long',day:'numeric',year:'numeric',timeZone:'UTC'}).format(dt);
  }

  /* ---------- chart ---------- */
  function smooth(pts){
    var d = 'M ' + pts[0].x.toFixed(1) + ',' + pts[0].y.toFixed(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 c1x = p1.x + (p2.x-p0.x)/6, c1y = p1.y + (p2.y-p0.y)/6;
      var c2x = p2.x - (p3.x-p1.x)/6, c2y = p2.y - (p3.y-p1.y)/6;
      d += ' C ' + c1x.toFixed(1) + ',' + c1y.toFixed(1) + ' ' + c2x.toFixed(1) + ',' + c2y.toFixed(1) + ' ' + p2.x.toFixed(1) + ',' + p2.y.toFixed(1);
    }
    return d;
  }

  function buildChart(hours, temps){
    var W=860, H=196, pl=36, pr=20, pt=32, pb=28, n=temps.length;
    var lo = Math.min.apply(null,temps), hi = Math.max.apply(null,temps);
    var pad = Math.max((hi-lo)*0.15, 1.2); hi += pad; lo -= pad;
    function X(i){ return pl + (n===1 ? (W-pl-pr)/2 : (W-pl-pr)*i/(n-1)); }
    function Y(t){ return pt + (H-pt-pb)*(1-(t-lo)/(hi-lo)); }
    var pts = temps.map(function(t,i){ return {x:X(i), y:Y(t), t:t}; });

    var grid = '';
    for(var g=0; g<3; g++){
      var tv = lo + (hi-lo)*g/2, yy = Y(tv);
      grid += '<line x1="'+pl+'" y1="'+yy.toFixed(1)+'" x2="'+(W-pr)+'" y2="'+yy.toFixed(1)+'" stroke="rgba(255,255,255,.14)" stroke-dasharray="3 5"/>' +
              '<text x="'+(pl-8)+'" y="'+(yy+3.5).toFixed(1)+'" text-anchor="end" font-size="10" fill="rgba(255,255,255,.55)">'+Math.round(tv)+'°</text>';
    }
    var xl = '';
    pts.forEach(function(p,i){
      if(i % 3 === 0){
        xl += '<text x="'+p.x.toFixed(1)+'" y="'+(H-8)+'" text-anchor="middle" font-size="11" fill="rgba(255,255,255,.62)">'+hours[i]+'</text>';
      }
    });
    var dots = '';
    pts.forEach(function(p){
      dots += '<circle cx="'+p.x.toFixed(1)+'" cy="'+p.y.toFixed(1)+'" r="2.3" fill="rgba(255,255,255,.85)"/>';
    });
    var iMax=0, iMin=0;
    pts.forEach(function(p,i){ if(p.t>pts[iMax].t) iMax=i; if(p.t<pts[iMin].t) iMin=i; });
    function marker(p, dy){
      return '<circle cx="'+p.x.toFixed(1)+'" cy="'+p.y.toFixed(1)+'" r="4.6" fill="#fff" stroke="rgba(20,40,70,.35)" stroke-width="2"/>' +
             '<text x="'+p.x.toFixed(1)+'" y="'+(p.y+dy).toFixed(1)+'" text-anchor="middle" font-size="12.5" font-weight="700" fill="#fff" stroke="rgba(20,40,70,.3)" stroke-width="3" paint-order="stroke">'+Math.round(p.t)+'°</text>';
    }
    var line = smooth(pts);
    var area = line + ' L ' + pts[n-1].x.toFixed(1) + ',' + (H-pb) + ' L ' + pts[0].x.toFixed(1) + ',' + (H-pb) + ' Z';

    return '<svg class="chart" viewBox="0 0 '+W+' '+H+'" role="img" aria-label="Hourly temperature chart">' +
      '<defs><linearGradient id="areaG" x1="0" y1="0" x2="0" y2="1">' +
      '<stop offset="0" stop-color="#ffffff" stop-opacity=".32"/>' +
      '<stop offset="1" stop-color="#ffffff" stop-opacity="0"/></linearGradient></defs>' +
      grid +
      '<path d="'+area+'" fill="url(#areaG)"/>' +
      '<path d="'+line+'" fill="none" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round"/>' +
      dots + marker(pts[iMax],-12) + marker(pts[iMin],-12) + xl +
      '</svg>';
  }

  /* ---------- render ---------- */
  function render(data){
    if(!data || !data.daily || !data.daily.time || !data.daily.time.length){
      throw new Error('No daily data returned for this date');
    }
    var tmax = data.daily.temperature_2m_max[0];
    var tmin = data.daily.temperature_2m_min[0];
    var code = data.daily.weather_code[0];
    if(tmax == null || tmin == null) throw new Error('Temperature data missing for this date');

    var hours = [], temps = [];
    if(data.hourly && data.hourly.time){
      for(var i=0;i<data.hourly.time.length;i++){
        if(data.hourly.time[i].indexOf(date) === 0 && data.hourly.temperature_2m[i] != null){
          hours.push(data.hourly.time[i].slice(11,13));
          temps.push(data.hourly.temperature_2m[i]);
        }
      }
    }
    if(!temps.length) throw new Error('No hourly data returned for this date');

    var w = WMO[code] || ['Unknown','cloudy'];
    var label = w[0], kind = w[1];
    var th = THEMES[kind];
    var rs = document.documentElement.style;
    rs.setProperty('--c1', th[0]); rs.setProperty('--c2', th[1]); rs.setProperty('--c3', th[2]);

    var isToday = (date === today);
    var curHour = new Date().getUTCHours();

    card.innerHTML =
      '<div class="head">' +
        '<div class="loc">' + PIN + '<span>' + esc(name) + '</span>' + (isToday ? '<span class="badge">Today</span>' : '') + '</div>' +
        '<div class="datebox"><div class="d1">' + fmtDate(date) + '</div><div class="d2">' + date + ' · UTC</div></div>' +
      '</div>' +
      '<div class="main">' +
        '<div class="wicon">' + icon(kind) + '</div>' +
        '<div><div class="bigtemp">' + Math.round(tmax) + '<sup>°C</sup></div><div class="cond">' + esc(label) + '</div></div>' +
        '<div class="divider"></div>' +
        '<div class="stats">' +
          '<div class="stat"><div class="ic">' + UP + '</div><div><div class="t">Day high</div><div class="v">' + Math.round(tmax) + '°C</div></div></div>' +
          '<div class="stat"><div class="ic">' + DN + '</div><div><div class="t">Day low</div><div class="v">' + Math.round(tmin) + '°C</div></div></div>' +
          '<div class="stat"><div class="ic">' + PIN + '</div><div><div class="t">Coordinates</div><div class="v">' + lat.toFixed(2) + ', ' + lon.toFixed(2) + '</div></div></div>' +
        '</div>' +
      '</div>' +
      '<div class="hourly"><h2>Hourly temperature</h2>' +
        buildChart(hours, temps) +
        '<div class="strip" id="strip">' +
          temps.map(function(t,i){
            var now = (isToday && i === curHour) ? ' now' : '';
            return '<div class="chip' + now + '"><div class="h">' + hours[i] + ':00</div><div class="t">' + Math.round(t) + '°</div></div>';
          }).join('') +
        '</div>' +
      '</div>' +
      '<div class="foot"><span>Source: Open-Meteo (' + (date < today ? 'archive' : 'forecast') + ')</span><span>All times UTC</span></div>';

    var strip = document.getElementById('strip');
    var active = strip.querySelector('.now');
    if(active) strip.scrollLeft = active.offsetLeft - strip.clientWidth/2 + active.clientWidth/2;
  }

  function showError(err){
    card.innerHTML =
      '<div class="error">' +
        '<div class="eic">' + WARN + '</div>' +
        '<div class="msg">Weather data could not be loaded</div>' +
        '<div class="sub">' + esc((err && err.message) || 'Unknown error') + '. Please check your connection, or try a different location or date.</div>' +
      '</div>';
  }
})();
</script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total18,632html / css / js871 / 5,012 / 12,749
dom nodes20dom depth6
css rules47js presentyes
brightness98.8contrast20.4
colorfulness21.8whitespace48.3%

This slot's telemetry

prompt tokens0completion tokens0
total tokens0wall508 s
costrequest id
config.json560 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_OPENCODE_KEY",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "kimi-k3--cli--opencode--dev",
  "effort": null,
  "family": "kimi",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "kimi-k3",
  "protocol": "cli",
  "served_model": "kimi-k3",
  "telemetry": {
    "completion_tokens": null,
    "cost_usd": null,
    "prompt_tokens": null,
    "total_tokens": null,
    "wall_ms": 1584342
  },
  "transport": "opencode-cli-isolated-xdg-go-subscription",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-07-20--refill-oc-kimi-k3",
  "config_id": "kimi-k3--cli--opencode--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-20T08:09:20.441358+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T08:05:05.138066+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-20T08:17:53.512273+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T08:09:25.443953+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-20T08:27:37.321599+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T08:17:57.542659+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-20T08:31:42.222218+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-20T08:27:40.952329+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
    }
  }
}