import { checkComfyHttp, fetchQueue } from '~/server/utils/comfyLifecycle' import { comfyConfigured } from '~/server/utils/comfy' import { imageComfyConfigured, getBeastImageHost, getSidecarImageHost, sameImageHost } from '~/server/utils/imageComfy' import { checkImageComfyHttp, fetchQueueAt } from '~/server/utils/imageComfyLifecycle' export default defineEventHandler(async () => { const videoConfigured = comfyConfigured() const imageConfigured = imageComfyConfigured() const beastHost = getBeastImageHost() const promptHost = getSidecarImageHost() const promptIsBeast = Boolean(promptHost && beastHost && sameImageHost(promptHost, beastHost)) const [comfy, queue, beast, beastQueue, prompt, promptQueue] = await Promise.all([ videoConfigured ? checkComfyHttp().catch(() => ({ ok: false, host: '', stats: null })) : Promise.resolve({ ok: false, host: '', stats: null }), videoConfigured ? fetchQueue() : Promise.resolve({ running: 0, pending: 0 }), beastHost ? checkImageComfyHttp(2500, beastHost).catch(() => ({ ok: false, host: beastHost, stats: null })) : Promise.resolve({ ok: false, host: beastHost, stats: null }), beastHost ? fetchQueueAt(beastHost) : Promise.resolve({ running: 0, pending: 0 }), promptHost && !promptIsBeast ? checkImageComfyHttp(2500, promptHost).catch(() => ({ ok: false, host: promptHost, stats: null })) : Promise.resolve({ ok: false, host: promptHost, stats: null }), promptHost && !promptIsBeast ? fetchQueueAt(promptHost) : Promise.resolve({ running: 0, pending: 0 }) ]) const busy = Boolean(comfy.ok && queue.running > 0) const beastBusy = Boolean(beast.ok && beastQueue.running > 0) const promptOk = promptIsBeast ? Boolean(beast.ok || comfy.ok) : Boolean(prompt.ok) const promptBusy = promptIsBeast ? (beastBusy || busy) : Boolean(prompt.ok && promptQueue.running > 0) const imageOk = Boolean(beast.ok || comfy.ok) const imageBusy = Boolean(imageConfigured && (beastBusy || busy)) const preferredHost = beastHost || comfy.host || '' const promptQueueRunning = promptIsBeast ? ((beastQueue.running || queue.running) || 0) : (promptQueue.running || 0) const promptQueuePending = promptIsBeast ? ((beastQueue.pending || queue.pending) || 0) : (promptQueue.pending || 0) return { ok: true, service: useRuntimeConfig().public.instanceName || 'aigen', comfy: { ok: comfy.ok, busy, host: comfy.host || '', queueRunning: queue.running, queuePending: queue.pending, stats: comfy.ok ? comfy.stats : undefined }, imageComfy: { configured: imageConfigured, ok: imageOk, busy: imageBusy, host: preferredHost, box: imageOk ? 'beast' : '', queueRunning: (beastQueue.running || queue.running) || 0, queuePending: (beastQueue.pending || queue.pending) || 0, beast: { label: 'Beast', configured: Boolean(beastHost), ok: Boolean(beast.ok || comfy.ok), busy: beastBusy || busy, host: preferredHost }, sidecar: { label: 'Qwen VL', configured: Boolean(promptHost), ok: promptOk, busy: promptBusy, host: promptHost, queueRunning: promptQueueRunning, queuePending: promptQueuePending } } } })