|
24 | 24 | <details><summary>Dowody treningu i ostatnie błędy</summary><pre id="evidence"></pre></details> |
25 | 25 | <script> |
26 | 26 | const $=id=>document.getElementById(id), fmt=x=>x===null||x===undefined?'brak potwierdzonych danych':String(x), pct=x=>typeof x==='number'&&Number.isFinite(x)?(x*100).toFixed(2)+'%':'brak danych'; |
27 | | -const layoutVersion='__LAYOUT_SHA__'; |
| 27 | +const layoutVersion='__LAYOUT_SHA__';let latestSnapshot=null; |
28 | 28 | function card(label,value){const node=document.createElement('div');node.className='card';const title=document.createElement('small');title.textContent=label;const strong=document.createElement('strong');strong.className='value';strong.textContent=fmt(value);node.append(title,strong);$('cards').append(node)} |
29 | 29 | function workView(data){ |
30 | 30 | for(const id of ['actors','goals','events']){if(!$(id)){const node=document.createElement(id==='goals'?'pre':'div');node.id=id;if(id==='actors')node.className='grid';$('cards').after(node)}} |
|
51 | 51 | const plansPanel=panel('plan-panel','Mission plan',$('cards'));let planGrid=$('plan-grid');if(!planGrid){planGrid=document.createElement('div');planGrid.id='plan-grid';planGrid.className='plan-grid';plansPanel.append(planGrid)}planGrid.replaceChildren(); |
52 | 52 | for(const [key,label] of [['long','Long-term goal'],['mid','Medium-term plan'],['short','Next steps']]){const box=document.createElement('article');box.className='plan-item';const h=document.createElement('h3');h.textContent=label;box.append(h);const p=document.createElement('p');p.textContent=data.live?.goals?.[key]?.text||'No recorded plan';box.append(p);planGrid.append(box)} |
53 | 53 | const resources=panel('resource-panel','Compute resources',plansPanel);resources.append($('actors'));$('actors').className='resource-grid'; |
54 | | -const agents=panel('agent-panel','Agent activity - tasks, decisions and evidence',resources);let grid=$('agent-grid');if(!grid){const note=document.createElement('p');note.className='muted';note.textContent='Recorded public output, tool results and token counts. Counts and opted-in local model reasoning arrive after a response finishes. Model reasoning is unverified, not evidence of execution.';grid=document.createElement('div');grid.id='agent-grid';agents.append(note,grid)} |
| 54 | +const agents=panel('agent-panel','Agent activity - tasks, decisions and evidence',resources);let grid=$('agent-grid');if(!grid){const note=document.createElement('p');note.className='muted';note.textContent='Recorded public output, tool results and token counts. Opted-in local output and reasoning stream during inference. Measured token counts arrive at completion. Model reasoning is unverified, not evidence of execution.';grid=document.createElement('div');grid.id='agent-grid';agents.append(note,grid)} |
55 | 55 | grid.replaceChildren(); |
56 | 56 | for(const a of data.live?.agents||[]){const node=document.createElement('article');node.className='agent-row';const head=document.createElement('header');const h=document.createElement('h3');h.textContent=a.label;const badge=document.createElement('span');badge.className='state-badge';badge.textContent=a.state||'unknown';head.append(h,badge);node.append(head); |
57 | 57 | textField(node,'Model / device',[a.model,a.device].filter(Boolean).join(' / ')); |
58 | 58 | const u=a.usage||{};textField(node,'Last response tokens',Object.keys(u).length?`Input ${fmt(u.prompt_tokens)} | Output ${fmt(u.completion_tokens)} | Total ${fmt(u.total_tokens)} | recorded ${a.usage_at||''}`:'Not reported for this actor'); |
59 | 59 | textField(node,'Duration',a.seconds===undefined?null:a.seconds+' s'); |
60 | 60 | detailsField(node,'Assigned task',a.task,a.label+'-task');textField(node,'Tool',a.tool); |
61 | | -detailsField(node,'Returned local model reasoning (unverified)',a.returned_trace,a.label+'-trace');detailsField(node,'Public conclusion and next step',a.declaration,a.label+'-output');detailsField(node,'Observed result / error',a.result,a.label+'-result');detailsField(node,'Evidence',a.source,a.label+'-source');textField(node,'Last event',typeof a.updated==='number'?new Date(a.updated*1000).toLocaleString():a.updated);grid.append(node)} |
| 61 | +detailsField(node,'Live partial output - latest recorded window',a.stream_output,a.label+'-live-output');detailsField(node,'Live local reasoning - latest recorded window',a.stream_reasoning,a.label+'-live-trace');detailsField(node,'Returned local model reasoning (unverified)',a.returned_trace,a.label+'-trace');detailsField(node,'Public conclusion and next step',a.declaration,a.label+'-output');detailsField(node,'Observed result / error',a.result,a.label+'-result');detailsField(node,'Evidence',a.source,a.label+'-source');textField(node,'Last event',typeof a.updated==='number'?new Date(a.updated*1000).toLocaleString():a.updated);grid.append(node)} |
62 | 62 | if(!grid.children.length)textField(grid,'Activity','No recent recorded agent events'); |
63 | 63 | const timeline=panel('timeline-panel','Action timeline - latest 200 recorded events',agents);timeline.append($('events'));$('events').replaceChildren(); |
64 | | -for(const e of [...(data.live?.events||[])].reverse()){const d=document.createElement('details');d.className='event-row';d.dataset.key=(e.request_id||e.time)+'-'+e.actor+'-'+e.kind;const h=document.createElement('summary');h.textContent=[e.time,e.branch,e.actor,e.kind,e.tool].filter(Boolean).join(' | ');d.append(h);textField(d,'Returned local reasoning (unverified)',e.returned_trace);textField(d,'Task / arguments',e.task);textField(d,'Public output / result',e.summary);textField(d,'Error / status',e.detail);if(e.usage&&Object.keys(e.usage).length)textField(d,'Tokens',JSON.stringify(e.usage));textField(d,'Seconds',e.seconds);textField(d,'Evidence',e.source);$('events').append(d)} |
| 64 | +for(const e of [...(data.live?.events||[])].reverse()){const d=document.createElement('details');d.className='event-row';d.dataset.key=(e.request_id||e.time)+'-'+e.actor+'-'+e.kind;const h=document.createElement('summary');h.textContent=[e.time,e.branch,e.actor,e.kind,e.tool].filter(Boolean).join(' | ');d.append(h);textField(d,'Live delta',e.delta_text);textField(d,'Returned local reasoning (unverified)',e.returned_trace);textField(d,'Task / arguments',e.task);textField(d,'Public output / result',e.summary);textField(d,'Error / status',e.detail);if(e.usage&&Object.keys(e.usage).length)textField(d,'Tokens',JSON.stringify(e.usage));textField(d,'Seconds',e.seconds);textField(d,'Evidence',e.source);$('events').append(d)} |
65 | 65 | for(const n of document.querySelectorAll('details[data-key]'))if(opened.has(n.dataset.key))n.open=true; |
66 | 66 | } |
67 | 67 | function archivePanel(){ |
|
73 | 73 | } |
74 | 74 | function learningPanel(data){const p=panel('goal-learning-panel','Goal-directed ML pipeline',$('plan-panel'));let body=$('goal-learning-view');if(!body){body=document.createElement('div');body.id='goal-learning-view';p.append(body)}body.replaceChildren();const evidence=data.report?.mission_evidence||{},g=evidence.goal_learning||{};textField(body,'Active goal ID',g.goal_id||'No goal recorded');for(const [k,v] of Object.entries(g.learning_task||{}))textField(body,k,v);textField(body,'Recent forecasts',fmt(g.forecasts?.length));textField(body,'Recent resolved forecasts',g.recent_resolved);textField(body,'Recent Brier score',g.recent_brier);textField(body,'Admitted training examples',g.training_admission?.admitted);textField(body,'Confirmed optimizer updates',fmt(evidence.optimizer_updates_observed));textField(body,'Accepted weight updates',fmt(evidence.accepted_weight_updates_this_run));detailsField(body,'Training admission evidence',JSON.stringify(g.training_admission||{}),'goal-admission')} |
75 | 75 | function svg(tag,attrs,text){let node=document.createElementNS('http://www.w3.org/2000/svg',tag);for(const [key,val] of Object.entries(attrs))node.setAttribute(key,val);if(text!==undefined)node.textContent=text;return node} |
76 | | -function render(data){const m=data.mission||{},r=data.report||{},ev=(m.state?.phase==='official-public-baseline'?r.mission_evidence?.official_benchmark:null)||m.evaluation||{},learn=m.learning||{},gpu=data.gpu||{}; |
| 76 | +function render(data){latestSnapshot=data;const m=data.mission||{},r=data.report||{},ev=(m.state?.phase==='official-public-baseline'?r.mission_evidence?.official_benchmark:null)||m.evaluation||{},learn=m.learning||{},gpu=data.gpu||{}; |
77 | 77 | if(data.layout?.active_sha256&&layoutVersion!==data.layout.active_sha256){location.reload();return}$('layout').textContent='HTML mastera: /workspace/dashboard/index.html | '+(data.layout?.state||'oczekiwanie')+(data.layout?.error?' | '+data.layout.error:''); |
78 | 78 | $('fresh').textContent='Zebrano: '+new Date(data.collected_at*1000).toLocaleString()+' | Raport zbierany co 20 s | Przebieg: '+fmt(m.run); |
79 | 79 | workView(data);learningPanel(data);archivePanel();$('warning').textContent=(data.errors||[]).join('\n');$('cards').replaceChildren();card('Misja',m.running?'działa':'zatrzymana');card('Faza',m.state?.phase);card('Cykle uczenia',learn.completed_cycles);card('Zaakceptowane aktualizacje wag',r.accepted_weight_updates_this_run);card('Potwierdzone kroki optymalizatora',r.mission_evidence?.optimizer_updates_observed);card('Kontekst',m.state?.context_window);card('GPU - wykorzystanie',gpu.utilization===undefined?null:gpu.utilization+'%');card('VRAM zajęty / razem',gpu.memory_used===undefined?null:gpu.memory_used+' / '+gpu.memory_total+' MiB');card('GPU - temperatura / moc',gpu.temperature===undefined?null:gpu.temperature+' °C / '+gpu.power+' W'); |
|
83 | 83 | $('reports').replaceChildren();for(const id of data.paper_reports||[]){const row=document.createElement('p');row.append(document.createTextNode(id+' '));for(const [name,label] of [['report.html','HTML i wykresy'],['report.json','JSON'],['trades.csv','CSV']]){const a=document.createElement('a');a.href='/paper/'+encodeURIComponent(id)+'/'+name;a.target='_blank';a.rel='noopener';a.textContent=label;row.append(a,document.createTextNode(' · '))}$('reports').append(row)} |
84 | 84 | } |
85 | 85 | async function refresh(){try{let response=await fetch('/api/status',{cache:'no-store'});if(!response.ok)throw Error('HTTP '+response.status);render(await response.json())}catch(error){$('warning').textContent='Nie można odświeżyć: '+error.message}} |
86 | | -$('reload').onclick=refresh;refresh();setInterval(refresh,5000); |
| 86 | +async function liveInference(){if(!latestSnapshot)return;try{const response=await fetch('/api/live-inference',{cache:'no-store'});if(!response.ok)throw Error('HTTP '+response.status);const live=await response.json();agentView({...latestSnapshot,live:{...latestSnapshot.live,events:live.events,agents:[...(live.agents||[]),...(latestSnapshot.live?.agents||[]).filter(a=>a.source==='research/state/drones.sqlite3')]}})}catch(error){$('warning').textContent='Live inference unavailable: '+error.message}} |
| 87 | +async function readinessView(){try{const response=await fetch('/api/readiness',{cache:'no-store'});if(!response.ok)throw Error('HTTP '+response.status);const data=await response.json();const p=panel('readiness-panel','Commissioning evidence',$('goal-learning-panel')||$('plan-panel'));let body=$('readiness-view');if(!body){body=document.createElement('div');body.id='readiness-view';p.append(body)}body.replaceChildren();for(const c of data.checks||[])textField(body,c.name,`${c.state} | ${c.detail} | ${c.source||''}`)}catch(error){$('warning').textContent='Readiness unavailable: '+error.message}} |
| 88 | +$('reload').onclick=refresh;refresh();setInterval(refresh,5000);setInterval(liveInference,2000);setInterval(readinessView,5000); |
87 | 89 | </script></html>""" |
88 | 90 |
|
89 | 91 |
|
|
0 commit comments