Collapsed collection actions now move, rename, delete, and rerun every part so chains stay together. Identity mode follows the v2u3 Ref2VA picture wiring. Co-authored-by: Cursor <cursoragent@cursor.com>
70 lines
3.2 KiB
TypeScript
70 lines
3.2 KiB
TypeScript
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 sidecarHost = getSidecarImageHost()
|
|
const [comfy, queue, beast, beastQueue, sidecar, sidecarQueue] = 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 }),
|
|
sidecarHost && (!beastHost || !sameImageHost(beastHost, sidecarHost))
|
|
? checkImageComfyHttp(2500, sidecarHost).catch(() => ({ ok: false, host: sidecarHost, stats: null }))
|
|
: Promise.resolve({ ok: false, host: sidecarHost, stats: null }),
|
|
sidecarHost && (!beastHost || !sameImageHost(beastHost, sidecarHost))
|
|
? fetchQueueAt(sidecarHost)
|
|
: Promise.resolve({ running: 0, pending: 0 })
|
|
])
|
|
const busy = Boolean(comfy.ok && queue.running > 0)
|
|
const beastBusy = Boolean(beast.ok && beastQueue.running > 0)
|
|
const sidecarBusy = Boolean(sidecar.ok && sidecarQueue.running > 0)
|
|
const sidecarConfigured = Boolean(sidecarHost && (!beastHost || !sameImageHost(beastHost, sidecarHost)))
|
|
const imageOk = Boolean(beast.ok || sidecar.ok)
|
|
const imageBusy = Boolean(imageConfigured && ((beastBusy && (!sidecarConfigured || sidecarBusy || !sidecar.ok)) || (!beast.ok && sidecarBusy)))
|
|
const preferredHost = beast.ok && !beastBusy ? beastHost : (sidecar.ok ? sidecarHost : beastHost)
|
|
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: beast.ok && !beastBusy ? 'beast' : (sidecar.ok ? 'sidecar' : (beast.ok ? 'beast' : '')),
|
|
queueRunning: (beast.ok && !beastBusy ? beastQueue.running : sidecarQueue.running) || 0,
|
|
queuePending: (beast.ok && !beastBusy ? beastQueue.pending : sidecarQueue.pending) || 0,
|
|
beast: {
|
|
label: 'Beast',
|
|
configured: Boolean(beastHost),
|
|
ok: Boolean(beast.ok),
|
|
busy: beastBusy,
|
|
host: beastHost || ''
|
|
},
|
|
sidecar: {
|
|
label: 'Sidecar',
|
|
configured: sidecarConfigured,
|
|
ok: Boolean(sidecar.ok),
|
|
busy: sidecarBusy,
|
|
host: sidecarHost || ''
|
|
}
|
|
}
|
|
}
|
|
})
|