Terrastruct открыла код TALA, алгоритма авторазметки диаграмм D2

Terrastruct открыла код TALA, алгоритма авторазметки диаграмм D2

Terrastruct открыла исходный код TALA (Terrastruct's AutoLayout Algorithm), алгоритма автоматической раскладки диаграмм, который компания разрабатывала для своего языка и инструмента D2. Код опубликован под той же лицензией, что и сам D2, MPL-2.0. TALA уже встроен в D2 версии 0.9.0: включить его можно флагом --layout=tala при установке D2, либо опробовать прямо в браузере на play.d2lang.com, который работает полностью на стороне клиента.

TALA, это ортогональный алгоритм раскладки, спроектированный специально под архитектурные диаграммы: он выстраивает связи под прямыми углами, что больше похоже на то, как схемы рисуют на доске, а не на DAG-раскладки (растущие строго в одном направлении), которые дают два других движка D2, Dagre и ELK. Алгоритм сочетает идеи из нескольких научных работ по визуализации графов (ссылки приведены прямо в исходном коде) с собственными наработками команды и одновременно оптимизирует несколько критериев «эстетичности», симметрию, медианную длину связей, направление потока, группировку похожих узлов и другие.

Автор поста показывает три группы примеров. Первая, семь сравнений TALA с Dagre и ELK на реальных публичных D2-файлах из открытых репозиториев на GitHub (не отобранных вручную специально в пользу TALA). Вторая, оригинальные, вымышленные композиции, где демонстрируется уникальная черта TALA: координаты и размеры отдельных узлов можно зафиксировать вручную. По словам автора, это особенно удобно для агентных сценариев: ИИ-модели неплохо расставляют объекты в двумерном пространстве, но всё ещё плохо справляются с прокладкой связей между ними (routing), эту часть работы TALA берёт на себя. Третья группа показывает гибридный режим: часть узлов задаётся координатами вручную, а остальные и все контейнеры автоматически размещает сам движок. Всего во второй и третьей группах, одиннадцать таких композиций, отрисованных TALA.

Автор прямо перечисляет и компромиссы TALA. Во-первых, в алгоритме есть элемент случайности: по умолчанию он перебирает 3 случайных сида и выбирает вариант с лучшей оценкой; при одинаковых сидах и одинаковом входе результат воспроизводится точно, но стоит добавить всего один узел, и вся раскладка может измениться полностью, тогда как Dagre и ELK в такой ситуации почти не меняют прежнюю картину, просто вписывая новый узел (это иногда даже желательно). Во-вторых, TALA хуже справляется с классическими DAG-графами, автор признаётся, что для длинных «текущих» графов сам чаще предпочитает Dagre или ELK. В-третьих, на больших диаграммах TALA может работать заметно дольше, а время выполнения растёт нелинейно; сравнение производительности с другими движками вынесено в отдельный репозиторий d2-benchmarks и в самом тексте поста числами не приводится.

Автор благодарит за существенный вклад в TALA Гэвина Нисидзаву (Gavin Nishizawa) и отдельно, Жулио Сезара Батисту (Júlio César Batista) за работу над алгоритмами иерархии. Дата открытия кода и выхода D2 v0.9.0 в тексте не указана.

Ключевые факты

  • Terrastruct открыла код TALA, алгоритма ортогональной авторазметки диаграмм для D2, под лицензией MPL-2.0, той же, что у самого D2.
  • TALA уже встроен в D2 v0.9.0: подключается флагом --layout=tala или доступен в веб-плеере play.d2lang.com.
  • Уникальная возможность TALA, фиксировать координаты и размеры отдельных узлов вручную и комбинировать это с автоматической раскладкой; автор называет это удобным для агентных сценариев, где модели хорошо расставляют объекты в 2D, но плохо прокладывают связи.
  • У алгоритма есть рандомизация: по умолчанию перебираются 3 сида, и добавление одного узла может полностью изменить всю раскладку, в отличие от Dagre и ELK, которые меняются постепенно.
  • TALA хуже справляется с классическими DAG-графами и медленнее (нелинейно) работает на больших диаграммах по сравнению с Dagre и ELK; численных бенчмарков в самом посте нет, есть ссылка на отдельный репозиторий.

Почему это важно

D2, популярный инструмент для описания диаграмм кодом («diagrams as code»), и до сих пор его фирменный алгоритм авторазметки TALA оставался закрытым, доступным только как часть D2, но не изучаемым и не дорабатываемым сообществом. Публикация кода под MPL-2.0 открывает движок для стороннего аудита, доработки и переиспользования отдельно от D2. Отдельно значим акцент на агентных сценариях: TALA явно спроектирован так, чтобы ИИ-модели могли задавать часть раскладки координатами, а сложную геометрию связей оставлять алгоритму, это конкретный пример того, как разработчики инструментов подстраивают архитектуру под работу с ИИ-агентами.

Кому это важно

Разработчикам и командам, которые уже используют D2 для архитектурных и системных диаграмм, у них появляется больше контроля и прозрачности над тем, как строится раскладка. Авторам инструментов и агентов, генерирующих диаграммы через ИИ, гибридный режим TALA (часть узлов вручную, часть автоматически) прямо адресован таким сценариям. Контрибьюторам open source, код теперь можно изучать, форкать и дополнять.

Как это применить

TALA бесплатна и уже входит в D2 версии 0.9.0: достаточно установить D2 и указать флаг --layout=tala, чтобы включить именно этот движок раскладки вместо Dagre или ELK по умолчанию. Проверить эффект без установки можно в браузере на play.d2lang.com, который рендерит диаграммы полностью на стороне клиента. Для гибридных сценариев можно вручную закрепить координаты и размеры только у части узлов (например, задать конкретную форму группы элементов), а остальную раскладку, включая контейнеры, доверить TALA.

Можно ли доверять

Источник, официальный блог Terrastruct, компании-разработчика D2 и TALA, пост написан от первого лица создателем алгоритма; конкретное имя автора в самом тексте не названо. Материал технический, без маркетинговых преувеличений: автор прямо перечисляет не только сильные стороны TALA, но и её ограничения и компромиссы по сравнению с существующими движками Dagre и ELK, а тестовые примеры первой группы называет невыбранными вручную специально в пользу TALA, это повышает доверие к описанию.

Риски и подводные камни

Рандомизация в алгоритме означает, что небольшое изменение диаграммы (добавление одного узла) может привести к совершенно другой раскладке, в отличие от Dagre и ELK, где прежняя структура в целом сохраняется. Для классических DAG-графов, растущих в одном направлении, TALA по признанию самого автора уступает Dagre и ELK. На больших диаграммах время работы TALA растёт нелинейно, то есть с ростом сложности схемы производительность может просесть заметнее, чем у конкурирующих движков; точных цифр в самом посте не приведено, только ссылка на отдельный бенчмарк-репозиторий.

«Добавьте всего один узел, и диаграмма может выглядеть совершенно по-другому. У Dagre и ELK раскладка в этом случае почти не меняется: новый узел просто вписывается в прежнюю картину.»

— разработчик TALA, блог Terrastruct