Skip to Content
ГенерацияОчередь и polling

Асинхронная очередь

Submit возвращает requestId сразу. Прогресс — через polling каждые 2 секунды.

Полный код

const NA_API_KEY = process.env.NA_API_KEY const BASE = 'https://api.neuroartist.ru' async function runAsync(modelId, input) { // 1. Submit const submit = await fetch(`${BASE}/queue/${modelId}`, { method: 'POST', headers: { Authorization: `Bearer ${NA_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify(input) }).then(r => r.json()) if (!submit.requestId) throw new Error(`Submit failed: ${submit.message ?? submit.code}`) // 2. Poll until terminal state while (true) { const status = await fetch( `${BASE}/queue/${modelId}/requests/${submit.requestId}/status`, { headers: { Authorization: `Bearer ${NA_API_KEY}` } } ).then(r => r.json()) if (status.state === 'completed') break if (status.state === 'failed') throw new Error(status.error ?? 'Generation failed') await new Promise(r => setTimeout(r, 2000)) } // 3. Fetch result return fetch( `${BASE}/queue/${modelId}/requests/${submit.requestId}`, { headers: { Authorization: `Bearer ${NA_API_KEY}` } } ).then(r => r.json()) } const result = await runAsync('flux/dev', { prompt: 'editorial portrait', image_size: 'portrait_4_3' }) console.log(result.images[0].url)

Эндпоинты в очереди

  • POST /queue/{modelId} — отправляет задачу, возвращает requestId.
  • GET /queue/{modelId}/requests/{id}/status — статус: in_queuein_progresscompleted | failed.
  • GET /queue/{modelId}/requests/{id} — финальный результат, можно перечитывать.
  • PUT /queue/{modelId}/requests/{id}/cancel — отмена с возвратом средств.

Параллельные запросы

const ids = await Promise.all([ submit({ prompt: 'red flower' }), submit({ prompt: 'blue flower' }), submit({ prompt: 'yellow flower' }) ]) const results = await Promise.all(ids.map(waitForCompletion))

Отмена

curl -X PUT https://api.neuroartist.ru/queue/flux/dev/requests/req_abc/cancel \ -H "Authorization: Bearer na_live_xxxx"

Деньги возвращаются (refund-транзакция).

Дальше