Add sidecar Qwen VL prompt recommend, fix queued shot bursts, and leave unused MiniMax identity slots empty.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { promptComfyConfigured, createPromptJob, runPromptRecommend, failPromptJob, promptJobSnapshot } from '~/server/utils/promptComfy'
|
||||
import { getPromptPreset } from '~/server/utils/promptPresets'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
if (!promptComfyConfigured()) {
|
||||
throw createError({
|
||||
statusCode: 503,
|
||||
statusMessage: 'Sidecar Qwen VL is not configured. Set IMAGE_COMFY_HOST.'
|
||||
})
|
||||
}
|
||||
|
||||
const form = await readMultipartFormData(event).catch(() => null)
|
||||
if (!form?.length) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'Expected an image and a draft prompt' })
|
||||
}
|
||||
|
||||
const fields: Record<string, string> = {}
|
||||
let image: { filename: string; data: Buffer; type?: string } | null = null
|
||||
for (const part of form) {
|
||||
if (part.name === 'image' && part.filename && part.data?.length) {
|
||||
image = { filename: part.filename, data: part.data, type: part.type }
|
||||
} else if (part.name && part.data) {
|
||||
fields[part.name] = part.data.toString('utf8')
|
||||
}
|
||||
}
|
||||
|
||||
if (!image) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'Load a still before recommending a prompt' })
|
||||
}
|
||||
const draftPrompt = (fields.prompt || '').trim()
|
||||
if (!draftPrompt) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'Type a draft prompt to enhance' })
|
||||
}
|
||||
|
||||
const owner = libraryOwnerKey(event)
|
||||
const preset = getPromptPreset(owner, fields.presetId || 'enhance')
|
||||
const mode = ['edit', 'shot-script', 'video'].includes(fields.mode) ? fields.mode : 'video'
|
||||
const job = createPromptJob()
|
||||
|
||||
void runPromptRecommend(job, {
|
||||
image,
|
||||
draftPrompt,
|
||||
systemPrompt: preset.systemPrompt,
|
||||
mode
|
||||
}).catch(error => failPromptJob(job, error))
|
||||
|
||||
return promptJobSnapshot(job)
|
||||
})
|
||||
Reference in New Issue
Block a user