File size: 2,742 Bytes
39371ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import {chromium} from 'playwright';
import fs from 'node:fs/promises';
const context=await chromium.launchPersistentContext('../validation/agent-browser-profile/space',{executablePath:'/usr/bin/chromium',headless:true,args:['--enable-unsafe-webgpu','--use-angle=vulkan','--enable-features=Vulkan','--disable-vulkan-surface']});
try {
 const page=await context.newPage();
 page.on('console',m=>{if(m.type()==='error')console.log(m.text().slice(0,1000));});
 await page.goto('https://huggingface.co/spaces/Mike0021/MiniCPM5-2B-WebGPU-Pi');
 await page.waitForTimeout(2000);
 console.log('IFRAMES',await page.locator('iframe').evaluateAll(es=>es.map(e=>({src:e.src,allow:e.allow,sandbox:e.sandbox.value}))));
 const app=page.frames().find(f=>f.url().includes('minicpm5-2b-webgpu-pi.')&&f.url().includes('hf.space'));
 await app.waitForFunction(()=>window.browserPi);await app.evaluate(()=>window.browserPi.ready);
 console.log('NOTICE',await app.locator('#notice').textContent());
 const probes=await app.evaluate(async()=>{
  const probe=async()=>{
   const checks={};
   const check=async(name,fn)=>{try{checks[name]=await fn();}catch(e){checks[name]={name:e.name,message:e.message,stack:e.stack};}};
   await check('opfs',async()=>{const root=await navigator.storage.getDirectory();const h=await root.getFileHandle('probe',{create:true});const w=await h.createWritable();await w.write('probe');await w.close();return (await h.getFile()).size;});
   await check('estimate',()=>navigator.storage.estimate());
   await check('locks',()=>navigator.locks.request('probe',()=>true));
   await check('gpu',async()=>{const a=await navigator.gpu.requestAdapter();return a?{features:[...a.features]}:null;});
   return checks;
  };
  const main=await probe();
  const body='('+probe.toString()+')().then(r=>postMessage(r))';
  const worker=await new Promise((resolve,reject)=>{const w=new Worker(URL.createObjectURL(new Blob([body],{type:'text/javascript'})));w.onmessage=e=>{w.terminate();resolve(e.data)};w.onerror=reject;});
  let access;try{access=await document.hasStorageAccess();}catch(e){access=e.message;}
  return {main,worker,access,policy:document.permissionsPolicy?.allowedFeatures?.()};
 });
 console.log('PROBES',JSON.stringify(probes,null,2));
 try{await app.evaluate(()=>window.browserPi.load());}catch(e){console.log('LOAD',e.message);}
 console.log('DIAGNOSTICS',await app.evaluate(()=>({notice:document.querySelector('#notice').textContent,load:document.querySelector('#load-status').textContent,progress:document.querySelector('#load-detail').textContent,device:window.browserPi.diagnostics.device})));
 await fs.writeFile('../validation/agent-space-diagnose.json',JSON.stringify(probes,null,2));
}finally{await context.close();}