Що перевіряється перед публікацією флоу

Перевірки графа й налаштувань кожного вузла, які з них зупиняють публікацію і яке повідомлення конструктор показує для кожної.

Перевірити й Опублікувати перевіряють чернетку флоу, перш ніж вона зможе виконуватися. Кожна знайдена проблема прив’язана до вузла або до всього графа, і конструктор показує її на вузлі та на початку панелі вузла. Ця сторінка перелічує всі перевірки з повідомленням, яке для кожної показує конструктор.

Два види перевірок

  • Перевірка графа стосується форми флоу: один вхідний вузол, під’єднані порти, відсутність циклів, моделі й пули, які називає вузол. Кожна має свій код.

  • Перевірка налаштувань вузла стосується конфігурації одного вузла: надто довга затримка, шлях, який нічого не читає. Усі вони приходять під одним кодом графа, invalid_node_config, і кажуть, яка перевірка не пройшла.

Що зупиняє публікацію

Проблема — це error або warning. Помилка зупиняє публікацію: нічого не публікується, доки її не виправлять. Попередження — ні: воно каже, що флоу працюватиме не так, як ви, можливо, чекаєте, — вузол моделі без гілки помилки, пул без підключення, яке може обслужити модель.

В API той самий список — error.details.issues публікації, відхиленої з 422 і кодом flow_invalid, — Публікація, версії та відкат. Відкат знову перевіряє лише моделі й пули версії.

Перевірки графа

В API запис issues несе такий код у code, а severity каже, чи заважає він публікації: error заважає, warning — ні.

КодРівеньПовідомлення в конструкторі
invalid_graph_shapeerrorУ графі значення неправильного типу за шляхом {path}: там очікується {expected}.
duplicate_node_keyerrorКлюч «{node}» використовує більше ніж один вузол.
invalid_node_keyerrorКлюч «{node}» має бути завдовжки від 1 до {max} символів: малі латинські літери, цифри, підкреслення та дефіси.
unknown_node_typeerrorУ «{node}» невідомий тип ({type}).
node_type_not_supportederrorТип {type} вузла «{node}» поки не можна опублікувати.
node_type_frozenerrorТип {type} вузла «{node}» заморожено: флоу, опубліковані з ним, і далі працюють, але нова версія не може його містити. Видаліть вузол, щоб опублікувати.
no_entry_nodeerrorУ флоу немає вхідного вузла, з якого він починається.
multiple_entry_nodeserrorВхідний вузол може бути лише один — «{node}» один із кількох.
unknown_edge_sourceerrorЗвʼязок починається в «{node}», якого не існує.
unknown_edge_targeterrorЗвʼязок із «{node}» вказує на «{target}», якого не існує.
unknown_porterrorУ «{node}» немає гілки «{port}».
duplicate_port_edgeerrorУ гілки «{port}» вузла «{node}» більше ніж один звʼязок.
port_not_connectederrorГілка «{port}» вузла «{node}» нікуди не веде.
error_port_not_connectedwarningУ «{node}» немає гілки помилки — помилка провайдера завалить усю операцію.
deny_port_not_connectedwarningУ «{node}» немає гілки відмови — відмова повернеться викликачу як 402 або 403, а не піде гілкою.
cycle_detectederrorЗвʼязок повертається назад у «{node}» — флоу має йти вперед.
unreachable_nodewarningДо «{node}» не можна дійти від вхідного вузла.
path_without_terminalerrorШлях через «{node}» закінчується без відповіді й без відмови.
invalid_node_configerror«{node}» налаштовано неправильно.
unknown_modelerrorМоделі {model} вузла «{node}» немає в каталозі.
unknown_poolerrorПул вузла «{node}» не існує.
pool_provider_mismatcherrorПул вузла «{node}» обслуговує {serves}, а моделі потрібен {needs}.
pool_without_connectionswarningУ пулі вузла «{node}» немає жодного увімкненого підключення.
pool_cannot_serve_modelwarningЖодне увімкнене підключення в пулі вузла «{node}» не може обслужити {model} — кожен виклик завершиться помилкою, доки таке не зʼявиться.
pool_disabledwarningПул вузла «{node}» вимкнено — кожен виклик завершиться помилкою, доки його не ввімкнуть.
park_inside_finance_chainerror«{node}» резервує бюджет, але чекає до виклику моделі — запуск, що чекає, не тримає резерв.
misplaced_finance_nodeerror«{node}» ({type}) не входить у коректний ланцюг оцінка → перевірка → резерв → модель → списання.
ambiguous_finance_chainerror«{node}» ({type}) веде більше ніж до однієї моделі — оцінка, перевірка й резерв належать до шляху рівно одного виклику моделі.
cache_write_without_lookupwarningНад «{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_allowedUrl вузла «{node}» відсутній у списку дозволених (дозволені: {hosts}).
http_scheme_not_https«{node}» має викликати https.
http_port_not_allowed«{node}» може викликати лише порт 443.
http_url_has_credentialsUrl вузла «{node}» містить облікові дані.
http_host_is_address_literal«{node}» має викликати імʼя хоста, а не адресу.
http_url_unparseableUrl вузла «{node}» неможливо розібрати.
http_url_bad_placeholderВ url вузла «{node}» є підстановка, яка не називає значення у вхідних даних, контексті або виході вузла, — виклик падав би під час кожного запуску.
http_url_unknown_nodeUrl вузла «{node}» читає «{path}», але вузла «{ref}» у флоу немає.
http_url_later_nodeUrl вузла «{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