BabyChain — self-hosted канвас-студия для цепочек AI-моделей. Проектируйте workflow визуально, вызывайте через API. Установка за час. Apache-2.0.
Если вы когда-нибудь собирали цепочку из нескольких AI-моделей (например, генерация изображения → image-to-video → рефайн), то знаете: визуальные тулы вроде ComfyUI отлично подходят для экспериментов, но превратить такой workflow в продакшен-API — отдельная боль. BabyChain решает эту проблему: вы рисуете цепочку на канвасе, а затем вызываете её из бэкенда одним POST-запросом. Всё состояние сохраняется в AWS Aurora, функции Vercel остаются stateless. И да, это open-source под Apache-2.0.
Основная идея: каждый выход становится следующим входом. Вы проектируете граф на канвасе, сохраняете его, а затем любой клиент с API-ключом может запустить выполнение цепочки. Сервер сам ходит к провайдерам моделей (Black Forest Labs, Runway, Alibaba Cloud, Google, OpenAI, BytePlus), передаёт ключи из окружения (BYOK) и сохраняет каждый шаг в Aurora. Никакого состояния в браузере или в лямбде — только база данных.
Наивный подход — держать всю цепочку в одной функции — умирает при первых же минутах ожидания в очереди провайдера. BabyChain делает иначе: база данных — единственное место, где живёт состояние. Каждая Vercel-функция продвигает ровно один шаг и завершается. Любой инстанс может подхватить любой запуск с середины.
# Пример: создание запуска цепочки через API
POST /api/v1/chains/runs
{
"chain_id": "clx...",
"inputs": {
"prompt": "a cat in space"
},
"webhook_url": "https://myapp.com/callback"
}
Созданный запуск сразу сохраняется в Aurora вместе со всеми шагами. Первый готовый шаг может быть выполнен немедленно, но ответ возвращается без ожидания всей цепочки. Клиент опрашивает статус через GET /api/v1/chains/get/{runId}, и каждый опрос продвигает ровно один шаг.
Схема базы данных содержит семь таблиц в схеме babychain_private. Ключевые — chain_run (жизненный цикл запуска), chain_step (упорядоченные шаги с параметрами и результатами), canvas (сохранённые графы в jsonb), api_key (хеши ключей с правами).
Две важные детали реализации:
queued только через UPDATE с условием WHERE status = 'queued'. Это гарантирует, что при сбое одного шага все downstream-шаги будут помечены как skipped без конфликтов с параллельными вызовами.Генеративный медиа-контент дорог, поэтому повторные вызовы не должны умножать расходы. BabyChain обеспечивает идемпотентность на трёх уровнях:
Idempotency-Key сохраняется в таблице chain_run с уникальным ограничением. Повторный запрос возвращает тот же запуск без новых вызовов провайдеров.callback_delivery, чтобы два инстанса не отправили один и тот же callback.Редактор на React Flow с автсохранением прошёл три итерации, чтобы стать надёжным:
Результат: можно изменить промпт, выйти из аккаунта, зайти на другом устройстве — правка уже там. Закрыть вкладку во время выполнения — запуск продолжится, потому что он никогда не был в браузере.
Шесть провайдеров, 57 моделей, 78 948 валидных комбинаций. И ни один провайдер не согласен на то, что значит «дай мне картинку 16:9». Самая глубокая кроличья нора — Alibaba DashScope: у каждой модели свои правила размеров, нигде не документированные.
# Пример: вычисление размера для модели с бюджетом пикселей
import math
def fit_to_budget(w, h, budget):
"""Масштабирует изображение под бюджет пикселей, сохраняя соотношение сторон"""
scale = math.sqrt(budget / (w * h))
W = math.floor(scale * w / 16) * 16
H = math.floor(scale * h / 16) * 16
return W, H
Для моделей с фиксированными размерами используется таблица соответствия — неправильные размеры физически не могут быть отправлены. Такой же эмпирический подход применён к Runway (попиксельные соотношения на эндпоинт), OpenAI (перманентные 429 как скрытые лимиты квоты) и BFL (URL изображений истекают через 10 минут — UI честно показывает статусы загрузки).
Структурное решение: карточки узлов на канвасе генерируются из схем Semantic Lady — полей, enum-опций, диапазонов, дефолтов. UI не может предложить параметр, который API отвергнет, потому что оба являются проекциями одного источника правды.
BabyChain построен на инвариантах времени выполнения, а не на оптимистичных сценариях. Цепочка должна чисто падать, возобновляться после прерванной функции, отклонять невалидные роли моделей и нормализованные входы до отправки, сохранять состояние канваса даже при внезапном закрытии браузера.
# Проверенные сценарии
# 1. Шаг падает -> запуск завершается, downstream шаги помечаются skipped
# 2. Инстанс функции умирает -> следующий опрос возобновляет запуск из Aurora
# 3. Клиент повторяет create -> тот же запуск, нулевой дополнительный расход
# 4. Закрытие вкладки -> sendBeacon, канвас цел после перелогина
# 5. Пробуждение Aurora -> 30-секундный бюджет соединения поглощает задержку
Текущий проект включает 237 тестов, покрывающих runner, адаптеры провайдеров, шаблоны, поведение API, миграции, идемпотентность, callback и правила схемы.
Если вы хотите превратить визуальный workflow AI-моделей в продакшен-инфраструктуру — не пишите клей. Установите BabyChain за час, нарисуйте цепочку на канвасе и вызывайте её через API. Репозиторий на GitHub, лицензия Apache-2.0, всё готово к деплою на Vercel + Aurora.
Прямо сейчас: git clone https://github.com/babysea-community/babychain.git, следуйте README и запустите свою первую цепочку. Через час у вас будет работающий durable API для генерации медиа.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →