Що перевіряється перед публікацією флоу
Перевірки графа й налаштувань кожного вузла, які з них зупиняють публікацію і яке повідомлення конструктор показує для кожної.
Перевірити й Опублікувати перевіряють чернетку флоу, перш ніж вона зможе виконуватися. Кожна знайдена проблема прив’язана до вузла або до всього графа, і конструктор показує її на вузлі та на початку панелі вузла. Ця сторінка перелічує всі перевірки з повідомленням, яке для кожної показує конструктор.
Два види перевірок
Перевірка графа стосується форми флоу: один вхідний вузол, під’єднані порти, відсутність циклів, моделі й пули, які називає вузол. Кожна має свій код.
Перевірка налаштувань вузла стосується конфігурації одного вузла: надто довга затримка, шлях, який нічого не читає. Усі вони приходять під одним кодом графа,
invalid_node_config, і кажуть, яка перевірка не пройшла.
Що зупиняє публікацію
Проблема — це error або warning. Помилка зупиняє публікацію: нічого не публікується, доки її не виправлять. Попередження — ні: воно каже, що флоу працюватиме не так, як ви, можливо, чекаєте, — вузол моделі без гілки помилки, пул без підключення, яке може обслужити модель.
В API той самий список — error.details.issues публікації, відхиленої з 422 і кодом flow_invalid, — Публікація, версії та відкат. Відкат знову перевіряє лише моделі й пули версії.
Перевірки графа
В API запис issues несе такий код у code, а severity каже, чи заважає він публікації: error заважає, warning — ні.
| Код | Рівень | Повідомлення в конструкторі |
|---|---|---|
invalid_graph_shape | error | У графі значення неправильного типу за шляхом {path}: там очікується {expected}. |
duplicate_node_key | error | Ключ «{node}» використовує більше ніж один вузол. |
invalid_node_key | error | Ключ «{node}» має бути завдовжки від 1 до {max} символів: малі латинські літери, цифри, підкреслення та дефіси. |
unknown_node_type | error | У «{node}» невідомий тип ({type}). |
node_type_not_supported | error | Тип {type} вузла «{node}» поки не можна опублікувати. |
node_type_frozen | error | Тип {type} вузла «{node}» заморожено: флоу, опубліковані з ним, і далі працюють, але нова версія не може його містити. Видаліть вузол, щоб опублікувати. |
no_entry_node | error | У флоу немає вхідного вузла, з якого він починається. |
multiple_entry_nodes | error | Вхідний вузол може бути лише один — «{node}» один із кількох. |
unknown_edge_source | error | Звʼязок починається в «{node}», якого не існує. |
unknown_edge_target | error | Звʼязок із «{node}» вказує на «{target}», якого не існує. |
unknown_port | error | У «{node}» немає гілки «{port}». |
duplicate_port_edge | error | У гілки «{port}» вузла «{node}» більше ніж один звʼязок. |
port_not_connected | error | Гілка «{port}» вузла «{node}» нікуди не веде. |
error_port_not_connected | warning | У «{node}» немає гілки помилки — помилка провайдера завалить усю операцію. |
deny_port_not_connected | warning | У «{node}» немає гілки відмови — відмова повернеться викликачу як 402 або 403, а не піде гілкою. |
cycle_detected | error | Звʼязок повертається назад у «{node}» — флоу має йти вперед. |
unreachable_node | warning | До «{node}» не можна дійти від вхідного вузла. |
path_without_terminal | error | Шлях через «{node}» закінчується без відповіді й без відмови. |
invalid_node_config | error | «{node}» налаштовано неправильно. |
unknown_model | error | Моделі {model} вузла «{node}» немає в каталозі. |
unknown_pool | error | Пул вузла «{node}» не існує. |
pool_provider_mismatch | error | Пул вузла «{node}» обслуговує {serves}, а моделі потрібен {needs}. |
pool_without_connections | warning | У пулі вузла «{node}» немає жодного увімкненого підключення. |
pool_cannot_serve_model | warning | Жодне увімкнене підключення в пулі вузла «{node}» не може обслужити {model} — кожен виклик завершиться помилкою, доки таке не зʼявиться. |
pool_disabled | warning | Пул вузла «{node}» вимкнено — кожен виклик завершиться помилкою, доки його не ввімкнуть. |
park_inside_finance_chain | error | «{node}» резервує бюджет, але чекає до виклику моделі — запуск, що чекає, не тримає резерв. |
misplaced_finance_node | error | «{node}» ({type}) не входить у коректний ланцюг оцінка → перевірка → резерв → модель → списання. |
ambiguous_finance_chain | error | «{node}» ({type}) веде більше ніж до однієї моделі — оцінка, перевірка й резерв належать до шляху рівно одного виклику моделі. |
cache_write_without_lookup | warning | Над «{node}» немає вузла пошуку в кеші, тому він нічого не збереже. |
node_type_frozenвідхиляє HTTP-запит, який заморожено, якщо сервіс не налаштовано інакше. Версія, опублікована з ним, і далі працює — HTTP-запит.misplaced_finance_node,ambiguous_finance_chainіpark_inside_finance_chainстосуються фінансового ланцюжка — вузлів, які стоять довкола виклику AI-модель. Що питає кожна з цих перевірок, каже стаття Фінансовий ланцюжок.cache_write_without_lookup— попередження: Запис у кеш без Пошук у кеші вище нічого не зберігає.
Перевірки налаштувань вузла
В API запис issues називає таку перевірку в params.detail; його code — invalid_node_config.
| Перевірка | Повідомлення в конструкторі |
|---|---|
queue_invalid_delay | Затримка «{node}» має бути цілим числом секунд, не менше 1. |
queue_delay_too_long | Затримка «{node}» довша, ніж зберігається виконання, що очікує: не більше {max} секунд. |
require_approval_invalid_expires_hours | Строк рішення «{node}» має бути цілим числом годин, не менше 1. |
require_approval_expires_too_late | Строк рішення «{node}» довший, ніж зберігається виконання, що очікує: не більше {max} год. |
cache_unsupported_scope | «{node}» використовує неіснуючу область кешу. |
cache_key_fields_not_list | Поля ключа «{node}» мають бути списком шляхів у вхідних даних. |
cache_key_fields_empty_entry | Одне з полів ключа «{node}» порожнє. |
cache_key_fields_rooted_path | «{node}» будує ключ кешу за «{path}», але поля ключа читаються лише всередині вхідних даних: шлях там не починається з «{root}». |
cache_key_fields_padded_path | «{node}» будує ключ кешу за «{path}», а шлях має пробіли по краях: поля ключа читаються саме так, як написані. |
cache_invalid_ttl | Час життя «{node}» має бути цілим числом секунд, не менше 1. |
ai_model_needs_model | Вузлу «{node}» потрібна модель. |
ai_model_invalid_pool_id | Пул вузла «{node}» має бути заданий своїм ідентифікатором — текстом. |
ai_model_invalid_max_output_tokens | Ліміт вихідних токенів «{node}» має бути цілим числом, не менше 1. |
ai_model_invalid_max_attempts | Ліміт спроб «{node}» має бути цілим числом від 1 до {max}. |
ai_model_invalid_temperature | Температура «{node}» має бути числом від {min} до {max}. |
ai_model_unsupported_on_rate_limit | «{node}» використовує неіснуючу поведінку при ліміті запитів. |
ai_model_unsupported_on_provider_error | «{node}» використовує неіснуючу поведінку при помилці провайдера. |
ai_model_tools_not_list | Інструменти «{node}» мають бути непорожнім списком. |
ai_model_unusable_tool | У «{node}» є інструмент, який не є ані іменованою функцією, ані типізованим інструментом провайдера. |
ai_model_invalid_response_format | Формат відповіді «{node}» має бути обʼєктом із полем type. |
ai_model_unsupported_on_overrun | «{node}» використовує неіснуючу політику перевитрати. |
ai_model_invalid_overrun_tolerance | Допуск перевитрати «{node}» має бути між {min} і {max}. |
ai_model_needs_degrade_model | «{node}» знижує модель при перевитраті, але не вказує, на яку. |
ai_model_degrades_to_same_model | «{node}» знижує до моделі, яку вже використовує. |
condition_needs_field | Вузлу «{node}» потрібне поле для перевірки. |
condition_field_bad_path | «{node}» перевіряє «{path}» — це не шлях у вхідні дані, контекст або вузли. |
condition_field_unknown_node | «{node}» перевіряє «{path}», але вузла «{ref}» у флоу немає. |
condition_field_later_node | «{node}» перевіряє «{path}», але «{ref}» не виконується раніше за нього — його виходу там ще немає. |
condition_unsupported_operator | «{node}» використовує неіснуючий оператор. |
condition_needs_value | Вузлу «{node}» потрібне значення для порівняння. |
condition_value_not_number | Значення вузла «{node}» має бути числом: його оператор ({operator}) порівнює числа. |
condition_value_not_list | Значення вузла «{node}» має бути непорожнім списком: його оператор перевіряє, що поле входить до списку. |
reject_needs_error_code | Вузлу «{node}» потрібен код помилки. |
reject_invalid_error_code | Код помилки «{node}» має бути завдовжки від 1 до {max} символів: малі латинські літери, цифри, крапки та підкреслення. |
reject_invalid_message | Повідомлення «{node}» має бути текстом не довше {max} символів. |
return_unsupported_source | «{node}» відповідає з джерела, якого не існує. |
return_literal_not_object | «{node}» відповідає фіксованим значенням, і це значення має бути обʼєктом. |
return_needs_node | «{node}» відповідає виходом вузла і має назвати інший вузол флоу. |
return_unknown_node | «{node}» відповідає виходом вузла «{ref}», але вузла «{ref}» у флоу немає. |
return_terminal_node | «{node}» відповідає виходом вузла «{ref}», але «{ref}» сам завершує флоу і ніколи не виконується раніше за цю відповідь. Назвіть вузол, який виконується раніше. |
log_unsupported_level | «{node}» використовує рівень, якого не існує. |
log_invalid_message | Повідомлення «{node}» має бути текстом не довше {max} символів. |
transform_needs_field | Вузлу «{node}» потрібне хоча б одне поле для збирання. |
transform_too_many_fields | «{node}» збирає більше ніж {max} полів. |
transform_field_not_object | У «{node}» є поле, яке не є обʼєктом. |
transform_field_without_name | У «{node}» є поле без придатної назви: спочатку латинська літера або підкреслення, далі літери, цифри й підкреслення, не довше 64 символів. |
transform_field_both_sources | У поля «{field}» вузла «{node}» вказано і шлях, і фіксоване значення. |
transform_field_without_source | Полю «{field}» вузла «{node}» потрібен або шлях, або фіксоване значення. |
transform_field_bad_path | Поле «{field}» вузла «{node}» читає «{path}» — це не шлях у вхідні дані, контекст або вузли. |
transform_field_repeated | «{node}» збирає поле «{field}» більше одного разу. |
transform_field_unknown_node | Поле «{field}» вузла «{node}» читає «{path}», але вузла «{ref}» у флоу немає. |
transform_field_later_node | Поле «{field}» вузла «{node}» читає «{path}», але «{ref}» не виконується раніше за нього. |
budget_check_unsupported_mode | «{node}» використовує неіснуючий режим бюджету. |
budget_check_unsupported_window | «{node}» використовує неіснуюче вікно бюджету. |
budget_check_invalid_default_limit | Ліміт за замовчуванням «{node}» — недопустима сума. |
budget_check_allocations_not_list | Алокації «{node}» мають бути списком. |
budget_check_needs_allocation | Вузлу «{node}» потрібна хоча б одна алокація або ліміт за замовчуванням. |
budget_check_allocation_not_object | У «{node}» є алокація, яка не є обʼєктом. |
budget_check_allocation_without_model | У «{node}» є алокація без обраної моделі. |
budget_check_duplicate_model | «{node}» виділяє бюджет на {model} двічі. |
budget_check_invalid_limit | Ліміт для {model} на «{node}» — недопустима сума. |
budget_check_unknown_model | Моделі {model} немає в каталозі. |
http_needs_url | Вузлу «{node}» потрібен url. |
http_templated_host | «{node}» не може підставляти хост через шаблон. |
http_egress_not_configured | «{node}» не може викликати назовні: не налаштовано жодного вихідного хоста. |
http_host_not_allowed | Url вузла «{node}» відсутній у списку дозволених (дозволені: {hosts}). |
http_scheme_not_https | «{node}» має викликати https. |
http_port_not_allowed | «{node}» може викликати лише порт 443. |
http_url_has_credentials | Url вузла «{node}» містить облікові дані. |
http_host_is_address_literal | «{node}» має викликати імʼя хоста, а не адресу. |
http_url_unparseable | Url вузла «{node}» неможливо розібрати. |
http_url_bad_placeholder | В url вузла «{node}» є підстановка, яка не називає значення у вхідних даних, контексті або виході вузла, — виклик падав би під час кожного запуску. |
http_url_unknown_node | Url вузла «{node}» читає «{path}», але вузла «{ref}» у флоу немає. |
http_url_later_node | Url вузла «{node}» читає «{path}», але «{ref}» не виконується раніше за нього. |
http_unsupported_method | «{node}» використовує непідтримуваний метод. |
http_headers_not_map | Заголовки «{node}» мають бути набором пар «імʼя — значення». |
http_too_many_headers | «{node}» задає більше ніж {max} заголовків. |
http_header_unusable_name | У «{node}» є заголовок із недопустимим імʼям. |
http_header_forbidden | «{node}» не може задавати «{header}»: граф зберігається відкритим текстом, тому такі дані не залишаться секретом. |
http_header_needs_value | Заголовку «{header}» вузла «{node}» потрібне текстове значення. |
http_invalid_timeout | «{node}» може чекати від 1 до {max} секунд. |
http_invalid_max_bytes | «{node}» може прочитати не більше ніж {max} байт. |
http_invalid_body_from | Шлях тіла запиту «{node}» має вказувати всередину виконання. |
http_body_from_unknown_node | Тіло запиту «{node}» читається з «{path}», але вузла «{ref}» у флоу немає. |
http_body_from_later_node | Тіло запиту «{node}» читається з «{path}», але «{ref}» не виконується раніше за нього. |
Стаття кожного вузла перелічує перевірки його власних налаштувань у розділі «Помилки».
Що читати далі
Конструктор флоу — Перевірити, Опублікувати й панель вузла.
Як побудовано флоу — що має бути в кожному флоу.
Порти й розгалуження — обов’язкові порти й попередження про необов’язкові.
Контекст виконання та шляхи — що може читати шлях у налаштуваннях вузла.
Зібрано з openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d