OpenAI Decisions API (preview): класифікація і роутинг у bulk-зображеннях Bubble через BIAIG
Де в async-пайплайні поставити gate перед записом у каталог, як не перезапускати весь generation batch при retry, і чому сьогодні Batch + Moderation — документований fallback, а Decisions — гіпотеза до офіційної специфікації.
Контекст
На DevDay (29.09.2026) OpenAI оголосила Decisions API у обмеженому preview (не GA). За recap у OpenAI Developer Community сервіс на базі Luna класифікує вхід, маршрутизує запит або обирає дію з заданого розробником скінченного списку відповідей. TechCrunch (30.09.2026) цитує ідею фіксованого набору опцій (зокрема категорії для зображень) і заявлену низьку затримку при збереженні image understanding; публічної hands-on валідації на старті не було.
Для high-volume batch між генерацією і публікацією в каталозі це потенційний шар: policy, NSFW, brand drift — до commit. Ця нота доповнює лінію async batch + public URL результатів; не дублює статті про Batch API vs Flare чи vendor-risk Midjourney/Qwen. Схожий розбір: Qwen-Image-2.1 vs closed models: vendor. Про це окремо: SenseNova U1 Pro і 8K.
Чесно про джерела: публічного API reference для Decisions на момент Scout-pass не знайдено. Затримки (~150 ms у вторинних explainers проти ~1.6 s Luna у пресі), семантика confidence і batch-підтримка — не верифіковані, доки OpenAI не опублікує docs, pricing і список batch endpoints.
Bubble + BIAIG: що можна стверджувати
Публічно biiaImagine™ описує масштабований візуальний контент для каталогів; єдиного публічного spec «Bubble.io ↔ BIAIG» (контракт запису в каталог, idempotency, ідентифікатори bulk-route) Scout не знайшов. Нижче — архітектурна гіпотеза для валідації по внутрішніх BIAIG/Bubble docs, не опис shipped продукту. Про це окремо: Mixboard offline 28.09: експорт промптів. Поруч із цим: Фрагментована ніша bulk-tools: Apify spreadsheet.
Куди вставити класифікацію в пайплайні
Типовий async ланцюг (редакційна модель):
- Bulk generate (Batch
/v1/images/generationsабо ваш bulk-route у BIAIG) → assets на стабільних public URL (OpenAI для moderation batch рекомендує remoteimage_url). - Classify / moderate — окремий batch або sync gate.
- Catalog write лише для рядків зі статусом
approved;quarantine/review— без publish. - Retry regenerate — лише rejected на інший bulk-route (інша модель/профіль промпту), без другого повного job по всьому JSONL. Про це окремо: Китай ВПС і downstream liability. Про це окремо: FLUX 3 Image −50% до.
OpenAI Community (batch multi-step): запити в одному batch незалежні; багатокрокові flows (generate → classify) — послідовні batches у коді оркестратора (Bubble backend, workflow engine, BIAIG worker).
Місце для Decisions (preview), коли з’явиться batch
Якщо /v1/decisions (або еквівалент) потрапить у список batch endpoints з підтримкою image context:
- Питання з вашим label set:
approve_catalog | nsfw_block | policy_violation | brand_drift_retry_alt_route | human_review. - Вхід:
image_url+ опційно metadata (SKU,custom_id, route id). - Вихід (очікувано з анонсів, не контракт): обрана відповідь + confidence — пороги задаєте ви.
Brand drift і кастомна policy не покриваються фіксованими категоріями Moderation — тут Decisions (або Structured Outputs / Luna) логічніші, якщо preview стабілізується.
Документований fallback сьогодні: Batch + Moderation
Batch API підтримує /v1/moderations з omni-moderation-latest, multimodal image_url, custom_id на рядок. Moderation docs: flagged, categories, category_scores; sync endpoint позиціонують як безкоштовний — зручно для high-volume harm/safety gate.
Обмеження: категорії OpenAI-defined, не ваш brand checklist. Для drift лишаються окремі кроки (інший batch, інший API) або людський review.
Роутинг retry без другого повного generation job
Патерн, узгоджений з batch-семантикою:
| Крок | Дія |
|---|---|
| G1 | Generation batch; кожен рядок: custom_id = стабільний ключ каталогу (рядок/SKU). |
| C1 | Classification/moderation batch; той самий custom_id; URL з G1. |
| Merge | У Bubble/BIAIG state: approved, retry_route_B, quarantine. |
| G2 | Новий JSONL лише з custom_id, де retry_route_B; інший bulk-route id у тілі запиту. |
| C2 | Повторна класифікація лише для G2. |
Idempotency: успішні assets з G1 не дублюйте в G2. Catalog write — один раз на custom_id після фінального approved.
Операційні ризики (з Scout): TTL/private URL ламають classify batch; помилкові пороги → off-brand publish; preview API — breaking changes; sequential batches — складніший cost accounting.
Практичний чеклист для Bubble-розробника
- Зафіксуйте контракт до catalog commit (internal BIAIG): які поля блокують publish.
- Зберігайте
custom_idend-to-end (generate → classify → retry). - Документуйте bulk-route як tuple (provider, model, prompt profile) — retry = зміна route, не новий «повний» job по всьому каталогу.
- Production gate зараз: Batch moderations для NSFW/harm; custom labels — окремий шар + human queue для preview-моделей.
- Decisions — pilot на підмножині traffic, поки немає official schema, pricing і batch support.
Відкриті питання (не вирішуйте в статті як факт)
- Чи Decisions у Batch, ліміти image JSONL, abstain/unknown.
- Pricing vs безкоштовні batch moderations.
- Перетин «safety protections» Decisions з Moderation для кастомних labels.
- Пороги false positive/negative для catalog scale і обов’язковість human review у preview.

Джерела: DevDay community recap, TechCrunch, OpenAI Batch/Moderation docs, OpenAI Community (multi-step batch), вторинні explainers (The New Stack, Vercel) — latency/confidence з останніх трактувати як неперевірені.