yzzhao's picture
Show real GPT-6 Astra runs with synchronized instrument video and model traces
dd9cc19 verified
Raw History Blame Contribute Delete
8.27 kB
'use strict';
async function loadModelResults(legacy) {
const response = await fetch('model-source.json');
if (!response.ok) throw Error('Model result version is unavailable.');
const pin = await response.json();
if (!/^[a-f0-9]{40}$/.test(pin.revision) || !/^[a-f0-9]{64}$/.test(pin.sha256)) throw Error('Invalid model result version.');
const root = `https://huggingface.co/datasets/${pin.repo}/resolve/${pin.revision}/`;
const res = await fetch(root + pin.path); if (!res.ok) throw Error('Model results are unavailable.');
const bytes = await res.arrayBuffer();
const digest = Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', bytes)), x => x.toString(16).padStart(2, '0')).join('');
if (digest !== pin.sha256) throw Error('Model result checksum mismatch.');
const data = JSON.parse(new TextDecoder().decode(bytes));
if (data.schema !== 'chemlab/model-evaluation/1' || data.tasks.length !== 4 || !data.complete) throw Error('Model evaluation is not complete.');
const oldTasks = [...document.querySelector('#tasks').children];
const oldMetrics = [...document.querySelector('.overview-metrics').children];
const mode = el('div', undefined, 'result-modes'); mode.setAttribute('role','group'); mode.setAttribute('aria-label','Result set');
const description = el('p', undefined, 'result-description');
document.querySelector('#overview').before(mode, description);
const buttons = {};
for (const [key,label] of [['model','GPT-6 Astra'],['scripted','Scripted acceptance']]) {
const b = el('button',label); b.type='button'; b.dataset.mode=key; mode.append(b); buttons[key]=b;
b.addEventListener('click',()=>select(key));
}
const modelTasks = data.tasks.map(task => {
const card = nativeCard({native_success:task.native_success},root,task,{video:root+task.media.video,poster:root+task.media.poster});
const jump=el('button','First command','jump-command');jump.type='button';jump.addEventListener('click',()=>{const v=card.querySelector('video');v.currentTime=Math.max(0,task.first_command_time_s-0.5);});card.querySelector('.player-controls').prepend(jump);
if(task.slug.startsWith('02-'))card.querySelector('.split-labels span:last-child').textContent='Native screen + runtime readout';
card.querySelector('.task-metrics').replaceChildren(metric('Model responses',task.model_responses),metric('Instrument commands',task.commands.length),metric('Simulation time',`${task.simulation_seconds.toFixed(1)} s`));
const detail=el('button','Task & model trace'); detail.type='button'; detail.addEventListener('click',()=>showModelTask(task,root));
card.querySelector('.links').replaceChildren(detail); return card;
});
const modelMetrics = [metric('Tasks passed',`${data.tasks.filter(t=>t.native_success).length} / 4`),metric('Evidence valid',`${data.tasks.filter(t=>t.evidence_valid).length} / 4`),metric('Usage complete',`${data.tasks.filter(t=>t.usage.audit_complete).length} / 4`),metric('Attempts per task','1')];
function select(key) {
for(const video of document.querySelectorAll('video')) video.pause();
for(const [k,b]of Object.entries(buttons)) b.setAttribute('aria-pressed',String(k===key));
const model=key==='model';
document.querySelector('#tasks').replaceChildren(...(model?modelTasks:oldTasks));
document.querySelector('.overview-metrics').replaceChildren(...(model?modelMetrics:oldMetrics));
document.querySelector('.hero .context').textContent=model?'Kinex + GPT-6 Astra · high · realtime · seed 0':'Scripted acceptance · realtime · no model calls';
document.querySelector('#task-heading').textContent=model?'Model runs':'Scripted acceptance runs';
description.textContent=model?'Four independent instrument tasks · no robot · one attempt each':'Earlier scripted checks of the instrument pipeline and asset runtime.';
document.documentElement.dataset.resultMode=key;
}
const provenance=document.querySelector('#provenance-content');
const block=el('div');block.append(el('h3','GPT-6 Astra evaluation'));
const limits=el('ul');for(const text of data.limits) limits.append(el('li',text));block.append(limits);
block.append(el('p','Native success, evidence validity and usage completeness are checked separately. Videos contain the original run; command replays validate terminal state and scene bindings, not per-frame trajectory restoration.'));
const links=el('div',undefined,'links');links.append(link('RLE implementation PR ↗','https://github.com/stacx-lab/RLE-Bench-inhouse/pull/6'),link('Model result index ↗',root+pin.path),link('Model file manifest ↗',root+pin.path.replace('index.json','manifest.json')));block.append(links);
provenance.prepend(block);select('model');
}
function showModelTask(task,root){
document.querySelector('#detail-title').textContent=task.title;
details.replaceChildren(el('p',task.instruction,'instruction'));
details.append(el('p',`Original task instruction · seed 0 · attempt 1 · ${task.frames} native frames · ${task.agent_wall_seconds.toFixed(1)} s agent runtime`,'muted'));
const table=el('table');const tr=el('tr');for(const label of ['Condition','Initial','Final','Target'])tr.append(el('th',label));table.append(tr);
for(const g of task.goals){const row=el('tr');for(const value of [labels[g.state]??g.state,measurement(g.initial,g.unit,g.state),measurement(g.final,g.unit,g.state),target(g)])row.append(el('td',value));table.append(row);}
const wrap=el('div',undefined,'table-wrap');wrap.append(table);details.append(wrap);
details.append(el('p',`Native: ${task.native_success?'success':'failure'} · Evidence: ${task.evidence_valid?'valid':'invalid'} · Execution: ${task.execution.status} · Usage: ${task.usage.audit_complete?'complete':'incomplete'}`));
details.append(el('p',`${task.model_responses} model responses · ${task.model_tool_calls} model tool calls · ${task.commands.length} instrument commands · ${task.owner_rpc_attempts} owner RPC attempts`));
details.append(el('p',`Tokens: ${task.usage.fresh_input_tokens.toLocaleString()} fresh input + ${task.usage.cached_input_tokens.toLocaleString()} cached input + ${task.usage.output_tokens.toLocaleString()} output. Provider cost unavailable.`));
details.append(el('h3','Instrument commands'));
for(const c of task.commands){const row=el('div',undefined,'command');row.append(el('strong',`${c.capability} · frame ${c.frame}`),el('pre',JSON.stringify(c.arguments,null,2)),el('span',c.status,'command-status'));details.append(row);}
details.append(el('h3','Assessment'));
details.append(el('p',task.analysis.summary_zh??task.analysis.difficulty,'model-analysis'));
details.append(el('p',`Selection: ${task.analysis.recommendation}. ${task.analysis.rsi_hypothesis}`));
details.append(el('p',task.replay?`Command replay: ${task.replay.passed?'passed':'failed'} · rendered scene: ${task.replay.scene_matched?'matched':'not verified'}`:'Command replay: not run.'));
const links=el('div',undefined,'links');
for(const [k,label]of [['record','Owner state'],['terminal','Native verdict'],['session','Full session'],['usage','Usage audit'],['journal','Owner journal'],['definition','Task YAML'],['media','Video checks']])links.append(link(label+' ↗',root+task.evidence[k]));
if(task.replay)links.append(link('Replay receipt ↗',root+task.evidence.replay));
for(const path of task.media.extra_views)links.append(link('Additional readout video ↗',root+path));details.append(links);
const trace=el('details',undefined,'session-details');trace.append(el('summary','Model conversation & tool I/O'));const body=el('div',undefined,'model-trace');trace.append(body);details.append(trace);
trace.addEventListener('toggle',async()=>{
if(!trace.open||trace.dataset.loaded)return;trace.dataset.loaded='true';body.textContent='Loading conversation…';
try{const r=await fetch(root+task.evidence.trace);if(!r.ok)throw Error('Trace unavailable');const d=await r.json();body.replaceChildren();
for(const m of d.messages){const entry=el('details',undefined,'message');entry.append(el('summary',`${m.role} · ${m.timestamp??''}`),el('pre',JSON.stringify(m.parts,null,2)));body.append(entry);}
}catch(e){body.textContent=e.message;}
});dialog.showModal();
}