Все ноды/Logic & Flow/Synchronization

Дождаться всех

Ждёт завершения активных входящих веток и продолжает поток. Учитывает только реально исполняемые связи (skipped switch-ветки не блокируют). Агрегирует данные согласно merge_mode (first / last / merge). stream_through пробрасывает токены стримящих веток сразу в exit, не дожидаясь барьера (значение всё равно собирается по merge_mode).

Дождаться всех
Run inputsResult

Тип в графе: wait_all

Exec

Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

Как попробовать

Минимальный рабочий воркфлоу

Вход
Дождаться всех
Выход
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Запускается сразу

Как применять

Барьер. Берите его, когда несколько веток идут параллельно, а следующий шаг должен начаться только после того, как отработают все — например, два независимых запроса к модели, ответы которых нужны вместе.

Второй повод — требование валидатора. Если две ветки, способные сработать в одном и том же запуске, приходят в один вход, граф не пройдёт проверку: значение той, что пришла раньше, молча перезаписывается той, что пришла позже. Барьер разводит эту гонку.

Барьер не нужен для взаимоисключающих веток (две ветви одного if, on_success и on_error одной ноды): сработает ровно одна, и нода ниже запустится сама, получив её значение. Если ветки дают реплики диалога, посмотрите на messages, если ранжированные списки чанков — на rrf_fusion; это тоже барьеры, но со своим способом сборки результата.

Как это работает

Все входящие связи подключаются к одному порту «Run inputs» — отдельного порта на каждую ветку заводить не нужно. Нода срабатывает, когда ни одна из подключённых веток больше не находится в работе. Пропущенная ветка (не взятая ветвь if или switch) считается разрешённой и барьер не держит. Упавшая — тоже: барьер не будет ждать её вечно, он продолжит с теми значениями, что дошли, а сам сбой отразится на статусе запуска.

Что окажется на выходе, решает «Режим слияния»: first — значение ветки, закончившей первой, last — закончившей последней, merge — список всех пришедших значений. Порядок в списке — порядок завершения веток, а не порядок, в котором вы рисовали связи.

Частые ошибки

  • Связь из ноды, стоящей после барьера, обратно в барьер. Барьер начинает ждать сам себя и не сработает никогда; валидация останавливает такой граф как цикл исполнения. Для повторяющихся проходов есть while_loop.
  • first читают как «верхнюю ветку». Это ветка, которая закончилась раньше остальных, — на параллельных вызовах модели победитель меняется от запуска к запуску. Нужен конкретный источник — берите merge и обращайтесь к элементу по индексу: {{ nodes.<id>.output[0] }}.
  • Ответ перестаёт печататься по мере генерации. Токены модели, идущей в барьер, по умолчанию накапливаются и приходят в чат одним куском в конце. Включите «Пробрасывать стриминг» — работает, когда сразу за барьером идёт exit.

Входы

ПортПроводДанныеПримечания
Run inputsbarrier_inИсполнение + данныеexecute_data

несколько связей

Выходы

ПортПроводДанныеПримечания
ResultoutputИсполнение + данныеexecute_data

Настройки

ПолеТипПо умолчаниюОписание
Режим слиянияmerge_modestringfirst

Как агрегировать значения из активных входящих связей: 'first' — первое пришедшее значение, 'last' — последнее пришедшее значение, 'merge' — список всех пришедших значений (в порядке прибытия).

Варианты: first, last, merge

Пробрасывать стримингstream_throughbooleanfalse

Пропускать токены стримящих веток мимо барьера — сразу в чат, не дожидаясь остальных входов. Барьер по-прежнему собирает значение по merge_mode, но ответ печатается по мере генерации. Работает, только если после барьера идёт exit (через цепочку таких же барьеров). Несколько одновременных стримов попадут в один пузырь чата и перемешаются — валидатор об этом предупредит.

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.