export function gpuStatus(jobs, health, upscales=[], musicJobs=[]) { if (!health) return {label:'Status unavailable',tone:'unknown',detail:'Checking GPU connection…'} const upscale=upscales.find(j=>j.status==='running') if(upscale)return {label:'Upscaling',tone:'busy',detail:upscale.name || 'Video upscale'} const music=musicJobs.find(j=>['waiting','running','held'].includes(j.status) || j.live?.status==='running' || j.live?.musicActivity?.running) if(music){ const stage=music.live?.message || music.live?.stage || music.waitReason || 'YuE2' return {label:music.status==='waiting'?'Queued':'Generating',tone:'busy',detail:String(stage)} } if(health.yue2?.busy)return {label:'Generating',tone:'busy',detail:'YuE2 is using the GPU'} const job=jobs.find(j=>['waking','enhancing','submitting','rendering','saving'].includes(j.state)) if(job)return {label:{waking:'Waking up',enhancing:'Enhancing prompt…',submitting:'Submitting',rendering:'Generating…',saving:'Saving'}[job.state],tone:'busy',detail:job.request?.promptSections?.action || 'Generation in progress'} if(health.comfy?.busy || health.imageComfy?.busy)return {label:'Busy',tone:'busy',detail:'GPU is working on another job'} if(health.comfy?.ok || health.imageComfy?.ok)return {label:'Ready',tone:'ready',detail:'No job running'} if(health.comfy?.asleep)return {label:'Sleeping',tone:'sleeping',detail:'Wakes when a job starts'} return {label:'Offline',tone:'unknown',detail:'GPU connection unavailable'} }