webgpu-cluster / docs /assets /VideoFrameDescriber-C4moYDWf.js
apssouza22's picture
Deploy: refresh Space build (landing + docs)
9210bde verified
Raw
History Blame Contribute Delete
1.65 kB
class s{worker;pending=new Map;nextId=0;ready;readySettled=!1;resolveReady;rejectReady;onStatus;constructor(e,t){this.worker=e,this.onStatus=t,this.ready=new Promise((r,i)=>{this.resolveReady=r,this.rejectReady=i}),this.worker.addEventListener("message",r=>{this.handleMessage(r.data)}),this.worker.addEventListener("error",r=>{this.failReady(new Error(r.message||"Video description worker failed"))}),this.worker.postMessage({type:"init"})}static async create(e){const t=new Worker(new URL("/assets/videodescription.worker-DxI5fLxy.js",import.meta.url),{type:"module"}),r=new s(t,e);return await r.ready,r}async warmup(e,t="What do you see?"){await this.describe(e,{instruction:t})}async describe(e,t){await this.ready;const r=this.nextId++;return new Promise((i,d)=>{this.pending.set(r,{resolve:i,reject:d}),this.worker.postMessage({type:"describe",id:r,instruction:t.instruction,maxNewTokens:t.maxNewTokens??100,frame:e},[e])})}dispose(){for(const{reject:e}of this.pending.values())e(new Error("Video description worker terminated"));this.pending.clear(),this.worker.terminate()}handleMessage(e){if(e.type==="status"){this.onStatus?.(e.message);return}if(e.type==="ready"){this.readySettled||(this.readySettled=!0,this.resolveReady());return}if(e.type==="describe-result"){const t=this.pending.get(e.id);t&&(this.pending.delete(e.id),t.resolve(e.description));return}if(e.type==="error"){const t=new Error(e.error);if(e.id!==void 0){const r=this.pending.get(e.id);r&&(this.pending.delete(e.id),r.reject(t));return}this.failReady(t)}}failReady(e){this.readySettled||(this.readySettled=!0,this.rejectReady(e))}}export{s as VideoFrameDescriber};