StageFlow¶
Фреймворк описания и исполнения пайплайнов, заданных JSON: граф узлов,
пользовательские стадии, иммутабельный фрейм данных, CEL-выражения, retry
и блочный try/except, параллельные ветки, циклы по списку,
вложенные пайплайны и лимиты на всё это для каждого тенанта.
Требуется Python 3.11+ (его требует CEL-байндинг common-expression-language).

На картинке — редактор: отдельная веб-страница, которая рисует и отлаживает граф, пока ядро его исполняет.
С чего начать¶
Впервые здесь? Туториал собирает рабочий пайплайн шаг за шагом, со скриншотами из редактора. А когда пайплайны пишете уже не вы, понадобится вторая половина — Свой бэкенд: ваши стадии за HTTP-контрактом и политика, которая решает, что из них разрешено собрать и сколько это может израсходовать.
| Страница | О чём |
|---|---|
| Быстрый старт | установка, своя стадия, запуск пайплайна |
| Типы узлов | девять типов узлов и их поля |
| Модель данных | фрейм, бакеты аргументов, выходы |
| Выражения | CEL, суффикс .$, namespace vars |
Свой бэкенд¶
Редактор не исполняет ничего: ваши стадии живут на вашем бэкенде. Пять шагов разбирают бэкенд-пример в том порядке, в каком его писали.
| Страница | О чём |
|---|---|
| Что такое бэкенд | кто за что отвечает и что мы собираем |
| 1. Ваши стадии | register_stage, спецификации, аргументы, события, стриминг |
| 2. Эндпоинты | семь эндпоинтов, настоящая Session, SSE, CORS |
| 3. Что разрешено собирать | своя Policy на каждый вызов и как предупредить редактор |
| 4. Во что обходится прогон | reserve:, charge(), собственные счётчики |
| 5. Чей это запрос | тарифы, ключ доступа и где стоит проверка |
Справочник¶
| Страница | О чём |
|---|---|
| Узел entry | начало графа и переменные старта |
| Узел stage | аргументы, выходы, consume |
| Узел condition | развилка по CEL-выражению |
| Узел switch | много дорог, первый подошедший case |
| Узел parallel | конкурентность, слияние, отмена |
| Узел try | область графа под except |
| Узел map | область графа, исполняемая по разу на элемент |
| Узел subpipeline | вложенный граф и его граница |
| Узел terminal | конец прогона, result и артефакты |
| Ошибки | retry, путь ошибки, исключения ядра |
| Политика | ограничение стадий и типов узлов для пайплайна |
| Лимиты | счётчики, бюджет, что тратит стадия |
| Типизация переменных | постепенная типизация, две линии проверок |
| Локализация | ответ на языке вызывающего, проза стадий по локалям |
| Управление сессией | стоп, пауза, ввод, снапшоты |
| Пошаговая отладка | остановка между узлами, правка фрейма |
| Встроенные стадии | что идёт в комплекте |
| Спецификация стадии | контракт в YAML-докстроке |
| Схема и спецификации | JSON Schema и метаданные для редактора |
Разработка¶
| Страница | О чём |
|---|---|
| Релизы | публикация на PyPI по тегу |
Исходники и задачи: github.com/leo-need-more-coffee/stageflow